4#if defined NONLINEAR && defined FOUR_DVAR && defined ADJUST_BOUNDARY
62 & LBi, UBi, LBj, UBj, &
63 & IminS, ImaxS, JminS, JmaxS, &
64 & Nghost, NHsteps, DTsizeH, &
66 & pm, pn, pmon_u, pnom_v, &
68 & rmask, umask, vmask, &
83 integer,
intent(in) :: ng, tile, model, boundary
84 integer,
intent(in) :: edge(4)
85 integer,
intent(in) :: LBij, UBij
86 integer,
intent(in) :: LBi, UBi, LBj, UBj
87 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
88 integer,
intent(in) :: Nghost, NHsteps
90 real(r8),
intent(in) :: DTsizeH
93 real(r8),
intent(in) :: pm(LBi:,LBj:)
94 real(r8),
intent(in) :: pn(LBi:,LBj:)
95 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
96 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
98 real(r8),
intent(in) :: rmask(LBi:,LBj:)
99 real(r8),
intent(in) :: umask(LBi:,LBj:)
100 real(r8),
intent(in) :: vmask(LBi:,LBj:)
102 real(r8),
intent(in) :: Kh(LBi:,LBj:)
103 real(r8),
intent(inout) :: A(LBij:)
105 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
106 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
107 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
108 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
110 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
111 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
112 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
114 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
115 real(r8),
intent(inout) :: A(LBij:UBij)
120 logical,
dimension(4) :: Lconvolve
122 integer :: Nnew, Nold, Nsav, i, j, step
124 real(r8),
dimension(LBij:UBij,2) :: Awrk
126 real(r8),
dimension(JminS:JmaxS) :: FE
127 real(r8),
dimension(IminS:ImaxS) :: FX
128 real(r8),
dimension(LBij:UBij) :: Hfac
130# include "set_bounds.h"
144 IF (lconvolve(boundary))
THEN
145 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
148 hfac(j)=dtsizeh*pm(i,j)*pn(i,j)
150 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
153 hfac(i)=dtsizeh*pm(i,j)*pn(i,j)
173 IF (lconvolve(boundary))
THEN
174 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
178 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
193 IF (lconvolve(boundary))
THEN
194 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
197 fe(j)=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))* &
201 fe(j)=fe(j)*vmask(i,j)
204 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
207 fx(i)=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))* &
211 fx(i)=fx(i)*umask(i,j)
219 IF (lconvolve(boundary))
THEN
220 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
222 awrk(j,nnew)=awrk(j,nold)+ &
226 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
228 awrk(i,nnew)=awrk(i,nold)+ &
259 IF (lconvolve(boundary))
THEN
260 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
264 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
287 & edge, LBij, UBij, &
288 & LBi, UBi, LBj, UBj, &
289 & IminS, ImaxS, JminS, JmaxS, &
290 & Nghost, NHsteps, DTsizeH, &
292 & pm, pn, pmon_r, pnom_p, &
309 integer,
intent(in) :: ng, tile, model, boundary
310 integer,
intent(in) :: edge(4)
311 integer,
intent(in) :: LBij, UBij
312 integer,
intent(in) :: LBi, UBi, LBj, UBj
313 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
314 integer,
intent(in) :: Nghost, NHsteps
316 real(r8),
intent(in) :: DTsizeH
319 real(r8),
intent(in) :: pm(LBi:,LBj:)
320 real(r8),
intent(in) :: pn(LBi:,LBj:)
321 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
322 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
324 real(r8),
intent(in) :: umask(LBi:,LBj:)
325 real(r8),
intent(in) :: pmask(LBi:,LBj:)
327 real(r8),
intent(in) :: Kh(LBi:,LBj:)
328 real(r8),
intent(inout) :: A(LBij:)
330 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
331 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
332 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
333 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
335 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
336 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
338 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
339 real(r8),
intent(inout) :: A(LBij:UBij)
344 logical,
dimension(4) :: Lconvolve
346 integer :: Nnew, Nold, Nsav, i, j, step
350 real(r8),
dimension(LBij:UBij,2) :: Awrk
352 real(r8),
dimension(JminS:JmaxS) :: FE
353 real(r8),
dimension(IminS:ImaxS) :: FX
354 real(r8),
dimension(LBij:UBij) :: Hfac
356# include "set_bounds.h"
371 IF (lconvolve(boundary))
THEN
372 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
375 hfac(j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
377 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
380 hfac(i)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
400 IF (lconvolve(boundary))
THEN
401 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
405 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
420 IF (lconvolve(boundary))
THEN
421 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
424 fe(j)=pnom_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
425 & kh(i-1,j-1)+kh(i,j-1))* &
429 fe(j)=fe(j)*pmask(i,j)
432 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
435 fx(i)=pmon_r(i,j)*kh(i,j)* &
444 IF (lconvolve(boundary))
THEN
445 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
447 awrk(j,nnew)=awrk(j,nold)+ &
451 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
453 awrk(i,nnew)=awrk(i,nold)+ &
484 IF (lconvolve(boundary))
THEN
485 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
489 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
512 & edge, LBij, UBij, &
513 & LBi, UBi, LBj, UBj, &
514 & IminS, ImaxS, JminS, JmaxS, &
515 & Nghost, NHsteps, DTsizeH, &
517 & pm, pn, pmon_p, pnom_r, &
534 integer,
intent(in) :: ng, tile, model, boundary
535 integer,
intent(in) :: edge(4)
536 integer,
intent(in) :: LBij, UBij
537 integer,
intent(in) :: LBi, UBi, LBj, UBj
538 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
539 integer,
intent(in) :: Nghost, NHsteps
541 real(r8),
intent(in) :: DTsizeH
544 real(r8),
intent(in) :: pm(LBi:,LBj:)
545 real(r8),
intent(in) :: pn(LBi:,LBj:)
546 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
547 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
549 real(r8),
intent(in) :: vmask(LBi:,LBj:)
550 real(r8),
intent(in) :: pmask(LBi:,LBj:)
552 real(r8),
intent(in) :: Kh(LBi:,LBj:)
553 real(r8),
intent(inout) :: A(LBij:)
555 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
556 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
557 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
558 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
560 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
561 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
563 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
564 real(r8),
intent(inout) :: A(LBij:UBij)
569 logical,
dimension(4) :: Lconvolve
571 integer :: Nnew, Nold, Nsav, i, j, step
575 real(r8),
dimension(LBij:UBij,2) :: Awrk
577 real(r8),
dimension(JminS:JmaxS) :: FE
578 real(r8),
dimension(IminS:ImaxS) :: FX
579 real(r8),
dimension(LBij:UBij) :: Hfac
581# include "set_bounds.h"
596 IF (lconvolve(boundary))
THEN
597 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
600 hfac(j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
602 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
605 hfac(i)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
625 IF (lconvolve(boundary))
THEN
626 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
630 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
645 IF (lconvolve(boundary))
THEN
646 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
649 fe(j)=pnom_r(i,j)*kh(i,j)* &
653 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
656 fx(i)=pmon_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
657 & kh(i-1,j-1)+kh(i,j-1))* &
661 fx(i)=fx(i)*pmask(i,j)
669 IF (lconvolve(boundary))
THEN
670 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
672 awrk(j,nnew)=awrk(j,nold)+ &
676 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
678 awrk(i,nnew)=awrk(i,nold)+ &
709 IF (lconvolve(boundary))
THEN
710 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
714 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
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)
subroutine 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, a)
subroutine 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, a)
subroutine 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, 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)