102
103
106# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
107 defined adjust_boundary
109# endif
110# ifdef ADJUST_BOUNDARY
112# endif
113
114
115
116 integer, intent(in) :: ng, tile
117 integer, intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
118 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
119 integer, intent(in) :: Linp, Lout
120
121# ifdef ASSUMED_SHAPE
122# ifdef ADJUST_BOUNDARY
123# ifdef SOLVE3D
124 real(r8), intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
125 real(r8), intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
126 real(r8), intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
127# endif
128 real(r8), intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
129 real(r8), intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
130 real(r8), intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
131# endif
132# ifdef ADJUST_WSTRESS
133 real(r8), intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
134 real(r8), intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
135# endif
136# ifdef SOLVE3D
137# ifdef ADJUST_STFLUX
138 real(r8), intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
139# endif
140 real(r8), intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
141 real(r8), intent(inout) :: tl_u(LBi:,LBj:,:,:)
142 real(r8), intent(inout) :: tl_v(LBi:,LBj:,:,:)
143# else
144 real(r8), intent(inout) :: tl_ubar(LBi:,LBj:,:)
145 real(r8), intent(inout) :: tl_vbar(LBi:,LBj:,:)
146# endif
147 real(r8), intent(inout) :: tl_zeta(LBi:,LBj:,:)
148# else
149# ifdef ADJUST_BOUNDARY
150# ifdef SOLVE3D
151 real(r8), intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
152 & Nbrec(ng),2,NT(ng))
153 real(r8), intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
154 real(r8), intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
155# endif
156 real(r8), intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
157 real(r8), intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
158 real(r8), intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
159# endif
160# ifdef ADJUST_WSTRESS
161 real(r8), intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
162 real(r8), intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
163# endif
164# ifdef SOLVE3D
165# ifdef ADJUST_STFLUX
166 real(r8), intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
167 & Nfrec(ng),2,NT(ng))
168# endif
169 real(r8), intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
170 real(r8), intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
171 real(r8), intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
172# else
173 real(r8), intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
174 real(r8), intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
175# endif
176 real(r8), intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
177# endif
178
179
180
181 integer :: i, ib, ir, j, k
182# ifdef SOLVE3D
183 integer :: itrc
184# endif
185
186# include "set_bounds.h"
187
188
189
190
191
192
193
194 DO j=jstrr,jendr
195 DO i=istrr,iendr
196 tl_zeta(i,j,lout)=tl_zeta(i,j,linp)+ &
197 & tl_zeta(i,j,lout)
198 END DO
199 END DO
200
201# ifdef ADJUST_BOUNDARY
202
203
204
208 &
domain(ng)%Western_Edge(tile))
THEN
210 DO j=jstr,jend
211 tl_zeta_obc(j,ib,ir,lout)=tl_zeta_obc(j,ib,ir,linp)+ &
212 & tl_zeta_obc(j,ib,ir,lout)
213 END DO
214 END IF
216 &
domain(ng)%Eastern_Edge(tile))
THEN
218 DO j=jstr,jend
219 tl_zeta_obc(j,ib,ir,lout)=tl_zeta_obc(j,ib,ir,linp)+ &
220 & tl_zeta_obc(j,ib,ir,lout)
221 END DO
222 END IF
224 &
domain(ng)%Southern_Edge(tile))
THEN
226 DO i=istr,iend
227 tl_zeta_obc(i,ib,ir,lout)=tl_zeta_obc(i,ib,ir,linp)+ &
228 & tl_zeta_obc(i,ib,ir,lout)
229 END DO
230 END IF
232 &
domain(ng)%Northern_Edge(tile))
THEN
234 DO i=istr,iend
235 tl_zeta_obc(i,ib,ir,lout)=tl_zeta_obc(i,ib,ir,linp)+ &
236 & tl_zeta_obc(i,ib,ir,lout)
237 END DO
238 END IF
239 END DO
240 END IF
241# endif
242
243# ifndef SOLVE3D
244
245
246
247 DO j=jstrr,jendr
248 DO i=istr,iendr
249 tl_ubar(i,j,lout)=tl_ubar(i,j,linp)+ &
250 & tl_ubar(i,j,lout)
251 END DO
252 END DO
253# endif
254
255# ifdef ADJUST_BOUNDARY
256
257
258
262 &
domain(ng)%Western_Edge(tile))
THEN
264 DO j=jstr,jend
265 tl_ubar_obc(j,ib,ir,lout)=tl_ubar_obc(j,ib,ir,linp)+ &
266 & tl_ubar_obc(j,ib,ir,lout)
267 END DO
268 END IF
270 &
domain(ng)%Eastern_Edge(tile))
THEN
272 DO j=jstr,jend
273 tl_ubar_obc(j,ib,ir,lout)=tl_ubar_obc(j,ib,ir,linp)+ &
274 & tl_ubar_obc(j,ib,ir,lout)
275 END DO
276 END IF
278 &
domain(ng)%Southern_Edge(tile))
THEN
280 DO i=istru,iend
281 tl_ubar_obc(i,ib,ir,lout)=tl_ubar_obc(i,ib,ir,linp)+ &
282 & tl_ubar_obc(i,ib,ir,lout)
283 END DO
284 END IF
286 &
domain(ng)%Northern_Edge(tile))
THEN
288 DO i=istru,iend
289 tl_ubar_obc(i,ib,ir,lout)=tl_ubar_obc(i,ib,ir,linp)+ &
290 & tl_ubar_obc(i,ib,ir,lout)
291 END DO
292 END IF
293 END DO
294 END IF
295# endif
296
297# ifndef SOLVE3D
298
299
300
301 DO j=jstr,jendr
302 DO i=istrr,iendr
303 tl_vbar(i,j,lout)=tl_vbar(i,j,linp)+ &
304 & tl_vbar(i,j,lout)
305 END DO
306 END DO
307# endif
308
309# ifdef ADJUST_BOUNDARY
310
311
312
316 &
domain(ng)%Western_Edge(tile))
THEN
318 DO j=jstrv,jend
319 tl_vbar_obc(j,ib,ir,lout)=tl_vbar_obc(j,ib,ir,linp)+ &
320 & tl_vbar_obc(j,ib,ir,lout)
321 END DO
322 END IF
324 &
domain(ng)%Eastern_Edge(tile))
THEN
326 DO j=jstrv,jend
327 tl_vbar_obc(j,ib,ir,lout)=tl_vbar_obc(j,ib,ir,linp)+ &
328 & tl_vbar_obc(j,ib,ir,lout)
329 END DO
330 END IF
332 &
domain(ng)%Southern_Edge(tile))
THEN
334 DO i=istr,iend
335 tl_vbar_obc(i,ib,ir,lout)=tl_vbar_obc(i,ib,ir,linp)+ &
336 & tl_vbar_obc(i,ib,ir,lout)
337 END DO
338 END IF
340 &
domain(ng)%Northern_Edge(tile))
THEN
342 DO i=istr,iend
343 tl_vbar_obc(i,ib,ir,lout)=tl_vbar_obc(i,ib,ir,linp)+ &
344 & tl_vbar_obc(i,ib,ir,lout)
345 END DO
346 END IF
347 END DO
348 END IF
349# endif
350
351# ifdef ADJUST_WSTRESS
352
353
354
356 DO j=jstrr,jendr
357 DO i=istr,iendr
358 tl_ustr(i,j,k,lout)=tl_ustr(i,j,k,linp)+ &
359 & tl_ustr(i,j,k,lout)
360 END DO
361 END DO
362 DO j=jstr,jendr
363 DO i=istrr,iendr
364 tl_vstr(i,j,k,lout)=tl_vstr(i,j,k,linp)+ &
365 & tl_vstr(i,j,k,lout)
366 END DO
367 END DO
368 END DO
369# endif
370
371# ifdef SOLVE3D
372
373
374
376 DO j=jstrr,jendr
377 DO i=istr,iendr
378 tl_u(i,j,k,lout)=tl_u(i,j,k,linp)+ &
379 & tl_u(i,j,k,lout)
380 END DO
381 END DO
382 END DO
383
384# ifdef ADJUST_BOUNDARY
385
386
387
391 &
domain(ng)%Western_Edge(tile))
THEN
394 DO j=jstr,jend
395 tl_u_obc(j,k,ib,ir,lout)=tl_u_obc(j,k,ib,ir,linp)+ &
396 & tl_u_obc(j,k,ib,ir,lout)
397 END DO
398 END DO
399 END IF
401 &
domain(ng)%Eastern_Edge(tile))
THEN
404 DO j=jstr,jend
405 tl_u_obc(j,k,ib,ir,lout)=tl_u_obc(j,k,ib,ir,linp)+ &
406 & tl_u_obc(j,k,ib,ir,lout)
407 END DO
408 END DO
409 END IF
411 &
domain(ng)%Southern_Edge(tile))
THEN
414 DO i=istru,iend
415 tl_u_obc(i,k,ib,ir,lout)=tl_u_obc(i,k,ib,ir,linp)+ &
416 & tl_u_obc(i,k,ib,ir,lout)
417 END DO
418 END DO
419 END IF
421 &
domain(ng)%Northern_Edge(tile))
THEN
424 DO i=istru,iend
425 tl_u_obc(i,k,ib,ir,lout)=tl_u_obc(i,k,ib,ir,linp)+ &
426 & tl_u_obc(i,k,ib,ir,lout)
427 END DO
428 END DO
429 END IF
430 END DO
431 END IF
432# endif
433
434
435
437 DO j=jstr,jendr
438 DO i=istrr,iendr
439 tl_v(i,j,k,lout)=tl_v(i,j,k,linp)+ &
440 & tl_v(i,j,k,lout)
441 END DO
442 END DO
443 END DO
444
445# ifdef ADJUST_BOUNDARY
446
447
448
452 &
domain(ng)%Western_Edge(tile))
THEN
455 DO j=jstrv,jend
456 tl_v_obc(j,k,ib,ir,lout)=tl_v_obc(j,k,ib,ir,linp)+ &
457 & tl_v_obc(j,k,ib,ir,lout)
458 END DO
459 END DO
460 END IF
462 &
domain(ng)%Eastern_Edge(tile))
THEN
465 DO j=jstrv,jend
466 tl_v_obc(j,k,ib,ir,lout)=tl_v_obc(j,k,ib,ir,linp)+ &
467 & tl_v_obc(j,k,ib,ir,lout)
468 END DO
469 END DO
470 END IF
472 &
domain(ng)%Southern_Edge(tile))
THEN
475 DO i=istr,iend
476 tl_v_obc(i,k,ib,ir,lout)=tl_v_obc(i,k,ib,ir,linp)+ &
477 & tl_v_obc(i,k,ib,ir,lout)
478 END DO
479 END DO
480 END IF
482 &
domain(ng)%Northern_Edge(tile))
THEN
485 DO i=istr,iend
486 tl_v_obc(i,k,ib,ir,lout)=tl_v_obc(i,k,ib,ir,linp)+ &
487 & tl_v_obc(i,k,ib,ir,lout)
488 END DO
489 END DO
490 END IF
491 END DO
492 END IF
493# endif
494
495
496
499 DO j=jstrr,jendr
500 DO i=istrr,iendr
501 tl_t(i,j,k,lout,itrc)=tl_t(i,j,k,linp,itrc)+ &
502 & tl_t(i,j,k,lout,itrc)
503 END DO
504 END DO
505 END DO
506 END DO
507
508# ifdef ADJUST_BOUNDARY
509
510
511
516 &
domain(ng)%Western_Edge(tile))
THEN
519 DO j=jstr,jend
520 tl_t_obc(j,k,ib,ir,lout,itrc)= &
521 & tl_t_obc(j,k,ib,ir,linp,itrc)+ &
522 & tl_t_obc(j,k,ib,ir,lout,itrc)
523 END DO
524 END DO
525 END IF
527 &
domain(ng)%Eastern_Edge(tile))
THEN
530 DO j=jstr,jend
531 tl_t_obc(j,k,ib,ir,lout,itrc)= &
532 & tl_t_obc(j,k,ib,ir,linp,itrc)+ &
533 & tl_t_obc(j,k,ib,ir,lout,itrc)
534 END DO
535 END DO
536 END IF
538 &
domain(ng)%Southern_Edge(tile))
THEN
541 DO i=istr,iend
542 tl_t_obc(i,k,ib,ir,lout,itrc)= &
543 & tl_t_obc(i,k,ib,ir,linp,itrc)+ &
544 & tl_t_obc(i,k,ib,ir,lout,itrc)
545 END DO
546 END DO
547 END IF
549 &
domain(ng)%Northern_Edge(tile))
THEN
552 DO i=istr,iend
553 tl_t_obc(i,k,ib,ir,lout,itrc)= &
554 & tl_t_obc(i,k,ib,ir,linp,itrc)+ &
555 & tl_t_obc(i,k,ib,ir,lout,itrc)
556 END DO
557 END DO
558 END IF
559 END DO
560 END IF
561 END DO
562# endif
563# ifdef ADJUST_STFLUX
564
565
566
570 DO j=jstrr,jendr
571 DO i=istrr,iendr
572 tl_tflux(i,j,k,lout,itrc)=tl_tflux(i,j,k,linp,itrc)+ &
573 & tl_tflux(i,j,k,lout,itrc)
574 END DO
575 END DO
576 END DO
577 END IF
578 END DO
579# endif
580# endif
581
582 RETURN
integer, dimension(:), allocatable istvar
integer, dimension(:), allocatable n
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable nt
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:,:), allocatable lstflux
integer, dimension(:), allocatable nfrec
integer, parameter isouth
integer, parameter inorth
integer, dimension(:), allocatable nbrec