226 & LBi, UBi, LBj, UBj, &
227 & IminS, ImaxS, JminS, JmaxS, &
232# if defined CURVGRID && defined UV_ADV
236 & om_u, om_v, on_u, on_v, pm, pn, &
237# ifdef WET_DRY_NOT_YET
238 & umask_wet, vmask_wet, &
248 & u_stokes, ad_u_stokes, &
249 & v_stokes, ad_v_stokes, &
250 & ad_rulag3d, ad_rvlag3d, &
251 & ad_rustr3d, ad_rvstr3d, &
255# ifdef DIAGNOSTICS_UV
256!! & DiaRUfrc, DiaRVfrc, &
268 integer,
intent(in) :: ng, tile
269 integer,
intent(in) :: LBi, UBi, LBj, UBj
270 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
271 integer,
intent(in) :: knew, nrhs
274 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
275 real(r8),
intent(in) :: Huon(LBi:,LBj:,:)
276 real(r8),
intent(in) :: Hvom(LBi:,LBj:,:)
277# if defined CURVGRID && defined UV_ADV
278 real(r8),
intent(in) :: dmde(LBi:,LBj:)
279 real(r8),
intent(in) :: dndx(LBi:,LBj:)
281 real(r8),
intent(in) :: fomn(LBi:,LBj:)
282 real(r8),
intent(in) :: om_u(LBi:,LBj:)
283 real(r8),
intent(in) :: om_v(LBi:,LBj:)
284 real(r8),
intent(in) :: on_u(LBi:,LBj:)
285 real(r8),
intent(in) :: on_v(LBi:,LBj:)
286 real(r8),
intent(in) :: pm(LBi:,LBj:)
287 real(r8),
intent(in) :: pn(LBi:,LBj:)
288# ifdef WET_DRY_NOT_YET
289 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
290 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
292 real(r8),
intent(in) :: bustr(LBi:,LBj:)
293 real(r8),
intent(in) :: bvstr(LBi:,LBj:)
294 real(r8),
intent(in) :: sustr(LBi:,LBj:)
295 real(r8),
intent(in) :: svstr(LBi:,LBj:)
296 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
297 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
298 real(r8),
intent(in) :: W(LBi:,LBj:,0:)
300 real(r8),
intent(in) :: u_stokes(LBi:,LBj:,:)
301 real(r8),
intent(in) :: v_stokes(LBi:,LBj:,:)
303# ifdef DIAGNOSTICS_UV
309 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
310 real(r8),
intent(inout) :: ad_Huon(LBi:,LBj:,:)
311 real(r8),
intent(inout) :: ad_Hvom(LBi:,LBj:,:)
312 real(r8),
intent(inout) :: ad_bustr(LBi:,LBj:)
313 real(r8),
intent(inout) :: ad_bvstr(LBi:,LBj:)
314 real(r8),
intent(inout) :: ad_sustr(LBi:,LBj:)
315 real(r8),
intent(inout) :: ad_svstr(LBi:,LBj:)
316 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
317 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
318 real(r8),
intent(inout) :: ad_W(LBi:,LBj:,0:)
320 real(r8),
intent(inout) :: ad_u_stokes(LBi:,LBj:,:)
321 real(r8),
intent(inout) :: ad_v_stokes(LBi:,LBj:,:)
322 real(r8),
intent(inout) :: ad_rulag3d(LBi:,LBj:,:)
323 real(r8),
intent(inout) :: ad_rvlag3d(LBi:,LBj:,:)
324 real(r8),
intent(inout) :: ad_rustr3d(LBi:,LBj:,:)
325 real(r8),
intent(inout) :: ad_rvstr3d(LBi:,LBj:,:)
327 real(r8),
intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
328 real(r8),
intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
330 real(r8),
intent(inout) :: ad_rufrc(LBi:,LBj:)
331 real(r8),
intent(inout) :: ad_rvfrc(LBi:,LBj:)
333 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
334 real(r8),
intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
335 real(r8),
intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
336# if defined CURVGRID && defined UV_ADV
337 real(r8),
intent(in) :: dmde(LBi:UBi,LBj:UBj)
338 real(r8),
intent(in) :: dndx(LBi:UBi,LBj:UBj)
340 real(r8),
intent(in) :: fomn(LBi:UBi,LBj:UBj)
341 real(r8),
intent(in) :: om_u(LBi:UBi,LBj:UBj)
342 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
343 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
344 real(r8),
intent(in) :: on_v(LBi:UBi,LBj:UBj)
345 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
346 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
347# ifdef WET_DRY_NOT_YET
348 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
349 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
351 real(r8),
intent(in) :: bustr(LBi:UBi,LBj:UBj)
352 real(r8),
intent(in) :: bvstr(LBi:UBi,LBj:UBj)
353 real(r8),
intent(in) :: sustr(LBi:UBi,LBj:UBj)
354 real(r8),
intent(in) :: svstr(LBi:UBi,LBj:UBj)
355 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
356 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
357 real(r8),
intent(in) :: W(LBi:UBi,LBj:UBj,0:N(ng))
359 real(r8),
intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
360 real(r8),
intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
362# ifdef DIAGNOSTICS_UV
368 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
369 real(r8),
intent(inout) :: ad_Huon(LBi:UBi,LBj:UBj,N(ng))
370 real(r8),
intent(inout) :: ad_Hvom(LBi:UBi,LBj:UBj,N(ng))
371 real(r8),
intent(inout) :: ad_bustr(LBi:UBi,LBj:UBj)
372 real(r8),
intent(inout) :: ad_bvstr(LBi:UBi,LBj:UBj)
373 real(r8),
intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
374 real(r8),
intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
375 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
376 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
377 real(r8),
intent(inout) :: ad_W(LBi:UBi,LBj:UBj,0:N(ng))
379 real(r8),
intent(inout) :: ad_u_stokes(LBi:UBi,LBj:UBj,N(ng))
380 real(r8),
intent(inout) :: ad_v_stokes(LBi:UBi,LBj:UBj,N(ng))
381 real(r8),
intent(inout) :: ad_rulag3d(LBi:UBi,LBj:UBj,N(ng))
382 real(r8),
intent(inout) :: ad_rvlag3d(LBi:UBi,LBj:UBj,N(ng))
383 real(r8),
intent(inout) :: ad_rustr3d(LBi:UBi,LBj:UBj,N(ng))
384 real(r8),
intent(inout) :: ad_rvstr3d(LBi:UBi,LBj:UBj,N(ng))
386 real(r8),
intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
387 real(r8),
intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
389 real(r8),
intent(inout) :: ad_rufrc(LBi:UBi,LBj:UBj)
390 real(r8),
intent(inout) :: ad_rvfrc(LBi:UBi,LBj:UBj)
397 real(r8),
parameter :: Gadv = -0.25_r8
399 real(r8) :: cff, cff1, cff2, cff3, cff4
400 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3, ad_cff4
401 real(r8) :: adfac, adfac1, adfac2, adfac3, adfac4, adfac5
403 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
404 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
405 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
407 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_CF
408 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_DC
409 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
411 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Huee
412 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Huxx
413 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hvee
414 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Hvxx
415 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFx
416 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: UFe
417 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Uwrk
418 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFx
419 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: VFe
420 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vwrk
421 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: uee
422 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: uxx
423 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: vee
424 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: vxx
425 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
427 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Huee
428 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Huxx
429 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Hvee
430 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Hvxx
431 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFx
432 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_UFe
433 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Uwrk
434 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFx
435 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_VFe
436 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Vwrk
437 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_uee
438 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_uxx
439 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_vee
440 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_vxx
441 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_wrk
443# include "set_bounds.h"
481 j_loop :
DO j=jstr,jend
494 cff=om_v(i,j)*on_v(i,j)
495# ifdef DIAGNOSTICS_UV
499# ifdef WET_DRY_NOT_YET
502 ad_rvfrc(i,j)=ad_rvfrc(i,j)*vmask_wet(i,j)
506 ad_cff1=ad_cff1+ad_rvfrc(i,j)
507 ad_cff2=ad_cff2+ad_rvfrc(i,j)
510 ad_bvstr(i,j)=ad_bvstr(i,j)-cff*ad_cff2
514 ad_svstr(i,j)=ad_svstr(i,j)+cff*ad_cff1
520# ifdef DIAGNOSTICS_UV
546 ad_rv(i,j,k,nrhs)=ad_rv(i,j,k,nrhs)+ad_rvfrc(i,j)
547# ifdef WET_DRY_NOT_YET
550 ad_rv(i,j,k,nrhs)=ad_rv(i,j,k,nrhs)*vmask_wet(i,j)
555# ifdef DIAGNOSTICS_UV
559# if defined UV_VIS2 || defined UV_VIS4
579 ad_rv(i,j,1,nrhs)=ad_rv(i,j,1,nrhs)+ad_rvfrc(i,j)
581# ifdef WET_DRY_NOT_YET
584 ad_rv(i,j,1,nrhs)=ad_rv(i,j,1,nrhs)*vmask_wet(i,j)
590 cff=om_u(i,j)*on_u(i,j)
591# ifdef DIAGNOSTICS_UV
595# ifdef WET_DRY_NOT_YET
598 at_rufrc(i,j)=ad_rufrc(i,j)*umask_wet(i,j)
602 ad_cff1=ad_cff1+ad_rufrc(i,j)
603 ad_cff2=ad_cff2+ad_rufrc(i,j)
606 ad_bustr(i,j)=ad_bustr(i,j)-cff*ad_cff2
610 ad_sustr(i,j)=ad_sustr(i,j)+cff*ad_cff1
616# ifdef DIAGNOSTICS_UV
642 ad_ru(i,j,k,nrhs)=ad_ru(i,j,k,nrhs)+ad_rufrc(i,j)
643# ifdef WET_DRY_NOT_YET
646 ad_ru(i,j,k,nrhs)=ad_ru(i,j,k,nrhs)*umask_wet(i,j)
651# ifdef DIAGNOSTICS_UV
655# if defined UV_VIS2 || defined UV_VIS4
675 ad_ru(i,j,1,nrhs)=ad_ru(i,j,1,nrhs)+ad_rufrc(i,j)
677# ifdef WET_DRY_NOT_YET
680 ad_ru(i,j,1,nrhs)=ad_ru(i,j,1,nrhs)*umask_wet(i,j)
692# ifdef DIAGNOSTICS_UV
697 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
700 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_cff
701 ad_fc(i,k )=ad_fc(i,k )+ad_cff
714 dc(i,k)=(cff1*(hz(i,j ,k)+ &
716 & cff2*(hz(i,j+1,k)+ &
726 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
727 fc(i,k)=cff*dc(i,k+1)
728 cf(i,k)=cff*(6.0_r8*(v(i,j,k+1,nrhs)- &
730 & v_stokes(i,j,k )+ &
731 & v_stokes(i,j,k+1)- &
742 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
751 ad_fc(i,n(ng))=0.0_r8
783 adfac1=(cff1*(w(i,j ,k)+ &
785 & cff2*(w(i,j+1,k)+ &
786 & w(i,j-2,k)))*ad_fc(i,k)
787 adfac2=adfac1*dc(i,k)
788 adfac3=(v(i,j,k,nrhs)+ &
792 & dc(i,k)*(cff3*cf(i,k )+ &
793 & cff4*cf(i,k-1)))*ad_fc(i,k)
796 ad_dc(i,k)=ad_dc(i,k)+(cff3*cf(i,k )+ &
797 cff4*cf(i,k-1))*adfac1
798 ad_cf(i,k-1)=ad_cf(i,k-1)+cff4*adfac2
799 ad_cf(i,k )=ad_cf(i,k )+cff3*adfac2
800 ad_v(i,j,k,nrhs)=ad_v(i,j,k,nrhs)+adfac1
802 ad_v_stokes(i,j,k)=ad_v_stokes(i,j,k)+adfac1
804 ad_w(i,j-2,k)=ad_w(i,j-2,k)-adfac5
805 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac4
806 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac4
807 ad_w(i,j+1,k)=ad_w(i,j+1,k)-adfac5
819 ad_cf(i,k+1)=ad_cf(i,k+1)-fc(i,k)*ad_cf(i,k)
825 ad_cf(i,n(ng))=0.0_r8
829 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
844 ad_cf(i,k-1)=ad_cf(i,k-1)-dc(i,k)*adfac
845 ad_dc(i,k )=ad_dc(i,k )- &
846 & (cf(i,k-1)+2.0_r8*cf(i,k))*adfac
847 ad_dc(i,k+1)=ad_dc(i,k+1)- &
848 & (cf(i,k+1)+2.0_r8*cf(i,k))*adfac
849 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)-adfac1
850 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
852 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )-adfac1
853 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
872 adfac1=cff1*ad_dc(i,k)
873 adfac2=cff2*ad_dc(i,k)
874 ad_hz(i,j-2,k)=ad_hz(i,j-2,k)-adfac2
875 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
876 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
877 ad_hz(i,j+1,k)=ad_hz(i,j+1,k)-adfac2
881# elif defined UV_C2ADVECTION
891 ad_fc(i,n(ng))=0.0_r8
912 adfac=0.25_r8*ad_fc(i,k)
913 adfac1=adfac*(v(i,j,k ,nrhs)+ &
915 & v_stokes(i,j,k )+ &
916 & v_stokes(i,j,k+1)+ &
919 adfac2=adfac*(w(i,j ,k)+ &
921 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac1
922 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac1
923 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac2
924 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac2
926 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac2
927 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac2
932# elif defined UV_C4ADVECTION
972 & w(i,j-1,1))*ad_fc(i,1)
975 adfac3=(cff1*(v(i,j,1,nrhs)+ &
981 & cff2*(v(i,j,1,nrhs)+ &
986 & v(i,j,3,nrhs)))*ad_fc(i,1)
987 ad_w(i,j-1,1)=ad_w(i,j-1,1)+adfac3
988 ad_w(i,j ,1)=ad_w(i,j ,1)+adfac3
989 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac1-adfac2
990 ad_v(i,j,2,nrhs)=ad_v(i,j,2,nrhs)+adfac1
991 ad_v(i,j,3,nrhs)=ad_v(i,j,3,nrhs)-adfac2
993 ad_v_stokes(i,j,1)=ad_v_stokes(i,j,1)+adfac1-adfac2
994 ad_v_stokes(i,j,2)=ad_v_stokes(i,j,2)+adfac1
995 ad_v_stokes(i,j,3)=ad_v_stokes(i,j,3)-adfac2
1027 adfac=(w(i,j ,n(ng)-1)+ &
1028 & w(i,j-1,n(ng)-1))*ad_fc(i,n(ng)-1)
1031 adfac3=(cff1*(v(i,j,n(ng)-1,nrhs)+ &
1033 & v_stokes(i,j,n(ng)-1)+ &
1034 & v_stokes(i,j,n(ng) )+ &
1036 & v(i,j,n(ng) ,nrhs))- &
1037 & cff2*(v(i,j,n(ng)-2,nrhs)+ &
1039 & v_stokes(i,j,n(ng)-2)+ &
1040 & v_stokes(i,j,n(ng) )+ &
1042 & v(i,j,n(ng) ,nrhs)))*ad_fc(i,n(ng)-1)
1043 ad_w(i,j-1,n(ng)-1)=ad_w(i,j-1,n(ng)-1)+adfac3
1044 ad_w(i,j ,n(ng)-1)=ad_w(i,j ,n(ng)-1)+adfac3
1045 ad_v(i,j,n(ng)-2,nrhs)=ad_v(i,j,n(ng)-2,nrhs)-adfac2
1046 ad_v(i,j,n(ng)-1,nrhs)=ad_v(i,j,n(ng)-1,nrhs)+adfac1
1047 ad_v(i,j,n(ng) ,nrhs)=ad_v(i,j,n(ng) ,nrhs)+adfac1-adfac2
1049 ad_v_stokes(i,j,n(ng)-2)=ad_v_stokes(i,j,n(ng)-2)-adfac2
1050 ad_v_stokes(i,j,n(ng)-1)=ad_v_stokes(i,j,n(ng)-1)+adfac1
1051 ad_v_stokes(i,j,n(ng) )=ad_v_stokes(i,j,n(ng) )+adfac1- &
1054 ad_fc(i,n(ng)-1)=0.0_r8
1057 ad_fc(i,n(ng))=0.0_r8
1091 & w(i,j-1,k))*ad_fc(i,k)
1094 adfac3=(cff1*(v(i,j,k ,nrhs)+ &
1096 & v_stokes(i,j,k )+ &
1097 & v_stokes(i,j,k+1)+ &
1099 & v(i,j,k+1,nrhs))- &
1100 & cff2*(v(i,j,k-1,nrhs)+ &
1102 & v_stokes(i,j,k-1)+ &
1103 & v_stokes(i,j,k+2)+ &
1105 & v(i,j,k+2,nrhs)))*ad_fc(i,k)
1106 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac3
1107 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac3
1108 ad_v(i,j,k-1,nrhs)=ad_v(i,j,k-1,nrhs)-adfac2
1109 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac1
1110 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
1111 ad_v(i,j,k+2,nrhs)=ad_v(i,j,k+2,nrhs)-adfac2
1113 ad_v_stokes(i,j,k-1)=ad_v_stokes(i,j,k-1)-adfac2
1114 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac1
1115 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
1116 ad_v_stokes(i,j,k+2)=ad_v_stokes(i,j,k+2)-adfac2
1164 adfac=(cff1*(w(i,j ,1)+ &
1166 & cff2*(w(i,j+1,1)+ &
1167 & w(i,j-2,1)))*ad_fc(i,1)
1170 adfac=(cff1*(v(i,j,1,nrhs)+ &
1172 & v_stokes(i,j,1)+ &
1173 & v_stokes(i,j,2)+ &
1176 & cff2*(v(i,j,1,nrhs)+ &
1178 & v_stokes(i,j,1)+ &
1179 & v_stokes(i,j,3)+ &
1181 & v(i,j,3,nrhs)))*ad_fc(i,1)
1184 ad_w(i,j-2,1)=ad_w(i,j-2,1)-adfac4
1185 ad_w(i,j-1,1)=ad_w(i,j-1,1)+adfac3
1186 ad_w(i,j ,1)=ad_w(i,j ,1)+adfac3
1187 ad_w(i,j+1,1)=ad_w(i,j+1,1)-adfac4
1188 ad_v(i,j,1,nrhs)=ad_v(i,j,1,nrhs)+adfac1-adfac2
1189 ad_v(i,j,2,nrhs)=ad_v(i,j,2,nrhs)+adfac1
1190 ad_v(i,j,3,nrhs)=ad_v(i,j,3,nrhs)-adfac2
1192 ad_v_stokes(i,j,1)=ad_v_stokes(i,j,1)+adfac1-adfac2
1193 ad_v_stokes(i,j,2)=ad_v_stokes(i,j,2)+adfac1
1194 ad_v_stokes(i,j,3)=ad_v_stokes(i,j,3)-adfac2
1230 adfac=(cff1*(w(i,j ,n(ng)-1)+ &
1231 & w(i,j-1,n(ng)-1))- &
1232 & cff2*(w(i,j+1,n(ng)-1)+ &
1233 & w(i,j-2,n(ng)-1)))*ad_fc(i,n(ng)-1)
1236 adfac=(cff1*(v(i,j,n(ng)-1,nrhs)+ &
1238 & v_stokes(i,j,n(ng)-1)+ &
1239 & v_stokes(i,j,n(ng) )+ &
1241 & v(i,j,n(ng) ,nrhs))- &
1242 & cff2*(v(i,j,n(ng)-2,nrhs)+ &
1244 & v_stokes(i,j,n(ng)-2)+ &
1245 & v_stokes(i,j,n(ng) )+ &
1247 & v(i,j,n(ng) ,nrhs)))*ad_fc(i,n(ng)-1)
1250 ad_w(i,j-2,n(ng)-1)=ad_w(i,j-2,n(ng)-1)-adfac4
1251 ad_w(i,j-1,n(ng)-1)=ad_w(i,j-1,n(ng)-1)+adfac3
1252 ad_w(i,j ,n(ng)-1)=ad_w(i,j ,n(ng)-1)+adfac3
1253 ad_w(i,j+1,n(ng)-1)=ad_w(i,j+1,n(ng)-1)-adfac4
1254 ad_v(i,j,n(ng)-2,nrhs)=ad_v(i,j,n(ng)-2,nrhs)-adfac2
1255 ad_v(i,j,n(ng)-1,nrhs)=ad_v(i,j,n(ng)-1,nrhs)+adfac1
1256 ad_v(i,j,n(ng) ,nrhs)=ad_v(i,j,n(ng) ,nrhs)+adfac1-adfac2
1258 ad_v_stokes(i,j,n(ng)-2)=ad_v_stokes(i,j,n(ng)-2)-adfac2
1259 ad_v_stokes(i,j,n(ng)-1)=ad_v_stokes(i,j,n(ng)-1)+adfac1
1260 ad_v_stokes(i,j,n(ng) )=ad_v_stokes(i,j,n(ng) )+adfac1- &
1263 ad_fc(i,n(ng)-1)=0.0_r8
1266 ad_fc(i,n(ng))=0.0_r8
1303 adfac=(cff1*(w(i,j ,k)+ &
1305 & cff2*(w(i,j+1,k)+ &
1306 & w(i,j-2,k)))*ad_fc(i,k)
1309 adfac=(cff1*(v(i,j,k ,nrhs)+ &
1311 & v_stokes(i,j,k )+ &
1312 & v_stokes(i,j,k+1)+ &
1314 & v(i,j,k+1,nrhs))- &
1315 & cff2*(v(i,j,k-1,nrhs)+ &
1317 & v_stokes(i,j,k-1)+ &
1318 & v_stokes(i,j,k+2)+ &
1320 & v(i,j,k+2,nrhs)))*ad_fc(i,k)
1323 ad_w(i,j-2,k)=ad_w(i,j-2,k)-adfac4
1324 ad_w(i,j-1,k)=ad_w(i,j-1,k)+adfac3
1325 ad_w(i,j ,k)=ad_w(i,j ,k)+adfac3
1326 ad_w(i,j+1,k)=ad_w(i,j+1,k)-adfac4
1327 ad_v(i,j,k-1,nrhs)=ad_v(i,j,k-1,nrhs)-adfac2
1328 ad_v(i,j,k ,nrhs)=ad_v(i,j,k ,nrhs)+adfac1
1329 ad_v(i,j,k+1,nrhs)=ad_v(i,j,k+1,nrhs)+adfac1
1330 ad_v(i,j,k+2,nrhs)=ad_v(i,j,k+2,nrhs)-adfac2
1332 ad_v_stokes(i,j,k-1)=ad_v_stokes(i,j,k-1)-adfac2
1333 ad_v_stokes(i,j,k )=ad_v_stokes(i,j,k )+adfac1
1334 ad_v_stokes(i,j,k+1)=ad_v_stokes(i,j,k+1)+adfac1
1335 ad_v_stokes(i,j,k+2)=ad_v_stokes(i,j,k+2)-adfac2
1349# ifdef DIAGNOSTICS_UV
1354 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
1357 ad_fc(i,k-1)=ad_fc(i,k-1)-ad_cff
1358 ad_fc(i,k )=ad_fc(i,k )+ad_cff
1362# ifdef UV_SADVECTION
1371 dc(i,k)=cff1*(hz(i ,j,k)+ &
1373 & cff2*(hz(i+1,j,k)+ &
1383 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1384 fc(i,k)=cff*dc(i,k+1)
1385 cf(i,k)=cff*(6.0_r8*(u(i,j,k+1,nrhs)- &
1387 & u_stokes(i,j,k )+ &
1388 & u_stokes(i,j,k+1)- &
1390 & u(i,j,k ,nrhs))- &
1391 & dc(i,k)*cf(i,k-1))
1399 cf(i,k)=cf(i,k)-fc(i,k)*cf(i,k+1)
1408 ad_fc(i,n(ng))=0.0_r8
1440 adfac1=(cff1*(w(i ,j,k)+ &
1442 & cff2*(w(i+1,j,k)+ &
1443 & w(i-2,j,k)))*ad_fc(i,k)
1444 adfac2=adfac1*dc(i,k)
1445 adfac3=(u(i,j,k,nrhs)+ &
1447 & u_stokes(i,j,k)+ &
1449 & dc(i,k)*(cff3*cf(i,k )+ &
1450 & cff4*cf(i,k-1)))*ad_fc(i,k)
1453 ad_dc(i,k)=ad_dc(i,k)+(cff3*cf(i,k )+ &
1454 & cff4*cf(i,k-1))*adfac1
1455 ad_cf(i,k-1)=ad_cf(i,k-1)+cff4*adfac2
1456 ad_cf(i,k )=ad_cf(i,k )+cff3*adfac2
1457 ad_u(i,j,k,nrhs)=ad_u(i,j,k,nrhs)+adfac1
1459 ad_u_stokes(i,j,k)=ad_u_stokes(i,j,k)+adfac1
1461 ad_w(i-2,j,k)=ad_w(i-2,j,k)-adfac5
1462 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac4
1463 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac4
1464 ad_w(i+1,j,k)=ad_w(i+1,j,k)-adfac5
1476 ad_cf(i,k+1)=ad_cf(i,k+1)-fc(i,k)*ad_cf(i,k)
1486 cff=1.0_r8/(2.0_r8*dc(i,k+1)+dc(i,k)*(2.0_r8-fc(i,k-1)))
1498 adfac=cff*ad_cf(i,k)
1500 ad_cf(i,k-1)=ad_cf(i,k-1)-dc(i,k)*adfac
1501 ad_dc(i,k )=ad_dc(i,k )- &
1502 & (cf(i,k-1)+2.0_r8*cf(i,k))*adfac
1503 ad_dc(i,k+1)=ad_dc(i,k+1)- &
1504 & (cf(i,k+1)+2.0_r8*cf(i,k))*adfac
1505 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)-adfac1
1506 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1508 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )-adfac1
1509 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1528 adfac1=cff1*ad_dc(i,k)
1529 adfac2=cff2*ad_dc(i,k)
1530 ad_hz(i-2,j,k)=ad_hz(i-2,j,k)-adfac2
1531 ad_hz(i+1,j,k)=ad_hz(i+1,j,k)-adfac2
1532 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
1533 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
1537# elif defined UV_C2ADVECTION
1547 ad_fc(i,n(ng))=0.0_r8
1568 adfac=0.25_r8*ad_fc(i,k)
1569 adfac1=adfac*(u(i,j,k ,nrhs)+ &
1571 & u_stokes(i,j,k )+ &
1572 & u_stokes(i,j,k+1)+ &
1575 adfac2=adfac*(w(i ,j,k)+ &
1577 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac1
1578 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac1
1579 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac2
1580 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac2
1582 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac2
1583 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac2
1588# elif defined UV_C4ADVECTION
1628 & w(i-1,j,1))*ad_fc(i,1)
1631 adfac3=(cff1*(u(i,j,1,nrhs)+ &
1633 & u_stokes(i,j,1)+ &
1634 & u_stokes(i,j,2)+ &
1637 & cff2*(u(i,j,1,nrhs)+ &
1639 & u_stokes(i,j,1)+ &
1640 & u_stokes(i,j,3)+ &
1642 & u(i,j,3,nrhs)))*ad_fc(i,1)
1643 ad_w(i-1,j,1)=ad_w(i-1,j,1)+adfac3
1644 ad_w(i ,j,1)=ad_w(i ,j,1)+adfac3
1645 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac1-adfac2
1646 ad_u(i,j,2,nrhs)=ad_u(i,j,2,nrhs)+adfac1
1647 ad_u(i,j,3,nrhs)=ad_u(i,j,3,nrhs)-adfac2
1649 ad_u_stokes(i,j,1)=ad_u_stokes(i,j,1)+adfac1-adfac2
1650 ad_u_stokes(i,j,2)=ad_u_stokes(i,j,2)+adfac1
1651 ad_u_stokes(i,j,3)=ad_u_stokes(i,j,3)-adfac2
1683 adfac=(w(i ,j,n(ng)-1)+ &
1684 & w(i-1,j,n(ng)-1))*ad_fc(i,n(ng)-1)
1687 adfac3=(cff1*(u(i,j,n(ng)-1,nrhs)+ &
1689 & u_stokes(i,j,n(ng)-1)+ &
1690 & u_stokes(i,j,n(ng) )+ &
1692 & u(i,j,n(ng) ,nrhs))- &
1693 & cff2*(u(i,j,n(ng)-2,nrhs)+ &
1695 & u_stokes(i,j,n(ng)-2)+ &
1696 & u_stokes(i,j,n(ng) )+ &
1698 & u(i,j,n(ng) ,nrhs)))*ad_fc(i,n(ng)-1)
1699 ad_w(i ,j,n(ng)-1)=ad_w(i ,j,n(ng)-1)+adfac3
1700 ad_w(i-1,j,n(ng)-1)=ad_w(i-1,j,n(ng)-1)+adfac3
1701 ad_u(i,j,n(ng)-2,nrhs)=ad_u(i,j,n(ng)-2,nrhs)-adfac2
1702 ad_u(i,j,n(ng)-1,nrhs)=ad_u(i,j,n(ng)-1,nrhs)+adfac1
1703 ad_u(i,j,n(ng) ,nrhs)=ad_u(i,j,n(ng) ,nrhs)+adfac1-adfac2
1705 ad_u_stokes(i,j,n(ng)-2)=ad_u_stokes(i,j,n(ng)-2)-adfac2
1706 ad_u_stokes(i,j,n(ng)-1)=ad_u_stokes(i,j,n(ng)-1)+adfac1
1707 ad_u_stokes(i,j,n(ng) )=ad_u_stokes(i,j,n(ng) )+adfac1- &
1710 ad_fc(i,n(ng)-1)=0.0_r8
1713 ad_fc(i,n(ng))=0.0_r8
1747 & w(i-1,j,k))*ad_fc(i,k)
1750 adfac3=(cff1*(u(i,j,k ,nrhs)+ &
1752 & u_stokes(i,j,k )+ &
1753 & u_stokes(i,j,k+1)+ &
1755 & u(i,j,k+1,nrhs))- &
1756 & cff2*(u(i,j,k-1,nrhs)+ &
1758 & u_stokes(i,j,k-1)+ &
1759 & u_stokes(i,j,k+2)+ &
1761 & u(i,j,k+2,nrhs)))*ad_fc(i,k)
1762 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac3
1763 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac3
1764 ad_u(i,j,k-1,nrhs)=ad_u(i,j,k-1,nrhs)-adfac2
1765 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac1
1766 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1767 ad_u(i,j,k+2,nrhs)=ad_u(i,j,k+2,nrhs)-adfac2
1769 ad_u_stokes(i,j,k-1)=ad_u_stokes(i,j,k-1)-adfac2
1770 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac1
1771 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1772 ad_u_stokes(i,j,k+2)=ad_u_stokes(i,j,k+2)-adfac2
1820 adfac=(cff1*(w(i ,j,1)+ &
1822 & cff2*(w(i+1,j,1)+ &
1823 & w(i-2,j,1)))*ad_fc(i,1)
1826 adfac=(cff1*(u(i,j,1,nrhs)+ &
1828 & u_stokes(i,j,1)+ &
1829 & u_stokes(i,j,2)+ &
1832 & cff2*(u(i,j,1,nrhs)+ &
1834 & u_stokes(i,j,1)+ &
1835 & u_stokes(i,j,3)+ &
1837 & u(i,j,3,nrhs)))*ad_fc(i,1)
1840 ad_w(i-2,j,1)=ad_w(i-2,j,1)-adfac4
1841 ad_w(i-1,j,1)=ad_w(i-1,j,1)+adfac3
1842 ad_w(i ,j,1)=ad_w(i ,j,1)+adfac3
1843 ad_w(i+1,j,1)=ad_w(i+1,j,1)-adfac4
1844 ad_u(i,j,1,nrhs)=ad_u(i,j,1,nrhs)+adfac1-adfac2
1845 ad_u(i,j,2,nrhs)=ad_u(i,j,2,nrhs)+adfac1
1846 ad_u(i,j,3,nrhs)=ad_u(i,j,3,nrhs)-adfac2
1848 ad_u_stokes(i,j,1)=ad_u_stokes(i,j,1)+adfac1-adfac2
1849 ad_u_stokes(i,j,2)=ad_u_stokes(i,j,2)+adfac1
1850 ad_u_stokes(i,j,3)=ad_u_stokes(i,j,3)-adfac2
1886 adfac=(cff1*(w(i ,j,n(ng)-1)+ &
1887 & w(i-1,j,n(ng)-1))- &
1888 & cff2*(w(i+1,j,n(ng)-1)+ &
1889 & w(i-2,j,n(ng)-1)))*ad_fc(i,n(ng)-1)
1892 adfac=(cff1*(u(i,j,n(ng)-1,nrhs)+ &
1894 & u_stokes(i,j,n(ng)-1)+ &
1895 & u_stokes(i,j,n(ng) )+ &
1897 & u(i,j,n(ng) ,nrhs))- &
1898 & cff2*(u(i,j,n(ng)-2,nrhs)+ &
1900 & u_stokes(i,j,n(ng)-2)+ &
1901 & u_stokes(i,j,n(ng) )+ &
1903 & u(i,j,n(ng) ,nrhs)))*ad_fc(i,n(ng)-1)
1906 ad_w(i-2,j,n(ng)-1)=ad_w(i-2,j,n(ng)-1)-adfac4
1907 ad_w(i-1,j,n(ng)-1)=ad_w(i-1,j,n(ng)-1)+adfac3
1908 ad_w(i ,j,n(ng)-1)=ad_w(i ,j,n(ng)-1)+adfac3
1909 ad_w(i+1,j,n(ng)-1)=ad_w(i+1,j,n(ng)-1)-adfac4
1910 ad_u(i,j,n(ng)-2,nrhs)=ad_u(i,j,n(ng)-2,nrhs)-adfac2
1911 ad_u(i,j,n(ng)-1,nrhs)=ad_u(i,j,n(ng)-1,nrhs)+adfac1
1912 ad_u(i,j,n(ng) ,nrhs)=ad_u(i,j,n(ng) ,nrhs)+adfac1-adfac2
1914 ad_u_stokes(i,j,n(ng)-2)=ad_u_stokes(i,j,n(ng)-2)-adfac2
1915 ad_u_stokes(i,j,n(ng)-1)=ad_u_stokes(i,j,n(ng)-1)+adfac1
1916 ad_u_stokes(i,j,n(ng) )=ad_u_stokes(i,j,n(ng) )+adfac1- &
1919 ad_fc(i,n(ng)-1)=0.0_r8
1922 ad_fc(i,n(ng))=0.0_r8
1959 adfac=(cff1*(w(i ,j,k)+ &
1961 & cff2*(w(i+1,j,k)+ &
1962 & w(i-2,j,k)))*ad_fc(i,k)
1965 adfac=(cff1*(u(i,j,k ,nrhs)+ &
1967 & u_stokes(i,j,k )+ &
1968 & u_stokes(i,j,k+1)+ &
1970 & u(i,j,k+1,nrhs))- &
1971 & cff2*(u(i,j,k-1,nrhs)+ &
1973 & u_stokes(i,j,k-1)+ &
1974 & u_stokes(i,j,k+2)+ &
1976 & u(i,j,k+2,nrhs)))*ad_fc(i,k)
1979 ad_w(i-2,j,k)=ad_w(i-2,j,k)-adfac4
1980 ad_w(i-1,j,k)=ad_w(i-1,j,k)+adfac3
1981 ad_w(i ,j,k)=ad_w(i ,j,k)+adfac3
1982 ad_w(i+1,j,k)=ad_w(i+1,j,k)-adfac4
1983 ad_u(i,j,k-1,nrhs)=ad_u(i,j,k-1,nrhs)-adfac2
1984 ad_u(i,j,k ,nrhs)=ad_u(i,j,k ,nrhs)+adfac1
1985 ad_u(i,j,k+1,nrhs)=ad_u(i,j,k+1,nrhs)+adfac1
1986 ad_u(i,j,k+2,nrhs)=ad_u(i,j,k+2,nrhs)-adfac2
1988 ad_u_stokes(i,j,k-1)=ad_u_stokes(i,j,k-1)-adfac2
1989 ad_u_stokes(i,j,k )=ad_u_stokes(i,j,k )+adfac1
1990 ad_u_stokes(i,j,k+1)=ad_u_stokes(i,j,k+1)+adfac1
1991 ad_u_stokes(i,j,k+2)=ad_u_stokes(i,j,k+2)-adfac2
2000 k_loop :
DO k=1,n(ng)
2014 ad_rvstr3d(i,j,k)=ad_rvstr3d(i,j,k)- &
2015 & om_v(i,j)*on_v(i,j)*ad_rv(i,j,k,nrhs)
2016 ad_rvlag3d(i,j,k)=ad_rvlag3d(i,j,k)-ad_rv(i,j,k,nrhs)
2025 ad_rustr3d(i,j,k)=ad_rustr3d(i,j,k)- &
2026 & om_u(i,j)*on_u(i,j)*ad_ru(i,j,k,nrhs)
2027 ad_rulag3d(i,j,k)=ad_rulag3d(i,j,k)-ad_ru(i,j,k,nrhs)
2042# ifdef DIAGNOSTICS_UV
2055 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
2058 ad_cff1=ad_cff1+ad_cff
2059 ad_cff2=ad_cff2+ad_cff
2063 ad_vfe(i,j-1)=ad_vfe(i,j-1)-ad_cff2
2064 ad_vfe(i,j )=ad_vfe(i,j )+ad_cff2
2068 ad_vfx(i ,j)=ad_vfx(i ,j)-ad_cff1
2069 ad_vfx(i+1,j)=ad_vfx(i+1,j)+ad_cff1
2075# ifdef DIAGNOSTICS_UV
2088 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
2091 ad_cff1=ad_cff1+ad_cff
2092 ad_cff2=ad_cff2+ad_cff
2096 ad_ufe(i,j )=ad_ufe(i,j )-ad_cff2
2097 ad_ufe(i,j+1)=ad_ufe(i,j+1)+ad_cff2
2101 ad_ufx(i-1,j)=ad_ufx(i-1,j)-ad_cff1
2102 ad_ufx(i ,j)=ad_ufx(i ,j)+ad_cff1
2106# ifdef UV_C2ADVECTION
2130 adfac=0.25_r8*ad_vfe(i,j)
2131 adfac1=adfac*(v(i,j ,k,nrhs)+ &
2133 & v_stokes(i,j ,k)+ &
2134 & v_stokes(i,j+1,k)+ &
2137 adfac2=adfac*(hvom(i,j ,k)+ &
2139 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2140 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2141 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac2
2142 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac2
2144 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac2
2145 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac2
2170 adfac=0.25_r8*ad_vfx(i,j)
2171 adfac1=adfac*(v(i-1,j,k,nrhs)+ &
2173 & v_stokes(i-1,j,k)+ &
2174 & v_stokes(i ,j,k)+ &
2177 adfac2=adfac*(huon(i,j-1,k)+ &
2179 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+adfac1
2180 ad_huon(i,j ,k)=ad_huon(i,j ,k)+adfac1
2181 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+adfac2
2182 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+adfac2
2184 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+adfac2
2185 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+adfac2
2210 adfac=0.25_r8*ad_ufe(i,j)
2211 adfac1=adfac*(u(i,j-1,k,nrhs)+ &
2213 & u_stokes(i,j-1,k)+ &
2214 & u_stokes(i,j ,k)+ &
2217 adfac2=adfac*(hvom(i-1,j,k)+ &
2219 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+adfac1
2220 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+adfac1
2221 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+adfac2
2222 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+adfac2
2224 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+adfac2
2225 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+adfac2
2250 adfac=0.25_r8*ad_ufx(i,j)
2251 adfac1=adfac*(u(i ,j,k,nrhs)+ &
2253 & u_stokes(i ,j,k)+ &
2254 & u_stokes(i+1,j,k)+ &
2257 adfac2=adfac*(huon(i ,j,k)+ &
2259 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
2260 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
2261 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac2
2262 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac2
2264 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac2
2265 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac2
2272# ifdef UV_C4ADVECTION
2281 vee(i,j)=v(i,j-1,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
2283 & v_stokes(i,j-1,k)-2.0_r8*v_stokes(i,j,k)+ &
2284 & v_stokes(i,j+1,k)+ &
2287 hvee(i,j)=hvom(i,j-1,k)-2.0_r8*hvom(i,j,k)+hvom(i,j+1,k)
2291 IF (
domain(ng)%Southern_Edge(tile))
THEN
2293 vee(i,jstr)=vee(i,jstr+1)
2294 hvee(i,jstr)=hvee(i,jstr+1)
2299 IF (
domain(ng)%Northern_Edge(tile))
THEN
2301 vee(i,jend+1)=vee(i,jend)
2302 hvee(i,jend+1)=hvee(i,jend)
2306# ifdef UV_C4ADVECTION
2335 adfac=0.25_r8*ad_vfe(i,j)
2336 adfac1=adfac*(v(i,j ,k,nrhs)+ &
2338 & v_stokes(i,j ,k)+ &
2339 & v_stokes(i,j+1,k)+ &
2341 & v(i,j+1,k,nrhs)- &
2345 adfac3=adfac*(hvom(i,j ,k)+ &
2347 & cff*(hvee(i,j )+ &
2350 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2351 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2352 ad_hvee(i,j )=ad_hvee(i,j )-adfac2
2353 ad_hvee(i,j+1)=ad_hvee(i,j+1)-adfac2
2354 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac3
2355 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac3
2357 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac3
2358 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac3
2360 ad_vee(i,j )=ad_vee(i,j )-adfac4
2361 ad_vee(i,j+1)=ad_vee(i,j+1)-adfac4
2368 cff1=v(i,j ,k,nrhs)+ &
2370 & v_stokes(i,j ,k)+ &
2371 & v_stokes(i,j+1,k)+ &
2374 IF (cff1.gt.0.0_r8)
THEN
2391 adfac=0.25_r8*ad_vfe(i,j)
2392 adfac1=adfac*(cff1+gadv*cff)
2393 adfac2=adfac1*gadv*0.5_r8
2394 adfac3=adfac*(hvom(i,j ,k)+ &
2396 & gadv*0.5_r8*(hvee(i,j )+ &
2398 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)+adfac1
2399 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+adfac1
2400 ad_hvee(i,j )=ad_hvee(i,j )+adfac2
2401 ad_hvee(i,j+1)=ad_hvee(i,j+1)+adfac2
2402 ad_cff=ad_cff+gadv*adfac3
2403 ad_cff1=ad_cff1+adfac3
2405 IF (cff1.gt.0.0_r8)
THEN
2408 ad_vee(i,j)=ad_vee(i,j)+ad_cff
2413 ad_vee(i,j+1)=ad_vee(i,j+1)+ad_cff
2423 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+ad_cff1
2424 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+ad_cff1
2426 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+ad_cff1
2427 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+ad_cff1
2434 IF (
domain(ng)%Northern_Edge(tile))
THEN
2438 ad_hvee(i,jend)=ad_hvee(i,jend)+ad_hvee(i,jend+1)
2439 ad_hvee(i,jend+1)=0.0_r8
2442 ad_vee(i,jend)=ad_vee(i,jend)+ad_vee(i,jend+1)
2443 ad_vee(i,jend+1)=0.0_r8
2448 IF (
domain(ng)%Southern_Edge(tile))
THEN
2452 ad_hvee(i,jstr+1)=ad_hvee(i,jstr+1)+ad_hvee(i,jstr)
2453 ad_hvee(i,jstr)=0.0_r8
2456 ad_vee(i,jstr+1)=ad_vee(i,jstr+1)+ad_vee(i,jstr)
2457 ad_vee(i,jstr)=0.0_r8
2466 ad_hvom(i,j-1,k)=ad_hvom(i,j-1,k)+ad_hvee(i,j)
2467 ad_hvom(i,j ,k)=ad_hvom(i,j ,k)-2.0_r8*ad_hvee(i,j)
2468 ad_hvom(i,j+1,k)=ad_hvom(i,j+1,k)+ad_hvee(i,j)
2477 ad_v(i,j-1,k,nrhs)=ad_v(i,j-1,k,nrhs)+ad_vee(i,j)
2478 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)-2.0_r8*ad_vee(i,j)
2479 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+ad_vee(i,j)
2481 ad_v_stokes(i,j-1,k)=ad_v_stokes(i,j-1,k)+ad_vee(i,j)
2482 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)-2.0_r8*ad_vee(i,j)
2483 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+ad_vee(i,j)
2490 vxx(i,j)=v(i-1,j,k,nrhs)-2.0_r8*v(i,j,k,nrhs)+ &
2492 & v_stokes(i-1,j,k)-2.0_r8*v_stokes(i,j,k)+ &
2493 & v_stokes(i+1,j,k)+ &
2499 IF (
domain(ng)%Western_Edge(tile))
THEN
2501 vxx(istr-1,j)=vxx(istr,j)
2506 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2508 vxx(iend+1,j)=vxx(iend,j)
2514 huee(i,j)=huon(i,j-1,k)-2.0_r8*huon(i,j,k)+huon(i,j+1,k)
2517# ifdef UV_C4ADVECTION
2546 adfac=0.25_r8*ad_vfx(i,j)
2547 adfac1=adfac*(v(i ,j,k,nrhs)+ &
2549 & v_stokes(i ,j,k)+ &
2550 & v_stokes(i-1,j,k)+ &
2552 & v(i-1,j,k,nrhs)- &
2556 adfac3=adfac*(huon(i,j ,k)+ &
2558 & cff*(huee(i,j )+ &
2561 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+adfac1
2562 ad_huon(i,j ,k)=ad_huon(i,j ,k)+adfac1
2563 ad_huee(i,j )=ad_huee(i,j )-adfac2
2564 ad_huee(i,j-1)=ad_huee(i,j-1)-adfac2
2565 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+adfac3
2566 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+adfac3
2568 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+adfac3
2569 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+adfac3
2571 ad_vxx(i-1,j)=ad_vxx(i-1,j)-adfac4
2572 ad_vxx(i ,j)=ad_vxx(i ,j)-adfac4
2579 cff1=v(i ,j,k,nrhs)+ &
2581 & v_stokes(i ,j,k)+ &
2582 & v_stokes(i-1,j,k)+ &
2585 cff2=huon(i,j,k)+huon(i,j-1,k)
2586 IF (cff2.gt.0.0_r8)
THEN
2599 adfac=0.25_r8*ad_vfx(i,j)
2600 adfac1=adfac*(cff1+gadv*cff)
2601 adfac2=adfac1*gadv*0.5_r8
2602 adfac3=adfac*(cff2+gadv*0.5_r8*(huee(i,j )+ &
2604 ad_huee(i,j-1)=ad_huee(i,j-1)+adfac2
2605 ad_huee(i,j )=ad_huee(i,j )+adfac2
2606 ad_cff2=ad_cff2+adfac1
2607 ad_cff1=ad_cff1+adfac3
2608 ad_cff=ad_cff+gadv*adfac3
2610 IF (cff2.gt.0.0_r8)
THEN
2613 ad_vxx(i-1,j)=ad_vxx(i-1,j)+ad_cff
2618 ad_vxx(i,j)=ad_vxx(i,j)+ad_cff
2623 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+ad_cff2
2624 ad_huon(i,j ,k)=ad_huon(i,j ,k)+ad_cff2
2633 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+ad_cff1
2634 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)+ad_cff1
2636 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+ad_cff1
2637 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)+ad_cff1
2648 ad_huon(i,j-1,k)=ad_huon(i,j-1,k)+ad_huee(i,j)
2649 ad_huon(i,j ,k)=ad_huon(i,j ,k)-2.0_r8*ad_huee(i,j)
2650 ad_huon(i,j+1,k)=ad_huon(i,j+1,k)+ad_huee(i,j)
2655 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2659 ad_vxx(iend,j)=ad_vxx(iend,j)+ad_vxx(iend+1,j)
2660 ad_vxx(iend+1,j)=0.0_r8
2665 IF (
domain(ng)%Western_Edge(tile))
THEN
2669 ad_vxx(istr,j)=ad_vxx(istr,j)+ad_vxx(istr-1,j)
2670 ad_vxx(istr-1,j)=0.0_r8
2683 ad_v(i-1,j,k,nrhs)=ad_v(i-1,j,k,nrhs)+ad_vxx(i,j)
2684 ad_v(i ,j,k,nrhs)=ad_v(i ,j,k,nrhs)-2.0_r8*ad_vxx(i,j)
2685 ad_v(i+1,j,k,nrhs)=ad_v(i+1,j,k,nrhs)+ad_vxx(i,j)
2687 ad_v_stokes(i-1,j,k)=ad_v_stokes(i-1,j,k)+ad_vxx(i,j)
2688 ad_v_stokes(i ,j,k)=ad_v_stokes(i ,j,k)-2.0_r8*ad_vxx(i,j)
2689 ad_v_stokes(i+1,j,k)=ad_v_stokes(i+1,j,k)+ad_vxx(i,j)
2696 uee(i,j)=u(i,j-1,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
2698 & u_stokes(i,j-1,k)-2.0_r8*u_stokes(i,j,k)+ &
2699 & u_stokes(i,j+1,k)+ &
2705 IF (
domain(ng)%Southern_Edge(tile))
THEN
2707 uee(i,jstr-1)=uee(i,jstr)
2712 IF (
domain(ng)%Northern_Edge(tile))
THEN
2714 uee(i,jend+1)=uee(i,jend)
2720 hvxx(i,j)=hvom(i-1,j,k)-2.0_r8*hvom(i,j,k)+hvom(i+1,j,k)
2723# ifdef UV_C4ADVECTION
2755 adfac=0.25_r8*ad_ufe(i,j)
2756 adfac1=adfac*(u(i,j ,k,nrhs)+ &
2758 & u_stokes(i,j ,k)+ &
2759 & u_stokes(i,j-1,k)+ &
2761 & u(i,j-1,k,nrhs)- &
2765 adfac3=adfac*(hvom(i ,j,k)+ &
2767 & cff*(hvxx(i ,j)+ &
2770 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+adfac1
2771 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+adfac1
2772 ad_hvxx(i-1,j)=ad_hvxx(i-1,j)-adfac2
2773 ad_hvxx(i ,j)=ad_hvxx(i ,j)-adfac2
2774 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+adfac3
2775 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+adfac3
2777 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+adfac3
2778 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+adfac3
2780 ad_uee(i,j-1)=ad_uee(i,j-1)-adfac4
2781 ad_uee(i,j )=ad_uee(i,j )-adfac4
2792 cff1=u(i,j ,k,nrhs)+ &
2794 & u_stokes(i,j ,k)+ &
2795 & u_stokes(i,j-1,k)+ &
2798 cff2=hvom(i,j,k)+hvom(i-1,j,k)
2799 IF (cff2.gt.0.0_r8)
THEN
2812 adfac=0.25_r8*ad_ufe(i,j)
2813 adfac1=adfac*(cff1+gadv*cff)
2814 adfac2=adfac1*gadv*0.5_r8
2815 adfac3=adfac*(cff2+gadv*0.5_r8*(hvxx(i ,j)+ &
2817 ad_hvxx(i-1,j)=ad_hvxx(i-1,j)+adfac2
2818 ad_hvxx(i ,j)=ad_hvxx(i ,j)+adfac2
2819 ad_cff2=ad_cff2+adfac1
2820 ad_cff1=ad_cff1+adfac3
2821 ad_cff=ad_cff+gadv*adfac3
2823 IF (cff2.gt.0.0_r8)
THEN
2826 ad_uee(i,j-1)=ad_uee(i,j-1)+ad_cff
2831 ad_uee(i,j)=ad_uee(i,j)+ad_cff
2836 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+ad_cff2
2837 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)+ad_cff2
2846 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+ad_cff1
2847 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)+ad_cff1
2849 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+ad_cff1
2850 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)+ad_cff1
2861 ad_hvom(i-1,j,k)=ad_hvom(i-1,j,k)+ad_hvxx(i,j)
2862 ad_hvom(i ,j,k)=ad_hvom(i ,j,k)-2.0_r8*ad_hvxx(i,j)
2863 ad_hvom(i+1,j,k)=ad_hvom(i+1,j,k)+ad_hvxx(i,j)
2868 IF (
domain(ng)%Northern_Edge(tile))
THEN
2872 ad_uee(i,jend)=ad_uee(i,jend)+ad_uee(i,jend+1)
2873 ad_uee(i,jend+1)=0.0_r8
2878 IF (
domain(ng)%Southern_Edge(tile))
THEN
2882 ad_uee(i,jstr)=ad_uee(i,jstr)+ad_uee(i,jstr-1)
2883 ad_uee(i,jstr-1)=0.0_r8
2896 ad_u(i,j-1,k,nrhs)=ad_u(i,j-1,k,nrhs)+ad_uee(i,j)
2897 ad_u(i,j ,k,nrhs)=ad_u(i,j ,k,nrhs)-2.0_r8*ad_uee(i,j)
2898 ad_u(i,j+1,k,nrhs)=ad_u(i,j+1,k,nrhs)+ad_uee(i,j)
2900 ad_u_stokes(i,j-1,k)=ad_u_stokes(i,j-1,k)+ad_uee(i,j)
2901 ad_u_stokes(i,j ,k)=ad_u_stokes(i,j ,k)-2.0_r8*ad_uee(i,j)
2902 ad_u_stokes(i,j+1,k)=ad_u_stokes(i,j+1,k)+ad_uee(i,j)
2909 uxx(i,j)=u(i-1,j,k,nrhs)-2.0_r8*u(i,j,k,nrhs)+ &
2911 & u_stokes(i-1,j,k)-2.0_r8*u_stokes(i,j,k)+ &
2912 & u_stokes(i+1,j,k)+ &
2915 huxx(i,j)=huon(i-1,j,k)-2.0_r8*huon(i,j,k)+huon(i+1,j,k)
2919 IF (
domain(ng)%Western_Edge(tile))
THEN
2921 uxx(istr,j)=uxx(istr+1,j)
2922 huxx(istr,j)=huxx(istr+1,j)
2927 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2929 uxx(iend+1,j)=uxx(iend,j)
2930 huxx(iend+1,j)=huxx(iend,j)
2934# ifdef UV_C4ADVECTION
2963 adfac=0.25_r8*ad_ufx(i,j)
2964 adfac1=adfac*(u(i ,j,k,nrhs)+ &
2966 & u_stokes(i ,j,k)+ &
2967 & u_stokes(i+1,j,k)+ &
2969 & u(i+1,j,k,nrhs)- &
2973 adfac3=adfac*(huon(i ,j,k)+ &
2975 & cff*(huxx(i ,j)+ &
2978 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
2979 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
2980 ad_huxx(i ,j)=ad_huxx(i ,j)-adfac2
2981 ad_huxx(i+1,j)=ad_huxx(i+1,j)-adfac2
2982 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac3
2983 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac3
2985 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac3
2986 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac3
2988 ad_uxx(i ,j)=ad_uxx(i ,j)-adfac4
2989 ad_uxx(i+1,j)=ad_uxx(i+1,j)-adfac4
2996 cff1=u(i ,j,k,nrhs)+ &
2998 & u_stokes(i ,j,k)+ &
2999 & u_stokes(i+1,j,k)+ &
3002 IF (cff1.gt.0.0_r8)
THEN
3019 adfac=0.25_r8*ad_ufx(i,j)
3020 adfac1=adfac*(cff1+gadv*cff)
3021 adfac2=adfac1*gadv*0.5_r8
3022 adfac3=adfac*(huon(i ,j,k)+ &
3024 & gadv*0.5_r8*(huxx(i ,j)+ &
3026 ad_huon(i ,j,k)=ad_huon(i ,j,k)+adfac1
3027 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+adfac1
3028 ad_huxx(i ,j)=ad_huxx(i ,j)+adfac2
3029 ad_huxx(i+1,j)=ad_huxx(i+1,j)+adfac2
3030 ad_cff1=ad_cff1+adfac3
3031 ad_cff=ad_cff+gadv*adfac3
3033 IF (cff1.gt.0.0_r8)
THEN
3036 ad_uxx(i,j)=ad_uxx(i,j)+ad_cff
3041 ad_uxx(i+1,j)=ad_uxx(i+1,j)+ad_cff
3051 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+ad_cff1
3052 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+ad_cff1
3054 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+ad_cff1
3055 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+ad_cff1
3062 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3066 ad_huxx(iend,j)=ad_huxx(iend,j)+ad_huxx(iend+1,j)
3067 ad_huxx(iend+1,j)=0.0_r8
3070 ad_uxx(iend,j)=ad_uxx(iend,j)+ad_uxx(iend+1,j)
3071 ad_uxx(iend+1,j)=0.0_r8
3076 IF (
domain(ng)%Western_Edge(tile))
THEN
3080 ad_huxx(istr+1,j)=ad_huxx(istr+1,j)+ad_huxx(istr,j)
3081 ad_huxx(istr,j)=0.0_r8
3084 ad_uxx(istr+1,j)=ad_uxx(istr+1,j)+ad_uxx(istr,j)
3085 ad_uxx(istr ,j)=0.0_r8
3094 ad_huon(i-1,j,k)=ad_huon(i-1,j,k)+ad_huxx(i,j)
3095 ad_huon(i ,j,k)=ad_huon(i ,j,k)-2.0_r8*ad_huxx(i,j)
3096 ad_huon(i+1,j,k)=ad_huon(i+1,j,k)+ad_huxx(i,j)
3105 ad_u(i-1,j,k,nrhs)=ad_u(i-1,j,k,nrhs)+ad_uxx(i,j)
3106 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)-2.0_r8*ad_uxx(i,j)
3107 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+ad_uxx(i,j)
3109 ad_u_stokes(i-1,j,k)=ad_u_stokes(i-1,j,k)+ad_uxx(i,j)
3110 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)-2.0_r8*ad_uxx(i,j)
3111 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+ad_uxx(i,j)
3126 cff=0.25_r8*(
clima(ng)%M3nudgcof(i,j-1,k)+ &
3127 &
clima(ng)%M3nudgcof(i,j ,k))* &
3128 & om_v(i,j)*on_v(i,j)
3136 adfac=cff*ad_rv(i,j,k,nrhs)
3137 adfac1=adfac*(
clima(ng)%vclm(i,j,k)-v(i,j,k,nrhs))
3138 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
3139 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
3140 ad_v(i,j,k,nrhs)=ad_v(i,j,k,nrhs)- &
3141 & (hz(i,j-1,k)+hz(i,j,k))*adfac
3146 cff=0.25_r8*(
clima(ng)%M3nudgcof(i-1,j,k)+ &
3147 &
clima(ng)%M3nudgcof(i ,j,k))* &
3148 & om_u(i,j)*on_u(i,j)
3156 adfac=cff*ad_ru(i,j,k,nrhs)
3157 adfac1=adfac*(
clima(ng)%uclm(i,j,k)-u(i,j,k,nrhs))
3158 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
3159 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
3160 ad_u(i,j,k,nrhs)=ad_u(i,j,k,nrhs)- &
3161 & (hz(i-1,j,k)+hz(i,j,k))*adfac
3166# if defined CURVGRID && defined UV_ADV
3174# ifdef DIAGNOSTICS_UV
3182 ad_cff1=ad_cff1-ad_rv(i,j,k,nrhs)
3185 adfac=0.5_r8*ad_cff1
3186 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3187 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3193# ifdef DIAGNOSTICS_UV
3201 ad_cff1=ad_cff1+ad_ru(i,j,k,nrhs)
3204 adfac=0.5_r8*ad_cff1
3205 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3206 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3212 cff1=0.5_r8*(v(i,j ,k,nrhs)+ &
3214 & v_stokes(i,j ,k)+ &
3215 & v_stokes(i,j+1,k)+ &
3218 cff2=0.5_r8*(u(i ,j,k,nrhs)+ &
3220 & u_stokes(i ,j,k)+ &
3221 & u_stokes(i+1,j,k)+ &
3226 cff=hz(i,j,k)*(cff3-cff4)
3227# if defined DIAGNOSTICS_UV
3236 & cff1*ad_ufx(i,j)+ &
3238 ad_cff1=ad_cff1+cff*ad_ufx(i,j)
3239 ad_cff2=ad_cff2+cff*ad_vfe(i,j)
3245 adfac=hz(i,j,k)*ad_cff
3246 ad_cff3=ad_cff3+adfac
3247 ad_cff4=ad_cff4-adfac
3248 ad_hz(i,j,k)=ad_hz(i,j,k)+(cff3-cff4)*ad_cff
3252 ad_cff2=ad_cff2+dmde(i,j)*ad_cff4
3256 ad_cff1=ad_cff1+dndx(i,j)*ad_cff3
3265 adfac=0.5_r8*ad_cff2
3266 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac
3267 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac
3269 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac
3270 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac
3280 adfac=0.5_r8*ad_cff1
3281 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac
3282 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac
3284 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac
3285 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac
3299# ifdef DIAGNOSTICS_UV
3304 ad_cff1=ad_cff1-ad_rv(i,j,k,nrhs)
3307 adfac=0.5_r8*ad_cff1
3308 ad_vfe(i,j-1)=ad_vfe(i,j-1)+adfac
3309 ad_vfe(i,j )=ad_vfe(i,j )+adfac
3315# ifdef DIAGNOSTICS_UV
3320 ad_cff1=ad_cff1+ad_ru(i,j,k,nrhs)
3323 adfac=0.5_r8*ad_cff1
3324 ad_ufx(i-1,j)=ad_ufx(i-1,j)+adfac
3325 ad_ufx(i ,j)=ad_ufx(i ,j)+adfac
3331 cff=0.5_r8*hz(i,j,k)*fomn(i,j)
3345 adfac=cff*ad_vfe(i,j)
3346 ad_u(i ,j,k,nrhs)=ad_u(i ,j,k,nrhs)+adfac
3347 ad_u(i+1,j,k,nrhs)=ad_u(i+1,j,k,nrhs)+adfac
3349 ad_u_stokes(i ,j,k)=ad_u_stokes(i ,j,k)+adfac
3350 ad_u_stokes(i+1,j,k)=ad_u_stokes(i+1,j,k)+adfac
3352 ad_cff=ad_cff+(u(i ,j,k,nrhs)+ &
3354 & u_stokes(i ,j,k)+ &
3355 & u_stokes(i+1,j,k)+ &
3357 & u(i+1,j,k,nrhs))*ad_vfe(i,j)
3372 adfac=cff*ad_ufx(i,j)
3373 ad_v(i,j ,k,nrhs)=ad_v(i,j ,k,nrhs)+adfac
3374 ad_v(i,j+1,k,nrhs)=ad_v(i,j+1,k,nrhs)+adfac
3376 ad_v_stokes(i,j ,k)=ad_v_stokes(i,j ,k)+adfac
3377 ad_v_stokes(i,j+1,k)=ad_v_stokes(i,j+1,k)+adfac
3379 ad_cff=ad_cff+(v(i,j ,k,nrhs)+ &
3381 & v_stokes(i,j ,k)+ &
3382 & v_stokes(i,j+1,k)+ &
3384 & v(i,j+1,k,nrhs))*ad_ufx(i,j)
3388 ad_hz(i,j,k)=ad_hz(i,j,k)+ &
3389 & 0.5_r8*fomn(i,j)*ad_cff
3410 wrk(i,j)=wrk(i,j)+hz(i,j,k)
3417# ifdef DIAGNOSTICS_UV
3423 ad_cff=ad_cff-ad_rv(i,j,k,nrhs)
3429 adfac=vwrk(i,j)*ad_cff
3430 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
3431 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
3432 ad_vwrk(i,j)=ad_vwrk(i,j)+(hz(i,j ,k)+
3433 & hz(i,j-1,k))*ad_cff
3439# ifdef DIAGNOSTICS_UV
3445 ad_cff=ad_cff-ad_ru(i,j,k,nrhs)
3451 adfac=uwrk(i,j)*ad_cff
3452 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
3453 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
3454 ad_uwrk(i,j)=ad_uwrk(i,j)+(hz(i ,j,k)+ &
3455 & hz(i-1,j,k))*ad_cff
3462 cff=0.25_r8*(pm(i,j-1)+pm(i,j))* &
3463 & (pn(i,j-1)+pn(i,j))
3464 cff1=1.0_r8/(cff*(wrk(i,j-1)+wrk(i,j)))
3465 vwrk(i,j)=bvstr(i,j)*cff1
3469 ad_cff1=ad_cff+bvstr(i,j)*ad_vwrk(i,j)
3470 ad_bvstr(i,j)=tl_bvstr(i,j)+cff1*ad_vwrk(i,j)
3474 adfac=-cff1*cff1*cff*ad_cff1
3475 ad_wrk(i,j )=ad_wrk(i,j )+adfac
3476 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac
3482 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
3483 & (pn(i-1,j)+pn(i,j))
3484 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
3485 uwrk(i,j)=bustr(i,j)*cff1
3489 ad_cff1=ad_cff1+bustr(i,j)*ad_uwrk(i,j)
3490 ad_bustr(i,j)=ad_bustr(i,j)+cff1*ad_uwrk(i,j)
3494 adfac=-cff1*cff1*cff*ad_cff1
3495 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac
3496 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac
3505 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_wrk(i,j)
3531 wrk(i,j)=wrk(i,j)+hz(i,j,k)
3538# ifdef DIAGNOSTICS_UV
3544 ad_cff=ad_cff+tl_rv(i,j,k,nrhs)
3550 adfac=vwrk(i,j)*ad_cff
3551 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac
3552 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac
3553 ad_vwrk(i,j)=ad_vwrk(i,j)+(hz(i,j ,k)+ &
3554 & hz(i,j-1,k))*ad_cff
3560# ifdef DIAGNOSTICS_UV
3566 ad_cff=ad_cff+tl_ru(i,j,k,nrhs)
3572 adfac=uwrk(i,j)*ad_cff
3573 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
3574 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac
3575 ad_uwrk(i,j)=ad_uwrk(i,j)+(hz(i ,j,k)+ &
3576 & hz(i-1,j,k))*ad_fac
3583 cff=0.25*(pm(i,j-1)+pm(i,j))* &
3584 & (pn(i,j-1)+pn(i,j))
3585 cff1=1.0_r8/(cff*(tl_wrk(i,j-1)+tl_wrk(i,j)))
3586 vwrk(i,j)=svstr(i,j)*cff1
3590 ad_cff1=ad_cff1+svstr(i,j)*ad_vwrk(i,j)
3591 ad_svstr(i,j)=ad_svstr(i,j)+cff1*ad_vwrk(i,j)
3595 adfac=-cff1*cff1*cff*ad_cff1
3596 ad_wrk(i,j-1)=ad_wrk(i,j-1)+adfac
3597 ad_wrk(i,j )=ad_wrk(i,j )+adfac
3603 cff=0.25_r8*(pm(i-1,j)+pm(i,j))* &
3604 & (pn(i-1,j)+pn(i,j))
3605 cff1=1.0_r8/(cff*(wrk(i-1,j)+wrk(i,j)))
3606 uwrk(i,j)=sustr(i,j)*cff1
3610 ad_cff1=ad_cff1+sustr(i,j)*ad_uwrk(i,j)
3611 ad_sustr(i,j)=ad_sustr(i,j)+cff1*ad_uwrk(i,j)
3615 adfac=-cff1*cff1*cff*ad_cff1
3616 ad_wrk(i-1,j)=ad_wrk(i-1,j)+adfac
3617 ad_wrk(i ,j)=ad_wrk(i ,j)+adfac
3626 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_wrk(i,j)
3638# ifdef DIAGNOSTICS_UV