104# else
105 & f_ubarg, f_vbarg)
106# endif
107
108
113
114
115
116 integer, intent(in) :: ng, tile
117 integer, intent(in) :: LBi, UBi, LBj, UBj
118 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
119
120# ifdef ASSUMED_SHAPE
121 real(r8), intent(in) :: ad_zeta(LBi:,LBj:,:)
122 real(r8), intent(in) :: ad_zeta_sol(LBi:,LBj:)
123 real(r8), intent(inout) :: f_zetaG(LBi:,LBj:,:)
124# ifdef SOLVE3D
125 real(r8), intent(in) :: ad_u(LBi:,LBj:,:,:)
126 real(r8), intent(in) :: ad_v(LBi:,LBj:,:,:)
127 real(r8), intent(in) :: ad_t(LBi:,LBj:,:,:,:)
128 real(r8), intent(inout) :: f_uG(LBi:,LBj:,:,:)
129 real(r8), intent(inout) :: f_vG(LBi:,LBj:,:,:)
130 real(r8), intent(inout) :: f_tG(LBi:,LBj:,:,:,:)
131# else
132 real(r8), intent(in) :: ad_ubar(LBi:,LBj:,:)
133 real(r8), intent(in) :: ad_vbar(LBi:,LBj:,:)
134 real(r8), intent(in) :: ad_ubar_sol(LBi:,LBj:)
135 real(r8), intent(inout) :: ad_vbar_sol(LBi:,LBj:)
136 real(r8), intent(inout) :: f_ubarG(LBi:,LBj:,:)
137 real(r8), intent(inout) :: f_vbarG(LBi:,LBj:,:)
138# endif
139# else
140 real(r8), intent(in) :: ad_zeta(LBi:UBi,LBj:UBj,:)
141 real(r8), intent(in) :: ad_zeta_sol(LBi:UBi,LBj:UBj)
142 real(r8), intent(inout) :: f_zetaG(LBi:UBi,LBj:UBj,2)
143# ifdef SOLVE3D
144 real(r8), intent(in) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
145 real(r8), intent(in) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
146 real(r8), intent(in) :: ad_t(LBi:UBi,LBj:UBj,N(ng),2,NT(ng))
147 real(r8), intent(inout) :: f_uG(LBi:UBi,LBj:UBj,N(ng),2)
148 real(r8), intent(inout) :: f_vG(LBi:UBi,LBj:UBj,N(ng),2)
149 real(r8), intent(inout) :: f_tG(LBi:UBi,LBj:UBj,N(ng),2,NT(ng))
150# else
151 real(r8), intent(in) :: ad_ubar(LBi:UBi,LBj:UBj,:)
152 real(r8), intent(in) :: ad_vbar(LBi:UBi,LBj:UBj,:)
153 real(r8), intent(in) :: ad_ubar_sol(LBi:UBi,LBj:UBj)
154 real(r8), intent(in) :: ad_vbar_sol(LBi:UBi,LBj:UBj)
155 real(r8), intent(inout) :: f_ubarG(LBi:UBi,LBj:UBj,2)
156 real(r8), intent(inout) :: f_vbarG(LBi:UBi,LBj:UBj,2)
157# endif
158# endif
159
160
161
162 integer :: i, it1, it2, j, k, kout
163# ifdef SOLVE3D
164 integer :: itrc, nout
165# endif
166 real(r8) :: fac, fac1, fac2, time1, time2
167
168# include "set_bounds.h"
169
170
171
172
173
174
175
176
177
178# ifdef WEAK_NOINTERP
179# ifdef GENERIC_DSTART
181# else
182 it1=max(0,(
iic(ng)-1)/
nadj(ng))+1
183# endif
184 it2=it1+1
186# else
187# ifdef GENERIC_DSTART
189# else
190 it1=max(0,(
iic(ng)-1)/
nadj(ng))+1
191# endif
192 it2=it1+1
197 fac=1.0_r8/(fac1+fac2)
198 fac1=fac*fac1
199 fac2=fac*fac2
200# endif
201
202
203
205
206
207
209
210# ifdef SOLVE3D
213 ELSE
215 END IF
216# endif
217
218
219
221 DO j=jstrr,jendr
222 DO i=istrr,iendr
223 f_zetag(i,j,1)=0.0_r8
224 f_zetag(i,j,2)=0.0_r8
225 END DO
226 END DO
227# ifndef SOLVE3D
228 DO j=jstrr,jendr
229 DO i=istr,iendr
230 f_ubarg(i,j,1)=0.0_r8
231 f_ubarg(i,j,2)=0.0_r8
232 END DO
233 END DO
234 DO j=jstr,jendr
235 DO i=istrr,iendr
236 f_vbarg(i,j,1)=0.0_r8
237 f_vbarg(i,j,2)=0.0_r8
238 END DO
239 END DO
240# else
242 DO j=jstrr,jendr
243 DO i=istr,iendr
244 f_ug(i,j,k,1)=0.0_r8
245 f_ug(i,j,k,2)=0.0_r8
246 END DO
247 END DO
248 END DO
250 DO j=jstr,jendr
251 DO i=istrr,iendr
252 f_vg(i,j,k,1)=0.0_r8
253 f_vg(i,j,k,2)=0.0_r8
254 END DO
255 END DO
256 END DO
259 DO j=jstrr,jendr
260 DO i=istrr,iendr
261 f_tg(i,j,k,1,itrc)=0.0_r8
262 f_tg(i,j,k,2,itrc)=0.0_r8
263 END DO
264 END DO
265 END DO
266 END DO
267# endif
268 END IF
269
270
271
273 DO j=jstrr,jendr
274 DO i=istrr,iendr
275# ifdef WEAK_NOINTERP
276 f_zetag(i,j,1)=ad_zeta(i,j,kout)
277 f_zetag(i,j,2)=ad_zeta(i,j,kout)
278# else
279 f_zetag(i,j,1)=f_zetag(i,j,1)+fac1*ad_zeta(i,j,kout)
280 f_zetag(i,j,2)=f_zetag(i,j,2)+fac2*ad_zeta(i,j,kout)
281# endif
282 END DO
283 END DO
284 ELSE
285 DO j=jstrr,jendr
286 DO i=istrr,iendr
287# ifdef WEAK_NOINTERP
288 f_zetag(i,j,1)=ad_zeta_sol(i,j)
289 f_zetag(i,j,2)=ad_zeta_sol(i,j)
290# else
291 f_zetag(i,j,1)=f_zetag(i,j,1)+fac1*ad_zeta_sol(i,j)
292 f_zetag(i,j,2)=f_zetag(i,j,2)+fac2*ad_zeta_sol(i,j)
293# endif
294 END DO
295 END DO
296 END IF
297
298# ifndef SOLVE3D
299
300
301
303 DO j=jstrr,jendr
304 DO i=istr,iendr
305# ifdef WEAK_NOINTERP
306 f_ubarg(i,j,1)=ad_ubar(i,j,kout)
307 f_ubarg(i,j,2)=ad_ubar(i,j,kout)
308# else
309 f_ubarg(i,j,1)=f_ubarg(i,j,1)+fac1*ad_ubar(i,j,kout)
310 f_ubarg(i,j,2)=f_ubarg(i,j,2)+fac2*ad_ubar(i,j,kout)
311# endif
312 END DO
313 END DO
314 DO j=jstr,jendr
315 DO i=istrr,iendr
316# ifdef WEAK_NOINTERP
317 f_vbarg(i,j,1)=ad_vbar(i,j,kout)
318 f_vbarg(i,j,2)=ad_vbar(i,j,kout)
319# else
320 f_vbarg(i,j,1)=f_vbarg(i,j,1)+fac1*ad_vbar(i,j,kout)
321 f_vbarg(i,j,2)=f_vbarg(i,j,2)+fac2*ad_vbar(i,j,kout)
322# endif
323 END DO
324 END DO
325 ELSE
326 DO j=jstrr,jendr
327 DO i=istr,iendr
328# ifdef WEAK_NOINTERP
329 f_ubarg(i,j,1)=ad_ubar_sol(i,j)
330 f_ubarg(i,j,2)=ad_ubar_sol(i,j)
331# else
332 f_ubarg(i,j,1)=f_ubarg(i,j,1)+fac1*ad_ubar_sol(i,j)
333 f_ubarg(i,j,2)=f_ubarg(i,j,2)+fac2*ad_ubar_sol(i,j)
334# endif
335 END DO
336 END DO
337 DO j=jstr,jendr
338 DO i=istrr,iendr
339# ifdef WEAK_NOINTERP
340 f_vbarg(i,j,1)=ad_vbar_sol(i,j)
341 f_vbarg(i,j,2)=ad_vbar_sol(i,j)
342# else
343 f_vbarg(i,j,1)=f_vbarg(i,j,1)+fac1*ad_vbar_sol(i,j)
344 f_vbarg(i,j,2)=f_vbarg(i,j,2)+fac2*ad_vbar_sol(i,j)
345# endif
346 END DO
347 END DO
348 END IF
349# endif
350# ifdef SOLVE3D
351
352
353
355 DO j=jstrr,jendr
356 DO i=istr,iendr
357# ifdef WEAK_NOINTERP
358 f_ug(i,j,k,1)=ad_u(i,j,k,nout)
359 f_ug(i,j,k,2)=ad_u(i,j,k,nout)
360# else
361 f_ug(i,j,k,1)=f_ug(i,j,k,1)+fac1*ad_u(i,j,k,nout)
362 f_ug(i,j,k,2)=f_ug(i,j,k,2)+fac2*ad_u(i,j,k,nout)
363# endif
364 END DO
365 END DO
366 END DO
368 DO j=jstr,jendr
369 DO i=istrr,iendr
370# ifdef WEAK_NOINTERP
371 f_vg(i,j,k,1)=ad_v(i,j,k,nout)
372 f_vg(i,j,k,2)=ad_v(i,j,k,nout)
373# else
374 f_vg(i,j,k,1)=f_vg(i,j,k,1)+fac1*ad_v(i,j,k,nout)
375 f_vg(i,j,k,2)=f_vg(i,j,k,2)+fac2*ad_v(i,j,k,nout)
376# endif
377 END DO
378 END DO
379 END DO
380
381
382
385 DO j=jstrr,jendr
386 DO i=istrr,iendr
387# ifdef WEAK_NOINTERP
388 f_tg(i,j,k,1,itrc)=ad_t(i,j,k,nout,itrc)
389 f_tg(i,j,k,2,itrc)=ad_t(i,j,k,nout,itrc)
390# else
391 f_tg(i,j,k,1,itrc)=f_tg(i,j,k,1,itrc)+ &
392 & fac1*ad_t(i,j,k,nout,itrc)
393 f_tg(i,j,k,2,itrc)=f_tg(i,j,k,2,itrc)+ &
394 & fac2*ad_t(i,j,k,nout,itrc)
395# endif
396 END DO
397 END DO
398 END DO
399 END DO
400# endif
401
402 RETURN
real(r8), dimension(:), allocatable forcetime
integer, dimension(:), allocatable n
integer, dimension(:), allocatable nt
real(dp), parameter day2sec
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable dt
integer, dimension(:), allocatable ntend
logical, dimension(:), allocatable lwrtstate2d
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable ntstart
integer, dimension(:), allocatable nadj
integer, dimension(:), allocatable kstp
integer, dimension(:), allocatable nnew
integer, dimension(:), allocatable nstp