5#if defined NONLINEAR && defined FOUR_DVAR
61 & LBi, UBi, LBj, UBj, &
62 & IminS, ImaxS, JminS, JmaxS, &
63 & Nghost, NHsteps, DTsizeH, &
65 & pm, pn, pmon_u, pnom_v, &
67 & rmask, umask, vmask, &
82 integer,
intent(in) :: ng, tile, model
83 integer,
intent(in) :: LBi, UBi, LBj, UBj
84 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
85 integer,
intent(in) :: Nghost, NHsteps
87 real(r8),
intent(in) :: DTsizeH
90 real(r8),
intent(in) :: pm(LBi:,LBj:)
91 real(r8),
intent(in) :: pn(LBi:,LBj:)
92 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
93 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
95 real(r8),
intent(in) :: rmask(LBi:,LBj:)
96 real(r8),
intent(in) :: umask(LBi:,LBj:)
97 real(r8),
intent(in) :: vmask(LBi:,LBj:)
99 real(r8),
intent(in) :: Kh(LBi:,LBj:)
100 real(r8),
intent(inout) :: A(LBi:,LBj:)
102 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
103 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
104 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
105 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
107 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
108 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
109 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
111 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
112 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
117 integer :: Nnew, Nold, Nsav, i, j, step
119 real(r8),
dimension(LBi:UBi,LBj:UBj,2) :: Awrk
121 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
122 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
123 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
125# include "set_bounds.h"
136 hfac(i,j)=dtsizeh*pm(i,j)*pn(i,j)
145 & lbi, ubi, lbj, ubj, &
149 & lbi, ubi, lbj, ubj, &
156 awrk(i,j,nold)=a(i,j)
170 fx(i,j)=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))* &
171 & (awrk(i,j,nold)-awrk(i-1,j,nold))
173 fx(i,j)=fx(i,j)*umask(i,j)
179 fe(i,j)=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))* &
180 & (awrk(i,j,nold)-awrk(i,j-1,nold))
182 fe(i,j)=fe(i,j)*vmask(i,j)
191 awrk(i,j,nnew)=awrk(i,j,nold)+ &
193 & (fx(i+1,j)-fx(i,j)+ &
201 & lbi, ubi, lbj, ubj, &
205 & lbi, ubi, lbj, ubj, &
224 a(i,j)=awrk(i,j,nold)
228 & lbi, ubi, lbj, ubj, &
232 & lbi, ubi, lbj, ubj, &
243 & LBi, UBi, LBj, UBj, &
244 & IminS, ImaxS, JminS, JmaxS, &
245 & Nghost, NHsteps, DTsizeH, &
247 & pm, pn, pmon_r, pnom_p, &
264 integer,
intent(in) :: ng, tile, model
265 integer,
intent(in) :: LBi, UBi, LBj, UBj
266 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
267 integer,
intent(in) :: Nghost, NHsteps
269 real(r8),
intent(in) :: DTsizeH
272 real(r8),
intent(in) :: pm(LBi:,LBj:)
273 real(r8),
intent(in) :: pn(LBi:,LBj:)
274 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
275 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
277 real(r8),
intent(in) :: umask(LBi:,LBj:)
278 real(r8),
intent(in) :: pmask(LBi:,LBj:)
280 real(r8),
intent(in) :: Kh(LBi:,LBj:)
281 real(r8),
intent(inout) :: A(LBi:,LBj:)
283 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
284 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
285 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
286 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
288 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
289 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
291 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
292 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
297 integer :: Nnew, Nold, Nsav, i, j, step
301 real(r8),
dimension(LBi:UBi,LBj:UBj,2) :: Awrk
303 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
304 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
305 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
307# include "set_bounds.h"
319 hfac(i,j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
328 & lbi, ubi, lbj, ubj, &
332 & lbi, ubi, lbj, ubj, &
339 awrk(i,j,nold)=a(i,j)
353 fx(i,j)=pmon_r(i,j)*kh(i,j)* &
354 & (awrk(i+1,j,nold)-awrk(i,j,nold))
359 fe(i,j)=pnom_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
360 & kh(i-1,j-1)+kh(i,j-1))* &
361 & (awrk(i,j,nold)-awrk(i,j-1,nold))
363 fe(i,j)=fe(i,j)*pmask(i,j)
372 awrk(i,j,nnew)=awrk(i,j,nold)+ &
374 & (fx(i,j)-fx(i-1,j)+ &
382 & lbi, ubi, lbj, ubj, &
386 & lbi, ubi, lbj, ubj, &
405 a(i,j)=awrk(i,j,nold)
409 & lbi, ubi, lbj, ubj, &
413 & lbi, ubi, lbj, ubj, &
424 & LBi, UBi, LBj, UBj, &
425 & IminS, ImaxS, JminS, JmaxS, &
426 & Nghost, NHsteps, DTsizeH, &
428 & pm, pn, pmon_p, pnom_r, &
445 integer,
intent(in) :: ng, tile, model
446 integer,
intent(in) :: LBi, UBi, LBj, UBj
447 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
448 integer,
intent(in) :: Nghost, NHsteps
450 real(r8),
intent(in) :: DTsizeH
453 real(r8),
intent(in) :: pm(LBi:,LBj:)
454 real(r8),
intent(in) :: pn(LBi:,LBj:)
455 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
456 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
458 real(r8),
intent(in) :: vmask(LBi:,LBj:)
459 real(r8),
intent(in) :: pmask(LBi:,LBj:)
461 real(r8),
intent(in) :: Kh(LBi:,LBj:)
462 real(r8),
intent(inout) :: A(LBi:,LBj:)
464 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
465 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
466 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
467 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
469 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
470 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
472 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
473 real(r8),
intent(inout) :: A(LBi:UBi,LBj:UBj)
478 integer :: Nnew, Nold, Nsav, i, j, step
482 real(r8),
dimension(LBi:UBi,LBj:UBj,2) :: Awrk
484 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
485 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
486 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
488# include "set_bounds.h"
500 hfac(i,j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
509 & lbi, ubi, lbj, ubj, &
513 & lbi, ubi, lbj, ubj, &
520 awrk(i,j,nold)=a(i,j)
534 fx(i,j)=pmon_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
535 & kh(i-1,j-1)+kh(i,j-1))* &
536 & (awrk(i,j,nold)-awrk(i-1,j,nold))
538 fx(i,j)=fx(i,j)*pmask(i,j)
544 fe(i,j)=pnom_r(i,j)*kh(i,j)* &
545 & (awrk(i,j+1,nold)-awrk(i,j,nold))
553 awrk(i,j,nnew)=awrk(i,j,nold)+ &
555 & (fx(i+1,j)-fx(i,j)+ &
563 & lbi, ubi, lbj, ubj, &
567 & lbi, ubi, lbj, ubj, &
586 a(i,j)=awrk(i,j,nold)
590 & lbi, ubi, lbj, ubj, &
594 & lbi, ubi, lbj, ubj, &
subroutine dabc_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine dabc_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine dabc_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine conv_u2d_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_r, pnom_p, umask, pmask, a)
subroutine conv_v2d_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_p, pnom_r, vmask, pmask, a)
subroutine conv_r2d_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nghost, nhsteps, dtsizeh, kh, pm, pn, pmon_u, pnom_v, rmask, umask, vmask, a)
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)