4#if defined TANGENT && defined FOUR_DVAR && defined ADJUST_BOUNDARY
65 & LBi, UBi, LBj, UBj, &
66 & IminS, ImaxS, JminS, JmaxS, &
67 & Nghost, NHsteps, DTsizeH, &
69 & pm, pn, pmon_u, pnom_v, &
71 & rmask, umask, vmask, &
86 integer,
intent(in) :: ng, tile, model, boundary
87 integer,
intent(in) :: edge(4)
88 integer,
intent(in) :: LBij, UBij
89 integer,
intent(in) :: LBi, UBi, LBj, UBj
90 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
91 integer,
intent(in) :: Nghost, NHsteps
93 real(r8),
intent(in) :: DTsizeH
96 real(r8),
intent(in) :: pm(LBi:,LBj:)
97 real(r8),
intent(in) :: pn(LBi:,LBj:)
98 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
99 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
101 real(r8),
intent(in) :: rmask(LBi:,LBj:)
102 real(r8),
intent(in) :: umask(LBi:,LBj:)
103 real(r8),
intent(in) :: vmask(LBi:,LBj:)
105 real(r8),
intent(in) :: Kh(LBi:,LBj:)
106 real(r8),
intent(inout) :: tl_A(LBij:)
108 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
109 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
110 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
111 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
113 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
114 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
115 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
117 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
118 real(r8),
intent(inout) :: tl_A(LBij:UBij)
123 logical,
dimension(4) :: Lconvolve
125 integer :: Nnew, Nold, Nsav, i, j, step
127 real(r8),
dimension(LBij:UBij,2) :: tl_Awrk
129 real(r8),
dimension(JminS:JmaxS) :: tl_FE
130 real(r8),
dimension(IminS:ImaxS) :: tl_FX
131 real(r8),
dimension(LBij:UBij) :: Hfac
133# include "set_bounds.h"
147 IF (lconvolve(boundary))
THEN
148 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
151 hfac(j)=dtsizeh*pm(i,j)*pn(i,j)
153 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
156 hfac(i)=dtsizeh*pm(i,j)*pn(i,j)
186 IF (lconvolve(boundary))
THEN
187 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
191 tl_awrk(j,nold)=tl_a(j)
193 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
197 tl_awrk(i,nold)=tl_a(i)
210 IF (lconvolve(boundary))
THEN
211 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
218 tl_fe(j)=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))* &
219 & (tl_awrk(j ,nold)- &
224 tl_fe(j)=tl_fe(j)*vmask(i,j)
227 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
234 tl_fx(i)=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))* &
235 & (tl_awrk(i ,nold)- &
240 tl_fx(i)=tl_fx(i)*umask(i,j)
248 IF (lconvolve(boundary))
THEN
249 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
255 tl_awrk(j,nnew)=tl_awrk(j,nold)+ &
257 & (tl_fe(j+1)-tl_fe(j))
259 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
265 tl_awrk(i,nnew)=tl_awrk(i,nold)+ &
267 & (tl_fx(i+1)-tl_fx(i))
306 IF (lconvolve(boundary))
THEN
307 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
311 tl_a(j)=tl_awrk(j,nold)
313 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
317 tl_a(i)=tl_awrk(i,nold)
348 & edge, LBij, UBij, &
349 & LBi, UBi, LBj, UBj, &
350 & IminS, ImaxS, JminS, JmaxS, &
351 & Nghost, NHsteps, DTsizeH, &
353 & pm, pn, pmon_r, pnom_p, &
370 integer,
intent(in) :: ng, tile, model, boundary
371 integer,
intent(in) :: edge(4)
372 integer,
intent(in) :: LBij, UBij
373 integer,
intent(in) :: LBi, UBi, LBj, UBj
374 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
375 integer,
intent(in) :: Nghost, NHsteps
377 real(r8),
intent(in) :: DTsizeH
380 real(r8),
intent(in) :: pm(LBi:,LBj:)
381 real(r8),
intent(in) :: pn(LBi:,LBj:)
382 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
383 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
385 real(r8),
intent(in) :: umask(LBi:,LBj:)
386 real(r8),
intent(in) :: pmask(LBi:,LBj:)
388 real(r8),
intent(in) :: Kh(LBi:,LBj:)
389 real(r8),
intent(inout) :: tl_A(LBij:)
391 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
392 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
393 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
394 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
396 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
397 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
399 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
400 real(r8),
intent(inout) :: tl_A(LBij:UBij)
405 logical,
dimension(4) :: Lconvolve
407 integer :: Nnew, Nold, Nsav, i, j, step
411 real(r8),
dimension(LBij:UBij,2) :: tl_Awrk
413 real(r8),
dimension(JminS:JmaxS) :: tl_FE
414 real(r8),
dimension(IminS:ImaxS) :: tl_FX
415 real(r8),
dimension(LBij:UBij) :: Hfac
417# include "set_bounds.h"
432 IF (lconvolve(boundary))
THEN
433 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
436 hfac(j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
438 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
441 hfac(i)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
471 IF (lconvolve(boundary))
THEN
472 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
476 tl_awrk(j,nold)=tl_a(j)
478 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
482 tl_awrk(i,nold)=tl_a(i)
495 IF (lconvolve(boundary))
THEN
496 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
504 tl_fe(j)=pnom_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
505 & kh(i-1,j-1)+kh(i,j-1))* &
506 & (tl_awrk(j ,nold)- &
511 tl_fe(j)=tl_fe(j)*pmask(i,j)
514 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
521 tl_fx(i)=pmon_r(i,j)*kh(i,j)* &
522 & (tl_awrk(i+1,nold)- &
530 IF (lconvolve(boundary))
THEN
531 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
537 tl_awrk(j,nnew)=tl_awrk(j,nold)+ &
539 & (tl_fe(j+1)-tl_fe(j))
541 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
547 tl_awrk(i,nnew)=tl_awrk(i,nold)+ &
549 & (tl_fx(i)-tl_fx(i-1))
588 IF (lconvolve(boundary))
THEN
589 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
593 tl_a(j)=tl_awrk(j,nold)
595 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
599 tl_a(i)=tl_awrk(i,nold)
629 & edge, LBij, UBij, &
630 & LBi, UBi, LBj, UBj, &
631 & IminS, ImaxS, JminS, JmaxS, &
632 & Nghost, NHsteps, DTsizeH, &
634 & pm, pn, pmon_p, pnom_r, &
651 integer,
intent(in) :: ng, tile, model, boundary
652 integer,
intent(in) :: edge(4)
653 integer,
intent(in) :: LBij, UBij
654 integer,
intent(in) :: LBi, UBi, LBj, UBj
655 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
656 integer,
intent(in) :: Nghost, NHsteps
658 real(r8),
intent(in) :: DTsizeH
661 real(r8),
intent(in) :: pm(LBi:,LBj:)
662 real(r8),
intent(in) :: pn(LBi:,LBj:)
663 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
664 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
666 real(r8),
intent(in) :: vmask(LBi:,LBj:)
667 real(r8),
intent(in) :: pmask(LBi:,LBj:)
669 real(r8),
intent(in) :: Kh(LBi:,LBj:)
670 real(r8),
intent(inout) :: tl_A(LBij:)
672 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
673 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
674 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
675 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
677 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
678 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
680 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
681 real(r8),
intent(inout) :: tl_A(LBij:UBij)
686 logical,
dimension(4) :: Lconvolve
688 integer :: Nnew, Nold, Nsav, i, j, step
692 real(r8),
dimension(LBij:UBij,2) :: tl_Awrk
694 real(r8),
dimension(JminS:JmaxS) :: tl_FE
695 real(r8),
dimension(IminS:ImaxS) :: tl_FX
696 real(r8),
dimension(LBij:UBij) :: Hfac
698# include "set_bounds.h"
713 IF (lconvolve(boundary))
THEN
714 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
717 hfac(j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
719 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
722 hfac(i)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
752 IF (lconvolve(boundary))
THEN
753 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
757 tl_awrk(j,nold)=tl_a(j)
759 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
763 tl_awrk(i,nold)=tl_a(i)
776 IF (lconvolve(boundary))
THEN
777 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
784 tl_fe(j)=pnom_r(i,j)*kh(i,j)* &
785 & (tl_awrk(j+1,nold)- &
788 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
796 tl_fx(i)=pmon_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
797 & kh(i-1,j-1)+kh(i,j-1))* &
798 & (tl_awrk(i ,nold)- &
803 tl_fx(i)=tl_fx(i)*pmask(i,j)
811 IF (lconvolve(boundary))
THEN
812 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
818 tl_awrk(j,nnew)=tl_awrk(j,nold)+ &
820 & (tl_fe(j)-tl_fe(j-1))
822 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
828 tl_awrk(i,nnew)=tl_awrk(i,nold)+ &
830 & (tl_fx(i+1)-tl_fx(i))
869 IF (lconvolve(boundary))
THEN
870 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
874 tl_a(j)=tl_awrk(j,nold)
876 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
880 tl_a(i)=tl_awrk(i,nold)
subroutine bc_r2d_bry_tile(ng, tile, boundary, lbij, ubij, a)
subroutine bc_u2d_bry_tile(ng, tile, boundary, lbij, ubij, a)
subroutine bc_v2d_bry_tile(ng, tile, boundary, lbij, ubij, a)
type(t_domain), dimension(:), allocatable domain
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
integer, parameter isouth
integer, parameter inorth
subroutine mp_exchange2d_bry(ng, tile, model, nvar, boundary, lbij, ubij, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine tl_conv_v2d_bry_tile(ng, tile, model, boundary, edge, lbij, ubij, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_p, pnom_r, vmask, pmask, tl_a)
subroutine tl_conv_u2d_bry_tile(ng, tile, model, boundary, edge, lbij, ubij, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_r, pnom_p, umask, pmask, tl_a)
subroutine tl_conv_r2d_bry_tile(ng, tile, model, boundary, edge, lbij, ubij, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_u, pnom_v, rmask, umask, vmask, tl_a)