60 & LBi, UBi, LBj, UBj, &
61 & IminS, ImaxS, JminS, JmaxS, &
64 & ad_ubar, ad_vbar, ad_zeta)
77 integer,
intent(in) :: ng, tile
78 integer,
intent(in) :: lbi, ubi, lbj, ubj
79 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
80 integer,
intent(in) :: krhs, kstp, kout
83 real(r8),
intent(in) :: ubar(lbi:,lbj:,:)
84 real(r8),
intent(in) :: vbar(lbi:,lbj:,:)
85 real(r8),
intent(in) :: zeta(lbi:,lbj:,:)
87 real(r8),
intent(inout) :: ad_ubar(lbi:,lbj:,:)
88 real(r8),
intent(inout) :: ad_vbar(lbi:,lbj:,:)
89 real(r8),
intent(inout) :: ad_zeta(lbi:,lbj:,:)
91 real(r8),
intent(in) :: ubar(lbi:ubi,lbj:ubj,:)
92 real(r8),
intent(in) :: vbar(lbi:ubi,lbj:ubj,:)
93 real(r8),
intent(in) :: zeta(lbi:ubi,lbj:ubj,:)
95 real(r8),
intent(inout) :: ad_ubar(lbi:ubi,lbj:ubj,:)
96 real(r8),
intent(inout) :: ad_vbar(lbi:ubi,lbj:ubj,:)
97 real(r8),
intent(inout) :: ad_zeta(lbi:ubi,lbj:ubj,:)
102 integer :: jmin, jmax
103 integer :: i, j, know
105 real(r8) :: ce, cx, ze
106 real(r8) :: bry_pgr, bry_cor, bry_str, bry_val
107 real(r8) :: cff, cff1, cff2, cff3, dt2d
108 real(r8) :: obc_in, obc_out, tau
109# if defined ATM_PRESS && defined PRESS_COMPENSATE
110 real(r8) :: oneatm, fac
113 real(r8) :: ad_ce, ad_cx
114 real(r8) :: ad_bry_pgr, ad_bry_cor, ad_bry_str, ad_bry_val, ad_ze
115 real(r8) :: ad_cff, ad_cff1, ad_cff2, ad_cff3
118 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: ad_grad
120# include "set_bounds.h"
138 ad_grad(lbi:ubi,lbj:ubj)=0.0_r8
144 IF (first_2d_step)
THEN
154# if defined ATM_PRESS && defined PRESS_COMPENSATE
156 fac=100.0_r8/(
g*
rho0)
159# if defined WET_DRY_NOT_YET
168 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
181 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
194 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
207 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
223 IF (
domain(ng)%Northern_Edge(tile))
THEN
236 IF (
domain(ng)%Southern_Edge(tile))
THEN
252 IF (
domain(ng)%Eastern_Edge(tile))
THEN
265 IF (
domain(ng)%Western_Edge(tile))
THEN
286 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
293 adfac=0.5_r8*ad_vbar(iend+1,jend+1,kout)
294 ad_vbar(iend+1,jend ,kout)=ad_vbar(iend+1,jend ,kout)+ &
296 ad_vbar(iend ,jend+1,kout)=ad_vbar(iend ,jend+1,kout)+ &
298 ad_vbar(iend+1,jend+1,kout)=0.0_r8
301 IF (
domain(ng)%NorthWest_Corner(tile))
THEN
308 adfac=0.5_r8*ad_vbar(istr-1,jend+1,kout)
309 ad_vbar(istr-1,jend ,kout)=ad_vbar(istr-1,jend ,kout)+ &
311 ad_vbar(istr ,jend+1,kout)=ad_vbar(istr ,jend+1,kout)+ &
313 ad_vbar(istr-1,jend+1,kout)=0.0_r8
316 IF (
domain(ng)%SouthEast_Corner(tile))
THEN
323 adfac=0.5_r8*ad_vbar(iend+1,jstr,kout)
324 ad_vbar(iend ,jstr ,kout)=ad_vbar(iend ,jstr ,kout)+ &
326 ad_vbar(iend+1,jstr+1,kout)=ad_vbar(iend+1,jstr+1,kout)+ &
328 ad_vbar(iend+1,jstr ,kout)=0.0_r8
331 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
338 adfac=0.5_r8*ad_vbar(istr-1,jstr,kout)
339 ad_vbar(istr ,jstr ,kout)=ad_vbar(istr ,jstr ,kout)+ &
341 ad_vbar(istr-1,jstr+1,kout)=ad_vbar(istr-1,jstr+1,kout)+ &
343 ad_vbar(istr-1,jstr ,kout)=0.0_r8
352 IF (
domain(ng)%Eastern_Edge(tile))
THEN
357 IF (
iic(ng).ne.0)
THEN
360# if defined CELERITY_READ && defined FORWARD_READ
364 & (
clima(ng)%M2nudgcof(iend+1,j-1)+ &
365 &
clima(ng)%M2nudgcof(iend+1,j ))
366 obc_in =
obcfac(ng)*obc_out
371 IF (
boundary(ng)%vbar_east_Cx(j).lt.0.0_r8)
THEN
390 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
391 &
grid(ng)%vmask(iend+1,j)
397 ad_vbar(iend+1 ,j,know)=ad_vbar(iend+1 ,j,know)- &
398 & tau*ad_vbar(iend+1,j,kout)
408 adfac=ad_vbar(iend+1,j,kout)/(cff+cx)
409 ad_grad(iend+1,j-1)=ad_grad(iend+1,j-1)- &
410 & max(ce,0.0_r8)*adfac
411 ad_grad(iend+1,j )=ad_grad(iend+1,j )- &
412 & min(ce,0.0_r8)*adfac
413 ad_vbar(iend ,j,kout)=ad_vbar(iend ,j,kout)+cx* adfac
414 ad_vbar(iend+1,j,know)=ad_vbar(iend+1,j,know)+cff*adfac
415 ad_vbar(iend+1,j,kout)=0.0_r8
427 cff=dt2d*0.5_r8*(
grid(ng)%pm(iend,j-1)+ &
428 &
grid(ng)%pm(iend,j ))
429 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(iend,j-1)+ &
430 & zeta(iend,j-1,know)+ &
431 &
grid(ng)%h(iend,j )+ &
432 & zeta(iend,j ,know)))
434 cff2=1.0_r8/(1.0_r8+cx)
439 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
440 &
grid(ng)%vmask(iend+1,j)
448 adfac=cff2*ad_vbar(iend+1,j,kout)
449 ad_vbar(iend ,j,kout)=ad_vbar(iend ,j,kout)+cx*adfac
450 ad_vbar(iend+1,j,know)=ad_vbar(iend+1,j,know)+adfac
451 ad_cx=ad_cx+vbar(iend,j,kout)*adfac
453 & (vbar(iend+1,j,know)+ &
454 & cx*vbar(iend,j,kout))*ad_vbar(iend+1,j,kout)
455 ad_vbar(iend+1,j,kout)=0.0_r8
458 ad_cx=ad_cx-cff2*cff2*ad_cff2
462 ad_cff1=ad_cff1+cff*ad_cx
469 adfac=0.25_r8*
g*ad_cff1/cff1
470 grid(ng)%ad_h(iend,j-1)=
grid(ng)%ad_h(iend,j-1)+adfac
471 grid(ng)%ad_h(iend,j )=
grid(ng)%ad_h(iend,j )+adfac
472 ad_zeta(iend,j-1,know)=ad_zeta(iend,j-1,know)+adfac
473 ad_zeta(iend,j ,know)=ad_zeta(iend,j ,know)+adfac
487 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
488 &
grid(ng)%vmask(iend+1,j)
490# ifdef ADJUST_BOUNDARY
496 & ad_vbar(iend+1,j,kout)
497 ad_vbar(iend+1,j,kout)=0.0_r8
501 ad_vbar(iend+1,j,kout)=0.0_r8
506 ad_vbar(iend+1,j,kout)=0.0_r8
520 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
521 &
grid(ng)%vmask(iend+1,j)
525 ad_vbar(iend ,j,kout)=ad_vbar(iend,j,kout)+ &
526 & ad_vbar(iend+1,j,kout)
527 ad_vbar(iend+1,j,kout)=0.0_r8
548 ad_vbar(iend+1,j,kout)=ad_vbar(iend+1,j,kout)* &
549 &
grid(ng)%vmask(iend+1,j)
553 ad_vbar(iend ,j,kout)=ad_vbar(iend,j,kout)+ &
554 &
gamma2(ng)*ad_vbar(iend+1,j,kout)
555 ad_vbar(iend+1,j,kout)=0.0_r8
565 IF (
domain(ng)%Western_Edge(tile))
THEN
570 IF (
iic(ng).ne.0)
THEN
573# if defined CELERITY_READ && defined FORWARD_READ
577 & (
clima(ng)%M2nudgcof(istr-1,j-1)+ &
578 &
clima(ng)%M2nudgcof(istr-1,j ))
579 obc_in =
obcfac(ng)*obc_out
584 IF (
boundary(ng)%vbar_west_Cx(j).lt.0.0_r8)
THEN
603 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
604 &
grid(ng)%vmask(istr-1,j)
610 ad_vbar(istr,j,know)=ad_vbar(istr,j,know)- &
611 & tau*ad_vbar(istr-1,j,kout)
621 adfac=ad_vbar(istr-1,j,kout)/(cff+cx)
622 ad_grad(istr-1,j-1)=ad_grad(istr-1,j-1)- &
623 & max(ce,0.0_r8)*adfac
624 ad_grad(istr-1,j )=ad_grad(istr-1,j )- &
625 & min(ce,0.0_r8)*adfac
626 ad_vbar(istr-1,j,know)=ad_vbar(istr-1,j,know)+cff*adfac
627 ad_vbar(istr ,j,kout)=ad_vbar(istr ,j,kout)+cx *adfac
628 ad_vbar(istr-1,j,kout)=0.0_r8
640 cff=dt2d*0.5_r8*(
grid(ng)%pm(istr,j-1)+ &
641 &
grid(ng)%pm(istr,j ))
642 cff1=sqrt(
g*0.5_r8*(
grid(ng)%h(istr,j-1)+ &
643 & zeta(istr,j-1,know)+ &
644 &
grid(ng)%h(istr,j )+ &
645 & zeta(istr,j ,know)))
647 cff2=1.0_r8/(1.0_r8+cx)
652 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
653 &
grid(ng)%vmask(istr-1,j)
661 adfac=cff2*ad_vbar(istr-1,j,kout)
662 ad_vbar(istr-1,j,know)=ad_vbar(istr-1,j,know)+adfac
663 ad_vbar(istr ,j,kout)=ad_vbar(istr ,j,kout)+cx*adfac
664 ad_cx=ad_cx+vbar(istr,j,kout)*adfac
666 & (vbar(istr-1,j,know)+ &
667 & cx*vbar(istr,j,kout))*ad_vbar(istr-1,j,kout)
668 ad_vbar(istr-1,j,kout)=0.0_r8
671 ad_cx=ad_cx-cff2*cff2*ad_cff2
675 ad_cff1=ad_cff1+cff*ad_cx
682 adfac=0.25_r8*
g*ad_cff1/cff1
683 grid(ng)%ad_h(istr,j-1)=
grid(ng)%ad_h(istr,j-1)+adfac
684 grid(ng)%ad_h(istr,j )=
grid(ng)%ad_h(istr,j )+adfac
685 ad_zeta(istr,j-1,know)=ad_zeta(istr,j-1,know)+adfac
686 ad_zeta(istr,j ,know)=ad_zeta(istr,j ,know)+adfac
700 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
701 &
grid(ng)%vmask(istr-1,j)
703# ifdef ADJUST_BOUNDARY
709 & ad_vbar(istr-1,j,kout)
710 ad_vbar(istr-1,j,kout)=0.0_r8
714 ad_vbar(istr-1,j,kout)=0.0_r8
719 ad_vbar(istr-1,j,kout)=0.0_r8
733 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
734 &
grid(ng)%vmask(istr-1,j)
738 ad_vbar(istr ,j,kout)=ad_vbar(istr,j,kout)+ &
739 & ad_vbar(istr-1,j,kout)
740 ad_vbar(istr-1,j,kout)=0.0_r8
761 ad_vbar(istr-1,j,kout)=ad_vbar(istr-1,j,kout)* &
762 &
grid(ng)%vmask(istr-1,j)
766 ad_vbar(istr ,j,kout)=ad_vbar(istr,j,kout)+ &
767 &
gamma2(ng)*ad_vbar(istr-1,j,kout)
768 ad_vbar(istr-1,j,kout)=0.0_r8
778 IF (
domain(ng)%Northern_Edge(tile))
THEN
783 IF (
iic(ng).ne.0)
THEN
786# if defined CELERITY_READ && defined FORWARD_READ
790 & (
clima(ng)%M2nudgcof(i,jend )+ &
791 &
clima(ng)%M2nudgcof(i,jend+1))
792 obc_in =
obcfac(ng)*obc_out
797 IF (
boundary(ng)%vbar_north_Ce(i).lt.0.0_r8)
THEN
816 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
817 &
grid(ng)%vmask(i,jend+1)
823 ad_vbar(i,jend+1 ,know)=ad_vbar(i,jend+1 ,know)- &
824 & tau*ad_vbar(i,jend+1,kout)
834 adfac=ad_vbar(i,jend+1,kout)/(cff+ce)
835 ad_grad(i ,jend+1)=ad_grad(i ,jend+1)- &
836 & max(cx,0.0_r8)*adfac
837 ad_grad(i+1,jend+1)=ad_grad(i+1,jend+1)- &
838 & min(cx,0.0_r8)*adfac
839 ad_vbar(i,jend ,kout)=ad_vbar(i,jend ,kout)+ce*adfac
840 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+cff*adfac
841 ad_vbar(i,jend+1,kout)=0.0_r8
851 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
852 & zeta(i,jend ,know)+ &
853 &
grid(ng)%h(i,jend+1)+ &
854 & zeta(i,jend+1,know)))
860 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
861 &
grid(ng)%vmask(i,jend+1)
863# ifdef ADJUST_BOUNDARY
869 & ad_zeta_north(i)- &
870 & ce*ad_vbar(i,jend+1,kout)
873# if defined ATM_PRESS && defined PRESS_COMPENSATE
887 adfac=ce*0.5_r8*ad_vbar(i,jend+1,kout)
888 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
889 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
891 & (0.5_r8*(zeta(i,jend ,know)+ &
892 & zeta(i,jend+1,know)+ &
893 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
894 &
forces(ng)%Pair(i,jstr )- &
896 &
boundary(ng)%zeta_north(i))*ad_vbar(i,jend+1,kout)
897 ad_bry_val=ad_bry_val+ad_vbar(i,jend+1,kout)
898 ad_vbar(i,jend+1,kout)=0.0_r8
909 adfac=ce*0.5_r8*ad_vbar(i,jend+1,kout)
910 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
911 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
913 & (0.5_r8*(zeta(i,jend ,know)+ &
914 & zeta(i,jend+1,know))- &
915 &
boundary(ng)%zeta_north(i))*ad_vbar(i,jend+1,kout)
916 ad_bry_val=ad_bry_val+ad_vbar(i,jend+1,kout)
917 ad_vbar(i,jend+1,kout)=0.0_r8
921 ad_cff=ad_cff+0.5_r8*
g*ad_ce/ce
928 adfac=-cff*cff*0.5_r8*ad_cff
929 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
930 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
931 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
932 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
935# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
937 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
938 & zeta(i,jend,know))* &
939 & 0.5_r8*
grid(ng)%pn(i,jend)
941 bry_pgr=-
g*(zeta(i,jend+1,know)- &
942 & zeta(i,jend ,know))* &
943 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
944 &
grid(ng)%pn(i,jend+1))
947 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
948 & ubar(i+1,jend ,know)+ &
949 & ubar(i ,jend+1,know)+ &
950 & ubar(i+1,jend+1,know))* &
951 & (
grid(ng)%f(i,jend )+ &
952 &
grid(ng)%f(i,jend+1))
956 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
957 & zeta(i,jend ,know)+ &
958 &
grid(ng)%h(i,jend+1)+ &
959 & zeta(i,jend+1,know)))
960 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
961 &
forces(ng)%bvstr(i,jend+1))
962 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
963 & zeta(i,jend+1,know)+ &
964 &
grid(ng)%h(i,jend )+ &
965 & zeta(i,jend ,know)))
966 cff2=
grid(ng)%on_v(i,jend+1)*ce
975 adfac=cff2*ad_bry_val
976 ad_bry_pgr=ad_bry_pgr+adfac
977 ad_bry_cor=ad_bry_cor+adfac
978 ad_bry_str=ad_bry_str+adfac
979 ad_cff2=ad_cff2+(bry_pgr+ &
981 & bry_str)*ad_bry_val
982 ad_vbar(i,jend,know)=ad_vbar(i,jend,know)+ad_bry_val
986 ad_ce=ad_ce+
grid(ng)%on_v(i,jend+1)*ad_cff2
993 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
994 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
995 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
996 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
997 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1004 adfac=cff1*ad_bry_str
1005 forces(ng)%ad_svstr(i,jend+1)= &
1006 &
forces(ng)%ad_svstr(i,jend+1)+ &
1008 forces(ng)%ad_bvstr(i,jend+1)= &
1009 &
forces(ng)%ad_bvstr(i,jend+1)- &
1011 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jend+1)- &
1012 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1020 adfac=-cff1*cff1*0.5_r8*ad_cff1
1021 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1022 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1023 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1024 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1034 adfac=0.125_r8*(
grid(ng)%f(i,jend )+ &
1035 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1036 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)-adfac
1037 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)-adfac
1038 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)-adfac
1039 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)-adfac
1046# ifdef ADJUST_BOUNDARY
1053 & ad_zeta_north(i)- &
1055 &
grid(ng)%pn(i,jend)* &
1062 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1063 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1072 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1073 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1074 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1075 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1079# ifdef ADJUST_BOUNDARY
1084 & ad_vbar_north(i)+ &
1106 cff=0.5_r8*(
grid(ng)%h(i,jend )+ &
1107 &
grid(ng)%h(i,jend+1))
1109 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1110 &
grid(ng)%pn(i,jend+1))
1111 ze=(0.5_r8+ce)*zeta(i,jend ,know)+ &
1112 & (0.5_r8-ce)*zeta(i,jend+1,know)
1114 cff2=(1.0_r8-
co/ce)**2
1115 cff3=zeta(i,jend,kout)+ &
1116 & ce*zeta(i,jend+1,know)- &
1117 & (1.0_r8+ce)*zeta(i,jend,know)
1124 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1125 &
grid(ng)%vmask(i,jend+1)
1127# ifdef ADJUST_BOUNDARY
1133 & ad_zeta_north(i)- &
1134 & ce*ad_vbar(i,jend+1,kout)
1148 adfac=0.5_r8*ad_vbar(i,jend+1,kout)
1149 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+ &
1151 ad_vbar(i,jend ,know)=ad_vbar(i,jend ,know)+ &
1154 & (vbar(i,jend ,know)- &
1155 & vbar(i,jend+1,know))*adfac
1157 & (ze-
boundary(ng)%zeta_north(i))*adfac
1158 ad_ze=ad_ze-cff1*adfac
1159 ad_vbar(i,jend+1,kout)=0.0_r8
1165 ad_cff2=ad_cff2+cff3*ad_ze
1166 ad_cff3=ad_cff3+cff2*ad_ze
1173 ad_zeta(i,jend ,kout)=ad_zeta(i,jend ,kout)+ &
1175 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)- &
1176 & (1.0_r8+ce)*ad_cff3
1177 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+ &
1180 & (zeta(i,jend ,know)+ &
1181 & zeta(i,jend+1,know))*ad_cff3
1186 & 2.0_r8*cff2*
co*ad_cff2/(ce*ce)
1194 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+ &
1196 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+ &
1199 & (zeta(i,jend ,know)- &
1200 & zeta(i,jend+1,know))*ad_ze
1207 adfac=dt2d*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1208 &
grid(ng)%pn(i,jend+1))*ad_ce
1209 ad_cff=ad_cff+cff1*adfac
1210 ad_cff1=ad_cff1+cff*adfac
1215 & 0.5_r8*cff1*ad_cff1/cff
1218# ifdef WET_DRY_NOT_YET
1225 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1226 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1227 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1228 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1235 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1236 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1240# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
1242 bry_pgr=-
g*(
boundary(ng)%zeta_north(i)- &
1243 & zeta(i,jend,know))* &
1244 & 0.5_r8*
grid(ng)%pn(i,jend)
1246 bry_pgr=-
g*(zeta(i,jend+1,know)- &
1247 & zeta(i,jend ,know))* &
1248 & 0.5_r8*(
grid(ng)%pn(i,jend )+ &
1249 &
grid(ng)%pn(i,jend+1))
1252 bry_cor=-0.125_r8*(ubar(i ,jend ,know)+ &
1253 & ubar(i+1,jend ,know)+ &
1254 & ubar(i ,jend+1,know)+ &
1255 & ubar(i+1,jend+1,know))* &
1256 & (
grid(ng)%f(i,jend )+ &
1257 &
grid(ng)%f(i,jend+1))
1261 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1262 & zeta(i,jend ,know)+ &
1263 &
grid(ng)%h(i,jend+1)+ &
1264 & zeta(i,jend+1,know)))
1265 bry_str=cff1*(
forces(ng)%svstr(i,jend+1)- &
1266 &
forces(ng)%bvstr(i,jend+1))
1267 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jend+1)+ &
1268 & zeta(i,jend+1,know)+ &
1269 &
grid(ng)%h(i,jend )+ &
1270 & zeta(i,jend ,know)))
1271 cff2=
grid(ng)%on_v(i,jend+1)*ce
1280 adfac=cff2*ad_bry_val
1281 ad_bry_pgr=ad_bry_pgr+adfac
1282 ad_bry_cor=ad_bry_cor+adfac
1283 ad_bry_str=ad_bry_str+adfac
1284 ad_cff2=ad_cff2+(bry_pgr+ &
1286 & bry_str)*ad_bry_val
1287 ad_vbar(i,jend,know)=ad_vbar(i,jend,know)+ad_bry_val
1291 ad_ce=ad_ce+
grid(ng)%on_v(i,jend+1)*ad_cff2
1298 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
1299 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1300 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1301 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1302 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1309 adfac=cff1*ad_bry_str
1310 forces(ng)%ad_svstr(i,jend+1)= &
1311 &
forces(ng)%ad_svstr(i,jend+1)+ &
1313 forces(ng)%ad_bvstr(i,jend+1)= &
1314 &
forces(ng)%ad_bvstr(i,jend+1)- &
1316 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jend+1)- &
1317 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1325 adfac=-cff1*cff1*0.5_r8*ad_cff1
1326 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1327 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1328 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1329 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1339 adfac=0.125_r8*(
grid(ng)%f(i,jend )+ &
1340 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1341 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)-adfac
1342 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)-adfac
1343 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)-adfac
1344 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)-adfac
1351# ifdef ADJUST_BOUNDARY
1358 & ad_zeta_north(i)- &
1360 &
grid(ng)%pn(i,jend)* &
1367 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1368 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1377 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1378 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1379 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1380 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1384# ifdef ADJUST_BOUNDARY
1389 & ad_vbar_north(i)+ &
1415 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1416 &
grid(ng)%vmask(i,jend+1)
1418# ifdef ADJUST_BOUNDARY
1423 & ad_vbar_north(i)+ &
1424 & ad_vbar(i,jend+1,kout)
1425 ad_vbar(i,jend+1,kout)=0.0_r8
1429 ad_vbar(i,jend+1,kout)=0.0_r8
1434 ad_vbar(i,jend+1,kout)=0.0_r8
1448 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1449 &
grid(ng)%vmask(i,jend+1)
1453 ad_vbar(i,jend ,kout)=ad_vbar(i,jend,kout)+ &
1454 & ad_vbar(i,jend+1,kout)
1455 ad_vbar(i,jend+1,kout)=0.0_r8
1464 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jend )+ &
1465 & zeta(i,jend ,know)+ &
1466 &
grid(ng)%h(i,jend+1)+ &
1467 & zeta(i,jend+1,know)))
1472 ad_vbar(i,jend+1,kout)=ad_vbar(i,jend+1,kout)* &
1473 &
grid(ng)%vmask(i,jend+1)
1480 adfac=dt2d*ad_vbar(i,jend+1,kout)
1481 ad_bry_pgr=ad_bry_pgr+adfac
1482 ad_bry_cor=ad_bry_cor+adfac
1483 ad_bry_str=ad_bry_str+adfac
1484 ad_vbar(i,jend+1,know)=ad_vbar(i,jend+1,know)+ &
1485 & ad_vbar(i,jend+1,kout)
1486 ad_vbar(i,jend+1,kout)=0.0_r8
1492 adfac=cff*ad_bry_str
1493 forces(ng)%ad_svstr(i,jend+1)= &
1494 &
forces(ng)%ad_svstr(i,jend+1)+ &
1496 forces(ng)%ad_bvstr(i,jend+1)= &
1497 &
forces(ng)%ad_bvstr(i,jend+1)- &
1499 ad_cff=ad_cff+(
forces(ng)%svstr(i,jend+1)- &
1500 &
forces(ng)%bvstr(i,jend+1))*ad_bry_str
1507 adfac=-cff*cff*0.5_r8*ad_cff
1508 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)+adfac
1509 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1510 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
1511 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
1521 adfac=-0.125_r8*(
grid(ng)%f(i,jend )+ &
1522 &
grid(ng)%f(i,jend+1))*ad_bry_cor
1523 ad_ubar(i ,jend ,know)=ad_ubar(i ,jend ,know)+adfac
1524 ad_ubar(i+1,jend ,know)=ad_ubar(i+1,jend ,know)+adfac
1525 ad_ubar(i ,jend+1,know)=ad_ubar(i ,jend+1,know)+adfac
1526 ad_ubar(i+1,jend+1,know)=ad_ubar(i+1,jend+1,know)+adfac
1534# ifdef ADJUST_BOUNDARY
1541 & ad_zeta_north(i)- &
1543 &
grid(ng)%pn(i,jend)* &
1550 ad_zeta(i,jend,know)=ad_zeta(i,jend,know)+ &
1551 &
g*0.5_r8*
grid(ng)%pn(i,jend)* &
1560 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jend )+ &
1561 &
grid(ng)%pn(i,jend+1))*ad_bry_pgr
1562 ad_zeta(i,jend ,know)=ad_zeta(i,jend ,know)-adfac
1563 ad_zeta(i,jend+1,know)=ad_zeta(i,jend+1,know)+adfac
1576 ad_vbar(i,jend+1,kout)=0.0_r8
1586 IF (
domain(ng)%Southern_Edge(tile))
THEN
1591 IF (
iic(ng).ne.0)
THEN
1594# if defined CELERITY_READ && defined FORWARD_READ
1598 & (
clima(ng)%M2nudgcof(i,jstr-1)+ &
1599 &
clima(ng)%M2nudgcof(i,jstr ))
1600 obc_in =
obcfac(ng)*obc_out
1605 IF (
boundary(ng)%vbar_south_Ce(i).lt.0.0_r8)
THEN
1624 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1625 &
grid(ng)%vmask(i,jstr)
1631 ad_vbar(i,jstr,know)=ad_vbar(i,jstr,know)- &
1632 & tau*ad_vbar(i,jstr,kout)
1642 adfac=ad_vbar(i,jstr,kout)/(cff+ce)
1643 ad_grad(i ,jstr)=ad_grad(i ,jstr)-max(cx,0.0_r8)*adfac
1644 ad_grad(i+1,jstr)=ad_grad(i+1,jstr)-min(cx,0.0_r8)*adfac
1645 ad_vbar(i,jstr ,know)=ad_vbar(i,jstr ,know)+cff*adfac
1646 ad_vbar(i,jstr-1,kout)=ad_vbar(i,jstr-1,kout)+ce *adfac
1647 ad_vbar(i,jstr ,kout)=0.0_r8
1657 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1658 & zeta(i,jstr-1,know)+ &
1659 &
grid(ng)%h(i,jstr )+ &
1660 & zeta(i,jstr ,know)))
1666 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1667 &
grid(ng)%vmask(i,jstr)
1669# ifdef ADJUST_BOUNDARY
1675 & ad_zeta_south(i)+ &
1676 & ce*ad_vbar(i,jstr,kout)
1679# if defined ATM_PRESS && defined PRESS_COMPENSATE
1693 adfac=ce*0.5_r8*ad_vbar(i,jstr,kout)
1694 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1695 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)-adfac
1697 & (0.5_r8*(zeta(i,jstr-1,know)+ &
1698 & zeta(i,jstr ,know)+ &
1699 & fac*(
forces(ng)%Pair(i,jstr-1)+ &
1700 &
forces(ng)%Pair(i,jstr )- &
1701 & 2.0_r8*oneatm))- &
1702 &
boundary(ng)%zeta_south(i))*ad_vbar(i,jstr,kout)
1703 ad_bry_val=ad_bry_val+ad_vbar(i,jstr,kout)
1704 ad_vbar(i,jstr,kout)=0.0_r8
1715 adfac=ce*0.5_r8*ad_vbar(i,jstr,kout)
1716 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1717 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)-adfac
1719 & (0.5_r8*(zeta(i,jstr-1,know)+ &
1720 & zeta(i,jstr ,know))- &
1721 &
boundary(ng)%zeta_south(i))*ad_vbar(i,jstr,kout)
1722 ad_bry_val=ad_bry_val+ad_vbar(i,jstr,kout)
1723 ad_vbar(i,jstr,kout)=0.0_r8
1727 ad_cff=ad_cff+0.5_r8*
g*ad_ce/ce
1734 adfac=-cff*cff*0.5_r8*ad_cff
1735 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1736 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1737 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1738 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1741# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
1743 bry_pgr=-
g*(zeta(i,jstr,know)- &
1745 & 0.5_r8*
grid(ng)%pn(i,jstr)
1747 bry_pgr=-
g*(zeta(i,jstr ,know)- &
1748 & zeta(i,jstr-1,know))* &
1749 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1750 &
grid(ng)%pn(i,jstr ))
1753 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
1754 & ubar(i+1,jstr-1,know)+ &
1755 & ubar(i ,jstr ,know)+ &
1756 & ubar(i+1,jstr ,know))* &
1757 & (
grid(ng)%f(i,jstr-1)+ &
1758 &
grid(ng)%f(i,jstr ))
1762 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1763 & zeta(i,jstr-1,know)+ &
1764 &
grid(ng)%h(i,jstr )+ &
1765 & zeta(i,jstr ,know)))
1766 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
1767 &
forces(ng)%bvstr(i,jstr))
1768 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1769 & zeta(i,jstr-1,know)+ &
1770 &
grid(ng)%h(i,jstr )+ &
1771 & zeta(i,jstr ,know)))
1772 cff2=
grid(ng)%on_v(i,jstr)*ce
1781 adfac=cff2*ad_bry_val
1782 tl_bry_pgr=tl_bry_pgr+adfac
1783 tl_bry_cor=tl_bry_cor+adfac
1784 tl_bry_str=tl_bry_str+adfac
1785 ad_cff2=ad_cff2+(bry_pgr+ &
1787 & bry_str)*ad_bry_val
1788 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ad_bry_val
1792 ad_ce=ad_ce+
grid(ng)%on_v(i,jstr)*ad_cff2
1799 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
1800 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1801 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1802 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1803 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1810 adfac=cff1*ad_bry_str
1811 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
1813 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
1815 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jstr)- &
1816 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
1823 adfac=-cff1*cff1*0.5_r8*ad_cff1
1824 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
1825 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1826 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
1827 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
1837 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
1838 &
grid(ng)%f(i,jstr ))*ad_bry_cor
1839 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
1840 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
1841 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
1842 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
1850# ifdef ADJUST_BOUNDARY
1857 & ad_zeta_south(i)+ &
1859 &
grid(ng)%pn(i,jstr)* &
1866 tl_zeta(i,jstr,know)=tl_zeta(i,jstr,know)- &
1867 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
1876 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1877 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
1878 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
1879 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
1883# ifdef ADJUST_BOUNDARY
1888 & ad_vbar_south(i)+ &
1910 cff=0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
1911 &
grid(ng)%h(i,jstr ))
1913 ce=dt2d*cff1*cff*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
1914 &
grid(ng)%pn(i,jstr ))
1915 ze=(0.5_r8+ce)*zeta(i,jstr ,know)+ &
1916 & (0.5_r8-ce)*zeta(i,jstr-1,know)
1918 cff2=(1.0_r8-
co/ce)**2
1919 cff3=zeta(i,jstr,kout)+ &
1920 & ce*zeta(i,jstr-1,know)- &
1921 & (1.0_r8+ce)*zeta(i,jstr,know)
1928 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
1929 &
grid(ng)%vmask(i,jstr)
1931# ifdef ADJUST_BOUNDARY
1937 & ad_zeta_south(i)+ &
1938 & ce*ad_vbar(i,jstr,kout)
1952 adfac=0.5_r8*ad_vbar(i,jstr,kout)
1953 ad_vbar(i,jstr ,know)=ad_vbar(i,jstr,know)+ &
1955 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ &
1958 & (vbar(i,jstr ,know)- &
1959 & vbar(i,jstr+1,know))*adfac
1960 ad_bry_val=ad_bry_val+adfac
1962 & (ze-
boundary(ng)%zeta_south(i))*adfac
1963 ad_ze=ad_ze+cff1*adfac
1964 ad_vbar(i,jstr,kout)=0.0_r8
1969 ad_cff2=ad_cff2+cff3*ad_ze
1970 ad_cff3=ad_cff3+cff2*ad_ze
1977 ad_zeta(i,jstr ,kout)=ad_zeta(i,jstr ,kout)+ &
1979 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)- &
1980 & (1.0_r8+ce)*ad_cff3
1981 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+ &
1984 & (zeta(i,jstr-1,know)+ &
1985 & zeta(i,jstr ,know))*ad_cff3
1990 & 2.0_r8*cff2*
co*ad_cff2/(ce*ce)
1998 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+ &
2000 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+ &
2003 & (zeta(i,jstr ,know)- &
2004 & zeta(i,jstr-1,know))*ad_ze
2011 adfac=dt2d*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2012 &
grid(ng)%pn(i,jstr ))*ad_ce
2013 ad_cff=ad_cff+cff1*adfac
2014 ad_cff1=ad_cff1+cff*adfac
2019 & 0.5_r8*cff1*ad_cff1/cff
2022# ifdef WET_DRY_NOT_YET
2029 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2030 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2031 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2032 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2039 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2040 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2044# if defined SSH_TIDES_NOT_YET && !defined UV_TIDES_NOT_YET
2046 bry_pgr=-
g*(zeta(i,jstr,know)- &
2048 & 0.5_r8*
grid(ng)%pn(i,jstr)
2050 bry_pgr=-
g*(zeta(i,jstr ,know)- &
2051 & zeta(i,jstr-1,know))* &
2052 & 0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2053 &
grid(ng)%pn(i,jstr ))
2056 bry_cor=-0.125_r8*(ubar(i ,jstr-1,know)+ &
2057 & ubar(i+1,jstr-1,know)+ &
2058 & ubar(i ,jstr ,know)+ &
2059 & ubar(i+1,jstr ,know))* &
2060 & (
grid(ng)%f(i,jstr-1)+ &
2061 &
grid(ng)%f(i,jstr ))
2065 cff1=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2066 & zeta(i,jstr-1,know)+ &
2067 &
grid(ng)%h(i,jstr )+ &
2068 & zeta(i,jstr ,know)))
2069 bry_str=cff1*(
forces(ng)%svstr(i,jstr)- &
2070 &
forces(ng)%bvstr(i,jstr))
2071 ce=1.0_r8/sqrt(
g*0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2072 & zeta(i,jstr-1,know)+ &
2073 &
grid(ng)%h(i,jstr )+ &
2074 & zeta(i,jstr ,know)))
2075 cff2=
grid(ng)%on_v(i,jstr)*ce
2084 adfac=cff2*ad_bry_val
2085 tl_bry_pgr=tl_bry_pgr+adfac
2086 tl_bry_cor=tl_bry_cor+adfac
2087 tl_bry_str=tl_bry_str+adfac
2088 ad_cff2=ad_cff2+(bry_pgr+ &
2090 & bry_str)*ad_bry_val
2091 ad_vbar(i,jstr+1,know)=ad_vbar(i,jstr+1,know)+ad_bry_val
2095 ad_ce=ad_ce+
grid(ng)%on_v(i,jstr)*ad_cff2
2102 adfac=-ce*ce*ce*0.25_r8*
g*ad_ce
2103 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2104 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2105 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2106 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2113 adfac=cff1*ad_bry_str
2114 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
2116 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
2118 ad_cff1=ad_cff1+(
forces(ng)%svstr(i,jstr)- &
2119 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
2126 adfac=-cff1*cff1*0.5_r8*ad_cff1
2127 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2128 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2129 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2130 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2140 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
2141 &
grid(ng)%f(i,jstr ))*ad_bry_cor
2142 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
2143 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
2144 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
2145 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
2153# ifdef ADJUST_BOUNDARY
2160 & ad_zeta_south(i)+ &
2162 &
grid(ng)%pn(i,jstr)* &
2169 tl_zeta(i,jstr,know)=tl_zeta(i,jstr,know)- &
2170 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
2179 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2180 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
2181 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
2182 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2186# ifdef ADJUST_BOUNDARY
2191 & ad_vbar_south(i)+ &
2217 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2218 &
grid(ng)%vmask(i,jstr)
2220# ifdef ADJUST_BOUNDARY
2225 & ad_vbar_south(i)+ &
2226 & ad_vbar(i,jstr,kout)
2227 ad_vbar(i,jstr,kout)=0.0_r8
2231 ad_vbar(i,jstr,kout)=0.0_r8
2236 ad_vbar(i,jstr,kout)=0.0_r8
2250 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2251 &
grid(ng)%vmask(i,jstr)
2255 ad_vbar(i,jstr+1,kout)=ad_vbar(i,jstr+1,kout)+ &
2256 & ad_vbar(i,jstr,kout)
2257 ad_vbar(i,jstr ,kout)=0.0_r8
2266 cff=1.0_r8/(0.5_r8*(
grid(ng)%h(i,jstr-1)+ &
2267 & zeta(i,jstr-1,know)+ &
2268 &
grid(ng)%h(i,jstr )+ &
2269 & zeta(i,jstr ,know)))
2274 ad_vbar(i,jstr,kout)=ad_vbar(i,jstr,kout)* &
2275 &
grid(ng)%vmask(i,jstr)
2282 adfac=dt2d*ad_vbar(i,jstr,kout)
2283 ad_bry_pgr=ad_bry_pgr+adfac
2284 ad_bry_cor=ad_bry_cor+adfac
2285 ad_bry_str=ad_bry_str+adfac
2286 ad_vbar(i,jstr,know)=ad_vbar(i,jstr,know)+ &
2287 & ad_vbar(i,jstr,kout)
2288 ad_vbar(i,jstr,kout)=0.0_r8
2294 adfac=cff*ad_bry_str
2295 forces(ng)%ad_svstr(i,jstr)=
forces(ng)%ad_svstr(i,jstr)+ &
2297 forces(ng)%ad_bvstr(i,jstr)=
forces(ng)%ad_bvstr(i,jstr)- &
2299 ad_cff=ad_cff+(
forces(ng)%svstr(i,jstr)- &
2300 &
forces(ng)%bvstr(i,jstr))*ad_bry_str
2307 adfac=-cff*cff*0.5_r8*ad_cff
2308 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)+adfac
2309 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2310 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
2311 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
2321 adfac=-0.125_r8*(
grid(ng)%f(i,jstr-1)+ &
2322 &
grid(ng)%f(i,jstr ))*ad_bry_cor
2323 ad_ubar(i ,jstr-1,know)=ad_ubar(i ,jstr-1,know)+adfac
2324 ad_ubar(i+1,jstr-1,know)=ad_ubar(i+1,jstr-1,know)+adfac
2325 ad_ubar(i ,jstr ,know)=ad_ubar(i ,jstr ,know)+adfac
2326 ad_ubar(i+1,jstr ,know)=ad_ubar(i+1,jstr ,know)+adfac
2334# ifdef ADJUST_BOUNDARY
2341 & ad_zeta_south(i)+ &
2343 &
grid(ng)%pn(i,jstr)* &
2350 ad_zeta(i,jstr,know)=ad_zeta(i,jstr,know)- &
2351 &
g*0.5_r8*
grid(ng)%pn(i,jstr)* &
2360 adfac=-
g*0.5_r8*(
grid(ng)%pn(i,jstr-1)+ &
2361 &
grid(ng)%pn(i,jstr ))*ad_bry_pgr
2362 ad_zeta(i,jstr-1,know)=ad_zeta(i,jstr-1,know)-adfac
2363 ad_zeta(i,jstr ,know)=ad_zeta(i,jstr ,know)+adfac
2376 ad_vbar(i,jstr,kout)=0.0_r8