69 & LBi, UBi, LBj, UBj, LBk, UBk, &
70 & IminS, ImaxS, JminS, JmaxS, &
71 & Nghost, NHsteps, NVsteps, &
75# ifdef GEOPOTENTIAL_HCONV
81 & rmask, umask, vmask, &
97 integer,
intent(in) :: ng, tile, model
98 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
99 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
100 integer,
intent(in) :: Nghost, NHsteps, NVsteps
102 real(r8),
intent(in) :: DTsizeH, DTsizeV
105 real(r8),
intent(in) :: pm(LBi:,LBj:)
106 real(r8),
intent(in) :: pn(LBi:,LBj:)
107# ifdef GEOPOTENTIAL_HCONV
108 real(r8),
intent(in) :: on_u(LBi:,LBj:)
109 real(r8),
intent(in) :: om_v(LBi:,LBj:)
111 real(r8),
intent(in) :: pmon_u(LBi:,LBj:)
112 real(r8),
intent(in) :: pnom_v(LBi:,LBj:)
115 real(r8),
intent(in) :: rmask(LBi:,LBj:)
116 real(r8),
intent(in) :: umask(LBi:,LBj:)
117 real(r8),
intent(in) :: vmask(LBi:,LBj:)
119 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
120 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
122 real(r8),
intent(in) :: Kh(LBi:,LBj:)
123 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
125 real(r8),
intent(inout) :: tl_A(LBi:,LBj:,LBk:)
127 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
128 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
129# ifdef GEOPOTENTIAL_HCONV
130 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
131 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
133 real(r8),
intent(in) :: pmon_u(LBi:UBi,LBj:UBj)
134 real(r8),
intent(in) :: pnom_v(LBi:UBi,LBj:UBj)
137 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
138 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
139 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
141 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
142 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
144 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
145 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
146 real(r8),
intent(inout) :: tl_A(LBi:UBi,LBj:UBj,LBk:UBk)
151 integer :: Nnew, Nold, Nsav, i, j, k, k1, k2, step
153 real(r8) :: cff, cff1, cff2, cff3, cff4
155 real(r8),
dimension(LBi:UBi,LBj:UBj,LBk:UBk,2) :: tl_Awrk
157 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
158 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
159 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
161# ifndef SPLINES_VCONV
162 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: FC
164# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
165 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: oHz
167# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
168 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BC
169 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
171 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
173 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
175 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FS
178# ifdef GEOPOTENTIAL_HCONV
179 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx
180 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde
181 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FZ
182 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdz
183 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdx
184 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAde
187# include "set_bounds.h"
200 hfac(i,j)=dtsizeh*pm(i,j)*pn(i,j)
202# ifndef SPLINES_VCONV
205# ifdef IMPLICIT_VCONV
206 fc(i,j,k)=-dtsizev*kv(i,j,k)/(z_r(i,j,k+1)-z_r(i,j,k))
208 fc(i,j,k)=dtsizev*kv(i,j,k)/(z_r(i,j,k+1)-z_r(i,j,k))
213# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
215 ohz(i,j,k)=1.0_r8/hz(i,j,k)
231 & lbi, ubi, lbj, ubj, lbk, ubk, &
241 & lbi, ubi, lbj, ubj, lbk, ubk, &
251 tl_awrk(i,j,k,nold)=tl_a(i,j,k)
262# ifdef GEOPOTENTIAL_HCONV
274 k_loop :
DO k=0,n(ng)
280 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
284 dzdx(i,j,k2)=cff*(z_r(i ,j,k+1)- &
290 tl_dadx(i,j,k2)=cff* &
291 & (tl_awrk(i ,j,k+1,nold)*rmask(i ,j)- &
292 & tl_awrk(i-1,j,k+1,nold)*rmask(i-1,j))
297 tl_dadx(i,j,k2)=cff*(tl_awrk(i ,j,k+1,nold)- &
298 & tl_awrk(i-1,j,k+1,nold))
304 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
308 dzde(i,j,k2)=cff*(z_r(i,j ,k+1)- &
314 tl_dade(i,j,k2)=cff* &
315 & (tl_awrk(i,j ,k+1,nold)*rmask(i,j )- &
316 & tl_awrk(i,j-1,k+1,nold)*rmask(i,j-1))
321 tl_dade(i,j,k2)=cff*(tl_awrk(i,j ,k+1,nold)- &
322 & tl_awrk(i,j-1,k+1,nold))
327 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
332 tl_dadz(i,j,k2)=0.0_r8
341 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
345 tl_dadz(i,j,k2)=cff*(tl_awrk(i,j,k+1,nold)- &
346 & tl_awrk(i,j,k ,nold))
350 tl_dadz(i,j,k2)=tl_dadz(i,j,k2)*rmask(i,j)
362 cff=0.25_r8*(kh(i-1,j)+kh(i-1,j))*on_u(i,j)
363 cff1=min(dzdx(i,j,k1),0.0_r8)
364 cff2=max(dzdx(i,j,k1),0.0_r8)
374 & (hz(i,j,k)+hz(i-1,j,k))* &
375 & (tl_dadx(i,j,k1)- &
376 & 0.5_r8*(cff1*(tl_dadz(i-1,j,k1)+ &
377 & tl_dadz(i ,j,k2))+ &
378 & cff2*(tl_dadz(i-1,j,k2)+ &
379 & tl_dadz(i ,j,k1))))
384 cff=0.25_r8*(kh(i,j-1)+kh(i,j))*om_v(i,j)
385 cff1=min(dzde(i,j,k1),0.0_r8)
386 cff2=max(dzde(i,j,k1),0.0_r8)
396 & (hz(i,j,k)+hz(i,j-1,k))* &
397 & (tl_dade(i,j,k1)- &
398 & 0.5_r8*(cff1*(tl_dadz(i,j-1,k1)+ &
399 & tl_dadz(i,j ,k2))+ &
400 & cff2*(tl_dadz(i,j-1,k2)+ &
401 & tl_dadz(i,j ,k1))))
408 cff1=min(dzdx(i ,j,k1),0.0_r8)
409 cff2=min(dzdx(i+1,j,k2),0.0_r8)
410 cff3=max(dzdx(i ,j,k2),0.0_r8)
411 cff4=max(dzdx(i+1,j,k1),0.0_r8)
419 & (cff1*(cff1*tl_dadz(i,j,k2)- &
420 & tl_dadx(i ,j,k1))+ &
421 & cff2*(cff2*tl_dadz(i,j,k2)- &
422 & tl_dadx(i+1,j,k2))+ &
423 & cff3*(cff3*tl_dadz(i,j,k2)- &
424 & tl_dadx(i ,j,k2))+ &
425 & cff4*(cff4*tl_dadz(i,j,k2)- &
426 & tl_dadx(i+1,j,k1)))
427 cff1=min(dzde(i,j ,k1),0.0_r8)
428 cff2=min(dzde(i,j+1,k2),0.0_r8)
429 cff3=max(dzde(i,j ,k2),0.0_r8)
430 cff4=max(dzde(i,j+1,k1),0.0_r8)
438 tl_fz(i,j,k2)=tl_fz(i,j,k2)+ &
440 & (cff1*(cff1*tl_dadz(i,j,k2)- &
441 & tl_dade(i,j ,k1))+ &
442 & cff2*(cff2*tl_dadz(i,j,k2)- &
443 & tl_dade(i,j+1,k2))+ &
444 & cff3*(cff3*tl_dadz(i,j,k2)- &
445 & tl_dade(i,j ,k2))+ &
446 & cff4*(cff4*tl_dadz(i,j,k2)- &
447 & tl_dade(i,j+1,k1)))
463 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
465 & (tl_fx(i+1,j )-tl_fx(i,j)+ &
466 & tl_fe(i ,j+1)-tl_fe(i,j))+ &
468 & (tl_fz(i,j,k2)-tl_fz(i,j,k1))
486 tl_fx(i,j)=pmon_u(i,j)*0.5_r8*(kh(i-1,j)+kh(i,j))* &
487 & (tl_awrk(i,j,k,nold)-tl_awrk(i-1,j,k,nold))
491 tl_fx(i,j)=tl_fx(i,j)*umask(i,j)
500 tl_fe(i,j)=pnom_v(i,j)*0.5_r8*(kh(i,j-1)+kh(i,j))* &
501 & (tl_awrk(i,j,k,nold)-tl_awrk(i,j-1,k,nold))
505 tl_fe(i,j)=tl_fe(i,j)*vmask(i,j)
519 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
521 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
522 & tl_fe(i,j+1)-tl_fe(i,j))
535 & lbi, ubi, lbj, ubj, lbk, ubk, &
536 & tl_awrk(:,:,:,nnew))
545 & lbi, ubi, lbj, ubj, lbk, ubk, &
548 & tl_awrk(:,:,:,nnew))
559# ifdef IMPLICIT_VCONV
577 fc(i,k)=cff1*hz(i,j,k )- &
578 & dtsizev*kv(i,j,k-1)*ohz(i,j,k )
579 cf(i,k)=cff1*hz(i,j,k+1)- &
580 & dtsizev*kv(i,j,k+1)*ohz(i,j,k+1)
595 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
596 & dtsizev*kv(i,j,k)*(ohz(i,j,k)+ohz(i,j,k+1))
597 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
602 tl_dc(i,k)=cff*(tl_awrk(i,j,k+1,nold)- &
603 & tl_awrk(i,j,k ,nold)- &
604 & fc(i,k)*tl_dc(i,k-1))
613 tl_dc(i,n(ng))=0.0_r8
619 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
627 tl_dc(i,k)=tl_dc(i,k)*kv(i,j,k)
632 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
633 & dtsizev*ohz(i,j,k)* &
634 & (tl_dc(i,k)-tl_dc(i,k-1))
659 bc(i,k)=hz(i,j,k)-fc(i,j,k)-fc(i,j,k-1)
662 tl_dc(i,k)=tl_awrk(i,j,k,nold)*hz(i,j,k)
670 cf(i,1)=cff*fc(i,j,1)
673 tl_dc(i,1)=cff*tl_dc(i,1)
677 cff=1.0_r8/(bc(i,k)-fc(i,j,k-1)*cf(i,k-1))
678 cf(i,k)=cff*fc(i,j,k)
681 tl_dc(i,k)=cff*(tl_dc(i,k)-fc(i,j,k-1)*tl_dc(i,k-1))
692 tl_dc(i,n(ng))=(tl_dc(i,n(ng))- &
693 & fc(i,j,n(ng)-1)*tl_dc(i,n(ng)-1))/ &
694 & (bc(i,n(ng))-fc(i,j,n(ng)-1)*cf(i,n(ng)-1))
697 tl_awrk(i,j,n(ng),nnew)=tl_dc(i,n(ng))
701 tl_awrk(i,j,n(ng),nnew)=tl_awrk(i,j,n(ng),nnew)*rmask(i,j)
708 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
711 tl_awrk(i,j,k,nnew)=tl_dc(i,k)
715 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nnew)*rmask(i,j)
745 tl_fs(i,k)=fc(i,j,k)*(tl_awrk(i,j,k+1,nold)- &
746 & tl_awrk(i,j,k ,nold))
750 tl_fs(i,k)=tl_fs(i,k)*rmask(i,j)
760 tl_fs(i,n(ng))=0.0_r8
772 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
773 & ohz(i,j,k)*(tl_fs(i,k )- &
797 tl_a(i,j,k)=tl_awrk(i,j,k,nold)
806 & lbi, ubi, lbj, ubj, lbk, ubk, &
816 & lbi, ubi, lbj, ubj, lbk, ubk, &
827 & LBi, UBi, LBj, UBj, LBk, UBk, &
828 & IminS, ImaxS, JminS, JmaxS, &
829 & Nghost, NHsteps, NVsteps, &
830 & DTsizeH, DTsizeV, &
833# ifdef GEOPOTENTIAL_HCONV
839# ifdef GEOPOTENTIAL_HCONV
840 & pmask, rmask, umask, vmask, &
859 integer,
intent(in) :: ng, tile, model
860 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
861 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
862 integer,
intent(in) :: Nghost, NHsteps, NVsteps
864 real(r8),
intent(in) :: DTsizeH, DTsizeV
867 real(r8),
intent(in) :: pm(LBi:,LBj:)
868 real(r8),
intent(in) :: pn(LBi:,LBj:)
869# ifdef GEOPOTENTIAL_HCONV
870 real(r8),
intent(in) :: on_r(LBi:,LBj:)
871 real(r8),
intent(in) :: om_p(LBi:,LBj:)
873 real(r8),
intent(in) :: pmon_r(LBi:,LBj:)
874 real(r8),
intent(in) :: pnom_p(LBi:,LBj:)
877# ifdef GEOPOTENTIAL_HCONV
878 real(r8),
intent(in) :: pmask(LBi:,LBj:)
879 real(r8),
intent(in) :: rmask(LBi:,LBj:)
880 real(r8),
intent(in) :: umask(LBi:,LBj:)
881 real(r8),
intent(in) :: vmask(LBi:,LBj:)
883 real(r8),
intent(in) :: umask(LBi:,LBj:)
884 real(r8),
intent(in) :: pmask(LBi:,LBj:)
887 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
888 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
890 real(r8),
intent(in) :: Kh(LBi:,LBj:)
891 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
893 real(r8),
intent(inout) :: tl_A(LBi:,LBj:,LBk:)
895 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
896 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
897# ifdef GEOPOTENTIAL_HCONV
898 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
899 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
901 real(r8),
intent(in) :: pmon_r(LBi:UBi,LBj:UBj)
902 real(r8),
intent(in) :: pnom_p(LBi:UBi,LBj:UBj)
905# ifdef GEOPOTENTIAL_HCONV
906 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
907 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
908 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
909 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
911 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
912 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
915 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
916 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
918 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
919 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
920 real(r8),
intent(inout) :: tl_A(LBi:UBi,LBj:UBj,LBk:UBk)
925 integer :: Nnew, Nold, Nsav, i, j, k, k1, k2, step
927 real(r8) :: cff, cff1, cff2, cff3, cff4
929 real(r8),
dimension(LBi:UBi,LBj:UBj,LBk:UBk,2) :: tl_Awrk
931 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
932 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
933 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
935# ifndef SPLINES_VCONV
936 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: FC
938# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
939 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: oHz
941# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
942 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BC
943 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
945 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
946 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hzk
948 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
950 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FS
953# ifdef GEOPOTENTIAL_HCONV
954 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dZdx
955 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dZde
957 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_r
958 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_p
959 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FZ
960 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdz
961 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdx
962 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAde
965# include "set_bounds.h"
979 hfac(i,j)=cff*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
981# ifndef SPLINES_VCONV
984# ifdef IMPLICIT_VCONV
985 fc(i,j,k)=-dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
986 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
987 & z_r(i-1,j,k )-z_r(i,j,k ))
989 fc(i,j,k)=dtsizev*(kv(i-1,j,k)+kv(i,j,k))/ &
990 & (z_r(i-1,j,k+1)+z_r(i,j,k+1)- &
991 & z_r(i-1,j,k )-z_r(i,j,k ))
996# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
998 ohz(i,j,k)=2.0_r8/(hz(i-1,j,k)+hz(i,j,k))
1014 & lbi, ubi, lbj, ubj, lbk, ubk, &
1024 & lbi, ubi, lbj, ubj, lbk, ubk, &
1034 tl_awrk(i,j,k,nold)=tl_a(i,j,k)
1045# ifdef GEOPOTENTIAL_HCONV
1057 k_loop :
DO k=0,n(ng)
1060 IF (k.lt.n(ng))
THEN
1063 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1067 dzdx(i,j)=cff*(z_r(i ,j,k+1)- &
1074 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1078 dzde(i,j)=cff*(z_r(i,j ,k+1)- &
1090 tl_dadx(i,j,k2)=pm(i,j)* &
1091 & (tl_awrk(i+1,j,k+1,nold)*umask(i+1,j)- &
1092 & tl_awrk(i ,j,k+1,nold)*umask(i ,j))
1095 tl_dadx(i,j,k2)=tl_dadx(i,j,k2)*rmask(i,j)
1100 tl_dadx(i,j,k2)=pm(i,j)*(tl_awrk(i+1,j,k+1,nold)- &
1101 & tl_awrk(i ,j,k+1,nold))
1103 dzdx_r(i,j,k2)=0.5_r8*(dzdx(i ,j)+ &
1110 cff=0.25_r8*(pn(i-1,j )+pn(i,j )+ &
1111 & pn(i-1,j-1)+pn(i,j-1))
1117 tl_dade(i,j,k2)=cff* &
1118 & (tl_awrk(i,j ,k+1,nold)*umask(i,j )- &
1119 & tl_awrk(i,j-1,k+1,nold)*umask(i,j-1))
1123 tl_dade(i,j,k2)=tl_dade(i,j,k2)*pmask(i,j)
1128 tl_dade(i,j,k2)=cff*(tl_awrk(i,j ,k+1,nold)- &
1129 & tl_awrk(i,j-1,k+1,nold))
1131 dzde_p(i,j,k2)=0.5_r8*(dzde(i-1,j)+ &
1137 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
1142 tl_dadz(i,j,k2)=0.0_r8
1145 tl_fz(i,j,k2)=0.0_r8
1151 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1155 tl_dadz(i,j,k2)=cff*(tl_awrk(i,j,k+1,nold)- &
1156 & tl_awrk(i,j,k ,nold))
1160 tl_dadz(i,j,k2)=tl_dadz(i,j,k2)*umask(i,j)
1172 cff=kh(i,j)*on_r(i,j)
1173 cff1=min(dzdx_r(i,j,k1),0.0_r8)
1174 cff2=max(dzdx_r(i,j,k1),0.0_r8)
1185 & (tl_dadx(i,j,k1)- &
1186 & 0.5_r8*(cff1*(tl_dadz(i ,j,k1)+ &
1187 & tl_dadz(i+1,j,k2))+ &
1188 & cff2*(tl_dadz(i ,j,k2)+ &
1189 & tl_dadz(i+1,j,k1))))
1194 cff=0.0625_r8*(kh(i-1,j-1)+kh(i-1,j)+ &
1195 & kh(i ,j-1)+kh(i ,j))*om_p(i,j)
1196 cff1=min(dzde_p(i,j,k1),0.0_r8)
1197 cff2=max(dzde_p(i,j,k1),0.0_r8)
1208 & (hz(i-1,j-1,k)+hz(i-1,j,k)+ &
1209 & hz(i ,j-1,k)+hz(i ,j,k))* &
1210 & (tl_dade(i,j,k1)- &
1211 & 0.5_r8*(cff1*(tl_dadz(i,j-1,k1)+ &
1212 & tl_dadz(i,j ,k2))+ &
1213 & cff2*(tl_dadz(i,j-1,k2)+ &
1214 & tl_dadz(i,j ,k1))))
1217 IF (k.lt.n(ng))
THEN
1220 cff=0.25_r8*(kh(i-1,j)+kh(i,j))
1221 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
1222 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
1223 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
1224 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
1231 tl_fz(i,j,k2)=cff* &
1232 & (cff1*(cff1*tl_dadz(i,j,k2)- &
1233 & tl_dadx(i-1,j,k1))+ &
1234 & cff2*(cff2*tl_dadz(i,j,k2)- &
1235 & tl_dadx(i ,j,k2))+ &
1236 & cff3*(cff3*tl_dadz(i,j,k2)- &
1237 & tl_dadx(i-1,j,k2))+ &
1238 & cff4*(cff4*tl_dadz(i,j,k2)- &
1239 & tl_dadx(i ,j,k1)))
1240 cff1=min(dzde_p(i,j ,k1),0.0_r8)
1241 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
1242 cff3=max(dzde_p(i,j ,k2),0.0_r8)
1243 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
1251 tl_fz(i,j,k2)=tl_fz(i,j,k2)+ &
1253 & (cff1*(cff1*tl_dadz(i,j,k2)- &
1254 & tl_dade(i,j ,k1))+ &
1255 & cff2*(cff2*tl_dadz(i,j,k2)- &
1256 & tl_dade(i,j+1,k2))+ &
1257 & cff3*(cff3*tl_dadz(i,j,k2)- &
1258 & tl_dade(i,j ,k2))+ &
1259 & cff4*(cff4*tl_dadz(i,j,k2)- &
1260 & tl_dade(i,j+1,k1)))
1276 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
1278 & (tl_fx(i,j )-tl_fx(i-1,j)+ &
1279 & tl_fe(i,j+1)-tl_fe(i ,j))+ &
1281 & (tl_fz(i,j,k2)-tl_fz(i,j,k1))
1299 tl_fx(i,j)=pmon_r(i,j)*kh(i,j)* &
1300 & (tl_awrk(i+1,j,k,nold)-tl_awrk(i,j,k,nold))
1309 tl_fe(i,j)=pnom_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
1310 & kh(i-1,j-1)+kh(i,j-1))* &
1311 & (tl_awrk(i,j,k,nold)-tl_awrk(i,j-1,k,nold))
1315 tl_fe(i,j)=tl_fe(i,j)*pmask(i,j)
1329 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
1331 & (tl_fx(i,j)-tl_fx(i-1,j)+ &
1332 & tl_fe(i,j+1)-tl_fe(i,j))
1345 & lbi, ubi, lbj, ubj, lbk, ubk, &
1346 & tl_awrk(:,:,:,nnew))
1355 & lbi, ubi, lbj, ubj, lbk, ubk, &
1358 & tl_awrk(:,:,:,nnew))
1369# ifdef IMPLICIT_VCONV
1370# ifdef SPLINES_VCONV
1386 hzk(i,k)=0.5_r8*(hz(i-1,j,k)+ &
1393 fc(i,k)=cff1*hzk(i,k )-dtsizev*kv(i,j,k-1)*ohz(i,j,k )
1394 cf(i,k)=cff1*hzk(i,k+1)-dtsizev*kv(i,j,k+1)*ohz(i,j,k+1)
1409 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
1410 & dtsizev*kv(i,j,k)*(ohz(i,j,k)+ohz(i,j,k+1))
1411 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
1416 tl_dc(i,k)=cff*(tl_awrk(i,j,k+1,nold)- &
1417 & tl_awrk(i,j,k ,nold)- &
1418 & fc(i,k)*tl_dc(i,k-1))
1427 tl_dc(i,n(ng))=0.0_r8
1433 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
1441 tl_dc(i,k)=tl_dc(i,k)*kv(i,j,k)
1446 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
1447 & dtsizev*ohz(i,j,k)* &
1448 & (tl_dc(i,k)-tl_dc(i,k-1))
1473 cff=0.5_r8*(hz(i-1,j,k)+hz(i,j,k))
1474 bc(i,k)=cff-fc(i,j,k)-fc(i,j,k-1)
1477 tl_dc(i,k)=tl_awrk(i,j,k,nold)*cff
1485 cf(i,1)=cff*fc(i,j,1)
1488 tl_dc(i,1)=cff*tl_dc(i,1)
1492 cff=1.0_r8/(bc(i,k)-fc(i,j,k-1)*cf(i,k-1))
1493 cf(i,k)=cff*fc(i,j,k)
1496 tl_dc(i,k)=cff*(tl_dc(i,k)-fc(i,j,k-1)*tl_dc(i,k-1))
1507 tl_dc(i,n(ng))=(tl_dc(i,n(ng))- &
1508 & fc(i,j,n(ng)-1)*tl_dc(i,n(ng)-1))/ &
1509 & (bc(i,n(ng))-fc(i,j,n(ng)-1)*cf(i,n(ng)-1))
1512 tl_awrk(i,j,n(ng),nnew)=tl_dc(i,n(ng))
1516 tl_awrk(i,j,n(ng),nnew)=tl_awrk(i,j,n(ng),nnew)*umask(i,j)
1523 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
1526 tl_awrk(i,j,k,nnew)=tl_dc(i,k)
1530 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nnew)*umask(i,j)
1560 tl_fs(i,k)=fc(i,j,k)*(tl_awrk(i,j,k+1,nold)- &
1561 & tl_awrk(i,j,k ,nold))
1565 tl_fs(i,k)=tl_fs(i,k)*umask(i,j)
1575 tl_fs(i,n(ng))=0.0_r8
1587 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
1588 & ohz(i,j,k)*(tl_fs(i,k )- &
1612 tl_a(i,j,k)=tl_awrk(i,j,k,nold)
1621 & lbi, ubi, lbj, ubj, lbk, ubk, &
1631 & lbi, ubi, lbj, ubj, lbk, ubk, &
1642 & LBi, UBi, LBj, UBj, LBk, UBk, &
1643 & IminS, ImaxS, JminS, JmaxS, &
1644 & Nghost, NHsteps, NVsteps, &
1645 & DTsizeH, DTsizeV, &
1648# ifdef GEOPOTENTIAL_HCONV
1654# ifdef GEOPOTENTIAL_HCONV
1655 & pmask, rmask, umask, vmask, &
1674 integer,
intent(in) :: ng, tile, model
1675 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
1676 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1677 integer,
intent(in) :: Nghost, NHsteps, NVsteps
1679 real(r8),
intent(in) :: DTsizeH, DTsizeV
1681# ifdef ASSUMED_SHAPE
1682 real(r8),
intent(in) :: pm(LBi:,LBj:)
1683 real(r8),
intent(in) :: pn(LBi:,LBj:)
1684# ifdef GEOPOTENTIAL_HCONV
1685 real(r8),
intent(in) :: on_p(LBi:,LBj:)
1686 real(r8),
intent(in) :: om_r(LBi:,LBj:)
1688 real(r8),
intent(in) :: pmon_p(LBi:,LBj:)
1689 real(r8),
intent(in) :: pnom_r(LBi:,LBj:)
1692# ifdef GEOPOTENTIAL_HCONV
1693 real(r8),
intent(in) :: pmask(LBi:,LBj:)
1694 real(r8),
intent(in) :: rmask(LBi:,LBj:)
1695 real(r8),
intent(in) :: umask(LBi:,LBj:)
1696 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1698 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1699 real(r8),
intent(in) :: pmask(LBi:,LBj:)
1702 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
1703 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
1705 real(r8),
intent(in) :: Kh(LBi:,LBj:)
1706 real(r8),
intent(in) :: Kv(LBi:,LBj:,0:)
1708 real(r8),
intent(inout) :: tl_A(LBi:,LBj:,LBk:)
1710 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
1711 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
1712# ifdef GEOPOTENTIAL_HCONV
1713 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
1714 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
1716 real(r8),
intent(in) :: pmon_p(LBi:UBi,LBj:UBj)
1717 real(r8),
intent(in) :: pnom_r(LBi:UBi,LBj:UBj)
1720# ifdef GEOPOTENTIAL_HCONV
1721 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
1722 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
1723 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
1724 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1726 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1727 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
1730 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
1731 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
1733 real(r8),
intent(in) :: Kh(LBi:UBi,LBj:UBj)
1734 real(r8),
intent(in) :: Kv(LBi:UBi,LBj:UBj,0:UBk)
1736 real(r8),
intent(inout) :: tl_A(LBi:UBi,LBj:UBj,LBk:UBk)
1741 integer :: Nnew, Nold, Nsav, i, j, k, k1, k2, step
1743 real(r8) :: cff, cff1, cff2, cff3, cff4
1745 real(r8),
dimension(LBi:UBi,LBj:UBj,LBk:UBk,2) :: tl_Awrk
1747 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hfac
1748 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FE
1749 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_FX
1751# ifndef SPLINES_VCONV
1752 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,0:N(ng)) :: FC
1754# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1755 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: oHz
1757# if defined IMPLICIT_VCONV || defined SPLINES_VCONV
1758 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BC
1759 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
1760 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_DC
1761# ifdef SPLINES_VCONV
1762 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
1763 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hzk
1766 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: tl_FS
1769# ifdef GEOPOTENTIAL_HCONV
1770 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dZdx
1771 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dZde
1773 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_p
1774 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_r
1775 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_FZ
1776 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdz
1777 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAdx
1778 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: tl_dAde
1781# include "set_bounds.h"
1795 hfac(i,j)=cff*(pm(i,j-1)+pm(i,j))*(pn(i,j-1)+pn(i,j))
1797# ifndef SPLINES_VCONV
1798 fc(i,j,n(ng))=0.0_r8
1800# ifdef IMPLICIT_VCONV
1801 fc(i,j,k)=-dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
1802 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
1803 & z_r(i,j-1,k )-z_r(i,j,k ))
1805 fc(i,j,k)=dtsizev*(kv(i,j-1,k)+kv(i,j,k))/ &
1806 & (z_r(i,j-1,k+1)+z_r(i,j,k+1)- &
1807 & z_r(i,j-1,k )-z_r(i,j,k ))
1812# if !defined IMPLICIT_VCONV || defined SPLINES_VCONV
1814 ohz(i,j,k)=2.0_r8/(hz(i,j-1,k)+hz(i,j,k))
1830 & lbi, ubi, lbj, ubj, lbk, ubk, &
1840 & lbi, ubi, lbj, ubj, lbk, ubk, &
1850 tl_awrk(i,j,k,nold)=tl_a(i,j,k)
1861# ifdef GEOPOTENTIAL_HCONV
1873 k_loop :
DO k=0,n(ng)
1876 IF (k.lt.n(ng))
THEN
1879 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1883 dzdx(i,j)=cff*(z_r(i ,j,k+1)- &
1890 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1894 dzde(i,j)=cff*(z_r(i,j ,k+1)- &
1901 cff=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
1902 & pm(i ,j-1)+pm(i ,j))
1908 tl_dadx(i,j,k2)=cff* &
1909 & (tl_awrk(i ,j,k+1,nold)*vmask(i ,j)- &
1910 & tl_awrk(i-1,j,k+1,nold)*vmask(i-1,j))
1913 tl_dadx(i,j,k2)=tl_dadx(i,j,k2)*pmask(i,j)
1918 tl_dadx(i,j,k2)=cff*(tl_awrk(i ,j,k+1,nold)- &
1919 & tl_awrk(i-1,j,k+1,nold))
1921 dzdx_p(i,j,k2)=0.5_r8*(dzdx(i,j-1)+ &
1933 tl_dade(i,j,k2)=pn(i,j)* &
1934 & (tl_awrk(i,j+1,k+1,nold)*vmask(i,j+1)- &
1935 & tl_awrk(i,j ,k+1,nold)*vmask(i,j ))
1938 tl_dade(i,j,k2)=tl_dade(i,j,k2)*rmask(i,j)
1943 tl_dade(i,j,k2)=pn(i,j)*(tl_awrk(i,j+1,k+1,nold)- &
1944 & tl_awrk(i,j ,k+1,nold))
1946 dzde_r(i,j,k2)=0.5_r8*(dzde(i,j )+ &
1952 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
1957 tl_dadz(i,j,k2)=0.0_r8
1960 tl_fz(i,j,k2)=0.0_r8
1966 cff=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
1970 tl_dadz(i,j,k2)=cff*(tl_awrk(i,j,k+1,nold)- &
1971 & tl_awrk(i,j,k ,nold))
1975 tl_dadz(i,j,k2)=tl_dadz(i,j,k2)*vmask(i,j)
1987 cff=0.0625_r8*(kh(i-1,j-1)+kh(i-1,j)+ &
1988 & kh(i ,j-1)+kh(i ,j))*on_p(i,j)
1989 cff1=min(dzdx_p(i,j,k1),0.0_r8)
1990 cff2=max(dzdx_p(i,j,k1),0.0_r8)
2001 & (hz(i-1,j-1,k)+hz(i-1,j,k)+ &
2002 & hz(i ,j-1,k)+hz(i ,j,k))* &
2003 & (tl_dadx(i,j,k1)- &
2004 & 0.5_r8*(cff1*(tl_dadz(i-1,j,k1)+ &
2005 & tl_dadz(i ,j,k2))+ &
2006 & cff2*(tl_dadz(i-1,j,k2)+ &
2007 & tl_dadz(i ,j,k1))))
2012 cff=kh(i,j)*om_r(i,j)
2013 cff1=min(dzde_r(i,j,k1),0.0_r8)
2014 cff2=max(dzde_r(i,j,k1),0.0_r8)
2025 & (tl_dade(i,j,k1)- &
2026 & 0.5_r8*(cff1*(tl_dadz(i,j ,k1)+ &
2027 & tl_dadz(i,j+1,k2))+ &
2028 & cff2*(tl_dadz(i,j ,k2)+ &
2029 & tl_dadz(i,j+1,k1))))
2032 IF (k.lt.n(ng))
THEN
2035 cff=0.5_r8*(kh(i,j-1)+kh(i,j))
2036 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
2037 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
2038 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
2039 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
2046 tl_fz(i,j,k2)=cff* &
2047 & (cff1*(cff1*tl_dadz(i,j,k2)- &
2048 & tl_dadx(i ,j,k1))+ &
2049 & cff2*(cff2*tl_dadz(i,j,k2)- &
2050 & tl_dadx(i+1,j,k2))+ &
2051 & cff3*(cff3*tl_dadz(i,j,k2)- &
2052 & tl_dadx(i ,j,k2))+ &
2053 & cff4*(cff4*tl_dadz(i,j,k2)- &
2054 & tl_dadx(i+1,j,k1)))
2055 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
2056 cff2=min(dzde_r(i,j ,k2),0.0_r8)
2057 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
2058 cff4=max(dzde_r(i,j ,k1),0.0_r8)
2066 tl_fz(i,j,k2)=tl_fz(i,j,k2)+ &
2068 & (cff1*(cff1*tl_dadz(i,j,k2)- &
2069 & tl_dade(i,j-1,k1))+ &
2070 & cff2*(cff2*tl_dadz(i,j,k2)- &
2071 & tl_dade(i,j ,k2))+ &
2072 & cff3*(cff3*tl_dadz(i,j,k2)- &
2073 & tl_dade(i,j-1,k2))+ &
2074 & cff4*(cff4*tl_dadz(i,j,k2)- &
2075 & tl_dade(i,j ,k1)))
2091 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
2093 & (tl_fx(i+1,j)-tl_fx(i,j )+ &
2094 & tl_fe(i ,j)-tl_fe(i,j-1))+ &
2096 & (tl_fz(i,j,k2)-tl_fz(i,j,k1))
2114 tl_fx(i,j)=pmon_p(i,j)*0.25_r8*(kh(i-1,j )+kh(i,j )+ &
2115 & kh(i-1,j-1)+kh(i,j-1))* &
2116 & (tl_awrk(i,j,k,nold)-tl_awrk(i-1,j,k,nold))
2120 tl_fx(i,j)=tl_fx(i,j)*pmask(i,j)
2129 tl_fe(i,j)=pnom_r(i,j)*kh(i,j)* &
2130 & (tl_awrk(i,j+1,k,nold)-tl_awrk(i,j,k,nold))
2143 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
2145 & (tl_fx(i+1,j)-tl_fx(i,j)+ &
2146 & tl_fe(i,j)-tl_fe(i,j-1))
2159 & lbi, ubi, lbj, ubj, lbk, ubk, &
2160 & tl_awrk(:,:,:,nnew))
2169 & lbi, ubi, lbj, ubj, lbk, ubk, &
2172 & tl_awrk(:,:,:,nnew))
2183# ifdef IMPLICIT_VCONV
2184# ifdef SPLINES_VCONV
2200 hzk(i,k)=0.5_r8*(hz(i,j-1,k)+ &
2207 fc(i,k)=cff1*hzk(i,k )-dtsizev*kv(i,j,k-1)*ohz(i,j,k )
2208 cf(i,k)=cff1*hzk(i,k+1)-dtsizev*kv(i,j,k+1)*ohz(i,j,k+1)
2223 bc(i,k)=cff1*(hzk(i,k)+hzk(i,k+1))+ &
2224 & dtsizev*kv(i,j,k)*(ohz(i,j,k)+ohz(i,j,k+1))
2225 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
2231 tl_dc(i,k)=cff*(tl_awrk(i,j,k+1,nold)- &
2232 & tl_awrk(i,j,k ,nold)- &
2233 & fc(i,k)*tl_dc(i,k-1))
2242 tl_dc(i,n(ng))=0.0_r8
2248 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
2256 tl_dc(i,k)=tl_dc(i,k)*kv(i,j,k)
2261 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
2262 & dtsizev*ohz(i,j,k)* &
2263 & (tl_dc(i,k)-tl_dc(i,k-1))
2288 cff=0.5_r8*(hz(i,j-1,k)+hz(i,j,k))
2289 bc(i,k)=cff-fc(i,j,k)-fc(i,j,k-1)
2292 tl_dc(i,k)=tl_awrk(i,j,k,nold)*cff
2300 cf(i,1)=cff*fc(i,j,1)
2303 tl_dc(i,1)=cff*tl_dc(i,1)
2307 cff=1.0_r8/(bc(i,k)-fc(i,j,k-1)*cf(i,k-1))
2308 cf(i,k)=cff*fc(i,j,k)
2311 tl_dc(i,k)=cff*(tl_dc(i,k)-fc(i,j,k-1)*tl_dc(i,k-1))
2322 tl_dc(i,n(ng))=(tl_dc(i,n(ng))- &
2323 & fc(i,j,n(ng)-1)*tl_dc(i,n(ng)-1))/ &
2324 & (bc(i,n(ng))-fc(i,j,n(ng)-1)*cf(i,n(ng)-1))
2327 tl_awrk(i,j,n(ng),nnew)=tl_dc(i,n(ng))
2331 tl_awrk(i,j,n(ng),nnew)=tl_awrk(i,j,n(ng),nnew)*vmask(i,j)
2338 tl_dc(i,k)=tl_dc(i,k)-cf(i,k)*tl_dc(i,k+1)
2341 tl_awrk(i,j,k,nnew)=tl_dc(i,k)
2345 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nnew)*vmask(i,j)
2375 tl_fs(i,k)=fc(i,j,k)*(tl_awrk(i,j,k+1,nold)- &
2376 & tl_awrk(i,j,k ,nold))
2380 tl_fs(i,k)=tl_fs(i,k)*vmask(i,j)
2390 tl_fs(i,n(ng))=0.0_r8
2402 tl_awrk(i,j,k,nnew)=tl_awrk(i,j,k,nold)+ &
2403 & ohz(i,j,k)*(tl_fs(i,k )- &
2427 tl_a(i,j,k)=tl_awrk(i,j,k,nold)
2436 & lbi, ubi, lbj, ubj, lbk, ubk, &
2446 & lbi, ubi, lbj, ubj, lbk, ubk, &