71 & LBi, UBi, LBj, UBj, LBk, UBk, &
72 & IminS, ImaxS, JminS, JmaxS, &
73 & Nghost, NHsteps, NVsteps, &
76 & pm, pn, pmon_u, pnom_v, &
78 & rmask, umask, vmask, &
94 integer,
intent(in) :: ng, tile, model, boundary
95 integer,
intent(in) :: edge(4)
96 integer,
intent(in) :: LBij, UBij
97 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
98 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
99 integer,
intent(in) :: Nghost, NHsteps, NVsteps
101 real(r8),
intent(in) :: DTsizeH, DTsizeV
104 real(r8),
intent(in) :: pm(LBi:,LBj:)
105 real(r8),
intent(in) :: pn(LBi:,LBj:)
106 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
107 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
109 real(r8),
intent(in) :: rmask(LBi:,LBj:)
110 real(r8),
intent(in) :: umask(LBi:,LBj:)
111 real(r8),
intent(in) :: vmask(LBi:,LBj:)
113 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
114 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
116 real(r8),
intent(in) :: Kh(LBi:,LBj:)
117 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
118 real(r8),
intent(inout) :: ad_A(LBij:,LBk:)
120 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
121 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
122 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
123 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
125 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
126 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
127 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
129 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
130 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
132 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
133 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
134 real(r8),
intent(inout) :: ad_A(LBij:UBij,LBk:UBk)
139 logical,
dimension(4) :: Lconvolve
141 integer :: Nnew, Nold, Nsav, i, j, k, step
143 real(r8) :: adfac, cff, cff1
145 real(r8),
dimension(LBij:UBij,LBk:UBk,2) :: ad_Awrk
147 real(r8),
dimension(JminS:JmaxS,LBk:UBk) :: ad_FE
148 real(r8),
dimension(IminS:ImaxS,LBk:UBk) :: ad_FX
149 real(r8),
dimension(LBij:UBij) :: Hfac
151# ifndef SPLINES_VCONV
152 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
154# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
155 real(r8),
dimension(LBij:UBij,N(ng)) :: oHz
157# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
158 real(r8),
dimension(LBij:UBij,0:N(ng)) :: BC
159 real(r8),
dimension(LBij:UBij,0:N(ng)) :: CF
161 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
163 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_DC
165 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_FS
169# include "set_bounds.h"
175 ad_awrk(lbij:ubij,lbk:ubk,1:2)=0.0_r8
177# ifdef IMPLICIT_VCONV
178 ad_dc(lbij:ubij,0:n(ng))=0.0_r8
180 ad_fs(lbij:ubij,0:n(ng))=0.0_r8
183 ad_fe(jmins:jmaxs,lbk:ubk)=0.0_r8
184 ad_fx(imins:imaxs,lbk:ubk)=0.0_r8
205 IF (lconvolve(boundary))
THEN
206 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
209 hfac(j)=dtsizeh*pm(i,j)*pn(i,j)
211# ifndef SPLINES_VCONV
214# ifdef IMPLICIT_VCONV
215 fc(j,k)=-dtsizev*kv(i,j,k)/ &
216 & (z_r(i,j,k+1)-z_r(i,j,k))
218 fc(j,k)=dtsizev*kv(i,j,k)/ &
219 & (z_r(i,j,k+1)-z_r(i,j,k))
224# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
226 ohz(j,k)=1.0_r8/hz(i,j,k)
231 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
234 hfac(i)=dtsizeh*pm(i,j)*pn(i,j)
236# ifndef SPLINES_VCONV
239# ifdef IMPLICIT_VCONV
240 fc(i,k)=-dtsizev*kv(i,j,k)/ &
241 & (z_r(i,j,k+1)-z_r(i,j,k))
243 fc(i,k)=dtsizev*kv(i,j,k)/ &
244 & (z_r(i,j,k+1)-z_r(i,j,k))
249# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
251 ohz(i,k)=1.0_r8/hz(i,j,k)
271 & lbij, ubij, 1, n(ng), &
281 & lbij, ubij, 1, n(ng), &
283 IF (lconvolve(boundary))
THEN
284 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
289 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
294 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
299 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
308# ifdef IMPLICIT_VCONV
330 IF (lconvolve(boundary))
THEN
331 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
336 fc(j,k)=cff1*hz(i,j,k )- &
337 & dtsizev*kv(i,j,k-1)*ohz(j,k )
338 cf(j,k)=cff1*hz(i,j,k+1)- &
339 & dtsizev*kv(i,j,k+1)*ohz(j,k+1)
343 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
348 fc(i,k)=cff1*hz(i,j,k )- &
349 & dtsizev*kv(i,j,k-1)*ohz(i,k )
350 cf(i,k)=cff1*hz(i,j,k+1)- &
351 & dtsizev*kv(i,j,k+1)*ohz(i,k+1)
359 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
364 bc(j,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
365 & dtsizev*kv(i,j,k)* &
366 & (ohz(j,k)+ohz(j,k+1))
367 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
371 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
376 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
377 & dtsizev*kv(i,j,k)* &
378 & (ohz(i,k)+ohz(i,k+1))
379 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
387 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
395 adfac=dtsizev*ohz(j,k)*ad_awrk(j,k,nnew)
396 ad_dc(j,k-1)=ad_dc(j,k-1)-adfac
397 ad_dc(j,k )=ad_dc(j,k )+adfac
398 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
400 ad_awrk(j,k,nnew)=0.0_r8
403 ad_dc(j,k)=ad_dc(j,k)*kv(i,j,k)
410 ad_dc(j,k+1)=ad_dc(j,k+1)-cf(j,k)*ad_dc(j,k)
416 ad_dc(j,n(ng))=0.0_r8
418 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
426 adfac=dtsizev*ohz(i,k)*ad_awrk(i,k,nnew)
427 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac
428 ad_dc(i,k )=ad_dc(i,k )+adfac
429 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
431 ad_awrk(i,k,nnew)=0.0_r8
434 ad_dc(i,k)=ad_dc(i,k)*kv(i,j,k)
441 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
447 ad_dc(i,n(ng))=0.0_r8
453 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
457 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
463 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
464 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
465 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k)*adfac
474 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
478 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
484 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
485 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
486 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
515 IF (lconvolve(boundary))
THEN
516 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
520 bc(j,k)=hz(i,j,k)-fc(j,k)-fc(j,k-1)
529 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
533 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
537 bc(i,k)=hz(i,j,k)-fc(i,k)-fc(i,k-1)
546 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
554 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
563 ad_awrk(j,k,nnew)=ad_awrk(j,k,nnew)*rmask(i,j)
567 ad_dc(j,k)=ad_dc(j,k)+ &
569 ad_awrk(j,k,nnew)=0.0_r8
572 ad_dc(j,k+1)=-cf(j,k)*ad_dc(j,k)
579 ad_awrk(j,n(ng),nnew)=ad_awrk(j,n(ng),nnew)*rmask(i,j)
584 ad_dc(j,n(ng))=ad_dc(j,n(ng))+ &
585 & ad_awrk(j,n(ng),nnew)
586 ad_awrk(j,n(ng),nnew)=0.0_r8
592 adfac=ad_dc(j,n(ng))/ &
594 & fc(j,n(ng)-1)*cf(j,n(ng)-1))
595 ad_dc(j,n(ng)-1)=ad_dc(j,n(ng)-1)- &
596 & fc(j,n(ng)-1)*adfac
597 ad_dc(j,n(ng) )=adfac
599 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
608 ad_awrk(i,k,nnew)=ad_awrk(i,k,nnew)*rmask(i,j)
612 ad_dc(i,k)=ad_dc(i,k)+ &
614 ad_awrk(i,k,nnew)=0.0_r8
617 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
624 ad_awrk(i,n(ng),nnew)=ad_awrk(i,n(ng),nnew)*rmask(i,j)
628 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ &
629 & ad_awrk(i,n(ng),nnew)
630 ad_awrk(i,n(ng),nnew)=0.0_r8
636 adfac=ad_dc(i,n(ng))/ &
638 & fc(i,n(ng)-1)*cf(i,n(ng)-1))
639 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)- &
640 & fc(i,n(ng)-1)*adfac
641 ad_dc(i,n(ng) )=adfac
647 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
652 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
656 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k-1)*adfac
664 ad_dc(j,1)=cff*ad_dc(j,1)
666 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
671 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
675 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
683 ad_dc(i,1)=cff*ad_dc(i,1)
689 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
695 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
696 & hz(i,j,k)*ad_dc(j,k)
700 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
706 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
707 & hz(i,j,k)*ad_dc(i,k)
733 IF (lconvolve(boundary))
THEN
734 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
741 adfac=ohz(j,k)*ad_awrk(j,k,nnew)
742 ad_fs(j,k-1)=ad_fs(j,k-1)-adfac
743 ad_fs(j,k )=ad_fs(j,k )+adfac
744 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
746 ad_awrk(j,k,nnew)=0.0_r8
749 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
756 adfac=ohz(i,k)*ad_awrk(i,k,nnew)
757 ad_fs(i,k-1)=ad_fs(i,k-1)-adfac
758 ad_fs(i,k )=ad_fs(i,k )+adfac
759 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
761 ad_awrk(i,k,nnew)=0.0_r8
769 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
774 ad_fs(j,n(ng))=0.0_r8
782 ad_fs(j,k)=ad_fs(j,k)*rmask(i,j)
787 adfac=fc(j,k)*ad_fs(j,k)
788 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
789 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
793 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
798 ad_fs(i,n(ng))=0.0_r8
806 ad_fs(i,k)=ad_fs(i,k)*rmask(i,j)
811 adfac=fc(i,k)*ad_fs(i,k)
812 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
813 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
845 & lbij, ubij, 1, n(ng), &
855 & lbij, ubij, 1, n(ng), &
860 IF (lconvolve(boundary))
THEN
861 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
868 adfac=hfac(j)*ad_awrk(j,k,nnew)
869 ad_fe(j ,k)=ad_fe(j ,k)-adfac
870 ad_fe(j+1,k)=ad_fe(j+1,k)+adfac
871 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
873 ad_awrk(j,k,nnew)=0.0_r8
876 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
883 adfac=hfac(i)*ad_awrk(i,k,nnew)
884 ad_fx(i ,k)=ad_fx(i ,k)-adfac
885 ad_fx(i+1,k)=ad_fx(i+1,k)+adfac
886 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
888 ad_awrk(i,k,nnew)=0.0_r8
895 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
902 ad_fe(j,k)=ad_fe(j,k)*vmask(i,j)
908 adfac=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))*ad_fe(j,k)
909 ad_awrk(j-1,k,nold)=ad_awrk(j-1,k,nold)-adfac
910 ad_awrk(j ,k,nold)=ad_awrk(j ,k,nold)+adfac
914 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
921 ad_fx(i,k)=ad_fx(i,k)*umask(i,j)
927 adfac=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))*ad_fx(i,k)
928 ad_awrk(i-1,k,nold)=ad_awrk(i-1,k,nold)-adfac
929 ad_awrk(i ,k,nold)=ad_awrk(i ,k,nold)+adfac
941 IF (lconvolve(boundary))
THEN
942 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
947 ad_a(j,k)=ad_a(j,k)+ad_awrk(j,k,nold)
948 ad_awrk(j,k,nold)=0.0_r8
951 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
956 ad_a(i,k)=ad_a(i,k)+ad_awrk(i,k,nold)
957 ad_awrk(i,k,nold)=0.0_r8
970 & lbij, ubij, 1, n(ng), &
980 & lbij, ubij, 1, n(ng), &
989 & edge, LBij, UBij, &
990 & LBi, UBi, LBj, UBj, LBk, UBk, &
991 & IminS, ImaxS, JminS, JmaxS, &
992 & Nghost, NHsteps, NVsteps, &
993 & DTsizeH, DTsizeV, &
995 & pm, pn, pmon_r, pnom_p, &
1013 integer,
intent(in) :: ng, tile, model, boundary
1014 integer,
intent(in) :: edge(4)
1015 integer,
intent(in) :: LBij, UBij
1016 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
1017 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1018 integer,
intent(in) :: Nghost
1019 integer,
intent(in) :: NHsteps, NVsteps
1021 real(r8),
intent(in) :: DTsizeH, DTsizeV
1023# ifdef ASSUMED_SHAPE
1024 real(r8),
intent(in) :: pm(LBi:,LBj:)
1025 real(r8),
intent(in) :: pn(LBi:,LBj:)
1026 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
1027 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
1029 real(r8),
intent(in) :: umask(LBi:,LBj:)
1030 real(r8),
intent(in) :: pmask(LBi:,LBj:)
1032 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
1033 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
1035 real(r8),
intent(in) :: Kh(LBi:,LBj:)
1036 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
1037 real(r8),
intent(inout) :: ad_A(LBij:,LBk:)
1039 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
1040 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
1041 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
1042 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
1044 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
1045 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
1047 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
1048 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
1050 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
1051 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
1052 real(r8),
intent(inout) :: ad_A(LBij:UBij,LBk:UBk)
1057 logical,
dimension(4) :: Lconvolve
1059 integer :: Nnew, Nold, Nsav, i, j, k, step
1061 real(r8) :: adfac, cff, cff1
1063 real(r8),
dimension(LBij:UBij,LBk:UBk,2) :: ad_Awrk
1065 real(r8),
dimension(JminS:JmaxS,LBk:UBk) :: ad_FE
1066 real(r8),
dimension(IminS:ImaxS,LBk:UBk) :: ad_FX
1067 real(r8),
dimension(LBij:UBij) :: Hfac
1069# ifndef SPLINES_VCONV
1070 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
1072# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1073 real(r8),
dimension(LBij:UBij,N(ng)) :: oHz
1075# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
1076 real(r8),
dimension(LBij:UBij,0:N(ng)) :: BC
1077 real(r8),
dimension(LBij:UBij,0:N(ng)) :: CF
1078# ifdef SPLINES_VCONV
1079 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
1081 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_DC
1083 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_FS
1087# include "set_bounds.h"
1093 ad_awrk(lbij:ubij,lbk:ubk,1:2)=0.0_r8
1095# ifdef IMPLICIT_VCONV
1096 ad_dc(lbij:ubij,0:n(ng))=0.0_r8
1098 ad_fs(lbij:ubij,0:n(ng))=0.0_r8
1101 ad_fe(jmins:jmaxs,lbk:ubk)=0.0_r8
1102 ad_fx(imins:imaxs,lbk:ubk)=0.0_r8
1123 IF (lconvolve(boundary))
THEN
1125 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1128 hfac(j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
1130# ifndef SPLINES_VCONV
1133# ifdef IMPLICIT_VCONV
1134 fc(j,k)=-dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
1135 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
1136 & z_r(i-1,j,k )-z_r(i,j,k ))
1138 fc(j,k)=dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
1139 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
1140 & z_r(i-1,j,k )-z_r(i,j,k ))
1145# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1147 ohz(j,k)=2.0_r8/(hz(i-1,j,k)+hz(i,j,k))
1152 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1155 hfac(i)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
1157# ifndef SPLINES_VCONV
1160# ifdef IMPLICIT_VCONV
1161 fc(i,k)=-dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
1162 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
1163 & z_r(i-1,j,k )-z_r(i,j,k ))
1165 fc(i,k)=dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
1166 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
1167 & z_r(i-1,j,k )-z_r(i,j,k ))
1172# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1174 ohz(i,k)=2.0_r8/(hz(i-1,j,k)+hz(i,j,k))
1194 & lbij, ubij, 1, n(ng), &
1204 & lbij, ubij, 1, n(ng), &
1206 IF (lconvolve(boundary))
THEN
1207 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1212 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
1217 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1222 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
1231# ifdef IMPLICIT_VCONV
1232# ifdef SPLINES_VCONV
1253 IF (lconvolve(boundary))
THEN
1254 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1256 cff1=0.5_r8*(1.0_r8/6.0_r8)
1259 fc(j,k)=cff1*(hz(i-1,j,k )+hz(i,j,k ))- &
1260 & dtsizev*kv(i,j,k-1)*ohz(j,k )
1261 cf(j,k)=cff1*(hz(i-1,j,k+1)+hz(i,j,k+1))- &
1262 & dtsizev*kv(i,j,k+1)*ohz(j,k+1)
1266 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1268 cff1=0.5_r8*(1.0_r8/6.0_r8)
1271 fc(i,k)=cff1*(hz(i-1,j,k )+hz(i,j,k ))- &
1272 & dtsizev*kv(i,j,k-1)*ohz(i,k )
1273 cf(i,k)=cff1*(hz(i-1,j,k+1)+hz(i,j,k+1))- &
1274 & dtsizev*kv(i,j,k+1)*ohz(i,k+1)
1282 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1284 cff1=0.5_r8*(1.0_r8/3.0_r8)
1287 bc(j,k)=cff1*(hz(i-1,j,k )+hz(i,j,k )+ &
1288 & hz(i-1,j,k+1)+hz(i,j,k+1))+ &
1289 & dtsizev*kv(i,j,k)* &
1290 & (ohz(j,k)+ohz(j,k+1))
1291 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
1295 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1297 cff1=0.5_r8*(1.0_r8/3.0_r8)
1300 bc(i,k)=cff1*(hz(i-1,j,k )+hz(i,j,k )+ &
1301 & hz(i-1,j,k+1)+hz(i,j,k+1))+ &
1302 & dtsizev*kv(i,j,k)* &
1303 & (ohz(i,k)+ohz(i,k+1))
1304 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1312 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1320 adfac=dtsizev*ohz(j,k)*ad_awrk(j,k,nnew)
1321 ad_dc(j,k-1)=ad_dc(j,k-1)-adfac
1322 ad_dc(j,k )=ad_dc(j,k )+adfac
1323 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
1325 ad_awrk(j,k,nnew)=0.0_r8
1328 ad_dc(j,k)=ad_dc(j,k)*kv(i,j,k)
1335 ad_dc(j,k+1)=ad_dc(j,k+1)-cf(j,k)*ad_dc(j,k)
1341 ad_dc(j,n(ng))=0.0_r8
1343 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1351 adfac=dtsizev*ohz(i,k)*ad_awrk(i,k,nnew)
1352 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac
1353 ad_dc(i,k )=ad_dc(i,k )+adfac
1354 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
1356 ad_awrk(i,k,nnew)=0.0_r8
1359 ad_dc(i,k)=ad_dc(i,k)*kv(i,j,k)
1366 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
1372 ad_dc(i,n(ng))=0.0_r8
1378 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1382 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
1387 adfac=cff*ad_dc(j,k)
1388 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
1389 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
1390 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k)*adfac
1399 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1403 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1408 adfac=cff*ad_dc(i,k)
1409 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
1410 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
1411 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
1440 IF (lconvolve(boundary))
THEN
1441 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1445 cff=0.5_r8*(hz(i-1,j,k)+hz(i,j,k))
1446 bc(j,k)=cff-fc(j,k)-fc(j,k-1)
1455 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
1459 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1463 cff=0.5_r8*(hz(i-1,j,k)+hz(i,j,k))
1464 bc(i,k)=cff-fc(i,k)-fc(i,k-1)
1473 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
1481 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1490 ad_awrk(j,k,nnew)=ad_awrk(j,k,nnew)*umask(i,j)
1494 ad_dc(j,k)=ad_dc(j,k)+ &
1496 ad_awrk(j,k,nnew)=0.0_r8
1499 ad_dc(j,k+1)=-cf(j,k)*ad_dc(j,k)
1506 ad_awrk(j,n(ng),nnew)=ad_awrk(j,n(ng),nnew)*umask(i,j)
1510 ad_dc(j,n(ng))=ad_dc(j,n(ng))+ &
1511 & ad_awrk(j,n(ng),nnew)
1512 ad_awrk(j,n(ng),nnew)=0.0_r8
1518 adfac=ad_dc(j,n(ng))/ &
1520 & fc(j,n(ng)-1)*cf(j,n(ng)-1))
1521 ad_dc(j,n(ng)-1)=ad_dc(j,n(ng)-1)- &
1522 & fc(j,n(ng)-1)*adfac
1523 ad_dc(j,n(ng) )=adfac
1525 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1534 ad_awrk(i,k,nnew)=ad_awrk(i,k,nnew)*umask(i,j)
1538 ad_dc(i,k)=ad_dc(i,k)+ &
1540 ad_awrk(i,k,nnew)=0.0_r8
1543 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
1550 ad_awrk(i,n(ng),nnew)=ad_awrk(i,n(ng),nnew)*umask(i,j)
1554 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ &
1555 & ad_awrk(i,n(ng),nnew)
1556 ad_awrk(i,n(ng),nnew)=0.0_r8
1562 adfac=ad_dc(i,n(ng))/ &
1564 & fc(i,n(ng)-1)*cf(i,n(ng)-1))
1565 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)- &
1566 & fc(i,n(ng)-1)*adfac
1567 ad_dc(i,n(ng) )=adfac
1573 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1578 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
1581 adfac=cff*ad_dc(j,k)
1582 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k-1)*adfac
1590 ad_dc(j,1)=cff*ad_dc(j,1)
1592 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1597 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
1600 adfac=cff*ad_dc(i,k)
1601 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
1609 ad_dc(i,1)=cff*ad_dc(i,1)
1615 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1619 cff=0.5_r8*(hz(i-1,j,k)+hz(i,j,k))
1622 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
1627 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1631 cff=0.5_r8*(hz(i-1,j,k)+hz(i,j,k))
1634 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
1661 IF (lconvolve(boundary))
THEN
1662 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1669 adfac=ohz(j,k)*ad_awrk(j,k,nnew)
1670 ad_fs(j,k-1)=ad_fs(j,k-1)-adfac
1671 ad_fs(j,k )=ad_fs(j,k )+adfac
1672 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
1674 ad_awrk(j,k,nnew)=0.0_r8
1677 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1684 adfac=ohz(i,k)*ad_awrk(i,k,nnew)
1685 ad_fs(i,k-1)=ad_fs(i,k-1)-adfac
1686 ad_fs(i,k )=ad_fs(i,k )+adfac
1687 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
1689 ad_awrk(i,k,nnew)=0.0_r8
1697 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1702 ad_fs(j,n(ng))=0.0_r8
1710 ad_fs(j,k)=ad_fs(j,k)*umask(i,j)
1715 adfac=fc(j,k)*ad_fs(j,k)
1716 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
1717 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
1721 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1726 ad_fs(i,n(ng))=0.0_r8
1734 ad_fs(i,k)=ad_fs(i,k)*umask(i,j)
1739 adfac=fc(i,k)*ad_fs(i,k)
1740 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
1741 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
1773 & lbij, ubij, 1, n(ng), &
1776 & ad_awrk(:,:,nnew))
1783 & lbij, ubij, 1, n(ng), &
1784 & ad_awrk(:,:,nnew))
1788 IF (lconvolve(boundary))
THEN
1789 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1796 adfac=hfac(j)*ad_awrk(j,k,nnew)
1797 ad_fe(j ,k)=ad_fe(j ,k)-adfac
1798 ad_fe(j+1,k)=ad_fe(j+1,k)+adfac
1799 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
1801 ad_awrk(j,k,nnew)=0.0_r8
1804 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1811 adfac=hfac(i)*ad_awrk(i,k,nnew)
1812 ad_fx(i-1,k)=ad_fx(i-1,k)-adfac
1813 ad_fx(i ,k)=ad_fx(i ,k)+adfac
1814 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
1816 ad_awrk(i,k,nnew)=0.0_r8
1823 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1830 ad_fe(j,k)=ad_fe(j,k)*pmask(i,j)
1838 adfac=pnom_p(i,j)* &
1839 & 0.25_r8*(kh(i-1,j )+kh(i,j )+ &
1840 & kh(i-1,j-1)+kh(i,j-1))*ad_fe(j,k)
1841 ad_awrk(j-1,k,nold)=ad_awrk(j-1,k,nold)-adfac
1842 ad_awrk(j ,k,nold)=ad_awrk(j ,k,nold)+adfac
1846 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1854 adfac=pmon_r(i,j)*kh(i,j)*ad_fx(i,k)
1855 ad_awrk(i ,k,nold)=ad_awrk(i ,k,nold)-adfac
1856 ad_awrk(i+1,k,nold)=ad_awrk(i+1,k,nold)+adfac
1868 IF (lconvolve(boundary))
THEN
1869 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
1874 ad_a(j,k)=ad_a(j,k)+ad_awrk(j,k,nold)
1875 ad_awrk(j,k,nold)=0.0_r8
1878 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
1883 ad_a(i,k)=ad_a(i,k)+ad_awrk(i,k,nold)
1884 ad_awrk(i,k,nold)=0.0_r8
1897 & lbij, ubij, 1, n(ng), &
1907 & lbij, ubij, 1, n(ng), &
1916 & edge, LBij, UBij, &
1917 & LBi, UBi, LBj, UBj, LBk, UBk, &
1918 & IminS, ImaxS, JminS, JmaxS, &
1919 & Nghost, NHsteps, NVsteps, &
1920 & DTsizeH, DTsizeV, &
1922 & pm, pn, pmon_p, pnom_r, &
1940 integer,
intent(in) :: ng, tile, model, boundary
1941 integer,
intent(in) :: edge(4)
1942 integer,
intent(in) :: LBij, UBij
1943 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
1944 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1945 integer,
intent(in) :: Nghost, NHsteps, NVsteps
1947 real(r8),
intent(in) :: DTsizeH, DTsizeV
1949# ifdef ASSUMED_SHAPE
1950 real(r8),
intent(in) :: pm(LBi:,LBj:)
1951 real(r8),
intent(in) :: pn(LBi:,LBj:)
1952 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
1953 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
1955 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1956 real(r8),
intent(in) :: pmask(LBi:,LBj:)
1958 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
1959 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
1961 real(r8),
intent(in) :: Kh(LBi:,LBj:)
1962 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
1963 real(r8),
intent(inout) :: ad_A(LBij:,LBk:)
1965 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
1966 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
1967 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
1968 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
1970 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1971 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
1973 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
1974 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
1976 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
1977 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
1978 real(r8),
intent(inout) :: ad_A(LBij:UBij,LBk:UBk)
1983 logical,
dimension(4) :: Lconvolve
1985 integer :: Nnew, Nold, Nsav, i, j, k, step
1987 real(r8) :: adfac, cff, cff1
1989 real(r8),
dimension(LBij:UBij,LBk:UBk,2) :: ad_Awrk
1991 real(r8),
dimension(JminS:JmaxS,LBk:UBk) :: ad_FE
1992 real(r8),
dimension(IminS:ImaxS,LBk:UBk) :: ad_FX
1993 real(r8),
dimension(LBij:UBij) :: Hfac
1995# ifndef SPLINES_VCONV
1996 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
1998# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1999 real(r8),
dimension(LBij:UBij,N(ng)) :: oHz
2001# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
2002 real(r8),
dimension(LBij:UBij,0:N(ng)) :: BC
2003 real(r8),
dimension(LBij:UBij,0:N(ng)) :: CF
2004# ifdef SPLINES_VCONV
2005 real(r8),
dimension(LBij:UBij,0:N(ng)) :: FC
2007 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_DC
2009 real(r8),
dimension(LBij:UBij,0:N(ng)) :: ad_FS
2013# include "set_bounds.h"
2019 ad_awrk(lbij:ubij,lbk:ubk,1:2)=0.0_r8
2021# ifdef IMPLICIT_VCONV
2022 ad_dc(lbij:ubij,0:n(ng))=0.0_r8
2024 ad_fs(lbij:ubij,0:n(ng))=0.0_r8
2027 ad_fe(jmins:jmaxs,lbk:ubk)=0.0_r8
2028 ad_fx(imins:imaxs,lbk:ubk)=0.0_r8
2049 IF (lconvolve(boundary))
THEN
2051 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2054 hfac(j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
2056# ifndef SPLINES_VCONV
2059# ifdef IMPLICIT_VCONV
2060 fc(j,k)=-dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
2061 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
2062 & z_r(i,j-1,k )-z_r(i,j,k ))
2064 fc(j,k)=dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
2065 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
2066 & z_r(i,j-1,k )-z_r(i,j,k ))
2071# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
2073 ohz(j,k)=2.0_r8/(hz(i,j-1,k)+hz(i,j,k))
2078 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2081 hfac(i)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
2083# ifndef SPLINES_VCONV
2086# ifdef IMPLICIT_VCONV
2087 fc(i,k)=-dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
2088 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
2089 & z_r(i,j-1,k )-z_r(i,j,k ))
2091 fc(i,k)=dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
2092 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
2093 & z_r(i,j-1,k )-z_r(i,j,k ))
2098# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
2100 ohz(i,k)=2.0_r8/(hz(i,j-1,k)+hz(i,j,k))
2120 & lbij, ubij, 1, n(ng), &
2130 & lbij, ubij, 1, n(ng), &
2132 IF (lconvolve(boundary))
THEN
2133 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2138 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
2143 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2148 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
2157# ifdef IMPLICIT_VCONV
2158# ifdef SPLINES_VCONV
2179 IF (lconvolve(boundary))
THEN
2180 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2182 cff1=0.5_r8*(1.0_r8/6.0_r8)
2185 fc(j,k)=cff1*(hz(i,j-1,k )+hz(i,j,k ))- &
2186 & dtsizev*kv(i,j,k-1)*ohz(j,k )
2187 cf(j,k)=cff1*(hz(i,j-1,k+1)+hz(i,j,k+1))- &
2188 & dtsizev*kv(i,j,k+1)*ohz(j,k+1)
2192 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2194 cff1=0.5_r8*(1.0_r8/6.0_r8)
2197 fc(i,k)=cff1*(hz(i,j-1,k )+hz(i,j,k ))- &
2198 & dtsizev*kv(i,j,k-1)*ohz(i,k )
2199 cf(i,k)=cff1*(hz(i,j-1,k+1)+hz(i,j,k+1))- &
2200 & dtsizev*kv(i,j,k+1)*ohz(i,k+1)
2208 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2210 cff1=0.5_r8*(1.0_r8/3.0_r8)
2213 bc(j,k)=cff1*(hz(i,j-1,k )+hz(i,j,k )+ &
2214 & hz(i,j-1,k+1)+hz(i,j,k+1))+ &
2215 & dtsizev*kv(i,j,k)* &
2216 & (ohz(j,k)+ohz(j,k+1))
2217 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
2221 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2223 cff1=0.5_r8*(1.0_r8/3.0_r8)
2226 bc(i,k)=cff1*(hz(i,j-1,k )+hz(i,j,k )+ &
2227 & hz(i,j-1,k+1)+hz(i,j,k+1))+ &
2228 & dtsizev*kv(i,j,k)* &
2229 & (ohz(i,k)+ohz(i,k+1))
2230 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
2238 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2246 adfac=dtsizev*ohz(j,k)*ad_awrk(j,k,nnew)
2247 ad_dc(j,k-1)=ad_dc(j,k-1)-adfac
2248 ad_dc(j,k )=ad_dc(j,k )+adfac
2249 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
2251 ad_awrk(j,k,nnew)=0.0_r8
2254 ad_dc(j,k)=ad_dc(j,k)*kv(i,j,k)
2261 ad_dc(j,k+1)=ad_dc(j,k+1)-cf(j,k)*ad_dc(j,k)
2267 ad_dc(j,n(ng))=0.0_r8
2269 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2277 adfac=dtsizev*ohz(i,k)*ad_awrk(i,k,nnew)
2278 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac
2279 ad_dc(i,k )=ad_dc(i,k )+adfac
2280 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
2282 ad_awrk(i,k,nnew)=0.0_r8
2285 ad_dc(i,k)=ad_dc(i,k)*kv(i,j,k)
2292 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
2298 ad_dc(i,n(ng))=0.0_r8
2304 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2308 cff=1.0_r8/(bc(j,k)-fc(j,k)*cf(j,k-1))
2313 adfac=cff*ad_dc(j,k)
2314 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
2315 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
2316 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k)*adfac
2325 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2329 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
2334 adfac=cff*ad_dc(i,k)
2335 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
2336 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
2337 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
2366 IF (lconvolve(boundary))
THEN
2367 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2371 cff=0.5_r8*(hz(i,j-1,k)+hz(i,j,k))
2372 bc(j,k)=cff-fc(j,k)-fc(j,k-1)
2381 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
2385 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2389 cff=0.5_r8*(hz(i,j-1,k)+hz(i,j,k))
2390 bc(i,k)=cff-fc(i,k)-fc(i,k-1)
2399 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
2407 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2416 ad_awrk(j,k,nnew)=ad_awrk(j,k,nnew)*vmask(i,j)
2420 ad_dc(j,k)=ad_dc(j,k)+ &
2422 ad_awrk(j,k,nnew)=0.0_r8
2425 ad_dc(j,k+1)=-cf(j,k)*ad_dc(j,k)
2432 ad_awrk(j,n(ng),nnew)=ad_awrk(j,n(ng),nnew)*vmask(i,j)
2435 ad_dc(j,n(ng))=ad_dc(j,n(ng))+ad_awrk(j,n(ng),nnew)
2436 ad_awrk(j,n(ng),nnew)=0.0_r8
2443 adfac=ad_dc(j,n(ng))/ &
2445 & fc(j,n(ng)-1)*cf(j,n(ng)-1))
2446 ad_dc(j,n(ng)-1)=ad_dc(j,n(ng)-1)-fc(j,n(ng)-1)*adfac
2447 ad_dc(j,n(ng))=adfac
2449 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2458 ad_awrk(i,k,nnew)=ad_awrk(i,k,nnew)*vmask(i,j)
2462 ad_dc(i,k)=ad_dc(i,k)+ &
2464 ad_awrk(i,k,nnew)=0.0_r8
2467 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
2474 ad_awrk(i,n(ng),nnew)=ad_awrk(i,n(ng),nnew)*vmask(i,j)
2478 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ &
2479 & ad_awrk(i,n(ng),nnew)
2480 ad_awrk(i,n(ng),nnew)=0.0_r8
2486 adfac=ad_dc(i,n(ng))/ &
2488 & fc(i,n(ng)-1)*cf(i,n(ng)-1))
2489 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)- &
2490 & fc(i,n(ng)-1)*adfac
2491 ad_dc(i,n(ng) )=adfac
2497 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2502 cff=1.0_r8/(bc(j,k)-fc(j,k-1)*cf(j,k-1))
2505 adfac=cff*ad_dc(j,k)
2506 ad_dc(j,k-1)=ad_dc(j,k-1)-fc(j,k-1)*adfac
2514 ad_dc(j,1)=cff*ad_dc(j,1)
2516 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2521 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
2524 adfac=cff*ad_dc(i,k)
2525 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
2533 ad_dc(i,1)=cff*ad_dc(i,1)
2539 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2543 cff=0.5_r8*(hz(i,j-1,k)+hz(i,j,k))
2546 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
2551 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2555 cff=0.5_r8*(hz(i,j-1,k)+hz(i,j,k))
2558 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
2585 IF (lconvolve(boundary))
THEN
2586 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2593 adfac=ohz(j,k)*ad_awrk(j,k,nnew)
2594 ad_fs(j,k-1)=ad_fs(j,k-1)-adfac
2595 ad_fs(j,k )=ad_fs(j,k )+adfac
2596 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
2598 ad_awrk(j,k,nnew)=0.0_r8
2601 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2608 adfac=ohz(i,k)*ad_awrk(i,k,nnew)
2609 ad_fs(i,k-1)=ad_fs(i,k-1)-adfac
2610 ad_fs(i,k )=ad_fs(i,k )+adfac
2611 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
2613 ad_awrk(i,k,nnew)=0.0_r8
2621 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2626 ad_fs(j,n(ng))=0.0_r8
2634 ad_fs(j,k)=ad_fs(j,k)*vmask(i,j)
2639 adfac=fc(j,k)*ad_fs(j,k)
2640 ad_awrk(j,k ,nold)=ad_awrk(j,k ,nold)-adfac
2641 ad_awrk(j,k+1,nold)=ad_awrk(j,k+1,nold)+adfac
2645 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2650 ad_fs(i,n(ng))=0.0_r8
2658 ad_fs(i,k)=ad_fs(i,k)*vmask(i,j)
2663 adfac=fc(i,k)*ad_fs(i,k)
2664 ad_awrk(i,k ,nold)=ad_awrk(i,k ,nold)-adfac
2665 ad_awrk(i,k+1,nold)=ad_awrk(i,k+1,nold)+adfac
2697 & lbij, ubij, 1, n(ng), &
2700 & ad_awrk(:,:,nnew))
2707 & lbij, ubij, 1, n(ng), &
2708 & ad_awrk(:,:,nnew))
2712 IF (lconvolve(boundary))
THEN
2713 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2720 adfac=hfac(j)*ad_awrk(j,k,nnew)
2721 ad_fe(j-1,k)=ad_fe(j-1,k)-adfac
2722 ad_fe(j ,k)=ad_fe(j ,k)+adfac
2723 ad_awrk(j,k,nold)=ad_awrk(j,k,nold)+ &
2725 ad_awrk(j,k,nnew)=0.0_r8
2728 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2735 adfac=hfac(i)*ad_awrk(i,k,nnew)
2736 ad_fx(i ,k)=ad_fx(i ,k)-adfac
2737 ad_fx(i+1,k)=ad_fx(i+1,k)+adfac
2738 ad_awrk(i,k,nold)=ad_awrk(i,k,nold)+ &
2740 ad_awrk(i,k,nnew)=0.0_r8
2747 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2755 adfac=pnom_r(i,j)*kh(i,j)*ad_fe(j,k)
2756 ad_awrk(j ,k,nold)=ad_awrk(j ,k,nold)-adfac
2757 ad_awrk(j+1,k,nold)=ad_awrk(j+1,k,nold)+adfac
2761 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2768 ad_fx(i,k)=ad_fx(i,k)*pmask(i,j)
2776 adfac=pmon_p(i,j)* &
2777 & 0.25_r8*(kh(i-1,j )+kh(i,j )+ &
2778 & kh(i-1,j-1)+kh(i,j-1))*ad_fx(i,k)
2779 ad_awrk(i-1,k,nold)=ad_awrk(i-1,k,nold)-adfac
2780 ad_awrk(i ,k,nold)=ad_awrk(i ,k,nold)+adfac
2792 IF (lconvolve(boundary))
THEN
2793 IF ((boundary.eq.
iwest).or.(boundary.eq.
ieast))
THEN
2798 ad_a(j,k)=ad_a(j,k)+ad_awrk(j,k,nold)
2799 ad_awrk(j,k,nold)=0.0_r8
2802 ELSE IF ((boundary.eq.
isouth).or.(boundary.eq.
inorth))
THEN
2807 ad_a(i,k)=ad_a(i,k)+ad_awrk(i,k,nold)
2808 ad_awrk(i,k,nold)=0.0_r8
2821 & lbij, ubij, 1, n(ng), &
2831 & lbij, ubij, 1, n(ng), &