68 & LBi, UBi, LBj, UBj, LBij, UBij, &
69 & IminS, ImaxS, JminS, JmaxS, &
80 integer,
intent(in) :: ng, tile
81 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
82 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
83 integer,
intent(in) :: Linp
87 integer :: i, ib, it1, it2, j
91 real(r8) :: adfac, fac, fac1, fac2
93# include "set_bounds.h"
101 IF (
nbrec(ng).eq.1)
THEN
107# ifdef GENERIC_DSTART
110 it1=max(0,(
iic(ng)-1)/
nobc(ng))+1
112 it2=min(it1+1,
nbrec(ng))
115 fac=1.0_r8/(fac1+fac2)
126 &
domain(ng)%Western_Edge(tile))
THEN
149 &
domain(ng)%Eastern_Edge(tile))
THEN
172 &
domain(ng)%Southern_Edge(tile))
THEN
189 boundary(ng)%ad_ubar_south(i)=0.0_r8
195 &
domain(ng)%Northern_Edge(tile))
THEN
212 boundary(ng)%ad_ubar_north(i)=0.0_r8
220 &
domain(ng)%Western_Edge(tile))
THEN
243 &
domain(ng)%Eastern_Edge(tile))
THEN
266 &
domain(ng)%Southern_Edge(tile))
THEN
283 boundary(ng)%ad_vbar_south(i)=0.0_r8
289 &
domain(ng)%Northern_Edge(tile))
THEN
306 boundary(ng)%ad_vbar_north(i)=0.0_r8
315 &
domain(ng)%Western_Edge(tile))
THEN
338 &
domain(ng)%Eastern_Edge(tile))
THEN
361 &
domain(ng)%Southern_Edge(tile))
THEN
378 boundary(ng)%ad_zeta_south(i)=0.0_r8
384 &
domain(ng)%Northern_Edge(tile))
THEN
401 boundary(ng)%ad_zeta_north(i)=0.0_r8
411 &
domain(ng)%Western_Edge(tile))
THEN
436 &
domain(ng)%Eastern_Edge(tile))
THEN
461 &
domain(ng)%Southern_Edge(tile))
THEN
486 &
domain(ng)%Northern_Edge(tile))
THEN
513 &
domain(ng)%Western_Edge(tile))
THEN
538 &
domain(ng)%Eastern_Edge(tile))
THEN
563 &
domain(ng)%Southern_Edge(tile))
THEN
588 &
domain(ng)%Northern_Edge(tile))
THEN
616 &
domain(ng)%Western_Edge(tile))
THEN
634 boundary(ng)%ad_t_west(j,k,it)=0.0_r8
641 &
domain(ng)%Eastern_Edge(tile))
THEN
659 boundary(ng)%ad_t_east(j,k,it)=0.0_r8
666 &
domain(ng)%Southern_Edge(tile))
THEN
684 boundary(ng)%ad_t_south(i,k,it)=0.0_r8
691 &
domain(ng)%Northern_Edge(tile))
THEN
709 boundary(ng)%ad_t_north(i,k,it)=0.0_r8
763 & LBi, UBi, LBj, UBj, LBij, UBij, &
764 & IminS, ImaxS, JminS, JmaxS, &
780 integer,
intent(in) :: ng, tile
781 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
782 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
783 integer,
intent(in) :: Linp
787 real(r8),
intent(in) :: umask(LBi:,LBj:)
788 real(r8),
intent(in) :: vmask(LBi:,LBj:)
790 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
791 real(r8),
intent(in) :: Hz_bry(LBij:,:,:)
792 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
793 real(r8),
intent(inout) :: ad_Hz_bry(LBij:,:,:)
796 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
797 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
799 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
800 real(r8),
intent(in) :: Hz_bry(LBij:UBij,N(ng),4)
801 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
802 real(r8),
intent(inout) :: ad_Hz_bry(LBij:UBij,N(ng),4)
807 integer :: i, ib, it1, it2, j, k
808 real(r8) :: adfac, fac, fac1, fac2
809 real(r8) :: cff1, ad_cff1, ad_cff2
811 real(r8),
dimension(0:N(ng)) :: CF
812 real(r8),
dimension(0:N(ng)) :: DC
814 real(r8),
dimension(0:N(ng)) :: ad_CF
815 real(r8),
dimension(0:N(ng)) :: ad_DC
817# include "set_bounds.h"
825 IF (
nbrec(ng).eq.1)
THEN
831# ifdef GENERIC_DSTART
834 it1=max(0,(
iic(ng)-1)/
nobc(ng))+1
836 it2=min(it1+1,
nbrec(ng))
839 fac=1.0_r8/(fac1+fac2)
856 &
domain(ng)%Western_Edge(tile))
THEN
862 dc(k)=0.5_r8*(hz_bry(j,k,
iwest)+ &
865 cf(0)=cf(0)+dc(k)*
boundary(ng)%u_west(j,k)
870 ad_cff2=
boundary(ng)%ad_ubar_west(j)
875 ad_cff2=ad_cff2*umask(i,j)
879 ad_cff1=ad_cff1+cf(0)*ad_cff2
880 ad_cf(0)=ad_cf(0)+ad_cff2*cff1
884 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
891 ad_dc(k)=ad_dc(k)+
boundary(ng)%u_west(j,k)*ad_cf(0)
896 ad_dc(k)=ad_dc(k)+ad_dc(0)
900 adfac=0.5_r8*ad_dc(k)
901 ad_hz(i+1,j,k)=ad_hz(i+1,j,k)+adfac
902 ad_hz_bry(j,k,
iwest)=ad_hz_bry(j,k,
iwest)+adfac
916 &
domain(ng)%Eastern_Edge(tile))
THEN
922 dc(k)=0.5_r8*(hz(i-1,j,k)+ &
925 cf(0)=cf(0)+dc(k)*
boundary(ng)%u_east(j,k)
930 ad_cff2=ad_cff2+
boundary(ng)%ad_ubar_east(j)
935 ad_cff2=ad_cff2*umask(i,j)
939 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
940 ad_cff1=ad_cff1+cf(0)*ad_cff2
944 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
951 ad_dc(k)=ad_dc(k)+
boundary(ng)%u_east(j,k)*ad_cf(0)
956 ad_dc(k)=ad_dc(k)+ad_dc(0)
960 adfac=0.5_r8*ad_dc(k)
961 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac
962 ad_hz_bry(j,k,
ieast)=ad_hz_bry(j,k,
ieast)+adfac
976 &
domain(ng)%Southern_Edge(tile))
THEN
982 dc(k)=0.5_r8*(hz_bry(i-1,k,
isouth)+ &
985 cf(0)=cf(0)+dc(k)*
boundary(ng)%u_south(i,k)
990 ad_cff2=ad_cff2+
boundary(ng)%ad_ubar_south(i)
991 boundary(ng)%ad_ubar_south(i)=0.0_r8
995 ad_cff2=ad_cff2*umask(i,j)
999 ad_cff1=ad_cff1+cf(0)*ad_cff2
1000 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1004 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1011 ad_dc(k)=ad_dc(k)+
boundary(ng)%u_south(i,k)*ad_cf(0)
1016 ad_dc(k)=ad_dc(k)+ad_dc(0)
1020 adfac=0.5_r8*ad_dc(k)
1036 &
domain(ng)%Northern_Edge(tile))
THEN
1042 dc(k)=0.5_r8*(hz_bry(i-1,k,
inorth)+ &
1045 cf(0)=cf(0)+dc(k)*
boundary(ng)%u_north(i,k)
1050 ad_cff2=ad_cff2+
boundary(ng)%ad_ubar_north(i)
1051 boundary(ng)%ad_ubar_north(i)=0.0_r8
1055 ad_cff2=ad_cff2*umask(i,j)
1059 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1060 ad_cff1=ad_cff1+cf(0)*ad_cff2
1064 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1071 ad_dc(k)=ad_dc(k)+
boundary(ng)%u_north(i,k)*ad_cf(0)
1077 ad_dc(k)=ad_dc(k)+ad_dc(0)
1081 adfac=0.5_r8*ad_dc(k)
1100 &
domain(ng)%Western_Edge(tile))
THEN
1106 dc(k)=0.5_r8*(hz_bry(j-1,k,
iwest)+ &
1107 & hz_bry(j ,k,
iwest))
1109 cf(0)=cf(0)+dc(k)*
boundary(ng)%v_west(j,k)
1114 ad_cff2=ad_cff2+
boundary(ng)%ad_vbar_west(j)
1115 boundary(ng)%ad_vbar_west(j)=0.0_r8
1119 ad_cff2=ad_cff2*vmask(i,j)
1123 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1124 ad_cff1=ad_cff1+cf(0)*ad_cff2
1128 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1137 ad_dc(k)=ad_dc(k)+
boundary(ng)%v_west(j,k)*ad_cf(0)
1140 ad_dc(k)=ad_dc(k)+ad_dc(0)
1144 adfac=0.5_r8*ad_dc(k)
1145 ad_hz_bry(j-1,k,
iwest)=ad_hz_bry(j-1,k,
iwest)+adfac
1146 ad_hz_bry(j ,k,
iwest)=ad_hz_bry(j ,k,
iwest)+adfac
1160 &
domain(ng)%Eastern_Edge(tile))
THEN
1166 dc(k)=0.5_r8*(hz_bry(j-1,k,
ieast)+ &
1167 & hz_bry(j ,k,
ieast))
1169 cf(0)=cf(0)+dc(k)*
boundary(ng)%v_east(j,k)
1174 ad_cff2=ad_cff2+
boundary(ng)%ad_vbar_east(j)
1175 boundary(ng)%ad_vbar_east(j)=0.0_r8
1179 ad_cff2=ad_cff2*vmask(i,j)
1183 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1184 ad_cff1=ad_cff1+cf(0)*ad_cff2
1188 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1197 ad_dc(k)=ad_dc(k)+
boundary(ng)%v_east(j,k)*ad_cf(0)
1200 ad_dc(k)=ad_dc(k)+ad_dc(0)
1205 adfac=0.5_r8*ad_dc(k)
1206 ad_hz_bry(j-1,k,
ieast)=ad_hz_bry(j-1,k,
ieast)+adfac
1207 ad_hz_bry(j ,k,
ieast)=ad_hz_bry(j ,k,
ieast)+adfac
1221 &
domain(ng)%Southern_Edge(tile))
THEN
1227 dc(k)=0.5_r8*(hz_bry(i,k,
isouth)+ &
1230 cf(0)=cf(0)+dc(k)*
boundary(ng)%v_south(i,k)
1235 ad_cff2=ad_cff2+
boundary(ng)%ad_vbar_south(i)
1236 boundary(ng)%ad_vbar_south(i)=0.0_r8
1240 ad_cff2=ad_cff2*vmask(i,j)
1244 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1245 ad_cff1=ad_cff1+cf(0)*ad_cff2
1249 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1258 ad_dc(k)=ad_dc(k)+
boundary(ng)%v_south(i,k)*ad_cf(0)
1261 ad_dc(k)=ad_dc(k)+ad_dc(0)
1265 adfac=0.5_r8*ad_dc(k)
1267 ad_hz(i+1,j,k)=ad_hz(i+1,j,k)+adfac
1281 &
domain(ng)%Northern_Edge(tile))
THEN
1287 dc(k)=0.5_r8*(hz(i,j-1,k)+ &
1290 cf(0)=cf(0)+dc(k)*
boundary(ng)%v_north(i,k)
1295 ad_cff2=ad_cff2+
boundary(ng)%ad_vbar_north(i)
1296 boundary(ng)%ad_vbar_north(i)=0.0_r8
1300 ad_cff2=ad_cff2*vmask(i,j)
1304 ad_cf(0)=ad_cf(0)+cff1*ad_cff2
1305 ad_cff1=ad_cff1+cf(0)*ad_cff2
1309 ad_dc(0)=ad_dc(0)-cff1*cff1*ad_cff1
1318 ad_dc(k)=ad_dc(k)+
boundary(ng)%v_north(i,k)*ad_cf(0)
1321 ad_dc(k)=ad_dc(k)+ad_dc(0)
1325 adfac=0.5_r8*ad_dc(k)
1327 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac