26
27
33
35# ifdef DISTRIBUTE
37# endif
39
40
41
42 logical, intent(in), optional :: SetBC
43
44 logical, intent(out) :: update
45
46 integer, intent(in) :: ng, tile, model, ifield
47 integer, intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
48
49# ifdef ASSUMED_SHAPE
50 real(r8), intent(in) :: Finp(LBi:,LBj:,LBk:,:)
51 real(r8), intent(out) :: Fout(LBi:,LBj:,LBk:)
52# else
53 real(r8), intent(in) :: Finp(LBi:UBi,LBj:UBj,LBk:UBk,2)
54 real(r8), intent(out) :: Fout(LBi:UBi,LBj:UBj,LBk:UBk)
55# endif
56
57
58
59 logical :: LapplyBC, Lgrided, Lonerec
60
61 integer :: Tindex, gtype, i, it1, it2, j, k
62
63 real(dp) :: SecScale, fac, fac1, fac2
64 real(r8) :: Fval
65
66 character (len=22) :: DateString1, DateString2
67
68# include "set_bounds.h"
69
70
71
72
73
74
75
76 IF (PRESENT(setbc)) THEN
77 lapplybc=setbc
78 ELSE
79 lapplybc=.true.
80 END IF
81
82
83
84 lgrided=
linfo(1,ifield,ng)
85 lonerec=
linfo(3,ifield,ng)
86 gtype =
iinfo(1,ifield,ng)
87 tindex =
iinfo(8,ifield,ng)
88 update=.true.
89
90
91
92
93
94 secscale=1000.0_dp
95 it1=3-tindex
96 it2=tindex
97 fac1=anint((
time(ng)-
tintrp(it2,ifield,ng))*secscale,r8)
98 fac2=anint((
tintrp(it1,ifield,ng)-
time(ng))*secscale,r8)
99
100
101
102
103
104 IF (lonerec) THEN
105 IF (lgrided) THEN
106 DO k=lbk,ubk
107 DO j=jstrr,jendr
108 DO i=istrr,iendr
109 fout(i,j,k)=finp(i,j,k,tindex)
110 END DO
111 END DO
112 END DO
113 ELSE
114 fval=
fpoint(tindex,ifield,ng)
115 DO k=lbk,ubk
116 DO j=jstrr,jendr
117 DO i=istrr,iendr
118 fout(i,j,k)=fval
119 END DO
120 END DO
121 END DO
122 END IF
123
124
125
126 ELSE IF (((fac1*fac2).ge.0.0_dp).and. &
127 & ((fac1+fac2).gt.0.0_dp)) THEN
128 fac=1.0_dp/(fac1+fac2)
129 fac1=fac*fac1
130 fac2=fac*fac2
131 IF (lgrided) THEN
132 DO k=lbk,ubk
133 DO j=jstrr,jendr
134 DO i=istrr,iendr
135 fout(i,j,k)=fac1*finp(i,j,k,it1)+fac2*finp(i,j,k,it2)
136 END DO
137 END DO
138 END DO
139 ELSE
140 fval=fac1*
fpoint(it1,ifield,ng)+fac2*
fpoint(it2,ifield,ng)
141 DO k=lbk,ubk
142 DO j=jstrr,jendr
143 DO i=istrr,iendr
144 fout(i,j,k)=fval
145 END DO
146 END DO
147 END DO
148 END IF
149
150
151
152
155 END IF
156
157
158
159 ELSE
160 IF (
domain(ng)%SouthWest_Test(tile))
THEN
169 END IF
170 10 FORMAT (/,' SET_3DFLDR - current model time', &
171 & ' exceeds ending value for variable: ',a, &
172 & /,14x,'TDAYS = ',f15.4, &
173 & /,14x,'Data Tmin = ',f15.4,2x,'Data Tmax = ',f15.4, &
174 & /,14x,'Data Tstr = ',f15.4,2x,'Data Tend = ',f15.4, &
175 & /,14x,'TINTRP1 = ',f15.4,2x,'TINTRP2 = ',f15.4, &
176 & /,14x,'FAC1 = ',f15.4,2x,'FAC2 = ',f15.4)
178 update=.false.
179 END IF
180 END IF
181
182
183
184 IF (update) THEN
188 & lbi, ubi, lbj, ubj, lbk, ubk, &
189 & fout)
190 ELSE IF (gtype.eq.
u3dvar)
THEN
192 & lbi, ubi, lbj, ubj, lbk, ubk, &
193 & fout)
194 ELSE IF (gtype.eq.
v3dvar)
THEN
196 & lbi, ubi, lbj, ubj, lbk, ubk, &
197 & fout)
198 ELSE IF (gtype.eq.
w3dvar)
THEN
200 & lbi, ubi, lbj, ubj, lbk, ubk, &
201 & fout)
202 END IF
203 END IF
204
205# ifdef DISTRIBUTE
206 IF (.not.lapplybc) THEN
208 & lbi, ubi, lbj, ubj, lbk, ubk, &
210 & .false., .false., &
211 & fout)
212 ELSE
214 & lbi, ubi, lbj, ubj, lbk, ubk, &
217 & fout)
218 END IF
219# endif
220 END IF
221
222 RETURN
subroutine, public time_string(mytime, date_string)
subroutine exchange_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
logical, dimension(:,:,:), allocatable linfo
real(dp), dimension(:,:,:), allocatable tintrp
real(dp), dimension(:,:,:), allocatable fpoint
real(dp), dimension(:,:,:), allocatable finfo
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:,:,:), allocatable iinfo
integer, parameter r3dvar
integer, parameter u3dvar
type(t_domain), dimension(:), allocatable domain
integer, parameter w3dvar
integer, parameter v3dvar
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:), allocatable synchro_flag
real(dp), dimension(:), allocatable tdays
real(dp), parameter sec2day
real(dp), dimension(:), allocatable time
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)