5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
43
44 implicit none
45
46
47
48 logical, intent(out) :: update
49
50 integer, intent(in) :: ng, model, ifield
51 integer, intent(in) :: LBi, UBi, UBj, Istr, Iend, Jrec
52
53 real(r8), intent(in) :: Finp(LBi:UBi,UBj,2)
54
55 real(r8), intent(out) :: Fout(LBi:UBi,UBj)
56
57
58
59 logical :: Lonerec
60
61 integer :: Tindex, i, it1, it2, j
62
63 real(dp) :: SecScale, fac, fac1, fac2
64
65
66
67
68
69
70
71 lonerec=
linfo(3,ifield,ng)
72 tindex=
iinfo(8,ifield,ng)
73 update=.true.
74
75
76
77
78
79 secscale=1000.0_dp
80 it1=3-tindex
81 it2=tindex
82 fac1=anint((
tintrp(it2,ifield,ng)-
time(ng))*secscale,dp)
83 fac2=anint((
time(ng)-
tintrp(it1,ifield,ng))*secscale,dp)
84
85
86
87 IF (lonerec) THEN
88 DO j=1,jrec
89 DO i=istr,iend
90 fout(i,j)=finp(i,j,tindex)
91 END DO
92 END DO
93
94
95
96 ELSE IF (((fac1*fac2).ge.0.0_dp).and.(fac1+fac2).gt.0.0_dp) THEN
97 fac=1.0_dp/(fac1+fac2)
98 fac1=fac*fac1
99 fac2=fac*fac2
100 DO j=1,jrec
101 DO i=istr,iend
102 fout(i,j)=fac1*finp(i,j,it1)+fac2*finp(i,j,it2)
103 END DO
104 END DO
105
106
107
108
111 END IF
112
113
114
115 ELSE
124 END IF
125 10 FORMAT (/,' SET_NGFLD - current model time', &
126 & ' exceeds ending value for variable: ',a, &
127 & /,14x,'TDAYS = ',f15.4, &
128 & /,14x,'Data Tmin = ',f15.4,2x,'Data Tmax = ',f15.4, &
129 & /,14x,'Data Tstr = ',f15.4,2x,'Data Tend = ',f15.4, &
130 & /,14x,'TINTRP1 = ',f15.4,2x,'TINTRP2 = ',f15.4, &
131 & /,14x,'FAC1 = ',f15.4,2x,'FAC2 = ',f15.4)
133 update=.false.
134 END IF
135 RETURN
logical, dimension(:,:,:), allocatable linfo
real(dp), dimension(:,:,:), allocatable tintrp
real(dp), dimension(:,:,:), allocatable finfo
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:,:,:), allocatable iinfo
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable synchro_flag
real(dp), dimension(:), allocatable tdays
real(dp), parameter sec2day
real(dp), dimension(:), allocatable time