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) :: ad_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) :: ad_A(LBij:UBij)
123 logical,
dimension(4) :: Lconvolve
125 integer :: Nnew, Nold, Nsav, i, j, step
129 real(r8),
dimension(LBij:UBij,2) :: ad_Awrk
131 real(r8),
dimension(JminS:JmaxS) :: ad_FE
132 real(r8),
dimension(IminS:ImaxS) :: ad_FX
133 real(r8),
dimension(LBij:UBij) :: Hfac
135# include "set_bounds.h"
141 ad_awrk(lbij:ubij,1:2)=0.0_r8
143 ad_fe(jmins:jmaxs)=0.0_r8
144 ad_fx(imins:imaxs)=0.0_r8
163 IF (lconvolve(boundary))
THEN
164 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
167 hfac(j)=dtsizeh*pm(i,j)*pn(i,j)
169 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
172 hfac(i)=dtsizeh*pm(i,j)*pn(i,j)
201 IF (lconvolve(boundary))
THEN
202 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
206 ad_awrk(j,nold)=ad_awrk(j,nold)+ad_a(j)
209 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
213 ad_awrk(i,nold)=ad_awrk(i,nold)+ad_a(i)
257 IF (lconvolve(boundary))
THEN
258 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
264 adfac=hfac(j)*ad_awrk(j,nnew)
265 ad_fe(j )=ad_fe(j )-adfac
266 ad_fe(j+1)=ad_fe(j+1)+adfac
267 ad_awrk(j,nold)=ad_awrk(j,nold)+ &
269 ad_awrk(j,nnew)=0.0_r8
271 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
277 adfac=hfac(i)*ad_awrk(i,nnew)
278 ad_fx(i )=ad_fx(i )-adfac
279 ad_fx(i+1)=ad_fx(i+1)+adfac
280 ad_awrk(i,nold)=ad_awrk(i,nold)+ &
282 ad_awrk(i,nnew)=0.0_r8
289 IF (lconvolve(boundary))
THEN
290 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
296 ad_fe(j)=ad_fe(j)*vmask(i,j)
302 adfac=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))*ad_fe(j)
303 ad_awrk(j-1,nold)=ad_awrk(j-1,nold)-adfac
304 ad_awrk(j ,nold)=ad_awrk(j ,nold)+adfac
307 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
313 ad_fx(i)=ad_fx(i)*umask(i,j)
319 adfac=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))*ad_fx(i)
320 ad_awrk(i-1,nold)=ad_awrk(i-1,nold)-adfac
321 ad_awrk(i ,nold)=ad_awrk(i ,nold)+adfac
330 IF (lconvolve(boundary))
THEN
331 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
335 ad_a(j)=ad_a(j)+ad_awrk(j,nold)
336 ad_awrk(j,nold)=0.0_r8
338 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
342 ad_a(i)=ad_a(i)+ad_awrk(i,nold)
343 ad_awrk(i,nold)=0.0_r8
374 & edge, LBij, UBij, &
375 & LBi, UBi, LBj, UBj, &
376 & IminS, ImaxS, JminS, JmaxS, &
377 & Nghost, NHsteps, DTsizeH, &
379 & pm, pn, pmon_r, pnom_p, &
396 integer,
intent(in) :: ng, tile, model, boundary
397 integer,
intent(in) :: edge(4)
398 integer,
intent(in) :: LBij, UBij
399 integer,
intent(in) :: LBi, UBi, LBj, UBj
400 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
401 integer,
intent(in) :: Nghost, NHsteps
403 real(r8),
intent(in) :: DTsizeH
406 real(r8),
intent(in) :: pm(LBi:,LBj:)
407 real(r8),
intent(in) :: pn(LBi:,LBj:)
408 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
409 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
411 real(r8),
intent(in) :: umask(LBi:,LBj:)
412 real(r8),
intent(in) :: pmask(LBi:,LBj:)
414 real(r8),
intent(in) :: Kh(LBi:,LBj:)
415 real(r8),
intent(inout) :: ad_A(LBij:)
417 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
418 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
419 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
420 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
423 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
425 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
426 real(r8),
intent(inout) :: ad_A(LBij:UBij)
431 logical,
dimension(4) :: Lconvolve
433 integer :: Nnew, Nold, Nsav, i, j, step
435 real(r8) :: adfac, cff
437 real(r8),
dimension(LBij:UBij,2) :: ad_Awrk
439 real(r8),
dimension(JminS:JmaxS) :: ad_FE
440 real(r8),
dimension(IminS:ImaxS) :: ad_FX
441 real(r8),
dimension(LBij:UBij) :: Hfac
443# include "set_bounds.h"
449 ad_awrk(lbij:ubij,1:2)=0.0_r8
451 ad_fe(jmins:jmaxs)=0.0_r8
452 ad_fx(imins:imaxs)=0.0_r8
472 IF (lconvolve(boundary))
THEN
473 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
476 hfac(j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
478 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
481 hfac(i)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
510 IF (lconvolve(boundary))
THEN
511 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
515 ad_awrk(j,nold)=ad_awrk(j,nold)+ad_a(j)
518 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
522 ad_awrk(i,nold)=ad_awrk(i,nold)+ad_a(i)
566 IF (lconvolve(boundary))
THEN
567 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
573 adfac=hfac(j)*ad_awrk(j,nnew)
574 ad_fe(j )=ad_fe(j )-adfac
575 ad_fe(j+1)=ad_fe(j+1)+adfac
576 ad_awrk(j,nold)=ad_awrk(j,nold)+ &
578 ad_awrk(j,nnew)=0.0_r8
580 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
586 adfac=hfac(i)*ad_awrk(i,nnew)
587 ad_fx(i-1)=ad_fx(i-1)-adfac
588 ad_fx(i )=ad_fx(i )+adfac
589 ad_awrk(i,nold)=ad_awrk(i,nold)+ &
591 ad_awrk(i,nnew)=0.0_r8
598 IF (lconvolve(boundary))
THEN
599 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
605 ad_fe(j)=ad_fe(j)*pmask(i,j)
612 adfac=pnom_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
613 & kh(i-1,j-1)+kh(i,j-1))* &
615 ad_awrk(j-1,nold)=ad_awrk(j-1,nold)-adfac
616 ad_awrk(j ,nold)=ad_awrk(j ,nold)+adfac
619 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
626 adfac=pmon_r(i,j)*kh(i,j)*ad_fx(i)
627 ad_awrk(i ,nold)=ad_awrk(i ,nold)-adfac
628 ad_awrk(i+1,nold)=ad_awrk(i+1,nold)+adfac
637 IF (lconvolve(boundary))
THEN
638 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
642 ad_a(j)=ad_a(j)+ad_awrk(j,nold)
643 ad_awrk(j,nold)=0.0_r8
645 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
649 ad_a(i)=ad_a(i)+ad_awrk(i,nold)
650 ad_awrk(i,nold)=0.0_r8
681 & edge, LBij, UBij, &
682 & LBi, UBi, LBj, UBj, &
683 & IminS, ImaxS, JminS, JmaxS, &
684 & Nghost, NHsteps, DTsizeH, &
686 & pm, pn, pmon_p, pnom_r, &
703 integer,
intent(in) :: ng, tile, model, boundary
704 integer,
intent(in) :: edge(4)
705 integer,
intent(in) :: LBij, UBij
706 integer,
intent(in) :: LBi, UBi, LBj, UBj
707 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
708 integer,
intent(in) :: Nghost, NHsteps
710 real(r8),
intent(in) :: DTsizeH
713 real(r8),
intent(in) :: pm(LBi:,LBj:)
714 real(r8),
intent(in) :: pn(LBi:,LBj:)
715 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
716 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
718 real(r8),
intent(in) :: vmask(LBi:,LBj:)
719 real(r8),
intent(in) :: pmask(LBi:,LBj:)
721 real(r8),
intent(in) :: Kh(LBi:,LBj:)
722 real(r8),
intent(inout) :: ad_A(LBij:)
724 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
725 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
726 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
727 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
729 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
730 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
732 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
733 real(r8),
intent(inout) :: ad_A(LBij:UBij)
738 logical,
dimension(4) :: Lconvolve
740 integer :: Nnew, Nold, Nsav, i, j, step
742 real(r8) :: adfac, cff
744 real(r8),
dimension(LBij:UBij,2) :: ad_Awrk
746 real(r8),
dimension(JminS:JmaxS) :: ad_FE
747 real(r8),
dimension(IminS:ImaxS) :: ad_FX
748 real(r8),
dimension(LBij:UBij) :: Hfac
750# include "set_bounds.h"
756 ad_awrk(lbij:ubij,1:2)=0.0_r8
758 ad_fe(jmins:jmaxs)=0.0_r8
759 ad_fx(imins:imaxs)=0.0_r8
779 IF (lconvolve(boundary))
THEN
780 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
783 hfac(j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
785 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
788 hfac(i)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
817 IF (lconvolve(boundary))
THEN
818 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
822 ad_awrk(j,nold)=ad_awrk(j,nold)+ad_a(j)
825 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
829 ad_awrk(i,nold)=ad_awrk(i,nold)+ad_a(i)
872 IF (lconvolve(boundary))
THEN
873 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
879 adfac=hfac(j)*ad_awrk(j,nnew)
880 ad_fe(j-1)=ad_fe(j-1)-adfac
881 ad_fe(j )=ad_fe(j )+adfac
882 ad_awrk(j,nold)=ad_awrk(j,nold)+ &
884 ad_awrk(j,nnew)=0.0_r8
886 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
892 adfac=hfac(i)*ad_awrk(i,nnew)
893 ad_fx(i )=ad_fx(i )-adfac
894 ad_fx(i+1)=ad_fx(i+1)+adfac
895 ad_awrk(i,nold)=ad_awrk(i,nold)+ &
897 ad_awrk(i,nnew)=0.0_r8
904 IF (lconvolve(boundary))
THEN
905 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
912 adfac=pnom_r(i,j)*kh(i,j)*ad_fe(j)
913 ad_awrk(j ,nold)=ad_awrk(j ,nold)-adfac
914 ad_awrk(j+1,nold)=ad_awrk(j+1,nold)+adfac
917 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
923 ad_fx(i)=ad_fx(i)*pmask(i,j)
930 adfac=pmon_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
931 & kh(i-1,j-1)+kh(i,j-1))* &
933 ad_awrk(i-1,nold)=ad_awrk(i-1,nold)-adfac
934 ad_awrk(i ,nold)=ad_awrk(i ,nold)+adfac
943 IF (lconvolve(boundary))
THEN
944 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
948 ad_a(j)=ad_a(j)+ad_awrk(j,nold)
949 ad_awrk(j,nold)=0.0_r8
951 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
955 ad_a(i)=ad_a(i)+ad_awrk(i,nold)
956 ad_awrk(i,nold)=0.0_r8
subroutine ad_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, ad_a)
subroutine ad_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, ad_a)
subroutine ad_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, ad_a)