89 & LBi, UBi, LBj, UBj, UBk, UBt, &
90 & IminS, ImaxS, JminS, JmaxS, &
95 & Hz, ad_Hz, z_r, ad_z_r, &
96 & z_w, ad_z_w, t, ad_t)
106 integer,
intent(in) :: ng, tile
107 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
108 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
109 integer,
intent(in) :: nstp, nnew
113 real(r8),
intent(in) :: rmask(LBi:,LBj:)
115 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
116 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
117 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
118 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
120 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
121 real(r8),
intent(inout) :: ad_z_r(LBi:,LBj:,:)
122 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
123 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
126 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
128 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
129 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
130 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
131 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
133 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,UBk)
134 real(r8),
intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,UBk)
135 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:UBk)
136 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,UBk,3,UBt)
141 integer,
parameter :: Nsink = 1
143 integer :: Iter, i, ibio, isink, itrc, itrmx, j, k, ks
146 integer,
dimension(Nsink) :: idsink
148 real(r8),
parameter :: eps = 1.0e-16_r8
150 real(r8) :: cff, cff1, cff2, cff3, dtdays
151 real(r8) :: ad_cff, ad_cff1
152 real(r8) :: adfac, adfac1, adfac2, adfac3
153 real(r8) :: cffL, cffR, cu, dltL, dltR
154 real(r8) :: ad_cffL, ad_cffR, ad_cu, ad_dltL, ad_dltR
156 real(r8),
dimension(Nsink) :: Wbio
157 real(r8),
dimension(Nsink) :: ad_Wbio
159 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
161 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
162 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio1
163 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
165 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: ad_Bio
166 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: ad_Bio_old
168 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
169 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
171 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
172 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
173 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
174 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
175 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
176 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
177 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL1
178 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
179 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR1
180 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
182 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv
183 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv2
184 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv3
185 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_WL
186 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_WR
187 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bL
188 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bR
189 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_qc
191#include "set_bounds.h"
214 j_loop :
DO j=jstr,jend
236 ad_hz_inv(i,k)=0.0_r8
237 ad_hz_inv2(i,k)=0.0_r8
238 ad_hz_inv3(i,k)=0.0_r8
259 bio1(i,k,ibio)=0.0_r8
260 ad_bio(i,k,ibio)=0.0_r8
261 ad_bio_old(i,k,ibio)=0.0_r8
270 hz_inv(i,k)=1.0_r8/hz(i,j,k)
275 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
280 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
298 bio_old(i,k,ibio)=t(i,j,k,nstp,ibio)
307 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
308 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
309 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
310 & max(0.0_r8,eps-bio_old(i,k,
isdet))
314 IF (cff1.gt.0.0)
THEN
316 cff=t(i,j,k,nstp,itrmx)
318 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
320 cff=t(i,j,k,nstp,ibio)
328 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
329 & cff1*(sign(0.5_r8, &
330 & real(itrmx-ibio,r8)**2)+ &
332 & -real(itrmx-ibio,r8)**2))
337 bio(i,k,ibio)=bio_old(i,k,ibio)
404 cff=bio(i,k,
iphyt)* &
405 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
417 cff1=dtdays*
zoogr(ng)
418 cff2=dtdays*
phymr(ng)
438 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
439 cff2=dtdays*
zoomr(ng)
440 cff3=dtdays*
zoomd(ng)
445 & bio(i,k,
izoop)*cff2
447 & bio(i,k,
izoop)*cff3
453 cff1=dtdays*
detrr(ng)
454 cff2=1.0_r8/(1.0_r8+cff1)
459 & bio(i,k,
isdet)*cff1
481 qc(i,k)=bio(i,k,ibio)
487 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
492 dltr=hz(i,j,k)*fc(i,k)
493 dltl=hz(i,j,k)*fc(i,k-1)
494 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
501 IF ((dltr*dltl).le.0.0_r8)
THEN
504 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
506 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
519 cff=(dltr-dltl)*hz_inv3(i,k)
520 dltr=dltr-cff*hz(i,j,k+1)
521 dltl=dltl+cff*hz(i,j,k-1)
524 wr(i,k)=(2.0_r8*dltr-dltl)**2
525 wl(i,k)=(dltr-2.0_r8*dltl)**2
531 dltl=max(cff,wl(i,k ))
532 dltr=max(cff,wr(i,k+1))
533 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
539#if defined LINEAR_CONTINUATION
540 bl(i,
n(ng))=br(i,
n(ng)-1)
541 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
543 bl(i,
n(ng))=br(i,
n(ng)-1)
544 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
546 br(i,
n(ng))=qc(i,
n(ng))
547 bl(i,
n(ng))=qc(i,
n(ng))
548 br(i,
n(ng)-1)=qc(i,
n(ng))
550#if defined LINEAR_CONTINUATION
552 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
555 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
573 IF ((dltr*dltl).lt.0.0_r8)
THEN
576 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
578 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
600 cff=dtdays*abs(wbio(isink))
604 wl(i,k)=z_w(i,j,k-1)+cff
605 wr(i,k)=hz(i,j,k)*qc(i,k)
612 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
614 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
625 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
626 fc(i,k-1)=fc(i,k-1)+ &
629 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
631 & (br(i,ks)+bl(i,ks)- &
637 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
663 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
667 ad_hz(i,j,k)=ad_hz(i,j,k)+cff*ad_t(i,j,k,nnew,ibio)
668 ad_cff=ad_cff+hz(i,j,k)*ad_t(i,j,k,nnew,ibio)
671 ad_bio_old(i,k,ibio)=ad_bio_old(i,k,ibio)-ad_cff
672 ad_bio(i,k,ibio)=ad_bio(i,k,ibio)+ad_cff
694 iter_loop:
DO iter=
bioiter(ng),1,-1
711 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
712 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
713 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
714 & max(0.0_r8,eps-bio_old(i,k,
isdet))
718 IF (cff1.gt.0.0)
THEN
720 cff=t(i,j,k,nstp,itrmx)
722 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
724 cff=t(i,j,k,nstp,ibio)
732 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
733 & cff1*(sign(0.5_r8, &
734 & real(itrmx-ibio,r8)**2)+ &
736 & -real(itrmx-ibio,r8)**2))
741 bio(i,k,ibio)=bio_old(i,k,ibio)
759 cff=bio(i,k,
iphyt)* &
760 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
774 cff1=dtdays*
zoogr(ng)
775 cff2=dtdays*
phymr(ng)
797 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
798 cff2=dtdays*
zoomr(ng)
799 cff3=dtdays*
zoomd(ng)
804 & bio(i,k,
izoop)*cff2
806 & bio(i,k,
izoop)*cff3
812 cff1=dtdays*
detrr(ng)
813 cff2=1.0_r8/(1.0_r8+cff1)
818 & bio(i,k,
isdet)*cff1
822 IF (iteradj.ne.iter)
THEN
842 qc(i,k)=bio(i,k,ibio)
848 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
853 dltr=hz(i,j,k)*fc(i,k)
854 dltl=hz(i,j,k)*fc(i,k-1)
855 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
862 IF ((dltr*dltl).le.0.0_r8)
THEN
865 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
867 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
880 cff=(dltr-dltl)*hz_inv3(i,k)
881 dltr=dltr-cff*hz(i,j,k+1)
882 dltl=dltl+cff*hz(i,j,k-1)
885 wr(i,k)=(2.0_r8*dltr-dltl)**2
886 wl(i,k)=(dltr-2.0_r8*dltl)**2
892 dltl=max(cff,wl(i,k ))
893 dltr=max(cff,wr(i,k+1))
894 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
900#if defined LINEAR_CONTINUATION
901 bl(i,
n(ng))=br(i,
n(ng)-1)
902 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
904 bl(i,
n(ng))=br(i,
n(ng)-1)
905 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
907 br(i,
n(ng))=qc(i,
n(ng))
908 bl(i,
n(ng))=qc(i,
n(ng))
909 br(i,
n(ng)-1)=qc(i,
n(ng))
911#if defined LINEAR_CONTINUATION
913 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
916 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
934 IF ((dltr*dltl).lt.0.0_r8)
THEN
937 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
939 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
961 cff=dtdays*abs(wbio(isink))
965 wl(i,k)=z_w(i,j,k-1)+cff
966 wr(i,k)=hz(i,j,k)*qc(i,k)
973 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
975 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
986 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
987 fc(i,k-1)=fc(i,k-1)+ &
990 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
992 & (br(i,ks)+bl(i,ks)- &
998 bio(i,k,ibio)=qc(i,k)+ &
999 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1009 sink_loop:
DO isink=1,nsink
1021 qc(i,k)=bio(i,k,ibio)
1027 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1032 dltr=hz(i,j,k)*fc(i,k)
1033 dltl=hz(i,j,k)*fc(i,k-1)
1034 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1041 IF ((dltr*dltl).le.0.0_r8)
THEN
1044 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1046 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1059 cff=(dltr-dltl)*hz_inv3(i,k)
1060 dltr=dltr-cff*hz(i,j,k+1)
1061 dltl=dltl+cff*hz(i,j,k-1)
1062 br(i,k)=qc(i,k)+dltr
1063 bl(i,k)=qc(i,k)-dltl
1064 wr(i,k)=(2.0_r8*dltr-dltl)**2
1065 wl(i,k)=(dltr-2.0_r8*dltl)**2
1071 dltl=max(cff,wl(i,k ))
1072 dltr=max(cff,wr(i,k+1))
1073 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1079#if defined LINEAR_CONTINUATION
1080 bl(i,
n(ng))=br(i,
n(ng)-1)
1081 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1082#elif defined NEUMANN
1083 bl(i,
n(ng))=br(i,
n(ng)-1)
1084 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1086 br(i,
n(ng))=qc(i,
n(ng))
1087 bl(i,
n(ng))=qc(i,
n(ng))
1088 br(i,
n(ng)-1)=qc(i,
n(ng))
1090#if defined LINEAR_CONTINUATION
1092 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1093#elif defined NEUMANN
1095 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1109 dltr=br(i,k)-qc(i,k)
1110 dltl=qc(i,k)-bl(i,k)
1113 IF ((dltr*dltl).lt.0.0_r8)
THEN
1116 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1118 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1121 br(i,k)=qc(i,k)+dltr
1122 bl(i,k)=qc(i,k)-dltl
1140 cff=dtdays*abs(wbio(isink))
1144 wl(i,k)=z_w(i,j,k-1)+cff
1145 wr(i,k)=hz(i,j,k)*qc(i,k)
1152 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1154 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1165 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1166 fc(i,k-1)=fc(i,k-1)+ &
1169 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1171 & (br(i,ks)+bl(i,ks)- &
1172 & 2.0_r8*qc(i,ks))))
1181 adfac=hz_inv(i,k)*ad_bio(i,k,ibio)
1182 ad_fc(i,k-1)=ad_fc(i,k-1)-adfac
1183 ad_fc(i,k )=ad_fc(i,k )+adfac
1184 ad_hz_inv(i,k)=ad_hz_inv(i,k)+ &
1185 & (fc(i,k)-fc(i,k-1))*ad_bio(i,k,ibio)
1186 ad_qc(i,k)=ad_qc(i,k)+ad_bio(i,k,ibio)
1187 ad_bio(i,k,ibio)=0.0_r8
1196 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1218 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1220 & (br(i,ks)+bl(i,ks)- &
1221 & 2.0_r8*qc(i,ks))))*ad_fc(i,k-1)
1222 adfac1=hz(i,j,ks)*cu*ad_fc(i,k-1)
1224 adfac3=adfac2*(1.5_r8-cu)
1225 ad_hz(i,j,ks)=ad_hz(i,j,ks)+cu*adfac
1226 ad_cu=ad_cu+hz(i,j,ks)*adfac
1227 ad_bl(i,ks)=ad_bl(i,ks)+adfac1
1229 & adfac1*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1231 & (br(i,ks)+bl(i,ks)- &
1232 & 2.0_r8*qc(i,ks)))+ &
1233 & adfac2*(br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))
1234 ad_br(i,ks)=ad_br(i,ks)+0.5_r8*adfac2-adfac3
1235 ad_bl(i,ks)=ad_bl(i,ks)-0.5_r8*adfac2-adfac3
1236 ad_qc(i,ks)=ad_qc(i,ks)+2.0_r8*adfac3
1243 adfac=(0.5_r8+sign(0.5_r8, &
1244 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1245 & hz_inv(i,ks))))*ad_cu
1246 adfac1=adfac*hz_inv(i,ks)
1247 ad_wl(i,k)=ad_wl(i,k)+adfac1
1248 ad_z_w(i,j,ks-1)=ad_z_w(i,j,ks-1)-adfac1
1249 ad_hz_inv(i,ks)=ad_hz_inv(i,ks)+ &
1250 & (wl(i,k)-z_w(i,j,ks-1))*adfac
1269 cff=dtdays*abs(wbio(isink))
1273 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1276 ad_wr(i,ks)=ad_wr(i,ks)+ad_fc(i,k-1)
1285 ad_hz(i,j,k)=ad_hz(i,j,k)+qc(i,k)*ad_wr(i,k)
1286 ad_qc(i,k)=ad_qc(i,k)+hz(i,j,k)*ad_wr(i,k)
1290 ad_z_w(i,j,k-1)=ad_z_w(i,j,k-1)+ad_wl(i,k)
1291 ad_cff=ad_cff+ad_wl(i,k)
1300 ad_wbio(isink)=ad_wbio(isink)+ &
1301 & dtdays*sign(1.0_r8,wbio(isink))*ad_cff
1313 qc(i,k)=bio(i,k,ibio)
1319 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1324 dltr=hz(i,j,k)*fc(i,k)
1325 dltl=hz(i,j,k)*fc(i,k-1)
1326 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1333 IF ((dltr*dltl).le.0.0_r8)
THEN
1336 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1338 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1351 cff=(dltr-dltl)*hz_inv3(i,k)
1352 dltr=dltr-cff*hz(i,j,k+1)
1353 dltl=dltl+cff*hz(i,j,k-1)
1354 br(i,k)=qc(i,k)+dltr
1355 bl(i,k)=qc(i,k)-dltl
1356 wr(i,k)=(2.0_r8*dltr-dltl)**2
1357 wl(i,k)=(dltr-2.0_r8*dltl)**2
1363 dltl=max(cff,wl(i,k ))
1364 dltr=max(cff,wr(i,k+1))
1365 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1371#if defined LINEAR_CONTINUATION
1372 bl(i,
n(ng))=br(i,
n(ng)-1)
1373 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1374#elif defined NEUMANN
1375 bl(i,
n(ng))=br(i,
n(ng)-1)
1376 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1378 br(i,
n(ng))=qc(i,
n(ng))
1379 bl(i,
n(ng))=qc(i,
n(ng))
1380 br(i,
n(ng)-1)=qc(i,
n(ng))
1382#if defined LINEAR_CONTINUATION
1384 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1385#elif defined NEUMANN
1387 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1401 dltr=br(i,k)-qc(i,k)
1402 dltl=qc(i,k)-bl(i,k)
1407 ad_qc(i,k)=ad_qc(i,k)+ad_bl(i,k)
1408 ad_dltl=ad_dltl-ad_bl(i,k)
1412 ad_qc(i,k)=ad_qc(i,k)+ad_br(i,k)
1413 ad_dltr=ad_dltr+ad_br(i,k)
1415 IF ((dltr*dltl).lt.0.0_r8)
THEN
1422 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1425 ad_cffl=ad_cffl+ad_dltr
1427 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1430 ad_cffr=ad_cffr+ad_dltl
1435 ad_dltl=ad_dltl+2.0_r8*ad_cffl
1439 ad_dltr=ad_dltr+2.0_r8*ad_cffr
1443 ad_qc(i,k)=ad_qc(i,k)+ad_dltl
1444 ad_bl(i,k)=ad_bl(i,k)-ad_dltl
1448 ad_br(i,k)=ad_br(i,k)+ad_dltr
1449 ad_qc(i,k)=ad_qc(i,k)-ad_dltr
1454#if defined LINEAR_CONTINUATION
1457 ad_bl(i,2)=ad_bl(i,2)+ad_br(i,1)
1461 ad_qc(i,1)=ad_qc(i,1)+2.0_r8*ad_bl(i,1)
1462 ad_br(i,1)=ad_br(i,1)-ad_bl(i,1)
1464#elif defined NEUMANN
1467 ad_bl(i,2)=ad_bl(i,2)+ad_br(i,1)
1471 ad_qc(i,1)=ad_qc(i,1)+1.5_r8*ad_bl(i,1)
1472 ad_br(i,1)=ad_br(i,1)-0.5_r8*ad_bl(i,1)
1479 ad_qc(i,1)=ad_qc(i,1)+ad_bl(i,1)+ &
1486#if defined LINEAR_CONTINUATION
1489 ad_br(i,
n(ng)-1)=ad_br(i,
n(ng)-1)+ad_bl(i,
n(ng))
1490 ad_bl(i,
n(ng))=0.0_r8
1493 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+2.0_r8*ad_br(i,
n(ng))
1494 ad_bl(i,
n(ng))=ad_bl(i,
n(ng))-ad_br(i,
n(ng))
1495 ad_br(i,
n(ng))=0.0_r8
1496#elif defined NEUMANN
1499 ad_br(i,
n(ng)-1)=ad_br(i,
n(ng)-1)+ad_bl(i,
n(ng))
1500 ad_bl(i,
n(ng))=0.0_r8
1503 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+1.5_r8*ad_br(i,
n(ng))
1504 ad_bl(i,
n(ng))=ad_bl(i,
n(ng))-0.5_r8*ad_br(i,
n(ng))
1505 ad_br(i,
n(ng))=0.0_r8
1511 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+ad_br(i,
n(ng)-1)+ &
1514 ad_br(i,
n(ng)-1)=0.0_r8
1515 ad_bl(i,
n(ng))=0.0_r8
1516 ad_br(i,
n(ng))=0.0_r8
1530 qc(i,k)=bio(i,k,ibio)
1536 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1541 dltr=hz(i,j,k)*fc(i,k)
1542 dltl=hz(i,j,k)*fc(i,k-1)
1543 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1550 IF ((dltr*dltl).le.0.0_r8)
THEN
1553 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1555 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1568 cff=(dltr-dltl)*hz_inv3(i,k)
1569 dltr=dltr-cff*hz(i,j,k+1)
1570 dltl=dltl+cff*hz(i,j,k-1)
1571 br(i,k)=qc(i,k)+dltr
1572 bl(i,k)=qc(i,k)-dltl
1573 wr(i,k)=(2.0_r8*dltr-dltl)**2
1574 wl(i,k)=(dltr-2.0_r8*dltl)**2
1581 dltl=max(cff,wl(i,k ))
1582 dltr=max(cff,wr(i,k+1))
1584 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1585 bl1(i,k+1)=bl(i,k+1)
1589 ad_br(i,k)=ad_br(i,k)+ad_bl(i,k+1)
1596 adfac=ad_br(i,k)/(dltr+dltl)
1597 adfac1=ad_br(i,k)*br(i,k)/(dltr+dltl)
1598 ad_dltr=ad_dltr+adfac*br1(i,k)
1599 ad_dltl=ad_dltl+adfac*bl1(i,k+1)
1600 ad_bl(i,k+1)=ad_bl(i,k+1)+dltl*adfac
1601 ad_dltr=ad_dltr-adfac1
1602 ad_dltl=ad_dltl-adfac1
1603 ad_br(i,k)=dltr*adfac
1607 ad_wr(i,k+1)=ad_wr(i,k+1)+ &
1608 & (0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1613 ad_wl(i,k )=ad_wl(i,k )+ &
1614 & (0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1625 dltr=hz(i,j,k)*fc(i,k)
1626 dltl=hz(i,j,k)*fc(i,k-1)
1627 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1634 IF ((dltr*dltl).le.0.0_r8)
THEN
1637 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1639 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1652 cff=(dltr-dltl)*hz_inv3(i,k)
1653 dltr=dltr-cff*hz(i,j,k+1)
1654 dltl=dltl+cff*hz(i,j,k-1)
1658 adfac=ad_wl(i,k)*2.0_r8*(dltr-2.0_r8*dltl)
1659 ad_dltr=ad_dltr+adfac
1660 ad_dltl=ad_dltl-2.0_r8*adfac
1665 adfac=ad_wr(i,k)*2.0_r8*(2.0_r8*dltr-dltl)
1666 ad_dltr=ad_dltr+2.0_r8*adfac
1667 ad_dltl=ad_dltl-adfac
1671 ad_qc(i,k)=ad_qc(i,k)+ad_bl(i,k)
1672 ad_dltl=ad_dltl-ad_bl(i,k)
1676 ad_qc(i,k)=ad_qc(i,k)+ad_br(i,k)
1677 ad_dltr=ad_dltr+ad_br(i,k)
1683 dltr=hz(i,j,k)*fc(i,k)
1684 dltl=hz(i,j,k)*fc(i,k-1)
1685 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1692 IF ((dltr*dltl).le.0.0_r8)
THEN
1695 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1697 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1701 cff=(dltr-dltl)*hz_inv3(i,k)
1704 ad_cff=ad_cff+ad_dltl*hz(i,j,k-1)
1705 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)+cff*ad_dltl
1708 ad_cff=ad_cff-ad_dltr*hz(i,j,k+1)
1709 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)-cff*ad_dltr
1713 adfac=ad_cff*hz_inv3(i,k)
1714 ad_dltr=ad_dltr+adfac
1715 ad_dltl=ad_dltl-adfac
1716 ad_hz_inv3(i,k)=ad_hz_inv3(i,k)+(dltr-dltl)*ad_cff
1721 dltr=hz(i,j,k)*fc(i,k)
1722 dltl=hz(i,j,k)*fc(i,k-1)
1723 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1727 IF ((dltr*dltl).le.0.0_r8)
THEN
1734 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1737 ad_cffl=ad_cffl+ad_dltr
1739 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1742 ad_cffr=ad_cffr+ad_dltl
1747 ad_cff=ad_cff+ad_cffl*fc(i,k-1)
1748 ad_fc(i,k-1)=ad_fc(i,k-1)+cff*ad_cffl
1752 ad_cff=ad_cff+ad_cffr*fc(i,k)
1753 ad_fc(i,k)=ad_fc(i,k)+cff*ad_cffr
1757 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)+ad_cff
1758 ad_hz(i,j,k)=ad_hz(i,j,k)+2.0_r8*ad_cff
1759 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+ad_cff
1763 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_dltl*fc(i,k-1)
1764 ad_fc(i,k-1)=ad_fc(i,k-1)+ad_dltl*hz(i,j,k)
1768 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_dltr*fc(i,k)
1769 ad_fc(i,k)=ad_fc(i,k)+ad_dltr*hz(i,j,k)
1778 adfac=ad_fc(i,k)*hz_inv2(i,k)
1779 ad_qc(i,k+1)=ad_qc(i,k+1)+adfac
1780 ad_qc(i,k)=ad_qc(i,k)-adfac
1781 ad_hz_inv2(i,k)=ad_hz_inv2(i,k)+(qc(i,k+1)-qc(i,k))* &
1790 ad_bio(i,k,ibio)=ad_bio(i,k,ibio)+ad_qc(i,k)
1803 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
1804 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
1805 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
1806 & max(0.0_r8,eps-bio_old(i,k,
isdet))
1810 IF (cff1.gt.0.0)
THEN
1812 cff=t(i,j,k,nstp,itrmx)
1814 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
1816 cff=t(i,j,k,nstp,ibio)
1824 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
1825 & cff1*(sign(0.5_r8, &
1826 & real(itrmx-ibio,r8)**2)+ &
1828 & -real(itrmx-ibio,r8)**2))
1833 bio(i,k,ibio)=bio_old(i,k,ibio)
1851 cff=bio(i,k,
iphyt)* &
1852 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
1859 & bio(i,k,
ino3_)*cff
1866 cff1=dtdays*
zoogr(ng)
1867 cff2=dtdays*
phymr(ng)
1887 IF (iteradj.ne.iter)
THEN
1891 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
1892 cff2=dtdays*
zoomr(ng)
1893 cff3=dtdays*
zoomd(ng)
1898 & bio(i,k,
izoop)*cff2
1900 & bio(i,k,
izoop)*cff3
1906 cff1=dtdays*
detrr(ng)
1907 cff2=1.0_r8/(1.0_r8+cff1)
1912 & bio(i,k,
isdet)*cff1
1934 qc(i,k)=bio(i,k,ibio)
1940 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1945 dltr=hz(i,j,k)*fc(i,k)
1946 dltl=hz(i,j,k)*fc(i,k-1)
1947 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1954 IF ((dltr*dltl).le.0.0_r8)
THEN
1957 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1959 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1972 cff=(dltr-dltl)*hz_inv3(i,k)
1973 dltr=dltr-cff*hz(i,j,k+1)
1974 dltl=dltl+cff*hz(i,j,k-1)
1975 br(i,k)=qc(i,k)+dltr
1976 bl(i,k)=qc(i,k)-dltl
1977 wr(i,k)=(2.0_r8*dltr-dltl)**2
1978 wl(i,k)=(dltr-2.0_r8*dltl)**2
1984 dltl=max(cff,wl(i,k ))
1985 dltr=max(cff,wr(i,k+1))
1986 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1992#if defined LINEAR_CONTINUATION
1993 bl(i,
n(ng))=br(i,
n(ng)-1)
1994 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1995#elif defined NEUMANN
1996 bl(i,
n(ng))=br(i,
n(ng)-1)
1997 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1999 br(i,
n(ng))=qc(i,
n(ng))
2000 bl(i,
n(ng))=qc(i,
n(ng))
2001 br(i,
n(ng)-1)=qc(i,
n(ng))
2003#if defined LINEAR_CONTINUATION
2005 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2006#elif defined NEUMANN
2008 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2022 dltr=br(i,k)-qc(i,k)
2023 dltl=qc(i,k)-bl(i,k)
2026 IF ((dltr*dltl).lt.0.0_r8)
THEN
2029 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2031 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2034 br(i,k)=qc(i,k)+dltr
2035 bl(i,k)=qc(i,k)-dltl
2053 cff=dtdays*abs(wbio(isink))
2057 wl(i,k)=z_w(i,j,k-1)+cff
2058 wr(i,k)=hz(i,j,k)*qc(i,k)
2065 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2067 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2078 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2079 fc(i,k-1)=fc(i,k-1)+ &
2082 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2084 & (br(i,ks)+bl(i,ks)- &
2085 & 2.0_r8*qc(i,ks))))
2090 bio(i,k,ibio)=qc(i,k)+ &
2091 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2102 cff1=dtdays*
detrr(ng)
2103 cff2=1.0_r8/(1.0_r8+cff1)
2110 & cff1*ad_bio(i,k,
ino3_)
2119 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
2120 cff2=dtdays*
zoomr(ng)
2121 cff3=dtdays*
zoomd(ng)
2128 & cff3*ad_bio(i,k,
isdet)
2133 & cff2*ad_bio(i,k,
ino3_)
2143 cff1=dtdays*
zoogr(ng)
2144 cff2=dtdays*
phymr(ng)
2177 & cff*(1.0_r8-
zooga(ng))* &
2186 adfac=ad_bio(i,k,
iphyt)/(1.0_r8+cff+cff2)
2187 ad_cff=ad_cff-bio(i,k,
iphyt)*adfac
2188 ad_bio(i,k,
iphyt)=adfac
2194 adfac=ad_cff/(cff3+bio1(i,k,
iphyt)*bio1(i,k,
iphyt))
2197 & bio1(i,k,
iphyt)*adfac1
2199 & bio1(i,k,
izoop)*adfac1
2201 & 2.0_r8*bio1(i,k,
iphyt)*cff*adfac
2212 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
2213 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
2214 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
2215 & max(0.0_r8,eps-bio_old(i,k,
isdet))
2219 IF (cff1.gt.0.0)
THEN
2221 cff=t(i,j,k,nstp,itrmx)
2223 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
2225 cff=t(i,j,k,nstp,ibio)
2233 bio(i,k,ibio)=max(eps,bio_old(i,k,ibio))- &
2234 & cff1*(sign(0.5_r8, &
2235 & real(itrmx-ibio,r8)**2)+ &
2237 & -real(itrmx-ibio,r8)**2))
2242 bio(i,k,ibio)=bio_old(i,k,ibio)
2260 cff=bio(i,k,
iphyt)* &
2261 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
2268 & bio(i,k,
ino3_)*cff
2272 IF (iteradj.ne.iter)
THEN
2277 cff1=dtdays*
zoogr(ng)
2278 cff2=dtdays*
phymr(ng)
2300 cff1=1.0_r8/(1.0_r8+dtdays*(
zoomr(ng)+
zoomd(ng)))
2301 cff2=dtdays*
zoomr(ng)
2302 cff3=dtdays*
zoomd(ng)
2307 & bio(i,k,
izoop)*cff2
2309 & bio(i,k,
izoop)*cff3
2315 cff1=dtdays*
detrr(ng)
2316 cff2=1.0_r8/(1.0_r8+cff1)
2321 & bio(i,k,
isdet)*cff1
2343 qc(i,k)=bio(i,k,ibio)
2349 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
2354 dltr=hz(i,j,k)*fc(i,k)
2355 dltl=hz(i,j,k)*fc(i,k-1)
2356 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
2363 IF ((dltr*dltl).le.0.0_r8)
THEN
2366 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2368 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2381 cff=(dltr-dltl)*hz_inv3(i,k)
2382 dltr=dltr-cff*hz(i,j,k+1)
2383 dltl=dltl+cff*hz(i,j,k-1)
2384 br(i,k)=qc(i,k)+dltr
2385 bl(i,k)=qc(i,k)-dltl
2386 wr(i,k)=(2.0_r8*dltr-dltl)**2
2387 wl(i,k)=(dltr-2.0_r8*dltl)**2
2393 dltl=max(cff,wl(i,k ))
2394 dltr=max(cff,wr(i,k+1))
2395 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
2401#if defined LINEAR_CONTINUATION
2402 bl(i,
n(ng))=br(i,
n(ng)-1)
2403 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2404#elif defined NEUMANN
2405 bl(i,
n(ng))=br(i,
n(ng)-1)
2406 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2408 br(i,
n(ng))=qc(i,
n(ng))
2409 bl(i,
n(ng))=qc(i,
n(ng))
2410 br(i,
n(ng)-1)=qc(i,
n(ng))
2412#if defined LINEAR_CONTINUATION
2414 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2415#elif defined NEUMANN
2417 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2431 dltr=br(i,k)-qc(i,k)
2432 dltl=qc(i,k)-bl(i,k)
2435 IF ((dltr*dltl).lt.0.0_r8)
THEN
2438 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2440 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2443 br(i,k)=qc(i,k)+dltr
2444 bl(i,k)=qc(i,k)-dltl
2462 cff=dtdays*abs(wbio(isink))
2466 wl(i,k)=z_w(i,j,k-1)+cff
2467 wr(i,k)=hz(i,j,k)*qc(i,k)
2474 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2476 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2487 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2488 fc(i,k-1)=fc(i,k-1)+ &
2491 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2493 & (br(i,ks)+bl(i,ks)- &
2494 & 2.0_r8*qc(i,ks))))
2499 bio(i,k,ibio)=qc(i,k)+ &
2500 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2512 cff=bio1(i,k,
iphyt)* &
2513 & cff1*exp(
k_ext(ng)*z_r(i,j,k))/ &
2520 & ad_bio(i,k,
iphyt)*cff
2521 ad_cff=ad_cff+bio(i,k,
ino3_)*ad_bio(i,k,
iphyt)
2526 adfac=ad_bio(i,k,
ino3_)/(1.0_r8+cff)
2527 ad_cff=ad_cff-bio(i,k,
ino3_)*adfac
2528 ad_bio(i,k,
ino3_)=adfac
2537 & adfac*cff1*exp(
k_ext(ng)*z_r(i,j,k))
2538 ad_bio(i,k,
ino3_)=ad_bio(i,k,
ino3_)-adfac*cff
2539 ad_z_r(i,j,k)=ad_z_r(i,j,k)+
k_ext(ng)*ad_cff*cff
2560 bio_old(i,k,ibio)=t(i,j,k,nstp,ibio)
2567 cff1=max(0.0_r8,eps-bio_old(i,k,
ino3_))+ &
2568 & max(0.0_r8,eps-bio_old(i,k,
iphyt))+ &
2569 & max(0.0_r8,eps-bio_old(i,k,
izoop))+ &
2570 & max(0.0_r8,eps-bio_old(i,k,
isdet))
2574 IF (cff1.gt.0.0)
THEN
2576 cff=t(i,j,k,nstp,itrmx)
2578 IF (t(i,j,k,nstp,ibio).gt.cff)
THEN
2580 cff=t(i,j,k,nstp,ibio)
2593 ad_bio_old(i,k,ibio)=ad_bio_old(i,k,ibio)+ &
2596 & eps-bio_old(i,k,ibio)))* &
2599 & ad_bio(i,k,ibio)* &
2600 & (sign(0.5_r8, real(itrmx-ibio,r8)**2)+ &
2601 & sign(0.5_r8,-real(itrmx-ibio,r8)**2))
2602 ad_bio(i,k,ibio)=0.0_r8
2609 ad_bio_old(i,k,ibio)=ad_bio_old(i,k,ibio)+ &
2611 ad_bio(i,k,ibio)=0.0_r8
2623 ad_bio_old(i,k,
ino3_)=ad_bio_old(i,k,
ino3_)- &
2626 & bio_old(i,k,
ino3_)-eps))*ad_cff1
2627 ad_bio_old(i,k,
iphyt)=ad_bio_old(i,k,
iphyt)- &
2630 & bio_old(i,k,
iphyt)-eps))*ad_cff1
2631 ad_bio_old(i,k,
izoop)=ad_bio_old(i,k,
izoop)- &
2634 & bio_old(i,k,
izoop)-eps))*ad_cff1
2635 ad_bio_old(i,k,
isdet)=ad_bio_old(i,k,
isdet)- &
2638 & bio_old(i,k,
isdet)-eps))*ad_cff1
2649 ad_t(i,j,k,nstp,ibio)=ad_t(i,j,k,nstp,ibio)+ &
2650 & ad_bio_old(i,k,ibio)
2651 ad_bio_old(i,k,ibio)=0.0_r8
2664 adfac=-hz_inv3(i,k)*hz_inv3(i,k)*ad_hz_inv3(i,k)
2665 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)+adfac
2666 ad_hz(i,j,k )=ad_hz(i,j,k )+adfac
2667 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+adfac
2668 ad_hz_inv3(i,k)=0.0_r8
2676 adfac=-hz_inv2(i,k)*hz_inv2(i,k)*ad_hz_inv2(i,k)
2677 ad_hz(i,j,k )=ad_hz(i,j,k )+adfac
2678 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+adfac
2679 ad_hz_inv2(i,k)=0.0_r8
2686 ad_hz(i,j,k)=ad_hz(i,j,k)- &
2687 & hz_inv(i,k)*hz_inv(i,k)*ad_hz_inv(i,k)
2688 ad_hz_inv(i,k)=0.0_r8