122 & LBi, UBi, LBj, UBj, &
123 & IminS, ImaxS, JminS, JmaxS, &
124 & nrhs, nstp, nnew, &
126 & rmask, umask, vmask, &
129 & rmask_wet, umask_wet, vmask_wet, &
131 & omn, om_u, om_v, on_u, on_v, &
139# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
142# ifdef DIAGNOSTICS_TS
164 integer,
intent(in) :: ng, tile
165 integer,
intent(in) :: LBi, UBi, LBj, UBj
166 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
167 integer,
intent(in) :: nrhs, nstp, nnew
171 real(r8),
intent(in) :: rmask(LBi:,LBj:)
172 real(r8),
intent(in) :: umask(LBi:,LBj:)
173 real(r8),
intent(in) :: vmask(LBi:,LBj:)
176 real(r8),
intent(in) :: rmask_wet(LBi:,LBj:)
177 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
178 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
180 real(r8),
intent(in) :: omn(LBi:,LBj:)
181 real(r8),
intent(in) :: om_u(LBi:,LBj:)
182 real(r8),
intent(in) :: om_v(LBi:,LBj:)
183 real(r8),
intent(in) :: on_u(LBi:,LBj:)
184 real(r8),
intent(in) :: on_v(LBi:,LBj:)
185 real(r8),
intent(in) :: pm(LBi:,LBj:)
186 real(r8),
intent(in) :: pn(LBi:,LBj:)
187 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
188 real(r8),
intent(in) :: Huon(LBi:,LBj:,:)
189 real(r8),
intent(in) :: Hvom(LBi:,LBj:,:)
190 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
192 real(r8),
intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
193 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
195 real(r8),
intent(in) :: Akt(LBi:,LBj:,0:,:)
196 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
198 real(r8),
intent(in) :: W(LBi:,LBj:,0:)
200# ifdef DIAGNOSTICS_TS
203 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
204 real(r8),
intent(inout) :: ad_Huon(LBi:,LBj:,:)
205 real(r8),
intent(inout) :: ad_Hvom(LBi:,LBj:,:)
206 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
208 real(r8),
intent(inout) :: ad_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
210 real(r8),
intent(inout) :: ad_Akt(LBi:,LBj:,0:,:)
212 real(r8),
intent(inout) :: ad_W(LBi:,LBj:,0:)
214 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
216 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
218# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
219 real(r8),
intent(out) :: dAktdz(LBi:,LBj:,:)
225 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
226 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
227 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
230 real(r8),
intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
231 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
232 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
234 real(r8),
intent(in) :: omn(LBi:UBi,LBj:UBj)
235 real(r8),
intent(in) :: om_u(LBi:UBi,LBj:UBj)
236 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
237 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
238 real(r8),
intent(in) :: on_v(LBi:UBi,LBj:UBj)
239 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
240 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
241 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
242 real(r8),
intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
243 real(r8),
intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
244 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
245 real(r8),
intent(in) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
246 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
247 real(r8),
intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
249# ifdef DIAGNOSTICS_TS
253 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
254 real(r8),
intent(inout) :: ad_Huon(LBi:UBi,LBj:UBj,N(ng))
255 real(r8),
intent(inout) :: ad_Hvom(LBi:UBi,LBj:UBj,N(ng))
256 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
257 real(r8),
intent(inout) :: ad_Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
258 real(r8),
intent(inout) :: ad_W(LBi:UBi,LBj:UBj,0:N(ng))
259 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
260# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
261 real(r8),
intent(out) :: dAktdz(LBi:UBi,LBj:UBj,N(ng))
267 logical :: LapplySrc, Lhsimt
269 integer :: JminT, JmaxT
270 integer :: Isrc, Jsrc
271 integer :: i, ic, is, itrc, j, k, ltrc
272# if defined AGE_MEAN && defined T_PASSIVE
275# ifdef DIAGNOSTICS_TS
279 real(r8),
parameter :: eps = 1.0e-16_r8
281 real(r8) :: cff, cff1, cff2, cff3
282 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3
283 real(r8) :: adfac, adfac1, adfac2
285 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
286 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: BC
287 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
289 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC1
291 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
293 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_CF
294 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_BC
295 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_DC
296 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
298 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FE
299 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FX
300 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: curv
301 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: grad
303 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FE
304 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_FX
305 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_curv
306 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
308 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: oHz
309 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_oHz
311# include "set_bounds.h"
348# if defined FLOATS_NOT_YET && defined FLOAT_VWALK
359 & lbi, ubi, lbj, ubj, 1, n(ng), &
365 CALL exchange_r3d_tile (ng, tile, &
366 & lbi, ubi, lbj, ubj, 1, n(ng), &
373 daktdz(i,j,k)=(akt(i,j,k,1)-akt(i,j,k-1,1))/hz(i,j,k)
394 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
397 & ad_t(:,:,:,nnew,:))
424 & lbi, ubi, lbj, ubj, 1, n(ng), &
425 & ad_t(:,:,:,nnew,itrc))
428# ifdef DIAGNOSTICS_TS
452 ad_t(i,j,k,nnew,itrc)=ad_t(i,j,k,nnew,itrc)*rmask(i,j)
469 ad_t(i,j,k,nnew,itrc)=ad_t(i,j,k,nnew,itrc)- &
471 &
clima(ng)%Tnudgcof(i,j,k,ic)* &
472 & ad_t(i,j,k,nnew,itrc)
487 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
488 & imins, imaxs, jmins, jmaxs, &
493# if defined AGE_MEAN && defined T_PASSIVE
522 ad_t(i,j,k,3,
inert(itrc))=ad_t(i,j,k,3,
inert(itrc))+ &
523 &
dt(ng)*ad_t(i,j,k,nnew,iage)
541 ohz(i,j,k)=1.0_r8/hz(i,j,k)
549 ohz(i,j,k)=1.0_r8/hz(i,j,k)
557 j_loop2 :
DO j=jstr,jend
572 fc(i,k)=cff1*hz(i,j,k )- &
573 &
dt(ng)*akt(i,j,k-1,ltrc)*ohz(i,j,k )
574 cf(i,k)=cff1*hz(i,j,k+1)- &
575 &
dt(ng)*akt(i,j,k+1,ltrc)*ohz(i,j,k+1)
588 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
589 &
dt(ng)*akt(i,j,k,ltrc)*(ohz(i,j,k)+ohz(i,j,k+1))
590 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
592 dc(i,k)=cff*(t(i,j,k+1,nnew,itrc)-t(i,j,k,nnew,itrc)- &
604 dc(i,k)=dc(i,k)-cf(i,k)*dc(i,k+1)
612 dc1(i,k)=dc(i,k)*akt(i,j,k,ltrc)
622# ifdef DIAGNOSTICS_TS
628 ad_cff1=ad_cff1+ad_t(i,j,k,nnew,itrc)
633 adfac1=adfac*ohz(i,j,k)
634 ad_dc(i,k-1)=ad_dc(i,k-1)-adfac1
635 ad_dc(i,k )=ad_dc(i,k )+adfac1
636 ad_ohz(i,j,k)=ad_ohz(i,j,k)+(dc1(i,k)-dc1(i,k-1))*adfac
641 ad_dc(i,k)=ad_dc(i,k)*akt(i,j,k,ltrc)
642 ad_akt(i,j,k,ltrc)=ad_akt(i,j,k,ltrc)+dc(i,k)*ad_dc(i,k)
652 ad_dc(i,k+1)=ad_dc(i,k+1)-cf(i,k)*ad_dc(i,k)
658 ad_dc(i,n(ng))=0.0_r8
666 bc(i,k)=cff1*(hz(i,j,k)+hz(i,j,k+1))+ &
667 &
dt(ng)*akt(i,j,k,ltrc)*(ohz(i,j,k)+ohz(i,j,k+1))
668 cff=1.0_r8/(bc(i,k)-fc(i,k)*cf(i,k-1))
677 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k)*adfac
678 ad_cf(i,k)=ad_cf(i,k)-dc(i,k+1)*adfac
679 ad_bc(i,k)=ad_bc(i,k)-dc(i,k )*adfac
680 ad_fc(i,k)=ad_fc(i,k)-dc(i,k-1)*adfac
681 ad_t(i,j,k ,nnew,itrc)=ad_t(i,j,k ,nnew,itrc)-adfac
682 ad_t(i,j,k+1,nnew,itrc)=ad_t(i,j,k+1,nnew,itrc)+adfac
690 adfac=cff1*ad_bc(i,k)
691 adfac1=
dt(ng)*ad_bc(i,k)
692 adfac2=adfac1*akt(i,j,k,ltrc)
693 ad_ohz(i,j,k )=ad_ohz(i,j,k )+adfac2
694 ad_ohz(i,j,k+1)=ad_ohz(i,j,k+1)+adfac2
695 ad_akt(i,j,k,ltrc)=ad_akt(i,j,k,ltrc)+ &
696 & (ohz(i,j,k)+ohz(i,j,k+1))*adfac1
697 ad_hz(i,j,k )=ad_hz(i,j,k )+adfac
698 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+adfac
725 adfac=
dt(ng)*ad_cf(i,k)
726 ad_ohz(i,j,k+1)=ad_ohz(i,j,k+1)- &
727 & akt(i,j,k+1,ltrc)*adfac
728 ad_akt(i,j,k+1,ltrc)=ad_akt(i,j,k+1,ltrc)- &
730 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+cff1*ad_cf(i,k)
736 adfac=
dt(ng)*ad_fc(i,k)
737 ad_ohz(i,j,k )=ad_ohz(i,j,k )- &
738 & akt(i,j,k-1,ltrc)*adfac
739 ad_akt(i,j,k-1,ltrc)=ad_akt(i,j,k-1,ltrc)- &
741 ad_hz(i,j,k )=ad_hz(i,j,k )+cff1*ad_fc(i,k)
756 cff1=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
757 fc(i,k)=cff*cff1*akt(i,j,k,ltrc)
769 bc(i,k)=hz(i,j,k)-fc(i,k)-fc(i,k-1)
782 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
790# ifdef DIAGNOSTICS_TS
796 ad_dc(i,k)=ad_dc(i,k)+ad_t(i,j,k,nnew,itrc)
797 ad_t(i,j,k,nnew,itrc)=0.0_r8
800 ad_dc(i,k+1)=-cf(i,k)*ad_dc(i,k)
801# ifdef DIAGNOSTICS_TS
807# ifdef DIAGNOSTICS_TS
814 ad_dc(i,n(ng))=ad_dc(i,n(ng))+ad_t(i,j,n(ng),nnew,itrc)
815 ad_t(i,j,n(ng),nnew,itrc)=0.0_r8
819 adfac=ad_dc(i,n(ng))/ &
820 & (bc(i,n(ng))-fc(i,n(ng)-1)*cf(i,n(ng)-1))
821 ad_dc(i,n(ng)-1)=ad_dc(i,n(ng)-1)-fc(i,n(ng)-1)*adfac
822 ad_dc(i,n(ng) )=adfac
830 cff=1.0_r8/(bc(i,k)-fc(i,k-1)*cf(i,k-1))
834 ad_dc(i,k-1)=ad_dc(i,k-1)-fc(i,k-1)*adfac
842 ad_dc(i,1)=cff*ad_dc(i,1)
850 ad_bc(i,n(ng) )=-t(i,j,n(ng) ,nnew,itrc)*ad_dc(i,n(ng))
851 ad_fc(i,n(ng)-1)=-t(i,j,n(ng)-1,nnew,itrc)*ad_dc(i,n(ng))
852 ad_t(i,j,n(ng),nnew,itrc)=ad_dc(i,n(ng))
853 ad_dc(i,n(ng))=0.0_r8
858 ad_fc(i,1)=-t(i,j,2,nnew,itrc)*ad_dc(i,1)
859 ad_bc(i,1)=-t(i,j,1,nnew,itrc)*ad_dc(i,1)
860 ad_t(i,j,1,nnew,itrc)=ad_dc(i,1)
870 ad_fc(i,k-1)=ad_fc(i,k-1)- &
871 & t(i,j,k-1,nnew,itrc)*ad_dc(i,k)
872 ad_fc(i,k )=ad_fc(i,k )- &
873 & t(i,j,k+1,nnew,itrc)*ad_dc(i,k)
874 ad_bc(i,k)=ad_bc(i,k)- &
875 & t(i,j,k ,nnew,itrc)*ad_dc(i,k)
876 ad_t(i,j,k,nnew,itrc)=ad_t(i,j,k,nnew,itrc)+ad_dc(i,k)
887 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_bc(i,k)
888 ad_fc(i,k )=ad_fc(i,k )-ad_bc(i,k)
889 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_bc(i,k)
908 ad_fc(i,n(ng))=0.0_r8
916 cff1=1.0_r8/(z_r(i,j,k+1)-z_r(i,j,k))
921 ad_akt(i,j,k,ltrc)=ad_akt(i,j,k,ltrc)+cff1*adfac
922 ad_cff1=ad_cff1+akt(i,j,k,ltrc)*adfac
926 adfac=-cff1*cff1*ad_cff1
927 ad_z_r(i,j,k )=ad_z_r(i,j,k )-adfac
928 ad_z_r(i,j,k+1)=ad_z_r(i,j,k+1)+adfac
955 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
958 IF (((istr.le.isrc).and.(isrc.le.iend+1)).and. &
959 & ((jstr.le.jsrc).and.(jsrc.le.jend+1)))
THEN
961 cff=
dt(ng)*pm(isrc,jsrc)*pn(isrc,jsrc)
963 cff=cff*ohz(isrc,jsrc,k)
966 cff3=
sources(ng)%Tsrc(is,k,itrc)
968 cff3=t(isrc,jsrc,k,3,itrc)
980 adfac=cff*ad_t(isrc,jsrc,k,nnew,itrc)
986 &
sources(ng)%Qsrc(is,k)*cff3* &
987 & ad_t(isrc,jsrc,k,nnew,itrc)
996 adfac=cff*ad_t(isrc,jsrc,k,nnew,itrc)
1000 &
sources(ng)%Qsrc(is,k)*adfac
1005 sources(ng)%ad_Tsrc(is,k,itrc)= &
1006 &
sources(ng)%ad_Tsrc(is,k,itrc)+ &
1011 ad_t(isrc,jsrc,k,3,itrc)=ad_t(isrc,jsrc,k,3,itrc)+&
1015# ifdef SPLINES_VDIFF
1018 ad_ohz(isrc,jsrc,k)=ad_ohz(isrc,jsrc,k)+ &
1034 t_loop2 :
DO itrc=1,nt(ng)
1043 j_loop1 :
DO j=jmint,jmaxt
1056 fc(i,0)=1.5_r8*t(i,j,1,3,itrc)
1059 fc(i,0)=2.0_r8*t(i,j,1,3,itrc)
1065 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
1066 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
1067 cf(i,k+1)=cff*hz(i,j,k)
1068 fc(i,k)=cff*(3.0_r8*(hz(i,j,k )*t(i,j,k+1,3,itrc)+ &
1069 & hz(i,j,k+1)*t(i,j,k ,3,itrc))- &
1070 & hz(i,j,k+1)*fc(i,k-1))
1075 fc(i,n(ng))=(3.0_r8*t(i,j,n(ng),3,itrc)-fc(i,n(ng)-1))/ &
1076 & (2.0_r8-cf(i,n(ng)))
1078 fc(i,n(ng))=(2.0_r8*t(i,j,n(ng),3,itrc)-fc(i,n(ng)-1))/ &
1079 & (1.0_r8-cf(i,n(ng)))
1084 fc(i,k)=fc(i,k)-cf(i,k+1)*fc(i,k+1)
1085 fc(i,k+1)=w(i,j,k+1)*fc(i,k+1)
1099 fc(i,k)=t(i,j,k+1,3,itrc)- &
1105 fc(i,n(ng))=fc(i,n(ng)-1)
1109 cff=2.0_r8*fc(i,k)*fc(i,k-1)
1110 IF (cff.gt.eps)
THEN
1111 cf(i,k)=cff/(fc(i,k)+fc(i,k-1))
1121 & 0.5_r8*(t(i,j,k ,3,itrc)+ &
1122 & t(i,j,k+1,3,itrc)- &
1123 & cff1*(cf(i,k+1)-cf(i,k)))
1128 fc(i,0)=w(i,j,0)*t(i,j,1,3,itrc)
1143 & 0.5_r8*(t(i,j,k ,3,itrc)+ &
1144 & t(i,j,k+1,3,itrc))
1149 fc(i,0)=w(i,j,0)*t(i,j,1,3,itrc)
1183 & (cff2*(t(i,j,k ,3,itrc)+ &
1184 & t(i,j,k+1,3,itrc))- &
1185 & cff3*(t(i,j,k-1,3,itrc)+ &
1186 & t(i,j,k+2,3,itrc)))
1191 fc(i,0)=w(i,j,0)*2.0_r8* &
1192 & (cff2*t(i,j,1,3,itrc)- &
1193 & cff3*t(i,j,2,3,itrc))
1198 & (cff1*t(i,j,1,3,itrc)+ &
1199 & cff2*t(i,j,2,3,itrc)- &
1200 & cff3*t(i,j,3,3,itrc))
1201 fc(i,n(ng)-1)=w(i,j,n(ng)-1)* &
1202 & (cff1*t(i,j,n(ng) ,3,itrc)+ &
1203 & cff2*t(i,j,n(ng)-1,3,itrc)- &
1204 & cff3*t(i,j,n(ng)-2,3,itrc))
1207 END IF vadv_flux_basic
1210# ifdef SPLINES_VDIFF
1219 cf(i,0)=
dt(ng)*pm(i,j)*pn(i,j)
1223 cff1=cf(i,0)*(fc(i,k)-fc(i,k-1))
1224# ifdef DIAGNOSTICS_TS
1231# ifdef SPLINES_VDIFF
1237 ad_ohz(i,j,k)=ad_ohz(i,j,k)+ &
1238 & (t(i,j,k,nnew,itrc)*hz(i,j,k))* &
1239 & ad_t(i,j,k,nnew,itrc)
1240 ad_t(i,j,k,nnew,itrc)=ad_t(i,j,k,nnew,itrc)*ohz(i,j,k)
1244 ad_cff1=ad_cff1-ad_t(i,j,k,nnew,itrc)
1247 adfac=cf(i,0)*ad_cff1
1248 ad_fc(i,k-1)=ad_fc(i,k-1)-adfac
1249 ad_fc(i,k )=ad_fc(i,k )+adfac
1253 END IF vadv_stepping
1265 fc(i,0)=1.5_r8*t(i,j,1,3,itrc)
1268 fc(i,0)=2.0_r8*t(i,j,1,3,itrc)
1274 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
1275 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
1276 cf(i,k+1)=cff*hz(i,j,k)
1277 fc(i,k)=cff*(3.0_r8*(hz(i,j,k )*t(i,j,k+1,3,itrc)+ &
1278 & hz(i,j,k+1)*t(i,j,k ,3,itrc))- &
1279 & hz(i,j,k+1)*fc(i,k-1))
1284 fc(i,n(ng))=(3.0_r8*t(i,j,n(ng),3,itrc)-fc(i,n(ng)-1))/ &
1285 & (2.0_r8-cf(i,n(ng)))
1287 fc(i,n(ng))=(2.0_r8*t(i,j,n(ng),3,itrc)-fc(i,n(ng)-1))/ &
1288 & (1.0_r8-cf(i,n(ng)))
1293 fc(i,k)=fc(i,k)-cf(i,k+1)*fc(i,k+1)
1302 ad_fc(i,n(ng))=0.0_r8
1315 ad_w(i,j,k+1)=ad_w(i,j,k+1)+fc(i,k+1)*ad_fc(i,k+1)
1316 ad_fc(i,k+1)=w(i,j,k+1)*ad_fc(i,k+1)
1319 ad_fc(i,k+1)=ad_fc(i,k+1)-cf(i,k+1)*ad_fc(i,k)
1328 adfac=ad_fc(i,n(ng))/(2.0_r8-cf(i,n(ng)))
1329 ad_t(i,j,n(ng),3,itrc)=ad_t(i,j,n(ng),3,itrc)+3.0_r8*adfac
1330 ad_fc(i,n(ng)-1)=ad_fc(i,n(ng)-1)-adfac
1331 ad_fc(i,n(ng))=0.0_r8
1337 adfac=ad_fc(i,n(ng))/(1.0_r8-cf(i,n(ng)))
1338 ad_t(i,j,n(ng),3,itrc)=ad_t(i,j,n(ng),3,itrc)+2.0_r8*adfac
1339 ad_fc(i,n(ng)-1)=ad_fc(i,n(ng)-1)-adfac
1345 cff=1.0_r8/(2.0_r8*hz(i,j,k)+ &
1346 & hz(i,j,k+1)*(2.0_r8-cf(i,k)))
1358 adfac=cff*ad_fc(i,k)
1361 ad_t(i,j,k ,3,itrc)=ad_t(i,j,k ,3,itrc)+ &
1362 & hz(i,j,k+1)*adfac1
1363 ad_t(i,j,k+1,3,itrc)=ad_t(i,j,k+1,3,itrc)+ &
1365 ad_hz(i,j,k )=ad_hz(i,j,k )+ &
1366 & t(i,j,k+1,3,itrc)*adfac1- &
1367 & fc(i,k )*adfac2- &
1369 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+ &
1370 & t(i,j,k ,3,itrc)*adfac1- &
1371 & fc(i,k-1)*adfac- &
1373 ad_fc(i,k-1)=ad_fc(i,k-1)-hz(i,j,k+1)*adfac
1381 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+1.5_r8*ad_fc(i,0)
1386 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+2.0_r8*ad_fc(i,0)
1397 fc(i,k)=t(i,j,k+1,3,itrc)- &
1403 fc(i,n(ng))=fc(i,n(ng)-1)
1407 cff=2.0_r8*fc(i,k)*fc(i,k-1)
1408 IF (cff.gt.eps)
THEN
1409 cf(i,k)=cff/(fc(i,k)+fc(i,k-1))
1418 ad_fc(i,n(ng))=0.0_r8
1423 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+w(i,j,0)*ad_fc(i,0)
1424 ad_w(i,j,0)=ad_w(i,j,0)+t(i,j,1,3,itrc)*ad_fc(i,0)
1445 adfac=0.5_r8*ad_fc(i,k)
1446 adfac1=adfac*w(i,j,k)
1448 ad_cf(i,k )=ad_cf(i,k )+adfac2
1449 ad_cf(i,k+1)=ad_cf(i,k+1)-adfac2
1450 ad_t(i,j,k ,3,itrc)=ad_t(i,j,k ,3,itrc)+adfac1
1451 ad_t(i,j,k+1,3,itrc)=ad_t(i,j,k+1,3,itrc)+adfac1
1452 ad_w(i,j,k)=ad_w(i,j,k)+ &
1453 & (t(i,j,k ,3,itrc)+ &
1454 & t(i,j,k+1,3,itrc)- &
1455 & cff1*(cf(i,k+1)-cf(i,k)))*adfac
1461 cff=2.0_r8*fc(i,k)*fc(i,k-1)
1462 IF (cff.gt.eps)
THEN
1468 & ((fc(i,k)+fc(i,k-1))*(fc(i,k)+fc(i,k-1)))
1470 ad_fc(i,k-1)=ad_fc(i,k-1)-adfac1
1471 ad_fc(i,k )=ad_fc(i,k )-adfac1
1472 ad_cff=ad_cff+(fc(i,k)+fc(i,k-1))*adfac
1483 ad_fc(i,k-1)=ad_fc(i,k-1)+fc(i,k )*adfac
1484 ad_fc(i,k )=ad_fc(i,k )+fc(i,k-1)*adfac
1491 ad_fc(i,n(ng)-1)=ad_fc(i,n(ng)-1)+ad_fc(i,n(ng))
1492 ad_fc(i,n(ng))=0.0_r8
1495 ad_fc(i,1)=ad_fc(i,1)+ad_fc(i,0)
1503 ad_t(i,j,k ,3,itrc)=ad_t(i,j,k ,3,itrc)-ad_fc(i,k)
1504 ad_t(i,j,k+1,3,itrc)=ad_t(i,j,k+1,3,itrc)+ad_fc(i,k)
1516 ad_fc(i,n(ng))=0.0_r8
1521 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+w(i,j,0)*ad_fc(i,0)
1522 ad_w(i,j,0)=ad_w(i,j,0)+t(i,j,1,3,itrc)*ad_fc(i,0)
1540 adfac=0.5_r8*ad_fc(i,k)
1541 adfac1=adfac*w(i,j,k)
1542 ad_t(i,j,k ,3,itrc)=ad_t(i,j,k ,3,itrc)+adfac1
1543 ad_t(i,j,k+1,3,itrc)=ad_t(i,j,k+1,3,itrc)+adfac1
1544 ad_w(i,j,k)=ad_w(i,j,k)+ &
1545 & (t(i,j,k ,3,itrc)+ &
1546 & t(i,j,k+1,3,itrc))*adfac
1576 ad_fc(i,n(ng))=0.0_r8
1586 adfac=w(i,j,n(ng)-1)*ad_fc(i,n(ng)-1)
1587 ad_w(i,j,n(ng)-1)=ad_w(i,j,n(ng)-1)+ &
1588 & (cff1*t(i,j,n(ng) ,3,itrc)+ &
1589 & cff2*t(i,j,n(ng)-1,3,itrc)- &
1590 & cff3*t(i,j,n(ng)-2,3,itrc))* &
1592 ad_t(i,j,n(ng)-2,3,itrc)=ad_t(i,j,n(ng)-2,3,itrc)- &
1594 ad_t(i,j,n(ng)-1,3,itrc)=ad_t(i,j,n(ng)-1,3,itrc)+ &
1596 ad_t(i,j,n(ng) ,3,itrc)=ad_t(i,j,n(ng) ,3,itrc)+ &
1598 ad_fc(i,n(ng)-1)=0.0_r8
1608 adfac=w(i,j,1)*ad_fc(i,1)
1609 ad_w(i,j,1)=ad_w(i,j,1)+ &
1610 & (cff1*t(i,j,1,3,itrc)+ &
1611 & cff2*t(i,j,2,3,itrc)- &
1612 & cff3*t(i,j,3,3,itrc))*ad_fc(i,1)
1613 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+cff1*adfac
1614 ad_t(i,j,2,3,itrc)=ad_t(i,j,2,3,itrc)+cff2*adfac
1615 ad_t(i,j,3,3,itrc)=ad_t(i,j,3,3,itrc)-cff3*adfac
1626 adfac=2.0_r8*ad_fc(i,0)
1627 adfac1=adfac*w(i,j,0)
1628 ad_t(i,j,1,3,itrc)=ad_t(i,j,1,3,itrc)+cff2*adfac1
1629 ad_t(i,j,2,3,itrc)=ad_t(i,j,2,3,itrc)-cff3*adfac1
1630 ad_w(i,j,0)=ad_w(i,j,0)+ &
1631 & (cff2*t(i,j,1,3,itrc)- &
1632 & cff3*t(i,j,2,3,itrc))*adfac
1653 adfac=w(i,j,k)*ad_fc(i,k)
1656 ad_w(i,j,k)=ad_w(i,j,k)+ &
1657 & (cff2*(t(i,j,k ,3,itrc)+ &
1658 & t(i,j,k+1,3,itrc))- &
1659 & cff3*(t(i,j,k-1,3,itrc)+ &
1660 & t(i,j,k+2,3,itrc)))*ad_fc(i,k)
1661 ad_t(i,j,k-1,3,itrc)=ad_t(i,j,k-1,3,itrc)-adfac2
1662 ad_t(i,j,k ,3,itrc)=ad_t(i,j,k ,3,itrc)+adfac1
1663 ad_t(i,j,k+1,3,itrc)=ad_t(i,j,k+1,3,itrc)+adfac1
1664 ad_t(i,j,k+2,3,itrc)=ad_t(i,j,k+2,3,itrc)-adfac2
1676 t_loop1 :
DO itrc=1,nt(ng)
1678 k_loop :
DO k=1,n(ng)
1687 cff=
dt(ng)*pm(i,j)*pn(i,j)
1688# ifdef DIAGNOSTICS_TS
1695 ad_cff3=ad_cff3-ad_t(i,j,k,nnew,itrc)
1698 ad_cff1=ad_cff1+ad_cff3
1699 ad_cff2=ad_cff2+ad_cff3
1704 ad_fe(i,j )=ad_fe(i,j )-adfac
1705 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac
1710 ad_fx(i ,j)=ad_fx(i ,j)-adfac
1711 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac
1715 END IF hadv_stepping
1727 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
1730 lapplysrc=(istrum2.le.isrc).and. &
1731 & (isrc.le.iendp3).and. &
1732 & (jstrvm2.le.jsrc).and. &
1735 lapplysrc=(istr.le.isrc).and. &
1736 & (isrc.le.iend+1).and. &
1737 & (jstr.le.jsrc).and. &
1747 ad_huon(isrc,jsrc,k)=ad_huon(isrc,jsrc,k)+ &
1748 &
sources(ng)%Tsrc(is,k,itrc)* &
1750 sources(ng)%ad_Tsrc(is,k,itrc)= &
1751 &
sources(ng)%ad_Tsrc(is,k,itrc)+ &
1752 & huon(isrc,jsrc,k)* &
1754 ad_fx(isrc,jsrc)=0.0_r8
1757 IF ((rmask(isrc ,jsrc).eq.0.0_r8).and. &
1758 & (rmask(isrc-1,jsrc).eq.1.0_r8))
THEN
1764 ad_t(isrc-1,jsrc,k,3,itrc)= &
1765 & ad_t(isrc-1,jsrc,k,3,itrc)+ &
1766 & huon(isrc,jsrc,k)* &
1768 ad_huon(isrc,jsrc,k)=ad_huon(isrc,jsrc,k)+ &
1769 & t(isrc-1,jsrc,k,3,itrc)* &
1771 ad_fx(isrc,jsrc)=0.0_r8
1772 ELSE IF ((rmask(isrc ,jsrc).eq.1.0_r8).and. &
1773 & (rmask(isrc-1,jsrc).eq.0.0_r8))
THEN
1779 ad_t(isrc ,jsrc,k,3,itrc)= &
1780 & ad_t(isrc ,jsrc,k,3,itrc)+ &
1781 & huon(isrc,jsrc,k)* &
1783 ad_huon(isrc,jsrc,k)=ad_huon(isrc,jsrc,k)+ &
1784 & t(isrc ,jsrc,k,3,itrc)* &
1786 ad_fx(isrc,jsrc)=0.0_r8
1791 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
1794 lapplysrc=(istrum2.le.isrc).and. &
1795 & (isrc.le.iendp2i).and. &
1796 & (jstrvm2.le.jsrc).and. &
1799 lapplysrc=(istr.le.isrc).and. &
1800 & (isrc.le.iend).and. &
1801 & (jstr.le.jsrc).and. &
1811 ad_hvom(isrc,jsrc,k)=ad_hvom(isrc,jsrc,k)+ &
1812 &
sources(ng)%Tsrc(is,k,itrc)* &
1814 sources(ng)%ad_Tsrc(is,k,itrc)= &
1815 &
sources(ng)%ad_Tsrc(is,k,itrc)+ &
1816 & hvom(isrc,jsrc,k)* &
1818 ad_fe(isrc,jsrc)=0.0_r8
1821 IF ((rmask(isrc,jsrc ).eq.0.0_r8).and. &
1822 & (rmask(isrc,jsrc-1).eq.1.0_r8))
THEN
1828 ad_t(isrc,jsrc-1,k,3,itrc)= &
1829 & ad_t(isrc,jsrc-1,k,3,itrc)+ &
1830 & hvom(isrc,jsrc,k)* &
1832 ad_hvom(isrc,jsrc,k)=ad_hvom(isrc,jsrc,k)+ &
1833 & t(isrc,jsrc-1,k,3,itrc)* &
1835 ad_fe(isrc,jsrc)=0.0_r8
1836 ELSE IF ((rmask(isrc,jsrc ).eq.1.0_r8).and. &
1837 & (rmask(isrc,jsrc-1).eq.0.0_r8))
THEN
1843 ad_t(isrc,jsrc ,k,3,itrc)= &
1844 & ad_t(isrc,jsrc ,k,3,itrc)+ &
1845 & hvom(isrc,jsrc,k)* &
1847 ad_hvom(isrc,jsrc,k)=ad_hvom(isrc,jsrc,k)+ &
1848 & t(isrc,jsrc ,k,3,itrc)* &
1850 ad_fe(isrc,jsrc)=0.0_r8
1873 adfac=0.5_r8*ad_fe(i,j)
1874 adfac1=adfac*hvom(i,j,k)
1875 ad_t(i,j-1,k,3,itrc)=ad_t(i,j-1,k,3,itrc)+adfac1
1876 ad_t(i,j ,k,3,itrc)=ad_t(i,j ,k,3,itrc)+adfac1
1877 ad_hvom(i,j,k)=ad_hvom(i,j,k)+ &
1878 & (t(i,j-1,k,3,itrc)+ &
1879 & t(i,j ,k,3,itrc))*adfac
1891 adfac=0.5_r8*ad_fx(i,j)
1892 adfac1=adfac*huon(i,j,k)
1893 ad_t(i-1,j,k,3,itrc)=ad_t(i-1,j,k,3,itrc)+adfac1
1894 ad_t(i ,j,k,3,itrc)=ad_t(i ,j,k,3,itrc)+adfac1
1895 ad_huon(i,j,k)=ad_huon(i,j,k)+ &
1896 & (t(i-1,j,k,3,itrc)+ &
1897 & t(i ,j,k,3,itrc))*adfac
1927 fe(i,j)=t(i,j ,k,3,itrc)- &
1930 fe(i,j)=fe(i,j)*vmask(i,j)
1935 IF (
domain(ng)%Southern_Edge(tile))
THEN
1937 fe(i,jstr-1)=fe(i,jstr)
1942 IF (
domain(ng)%Northern_Edge(tile))
THEN
1944 fe(i,jend+2)=fe(i,jend+1)
1952 curv(i,j)=fe(i,j+1)-fe(i,j)
1954 cff=2.0_r8*fe(i,j+1)*fe(i,j)
1955 IF (cff.gt.eps)
THEN
1956 grad(i,j)=cff/(fe(i,j+1)+fe(i,j))
1962 grad(i,j)=0.5_r8*(fe(i,j+1)+fe(i,j))
1989 adfac=0.5_r8*ad_fe(i,j)
1990 adfac1=adfac*hvom(i,j,k)
1991 adfac2=cff1*ad_fe(i,j)
1992 ad_hvom(i,j,k)=ad_hvom(i,j,k)+ &
1993 & (t(i,j-1,k,3,itrc)+ &
1994 & t(i,j ,k,3,itrc))*adfac- &
1996 & (0.5_r8+sign(0.5_r8, hvom(i,j,k)))+ &
1998 & (0.5_r8+sign(0.5_r8,-hvom(i,j,k))))* &
2000 ad_t(i,j-1,k,3,itrc)=ad_t(i,j-1,k,3,itrc)+adfac1
2001 ad_t(i,j ,k,3,itrc)=ad_t(i,j ,k,3,itrc)+adfac1
2002 ad_curv(i,j-1)=ad_curv(i,j-1)- &
2003 & max(hvom(i,j,k),0.0_r8)*adfac2
2004 ad_curv(i,j )=ad_curv(i,j )- &
2005 & min(hvom(i,j,k),0.0_r8)*adfac2
2022 adfac=0.5_r8*ad_fe(i,j)
2023 adfac1=adfac*hvom(i,j,k)
2025 ad_hvom(i,j,k)=ad_hvom(i,j,k)+ &
2026 & adfac*(t(i,j-1,k,3,itrc)+ &
2027 & t(i,j ,k,3,itrc)- &
2028 & cff2*(grad(i,j )- &
2030 ad_t(i,j-1,k,3,itrc)=ad_t(i,j-1,k,3,itrc)+adfac1
2031 ad_t(i,j ,k,3,itrc)=ad_t(i,j ,k,3,itrc)+adfac1
2032 ad_grad(i,j-1)=ad_grad(i,j-1)+adfac2
2033 ad_grad(i,j )=ad_grad(i,j )-adfac2
2044 ad_fe(i,j )=ad_fe(i,j )-ad_curv(i,j)
2045 ad_fe(i,j+1)=ad_fe(i,j+1)+ad_curv(i,j)
2048 cff=2.0_r8*fe(i,j+1)*fe(i,j)
2049 IF (cff.gt.eps)
THEN
2055 adfac=ad_grad(i,j)/ &
2056 & ((fe(i,j+1)+fe(i,j))*(fe(i,j+1)+fe(i,j)))
2058 ad_fe(i,j )=ad_fe(i,j)-adfac1
2059 ad_fe(i,j+1)=ad_fe(i,j+1)-adfac1
2060 ad_cff=ad_cff+(fe(i,j+1)+fe(i,j))*adfac
2071 ad_fe(i,j )=ad_fe(i,j )+fe(i,j+1)*adfac
2072 ad_fe(i,j+1)=ad_fe(i,j+1)+fe(i,j )*adfac
2078 adfac=0.5_r8*ad_grad(i,j)
2079 ad_fe(i,j )=ad_fe(i,j )+adfac
2080 ad_fe(i,j+1)=ad_fe(i,j+1)+adfac
2086 IF (
domain(ng)%Northern_Edge(tile))
THEN
2090 ad_fe(i,jend+1)=ad_fe(i,jend+1)+ad_fe(i,jend+2)
2091 ad_fe(i,jend+2)=0.0_r8
2096 IF (
domain(ng)%Southern_Edge(tile))
THEN
2100 ad_fe(i,jstr)=ad_fe(i,jstr)+ad_fe(i,jstr-1)
2101 ad_fe(i,jstr-1)=0.0_r8
2111 ad_fe(i,j)=ad_fe(i,j)*vmask(i,j)
2116 ad_t(i,j-1,k,3,itrc)=ad_t(i,j-1,k,3,itrc)-ad_fe(i,j)
2117 ad_t(i,j ,k,3,itrc)=ad_t(i,j ,k,3,itrc)+ad_fe(i,j)
2124 fx(i,j)=t(i ,j,k,3,itrc)- &
2127 fx(i,j)=fx(i,j)*umask(i,j)
2132 IF (
domain(ng)%Western_Edge(tile))
THEN
2134 fx(istr-1,j)=fx(istr,j)
2139 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2141 fx(iend+2,j)=fx(iend+1,j)
2149 curv(i,j)=fx(i+1,j)-fx(i,j)
2151 cff=2.0_r8*fx(i+1,j)*fx(i,j)
2152 IF (cff.gt.eps)
THEN
2153 grad(i,j)=cff/(fx(i+1,j)+fx(i,j))
2159 grad(i,j)=0.5_r8*(fx(i+1,j)+fx(i,j))
2186 adfac=0.5_r8*ad_fx(i,j)
2187 adfac1=adfac*huon(i,j,k)
2188 adfac2=cff1*ad_fx(i,j)
2189 ad_huon(i,j,k)=ad_huon(i,j,k)+ &
2190 & (t(i-1,j,k,3,itrc)+ &
2191 & t(i ,j,k,3,itrc))*adfac- &
2193 & (0.5_r8+sign(0.5_r8, huon(i,j,k)))+ &
2195 & (0.5_r8+sign(0.5_r8,-huon(i,j,k))))* &
2197 ad_t(i-1,j,k,3,itrc)=ad_t(i-1,j,k,3,itrc)+adfac1
2198 ad_t(i ,j,k,3,itrc)=ad_t(i ,j,k,3,itrc)+adfac1
2199 ad_curv(i-1,j)=ad_curv(i-1,j)- &
2200 & max(huon(i,j,k),0.0_r8)*adfac2
2201 ad_curv(i ,j)=ad_curv(i ,j)- &
2202 & min(huon(i,j,k),0.0_r8)*adfac2
2219 adfac=0.5_r8*ad_fx(i,j)
2220 adfac1=adfac*huon(i,j,k)
2222 ad_huon(i,j,k)=ad_huon(i,j,k)+ &
2223 & adfac*(t(i-1,j,k,3,itrc)+ &
2224 & t(i ,j,k,3,itrc)- &
2225 & cff2*(grad(i ,j)- &
2227 ad_t(i-1,j,k,3,itrc)=ad_t(i-1,j,k,3,itrc)+adfac1
2228 ad_t(i ,j,k,3,itrc)=ad_t(i ,j,k,3,itrc)+adfac1
2229 ad_grad(i-1,j)=ad_grad(i-1,j)+adfac2
2230 ad_grad(i ,j)=ad_grad(i ,j)-adfac2
2241 ad_fx(i ,j)=ad_fx(i ,j)-ad_curv(i,j)
2242 ad_fx(i+1,j)=ad_fx(i+1,j)+ad_curv(i,j)
2245 cff=2.0_r8*fx(i+1,j)*fx(i,j)
2246 IF (cff.gt.eps)
THEN
2252 adfac=ad_grad(i,j)/ &
2253 & ((fx(i+1,j)+fx(i,j))*(fx(i+1,j)+fx(i,j)))
2255 ad_fx(i ,j)=ad_fx(i ,j)-adfac1
2256 ad_fx(i+1,j)=ad_fx(i+1,j)-adfac1
2257 ad_cff=ad_cff+(fx(i+1,j)+fx(i,j))*adfac
2268 adfac=0.5_r8*ad_grad(i,j)
2269 ad_fx(i ,j)=ad_fx(i ,j)+adfac
2270 ad_fx(i+1,j)=ad_fx(i+1,j)+adfac
2277 ad_fx(i ,j)=ad_fx(i ,j)+fx(i+1,j)*adfac
2278 ad_fx(i+1,j)=ad_fx(i+1,j)+fx(i ,j)*adfac
2283 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2287 ad_fx(iend+1,j)=ad_fx(iend+1,j)+ad_fx(iend+2,j)
2288 ad_fx(iend+2,j)=0.0_r8
2293 IF (
domain(ng)%Western_Edge(tile))
THEN
2297 ad_fx(istr,j)=ad_fx(istr,j)+ad_fx(istr-1,j)
2298 ad_fx(istr-1,j)=0.0_r8
2308 ad_fx(i,j)=ad_fx(i,j)*umask(i,j)
2313 ad_t(i-1,j,k,3,itrc)=ad_t(i-1,j,k,3,itrc)-ad_fx(i,j)
2314 ad_t(i ,j,k,3,itrc)=ad_t(i ,j,k,3,itrc)+ad_fx(i,j)
2337 & lbi, ubi, lbj, ubj, 1, n(ng), &
2340 & ad_t(:,:,:,nnew,itrc))
2348 & lbi, ubi, lbj, ubj, 1, n(ng), &
2349 & ad_t(:,:,:,nnew,itrc))
2362 ohz(i,j,k)=1.0_r8/hz(i,j,k)
2365 ad_hz(i,j,k)=ad_hz(i,j,k)- &
2366 & ohz(i,j,k)*ohz(i,j,k)*ad_ohz(i,j,k)
2367 ad_ohz(i,j,k)=0.0_r8
2375 ohz(i,j,k)=1.0_r8/hz(i,j,k)
2378 ad_hz(i,j,k)=ad_hz(i,j,k)- &
2379 & ohz(i,j,k)*ohz(i,j,k)*ad_ohz(i,j,k)
2380 ad_ohz(i,j,k)=0.0_r8