129 & LBi, UBi, LBj, UBj, &
130 & IminS, ImaxS, JminS, JmaxS, &
133 & pmask, rmask, umask, vmask, &
135 & om_p, om_r, om_u, om_v, &
136 & on_p, on_r, on_u, on_v, &
141# ifdef UV_U3ADV_SPLIT
142 & Uvis3d_r, Vvis3d_r, &
143 & ad_Uvis3d_r, ad_Vvis3d_r, &
145 & visc3d_r, ad_visc3d_r, &
148 & visc4_p, visc4_r, &
151!! & DiaRUfrc, DiaRVfrc, &
152!! & DiaU3wrk, DiaV3wrk, &
154 & u, v, ad_u, ad_v, &
155 & ad_rufrc, ad_rvfrc)
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, nnew
171 real(r8),
intent(in) :: pmask(LBi:,LBj:)
172 real(r8),
intent(in) :: rmask(LBi:,LBj:)
173 real(r8),
intent(in) :: umask(LBi:,LBj:)
174 real(r8),
intent(in) :: vmask(LBi:,LBj:)
176 real(r8),
intent(in) :: om_p(LBi:,LBj:)
177 real(r8),
intent(in) :: om_r(LBi:,LBj:)
178 real(r8),
intent(in) :: om_u(LBi:,LBj:)
179 real(r8),
intent(in) :: om_v(LBi:,LBj:)
180 real(r8),
intent(in) :: on_p(LBi:,LBj:)
181 real(r8),
intent(in) :: on_r(LBi:,LBj:)
182 real(r8),
intent(in) :: on_u(LBi:,LBj:)
183 real(r8),
intent(in) :: on_v(LBi:,LBj:)
184 real(r8),
intent(in) :: pm(LBi:,LBj:)
185 real(r8),
intent(in) :: pn(LBi:,LBj:)
186 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
187 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
189# ifdef UV_U3ADV_SPLIT
190 real(r8),
intent(in) :: Uvis3d_r(LBi:,LBj:,:)
191 real(r8),
intent(in) :: Vvis3d_r(LBi:,LBj:,:)
193 real(r8),
intent(in) :: visc3d_r(LBi:,LBj:,:)
196 real(r8),
intent(in) :: visc4_p(LBi:,LBj:)
197 real(r8),
intent(in) :: visc4_r(LBi:,LBj:)
199 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
200 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
202# ifdef DIAGNOSTICS_UV
209# ifdef UV_U3ADV_SPLIT
210 real(r8),
intent(inout) :: ad_Uvis3d_r(LBi:,LBj:,:)
211 real(r8),
intent(inout) :: ad_Vvis3d_r(LBi:,LBj:,:)
213 real(r8),
intent(inout) :: ad_visc3d_r(LBi:,LBj:,:)
216 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
217 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
218 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
219 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
220 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
221 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
224 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
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)
229 real(r8),
intent(in) :: om_p(LBi:UBi,LBj:UBj)
230 real(r8),
intent(in) :: om_r(LBi:UBi,LBj:UBj)
231 real(r8),
intent(in) :: om_u(LBi:UBi,LBj:UBj)
232 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
233 real(r8),
intent(in) :: on_p(LBi:UBi,LBj:UBj)
234 real(r8),
intent(in) :: on_r(LBi:UBi,LBj:UBj)
235 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
236 real(r8),
intent(in) :: on_v(LBi:UBi,LBj:UBj)
237 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
238 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
239 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
240 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
242# ifdef UV_U3ADV_SPLIT
243 real(r8),
intent(in) :: Uvis3d_r(LBi:UBi,LBj:UBj,N(ng))
244 real(r8),
intent(in) :: Vvis3d_r(LBi:UBi,LBj:UBj,N(ng))
246 real(r8),
intent(in) :: visc3d_r(LBi:UBi,LBj:UBj,N(ng))
249 real(r8),
intent(in) :: visc4_p(LBi:UBi,LBj:UBj)
250 real(r8),
intent(in) :: visc4_r(LBi:UBi,LBj:UBj)
252 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
253 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
255# ifdef DIAGNOSTICS_UV
262# ifdef UV_U3ADV_SPLIT
263 real(r8),
intent(inout) :: ad_Uvis3d_r(LBi:UBi,LBj:UBj,N(ng))
264 real(r8),
intent(inout) :: ad_Vvis3d_r(LBi:UBi,LBj:UBj,N(ng))
266 real(r8),
intent(inout) :: ad_visc3d_r(LBi:UBi,LBj:UBj,N(ng))
269 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
270 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
271 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
272 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
273 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
274 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
279 integer :: i, j, k, kk, kt, k1, k1b, k2, k2b
281 real(r8) :: cff, fac1, fac2, pm_p, pn_p
282 real(r8) :: cff1, cff2, cff3, cff4
283 real(r8) :: cff5, cff6, cff7, cff8
284 real(r8) :: dmUdz, dnUdz, dmVdz, dnVdz
286 real(r8) :: Uvis_p, Vvis_p, visc_p
287 real(r8) :: ad_fac1, ad_fac2,ad_Uvis_p, ad_Vvis_p, ad_visc_p
289 real(r8) :: adfac, ad_cff
290 real(r8) :: adfac1, adfac2, adfac3, adfac4, adfac5, adfac6
291 real(r8) :: ad_cff1, ad_cff2, ad_cff3, ad_cff4
292 real(r8) :: ad_cff5, ad_cff6, ad_cff7, ad_cff8
293 real(r8) :: ad_dmUdz, ad_dnUdz, ad_dmVdz, ad_dnVdz
295 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapU
296 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: LapV
298 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_LapU
299 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: ad_LapV
301 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
302 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
303 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
304 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
306 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
307 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
308 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
309 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
311 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: UFse
312 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: UFsx
313 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: VFse
314 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: VFsx
315 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmUde
316 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dmVde
317 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnUdx
318 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dnVdx
319 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dUdz
320 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dVdz
321 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_p
322 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZde_r
323 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_p
324 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: dZdx_r
326 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_UFse
327 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_UFsx
328 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_VFse
329 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_VFsx
330 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dmUde
331 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dmVde
332 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dnUdx
333 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dnVdx
334 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dUdz
335 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dVdz
336 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZde_p
337 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZde_r
338 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZdx_p
339 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,2) :: ad_dZdx_r
341#include "set_bounds.h"
370 ad_ufe(imins:imaxs,jmins:jmaxs)=0.0_r8
371 ad_ufx(imins:imaxs,jmins:jmaxs)=0.0_r8
372 ad_vfe(imins:imaxs,jmins:jmaxs)=0.0_r8
373 ad_vfx(imins:imaxs,jmins:jmaxs)=0.0_r8
375 ad_ufse(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
376 ad_ufsx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
377 ad_vfse(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
378 ad_vfsx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
380 ad_dmude(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
381 ad_dmvde(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
382 ad_dnudx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
383 ad_dnvdx(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
385 ad_dudz(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
386 ad_dvdz(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
388 ad_dzde_p(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
389 ad_dzde_r(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
390 ad_dzdx_p(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
391 ad_dzdx_r(imins:imaxs,jmins:jmaxs,1:2)=0.0_r8
393 ad_lapu(imins:imaxs,jmins:jmaxs,1:n(ng))=0.0_r8
394 ad_lapv(imins:imaxs,jmins:jmaxs,1:n(ng))=0.0_r8
419 k_loop1 :
DO k=0,n(ng)
428 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
432 ufx(i,j)=cff*(z_r(i ,j,k+1)- &
438 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
442 vfe(i,j)=cff*(z_r(i,j ,k+1)- &
449 dzdx_p(i,j,k2)=0.5_r8*(ufx(i,j-1)+ &
451 dzde_p(i,j,k2)=0.5_r8*(vfe(i-1,j)+ &
457 dzdx_r(i,j,k2)=0.5_r8*(ufx(i ,j)+ &
459 dzde_r(i,j,k2)=0.5_r8*(vfe(i,j )+ &
473 dnudx(i,j,k2)=cff*((pn(i ,j)+pn(i+1,j))* &
474 & u(i+1,j,k+1,nrhs)- &
475 & (pn(i-1,j)+pn(i ,j))* &
482 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
483 & pn(i-1,j-1)+pn(i,j-1))
487 dmude(i,j,k2)=cff*((pm(i-1,j )+pm(i,j ))* &
488 & u(i,j ,k+1,nrhs)- &
489 & (pm(i-1,j-1)+pm(i,j-1))* &
496 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
497 & pm(i-1,j-1)+pm(i,j-1))
501 dnvdx(i,j,k2)=cff*((pn(i ,j-1)+pn(i ,j))* &
502 & v(i ,j,k+1,nrhs)- &
503 & (pn(i-1,j-1)+pn(i-1,j))* &
514 dmvde(i,j,k2)=cff*((pm(i,j )+pm(i,j+1))* &
515 & v(i,j+1,k+1,nrhs)- &
516 & (pm(i,j-1)+pm(i,j ))* &
522 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
549 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)- &
553 dudz(i,j,k2)=cff*(u(i,j,k+1,nrhs)- &
560 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)- &
564 dvdz(i,j,k2)=cff*(v(i,j,k+1,nrhs)- &
577 cff1=min(dzdx_r(i,j,k1),0.0_r8)
578 cff2=max(dzdx_r(i,j,k1),0.0_r8)
579 cff3=min(dzde_r(i,j,k1),0.0_r8)
580 cff4=max(dzde_r(i,j,k1),0.0_r8)
581 cff=on_r(i,j)*(dnudx(i,j,k1)- &
583 & (cff1*(dudz(i ,j,k1)+ &
585 & cff2*(dudz(i ,j,k2)+ &
586 & dudz(i+1,j,k1))))- &
587 & om_r(i,j)*(dmvde(i,j,k1)- &
589 & (cff3*(dvdz(i,j ,k1)+ &
591 & cff4*(dvdz(i,j ,k2)+ &
597# ifdef UV_U3ADV_SPLIT
598 ufx(i,j)=on_r(i,j)*on_r(i,j)*uvis3d_r(i,j,k)*cff
599 vfe(i,j)=om_r(i,j)*om_r(i,j)*vvis3d_r(i,j,k)*cff
601 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc3d_r(i,j,k)*cff
602 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc3d_r(i,j,k)*cff
605 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc4_r(i,j)*cff
606 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc4_r(i,j)*cff
613 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
614 & pm(i ,j-1)+pm(i ,j))
615 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
616 & pn(i ,j-1)+pn(i ,j))
617 cff1=min(dzdx_p(i,j,k1),0.0_r8)
618 cff2=max(dzdx_p(i,j,k1),0.0_r8)
619 cff3=min(dzde_p(i,j,k1),0.0_r8)
620 cff4=max(dzde_p(i,j,k1),0.0_r8)
621 cff=on_p(i,j)*(dnvdx(i,j,k1)- &
623 & (cff1*(dvdz(i-1,j,k1)+ &
625 & cff2*(dvdz(i-1,j,k2)+ &
626 & dvdz(i ,j,k1))))+ &
627 & om_p(i,j)*(dmude(i,j,k1)- &
629 & (cff3*(dudz(i,j-1,k1)+ &
631 & cff4*(dudz(i,j-1,k2)+ &
637# ifdef UV_U3ADV_SPLIT
639 & (uvis3d_r(i-1,j-1,k)+uvis3d_r(i-1,j,k)+ &
640 & uvis3d_r(i ,j-1,k)+uvis3d_r(i ,j,k))
642 & (vvis3d_r(i-1,j-1,k)+vvis3d_r(i-1,j,k)+ &
643 & vvis3d_r(i ,j-1,k)+vvis3d_r(i ,j,k))
644 ufe(i,j)=om_p(i,j)*om_p(i,j)*uvis_p*cff
645 vfx(i,j)=on_p(i,j)*on_p(i,j)*vvis_p*cff
648 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
649 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
650 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc_p*cff
651 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc_p*cff
654 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc4_p(i,j)*cff
655 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc4_p(i,j)*cff
667# ifdef UV_U3ADV_SPLIT
669 & (uvis3d_r(i-1,j,k )+uvis3d_r(i,j,k )+ &
670 & uvis3d_r(i-1,j,k+1)+uvis3d_r(i,j,k+1))
673 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
674 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
679 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
683 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
684 dnudz=cff*dudz(i,j,k2)
685 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
689 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
690 dmudz=cff*dudz(i,j,k2)
691 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
696 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
697 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
698 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
699 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
701 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
702 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
703 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
704 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))
706 cff1=min(dzde_p(i,j ,k1),0.0_r8)
707 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
708 cff3=max(dzde_p(i,j ,k2),0.0_r8)
709 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
711 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
712 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
713 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
714 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))
716 cff1=min(dzde_p(i,j ,k1),0.0_r8)
717 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
718 cff3=max(dzde_p(i,j ,k2),0.0_r8)
719 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
720 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
721 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
722 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
723 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
724 ufsx(i,j,k2)=ufsx(i,j,k2)+ &
726 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
727 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
728 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
729 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))
731 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
732 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
733 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
734 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
735 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
736 cff6=min(dzde_r(i ,j,k2),0.0_r8)
737 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
738 cff8=max(dzde_r(i ,j,k1),0.0_r8)
739 ufse(i,j,k2)=ufse(i,j,k2)- &
741 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
742 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
743 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
744 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))
751# ifdef UV_U3ADV_SPLIT
753 & (vvis3d_r(i,j-1,k )+vvis3d_r(i,j,k )+ &
754 & vvis3d_r(i,j-1,k+1)+vvis3d_r(i,j,k+1))
757 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
758 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
763 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
767 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
768 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
772 dnvdz=cff*dvdz(i,j,k2)
773 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
774 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
778 dmvdz=cff*dvdz(i,j,k2)
780 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
781 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
782 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
783 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
785 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
786 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
787 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
788 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))
790 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
791 cff2=min(dzde_r(i,j ,k2),0.0_r8)
792 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
793 cff4=max(dzde_r(i,j ,k1),0.0_r8)
795 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
796 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
797 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
798 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))
800 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
801 cff2=min(dzde_r(i,j ,k2),0.0_r8)
802 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
803 cff4=max(dzde_r(i,j ,k1),0.0_r8)
804 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
805 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
806 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
807 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
808 vfsx(i,j,k2)=vfsx(i,j,k2)- &
810 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
811 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
812 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
813 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))
815 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
816 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
817 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
818 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
819 cff5=min(dzde_p(i ,j,k1),0.0_r8)
820 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
821 cff7=max(dzde_p(i ,j,k2),0.0_r8)
822 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
823 vfse(i,j,k2)=vfse(i,j,k2)+ &
825 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
826 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
827 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
828 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))
837 cff=0.125_r8*(pm(i-1,j)+pm(i,j))* &
838 & (pn(i-1,j)+pn(i,j))
839 cff1=1.0_r8/(0.5_r8*(hz(i-1,j,k)+hz(i,j,k)))
840 lapu(i,j,k)=cff*((pn(i-1,j)+pn(i,j))* &
841 (ufx(i,j)-ufx(i-1,j))+ &
842 & (pm(i-1,j)+pm(i,j))* &
843 & (ufe(i,j+1)-ufe(i,j)))+ &
844 & cff1*((ufsx(i,j,k2)+ufse(i,j,k2))- &
845 & (ufsx(i,j,k1)+ufse(i,j,k1)))
847 lapu(i,j,k)=lapu(i,j,k)*umask(i,j)
854 cff=0.125_r8*(pm(i,j)+pm(i,j-1))* &
855 & (pn(i,j)+pn(i,j-1))
856 cff1=1.0_r8/(0.5_r8*(hz(i,j-1,k)+hz(i,j,k)))
857 lapv(i,j,k)=cff*((pn(i,j-1)+pn(i,j))* &
858 & (vfx(i+1,j)-vfx(i,j))- &
859 & (pm(i,j-1)+pm(i,j))* &
860 & (vfe(i,j)-vfe(i,j-1)))+ &
861 & cff1*((vfsx(i,j,k2)+vfse(i,j,k2))- &
862 & (vfsx(i,j,k1)+vfse(i,j,k1)))
864 lapv(i,j,k)=lapv(i,j,k)*vmask(i,j)
875 IF (
domain(ng)%Western_Edge(tile))
THEN
879 lapu(istru-1,j,k)=0.0_r8
885 lapu(istru-1,j,k)=lapu(istru,j,k)
892 lapv(istr-1,j,k)=
gamma2(ng)*lapv(istr,j,k)
898 lapv(istr-1,j,k)=0.0_r8
906 IF (
domain(ng)%Eastern_Edge(tile))
THEN
910 lapu(iend+1,j,k)=0.0_r8
916 lapu(iend+1,j,k)=lapu(iend,j,k)
923 lapv(iend+1,j,k)=
gamma2(ng)*lapv(iend,j,k)
929 lapv(iend+1,j,k)=0.0_r8
937 IF (
domain(ng)%Southern_Edge(tile))
THEN
941 lapu(i,jstr-1,k)=
gamma2(ng)*lapu(i,jstr,k)
947 lapu(i,jstr-1,k)=0.0_r8
954 lapv(i,jstrv-1,k)=0.0_r8
960 lapv(i,jstrv-1,k)=lapv(i,jstrv,k)
968 IF (
domain(ng)%Northern_Edge(tile))
THEN
972 lapu(i,jend+1,k)=
gamma2(ng)*lapu(i,jend,k)
978 lapu(i,jend+1,k)=0.0_r8
985 lapv(i,jend+1,k)=0.0_r8
991 lapv(i,jend+1,k)=lapv(i,jend,k)
1000 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
1002 lapu(istr ,jstr-1,k)=0.5_r8* &
1003 & (lapu(istr+1,jstr-1,k)+ &
1004 & lapu(istr ,jstr ,k))
1005 lapv(istr-1,jstr ,k)=0.5_r8* &
1006 & (lapv(istr-1,jstr+1,k)+ &
1007 & lapv(istr ,jstr ,k))
1014 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
1016 lapu(iend+1,jstr-1,k)=0.5_r8* &
1017 & (lapu(iend ,jstr-1,k)+ &
1018 & lapu(iend+1,jstr ,k))
1019 lapv(iend+1,jstr ,k)=0.5_r8* &
1020 & (lapv(iend ,jstr ,k)+ &
1021 & lapv(iend+1,jstr+1,k))
1028 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
1030 lapu(istr ,jend+1,k)=0.5_r8* &
1031 & (lapu(istr+1,jend+1,k)+ &
1032 & lapu(istr ,jend ,k))
1033 lapv(istr-1,jend+1,k)=0.5_r8* &
1034 & (lapv(istr ,jend+1,k)+ &
1035 & lapv(istr-1,jend ,k))
1042 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
1044 lapu(iend+1,jend+1,k)=0.5_r8* &
1045 & (lapu(iend ,jend+1,k)+ &
1046 & lapu(iend+1,jend ,k))
1047 lapv(iend+1,jend+1,k)=0.5_r8* &
1048 & (lapv(iend ,jend+1,k)+ &
1049 & lapv(iend+1,jend ,k))
1066 k_loop2 :
DO k=n(ng),0,-1
1074 IF (kk.lt.n(ng))
THEN
1077 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1081 ufx(i,j)=cff*(z_r(i ,j,kk+1)- &
1087 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1091 vfe(i,j)=cff*(z_r(i,j ,kk+1)- &
1098 dzdx_p(i,j,k2b)=0.5_r8*(ufx(i,j-1)+ &
1100 dzde_p(i,j,k2b)=0.5_r8*(vfe(i-1,j)+ &
1106 dzdx_r(i,j,k2b)=0.5_r8*(ufx(i ,j)+ &
1108 dzde_r(i,j,k2b)=0.5_r8*(vfe(i,j )+ &
1115 dzdx_p(i,j,k1b)=0.0_r8
1116 dzde_p(i,j,k1b)=0.0_r8
1121 dzdx_r(i,j,k1b)=0.0_r8
1122 dzde_r(i,j,k1b)=0.0_r8
1136 dnudx(i,j,k2b)=cff*((pn(i ,j)+pn(i+1,j))* &
1137 & lapu(i+1,j,kk+1)- &
1138 & (pn(i-1,j)+pn(i ,j))* &
1145 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
1146 & pn(i-1,j-1)+pn(i,j-1))
1150 dmude(i,j,k2b)=cff*((pm(i-1,j )+pm(i,j ))* &
1151 & lapu(i,j ,kk+1)- &
1152 & (pm(i-1,j-1)+pm(i,j-1))* &
1159 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
1160 & pm(i-1,j-1)+pm(i,j-1))
1164 dnvdx(i,j,k2b)=cff*((pn(i ,j-1)+pn(i ,j))* &
1165 & lapv(i ,j,kk+1)- &
1166 & (pn(i-1,j-1)+pn(i-1,j))* &
1177 dmvde(i,j,k2b)=cff*((pm(i,j )+pm(i,j+1))* &
1178 & lapv(i,j+1,kk+1)- &
1179 & (pm(i,j-1)+pm(i,j ))* &
1187 dnudx(i,j,k1b)=0.0_r8
1192 dmude(i,j,k1b)=0.0_r8
1197 dnvdx(i,j,k1b)=0.0_r8
1202 dmvde(i,j,k1b)=0.0_r8
1208 IF ((kk.eq.0).or.(kk.eq.n(ng)))
THEN
1211 dudz(i,j,k2b)=0.0_r8
1216 dvdz(i,j,k2b)=0.0_r8
1223 dudz(i,j,k1b)=0.0_r8
1228 dvdz(i,j,k1b)=0.0_r8
1235 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,kk+1)- &
1239 dudz(i,j,k2b)=cff*(lapu(i,j,kk+1)- &
1246 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,kk+1)- &
1250 dvdz(i,j,k2b)=cff*(lapv(i,j,kk+1)- &
1265 cff=
dt(ng)*0.25_r8*(pm(i,j)+pm(i,j-1))*(pn(i,j)+pn(i,j-1))
1277 ad_cff5=ad_cff5-ad_v(i,j,k,nnew)
1278 ad_cff6=ad_cff6-ad_v(i,j,k,nnew)
1282 ad_cff1=ad_cff1-ad_rvfrc(i,j)
1283 ad_cff2=ad_cff2+ad_rvfrc(i,j)
1284 ad_cff3=ad_cff3-ad_rvfrc(i,j)
1285 ad_cff4=ad_cff4-ad_rvfrc(i,j)
1288 adfac=
dt(ng)*ad_cff6
1289 ad_cff3=ad_cff3+adfac
1290 ad_cff4=ad_cff4+adfac
1295 ad_cff1=ad_cff1+adfac
1296 ad_cff2=ad_cff2-adfac
1300 ad_vfse(i,j,k1)=ad_vfse(i,j,k1)-ad_cff4
1301 ad_vfse(i,j,k2)=ad_vfse(i,j,k2)+ad_cff4
1305 ad_vfsx(i,j,k1)=ad_vfsx(i,j,k1)-ad_cff3
1306 ad_vfsx(i,j,k2)=ad_vfsx(i,j,k2)+ad_cff3
1311 adfac=0.5_r8*(pm(i,j-1)+pm(i,j))*ad_cff2
1312 ad_vfe(i,j-1)=ad_vfe(i,j-1)-adfac
1313 ad_vfe(i,j )=ad_vfe(i,j )+adfac
1318 adfac=0.5_r8*(pn(i,j-1)+pn(i,j))*ad_cff1
1319 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac
1320 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac
1327 cff=
dt(ng)*0.25_r8*(pm(i-1,j)+pm(i,j))*(pn(i-1,j)+pn(i,j))
1328#ifdef DIAGNOSTICS_UV
1339 ad_cff5=ad_cff5-ad_u(i,j,k,nnew)
1340 ad_cff6=ad_cff6-ad_u(i,j,k,nnew)
1344 ad_cff1=ad_cff1-ad_rufrc(i,j)
1345 ad_cff2=ad_cff2-ad_rufrc(i,j)
1346 ad_cff3=ad_cff3-ad_rufrc(i,j)
1347 ad_cff4=ad_cff4-ad_rufrc(i,j)
1350 adfac=
dt(ng)*ad_cff6
1351 ad_cff3=ad_cff3+adfac
1352 ad_cff4=ad_cff4+adfac
1357 ad_cff1=ad_cff1+adfac
1358 ad_cff2=ad_cff2+adfac
1362 ad_ufse(i,j,k1)=ad_ufse(i,j,k1)-ad_cff4
1363 ad_ufse(i,j,k2)=ad_ufse(i,j,k2)+ad_cff4
1367 ad_ufsx(i,j,k1)=ad_ufsx(i,j,k1)-ad_cff3
1368 ad_ufsx(i,j,k2)=ad_ufsx(i,j,k2)+ad_cff3
1373 adfac=0.5_r8*(pm(i-1,j)+pm(i,j))*ad_cff2
1374 ad_ufe(i,j )=ad_ufe(i,j )-adfac
1375 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac
1380 adfac=0.5_r8*(pn(i-1,j)+pn(i,j))*ad_cff1
1381 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac
1382 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
1390 IF (k.lt.n(ng))
THEN
1394# ifdef UV_U3ADV_SPLIT
1396 & (vvis3d_r(i,j-1,k )+vvis3d_r(i,j,k )+ &
1397 & vvis3d_r(i,j-1,k+1)+vvis3d_r(i,j,k+1))
1400 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
1401 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
1406 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
1410 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1411 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
1412 & dudz(i+1,j ,k2)+ &
1413 & dudz(i ,j-1,k2)+ &
1415 dnvdz=cff*dvdz(i,j,k2)
1416 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
1417 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
1418 & dudz(i+1,j ,k2)+ &
1419 & dudz(i ,j-1,k2)+ &
1421 dmvdz=cff*dvdz(i,j,k2)
1423 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
1424 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
1425 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
1426 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
1427 cff5=min(dzde_p(i ,j,k1),0.0_r8)
1428 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
1429 cff7=max(dzde_p(i ,j,k2),0.0_r8)
1430 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
1440 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
1441 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
1442 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
1443 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))* &
1461 adfac=fac2*ad_vfse(i,j,k2)
1463 ad_cff1=ad_cff1+(cff5*dmudz-dmude(i ,j,k1))*adfac
1464 ad_cff2=ad_cff2+(cff6*dmudz-dmude(i+1,j,k2))*adfac
1465 ad_cff3=ad_cff3+(cff7*dmudz-dmude(i ,j,k2))*adfac
1466 ad_cff4=ad_cff4+(cff8*dmudz-dmude(i+1,j,k1))*adfac
1467 ad_cff5=ad_cff5+cff1*adfac1
1468 ad_cff6=ad_cff6+cff2*adfac1
1469 ad_cff7=ad_cff7+cff3*adfac1
1470 ad_cff8=ad_cff8+cff4*adfac1
1471 ad_dmudz=ad_dmudz+ &
1472 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
1474 ad_dmude(i ,j,k1)=ad_dmude(i ,j,k1)-cff1*adfac
1475 ad_dmude(i+1,j,k2)=ad_dmude(i+1,j,k2)-cff2*adfac
1476 ad_dmude(i ,j,k2)=ad_dmude(i ,j,k2)-cff3*adfac
1477 ad_dmude(i+1,j,k1)=ad_dmude(i+1,j,k1)-cff4*adfac
1481 ad_dzde_p(i+1,j,k1)=ad_dzde_p(i+1,j,k1)+ &
1483 & sign(0.5_r8, dzde_p(i+1,j,k1)))* &
1489 ad_dzde_p(i ,j,k2)=ad_dzde_p(i ,j,k2)+ &
1491 & sign(0.5_r8, dzde_p(i ,j,k2)))* &
1497 ad_dzde_p(i+1,j,k2)=ad_dzde_p(i+1,j,k2)+ &
1499 & sign(0.5_r8,-dzde_p(i+1,j,k2)))* &
1505 ad_dzde_p(i ,j,k1)=ad_dzde_p(i ,j,k1)+ &
1507 & sign(0.5_r8,-dzde_p(i ,j,k1)))* &
1513 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
1515 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
1521 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
1523 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
1529 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
1531 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
1537 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
1539 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
1543 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
1544 cff2=min(dzde_r(i,j ,k2),0.0_r8)
1545 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
1546 cff4=max(dzde_r(i,j ,k1),0.0_r8)
1547 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
1548 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
1549 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
1550 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
1560 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
1561 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
1562 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
1563 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))* &
1581 adfac=fac1*ad_vfsx(i,j,k2)
1583 ad_cff1=ad_cff1-(cff5*dnudz-dnudx(i,j-1,k1))*adfac
1584 ad_cff2=ad_cff2-(cff6*dnudz-dnudx(i,j ,k2))*adfac
1585 ad_cff3=ad_cff3-(cff7*dnudz-dnudx(i,j-1,k2))*adfac
1586 ad_cff4=ad_cff4-(cff8*dnudz-dnudx(i,j ,k1))*adfac
1587 ad_cff5=ad_cff5-cff1*adfac1
1588 ad_cff6=ad_cff6-cff2*adfac1
1589 ad_cff7=ad_cff7-cff3*adfac1
1590 ad_cff8=ad_cff8-cff4*adfac1
1591 ad_dnudz=ad_dnudz- &
1592 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
1594 ad_dnudx(i,j-1,k1)=ad_dnudx(i,j-1,k1)+cff1*adfac
1595 ad_dnudx(i,j ,k2)=ad_dnudx(i,j ,k2)+cff2*adfac
1596 ad_dnudx(i,j-1,k2)=ad_dnudx(i,j-1,k2)+cff3*adfac
1597 ad_dnudx(i,j ,k1)=ad_dnudx(i,j ,k1)+cff4*adfac
1601 ad_dzdx_r(i,j ,k1)=ad_dzdx_r(i,j ,k1)+ &
1603 & sign(0.5_r8, dzdx_r(i,j ,k1)))* &
1609 ad_dzdx_r(i,j-1,k2)=ad_dzdx_r(i,j-1,k2)+ &
1611 & sign(0.5_r8, dzdx_r(i,j-1,k2)))* &
1617 ad_dzdx_r(i,j ,k2)=ad_dzdx_r(i,j ,k2)+ &
1619 & sign(0.5_r8,-dzdx_r(i,j ,k2)))* &
1625 ad_dzdx_r(i,j-1,k1)=ad_dzdx_r(i,j-1,k1)+ &
1627 & sign(0.5_r8,-dzdx_r(i,j-1,k1)))* &
1633 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
1635 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
1641 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
1643 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
1649 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
1651 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
1657 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
1659 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
1663 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
1664 cff2=min(dzde_r(i,j ,k2),0.0_r8)
1665 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
1666 cff4=max(dzde_r(i,j ,k1),0.0_r8)
1676 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
1677 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
1678 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
1679 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))* &
1697 adfac=fac2*ad_vfse(i,j,k2)
1698 ad_cff1=ad_cff1+(cff1*cff-dmvde(i,j-1,k1))*adfac
1699 ad_cff2=ad_cff2+(cff2*cff-dmvde(i,j ,k2))*adfac
1700 ad_cff3=ad_cff3+(cff3*cff-dmvde(i,j-1,k2))*adfac
1701 ad_cff4=ad_cff4+(cff4*cff-dmvde(i,j ,k1))*adfac
1702 ad_dmvdz=ad_dmvdz+ &
1703 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1705 ad_dmvde(i,j-1,k1)=ad_dmvde(i,j-1,k1)-cff1*adfac
1706 ad_dmvde(i,j ,k2)=ad_dmvde(i,j ,k2)-cff2*adfac
1707 ad_dmvde(i,j-1,k2)=ad_dmvde(i,j-1,k2)-cff3*adfac
1708 ad_dmvde(i,j ,k1)=ad_dmvde(i,j ,k1)-cff4*adfac
1709 ad_vfse(i,j,k2)=0.0_r8
1713 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
1715 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
1721 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
1723 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
1729 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
1731 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
1737 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
1739 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
1743 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
1744 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
1745 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
1746 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
1756 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
1757 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
1758 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
1759 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))* &
1777 adfac=fac1*ad_vfsx(i,j,k2)
1778 ad_cff1=ad_cff1+(cff1*cff-dnvdx(i ,j,k1))*adfac
1779 ad_cff2=ad_cff2+(cff2*cff-dnvdx(i+1,j,k2))*adfac
1780 ad_cff3=ad_cff3+(cff3*cff-dnvdx(i ,j,k2))*adfac
1781 ad_cff4=ad_cff4+(cff4*cff-dnvdx(i+1,j,k1))*adfac
1782 ad_dnvdz=ad_dnvdz+ &
1783 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
1785 ad_dnvdx(i ,j,k1)=ad_dnvdx(i ,j,k1)-cff1*adfac
1786 ad_dnvdx(i+1,j,k2)=ad_dnvdx(i+1,j,k2)-cff2*adfac
1787 ad_dnvdx(i ,j,k2)=ad_dnvdx(i ,j,k2)-cff3*adfac
1788 ad_dnvdx(i+1,j,k1)=ad_dnvdx(i+1,j,k1)-cff4*adfac
1789 ad_vfsx(i,j,k2)=0.0_r8
1793 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
1795 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
1801 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
1803 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
1809 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
1811 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
1817 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
1819 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
1823 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
1826 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dmvdz
1833 adfac=cff*0.25_r8*ad_dmudz
1834 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
1835 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
1836 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
1837 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
1840 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
1843 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dnvdz
1850 adfac=cff*0.25_r8*ad_dnudz
1851 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
1852 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
1853 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
1854 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
1861 & on_v(i,j)*ad_fac1+om_v(i,j)*ad_fac2
1864# ifdef UV_U3ADV_SPLIT
1869 adfac=0.125_r8*ad_cff
1870 ad_vvis3d_r(i,j-1,k )=ad_vvis3d_r(i,j-1,k )+adfac
1871 ad_vvis3d_r(i,j ,k )=ad_vvis3d_r(i,j ,k )+adfac
1872 ad_vvis3d_r(i,j-1,k+1)=ad_vvis3d_r(i,j-1,k+1)+adfac
1873 ad_vvis3d_r(i,j ,k+1)=ad_vvis3d_r(i,j ,k+1)+adfac
1880 adfac=0.125_r8*ad_cff
1881 ad_visc3d_r(i,j-1,k )=ad_visc3d_r(i,j-1,k )+adfac
1882 ad_visc3d_r(i,j ,k )=ad_visc3d_r(i,j ,k )+adfac
1883 ad_visc3d_r(i,j-1,k+1)=ad_visc3d_r(i,j-1,k+1)+adfac
1884 ad_visc3d_r(i,j ,k+1)=ad_visc3d_r(i,j ,k+1)+adfac
1894# ifdef UV_U3ADV_SPLIT
1896 & (uvis3d_r(i-1,j,k )+uvis3d_r(i,j,k )+ &
1897 & uvis3d_r(i-1,j,k+1)+uvis3d_r(i,j,k+1))
1900 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
1901 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
1906 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
1910 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
1911 dnudz=cff*dudz(i,j,k2)
1912 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
1913 & dvdz(i ,j+1,k2)+ &
1914 & dvdz(i-1,j ,k2)+ &
1916 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
1917 dmudz=cff*dudz(i,j,k2)
1918 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
1919 & dvdz(i ,j+1,k2)+ &
1920 & dvdz(i-1,j ,k2)+ &
1923 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
1924 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
1925 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
1926 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
1927 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
1928 cff6=min(dzde_r(i ,j,k2),0.0_r8)
1929 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
1930 cff8=max(dzde_r(i ,j,k1),0.0_r8)
1940 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
1941 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
1942 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
1943 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))* &
1961 adfac=fac2*ad_ufse(i,j,k2)
1963 ad_cff1=ad_cff1-(cff5*dmvdz-dmvde(i-1,j,k1))*adfac
1964 ad_cff2=ad_cff2-(cff6*dmvdz-dmvde(i ,j,k2))*adfac
1965 ad_cff3=ad_cff3-(cff7*dmvdz-dmvde(i-1,j,k2))*adfac
1966 ad_cff4=ad_cff4-(cff8*dmvdz-dmvde(i ,j,k1))*adfac
1967 ad_cff5=ad_cff5-cff1*adfac1
1968 ad_cff6=ad_cff6-cff2*adfac1
1969 ad_cff7=ad_cff7-cff3*adfac1
1970 ad_cff8=ad_cff8-cff4*adfac1
1971 ad_dmvdz=ad_dmvdz- &
1972 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
1974 ad_dmvde(i-1,j,k1)=ad_dmvde(i-1,j,k1)+cff1*adfac
1975 ad_dmvde(i ,j,k2)=ad_dmvde(i ,j,k2)+cff2*adfac
1976 ad_dmvde(i-1,j,k2)=ad_dmvde(i-1,j,k2)+cff3*adfac
1977 ad_dmvde(i ,j,k1)=ad_dmvde(i ,j,k1)+cff4*adfac
1981 ad_dzde_r(i ,j,k1)=ad_dzde_r(i ,j,k1)+ &
1983 & sign(0.5_r8, dzde_r(i ,j,k1)))* &
1989 ad_dzde_r(i-1,j,k2)=ad_dzde_r(i-1,j,k2)+ &
1991 & sign(0.5_r8, dzde_r(i-1,j,k2)))* &
1997 ad_dzde_r(i ,j,k2)=ad_dzde_r(i ,j,k2)+ &
1999 & sign(0.5_r8,-dzde_r(i ,j,k2)))* &
2005 ad_dzde_r(i-1,j,k1)=ad_dzde_r(i-1,j,k1)+ &
2007 & sign(0.5_r8,-dzde_r(i-1,j,k1)))* &
2013 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
2015 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
2021 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
2023 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
2029 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
2031 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
2037 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
2039 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
2043 cff1=min(dzde_p(i,j ,k1),0.0_r8)
2044 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
2045 cff3=max(dzde_p(i,j ,k2),0.0_r8)
2046 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
2047 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
2048 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
2049 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
2050 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
2060 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
2061 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
2062 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
2063 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))* &
2081 adfac=fac1*ad_ufsx(i,j,k2)
2083 ad_cff1=ad_cff1+(cff5*dnvdz-dnvdx(i,j ,k1))*adfac
2084 ad_cff2=ad_cff2+(cff6*dnvdz-dnvdx(i,j+1,k2))*adfac
2085 ad_cff3=ad_cff3+(cff7*dnvdz-dnvdx(i,j ,k2))*adfac
2086 ad_cff4=ad_cff4+(cff8*dnvdz-dnvdx(i,j+1,k1))*adfac
2087 ad_cff5=ad_cff5+cff1*adfac1
2088 ad_cff6=ad_cff6+cff2*adfac1
2089 ad_cff7=ad_cff7+cff3*adfac1
2090 ad_cff8=ad_cff8+cff4*adfac1
2091 ad_dnvdz=ad_dnvdz+ &
2092 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
2094 ad_dnvdx(i,j ,k1)=ad_dnvdx(i,j ,k1)-cff1*adfac
2095 ad_dnvdx(i,j+1,k2)=ad_dnvdx(i,j+1,k2)-cff2*adfac
2096 ad_dnvdx(i,j ,k2)=ad_dnvdx(i,j ,k2)-cff3*adfac
2097 ad_dnvdx(i,j+1,k1)=ad_dnvdx(i,j+1,k1)-cff4*adfac
2101 ad_dzdx_p(i,j+1,k1)=ad_dzdx_p(i,j+1,k1)+ &
2103 & sign(0.5_r8, dzdx_p(i,j+1,k1)))* &
2109 ad_dzdx_p(i,j ,k2)=ad_dzdx_p(i,j ,k2)+ &
2111 & sign(0.5_r8, dzdx_p(i,j ,k2)))* &
2117 ad_dzdx_p(i,j+1,k2)=ad_dzdx_p(i,j+1,k2)+ &
2119 & sign(0.5_r8,-dzdx_p(i,j+1,k2)))* &
2125 ad_dzdx_p(i,j ,k1)=ad_dzdx_p(i,j ,k1)+ &
2127 & sign(0.5_r8,-dzdx_p(i,j ,k1)))* &
2133 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
2135 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
2141 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
2143 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
2149 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
2151 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
2157 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
2159 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
2163 cff1=min(dzde_p(i,j ,k1),0.0_r8)
2164 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
2165 cff3=max(dzde_p(i,j ,k2),0.0_r8)
2166 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
2176 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
2177 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
2178 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
2179 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))* &
2197 adfac=fac2*ad_ufse(i,j,k2)
2198 ad_cff1=ad_cff1+(cff1*cff-dmude(i,j ,k1))*adfac
2199 ad_cff2=ad_cff2+(cff2*cff-dmude(i,j+1,k2))*adfac
2200 ad_cff3=ad_cff3+(cff3*cff-dmude(i,j ,k2))*adfac
2201 ad_cff4=ad_cff4+(cff4*cff-dmude(i,j+1,k1))*adfac
2202 ad_dmudz=ad_dmudz+ &
2203 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
2205 ad_dmude(i,j ,k1)=ad_dmude(i,j ,k1)-cff1*adfac
2206 ad_dmude(i,j+1,k2)=ad_dmude(i,j+1,k2)-cff2*adfac
2207 ad_dmude(i,j ,k2)=ad_dmude(i,j ,k2)-cff3*adfac
2208 ad_dmude(i,j+1,k1)=ad_dmude(i,j+1,k1)-cff4*adfac
2209 ad_ufse(i,j,k2)=0.0_r8
2213 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
2215 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
2221 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
2223 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
2229 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
2231 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
2237 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
2239 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
2243 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
2244 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
2245 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
2246 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
2256 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
2257 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
2258 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
2259 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))* &
2277 adfac=fac1*ad_ufsx(i,j,k2)
2278 ad_cff1=ad_cff1+(cff1*cff-dnudx(i-1,j,k1))*adfac
2279 ad_cff2=ad_cff2+(cff2*cff-dnudx(i ,j,k2))*adfac
2280 ad_cff3=ad_cff3+(cff3*cff-dnudx(i-1,j,k2))*adfac
2281 ad_cff4=ad_cff4+(cff4*cff-dnudx(i ,j,k1))*adfac
2282 ad_dnudz=ad_dnudz+ &
2283 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
2285 ad_dnudx(i-1,j,k1)=ad_dnudx(i-1,j,k1)-cff1*adfac
2286 ad_dnudx(i ,j,k2)=ad_dnudx(i ,j,k2)-cff2*adfac
2287 ad_dnudx(i-1,j,k2)=ad_dnudx(i-1,j,k2)-cff3*adfac
2288 ad_dnudx(i ,j,k1)=ad_dnudx(i ,j,k1)-cff4*adfac
2289 ad_ufsx(i,j,k2)=0.0_r8
2293 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
2295 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
2301 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
2303 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
2309 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
2311 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
2317 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
2319 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
2323 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
2329 adfac=cff*0.25_r8*ad_dmvdz
2330 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
2331 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
2332 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
2333 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
2337 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dmudz
2340 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
2346 adfac=cff*0.25_r8*ad_dnvdz
2347 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
2348 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
2349 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
2350 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
2354 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dnudz
2361 & on_u(i,j)*ad_fac1+om_u(i,j)*ad_fac2
2364# ifdef UV_U3ADV_SPLIT
2369 adfac=0.125_r8*ad_cff
2370 ad_uvis3d_r(i-1,j,k )=ad_uvis3d_r(i-1,j,k )+adfac
2371 ad_uvis3d_r(i ,j,k )=ad_uvis3d_r(i ,j,k )+adfac
2372 ad_uvis3d_r(i-1,j,k+1)=ad_uvis3d_r(i-1,j,k+1)+adfac
2373 ad_uvis3d_r(i ,j,k+1)=ad_uvis3d_r(i ,j,k+1)+adfac
2380 adfac=0.125_r8*ad_cff
2381 ad_visc3d_r(i-1,j,k )=ad_visc3d_r(i-1,j,k )+adfac
2382 ad_visc3d_r(i ,j,k )=ad_visc3d_r(i ,j,k )+adfac
2383 ad_visc3d_r(i-1,j,k+1)=ad_visc3d_r(i-1,j,k+1)+adfac
2384 ad_visc3d_r(i ,j,k+1)=ad_visc3d_r(i ,j,k+1)+adfac
2397 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
2398 & pm(i ,j-1)+pm(i ,j))
2399 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
2400 & pn(i ,j-1)+pn(i ,j))
2401 cff1=min(dzdx_p(i,j,k1),0.0_r8)
2402 cff2=max(dzdx_p(i,j,k1),0.0_r8)
2403 cff3=min(dzde_p(i,j,k1),0.0_r8)
2404 cff4=max(dzde_p(i,j,k1),0.0_r8)
2407 & (hz(i-1,j ,k)+hz(i,j ,k)+ &
2408 & hz(i-1,j-1,k)+hz(i,j-1,k))* &
2409 & (on_p(i,j)*(dnvdx(i,j,k1)- &
2411 & (cff1*(dvdz(i-1,j,k1)+ &
2413 & cff2*(dvdz(i-1,j,k2)+ &
2414 & dvdz(i ,j,k1))))+ &
2415 & om_p(i,j)*(dmude(i,j,k1)- &
2417 & (cff3*(dudz(i,j-1,k1)+ &
2419 & cff4*(dudz(i,j-1,k2)+ &
2424# ifdef UV_U3ADV_SPLIT
2426 & (uvis3d_r(i-1,j-1,k)+uvis3d_r(i-1,j,k)+ &
2427 & uvis3d_r(i ,j-1,k)+uvis3d_r(i ,j,k))
2429 & (vvis3d_r(i-1,j-1,k)+vvis3d_r(i-1,j,k)+ &
2430 & vvis3d_r(i ,j-1,k)+vvis3d_r(i ,j,k))
2434 adfac=on_p(i,j)*on_p(i,j)*ad_vfx(i,j)
2435 ad_cff=ad_cff+vvis_p*adfac
2436 ad_vvis_p=ad_vvis_p+cff*adfac
2441 adfac=om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2442 ad_cff=ad_cff+uvis_p*adfac
2443 ad_uvis_p=ad_uvis_p+cff*adfac
2449 adfac=0.25_r8*ad_vvis_p
2450 ad_vvis3d_r(i-1,j-1,k)=ad_vvis3d_r(i-1,j-1,k)+adfac
2451 ad_vvis3d_r(i-1,j ,k)=ad_vvis3d_r(i-1,j ,k)+adfac
2452 ad_vvis3d_r(i ,j-1,k)=ad_vvis3d_r(i ,j-1,k)+adfac
2453 ad_vvis3d_r(i ,j ,k)=ad_vvis3d_r(i ,j ,k)+adfac
2459 adfac=0.25_r8*ad_uvis_p
2460 ad_uvis3d_r(i-1,j-1,k)=ad_uvis3d_r(i-1,j-1,k)+adfac
2461 ad_uvis3d_r(i-1,j ,k)=ad_uvis3d_r(i-1,j ,k)+adfac
2462 ad_uvis3d_r(i ,j-1,k)=ad_uvis3d_r(i ,j-1,k)+adfac
2463 ad_uvis3d_r(i ,j ,k)=ad_uvis3d_r(i ,j ,k)+adfac
2467 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
2468 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
2472 adfac=on_p(i,j)*on_p(i,j)*ad_vfx(i,j)
2473 ad_cff=ad_cff+visc_p*adfac
2474 ad_visc_p=ad_visc_p+cff*adfac
2479 adfac=om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
2480 ad_cff=ad_cff+visc_p*adfac
2481 ad_visc_p=ad_visc_p+cff*adfac
2487 adfac=0.25_r8*ad_visc_p
2488 ad_visc3d_r(i-1,j-1,k)=ad_visc3d_r(i-1,j-1,k)+adfac
2489 ad_visc3d_r(i-1,j ,k)=ad_visc3d_r(i-1,j ,k)+adfac
2490 ad_visc3d_r(i ,j-1,k)=ad_visc3d_r(i ,j-1,k)+adfac
2491 ad_visc3d_r(i ,j ,k)=ad_visc3d_r(i ,j ,k)+adfac
2499 & on_p(i,j)*on_p(i,j)*visc4_p(i,j)*ad_vfx(i,j)+ &
2500 & om_p(i,j)*om_p(i,j)*visc4_p(i,j)*ad_ufe(i,j)
2507 ad_cff=ad_cff*pmask(i,j)
2547 adfac=0.25_r8*ad_cff
2548 adfac1=adfac*(on_p(i,j)*(dnvdx(i,j,k1)- &
2550 & (cff1*(dvdz(i-1,j,k1)+ &
2552 & cff2*(dvdz(i-1,j,k2)+ &
2553 & dvdz(i ,j,k1))))+ &
2554 & om_p(i,j)*(dmude(i,j,k1)- &
2556 & (cff3*(dudz(i,j-1,k1)+ &
2558 & cff4*(dudz(i,j-1,k2)+ &
2560 adfac2=adfac*(hz(i-1,j ,k)+hz(i,j ,k)+ &
2561 & hz(i-1,j-1,k)+hz(i,j-1,k))
2562 adfac3=adfac2*on_p(i,j)
2563 adfac4=adfac3*0.5_r8*pn_p
2564 adfac5=adfac2*om_p(i,j)
2565 adfac6=adfac5*0.5_r8*pm_p
2566 ad_hz(i-1,j-1,k)=ad_hz(i-1,j-1,k)+adfac1
2567 ad_hz(i ,j-1,k)=ad_hz(i ,j-1,k)+adfac1
2568 ad_hz(i-1,j ,k)=ad_hz(i-1,j ,k)+adfac1
2569 ad_hz(i ,j ,k)=ad_hz(i ,j ,k)+adfac1
2570 ad_dnvdx(i,j,k1)=ad_dnvdx(i,j,k1)+adfac3
2572 & (dvdz(i-1,j,k1)+dvdz(i ,j,k2))*adfac4
2574 & (dvdz(i-1,j,k2)+dvdz(i ,j,k1))*adfac4
2575 ad_dvdz(i-1,j,k1)=ad_dvdz(i-1,j,k1)-cff1*adfac4
2576 ad_dvdz(i-1,j,k2)=ad_dvdz(i-1,j,k2)-cff2*adfac4
2577 ad_dvdz(i ,j,k1)=ad_dvdz(i ,j,k1)-cff2*adfac4
2578 ad_dvdz(i ,j,k2)=ad_dvdz(i ,j,k2)-cff1*adfac4
2579 ad_dmude(i,j,k1)=ad_dmude(i,j,k1)+adfac5
2581 & (dudz(i,j-1,k1)+dudz(i,j ,k2))*adfac6
2583 & (dudz(i,j-1,k2)+dudz(i,j ,k1))*adfac6
2584 ad_dudz(i,j-1,k1)=ad_dudz(i,j-1,k1)-cff3*adfac6
2585 ad_dudz(i,j-1,k2)=ad_dudz(i,j-1,k2)-cff4*adfac6
2586 ad_dudz(i,j ,k1)=ad_dudz(i,j ,k1)-cff4*adfac6
2587 ad_dudz(i,j ,k2)=ad_dudz(i,j ,k2)-cff3*adfac6
2594 ad_dzde_p(i,j,k1)=ad_dzde_p(i,j,k1)+ &
2596 & sign(0.5_r8, dzde_p(i,j,k1)))* &
2599 & sign(0.5_r8,-dzde_p(i,j,k1)))* &
2608 ad_dzdx_p(i,j,k1)=ad_dzdx_p(i,j,k1)+ &
2610 & sign(0.5_r8, dzdx_p(i,j,k1)))* &
2613 & sign(0.5_r8,-dzdx_p(i,j,k1)))* &
2622 cff1=min(dzdx_r(i,j,k1),0.0_r8)
2623 cff2=max(dzdx_r(i,j,k1),0.0_r8)
2624 cff3=min(dzde_r(i,j,k1),0.0_r8)
2625 cff4=max(dzde_r(i,j,k1),0.0_r8)
2628 & (on_r(i,j)*(dnudx(i,j,k1)- &
2630 & (cff1*(dudz(i ,j,k1)+ &
2631 & dudz(i+1,j,k2))+ &
2632 & cff2*(dudz(i ,j,k2)+ &
2633 & dudz(i+1,j,k1))))- &
2634 & om_r(i,j)*(dmvde(i,j,k1)- &
2636 & (cff3*(dvdz(i,j ,k1)+ &
2637 & dvdz(i,j+1,k2))+ &
2638 & cff4*(dvdz(i,j ,k2)+ &
2639 & dvdz(i,j+1,k1)))))
2643# ifdef UV_U3ADV_SPLIT
2648 adfac=om_r(i,j)*om_r(i,j)*ad_vfe(i,j)
2649 ad_cff=ad_cff+vvis3d_r(i,j,k)*adfac
2650 ad_vvis3d_r(i,j,k)=ad_vvis3d_r(i,j,k)+cff*adfac
2656 adfac=on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2657 ad_cff=ad_cff+uvis3d_r(i,j,k)*adfac
2658 ad_uvis3d_r(i,j,k)=ad_uvis3d_r(i,j,k)+cff*adfac
2665 adfac=om_r(i,j)*om_r(i,j)*ad_vfe(i,j)
2666 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
2667 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
2673 adfac=on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
2674 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
2675 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
2683 & om_r(i,j)*om_r(i,j)*visc4_r(i,j)*ad_vfe(i,j)+ &
2684 & on_r(i,j)*on_r(i,j)*visc4_r(i,j)*ad_ufx(i,j)
2691 ad_cff=ad_cff*rmask(i,j)
2728 adfac1=hz(i,j,k)*ad_cff
2729 adfac2=adfac1*on_r(i,j)
2730 adfac3=adfac2*0.5_r8*pn(i,j)
2731 adfac4=adfac1*om_r(i,j)
2732 adfac5=adfac4*0.5_r8*pm(i,j)
2733 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
2734 & (on_r(i,j)*(dnudx(i,j,k1)- &
2736 & (cff1*(dudz(i ,j,k1)+ &
2737 & dudz(i+1,j,k2))+ &
2738 & cff2*(dudz(i ,j,k2)+ &
2739 & dudz(i+1,j,k1))))- &
2740 & om_r(i,j)*(dmvde(i,j,k1)- &
2742 & (cff3*(dvdz(i,j ,k1)+ &
2743 & dvdz(i,j+1,k2))+ &
2744 & cff4*(dvdz(i,j ,k2)+ &
2745 & dvdz(i,j+1,k1)))))* &
2747 ad_dnudx(i,j,k1)=ad_dnudx(i,j,k1)+adfac2
2749 & (dudz(i ,j,k1)+dudz(i+1,j,k2))*adfac3
2751 (dudz(i ,j,k2)+dudz(i+1,j,k1))*adfac3
2752 ad_dudz(i ,j,k1)=ad_dudz(i ,j,k1)-cff1*adfac3
2753 ad_dudz(i ,j,k2)=ad_dudz(i ,j,k2)-cff2*adfac3
2754 ad_dudz(i+1,j,k1)=ad_dudz(i+1,j,k1)-cff2*adfac3
2755 ad_dudz(i+1,j,k2)=ad_dudz(i+1,j,k2)-cff1*adfac3
2756 ad_dmvde(i,j,k1)=ad_dmvde(i,j,k1)-adfac4
2758 & (dvdz(i,j ,k1)+dvdz(i,j+1,k2))*adfac5
2760 & (dvdz(i,j ,k2)+dvdz(i,j+1,k1))*adfac5
2761 ad_dvdz(i,j ,k1)=ad_dvdz(i,j ,k1)+cff3*adfac5
2762 ad_dvdz(i,j ,k2)=ad_dvdz(i,j ,k2)+cff4*adfac5
2763 ad_dvdz(i,j+1,k1)=ad_dvdz(i,j+1,k1)+cff4*adfac5
2764 ad_dvdz(i,j+1,k2)=ad_dvdz(i,j+1,k2)+cff3*adfac5
2771 ad_dzde_r(i,j,k1)=ad_dzde_r(i,j,k1)+ &
2773 & sign(0.5_r8, dzde_r(i,j,k1)))* &
2776 & sign(0.5_r8,-dzde_r(i,j,k1)))* &
2785 ad_dzdx_r(i,j,k1)=ad_dzdx_r(i,j,k1)+ &
2787 & sign(0.5_r8, dzdx_r(i,j,k1)))* &
2790 & sign(0.5_r8,-dzdx_r(i,j,k1)))* &
2801 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
2806 ad_vfse(i,j,k2)=0.0_r8
2809 ad_vfsx(i,j,k2)=0.0_r8
2816 ad_ufse(i,j,k2)=0.0_r8
2819 ad_ufsx(i,j,k2)=0.0_r8
2827 ad_dvdz(i,j,k2)=0.0_r8
2834 ad_dudz(i,j,k2)=0.0_r8
2840 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)- &
2849 adfac=cff*ad_dvdz(i,j,k2)
2850 ad_lapv(i,j,k )=ad_lapv(i,j,k )-adfac
2851 ad_lapv(i,j,k+1)=ad_lapv(i,j,k+1)+adfac
2852 ad_cff=ad_cff+(lapv(i,j,k+1)- &
2853 & lapv(i,j,k ))*ad_dvdz(i,j,k2)
2854 ad_dvdz(i,j,k2)=0.0_r8
2859 adfac=-cff*cff*0.5_r8*ad_cff
2860 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac
2861 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-adfac
2862 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+adfac
2863 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
2870 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)- &
2879 adfac=cff*ad_dudz(i,j,k2)
2880 ad_lapu(i,j,k )=ad_lapu(i,j,k )-adfac
2881 ad_lapu(i,j,k+1)=ad_lapu(i,j,k+1)+adfac
2882 ad_cff=ad_cff+(lapu(i,j,k+1)- &
2883 & lapu(i,j,k ))*ad_dudz(i,j,k2)
2884 ad_dudz(i,j,k2)=0.0_r8
2890 adfac=-cff*cff*0.5_r8*ad_cff
2891 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac
2892 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-adfac
2893 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+adfac
2894 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
2899 IF (k.lt.n(ng))
THEN
2911 adfac=cff*ad_dmvde(i,j,k2)
2912 ad_lapv(i,j ,k+1)=ad_lapv(i,j ,k+1)- &
2913 & (pm(i,j-1)+pm(i,j ))*adfac
2914 ad_lapv(i,j+1,k+1)=ad_lapv(i,j+1,k+1)+ &
2915 & (pm(i,j )+pm(i,j+1))*adfac
2916 ad_dmvde(i,j,k2)=0.0_r8
2922 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
2923 & pm(i-1,j-1)+pm(i,j-1))
2932 adfac=cff*ad_dnvdx(i,j,k2)
2933 ad_lapv(i-1,j,k+1)=ad_lapv(i-1,j,k+1)- &
2934 & (pn(i-1,j-1)+pn(i-1,j))*adfac
2935 ad_lapv(i ,j,k+1)=ad_lapv(i ,j,k+1)+ &
2936 & (pn(i ,j-1)+pn(i ,j))*adfac
2937 ad_dnvdx(i,j,k2)=0.0_r8
2943 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
2944 & pn(i-1,j-1)+pn(i,j-1))
2953 adfac=cff*ad_dmude(i,j,k2)
2954 ad_lapu(i,j-1,k+1)=ad_lapu(i,j-1,k+1)- &
2955 & (pm(i-1,j-1)+pm(i,j-1))*adfac
2956 ad_lapu(i,j ,k+1)=ad_lapu(i,j ,k+1)+ &
2957 & (pm(i-1,j )+pm(i,j ))*adfac
2958 ad_dmude(i,j,k2)=0.0_r8
2973 adfac=cff*ad_dnudx(i,j,k2)
2974 ad_lapu(i ,j,k+1)=ad_lapu(i ,j,k+1)- &
2975 & (pn(i-1,j)+pn(i ,j))*adfac
2976 ad_lapu(i+1,j,k+1)=ad_lapu(i+1,j,k+1)+ &
2977 & (pn(i ,j)+pn(i+1,j))*adfac
2978 ad_dnudx(i,j,k2)=0.0_r8
2989 adfac=0.5_r8*ad_dzde_r(i,j,k2)
2990 ad_vfe(i,j )=ad_vfe(i,j )+adfac
2991 ad_vfe(i,j+1)=ad_vfe(i,j+1)+adfac
2992 ad_dzde_r(i,j,k2)=0.0_r8
2996 adfac=0.5_r8*ad_dzdx_r(i,j,k2)
2997 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
2998 ad_ufx(i+1,j)=ad_ufx(i+1,j)+adfac
2999 ad_dzdx_r(i,j,k2)=0.0_r8
3007 adfac=0.5_r8*ad_dzde_p(i,j,k2)
3008 ad_vfe(i-1,j)=ad_vfe(i-1,j)+adfac
3009 ad_vfe(i ,j)=ad_vfe(i ,j)+adfac
3010 ad_dzde_p(i,j,k2)=0.0_r8
3014 adfac=0.5_r8*ad_dzdx_p(i,j,k2)
3015 ad_ufx(i,j-1)=ad_ufx(i,j-1)+adfac
3016 ad_ufx(i,j )=ad_ufx(i,j )+adfac
3017 ad_dzdx_p(i,j,k2)=0.0_r8
3023 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
3030 adfac=cff*ad_vfe(i,j)
3031 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac
3032 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
3038 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
3045 adfac=cff*ad_ufx(i,j)
3046 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac
3047 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
3065 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
3071 adfac=0.5_r8*ad_lapv(iend+1,jend+1,k)
3072 ad_lapv(iend+1,jend ,k)=ad_lapv(iend+1,jend ,k)+adfac
3073 ad_lapv(iend ,jend+1,k)=ad_lapv(iend ,jend+1,k)+adfac
3074 ad_lapv(iend+1,jend+1,k)=0.0_r8
3079 adfac=0.5_r8*ad_lapu(iend+1,jend+1,k)
3080 ad_lapu(iend+1,jend ,k)=ad_lapu(iend+1,jend ,k)+adfac
3081 ad_lapu(iend ,jend+1,k)=ad_lapu(iend ,jend+1,k)+adfac
3082 ad_lapu(iend+1,jend+1,k)=0.0_r8
3089 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
3095 adfac=0.5_r8*ad_lapv(istr-1,jend+1,k)
3096 ad_lapv(istr-1,jend ,k)=ad_lapv(istr-1,jend ,k)+adfac
3097 ad_lapv(istr ,jend+1,k)=ad_lapv(istr ,jend+1,k)+adfac
3098 ad_lapv(istr-1,jend+1,k)=0.0_r8
3103 adfac=0.5_r8*ad_lapu(istr,jend+1,k)
3104 ad_lapu(istr ,jend ,k)=ad_lapu(istr ,jend ,k)+adfac
3105 ad_lapu(istr+1,jend+1,k)=ad_lapu(istr+1,jend+1,k)+adfac
3106 ad_lapu(istr ,jend+1,k)=0.0_r8
3113 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
3119 adfac=0.5_r8*ad_lapv(iend+1,jstr,k)
3120 ad_lapv(iend ,jstr ,k)=ad_lapv(iend ,jstr ,k)+adfac
3121 ad_lapv(iend+1,jstr+1,k)=ad_lapv(iend+1,jstr+1,k)+adfac
3122 ad_lapv(iend+1,jstr ,k)=0.0_r8
3127 adfac=0.5_r8*ad_lapu(iend+1,jstr-1,k)
3128 ad_lapu(iend ,jstr-1,k)=ad_lapu(iend ,jstr-1,k)+adfac
3129 ad_lapu(iend+1,jstr ,k)=ad_lapu(iend+1,jstr ,k)+adfac
3130 ad_lapu(iend+1,jstr-1,k)=0.0_r8
3137 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
3143 adfac=0.5_r8*ad_lapv(istr-1,jstr,k)
3144 ad_lapv(istr ,jstr ,k)=ad_lapv(istr ,jstr ,k)+adfac
3145 ad_lapv(istr-1,jstr+1,k)=ad_lapv(istr-1,jstr+1,k)+adfac
3146 ad_lapv(istr-1,jstr ,k)=0.0_r8
3151 adfac=0.5_r8*ad_lapu(istr,jstr-1,k)
3152 ad_lapu(istr+1,jstr-1,k)=ad_lapu(istr+1,jstr-1,k)+adfac
3153 ad_lapu(istr ,jstr ,k)=ad_lapu(istr ,jstr ,k)+adfac
3154 ad_lapu(istr ,jstr-1,k)=0.0_r8
3160 IF (
domain(ng)%Northern_Edge(tile))
THEN
3166 ad_lapv(i,jend+1,k)=0.0_r8
3174 ad_lapv(i,jend,k)=ad_lapv(i,jend,k)+ &
3175 & ad_lapv(i,jend+1,k)
3176 ad_lapv(i,jend+1,k)=0.0_r8
3185 ad_lapu(i,jend,k)=ad_lapu(i,jend,k)+ &
3186 &
gamma2(ng)*ad_lapu(i,jend+1,k)
3187 ad_lapu(i,jend+1,k)=0.0_r8
3195 ad_lapu(i,jend+1,k)=0.0_r8
3203 IF (
domain(ng)%Southern_Edge(tile))
THEN
3209 ad_lapv(i,jstrv-1,k)=0.0_r8
3217 ad_lapv(i,jstrv,k)=ad_lapv(i,jstrv,k)+ &
3218 & ad_lapv(i,jstrv-1,k)
3219 ad_lapv(i,jstrv-1,k)=0.0_r8
3228 ad_lapu(i,jstr,k)=ad_lapu(i,jstr,k)+ &
3229 &
gamma2(ng)*ad_lapu(i,jstr-1,k)
3230 ad_lapu(i,jstr-1,k)=0.0_r8
3238 ad_lapu(i,jstr-1,k)=0.0_r8
3246 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3252 ad_lapv(iend,j,k)=ad_lapv(iend,j,k)+ &
3253 &
gamma2(ng)*ad_lapv(iend+1,j,k)
3254 ad_lapv(iend+1,j,k)=0.0_r8
3262 ad_lapv(iend+1,j,k)=0.0_r8
3271 ad_lapu(iend+1,j,k)=0.0_r8
3279 ad_lapu(iend,j,k)=ad_lapu(iend,j,k)+ &
3280 & ad_lapu(iend+1,j,k)
3281 ad_lapu(iend+1,j,k)=0.0_r8
3289 IF (
domain(ng)%Western_Edge(tile))
THEN
3295 ad_lapv(istr,j,k)=ad_lapv(istr,j,k)+ &
3296 &
gamma2(ng)*ad_lapv(istr-1,j,k)
3297 ad_lapv(istr-1,j,k)=0.0_r8
3305 ad_lapv(istr-1,j,k)=0.0_r8
3314 ad_lapu(istru-1,j,k)=0.0_r8
3322 ad_lapu(istru,j,k)=ad_lapu(istru,j,k)+ &
3323 & ad_lapu(istru-1,j,k)
3324 ad_lapu(istru-1,j,k)=0.0_r8
3356 k_loop3:
DO k=n(ng),0,-1
3361 IF (kk.lt.n(ng))
THEN
3367 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
3371 ufx(i,j)=cff*(z_r(i ,j,kk+1)- &
3377 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
3381 vfe(i,j)=cff*(z_r(i,j ,kk+1)- &
3388 dzdx_p(i,j,k2b)=0.5_r8*(ufx(i,j-1)+ &
3390 dzde_p(i,j,k2b)=0.5_r8*(vfe(i-1,j)+ &
3396 dzdx_r(i,j,k2b)=0.5_r8*(ufx(i ,j)+ &
3398 dzde_r(i,j,k2b)=0.5_r8*(vfe(i,j )+ &
3411 dnudx(i,j,k2b)=cff*((pn(i ,j)+pn(i+1,j))* &
3412 & u(i+1,j,kk+1,nrhs)- &
3413 & (pn(i-1,j)+pn(i ,j))* &
3414 & u(i ,j,kk+1,nrhs))
3420 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
3421 & pn(i-1,j-1)+pn(i,j-1))
3425 dmude(i,j,k2b)=cff*((pm(i-1,j )+pm(i,j ))* &
3426 & u(i,j ,kk+1,nrhs)- &
3427 & (pm(i-1,j-1)+pm(i,j-1))* &
3428 & u(i,j-1,kk+1,nrhs))
3434 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
3435 & pm(i-1,j-1)+pm(i,j-1))
3439 dnvdx(i,j,k2b)=cff*((pn(i ,j-1)+pn(i ,j))* &
3440 & v(i ,j,kk+1,nrhs)- &
3441 & (pn(i-1,j-1)+pn(i-1,j))* &
3442 & v(i-1,j,kk+1,nrhs))
3452 dmvde(i,j,k2b)=cff*((pm(i,j )+pm(i,j+1))* &
3453 & v(i,j+1,kk+1,nrhs)- &
3454 & (pm(i,j-1)+pm(i,j ))* &
3455 & v(i,j ,kk+1,nrhs))
3460 IF ((kk.eq.0).or.(kk.eq.n(ng)))
THEN
3463 dudz(i,j,k2b)=0.0_r8
3468 dvdz(i,j,k2b)=0.0_r8
3474 ufsx(i,j,k2b)=0.0_r8
3475 ufse(i,j,k2b)=0.0_r8
3480 vfsx(i,j,k2b)=0.0_r8
3481 vfse(i,j,k2b)=0.0_r8
3487 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,kk+1)- &
3491 dudz(i,j,k2b)=cff*(u(i,j,kk+1,nrhs)- &
3498 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,kk+1)- &
3502 dvdz(i,j,k2b)=cff*(v(i,j,kk+1,nrhs)- &
3515 cff1=min(dzdx_r(i,j,k1b),0.0_r8)
3516 cff2=max(dzdx_r(i,j,k1b),0.0_r8)
3517 cff3=min(dzde_r(i,j,k1b),0.0_r8)
3518 cff4=max(dzde_r(i,j,k1b),0.0_r8)
3519 cff=on_r(i,j)*(dnudx(i,j,k1b)- &
3521 & (cff1*(dudz(i ,j,k1b)+ &
3522 & dudz(i+1,j,k2b))+ &
3523 & cff2*(dudz(i ,j,k2b)+ &
3524 & dudz(i+1,j,k1b))))- &
3525 & om_r(i,j)*(dmvde(i,j,k1b)- &
3527 & (cff3*(dvdz(i,j ,k1b)+ &
3528 & dvdz(i,j+1,k2b))+ &
3529 & cff4*(dvdz(i,j ,k2b)+ &
3530 & dvdz(i,j+1,k1b))))
3535# ifdef UV_U3ADV_SPLIT
3536 ufx(i,j)=on_r(i,j)*on_r(i,j)*uvis3d_r(i,j,kk)*cff
3537 vfe(i,j)=om_r(i,j)*om_r(i,j)*vvis3d_r(i,j,kk)*cff
3539 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc3d_r(i,j,kk)*cff
3540 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc3d_r(i,j,kk)*cff
3543 ufx(i,j)=on_r(i,j)*on_r(i,j)*visc4_r(i,j)*cff
3544 vfe(i,j)=om_r(i,j)*om_r(i,j)*visc4_r(i,j)*cff
3551 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
3552 & pm(i ,j-1)+pm(i ,j))
3553 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
3554 & pn(i ,j-1)+pn(i ,j))
3555 cff1=min(dzdx_p(i,j,k1b),0.0_r8)
3556 cff2=max(dzdx_p(i,j,k1b),0.0_r8)
3557 cff3=min(dzde_p(i,j,k1b),0.0_r8)
3558 cff4=max(dzde_p(i,j,k1b),0.0_r8)
3559 cff=on_p(i,j)*(dnvdx(i,j,k1b)- &
3561 & (cff1*(dvdz(i-1,j,k1b)+ &
3562 & dvdz(i ,j,k2b))+ &
3563 & cff2*(dvdz(i-1,j,k2b)+ &
3564 & dvdz(i ,j,k1b))))+ &
3565 & om_p(i,j)*(dmude(i,j,k1b)- &
3567 & (cff3*(dudz(i,j-1,k1b)+ &
3568 & dudz(i,j ,k2b))+ &
3569 & cff4*(dudz(i,j-1,k2b)+ &
3575# ifdef UV_U3ADV_SPLIT
3577 & (uvis3d_r(i-1,j-1,kk)+uvis3d_r(i-1,j,kk)+ &
3578 & uvis3d_r(i ,j-1,kk)+uvis3d_r(i ,j,kk))
3580 & (vvis3d_r(i-1,j-1,kk)+vvis3d_r(i-1,j,kk)+ &
3581 & vvis3d_r(i ,j-1,kk)+vvis3d_r(i ,j,kk))
3582 ufe(i,j)=om_p(i,j)*om_p(i,j)*uvis_p*cff
3583 vfx(i,j)=on_p(i,j)*on_p(i,j)*vvis_p*cff
3586 & (visc3d_r(i-1,j-1,kk)+visc3d_r(i-1,j,kk)+ &
3587 & visc3d_r(i ,j-1,kk)+visc3d_r(i ,j,kk))
3588 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc_p*cff
3589 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc_p*cff
3592 ufe(i,j)=om_p(i,j)*om_p(i,j)*visc4_p(i,j)*cff
3593 vfx(i,j)=on_p(i,j)*on_p(i,j)*visc4_p(i,j)*cff
3601 IF (kk.lt.n(ng))
THEN
3605# ifdef UV_U3ADV_SPLIT
3607 & (uvis3d_r(i-1,j,kk )+uvis3d_r(i,j,kk )+ &
3608 & uvis3d_r(i-1,j,kk+1)+uvis3d_r(i,j,kk+1))
3611 & (visc3d_r(i-1,j,kk )+visc3d_r(i,j,kk )+ &
3612 & visc3d_r(i-1,j,kk+1)+visc3d_r(i,j,kk+1))
3617 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
3621 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
3622 dnudz=cff*dudz(i,j,k2b)
3623 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2b)+ &
3624 & dvdz(i ,j+1,k2b)+ &
3625 & dvdz(i-1,j ,k2b)+ &
3627 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
3628 dmudz=cff*dudz(i,j,k2b)
3629 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2b)+ &
3630 & dvdz(i ,j+1,k2b)+ &
3631 & dvdz(i-1,j ,k2b)+ &
3634 cff1=min(dzdx_r(i-1,j,k1b),0.0_r8)
3635 cff2=min(dzdx_r(i ,j,k2b),0.0_r8)
3636 cff3=max(dzdx_r(i-1,j,k2b),0.0_r8)
3637 cff4=max(dzdx_r(i ,j,k1b),0.0_r8)
3638 ufsx(i,j,k2b)=fac1* &
3639 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1b))+ &
3640 & cff2*(cff2*dnudz-dnudx(i ,j,k2b))+ &
3641 & cff3*(cff3*dnudz-dnudx(i-1,j,k2b))+ &
3642 & cff4*(cff4*dnudz-dnudx(i ,j,k1b)))
3644 cff1=min(dzde_p(i,j ,k1b),0.0_r8)
3645 cff2=min(dzde_p(i,j+1,k2b),0.0_r8)
3646 cff3=max(dzde_p(i,j ,k2b),0.0_r8)
3647 cff4=max(dzde_p(i,j+1,k1b),0.0_r8)
3648 ufse(i,j,k2b)=fac2* &
3649 & (cff1*(cff1*dmudz-dmude(i,j ,k1b))+ &
3650 & cff2*(cff2*dmudz-dmude(i,j+1,k2b))+ &
3651 & cff3*(cff3*dmudz-dmude(i,j ,k2b))+ &
3652 & cff4*(cff4*dmudz-dmude(i,j+1,k1b)))
3654 cff1=min(dzde_p(i,j ,k1b),0.0_r8)
3655 cff2=min(dzde_p(i,j+1,k2b),0.0_r8)
3656 cff3=max(dzde_p(i,j ,k2b),0.0_r8)
3657 cff4=max(dzde_p(i,j+1,k1b),0.0_r8)
3658 cff5=min(dzdx_p(i,j ,k1b),0.0_r8)
3659 cff6=min(dzdx_p(i,j+1,k2b),0.0_r8)
3660 cff7=max(dzdx_p(i,j ,k2b),0.0_r8)
3661 cff8=max(dzdx_p(i,j+1,k1b),0.0_r8)
3662 ufsx(i,j,k2b)=ufsx(i,j,k2b)+ &
3664 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1b))+ &
3665 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2b))+ &
3666 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2b))+ &
3667 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1b)))
3669 cff1=min(dzdx_r(i-1,j,k1b),0.0_r8)
3670 cff2=min(dzdx_r(i ,j,k2b),0.0_r8)
3671 cff3=max(dzdx_r(i-1,j,k2b),0.0_r8)
3672 cff4=max(dzdx_r(i ,j,k1b),0.0_r8)
3673 cff5=min(dzde_r(i-1,j,k1b),0.0_r8)
3674 cff6=min(dzde_r(i ,j,k2b),0.0_r8)
3675 cff7=max(dzde_r(i-1,j,k2b),0.0_r8)
3676 cff8=max(dzde_r(i ,j,k1b),0.0_r8)
3677 ufse(i,j,k2b)=ufse(i,j,k2b)- &
3679 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1b))+ &
3680 & cff2*(cff6*dmvdz-dmvde(i ,j,k2b))+ &
3681 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2b))+ &
3682 & cff4*(cff8*dmvdz-dmvde(i ,j,k1b)))
3689# ifdef UV_U3ADV_SPLIT
3691 & (vvis3d_r(i,j-1,kk )+vvis3d_r(i,j,kk )+ &
3692 & vvis3d_r(i,j-1,kk+1)+vvis3d_r(i,j,kk+1))
3695 & (visc3d_r(i,j-1,kk )+visc3d_r(i,j,kk )+ &
3696 & visc3d_r(i,j-1,kk+1)+visc3d_r(i,j,kk+1))
3701 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
3705 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
3706 dnudz=cff*0.25_r8*(dudz(i ,j ,k2b)+ &
3707 & dudz(i+1,j ,k2b)+ &
3708 & dudz(i ,j-1,k2b)+ &
3709 & dudz(i+1,j-1,k2b))
3710 dnvdz=cff*dvdz(i,j,k2b)
3711 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
3712 dmudz=cff*0.25_r8*(dudz(i ,j ,k2b)+ &
3713 & dudz(i+1,j ,k2b)+ &
3714 & dudz(i ,j-1,k2b)+ &
3715 & dudz(i+1,j-1,k2b))
3716 dmvdz=cff*dvdz(i,j,k2b)
3718 cff1=min(dzdx_p(i ,j,k1b),0.0_r8)
3719 cff2=min(dzdx_p(i+1,j,k2b),0.0_r8)
3720 cff3=max(dzdx_p(i ,j,k2b),0.0_r8)
3721 cff4=max(dzdx_p(i+1,j,k1b),0.0_r8)
3722 vfsx(i,j,k2b)=fac1* &
3723 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1b))+ &
3724 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2b))+ &
3725 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2b))+ &
3726 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1b)))
3728 cff1=min(dzde_r(i,j-1,k1b),0.0_r8)
3729 cff2=min(dzde_r(i,j ,k2b),0.0_r8)
3730 cff3=max(dzde_r(i,j-1,k2b),0.0_r8)
3731 cff4=max(dzde_r(i,j ,k1b),0.0_r8)
3732 vfse(i,j,k2b)=fac2* &
3733 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1b))+ &
3734 & cff2*(cff2*dmvdz-dmvde(i,j ,k2b))+ &
3735 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2b))+ &
3736 & cff4*(cff4*dmvdz-dmvde(i,j ,k1b)))
3738 cff1=min(dzde_r(i,j-1,k1b),0.0_r8)
3739 cff2=min(dzde_r(i,j ,k2b),0.0_r8)
3740 cff3=max(dzde_r(i,j-1,k2b),0.0_r8)
3741 cff4=max(dzde_r(i,j ,k1b),0.0_r8)
3742 cff5=min(dzdx_r(i,j-1,k1b),0.0_r8)
3743 cff6=min(dzdx_r(i,j ,k2b),0.0_r8)
3744 cff7=max(dzdx_r(i,j-1,k2b),0.0_r8)
3745 cff8=max(dzdx_r(i,j ,k1b),0.0_r8)
3746 vfsx(i,j,k2b)=vfsx(i,j,k2b)- &
3748 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1b))+ &
3749 & cff2*(cff6*dnudz-dnudx(i,j ,k2b))+ &
3750 & cff3*(cff7*dnudz-dnudx(i,j-1,k2b))+ &
3751 & cff4*(cff8*dnudz-dnudx(i,j ,k1b)))
3753 cff1=min(dzdx_p(i ,j,k1b),0.0_r8)
3754 cff2=min(dzdx_p(i+1,j,k2b),0.0_r8)
3755 cff3=max(dzdx_p(i ,j,k2b),0.0_r8)
3756 cff4=max(dzdx_p(i+1,j,k1b),0.0_r8)
3757 cff5=min(dzde_p(i ,j,k1b),0.0_r8)
3758 cff6=min(dzde_p(i+1,j,k2b),0.0_r8)
3759 cff7=max(dzde_p(i ,j,k2b),0.0_r8)
3760 cff8=max(dzde_p(i+1,j,k1b),0.0_r8)
3761 vfse(i,j,k2b)=vfse(i,j,k2b)+ &
3763 & (cff1*(cff5*dmudz-dmude(i ,j,k1b))+ &
3764 & cff2*(cff6*dmudz-dmude(i+1,j,k2b))+ &
3765 & cff3*(cff7*dmudz-dmude(i ,j,k2b))+ &
3766 & cff4*(cff8*dmudz-dmude(i+1,j,k1b)))
3779 cff=0.125_r8*(pm(i,j)+pm(i,j-1))* &
3780 & (pn(i,j)+pn(i,j-1))
3781 cff1=1.0_r8/(0.5_r8*(hz(i,j-1,k)+hz(i,j,k)))
3785 ad_lapv(i,j,k)=ad_lapv(i,j,k)*vmask(i,j)
3796 adfac=cff1*ad_lapv(i,j,k)
3797 adfac1=cff*ad_lapv(i,j,k)
3798 adfac2=adfac1*(pm(i,j-1)+pm(i,j))
3799 adfac3=adfac1*(pn(i,j-1)+pn(i,j))
3800 ad_vfsx(i,j,k1)=ad_vfsx(i,j,k1)-adfac
3801 ad_vfse(i,j,k1)=ad_vfse(i,j,k1)-adfac
3802 ad_vfsx(i,j,k2)=ad_vfsx(i,j,k2)+adfac
3803 ad_vfse(i,j,k2)=ad_vfse(i,j,k2)+adfac
3805 & ((vfsx(i,j,k2)+vfse(i,j,k2))- &
3806 & (vfsx(i,j,k1)+vfse(i,j,k1)))*ad_lapv(i,j,k)
3807 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac2
3808 ad_vfe(i,j )=ad_vfe(i,j )-adfac2
3809 ad_vfx(i ,j)=ad_vfx(i ,j)-adfac3
3810 ad_vfx(i+1,j)=ad_vfx(i+1,j)+adfac3
3811 ad_lapv(i,j,k)=0.0_r8
3814 adfac=-cff1*cff1*0.5_r8*ad_cff1
3815 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
3816 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
3823 cff=0.125_r8*(pm(i-1,j)+pm(i,j))* &
3824 & (pn(i-1,j)+pn(i,j))
3825 cff1=1.0_r8/(0.5_r8*(hz(i-1,j,k)+hz(i,j,k)))
3829 ad_lapu(i,j,k)=ad_lapu(i,j,k)*umask(i,j)
3840 adfac=cff1*ad_lapu(i,j,k)
3841 adfac1=cff*ad_lapu(i,j,k)
3842 adfac2=adfac1*(pm(i-1,j)+pm(i,j))
3843 adfac3=adfac1*(pn(i-1,j)+pn(i,j))
3844 ad_ufsx(i,j,k1)=ad_ufsx(i,j,k1)-adfac
3845 ad_ufse(i,j,k1)=ad_ufse(i,j,k1)-adfac
3846 ad_ufsx(i,j,k2)=ad_ufsx(i,j,k2)+adfac
3847 ad_ufse(i,j,k2)=ad_ufse(i,j,k2)+adfac
3849 & ((ufsx(i,j,k2)+ufse(i,j,k2))- &
3850 & (ufsx(i,j,k1)+ufse(i,j,k1)))*ad_lapu(i,j,k)
3851 ad_ufe(i,j )=ad_ufe(i,j )-adfac2
3852 ad_ufe(i,j+1)=ad_ufe(i,j+1)+adfac2
3853 ad_ufx(i-1,j)=ad_ufx(i-1,j)-adfac3
3854 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac3
3855 ad_lapu(i,j,k)=0.0_r8
3858 adfac=-cff1*cff1*0.5_r8*ad_cff1
3859 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
3860 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
3868 IF (k.lt.n(ng))
THEN
3872# ifdef UV_U3ADV_SPLIT
3874 & (vvis3d_r(i,j-1,k )+vvis3d_r(i,j,k )+ &
3875 & vvis3d_r(i,j-1,k+1)+vvis3d_r(i,j,k+1))
3878 & (visc3d_r(i,j-1,k )+visc3d_r(i,j,k )+ &
3879 & visc3d_r(i,j-1,k+1)+visc3d_r(i,j,k+1))
3884 cff=0.25_r8*(visc4_r(i,j-1)+visc4_r(i,j))
3888 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
3889 dnudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
3890 & dudz(i+1,j ,k2)+ &
3891 & dudz(i ,j-1,k2)+ &
3893 dnvdz=cff*dvdz(i,j,k2)
3894 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
3895 dmudz=cff*0.25_r8*(dudz(i ,j ,k2)+ &
3896 & dudz(i+1,j ,k2)+ &
3897 & dudz(i ,j-1,k2)+ &
3899 dmvdz=cff*dvdz(i,j,k2)
3901 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
3902 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
3903 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
3904 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
3905 cff5=min(dzde_p(i ,j,k1),0.0_r8)
3906 cff6=min(dzde_p(i+1,j,k2),0.0_r8)
3907 cff7=max(dzde_p(i ,j,k2),0.0_r8)
3908 cff8=max(dzde_p(i+1,j,k1),0.0_r8)
3918 & (cff1*(cff5*dmudz-dmude(i ,j,k1))+ &
3919 & cff2*(cff6*dmudz-dmude(i+1,j,k2))+ &
3920 & cff3*(cff7*dmudz-dmude(i ,j,k2))+ &
3921 & cff4*(cff8*dmudz-dmude(i+1,j,k1)))* &
3939 adfac=fac2*ad_vfse(i,j,k2)
3941 ad_cff1=ad_cff1+(cff5*dmudz-dmude(i ,j,k1))*adfac
3942 ad_cff2=ad_cff2+(cff6*dmudz-dmude(i+1,j,k2))*adfac
3943 ad_cff3=ad_cff3+(cff7*dmudz-dmude(i ,j,k2))*adfac
3944 ad_cff4=ad_cff4+(cff8*dmudz-dmude(i+1,j,k1))*adfac
3945 ad_cff5=ad_cff5+cff1*adfac1
3946 ad_cff6=ad_cff6+cff2*adfac1
3947 ad_cff7=ad_cff7+cff3*adfac1
3948 ad_cff8=ad_cff8+cff4*adfac1
3949 ad_dmudz=ad_dmudz+ &
3950 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
3952 ad_dmude(i ,j,k1)=ad_dmude(i ,j,k1)-cff1*adfac
3953 ad_dmude(i+1,j,k2)=ad_dmude(i+1,j,k2)-cff2*adfac
3954 ad_dmude(i ,j,k2)=ad_dmude(i ,j,k2)-cff3*adfac
3955 ad_dmude(i+1,j,k1)=ad_dmude(i+1,j,k1)-cff4*adfac
3959 ad_dzde_p(i+1,j,k1)=ad_dzde_p(i+1,j,k1)+ &
3961 & sign(0.5_r8, dzde_p(i+1,j,k1)))* &
3967 ad_dzde_p(i ,j,k2)=ad_dzde_p(i ,j,k2)+ &
3969 & sign(0.5_r8, dzde_p(i ,j,k2)))* &
3975 ad_dzde_p(i+1,j,k2)=ad_dzde_p(i+1,j,k2)+ &
3977 & sign(0.5_r8,-dzde_p(i+1,j,k2)))* &
3983 ad_dzde_p(i ,j,k1)=ad_dzde_p(i ,j,k1)+ &
3985 & sign(0.5_r8,-dzde_p(i ,j,k1)))* &
3991 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
3993 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
3999 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
4001 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
4007 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
4009 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
4015 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
4017 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
4021 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
4022 cff2=min(dzde_r(i,j ,k2),0.0_r8)
4023 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
4024 cff4=max(dzde_r(i,j ,k1),0.0_r8)
4025 cff5=min(dzdx_r(i,j-1,k1),0.0_r8)
4026 cff6=min(dzdx_r(i,j ,k2),0.0_r8)
4027 cff7=max(dzdx_r(i,j-1,k2),0.0_r8)
4028 cff8=max(dzdx_r(i,j ,k1),0.0_r8)
4038 & (cff1*(cff5*dnudz-dnudx(i,j-1,k1))+ &
4039 & cff2*(cff6*dnudz-dnudx(i,j ,k2))+ &
4040 & cff3*(cff7*dnudz-dnudx(i,j-1,k2))+ &
4041 & cff4*(cff8*dnudz-dnudx(i,j ,k1)))* &
4059 adfac=fac1*ad_vfsx(i,j,k2)
4061 ad_cff1=ad_cff1-(cff5*dnudz-dnudx(i,j-1,k1))*adfac
4062 ad_cff2=ad_cff2-(cff6*dnudz-dnudx(i,j ,k2))*adfac
4063 ad_cff3=ad_cff3-(cff7*dnudz-dnudx(i,j-1,k2))*adfac
4064 ad_cff4=ad_cff4-(cff8*dnudz-dnudx(i,j ,k1))*adfac
4065 ad_cff5=ad_cff5-cff1*adfac1
4066 ad_cff6=ad_cff6-cff2*adfac1
4067 ad_cff7=ad_cff7-cff3*adfac1
4068 ad_cff8=ad_cff8-cff4*adfac1
4069 ad_dnudz=ad_dnudz- &
4070 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
4072 ad_dnudx(i,j-1,k1)=ad_dnudx(i,j-1,k1)+cff1*adfac
4073 ad_dnudx(i,j ,k2)=ad_dnudx(i,j ,k2)+cff2*adfac
4074 ad_dnudx(i,j-1,k2)=ad_dnudx(i,j-1,k2)+cff3*adfac
4075 ad_dnudx(i,j ,k1)=ad_dnudx(i,j ,k1)+cff4*adfac
4079 ad_dzdx_r(i,j ,k1)=ad_dzdx_r(i,j ,k1)+ &
4081 & sign(0.5_r8, dzdx_r(i,j ,k1)))* &
4087 ad_dzdx_r(i,j-1,k2)=ad_dzdx_r(i,j-1,k2)+ &
4089 & sign(0.5_r8, dzdx_r(i,j-1,k2)))* &
4095 ad_dzdx_r(i,j ,k2)=ad_dzdx_r(i,j ,k2)+ &
4097 & sign(0.5_r8,-dzdx_r(i,j ,k2)))* &
4103 ad_dzdx_r(i,j-1,k1)=ad_dzdx_r(i,j-1,k1)+ &
4105 & sign(0.5_r8,-dzdx_r(i,j-1,k1)))* &
4111 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
4113 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
4119 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
4121 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
4127 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
4129 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
4135 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
4137 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
4141 cff1=min(dzde_r(i,j-1,k1),0.0_r8)
4142 cff2=min(dzde_r(i,j ,k2),0.0_r8)
4143 cff3=max(dzde_r(i,j-1,k2),0.0_r8)
4144 cff4=max(dzde_r(i,j ,k1),0.0_r8)
4154 & (cff1*(cff1*dmvdz-dmvde(i,j-1,k1))+ &
4155 & cff2*(cff2*dmvdz-dmvde(i,j ,k2))+ &
4156 & cff3*(cff3*dmvdz-dmvde(i,j-1,k2))+ &
4157 & cff4*(cff4*dmvdz-dmvde(i,j ,k1)))* &
4175 adfac=fac2*ad_vfse(i,j,k2)
4176 ad_cff1=ad_cff1+(cff1*cff-dmvde(i,j-1,k1))*adfac
4177 ad_cff2=ad_cff2+(cff2*cff-dmvde(i,j ,k2))*adfac
4178 ad_cff3=ad_cff3+(cff3*cff-dmvde(i,j-1,k2))*adfac
4179 ad_cff4=ad_cff4+(cff4*cff-dmvde(i,j ,k1))*adfac
4180 ad_dmvdz=ad_dmvdz+ &
4181 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
4183 ad_dmvde(i,j-1,k1)=ad_dmvde(i,j-1,k1)-cff1*adfac
4184 ad_dmvde(i,j ,k2)=ad_dmvde(i,j ,k2)-cff2*adfac
4185 ad_dmvde(i,j-1,k2)=ad_dmvde(i,j-1,k2)-cff3*adfac
4186 ad_dmvde(i,j ,k1)=ad_dmvde(i,j ,k1)-cff4*adfac
4187 ad_vfse(i,j,k2)=0.0_r8
4191 ad_dzde_r(i,j ,k1)=ad_dzde_r(i,j ,k1)+ &
4193 & sign(0.5_r8, dzde_r(i,j ,k1)))* &
4199 ad_dzde_r(i,j-1,k2)=ad_dzde_r(i,j-1,k2)+ &
4201 & sign(0.5_r8, dzde_r(i,j-1,k2)))* &
4207 ad_dzde_r(i,j ,k2)=ad_dzde_r(i,j ,k2)+ &
4209 & sign(0.5_r8,-dzde_r(i,j ,k2)))* &
4215 ad_dzde_r(i,j-1,k1)=ad_dzde_r(i,j-1,k1)+ &
4217 & sign(0.5_r8,-dzde_r(i,j-1,k1)))* &
4221 cff1=min(dzdx_p(i ,j,k1),0.0_r8)
4222 cff2=min(dzdx_p(i+1,j,k2),0.0_r8)
4223 cff3=max(dzdx_p(i ,j,k2),0.0_r8)
4224 cff4=max(dzdx_p(i+1,j,k1),0.0_r8)
4234 & (cff1*(cff1*dnvdz-dnvdx(i ,j,k1))+ &
4235 & cff2*(cff2*dnvdz-dnvdx(i+1,j,k2))+ &
4236 & cff3*(cff3*dnvdz-dnvdx(i ,j,k2))+ &
4237 & cff4*(cff4*dnvdz-dnvdx(i+1,j,k1)))* &
4255 adfac=fac1*ad_vfsx(i,j,k2)
4256 ad_cff1=ad_cff1+(cff1*cff-dnvdx(i ,j,k1))*adfac
4257 ad_cff2=ad_cff2+(cff2*cff-dnvdx(i+1,j,k2))*adfac
4258 ad_cff3=ad_cff3+(cff3*cff-dnvdx(i ,j,k2))*adfac
4259 ad_cff4=ad_cff4+(cff4*cff-dnvdx(i+1,j,k1))*adfac
4260 ad_dnvdz=ad_dnvdz+ &
4261 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
4263 ad_dnvdx(i ,j,k1)=ad_dnvdx(i ,j,k1)-cff1*adfac
4264 ad_dnvdx(i+1,j,k2)=ad_dnvdx(i+1,j,k2)-cff2*adfac
4265 ad_dnvdx(i ,j,k2)=ad_dnvdx(i ,j,k2)-cff3*adfac
4266 ad_dnvdx(i+1,j,k1)=ad_dnvdx(i+1,j,k1)-cff4*adfac
4267 ad_vfsx(i,j,k2)=0.0_r8
4271 ad_dzdx_p(i+1,j,k1)=ad_dzdx_p(i+1,j,k1)+ &
4273 & sign(0.5_r8, dzdx_p(i+1,j,k1)))* &
4279 ad_dzdx_p(i ,j,k2)=ad_dzdx_p(i ,j,k2)+ &
4281 & sign(0.5_r8, dzdx_p(i ,j,k2)))* &
4287 ad_dzdx_p(i+1,j,k2)=ad_dzdx_p(i+1,j,k2)+ &
4289 & sign(0.5_r8,-dzdx_p(i+1,j,k2)))* &
4295 ad_dzdx_p(i ,j,k1)=ad_dzdx_p(i ,j,k1)+ &
4297 & sign(0.5_r8,-dzdx_p(i ,j,k1)))* &
4301 cff=0.5_r8*(pm(i,j-1)+pm(i,j))
4304 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dmvdz
4311 adfac=cff*0.25_r8*ad_dmudz
4312 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
4313 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
4314 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
4315 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
4318 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
4321 ad_dvdz(i,j,k2)=ad_dvdz(i,j,k2)+cff*ad_dnvdz
4328 adfac=cff*0.25_r8*ad_dnudz
4329 ad_dudz(i ,j-1,k2)=ad_dudz(i ,j-1,k2)+adfac
4330 ad_dudz(i+1,j-1,k2)=ad_dudz(i+1,j-1,k2)+adfac
4331 ad_dudz(i ,j ,k2)=ad_dudz(i ,j ,k2)+adfac
4332 ad_dudz(i+1,j ,k2)=ad_dudz(i+1,j ,k2)+adfac
4339 & on_v(i,j)*ad_fac1+om_v(i,j)*ad_fac2
4342# ifdef UV_U3ADV_SPLIT
4347 adfac=0.125_r8*ad_cff
4348 ad_vvis3d_r(i,j-1,k )=ad_vvis3d_r(i,j-1,k )+adfac
4349 ad_vvis3d_r(i,j ,k )=ad_vvis3d_r(i,j ,k )+adfac
4350 ad_vvis3d_r(i,j-1,k+1)=ad_vvis3d_r(i,j-1,k+1)+adfac
4351 ad_vvis3d_r(i,j ,k+1)=ad_vvis3d_r(i,j ,k+1)+adfac
4358 adfac=0.125_r8*ad_cff
4359 ad_visc3d_r(i,j-1,k )=ad_visc3d_r(i,j-1,k )+adfac
4360 ad_visc3d_r(i,j ,k )=ad_visc3d_r(i,j ,k )+adfac
4361 ad_visc3d_r(i,j-1,k+1)=ad_visc3d_r(i,j-1,k+1)+adfac
4362 ad_visc3d_r(i,j ,k+1)=ad_visc3d_r(i,j ,k+1)+adfac
4372# ifdef UV_U3ADV_SPLIT
4374 & (uvis3d_r(i-1,j,k )+uvis3d_r(i,j,k )+ &
4375 & uvis3d_r(i-1,j,k+1)+uvis3d_r(i,j,k+1))
4378 & (visc3d_r(i-1,j,k )+visc3d_r(i,j,k )+ &
4379 & visc3d_r(i-1,j,k+1)+visc3d_r(i,j,k+1))
4384 cff=0.25_r8*(visc4_r(i-1,j)+visc4_r(i,j))
4388 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
4389 dnudz=cff*dudz(i,j,k2)
4390 dnvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
4391 & dvdz(i ,j+1,k2)+ &
4392 & dvdz(i-1,j ,k2)+ &
4394 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
4395 dmudz=cff*dudz(i,j,k2)
4396 dmvdz=cff*0.25_r8*(dvdz(i-1,j+1,k2)+ &
4397 & dvdz(i ,j+1,k2)+ &
4398 & dvdz(i-1,j ,k2)+ &
4401 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
4402 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
4403 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
4404 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
4405 cff5=min(dzde_r(i-1,j,k1),0.0_r8)
4406 cff6=min(dzde_r(i ,j,k2),0.0_r8)
4407 cff7=max(dzde_r(i-1,j,k2),0.0_r8)
4408 cff8=max(dzde_r(i ,j,k1),0.0_r8)
4418 & (cff1*(cff5*dmvdz-dmvde(i-1,j,k1))+ &
4419 & cff2*(cff6*dmvdz-dmvde(i ,j,k2))+ &
4420 & cff3*(cff7*dmvdz-dmvde(i-1,j,k2))+ &
4421 & cff4*(cff8*dmvdz-dmvde(i ,j,k1)))* &
4439 adfac=fac2*ad_ufse(i,j,k2)
4441 ad_cff1=ad_cff1-(cff5*dmvdz-dmvde(i-1,j,k1))*adfac
4442 ad_cff2=ad_cff2-(cff6*dmvdz-dmvde(i ,j,k2))*adfac
4443 ad_cff3=ad_cff3-(cff7*dmvdz-dmvde(i-1,j,k2))*adfac
4444 ad_cff4=ad_cff4-(cff8*dmvdz-dmvde(i ,j,k1))*adfac
4445 ad_cff5=ad_cff5-cff1*adfac1
4446 ad_cff6=ad_cff6-cff2*adfac1
4447 ad_cff7=ad_cff7-cff3*adfac1
4448 ad_cff8=ad_cff8-cff4*adfac1
4449 ad_dmvdz=ad_dmvdz- &
4450 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
4452 ad_dmvde(i-1,j,k1)=ad_dmvde(i-1,j,k1)+cff1*adfac
4453 ad_dmvde(i ,j,k2)=ad_dmvde(i ,j,k2)+cff2*adfac
4454 ad_dmvde(i-1,j,k2)=ad_dmvde(i-1,j,k2)+cff3*adfac
4455 ad_dmvde(i ,j,k1)=ad_dmvde(i ,j,k1)+cff4*adfac
4459 ad_dzde_r(i ,j,k1)=ad_dzde_r(i ,j,k1)+ &
4461 & sign(0.5_r8, dzde_r(i ,j,k1)))* &
4467 ad_dzde_r(i-1,j,k2)=ad_dzde_r(i-1,j,k2)+ &
4469 & sign(0.5_r8, dzde_r(i-1,j,k2)))* &
4475 ad_dzde_r(i ,j,k2)=ad_dzde_r(i ,j,k2)+ &
4477 & sign(0.5_r8,-dzde_r(i ,j,k2)))* &
4483 ad_dzde_r(i-1,j,k1)=ad_dzde_r(i-1,j,k1)+ &
4485 & sign(0.5_r8,-dzde_r(i-1,j,k1)))* &
4491 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
4493 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
4499 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
4501 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
4507 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
4509 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
4515 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
4517 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
4521 cff1=min(dzde_p(i,j ,k1),0.0_r8)
4522 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
4523 cff3=max(dzde_p(i,j ,k2),0.0_r8)
4524 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
4525 cff5=min(dzdx_p(i,j ,k1),0.0_r8)
4526 cff6=min(dzdx_p(i,j+1,k2),0.0_r8)
4527 cff7=max(dzdx_p(i,j ,k2),0.0_r8)
4528 cff8=max(dzdx_p(i,j+1,k1),0.0_r8)
4538 & (cff1*(cff5*dnvdz-dnvdx(i,j ,k1))+ &
4539 & cff2*(cff6*dnvdz-dnvdx(i,j+1,k2))+ &
4540 & cff3*(cff7*dnvdz-dnvdx(i,j ,k2))+ &
4541 & cff4*(cff8*dnvdz-dnvdx(i,j+1,k1)))* &
4559 adfac=fac1*ad_ufsx(i,j,k2)
4561 ad_cff1=ad_cff1+(cff5*dnvdz-dnvdx(i,j ,k1))*adfac
4562 ad_cff2=ad_cff2+(cff6*dnvdz-dnvdx(i,j+1,k2))*adfac
4563 ad_cff3=ad_cff3+(cff7*dnvdz-dnvdx(i,j ,k2))*adfac
4564 ad_cff4=ad_cff4+(cff8*dnvdz-dnvdx(i,j+1,k1))*adfac
4565 ad_cff5=ad_cff5+cff1*adfac1
4566 ad_cff6=ad_cff6+cff2*adfac1
4567 ad_cff7=ad_cff7+cff3*adfac1
4568 ad_cff8=ad_cff8+cff4*adfac1
4569 ad_dnvdz=ad_dnvdz+ &
4570 & (cff1*cff5+cff2*cff6+cff3*cff7+cff4*cff8)* &
4572 ad_dnvdx(i,j ,k1)=ad_dnvdx(i,j ,k1)-cff1*adfac
4573 ad_dnvdx(i,j+1,k2)=ad_dnvdx(i,j+1,k2)-cff2*adfac
4574 ad_dnvdx(i,j ,k2)=ad_dnvdx(i,j ,k2)-cff3*adfac
4575 ad_dnvdx(i,j+1,k1)=ad_dnvdx(i,j+1,k1)-cff4*adfac
4579 ad_dzdx_p(i,j+1,k1)=ad_dzdx_p(i,j+1,k1)+ &
4581 & sign(0.5_r8, dzdx_p(i,j+1,k1)))* &
4587 ad_dzdx_p(i,j ,k2)=ad_dzdx_p(i,j ,k2)+ &
4589 & sign(0.5_r8, dzdx_p(i,j ,k2)))* &
4595 ad_dzdx_p(i,j+1,k2)=ad_dzdx_p(i,j+1,k2)+ &
4597 & sign(0.5_r8,-dzdx_p(i,j+1,k2)))* &
4603 ad_dzdx_p(i,j ,k1)=ad_dzdx_p(i,j ,k1)+ &
4605 & sign(0.5_r8,-dzdx_p(i,j ,k1)))* &
4611 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
4613 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
4619 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
4621 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
4627 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
4629 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
4635 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
4637 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
4641 cff1=min(dzde_p(i,j ,k1),0.0_r8)
4642 cff2=min(dzde_p(i,j+1,k2),0.0_r8)
4643 cff3=max(dzde_p(i,j ,k2),0.0_r8)
4644 cff4=max(dzde_p(i,j+1,k1),0.0_r8)
4654 & (cff1*(cff1*dmudz-dmude(i,j ,k1))+ &
4655 & cff2*(cff2*dmudz-dmude(i,j+1,k2))+ &
4656 & cff3*(cff3*dmudz-dmude(i,j ,k2))+ &
4657 & cff4*(cff4*dmudz-dmude(i,j+1,k1)))* &
4675 adfac=fac2*ad_ufse(i,j,k2)
4676 ad_cff1=ad_cff1+(cff1*cff-dmude(i,j ,k1))*adfac
4677 ad_cff2=ad_cff2+(cff2*cff-dmude(i,j+1,k2))*adfac
4678 ad_cff3=ad_cff3+(cff3*cff-dmude(i,j ,k2))*adfac
4679 ad_cff4=ad_cff4+(cff4*cff-dmude(i,j+1,k1))*adfac
4680 ad_dmudz=ad_dmudz+ &
4681 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
4683 ad_dmude(i,j ,k1)=ad_dmude(i,j ,k1)-cff1*adfac
4684 ad_dmude(i,j+1,k2)=ad_dmude(i,j+1,k2)-cff2*adfac
4685 ad_dmude(i,j ,k2)=ad_dmude(i,j ,k2)-cff3*adfac
4686 ad_dmude(i,j+1,k1)=ad_dmude(i,j+1,k1)-cff4*adfac
4687 ad_ufse(i,j,k2)=0.0_r8
4691 ad_dzde_p(i,j+1,k1)=ad_dzde_p(i,j+1,k1)+ &
4693 & sign(0.5_r8, dzde_p(i,j+1,k1)))* &
4699 ad_dzde_p(i,j ,k2)=ad_dzde_p(i,j ,k2)+ &
4701 & sign(0.5_r8, dzde_p(i,j ,k2)))* &
4707 ad_dzde_p(i,j+1,k2)=ad_dzde_p(i,j+1,k2)+ &
4709 & sign(0.5_r8,-dzde_p(i,j+1,k2)))* &
4715 ad_dzde_p(i,j ,k1)=ad_dzde_p(i,j ,k1)+ &
4717 & sign(0.5_r8,-dzde_p(i,j ,k1)))* &
4721 cff1=min(dzdx_r(i-1,j,k1),0.0_r8)
4722 cff2=min(dzdx_r(i ,j,k2),0.0_r8)
4723 cff3=max(dzdx_r(i-1,j,k2),0.0_r8)
4724 cff4=max(dzdx_r(i ,j,k1),0.0_r8)
4734 & (cff1*(cff1*dnudz-dnudx(i-1,j,k1))+ &
4735 & cff2*(cff2*dnudz-dnudx(i ,j,k2))+ &
4736 & cff3*(cff3*dnudz-dnudx(i-1,j,k2))+ &
4737 & cff4*(cff4*dnudz-dnudx(i ,j,k1)))* &
4755 adfac=fac1*ad_ufsx(i,j,k2)
4756 ad_cff1=ad_cff1+(cff1*cff-dnudx(i-1,j,k1))*adfac
4757 ad_cff2=ad_cff2+(cff2*cff-dnudx(i ,j,k2))*adfac
4758 ad_cff3=ad_cff3+(cff3*cff-dnudx(i-1,j,k2))*adfac
4759 ad_cff4=ad_cff4+(cff4*cff-dnudx(i ,j,k1))*adfac
4760 ad_dnudz=ad_dnudz+ &
4761 & (cff1*cff1+cff2*cff2+cff3*cff3+cff4*cff4)* &
4763 ad_dnudx(i-1,j,k1)=ad_dnudx(i-1,j,k1)-cff1*adfac
4764 ad_dnudx(i ,j,k2)=ad_dnudx(i ,j,k2)-cff2*adfac
4765 ad_dnudx(i-1,j,k2)=ad_dnudx(i-1,j,k2)-cff3*adfac
4766 ad_dnudx(i ,j,k1)=ad_dnudx(i ,j,k1)-cff4*adfac
4767 ad_ufsx(i,j,k2)=0.0_r8
4771 ad_dzdx_r(i ,j,k1)=ad_dzdx_r(i ,j,k1)+ &
4773 & sign(0.5_r8, dzdx_r(i ,j,k1)))* &
4779 ad_dzdx_r(i-1,j,k2)=ad_dzdx_r(i-1,j,k2)+ &
4781 & sign(0.5_r8, dzdx_r(i-1,j,k2)))* &
4787 ad_dzdx_r(i ,j,k2)=ad_dzdx_r(i ,j,k2)+ &
4789 & sign(0.5_r8,-dzdx_r(i ,j,k2)))* &
4795 ad_dzdx_r(i-1,j,k1)=ad_dzdx_r(i-1,j,k1)+ &
4797 & sign(0.5_r8,-dzdx_r(i-1,j,k1)))* &
4801 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
4807 adfac=cff*0.25_r8*ad_dmvdz
4808 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
4809 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
4810 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
4811 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
4815 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dmudz
4818 cff=0.5_r8*(pn(i-1,j)+pn(i,j))
4824 adfac=cff*0.25_r8*ad_dnvdz
4825 ad_dvdz(i-1,j ,k2)=ad_dvdz(i-1,j ,k2)+adfac
4826 ad_dvdz(i ,j ,k2)=ad_dvdz(i ,j ,k2)+adfac
4827 ad_dvdz(i-1,j+1,k2)=ad_dvdz(i-1,j+1,k2)+adfac
4828 ad_dvdz(i ,j+1,k2)=ad_dvdz(i ,j+1,k2)+adfac
4832 ad_dudz(i,j,k2)=ad_dudz(i,j,k2)+cff*ad_dnudz
4839 & on_u(i,j)*ad_fac1+om_u(i,j)*ad_fac2
4842# ifdef UV_U3ADV_SPLIT
4847 adfac=0.125_r8*ad_cff
4848 ad_uvis3d_r(i-1,j,k )=ad_uvis3d_r(i-1,j,k )+adfac
4849 ad_uvis3d_r(i ,j,k )=ad_uvis3d_r(i ,j,k )+adfac
4850 ad_uvis3d_r(i-1,j,k+1)=ad_uvis3d_r(i-1,j,k+1)+adfac
4851 ad_uvis3d_r(i ,j,k+1)=ad_uvis3d_r(i ,j,k+1)+adfac
4858 adfac=0.125_r8*ad_cff
4859 ad_visc3d_r(i-1,j,k )=ad_visc3d_r(i-1,j,k )+adfac
4860 ad_visc3d_r(i ,j,k )=ad_visc3d_r(i ,j,k )+adfac
4861 ad_visc3d_r(i-1,j,k+1)=ad_visc3d_r(i-1,j,k+1)+adfac
4862 ad_visc3d_r(i ,j,k+1)=ad_visc3d_r(i ,j,k+1)+adfac
4877 pm_p=0.25_r8*(pm(i-1,j-1)+pm(i-1,j)+ &
4878 & pm(i ,j-1)+pm(i ,j))
4879 pn_p=0.25_r8*(pn(i-1,j-1)+pn(i-1,j)+ &
4880 & pn(i ,j-1)+pn(i ,j))
4881 cff1=min(dzdx_p(i,j,k1),0.0_r8)
4882 cff2=max(dzdx_p(i,j,k1),0.0_r8)
4883 cff3=min(dzde_p(i,j,k1),0.0_r8)
4884 cff4=max(dzde_p(i,j,k1),0.0_r8)
4886 cff=on_p(i,j)*(dnvdx(i,j,k1)- &
4888 & (cff1*(dvdz(i-1,j,k1)+ &
4890 & cff2*(dvdz(i-1,j,k2)+ &
4891 & dvdz(i ,j,k1))))+ &
4892 & om_p(i,j)*(dmude(i,j,k1)- &
4894 & (cff3*(dudz(i,j-1,k1)+ &
4896 & cff4*(dudz(i,j-1,k2)+ &
4901# ifdef UV_U3ADV_SPLIT
4903 & (uvis3d_r(i-1,j-1,k)+uvis3d_r(i-1,j,k)+ &
4904 & uvis3d_r(i ,j-1,k)+uvis3d_r(i ,j,k))
4906 & (vvis3d_r(i-1,j-1,k)+vvis3d_r(i-1,j,k)+ &
4907 & vvis3d_r(i ,j-1,k)+vvis3d_r(i ,j,k))
4911 adfac=on_p(i,j)*on_p(i,j)*ad_vfx(i,j)
4912 ad_cff=ad_cff+vvis_p*adfac
4913 ad_vvis_p=ad_vvis_p+cff*adfac
4918 adfac=om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
4919 ad_cff=ad_cff+uvis_p*adfac
4920 ad_uvis_p=ad_uvis_p+cff*adfac
4926 adfac=0.25_r8*ad_vvis_p
4927 ad_vvis3d_r(i-1,j-1,k)=ad_vvis3d_r(i-1,j-1,k)+adfac
4928 ad_vvis3d_r(i-1,j ,k)=ad_vvis3d_r(i-1,j ,k)+adfac
4929 ad_vvis3d_r(i ,j-1,k)=ad_vvis3d_r(i ,j-1,k)+adfac
4930 ad_vvis3d_r(i ,j ,k)=ad_vvis3d_r(i ,j ,k)+adfac
4936 adfac=0.25_r8*ad_uvis_p
4937 ad_uvis3d_r(i-1,j-1,k)=ad_uvis3d_r(i-1,j-1,k)+adfac
4938 ad_uvis3d_r(i-1,j ,k)=ad_uvis3d_r(i-1,j ,k)+adfac
4939 ad_uvis3d_r(i ,j-1,k)=ad_uvis3d_r(i ,j-1,k)+adfac
4940 ad_uvis3d_r(i ,j ,k)=ad_uvis3d_r(i ,j ,k)+adfac
4944 & (visc3d_r(i-1,j-1,k)+visc3d_r(i-1,j,k)+ &
4945 & visc3d_r(i ,j-1,k)+visc3d_r(i ,j,k))
4949 adfac=on_p(i,j)*on_p(i,j)*ad_vfx(i,j)
4950 ad_cff=ad_cff+visc_p*adfac
4951 ad_visc_p=ad_visc_p+cff*adfac
4956 adfac=om_p(i,j)*om_p(i,j)*ad_ufe(i,j)
4957 ad_cff=ad_cff+visc_p*adfac
4958 ad_visc_p=ad_visc_p+cff*adfac
4964 adfac=0.25_r8*ad_visc_p
4965 ad_visc3d_r(i-1,j-1,k)=ad_visc3d_r(i-1,j-1,k)+adfac
4966 ad_visc3d_r(i ,j-1,k)=ad_visc3d_r(i ,j-1,k)+adfac
4967 ad_visc3d_r(i-1,j ,k)=ad_visc3d_r(i-1,j ,k)+adfac
4968 ad_visc3d_r(i ,j ,k)=ad_visc3d_r(i ,j ,k)+adfac
4976 & on_p(i,j)*on_p(i,j)*visc4_p(i,j)*ad_vfx(i,j)+ &
4977 & om_p(i,j)*om_p(i,j)*visc4_p(i,j)*ad_ufe(i,j)
4984 ad_cff=ad_cff*pmask(i,j)
5007 adfac1=on_p(i,j)*ad_cff
5008 adfac2=adfac1*0.5_r8*pn_p
5009 adfac3=om_p(i,j)*ad_cff
5010 adfac4=adfac3*0.5_r8*pm_p
5011 ad_dnvdx(i,j,k1)=ad_dnvdx(i,j,k1)+adfac1
5013 & (dvdz(i-1,j,k1)+dvdz(i ,j,k2))*adfac2
5015 & (dvdz(i-1,j,k2)+dvdz(i ,j,k1))*adfac2
5016 ad_dvdz(i-1,j,k1)=ad_dvdz(i-1,j,k1)-cff1*adfac2
5017 ad_dvdz(i-1,j,k2)=ad_dvdz(i-1,j,k2)-cff2*adfac2
5018 ad_dvdz(i ,j,k1)=ad_dvdz(i ,j,k1)-cff2*adfac2
5019 ad_dvdz(i ,j,k2)=ad_dvdz(i ,j,k2)-cff1*adfac2
5020 ad_dmude(i,j,k1)=ad_dmude(i,j,k1)+adfac3
5022 & (dudz(i,j-1,k1)+dudz(i,j ,k2))*adfac4
5024 & (dudz(i,j-1,k2)+dudz(i,j ,k1))*adfac4
5025 ad_dudz(i,j-1,k1)=ad_dudz(i,j-1,k1)-cff3*adfac4
5026 ad_dudz(i,j-1,k2)=ad_dudz(i,j-1,k2)-cff4*adfac4
5027 ad_dudz(i,j ,k1)=ad_dudz(i,j ,k1)-cff4*adfac4
5028 ad_dudz(i,j ,k2)=ad_dudz(i,j ,k2)-cff3*adfac4
5035 ad_dzde_p(i,j,k1)=ad_dzde_p(i,j,k1)+ &
5037 & sign(0.5_r8, dzde_p(i,j,k1)))* &
5040 & sign(0.5_r8,-dzde_p(i,j,k1)))* &
5049 ad_dzdx_p(i,j,k1)=ad_dzdx_p(i,j,k1)+ &
5051 & sign(0.5_r8, dzdx_p(i,j,k1)))* &
5054 & sign(0.5_r8,-dzdx_p(i,j,k1)))* &
5063 cff1=min(dzdx_r(i,j,k1),0.0_r8)
5064 cff2=max(dzdx_r(i,j,k1),0.0_r8)
5065 cff3=min(dzde_r(i,j,k1),0.0_r8)
5066 cff4=max(dzde_r(i,j,k1),0.0_r8)
5068 cff=on_r(i,j)*(dnudx(i,j,k1)- &
5070 & (cff1*(dudz(i ,j,k1)+ &
5071 & dudz(i+1,j,k2))+ &
5072 & cff2*(dudz(i ,j,k2)+ &
5073 & dudz(i+1,j,k1))))- &
5074 & om_r(i,j)*(dmvde(i,j,k1)- &
5076 & (cff3*(dvdz(i,j ,k1)+ &
5077 & dvdz(i,j+1,k2))+ &
5078 & cff4*(dvdz(i,j ,k2)+ &
5083# ifdef UV_U3ADV_SPLIT
5088 adfac=om_r(i,j)*om_r(i,j)*ad_vfe(i,j)
5089 ad_cff=ad_cff+vvis3d_r(i,j,k)*adfac
5090 ad_vvis3d_r(i,j,k)=ad_vvis3d_r(i,j,k)+cff*adfac
5096 adfac=on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
5097 ad_cff=ad_cff+uvis3d_r(i,j,k)*adfac
5098 ad_uvis3d_r(i,j,k)=ad_uvis3d_r(i,j,k)+cff*adfac
5105 adfac=om_r(i,j)*om_r(i,j)*ad_vfe(i,j)
5106 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
5107 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
5113 adfac=on_r(i,j)*on_r(i,j)*ad_ufx(i,j)
5114 ad_cff=ad_cff+visc3d_r(i,j,k)*adfac
5115 ad_visc3d_r(i,j,k)=ad_visc3d_r(i,j,k)+cff*adfac
5123 & om_r(i,j)*om_r(i,j)*visc4_r(i,j)*ad_vfe(i,j)+ &
5124 & on_r(i,j)*on_r(i,j)*visc4_r(i,j)*ad_ufx(i,j)
5131 ad_cff=ad_cff*rmask(i,j)
5154 adfac1=on_r(i,j)*ad_cff
5155 adfac2=adfac1*0.5_r8*pn(i,j)
5156 adfac3=om_r(i,j)*ad_cff
5157 adfac4=adfac3*0.5_r8*pm(i,j)
5158 ad_dnudx(i,j,k1)=ad_dnudx(i,j,k1)+adfac1
5160 & (dudz(i ,j,k1)+dudz(i+1,j,k2))*adfac2
5162 & (dudz(i ,j,k2)+dudz(i+1,j,k1))*adfac2
5163 ad_dudz(i ,j,k1)=ad_dudz(i ,j,k1)-cff1*adfac2
5164 ad_dudz(i ,j,k2)=ad_dudz(i ,j,k2)-cff2*adfac2
5165 ad_dudz(i+1,j,k1)=ad_dudz(i+1,j,k1)-cff2*adfac2
5166 ad_dudz(i+1,j,k2)=ad_dudz(i+1,j,k2)-cff1*adfac2
5167 ad_dmvde(i,j,k1)=ad_dmvde(i,j,k1)-adfac3
5169 & (dvdz(i,j ,k1)+dvdz(i,j+1,k2))*adfac4
5171 & (dvdz(i,j ,k2)+dvdz(i,j+1,k1))*adfac4
5172 ad_dvdz(i,j ,k1)=ad_dvdz(i,j ,k1)+cff3*adfac4
5173 ad_dvdz(i,j ,k2)=ad_dvdz(i,j ,k2)+cff4*adfac4
5174 ad_dvdz(i,j+1,k1)=ad_dvdz(i,j+1,k1)+cff4*adfac4
5175 ad_dvdz(i,j+1,k2)=ad_dvdz(i,j+1,k2)+cff3*adfac4
5182 ad_dzde_r(i,j,k1)=ad_dzde_r(i,j,k1)+ &
5184 & sign(0.5_r8, dzde_r(i,j,k1)))* &
5187 & sign(0.5_r8,-dzde_r(i,j,k1)))* &
5196 ad_dzdx_r(i,j,k1)=ad_dzdx_r(i,j,k1)+ &
5198 & sign(0.5_r8, dzdx_r(i,j,k1)))* &
5201 & sign(0.5_r8,-dzdx_r(i,j,k1)))* &
5212 IF ((k.eq.0).or.(k.eq.n(ng)))
THEN
5217 ad_vfse(i,j,k2)=0.0_r8
5220 ad_vfsx(i,j,k2)=0.0_r8
5227 ad_ufse(i,j,k2)=0.0_r8
5230 ad_ufsx(i,j,k2)=0.0_r8
5238 ad_dvdz(i,j,k2)=0.0_r8
5245 ad_dudz(i,j,k2)=0.0_r8
5251 cff=1.0_r8/(0.5_r8*(z_r(i,j-1,k+1)- &
5260 adfac=cff*ad_dvdz(i,j,k2)
5261 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)-adfac
5262 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac
5263 ad_cff=ad_cff+(v(i,j,k+1,nrhs)- &
5264 & v(i,j,k ,nrhs))*ad_dvdz(i,j,k2)
5265 ad_dvdz(i,j,k2)=0.0_r8
5271 adfac=-cff*cff*0.5_r8*ad_cff
5272 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac
5273 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+adfac
5274 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-adfac
5275 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
5282 cff=1.0_r8/(0.5_r8*(z_r(i-1,j,k+1)- &
5291 adfac=cff*ad_dudz(i,j,k2)
5292 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)-adfac
5293 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac
5294 ad_cff=ad_cff+(u(i,j,k+1,nrhs)- &
5295 & u(i,j,k ,nrhs))*ad_dudz(i,j,k2)
5296 ad_dudz(i,j,k2)=0.0_r8
5302 adfac=-cff*cff*0.5_r8*ad_cff
5303 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac
5304 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+adfac
5305 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-adfac
5306 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac
5312 IF (k.lt.n(ng))
THEN
5324 adfac=cff*ad_dmvde(i,j,k2)
5325 ad_v(i,j ,k+1,nrhs)=ad_v(i,j ,k+1,nrhs)- &
5326 & (pm(i,j-1)+pm(i,j ))*adfac
5327 ad_v(i,j+1,k+1,nrhs)=ad_v(i,j+1,k+1,nrhs)+ &
5328 & (pm(i,j )+pm(i,j+1))*adfac
5329 ad_dmvde(i,j,k2)=0.0_r8
5335 cff=0.125_r8*(pm(i-1,j )+pm(i,j )+ &
5336 & pm(i-1,j-1)+pm(i,j-1))
5345 adfac=cff*ad_dnvdx(i,j,k2)
5346 ad_v(i-1,j,k+1,nrhs)=ad_v(i-1,j,k+1,nrhs)- &
5347 & (pn(i-1,j-1)+pn(i-1,j))*adfac
5348 ad_v(i ,j,k+1,nrhs)=ad_v(i ,j,k+1,nrhs)+ &
5349 & (pn(i ,j-1)+pn(i ,j))*adfac
5350 ad_dnvdx(i,j,k2)=0.0_r8
5356 cff=0.125_r8*(pn(i-1,j )+pn(i,j )+ &
5357 & pn(i-1,j-1)+pn(i,j-1))
5366 adfac=cff*ad_dmude(i,j,k2)
5367 ad_u(i,j-1,k+1,nrhs)=ad_u(i,j-1,k+1,nrhs)- &
5368 & (pm(i-1,j-1)+pm(i,j-1))*adfac
5369 ad_u(i,j ,k+1,nrhs)=ad_u(i,j ,k+1,nrhs)+ &
5370 & (pm(i-1,j )+pm(i,j ))*adfac
5371 ad_dmude(i,j,k2)=0.0_r8
5386 adfac=cff*ad_dnudx(i,j,k2)
5387 ad_u(i ,j,k+1,nrhs)=ad_u(i ,j,k+1,nrhs)- &
5388 & (pn(i-1,j)+pn(i ,j))*adfac
5389 ad_u(i+1,j,k+1,nrhs)=ad_u(i+1,j,k+1,nrhs)+ &
5390 & (pn(i ,j)+pn(i+1,j))*adfac
5391 ad_dnudx(i,j,k2)=0.0_r8
5402 adfac=0.5_r8*ad_dzde_r(i,j,k2)
5403 ad_vfe(i,j )=ad_vfe(i,j )+adfac
5404 ad_vfe(i,j+1)=ad_vfe(i,j+1)+adfac
5405 ad_dzde_r(i,j,k2)=0.0_r8
5409 adfac=0.5_r8*ad_dzdx_r(i,j,k2)
5410 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
5411 ad_ufx(i+1,j)=ad_ufx(i+1,j)+adfac
5412 ad_dzdx_r(i,j,k2)=0.0_r8
5421 adfac=0.5_r8*ad_dzde_p(i,j,k2)
5422 ad_vfe(i-1,j)=ad_vfe(i-1,j)+adfac
5423 ad_vfe(i ,j)=ad_vfe(i ,j)+adfac
5424 ad_dzde_p(i,j,k2)=0.0_r8
5428 adfac=0.5_r8*ad_dzdx_p(i,j,k2)
5429 ad_ufx(i,j-1)=ad_ufx(i,j-1)+adfac
5430 ad_ufx(i,j )=ad_ufx(i,j )+adfac
5431 ad_dzdx_p(i,j,k2)=0.0_r8
5437 cff=0.5_r8*(pn(i,j-1)+pn(i,j))
5444 adfac=cff*ad_vfe(i,j)
5445 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac
5446 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac
5453 cff=0.5_r8*(pm(i-1,j)+pm(i,j))
5460 adfac=cff*ad_ufx(i,j)
5461 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac
5462 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac