122 & LBi, UBi, LBj, UBj, &
123 & IminS, ImaxS, JminS, JmaxS, &
126 & pmask, rmask, umask, vmask, &
128 & om_p, om_r, om_u, om_v, &
129 & on_p, on_r, on_u, on_v, &
134 & visc3d_r, ad_visc3d_r, &
136 & visc2_p, visc2_r, &
139!! & DiaRUfrc, DiaRVfrc, &
140!! & DiaU3wrk, DiaV3wrk, &
142 & u, v, ad_u, ad_v, &
143 & ad_rufrc, ad_rvfrc)
151 integer,
intent(in) :: ng, tile
152 integer,
intent(in) :: LBi, UBi, LBj, UBj
153 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
154 integer,
intent(in) :: nrhs, nnew
158 real(r8),
intent(in) :: pmask(LBi:,LBj:)
159 real(r8),
intent(in) :: rmask(LBi:,LBj:)
160 real(r8),
intent(in) :: umask(LBi:,LBj:)
161 real(r8),
intent(in) :: vmask(LBi:,LBj:)
163 real(r8),
intent(in) :: om_p(LBi:,LBj:)
164 real(r8),
intent(in) :: om_r(LBi:,LBj:)
165 real(r8),
intent(in) :: om_u(LBi:,LBj:)
166 real(r8),
intent(in) :: om_v(LBi:,LBj:)
167 real(r8),
intent(in) :: on_p(LBi:,LBj:)
168 real(r8),
intent(in) :: on_r(LBi:,LBj:)
169 real(r8),
intent(in) :: on_u(LBi:,LBj:)
170 real(r8),
intent(in) :: on_v(LBi:,LBj:)
171 real(r8),
intent(in) :: pm(LBi:,LBj:)
172 real(r8),
intent(in) :: pn(LBi:,LBj:)
173 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
174 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
176 real(r8),
intent(in) :: visc3d_r(LBi:,LBj:,:)
178 real(r8),
intent(in) :: visc2_p(LBi:,LBj:)
179 real(r8),
intent(in) :: visc2_r(LBi:,LBj:)
181 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
182 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
184# ifdef DIAGNOSTICS_UV
190 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
191 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
192 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
193 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
194 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
195 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
197 real(r8),
intent(inout) :: ad_visc3d_r(LBi:,LBj:,:)
201 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
202 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
203 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
204 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
206 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
207 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
208 real(r8),
intent(in) :: om_u(LBi:UBi,LBj:UBj)
209 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
210 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
211 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
212 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
213 real(r8),
intent(in) :: on_v(LBi:UBi,LBj:UBj)
214 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
215 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
216 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
217 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
218 real(r8),
intent(in) :: visc2_p(LBi:UBi,LBj:UBj)
219 real(r8),
intent(in) :: visc2_r(LBi:UBi,LBj:UBj)
221 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
222 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
224# ifdef DIAGNOSTICS_UV
231 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
232 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
233 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
234 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
235 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
236 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
238 real(r8),
intent(inout) :: ad_visc3d_r(LBi:UBi,LBj:UBj,N(ng))
245 integer :: i, j, k, kk, kt, k1, k1b, k2, k2b
247 real(r8) :: cff, fac1, fac2, pm_p, pn_p
248 real(r8) :: cff1, cff2, cff3, cff4
249 real(r8) :: cff5, cff6, cff7, cff8
250 real(r8) :: dmUdz, dnUdz, dmVdz, dnVdz
253 real(r8) :: ad_fac1, ad_fac2, ad_visc_p
255 real(r8) :: adfac, ad_cff
256 real(r8) :: adfac1, adfac2, adfac3, adfac4, adfac5, adfac6
257 real(r8) :: ad_cff1, ad_cff2, ad_cff3, ad_cff4
258 real(r8) :: ad_cff5, ad_cff6, ad_cff7, ad_cff8
259 real(r8) :: ad_dmUdz, ad_dnUdz, ad_dmVdz, ad_dnVdz
261 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
262 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
264 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
265 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
266 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
267 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
269 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmUde
270 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmVde
271 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnUdx
272 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnVdx
273 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dUdz
274 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dVdz
275 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_p
276 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_r
277 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_p
278 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_r
280 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_UFse
281 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_UFsx
282 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_VFse
283 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_VFsx
284 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dmUde
285 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dmVde
286 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dnUdx
287 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dnVdx
288 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dUdz
289 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dVdz
290 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZde_p
291 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZde_r
292 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZdx_p
293 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZdx_r
295#include "set_bounds.h"
322 ad_ufe(imins:imaxs,jmins:jmaxs)=0.0_r8
323 ad_ufx(imins:imaxs,jmins:jmaxs)=0.0_r8
324 ad_vfe(imins:imaxs,jmins:jmaxs)=0.0_r8
325 ad_vfx(imins:imaxs,jmins:jmaxs)=0.0_r8
327 ad_ufse(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
328 ad_ufsx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
329 ad_vfse(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
330 ad_vfsx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
332 ad_dmude(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
333 ad_dmvde(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
334 ad_dnudx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
335 ad_dnvdx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
337 ad_dudz(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
338 ad_dvdz(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
340 ad_dzde_p(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
341 ad_dzde_r(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
342 ad_dzdx_p(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
343 ad_dzdx_r(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
375 k_loop :
DO k=n(ng),0,-1
380 IF (kk.lt.n(ng))
THEN
386 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
390 ufx(i,j)=cff*(z_r(i ,j,kk+1)- &
396 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
400 vfe(i,j)=cff*(z_r(i,j ,kk+1)- &
407 dzdx_p(i,j,k2b)=0.5_r8*(ufx(i,j-1)+ &
409 dzde_p(i,j,k2b)=0.5_r8*(vfe(i-1,j)+ &
415 dzdx_r(i,j,k2b)=0.5_r8*(ufx(i ,j)+ &
417 dzde_r(i,j,k2b)=0.5_r8*(vfe(i,j )+ &
425 dzdx_p(i,j,k1b)=0.0_r8
426 dzde_p(i,j,k1b)=0.0_r8
431 dzdx_r(i,j,k1b)=0.0_r8
432 dzde_r(i,j,k1b)=0.0_r8
445 dnudx(i,j,k2b)=cff*((pn(i ,j)+pn(i+1,j))* &
446 & u(i+1,j,kk+1,nrhs)- &
447 & (pn(i-1,j)+pn(i ,j))* &
454 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
455 & pn(i-1,j-1)+pn(i,j-1))
459 dmude(i,j,k2b)=cff*((pm(i-1,j )+pm(i,j ))* &
460 & u(i,j ,kk+1,nrhs)- &
461 & (pm(i-1,j-1)+pm(i,j-1))* &
462 & u(i,j-1,kk+1,nrhs))
468 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
469 & pm(i-1,j-1)+pm(i,j-1))
473 dnvdx(i,j,k2b)=cff*((pn(i ,j-1)+pn(i ,j))* &
474 & v(i ,j,kk+1,nrhs)- &
475 & (pn(i-1,j-1)+pn(i-1,j))* &
476 & v(i-1,j,kk+1,nrhs))
486 dmvde(i,j,k2b)=cff*((pm(i,j )+pm(i,j+1))* &
487 & v(i,j+1,kk+1,nrhs)- &
488 & (pm(i,j-1)+pm(i,j ))* &
496 dnudx(i,j,k1b)=0.0_r8
501 dmude(i,j,k1b)=0.0_r8
506 dnvdx(i,j,k1b)=0.0_r8
511 dmvde(i,j,k1b)=0.0_r8
517 IF ((kk.eq.0).or.(kk.eq.n(ng)))
THEN
543 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,kk+1)- &
547 dudz(i,j,k2b)=cff*(u(i,j,kk+1,nrhs)- &
554 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,kk+1)- &
558 dvdz(i,j,k2b)=cff*(v(i,j,kk+1,nrhs)- &
569 above_bottom :
IF (k.gt.0)
THEN
572 cff=
dt(ng)*0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
584 ad_cff5=ad_cff5+ad_v(i,j,k,nnew)
585 ad_cff6=ad_cff6+ad_v(i,j,k,nnew)
589 ad_cff1=ad_cff1+ad_rvfrc(i,j)
590 ad_cff2=ad_cff2-ad_rvfrc(i,j)
591 ad_cff3=ad_cff3+ad_rvfrc(i,j)
592 ad_cff4=ad_cff4+ad_rvfrc(i,j)
596 ad_cff3=ad_cff3+adfac
597 ad_cff4=ad_cff4+adfac
602 ad_cff1=ad_cff1+adfac
603 ad_cff2=ad_cff2-adfac
607 ad_vfse(i,j,k1)=ad_vfse(i,j,k1)-ad_cff4
608 ad_vfse(i,j,k2)=ad_vfse(i,j,k2)+ad_cff4
612 ad_vfsx(i,j,k1)=ad_vfsx(i,j,k1)-ad_cff3
613 ad_vfsx(i,j,k2)=ad_vfsx(i,j,k2)+ad_cff3
618 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
619 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
620 ad_vfe(i,j )=ad_vfe(i,j )+adfac
625 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
626 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
627 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
634 cff=
dt(ng)*0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
646 ad_cff5=ad_cff5+ad_u(i,j,k,nnew)
647 ad_cff6=ad_cff6+ad_u(i,j,k,nnew)
651 ad_cff1=ad_cff1+ad_rufrc(i,j)
652 ad_cff2=ad_cff2+ad_rufrc(i,j)
653 ad_cff3=ad_cff3+ad_rufrc(i,j)
654 ad_cff4=ad_cff4+ad_rufrc(i,j)
658 ad_cff3=ad_cff3+adfac
659 ad_cff4=ad_cff4+adfac
664 ad_cff1=ad_cff1+adfac
665 ad_cff2=ad_cff2+adfac
669 ad_ufse(i,j,k1)=ad_ufse(i,j,k1)-ad_cff4
670 ad_ufse(i,j,k2)=ad_ufse(i,j,k2)+ad_cff4
674 ad_ufsx(i,j,k1)=ad_ufsx(i,j,k1)-ad_cff3
675 ad_ufsx(i,j,k2)=ad_ufsx(i,j,k2)+ad_cff3
680 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
681 ad_ufe(i,j )=ad_ufe(i,j )-adfac
682 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
687 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
688 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
689 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
697 below_surface :
IF (k.lt.n(ng))
THEN
702 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
703 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
707 cff=0.25_r8*(visc2_r(i,j-1)+visc2_r(i,j))
711 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
712 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
716 dnvdz=cff*dvdz(i,j,k2)
717 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
718 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
722 dmvdz=cff*dvdz(i,j,k2)
724 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
725 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
726 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
727 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
728 cff5=min(dzde_p(i ,j,k1),0.0_r8)
729 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
730 cff7=max(dzde_p(i ,j,k2),0.0_r8)
731 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
741 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
742 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
743 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
744 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))* &
762 adfac=fac2*ad_vfse(i,j,k2)
764 ad_cff1=ad_cff1+(cff5*dmudz-dmude(i ,j,k1))*adfac
765 ad_cff2=ad_cff2+(cff6*dmudz-dmude(i+1,j,k2))*adfac
766 ad_cff3=ad_cff3+(cff7*dmudz-dmude(i ,j,k2))*adfac
767 ad_cff4=ad_cff4+(cff8*dmudz-dmude(i+1,j,k1))*adfac
768 ad_cff5=ad_cff5+cff1*adfac1
769 ad_cff6=ad_cff6+cff2*adfac1
770 ad_cff7=ad_cff7+cff3*adfac1
771 ad_cff8=ad_cff8+cff4*adfac1
773 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
775 ad_dmude(i ,j,k1)=ad_dmude(i ,j,k1)-cff1*adfac
776 ad_dmude(i+1,j,k2)=ad_dmude(i+1,j,k2)-cff2*adfac
777 ad_dmude(i ,j,k2)=ad_dmude(i ,j,k2)-cff3*adfac
778 ad_dmude(i+1,j,k1)=ad_dmude(i+1,j,k1)-cff4*adfac
782 ad_dzde_p(i+1,j,k1)=ad_dzde_p(i+1,j,k1)+ &
784 & sign(0.5_r8, dzde_p(i+1,j,k1)))* &
790 ad_dzde_p(i ,j,k2)=ad_dzde_p(i ,j,k2)+ &
792 & sign(0.5_r8, dzde_p(i ,j,k2)))* &
798 ad_dzde_p(i+1,j,k2)=ad_dzde_p(i+1,j,k2)+ &
800 & sign(0.5_r8,-dzde_p(i+1,j,k2)))* &
806 ad_dzde_p(i ,j,k1)=ad_dzde_p(i ,j,k1)+ &
808 & sign(0.5_r8,-dzde_p(i ,j,k1)))* &
814 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
816 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
822 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
824 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
830 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
832 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
838 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
840 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
844 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
845 cff2=min(dzde_r(i,j ,k2),0.0_r8)
846 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
847 cff4=max(dzde_r(i,j ,k1),0.0_r8)
848 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
849 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
850 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
851 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
861 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
862 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
863 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
864 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))* &
882 adfac=fac1*ad_vfsx(i,j,k2)
884 ad_cff1=ad_cff1-(cff5*dnudz-dnudx(i,j-1,k1))*adfac
885 ad_cff2=ad_cff2-(cff6*dnudz-dnudx(i,j ,k2))*adfac
886 ad_cff3=ad_cff3-(cff7*dnudz-dnudx(i,j-1,k2))*adfac
887 ad_cff4=ad_cff4-(cff8*dnudz-dnudx(i,j ,k1))*adfac
888 ad_cff5=ad_cff5-cff1*adfac1
889 ad_cff6=ad_cff6-cff2*adfac1
890 ad_cff7=ad_cff7-cff3*adfac1
891 ad_cff8=ad_cff8-cff4*adfac1
893 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
895 ad_dnudx(i,j-1,k1)=ad_dnudx(i,j-1,k1)+cff1*adfac
896 ad_dnudx(i,j ,k2)=ad_dnudx(i,j ,k2)+cff2*adfac
897 ad_dnudx(i,j-1,k2)=ad_dnudx(i,j-1,k2)+cff3*adfac
898 ad_dnudx(i,j ,k1)=ad_dnudx(i,j ,k1)+cff4*adfac
902 ad_dzdx_r(i,j ,k1)=ad_dzdx_r(i,j ,k1)+ &
904 & sign(0.5_r8, dzdx_r(i,j ,k1)))* &
910 ad_dzdx_r(i,j-1,k2)=ad_dzdx_r(i,j-1,k2)+ &
912 & sign(0.5_r8, dzdx_r(i,j-1,k2)))* &
918 ad_dzdx_r(i,j ,k2)=ad_dzdx_r(i,j ,k2)+ &
920 & sign(0.5_r8,-dzdx_r(i,j ,k2)))* &
926 ad_dzdx_r(i,j-1,k1)=ad_dzdx_r(i,j-1,k1)+ &
928 & sign(0.5_r8,-dzdx_r(i,j-1,k1)))* &
934 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
936 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
942 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
944 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
950 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
952 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
958 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
960 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
964 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
965 cff2=min(dzde_r(i,j ,k2),0.0_r8)
966 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
967 cff4=max(dzde_r(i,j ,k1),0.0_r8)
977 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
978 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
979 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
980 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))* &
998 adfac=fac2*ad_vfse(i,j,k2)
999 ad_cff1=ad_cff1+(cff1*cff-dmvde(i,j-1,k1))*adfac
1000 ad_cff2=ad_cff2+(cff2*cff-dmvde(i,j ,k2))*adfac
1001 ad_cff3=ad_cff3+(cff3*cff-dmvde(i,j-1,k2))*adfac
1002 ad_cff4=ad_cff4+(cff4*cff-dmvde(i,j ,k1))*adfac
1003 ad_dmvdz=ad_dmvdz+ &
1004 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1006 ad_dmvde(i,j-1,k1)=ad_dmvde(i,j-1,k1)-cff1*adfac
1007 ad_dmvde(i,j ,k2)=ad_dmvde(i,j ,k2)-cff2*adfac
1008 ad_dmvde(i,j-1,k2)=ad_dmvde(i,j-1,k2)-cff3*adfac
1009 ad_dmvde(i,j ,k1)=ad_dmvde(i,j ,k1)-cff4*adfac
1010 ad_vfse(i,j,k2)=0.0_r8
1014 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
1016 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
1022 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
1024 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
1030 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
1032 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
1038 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
1040 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
1044 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
1045 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
1046 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
1047 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
1057 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
1058 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
1059 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
1060 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))* &
1078 adfac=fac1*ad_vfsx(i,j,k2)
1079 ad_cff1=ad_cff1+(cff1*cff-dnvdx(i ,j,k1))*adfac
1080 ad_cff2=ad_cff2+(cff2*cff-dnvdx(i+1,j,k2))*adfac
1081 ad_cff3=ad_cff3+(cff3*cff-dnvdx(i ,j,k2))*adfac
1082 ad_cff4=ad_cff4+(cff4*cff-dnvdx(i+1,j,k1))*adfac
1083 ad_dnvdz=ad_dnvdz+ &
1084 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1086 ad_dnvdx(i ,j,k1)=ad_dnvdx(i ,j,k1)-cff1*adfac
1087 ad_dnvdx(i+1,j,k2)=ad_dnvdx(i+1,j,k2)-cff2*adfac
1088 ad_dnvdx(i ,j,k2)=ad_dnvdx(i ,j,k2)-cff3*adfac
1089 ad_dnvdx(i+1,j,k1)=ad_dnvdx(i+1,j,k1)-cff4*adfac
1090 ad_vfsx(i,j,k2)=0.0_r8
1094 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
1096 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
1102 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
1104 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
1110 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
1112 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
1118 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
1120 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
1124 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
1127 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dmvdz
1134 adfac=cff*0.25_r8*ad_dmudz
1135 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
1136 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
1137 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
1138 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
1141 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1144 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dnvdz
1151 adfac=cff*0.25_r8*ad_dnudz
1152 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
1153 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
1154 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
1155 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
1162 & on_v(i,j)*ad_fac1+om_v(i,j)*ad_fac2
1169 adfac=0.125_r8*ad_cff
1170 ad_visc3d_r(i,j-1,k )=ad_visc3d_r(i,j-1,k )+adfac
1171 ad_visc3d_r(i,j ,k )=ad_visc3d_r(i,j ,k )+adfac
1172 ad_visc3d_r(i,j-1,k+1)=ad_visc3d_r(i,j-1,k+1)+adfac
1173 ad_visc3d_r(i,j ,k+1)=ad_visc3d_r(i,j ,k+1)+adfac
1183 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
1184 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
1188 cff=0.25_r8*(visc2_r(i-1,j)+visc2_r(i,j))
1192 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
1193 dnudz=cff*dudz(i,j,k2)
1194 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
1195 & dvdz(i ,j+1,k2)+ &
1196 & dvdz(i-1,j ,k2)+ &
1198 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1199 dmudz=cff*dudz(i,j,k2)
1200 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
1201 & dvdz(i ,j+1,k2)+ &
1202 & dvdz(i-1,j ,k2)+ &
1205 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
1206 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
1207 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
1208 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
1209 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
1210 cff6=min(dzde_r(i ,j,k2),0.0_r8)
1211 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
1212 cff8=max(dzde_r(i ,j,k1),0.0_r8)
1222 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
1223 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
1224 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
1225 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))* &
1243 adfac=fac2*ad_ufse(i,j,k2)
1245 ad_cff1=ad_cff1-(cff5*dmvdz-dmvde(i-1,j,k1))*adfac
1246 ad_cff2=ad_cff2-(cff6*dmvdz-dmvde(i ,j,k2))*adfac
1247 ad_cff3=ad_cff3-(cff7*dmvdz-dmvde(i-1,j,k2))*adfac
1248 ad_cff4=ad_cff4-(cff8*dmvdz-dmvde(i ,j,k1))*adfac
1249 ad_cff5=ad_cff5-cff1*adfac1
1250 ad_cff6=ad_cff6-cff2*adfac1
1251 ad_cff7=ad_cff7-cff3*adfac1
1252 ad_cff8=ad_cff8-cff4*adfac1
1253 ad_dmvdz=ad_dmvdz- &
1254 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
1256 ad_dmvde(i-1,j,k1)=ad_dmvde(i-1,j,k1)+cff1*adfac
1257 ad_dmvde(i ,j,k2)=ad_dmvde(i ,j,k2)+cff2*adfac
1258 ad_dmvde(i-1,j,k2)=ad_dmvde(i-1,j,k2)+cff3*adfac
1259 ad_dmvde(i ,j,k1)=ad_dmvde(i ,j,k1)+cff4*adfac
1263 ad_dzde_r(i ,j,k1)=ad_dzde_r(i ,j,k1)+ &
1265 & sign(0.5_r8, dzde_r(i ,j,k1)))* &
1271 ad_dzde_r(i-1,j,k2)=ad_dzde_r(i-1,j,k2)+ &
1273 & sign(0.5_r8, dzde_r(i-1,j,k2)))* &
1279 ad_dzde_r(i ,j,k2)=ad_dzde_r(i ,j,k2)+ &
1281 & sign(0.5_r8,-dzde_r(i ,j,k2)))* &
1287 ad_dzde_r(i-1,j,k1)=ad_dzde_r(i-1,j,k1)+ &
1289 & sign(0.5_r8,-dzde_r(i-1,j,k1)))* &
1295 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
1297 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
1303 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
1305 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
1311 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
1313 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
1319 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
1321 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
1325 cff1=min(dzde_p(i,j ,k1),0.0_r8)
1326 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
1327 cff3=max(dzde_p(i,j ,k2),0.0_r8)
1328 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
1329 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
1330 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
1331 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
1332 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
1342 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
1343 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
1344 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
1345 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))* &
1363 adfac=fac1*ad_ufsx(i,j,k2)
1365 ad_cff1=ad_cff1+(cff5*dnvdz-dnvdx(i,j ,k1))*adfac
1366 ad_cff2=ad_cff2+(cff6*dnvdz-dnvdx(i,j+1,k2))*adfac
1367 ad_cff3=ad_cff3+(cff7*dnvdz-dnvdx(i,j ,k2))*adfac
1368 ad_cff4=ad_cff4+(cff8*dnvdz-dnvdx(i,j+1,k1))*adfac
1369 ad_cff5=ad_cff5+cff1*adfac1
1370 ad_cff6=ad_cff6+cff2*adfac1
1371 ad_cff7=ad_cff7+cff3*adfac1
1372 ad_cff8=ad_cff8+cff4*adfac1
1373 ad_dnvdz=ad_dnvdz+ &
1374 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
1376 ad_dnvdx(i,j ,k1)=ad_dnvdx(i,j ,k1)-cff1*adfac
1377 ad_dnvdx(i,j+1,k2)=ad_dnvdx(i,j+1,k2)-cff2*adfac
1378 ad_dnvdx(i,j ,k2)=ad_dnvdx(i,j ,k2)-cff3*adfac
1379 ad_dnvdx(i,j+1,k1)=ad_dnvdx(i,j+1,k1)-cff4*adfac
1383 ad_dzdx_p(i,j+1,k1)=ad_dzdx_p(i,j+1,k1)+ &
1385 & sign(0.5_r8, dzdx_p(i,j+1,k1)))* &
1391 ad_dzdx_p(i,j ,k2)=ad_dzdx_p(i,j ,k2)+ &
1393 & sign(0.5_r8, dzdx_p(i,j ,k2)))* &
1399 ad_dzdx_p(i,j+1,k2)=ad_dzdx_p(i,j+1,k2)+ &
1401 & sign(0.5_r8,-dzdx_p(i,j+1,k2)))* &
1407 ad_dzdx_p(i,j ,k1)=ad_dzdx_p(i,j ,k1)+ &
1409 & sign(0.5_r8,-dzdx_p(i,j ,k1)))* &
1415 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
1417 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
1423 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
1425 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
1431 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
1433 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
1439 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
1441 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
1445 cff1=min(dzde_p(i,j ,k1),0.0_r8)
1446 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
1447 cff3=max(dzde_p(i,j ,k2),0.0_r8)
1448 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
1458 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
1459 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
1460 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
1461 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))* &
1479 adfac=fac2*ad_ufse(i,j,k2)
1480 ad_cff1=ad_cff1+(cff1*cff-dmude(i,j ,k1))*adfac
1481 ad_cff2=ad_cff2+(cff2*cff-dmude(i,j+1,k2))*adfac
1482 ad_cff3=ad_cff3+(cff3*cff-dmude(i,j ,k2))*adfac
1483 ad_cff4=ad_cff4+(cff4*cff-dmude(i,j+1,k1))*adfac
1484 ad_dmudz=ad_dmudz+ &
1485 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1487 ad_dmude(i,j ,k1)=ad_dmude(i,j ,k1)-cff1*adfac
1488 ad_dmude(i,j+1,k2)=ad_dmude(i,j+1,k2)-cff2*adfac
1489 ad_dmude(i,j ,k2)=ad_dmude(i,j ,k2)-cff3*adfac
1490 ad_dmude(i,j+1,k1)=ad_dmude(i,j+1,k1)-cff4*adfac
1491 ad_ufse(i,j,k2)=0.0_r8
1495 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
1497 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
1503 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
1505 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
1511 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
1513 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
1519 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
1521 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
1525 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
1526 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
1527 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
1528 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
1538 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
1539 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
1540 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
1541 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))* &
1559 adfac=fac1*ad_ufsx(i,j,k2)
1560 ad_cff1=ad_cff1+(cff1*cff-dnudx(i-1,j,k1))*adfac
1561 ad_cff2=ad_cff2+(cff2*cff-dnudx(i ,j,k2))*adfac
1562 ad_cff3=ad_cff3+(cff3*cff-dnudx(i-1,j,k2))*adfac
1563 ad_cff4=ad_cff4+(cff4*cff-dnudx(i ,j,k1))*adfac
1564 ad_dnudz=ad_dnudz+ &
1565 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1567 ad_dnudx(i-1,j,k1)=ad_dnudx(i-1,j,k1)-cff1*adfac
1568 ad_dnudx(i ,j,k2)=ad_dnudx(i ,j,k2)-cff2*adfac
1569 ad_dnudx(i-1,j,k2)=ad_dnudx(i-1,j,k2)-cff3*adfac
1570 ad_dnudx(i ,j,k1)=ad_dnudx(i ,j,k1)-cff4*adfac
1571 ad_ufsx(i,j,k2)=0.0_r8
1575 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
1577 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
1583 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
1585 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
1591 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
1593 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
1599 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
1601 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
1605 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1611 adfac=cff*0.25_r8*ad_dmvdz
1612 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
1613 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
1614 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
1615 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
1619 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dmudz
1622 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
1628 adfac=cff*0.25_r8*ad_dnvdz
1629 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
1630 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
1631 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
1632 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
1636 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dnudz
1643 & on_u(i,j)*ad_fac1+om_u(i,j)*ad_fac2
1650 adfac=0.125_r8*ad_cff
1651 ad_visc3d_r(i-1,j,k )=ad_visc3d_r(i-1,j,k )+adfac
1652 ad_visc3d_r(i ,j,k )=ad_visc3d_r(i ,j,k )+adfac
1653 ad_visc3d_r(i-1,j,k+1)=ad_visc3d_r(i-1,j,k+1)+adfac
1654 ad_visc3d_r(i ,j,k+1)=ad_visc3d_r(i ,j,k+1)+adfac
1659 END IF below_surface
1663 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
1664 & pm(i ,j-1)+pm(i ,j))
1665 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
1666 & pn(i ,j-1)+pn(i ,j))
1667 cff1=min(dzdx_p(i,j,k1),0.0_r8)
1668 cff2=max(dzdx_p(i,j,k1),0.0_r8)
1669 cff3=min(dzde_p(i,j,k1),0.0_r8)
1670 cff4=max(dzde_p(i,j,k1),0.0_r8)
1673 & (hz(i-1,j ,k)+hz(i,j ,k)+ &
1674 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
1675 & (on_p(i,j)*(dnvdx(i,j,k1)- &
1677 & (cff1*(dvdz(i-1,j,k1)+ &
1679 & cff2*(dvdz(i-1,j,k2)+ &
1680 & dvdz(i ,j,k1))))+ &
1681 & om_p(i,j)*(dmude(i,j,k1)- &
1683 & (cff3*(dudz(i,j-1,k1)+ &
1685 & cff4*(dudz(i,j-1,k2)+ &
1691 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
1692 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
1696 adfac=on_p(i,j)*on_p(i,j)*ad_vfx(i,j)
1697 ad_cff=ad_cff+visc_p*adfac
1698 ad_visc_p=ad_visc_p+cff*adfac
1703 adfac=om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
1704 ad_cff=ad_cff+visc_p*adfac
1705 ad_visc_p=ad_visc_p+cff*adfac
1711 adfac=0.25_r8*ad_visc_p
1712 ad_visc3d_r(i-1,j-1,k)=ad_visc3d_r(i-1,j-1,k)+adfac
1713 ad_visc3d_r(i ,j-1,k)=ad_visc3d_r(i ,j-1,k)+adfac
1714 ad_visc3d_r(i-1,j ,k)=ad_visc3d_r(i-1,j ,k)+adfac
1715 ad_visc3d_r(i ,j ,k)=ad_visc3d_r(i ,j ,k)+adfac
1722 & on_p(i,j)*on_p(i,j)*visc2_p(i,j)*ad_vfx(i,j)+ &
1723 & om_p(i,j)*om_p(i,j)*visc2_p(i,j)*ad_ufe(i,j)
1730 ad_cff=ad_cff*pmask(i,j)
1770 adfac=0.25_r8*ad_cff
1772 adfac1=adfac*(on_p(i,j)*(dnvdx(i,j,k1)- &
1774 & (cff1*(dvdz(i-1,j,k1)+ &
1776 & cff2*(dvdz(i-1,j,k2)+ &
1777 & dvdz(i ,j,k1))))+ &
1778 & om_p(i,j)*(dmude(i,j,k1)- &
1780 & (cff3*(dudz(i,j-1,k1)+ &
1782 & cff4*(dudz(i,j-1,k2)+ &
1784 adfac2=adfac*(hz(i-1,j ,k)+hz(i,j ,k)+ &
1785 & hz(i-1,j-1,k)+hz(i,j-1,k))
1786 adfac3=adfac2*on_p(i,j)
1787 adfac4=adfac3*0.5_r8*pn_p
1788 adfac5=adfac2*om_p(i,j)
1789 adfac6=adfac5*0.5_r8*pm_p
1790 ad_hz(i-1,j-1,k)=ad_hz(i-1,j-1,k)+adfac1
1791 ad_hz(i ,j-1,k)=ad_hz(i ,j-1,k)+adfac1
1792 ad_hz(i-1,j ,k)=ad_hz(i-1,j ,k)+adfac1
1793 ad_hz(i ,j ,k)=ad_hz(i ,j ,k)+adfac1
1794 ad_dnvdx(i,j,k1)=ad_dnvdx(i,j,k1)+adfac3
1796 & (dvdz(i-1,j,k1)+dvdz(i ,j,k2))*adfac4
1798 & (dvdz(i-1,j,k2)+dvdz(i ,j,k1))*adfac4
1799 ad_dvdz(i-1,j,k1)=ad_dvdz(i-1,j,k1)-cff1*adfac4
1800 ad_dvdz(i-1,j,k2)=ad_dvdz(i-1,j,k2)-cff2*adfac4
1801 ad_dvdz(i ,j,k1)=ad_dvdz(i ,j,k1)-cff2*adfac4
1802 ad_dvdz(i ,j,k2)=ad_dvdz(i ,j,k2)-cff1*adfac4
1803 ad_dmude(i,j,k1)=ad_dmude(i,j,k1)+adfac5
1805 & (dudz(i,j-1,k1)+dudz(i,j ,k2))*adfac6
1807 & (dudz(i,j-1,k2)+dudz(i,j ,k1))*adfac6
1808 ad_dudz(i,j-1,k1)=ad_dudz(i,j-1,k1)-cff3*adfac6
1809 ad_dudz(i,j-1,k2)=ad_dudz(i,j-1,k2)-cff4*adfac6
1810 ad_dudz(i,j ,k1)=ad_dudz(i,j ,k1)-cff4*adfac6
1811 ad_dudz(i,j ,k2)=ad_dudz(i,j ,k2)-cff3*adfac6
1817 ad_dzde_p(i,j,k1)=ad_dzde_p(i,j,k1)+ &
1819 & sign(0.5_r8, dzde_p(i,j,k1)))* &
1822 & sign(0.5_r8,-dzde_p(i,j,k1)))* &
1831 ad_dzdx_p(i,j,k1)=ad_dzdx_p(i,j,k1)+ &
1833 & sign(0.5_r8, dzdx_p(i,j,k1)))* &
1836 & sign(0.5_r8,-dzdx_p(i,j,k1)))* &
1845 cff1=min(dzdx_r(i,j,k1),0.0_r8)
1846 cff2=max(dzdx_r(i,j,k1),0.0_r8)
1847 cff3=min(dzde_r(i,j,k1),0.0_r8)
1848 cff4=max(dzde_r(i,j,k1),0.0_r8)
1851 & (on_r(i,j)*(dnudx(i,j,k1)- &
1853 & (cff1*(dudz(i ,j,k1)+ &
1854 & dudz(i+1,j,k2))+ &
1855 & cff2*(dudz(i ,j,k2)+ &
1856 & dudz(i+1,j,k1))))- &
1857 & om_r(i,j)*(dmvde(i,j,k1)- &
1859 & (cff3*(dvdz(i,j ,k1)+ &
1860 & dvdz(i,j+1,k2))+ &
1861 & cff4*(dvdz(i,j ,k2)+ &
1862 & dvdz(i,j+1,k1)))))
1870 adfac=om_r(i,j)*om_r(i,j)*ad_vfe(i,j)
1871 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
1872 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
1878 adfac=on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
1879 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
1880 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
1887 & om_r(i,j)*om_r(i,j)*visc2_r(i,j)*ad_vfe(i,j)+ &
1888 & on_r(i,j)*on_r(i,j)*visc2_r(i,j)*ad_ufx(i,j)
1895 ad_cff=ad_cff*rmask(i,j)
1932 adfac1=hz(i,j,k)*ad_cff
1933 adfac2=adfac1*on_r(i,j)
1934 adfac3=adfac2*0.5_r8*pn(i,j)
1935 adfac4=adfac1*om_r(i,j)
1936 adfac5=adfac4*0.5_r8*pm(i,j)
1937 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
1938 (on_r(i,j)*(dnudx(i,j,k1)- &
1940 & (cff1*(dudz(i ,j,k1)+ &
1941 & dudz(i+1,j,k2))+ &
1942 & cff2*(dudz(i ,j,k2)+ &
1943 & dudz(i+1,j,k1))))- &
1944 & om_r(i,j)*(dmvde(i,j,k1)- &
1946 & (cff3*(dvdz(i,j ,k1)+ &
1947 & dvdz(i,j+1,k2))+ &
1948 & cff4*(dvdz(i,j ,k2)+ &
1949 & dvdz(i,j+1,k1)))))* &
1951 ad_dnudx(i,j,k1)=ad_dnudx(i,j,k1)+adfac2
1953 & (dudz(i ,j,k1)+dudz(i+1,j,k2))*adfac3
1955 (dudz(i ,j,k2)+dudz(i+1,j,k1))*adfac3
1956 ad_dudz(i ,j,k1)=ad_dudz(i ,j,k1)-cff1*adfac3
1957 ad_dudz(i ,j,k2)=ad_dudz(i ,j,k2)-cff2*adfac3
1958 ad_dudz(i+1,j,k1)=ad_dudz(i+1,j,k1)-cff2*adfac3
1959 ad_dudz(i+1,j,k2)=ad_dudz(i+1,j,k2)-cff1*adfac3
1960 ad_dmvde(i,j,k1)=ad_dmvde(i,j,k1)-adfac4
1962 & (dvdz(i,j ,k1)+dvdz(i,j+1,k2))*adfac5
1964 & (dvdz(i,j ,k2)+dvdz(i,j+1,k1))*adfac5
1965 ad_dvdz(i,j ,k1)=ad_dvdz(i,j ,k1)+cff3*adfac5
1966 ad_dvdz(i,j ,k2)=ad_dvdz(i,j ,k2)+cff4*adfac5
1967 ad_dvdz(i,j+1,k1)=ad_dvdz(i,j+1,k1)+cff4*adfac5
1968 ad_dvdz(i,j+1,k2)=ad_dvdz(i,j+1,k2)+cff3*adfac5
1975 ad_dzde_r(i,j,k1)=ad_dzde_r(i,j,k1)+ &
1977 & sign(0.5_r8, dzde_r(i,j,k1)))* &
1980 & sign(0.5_r8,-dzde_r(i,j,k1)))* &
1989 ad_dzdx_r(i,j,k1)=ad_dzdx_r(i,j,k1)+ &
1991 & sign(0.5_r8, dzdx_r(i,j,k1)))* &
1994 & sign(0.5_r8,-dzdx_r(i,j,k1)))* &
2002 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
2007 ad_vfse(i,j,k2)=0.0_r8
2010 ad_vfsx(i,j,k2)=0.0_r8
2017 ad_ufse(i,j,k2)=0.0_r8
2020 ad_ufsx(i,j,k2)=0.0_r8
2028 ad_dvdz(i,j,k2)=0.0_r8
2036 ad_dudz(i,j,k2)=0.0_r8
2042 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)-z_r(i,j-1,k)+ &
2043 & z_r(i,j ,k+1)-z_r(i,j ,k)))
2049 adfac=cff*ad_dvdz(i,j,k2)
2050 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)-adfac
2051 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac
2052 ad_cff=ad_cff+(v(i,j,k+1,nrhs)- &
2053 & v(i,j,k ,nrhs))*ad_dvdz(i,j,k2)
2054 ad_dvdz(i,j,k2)=0.0_r8
2060 adfac=-cff*cff*0.5_r8*ad_cff
2061 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac
2062 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+adfac
2063 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-adfac
2064 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
2071 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)-z_r(i-1,j,k)+ &
2072 & z_r(i ,j,k+1)-z_r(i ,j,k)))
2078 adfac=cff*ad_dudz(i,j,k2)
2079 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)-adfac
2080 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac
2081 ad_cff=ad_cff+(u(i,j,k+1,nrhs)- &
2082 & u(i,j,k ,nrhs))*ad_dudz(i,j,k2)
2083 ad_dudz(i,j,k2)=0.0_r8
2089 adfac=-cff*cff*0.5_r8*ad_cff
2090 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac
2091 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+adfac
2092 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-adfac
2093 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
2099 IF (k.lt.n(ng))
THEN
2111 adfac=cff*ad_dmvde(i,j,k2)
2112 ad_v(i,j ,k+1,nrhs)=ad_v(i,j ,k+1,nrhs)- &
2113 & (pm(i,j-1)+pm(i,j ))*adfac
2114 ad_v(i,j+1,k+1,nrhs)=ad_v(i,j+1,k+1,nrhs)+ &
2115 & (pm(i,j )+pm(i,j+1))*adfac
2116 ad_dmvde(i,j,k2)=0.0_r8
2122 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
2123 & pm(i-1,j-1)+pm(i,j-1))
2132 adfac=cff*ad_dnvdx(i,j,k2)
2133 ad_v(i-1,j,k+1,nrhs)=ad_v(i-1,j,k+1,nrhs)- &
2134 & (pn(i-1,j-1)+pn(i-1,j))*adfac
2135 ad_v(i ,j,k+1,nrhs)=ad_v(i ,j,k+1,nrhs)+ &
2136 & (pn(i ,j-1)+pn(i ,j))*adfac
2137 ad_dnvdx(i,j,k2)=0.0_r8
2143 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
2144 & pn(i-1,j-1)+pn(i,j-1))
2153 adfac=cff*ad_dmude(i,j,k2)
2154 ad_u(i,j-1,k+1,nrhs)=ad_u(i,j-1,k+1,nrhs)- &
2155 & (pm(i-1,j-1)+pm(i,j-1))*adfac
2156 ad_u(i,j ,k+1,nrhs)=ad_u(i,j ,k+1,nrhs)+ &
2157 & (pm(i-1,j )+pm(i,j ))*adfac
2158 ad_dmude(i,j,k2)=0.0_r8
2173 adfac=cff*ad_dnudx(i,j,k2)
2174 ad_u(i ,j,k+1,nrhs)=ad_u(i ,j,k+1,nrhs)- &
2175 & (pn(i-1,j)+pn(i ,j))*adfac
2176 ad_u(i+1,j,k+1,nrhs)=ad_u(i+1,j,k+1,nrhs)+ &
2177 & (pn(i ,j)+pn(i+1,j))*adfac
2178 ad_dnudx(i,j,k2)=0.0_r8
2189 adfac=0.5_r8*ad_dzde_r(i,j,k2)
2190 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2191 ad_vfe(i,j+1)=ad_vfe(i,j+1)+adfac
2192 ad_dzde_r(i,j,k2)=0.0_r8
2196 adfac=0.5_r8*ad_dzdx_r(i,j,k2)
2197 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2198 ad_ufx(i+1,j)=ad_ufx(i+1,j)+adfac
2199 ad_dzdx_r(i,j,k2)=0.0_r8
2208 adfac=0.5_r8*ad_dzde_p(i,j,k2)
2209 ad_vfe(i-1,j)=ad_vfe(i-1,j)+adfac
2210 ad_vfe(i ,j)=ad_vfe(i ,j)+adfac
2211 ad_dzde_p(i,j,k2)=0.0_r8
2215 adfac=0.5_r8*ad_dzdx_p(i,j,k2)
2216 ad_ufx(i,j-1)=ad_ufx(i,j-1)+adfac
2217 ad_ufx(i,j )=ad_ufx(i,j )+adfac
2218 ad_dzdx_p(i,j,k2)=0.0_r8
2224 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
2231 adfac=cff*ad_vfe(i,j)
2232 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac
2233 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
2240 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
2247 adfac=cff*ad_ufx(i,j)
2248 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac
2249 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac