94 & LBi, UBi, LBj, UBj, UBk, UBt, &
95 & IminS, ImaxS, JminS, JmaxS, &
100 & Hz, ad_Hz, z_r, ad_z_r, &
113 integer,
intent(in) :: ng, tile
114 integer,
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
115 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
116 integer,
intent(in) :: nstp, nnew
120 real(r8),
intent(in) :: rmask(LBi:,LBj:)
122 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
123 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
124 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
125 real(r8),
intent(in) :: srflx(LBi:,LBj:)
126 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
128 real(r8),
intent(inout) :: ad_Hz(LBi:,LBj:,:)
129 real(r8),
intent(in) :: ad_z_r(LBi:,LBj:,:)
130 real(r8),
intent(inout) :: ad_z_w(LBi:,LBj:,0:)
131 real(r8),
intent(inout) :: ad_srflx(LBi:,LBj:)
132 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
135 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
137 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
138 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
139 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
140 real(r8),
intent(in) :: srflx(LBi:UBi,LBj:UBj)
141 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
143 real(r8),
intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,UBk)
144 real(r8),
intent(in) :: ad_z_r(LBi:UBi,LBj:UBj,UBk)
145 real(r8),
intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:UBk)
146 real(r8),
intent(inout) :: ad_srflx(LBi:UBi,LBj:UBj)
147 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,UBk,3,UBt)
152 integer,
parameter :: Nsink = 2
154 integer :: Iter, i, ibio, isink, itime, itrc, iTrcMax, j, k, ks
155 integer :: Iteradj, kk
157 integer,
dimension(Nsink) :: idsink
159 real(r8),
parameter :: MinVal = 1.0e-6_r8
161 real(r8) :: Att, ExpAtt, Itop, PAR, PAR1
162 real(r8) :: ad_Att, ad_ExpAtt, ad_Itop, ad_PAR
163 real(r8) :: cff, cff1, cff2, cff3, cff4, dtdays
164 real(r8) :: ad_cff, ad_cff1, ad_cff4
165 real(r8) :: cffL, cffR, cu, dltL, dltR
166 real(r8) :: ad_cffL, ad_cffR, ad_cu, ad_dltL, ad_dltR
167 real(r8) :: fac, adfac, adfac1, adfac2, adfac3
169 real(r8),
dimension(Nsink) :: Wbio
170 real(r8),
dimension(Nsink) :: ad_Wbio
172 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
174 real(r8),
dimension(IminS:ImaxS) :: PARsur
175 real(r8),
dimension(IminS:ImaxS) :: ad_PARsur
177 real(r8),
dimension(NT(ng),2) :: BioTrc
178 real(r8),
dimension(NT(ng),2) :: BioTrc1
179 real(r8),
dimension(NT(ng),2) :: ad_BioTrc
180 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
181 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio1
182 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
184 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: ad_Bio
185 real(r8),
dimension(IminS:ImaxS,N(ng),NT(ng)) :: ad_Bio_old
187 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
188 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: ad_FC
190 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
191 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
192 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
193 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Light
194 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
195 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
196 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL
197 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bL1
198 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR
199 real(r8),
dimension(IminS:ImaxS,N(ng)) :: bR1
200 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
202 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv
203 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv2
204 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Hz_inv3
205 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_Light
206 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_WL
207 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_WR
208 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bL
209 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_bR
210 real(r8),
dimension(IminS:ImaxS,N(ng)) :: ad_qc
212#include "set_bounds.h"
240 j_loop :
DO j=jstr,jend
265 ad_hz_inv(i,k)=0.0_r8
266 ad_hz_inv2(i,k)=0.0_r8
267 ad_hz_inv3(i,k)=0.0_r8
278 ad_biotrc(ibio,1)=0.0_r8
279 ad_biotrc(ibio,2)=0.0_r8
297 bio1(i,k,ibio)=0.0_r8
298 ad_bio(i,k,ibio)=0.0_r8
299 ad_bio_old(i,k,ibio)=0.0_r8
308 hz_inv(i,k)=1.0_r8/hz(i,j,k)
313 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
318 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
347 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
350 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
361 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
362 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
365 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
367 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
368 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
376 bio_old(i,k,ibio)=biotrc(ibio,nstp)
377 bio(i,k,ibio)=biotrc(ibio,nstp)
451 iter_loop:
DO iter=1,
bioiter(ng)
457 IF (parsur(i).gt.0.0_r8)
THEN
465 & (z_w(i,j,k)-z_w(i,j,k-1))
468 par=itop*(1.0_r8-expatt)/att
494 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
495 cff=bio(i,k,
iphyt)* &
496 & cff1*cff4*light(i,k)/ &
509 cff1=dtdays*
zoogr(ng)
513 cff=bio(i,k,
izoop)* &
514 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
518 & bio(i,k,
iphyt)*cff2*cff
531 cff1=1.0_r8/(1.0_r8+cff2+cff3)
536 & bio(i,k,
iphyt)*cff2
538 & bio(i,k,
iphyt)*cff3
547 cff1=1.0_r8/(1.0_r8+cff2+cff3)
552 & bio(i,k,
izoop)*cff2
554 & bio(i,k,
izoop)*cff3
560 cff2=dtdays*
detrr(ng)
561 cff1=1.0_r8/(1.0_r8+cff2)
566 & bio(i,k,
isdet)*cff2
578 sink_loop:
DO isink=1,nsink
588 qc(i,k)=bio(i,k,ibio)
594 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
599 dltr=hz(i,j,k)*fc(i,k)
600 dltl=hz(i,j,k)*fc(i,k-1)
601 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
608 IF ((dltr*dltl).le.0.0_r8)
THEN
611 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
613 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
626 cff=(dltr-dltl)*hz_inv3(i,k)
627 dltr=dltr-cff*hz(i,j,k+1)
628 dltl=dltl+cff*hz(i,j,k-1)
631 wr(i,k)=(2.0_r8*dltr-dltl)**2
632 wl(i,k)=(dltr-2.0_r8*dltl)**2
638 dltl=max(cff,wl(i,k ))
639 dltr=max(cff,wr(i,k+1))
640 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
646#if defined LINEAR_CONTINUATION
647 bl(i,
n(ng))=br(i,
n(ng)-1)
648 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
650 bl(i,
n(ng))=br(i,
n(ng)-1)
651 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
653 br(i,
n(ng))=qc(i,
n(ng))
654 bl(i,
n(ng))=qc(i,
n(ng))
655 br(i,
n(ng)-1)=qc(i,
n(ng))
657#if defined LINEAR_CONTINUATION
659 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
662 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
680 IF ((dltr*dltl).lt.0.0_r8)
THEN
683 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
685 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
707 cff=dtdays*abs(wbio(isink))
711 wl(i,k)=z_w(i,j,k-1)+cff
712 wr(i,k)=hz(i,j,k)*qc(i,k)
719 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
721 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
732 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
733 fc(i,k-1)=fc(i,k-1)+ &
736 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
738 & (br(i,ks)+bl(i,ks)- &
744 bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
770 cff=bio(i,k,ibio)-bio_old(i,k,ibio)
774 ad_hz(i,j,k)=ad_hz(i,j,k)+cff*ad_t(i,j,k,nnew,ibio)
775 ad_cff=ad_cff+hz(i,j,k)*ad_t(i,j,k,nnew,ibio)
778 ad_bio_old(i,k,ibio)=ad_bio_old(i,k,ibio)-ad_cff
779 ad_bio(i,k,ibio)=ad_bio(i,k,ibio)+ad_cff
789 iter_loop1:
DO iter=
bioiter(ng),1,-1
819 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
822 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
833 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
834 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
837 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
839 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
840 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
848 bio_old(i,k,ibio)=biotrc(ibio,nstp)
849 bio(i,k,ibio)=biotrc(ibio,nstp)
880 IF (parsur(i).gt.0.0_r8)
THEN
888 & (z_w(i,j,k)-z_w(i,j,k-1))
891 par=itop*(1.0_r8-expatt)/att
917 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
918 cff=bio(i,k,
iphyt)* &
919 & cff1*cff4*light(i,k)/ &
932 cff1=dtdays*
zoogr(ng)
936 cff=bio(i,k,
izoop)* &
937 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
941 & bio(i,k,
iphyt)*cff2*cff
954 cff1=1.0_r8/(1.0_r8+cff2+cff3)
959 & bio(i,k,
iphyt)*cff2
961 & bio(i,k,
iphyt)*cff3
970 cff1=1.0_r8/(1.0_r8+cff2+cff3)
975 & bio(i,k,
izoop)*cff2
977 & bio(i,k,
izoop)*cff3
983 cff2=dtdays*
detrr(ng)
984 cff1=1.0_r8/(1.0_r8+cff2)
989 & bio(i,k,
isdet)*cff2
993 IF (iteradj.ne.iter)
THEN
1013 qc(i,k)=bio(i,k,ibio)
1019 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1024 dltr=hz(i,j,k)*fc(i,k)
1025 dltl=hz(i,j,k)*fc(i,k-1)
1026 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1033 IF ((dltr*dltl).le.0.0_r8)
THEN
1036 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1038 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1051 cff=(dltr-dltl)*hz_inv3(i,k)
1052 dltr=dltr-cff*hz(i,j,k+1)
1053 dltl=dltl+cff*hz(i,j,k-1)
1054 br(i,k)=qc(i,k)+dltr
1055 bl(i,k)=qc(i,k)-dltl
1056 wr(i,k)=(2.0_r8*dltr-dltl)**2
1057 wl(i,k)=(dltr-2.0_r8*dltl)**2
1063 dltl=max(cff,wl(i,k ))
1064 dltr=max(cff,wr(i,k+1))
1065 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1071#if defined LINEAR_CONTINUATION
1072 bl(i,
n(ng))=br(i,
n(ng)-1)
1073 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1074#elif defined NEUMANN
1075 bl(i,
n(ng))=br(i,
n(ng)-1)
1076 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1078 br(i,
n(ng))=qc(i,
n(ng))
1079 bl(i,
n(ng))=qc(i,
n(ng))
1080 br(i,
n(ng)-1)=qc(i,
n(ng))
1082#if defined LINEAR_CONTINUATION
1084 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1085#elif defined NEUMANN
1087 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1101 dltr=br(i,k)-qc(i,k)
1102 dltl=qc(i,k)-bl(i,k)
1105 IF ((dltr*dltl).lt.0.0_r8)
THEN
1108 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1110 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1113 br(i,k)=qc(i,k)+dltr
1114 bl(i,k)=qc(i,k)-dltl
1132 cff=dtdays*abs(wbio(isink))
1136 wl(i,k)=z_w(i,j,k-1)+cff
1137 wr(i,k)=hz(i,j,k)*qc(i,k)
1144 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1146 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1157 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1158 fc(i,k-1)=fc(i,k-1)+ &
1161 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1163 & (br(i,ks)+bl(i,ks)- &
1164 & 2.0_r8*qc(i,ks))))
1169 bio(i,k,ibio)=qc(i,k)+ &
1170 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
1179 sink_loop1:
DO isink=1,nsink
1192 qc(i,k)=bio(i,k,ibio)
1198 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1203 dltr=hz(i,j,k)*fc(i,k)
1204 dltl=hz(i,j,k)*fc(i,k-1)
1205 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1212 IF ((dltr*dltl).le.0.0_r8)
THEN
1215 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1217 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1230 cff=(dltr-dltl)*hz_inv3(i,k)
1231 dltr=dltr-cff*hz(i,j,k+1)
1232 dltl=dltl+cff*hz(i,j,k-1)
1233 br(i,k)=qc(i,k)+dltr
1234 bl(i,k)=qc(i,k)-dltl
1235 wr(i,k)=(2.0_r8*dltr-dltl)**2
1236 wl(i,k)=(dltr-2.0_r8*dltl)**2
1242 dltl=max(cff,wl(i,k ))
1243 dltr=max(cff,wr(i,k+1))
1244 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1250#if defined LINEAR_CONTINUATION
1251 bl(i,
n(ng))=br(i,
n(ng)-1)
1252 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1253#elif defined NEUMANN
1254 bl(i,
n(ng))=br(i,
n(ng)-1)
1255 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1257 br(i,
n(ng))=qc(i,
n(ng))
1258 bl(i,
n(ng))=qc(i,
n(ng))
1259 br(i,
n(ng)-1)=qc(i,
n(ng))
1261#if defined LINEAR_CONTINUATION
1263 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1264#elif defined NEUMANN
1266 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1280 dltr=br(i,k)-qc(i,k)
1281 dltl=qc(i,k)-bl(i,k)
1284 IF ((dltr*dltl).lt.0.0_r8)
THEN
1287 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1289 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1292 br(i,k)=qc(i,k)+dltr
1293 bl(i,k)=qc(i,k)-dltl
1311 cff=dtdays*abs(wbio(isink))
1315 wl(i,k)=z_w(i,j,k-1)+cff
1316 wr(i,k)=hz(i,j,k)*qc(i,k)
1323 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1325 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
1336 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1337 fc(i,k-1)=fc(i,k-1)+ &
1340 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1342 & (br(i,ks)+bl(i,ks)- &
1343 & 2.0_r8*qc(i,ks))))
1352 ad_qc(i,k)=ad_qc(i,k)+ad_bio(i,k,ibio)
1353 ad_fc(i,k)=ad_fc(i,k)+hz_inv(i,k)*ad_bio(i,k,ibio)
1354 ad_fc(i,k-1)=ad_fc(i,k-1)-hz_inv(i,k)*ad_bio(i,k,ibio)
1355 ad_hz_inv(i,k)=ad_hz_inv(i,k)+ &
1356 & (fc(i,k)-fc(i,k-1))*ad_bio(i,k,ibio)
1357 ad_bio(i,k,ibio)=0.0_r8
1366 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
1388 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1390 & (br(i,ks)+bl(i,ks)- &
1391 & 2.0_r8*qc(i,ks))))*ad_fc(i,k-1)
1392 adfac1=hz(i,j,ks)*cu*ad_fc(i,k-1)
1394 adfac3=adfac2*(1.5_r8-cu)
1395 ad_hz(i,j,ks)=ad_hz(i,j,ks)+cu*adfac
1396 ad_cu=ad_cu+hz(i,j,ks)*adfac
1397 ad_bl(i,ks)=ad_bl(i,ks)+adfac1
1399 & adfac1*(0.5_r8*(br(i,ks)-bl(i,ks))- &
1401 & (br(i,ks)+bl(i,ks)- &
1402 & 2.0_r8*qc(i,ks)))+ &
1403 & adfac2*(br(i,ks)+bl(i,ks)-2.0_r8*qc(i,ks))
1404 ad_br(i,ks)=ad_br(i,ks)+0.5_r8*adfac2-adfac3
1405 ad_bl(i,ks)=ad_bl(i,ks)-0.5_r8*adfac2-adfac3
1406 ad_qc(i,ks)=ad_qc(i,ks)+2.0_r8*adfac3
1413 adfac=(0.5_r8+sign(0.5_r8, &
1414 & (1.0_r8-(wl(i,k)-z_w(i,j,ks-1))* &
1415 & hz_inv(i,ks))))*ad_cu
1416 adfac1=adfac*hz_inv(i,ks)
1417 ad_wl(i,k)=ad_wl(i,k)+adfac1
1418 ad_z_w(i,j,ks-1)=ad_z_w(i,j,ks-1)-adfac1
1419 ad_hz_inv(i,ks)=ad_hz_inv(i,ks)+ &
1420 & (wl(i,k)-z_w(i,j,ks-1))*adfac
1439 cff=dtdays*abs(wbio(isink))
1443 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
1446 ad_wr(i,ks)=ad_wr(i,ks)+ad_fc(i,k-1)
1455 ad_hz(i,j,k)=ad_hz(i,j,k)+qc(i,k)*ad_wr(i,k)
1456 ad_qc(i,k)=ad_qc(i,k)+hz(i,j,k)*ad_wr(i,k)
1460 ad_z_w(i,j,k-1)=ad_z_w(i,j,k-1)+ad_wl(i,k)
1461 ad_cff=ad_cff+ad_wl(i,k)
1470 ad_wbio(isink)=ad_wbio(isink)+ &
1471 & dtdays*sign(1.0_r8,wbio(isink))*ad_cff
1483 qc(i,k)=bio(i,k,ibio)
1489 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1494 dltr=hz(i,j,k)*fc(i,k)
1495 dltl=hz(i,j,k)*fc(i,k-1)
1496 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1503 IF ((dltr*dltl).le.0.0_r8)
THEN
1506 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1508 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1521 cff=(dltr-dltl)*hz_inv3(i,k)
1522 dltr=dltr-cff*hz(i,j,k+1)
1523 dltl=dltl+cff*hz(i,j,k-1)
1524 br(i,k)=qc(i,k)+dltr
1525 bl(i,k)=qc(i,k)-dltl
1526 wr(i,k)=(2.0_r8*dltr-dltl)**2
1527 wl(i,k)=(dltr-2.0_r8*dltl)**2
1533 dltl=max(cff,wl(i,k ))
1534 dltr=max(cff,wr(i,k+1))
1535 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1541#if defined LINEAR_CONTINUATION
1542 bl(i,
n(ng))=br(i,
n(ng)-1)
1543 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
1544#elif defined NEUMANN
1545 bl(i,
n(ng))=br(i,
n(ng)-1)
1546 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
1548 br(i,
n(ng))=qc(i,
n(ng))
1549 bl(i,
n(ng))=qc(i,
n(ng))
1550 br(i,
n(ng)-1)=qc(i,
n(ng))
1552#if defined LINEAR_CONTINUATION
1554 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
1555#elif defined NEUMANN
1557 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
1571 dltr=br(i,k)-qc(i,k)
1572 dltl=qc(i,k)-bl(i,k)
1577 ad_qc(i,k)=ad_qc(i,k)+ad_bl(i,k)
1578 ad_dltl=ad_dltl-ad_bl(i,k)
1582 ad_qc(i,k)=ad_qc(i,k)+ad_br(i,k)
1583 ad_dltr=ad_dltr+ad_br(i,k)
1585 IF ((dltr*dltl).lt.0.0_r8)
THEN
1592 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1595 ad_cffl=ad_cffl+ad_dltr
1597 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1600 ad_cffr=ad_cffr+ad_dltl
1605 ad_dltl=ad_dltl+2.0_r8*ad_cffl
1609 ad_dltr=ad_dltr+2.0_r8*ad_cffr
1613 ad_qc(i,k)=ad_qc(i,k)+ad_dltl
1614 ad_bl(i,k)=ad_bl(i,k)-ad_dltl
1618 ad_br(i,k)=ad_br(i,k)+ad_dltr
1619 ad_qc(i,k)=ad_qc(i,k)-ad_dltr
1624#if defined LINEAR_CONTINUATION
1627 ad_bl(i,2)=ad_bl(i,2)+ad_br(i,1)
1631 ad_qc(i,1)=ad_qc(i,1)+2.0_r8*ad_bl(i,1)
1632 ad_br(i,1)=ad_br(i,1)-ad_bl(i,1)
1634#elif defined NEUMANN
1637 ad_bl(i,2)=ad_bl(i,2)+ad_br(i,1)
1641 ad_qc(i,1)=ad_qc(i,1)+1.5_r8*ad_bl(i,1)
1642 ad_br(i,1)=ad_br(i,1)-0.5_r8*ad_bl(i,1)
1649 ad_qc(i,1)=ad_qc(i,1)+ad_bl(i,1)+ &
1656#if defined LINEAR_CONTINUATION
1659 ad_br(i,
n(ng)-1)=ad_br(i,
n(ng)-1)+ad_bl(i,
n(ng))
1660 ad_bl(i,
n(ng))=0.0_r8
1663 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+2.0_r8*ad_br(i,
n(ng))
1664 ad_bl(i,
n(ng))=ad_bl(i,
n(ng))-ad_br(i,
n(ng))
1665 ad_br(i,
n(ng))=0.0_r8
1666#elif defined NEUMANN
1669 ad_br(i,
n(ng)-1)=ad_br(i,
n(ng)-1)+ad_bl(i,
n(ng))
1670 ad_bl(i,
n(ng))=0.0_r8
1673 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+1.5_r8*ad_br(i,
n(ng))
1674 ad_bl(i,
n(ng))=ad_bl(i,
n(ng))-0.5_r8*ad_br(i,
n(ng))
1675 ad_br(i,
n(ng))=0.0_r8
1681 ad_qc(i,
n(ng))=ad_qc(i,
n(ng))+ad_br(i,
n(ng)-1)+ &
1684 ad_br(i,
n(ng)-1)=0.0_r8
1685 ad_bl(i,
n(ng))=0.0_r8
1686 ad_br(i,
n(ng))=0.0_r8
1699 qc(i,k)=bio(i,k,ibio)
1705 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
1710 dltr=hz(i,j,k)*fc(i,k)
1711 dltl=hz(i,j,k)*fc(i,k-1)
1712 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1719 IF ((dltr*dltl).le.0.0_r8)
THEN
1722 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1724 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1737 cff=(dltr-dltl)*hz_inv3(i,k)
1738 dltr=dltr-cff*hz(i,j,k+1)
1739 dltl=dltl+cff*hz(i,j,k-1)
1740 br(i,k)=qc(i,k)+dltr
1741 bl(i,k)=qc(i,k)-dltl
1742 wr(i,k)=(2.0_r8*dltr-dltl)**2
1743 wl(i,k)=(dltr-2.0_r8*dltl)**2
1750 dltl=max(cff,wl(i,k ))
1751 dltr=max(cff,wr(i,k+1))
1753 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
1754 bl1(i,k+1)=bl(i,k+1)
1758 ad_br(i,k)=ad_br(i,k)+ad_bl(i,k+1)
1765 adfac=ad_br(i,k)/(dltr+dltl)
1766 adfac1=ad_br(i,k)*br(i,k)/(dltr+dltl)
1767 ad_dltr=ad_dltr+adfac*br1(i,k)
1768 ad_dltl=ad_dltl+adfac*bl1(i,k+1)
1769 ad_bl(i,k+1)=ad_bl(i,k+1)+dltl*adfac
1770 ad_dltr=ad_dltr-adfac1
1771 ad_dltl=ad_dltl-adfac1
1772 ad_br(i,k)=dltr*adfac
1776 ad_wr(i,k+1)=ad_wr(i,k+1)+ &
1777 & (0.5_r8-sign(0.5_r8,cff-wr(i,k+1)))* &
1783 ad_wl(i,k )=ad_wl(i,k )+ &
1784 & (0.5_r8-sign(0.5_r8,cff-wl(i,k )))* &
1795 dltr=hz(i,j,k)*fc(i,k)
1796 dltl=hz(i,j,k)*fc(i,k-1)
1797 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1804 IF ((dltr*dltl).le.0.0_r8)
THEN
1807 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1809 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1822 cff=(dltr-dltl)*hz_inv3(i,k)
1823 dltr=dltr-cff*hz(i,j,k+1)
1824 dltl=dltl+cff*hz(i,j,k-1)
1828 adfac=ad_wl(i,k)*2.0_r8*(dltr-2.0_r8*dltl)
1829 ad_dltr=ad_dltr+adfac
1830 ad_dltl=ad_dltl-2.0_r8*adfac
1836 adfac=ad_wr(i,k)*2.0_r8*(2.0_r8*dltr-dltl)
1837 ad_dltr=ad_dltr+2.0_r8*adfac
1838 ad_dltl=ad_dltl-adfac
1842 ad_qc(i,k)=ad_qc(i,k)+ad_bl(i,k)
1843 ad_dltl=ad_dltl-ad_bl(i,k)
1847 ad_qc(i,k)=ad_qc(i,k)+ad_br(i,k)
1848 ad_dltr=ad_dltr+ad_br(i,k)
1854 dltr=hz(i,j,k)*fc(i,k)
1855 dltl=hz(i,j,k)*fc(i,k-1)
1856 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1863 IF ((dltr*dltl).le.0.0_r8)
THEN
1866 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1868 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1872 cff=(dltr-dltl)*hz_inv3(i,k)
1875 ad_cff=ad_cff+ad_dltl*hz(i,j,k-1)
1876 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)+cff*ad_dltl
1879 ad_cff=ad_cff-ad_dltr*hz(i,j,k+1)
1880 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)-cff*ad_dltr
1884 adfac=ad_cff*hz_inv3(i,k)
1885 ad_dltr=ad_dltr+adfac
1886 ad_dltl=ad_dltl-adfac
1887 ad_hz_inv3(i,k)=ad_hz_inv3(i,k)+(dltr-dltl)*ad_cff
1892 dltr=hz(i,j,k)*fc(i,k)
1893 dltl=hz(i,j,k)*fc(i,k-1)
1894 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
1898 IF ((dltr*dltl).le.0.0_r8)
THEN
1905 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
1908 ad_cffl=ad_cffl+ad_dltr
1910 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
1913 ad_cffr=ad_cffr+ad_dltl
1918 ad_cff=ad_cff+ad_cffl*fc(i,k-1)
1919 ad_fc(i,k-1)=ad_fc(i,k-1)+cff*ad_cffl
1923 ad_cff=ad_cff+ad_cffr*fc(i,k)
1924 ad_fc(i,k)=ad_fc(i,k)+cff*ad_cffr
1928 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)+ad_cff
1929 ad_hz(i,j,k)=ad_hz(i,j,k)+2.0_r8*ad_cff
1930 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)+ad_cff
1934 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_dltl*fc(i,k-1)
1935 ad_fc(i,k-1)=ad_fc(i,k-1)+ad_dltl*hz(i,j,k)
1939 ad_hz(i,j,k)=ad_hz(i,j,k)+ad_dltr*fc(i,k)
1940 ad_fc(i,k)=ad_fc(i,k)+ad_dltr*hz(i,j,k)
1949 adfac=ad_fc(i,k)*hz_inv2(i,k)
1950 ad_qc(i,k+1)=ad_qc(i,k+1)+adfac
1951 ad_qc(i,k)=ad_qc(i,k)-adfac
1952 ad_hz_inv2(i,k)=ad_hz_inv2(i,k)+(qc(i,k+1)-qc(i,k))* &
1961 ad_bio(i,k,ibio)=ad_bio(i,k,ibio)+ad_qc(i,k)
1989 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
1992 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
2003 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
2004 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
2007 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
2009 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
2010 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
2018 bio_old(i,k,ibio)=biotrc(ibio,nstp)
2019 bio(i,k,ibio)=biotrc(ibio,nstp)
2033 parsur(i)=158.075_r8
2050 IF (parsur(i).gt.0.0_r8)
THEN
2058 & (z_w(i,j,k)-z_w(i,j,k-1))
2061 par=itop*(1.0_r8-expatt)/att
2087 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
2088 cff=bio(i,k,
iphyt)* &
2089 & cff1*cff4*light(i,k)/ &
2093 & bio(i,k,
ino3_)*cff
2102 cff1=dtdays*
zoogr(ng)
2106 cff=bio(i,k,
izoop)* &
2107 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
2113 & bio(i,k,
iphyt)*cff2*cff
2121 IF (iteradj.ne.iter)
THEN
2128 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2133 & bio(i,k,
iphyt)*cff2
2135 & bio(i,k,
iphyt)*cff3
2144 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2149 & bio(i,k,
izoop)*cff2
2151 & bio(i,k,
izoop)*cff3
2157 cff2=dtdays*
detrr(ng)
2158 cff1=1.0_r8/(1.0_r8+cff2)
2163 & bio(i,k,
isdet)*cff2
2185 qc(i,k)=bio(i,k,ibio)
2191 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
2196 dltr=hz(i,j,k)*fc(i,k)
2197 dltl=hz(i,j,k)*fc(i,k-1)
2198 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
2205 IF ((dltr*dltl).le.0.0_r8)
THEN
2208 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2210 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2223 cff=(dltr-dltl)*hz_inv3(i,k)
2224 dltr=dltr-cff*hz(i,j,k+1)
2225 dltl=dltl+cff*hz(i,j,k-1)
2226 br(i,k)=qc(i,k)+dltr
2227 bl(i,k)=qc(i,k)-dltl
2228 wr(i,k)=(2.0_r8*dltr-dltl)**2
2229 wl(i,k)=(dltr-2.0_r8*dltl)**2
2235 dltl=max(cff,wl(i,k ))
2236 dltr=max(cff,wr(i,k+1))
2237 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
2243#if defined LINEAR_CONTINUATION
2244 bl(i,
n(ng))=br(i,
n(ng)-1)
2245 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2246#elif defined NEUMANN
2247 bl(i,
n(ng))=br(i,
n(ng)-1)
2248 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2250 br(i,
n(ng))=qc(i,
n(ng))
2251 bl(i,
n(ng))=qc(i,
n(ng))
2252 br(i,
n(ng)-1)=qc(i,
n(ng))
2254#if defined LINEAR_CONTINUATION
2256 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2257#elif defined NEUMANN
2259 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2273 dltr=br(i,k)-qc(i,k)
2274 dltl=qc(i,k)-bl(i,k)
2277 IF ((dltr*dltl).lt.0.0_r8)
THEN
2280 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2282 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2285 br(i,k)=qc(i,k)+dltr
2286 bl(i,k)=qc(i,k)-dltl
2304 cff=dtdays*abs(wbio(isink))
2308 wl(i,k)=z_w(i,j,k-1)+cff
2309 wr(i,k)=hz(i,j,k)*qc(i,k)
2316 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2318 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2329 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2330 fc(i,k-1)=fc(i,k-1)+ &
2333 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2335 & (br(i,ks)+bl(i,ks)- &
2336 & 2.0_r8*qc(i,ks))))
2341 bio(i,k,ibio)=qc(i,k)+ &
2342 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2354 cff2=dtdays*
detrr(ng)
2355 cff1=1.0_r8/(1.0_r8+cff2)
2362 & cff2*ad_bio(i,k,
ino3_)
2374 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2381 & cff3*ad_bio(i,k,
isdet)
2386 & cff2*ad_bio(i,k,
ino3_)
2398 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2405 & cff3*ad_bio(i,k,
isdet)
2410 & cff2*ad_bio(i,k,
ino3_)
2422 cff1=dtdays*
zoogr(ng)
2426 cff=bio1(i,k,
izoop)* &
2427 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio1(i,k,
iphyt)))/ &
2451 & cff2*cff*ad_bio(i,k,
izoop)
2456 adfac=ad_bio(i,k,
iphyt)/(1.0_r8+cff)
2457 ad_cff=ad_cff-bio(i,k,
iphyt)*adfac
2458 ad_bio(i,k,
iphyt)=adfac
2467 adfac=ad_cff/bio1(i,k,
iphyt)
2468 ad_bio(i,k,
iphyt)=ad_bio(i,k,
iphyt)-adfac*cff
2473 & adfac*cff1*(1.0_r8-fac)
2498 biotrc(ibio,nstp)=t(i,j,k,nstp,ibio)
2501 biotrc(ibio,nnew)=t(i,j,k,nnew,ibio)
2512 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
2513 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
2516 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
2518 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
2519 biotrc(itrcmax,itime)=biotrc(itrcmax,itime)-cff1
2527 bio_old(i,k,ibio)=biotrc(ibio,nstp)
2528 bio(i,k,ibio)=biotrc(ibio,nstp)
2542 parsur(i)=158.075_r8
2559 IF (parsur(i).gt.0.0_r8)
THEN
2567 & (z_w(i,j,k)-z_w(i,j,k-1))
2570 par=itop*(1.0_r8-expatt)/att
2596 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
2597 cff=bio(i,k,
iphyt)* &
2598 & cff1*cff4*light(i,k)/ &
2604 & bio(i,k,
ino3_)*cff
2608 IF (iteradj.ne.iter)
THEN
2615 cff1=dtdays*
zoogr(ng)
2619 cff=bio(i,k,
izoop)* &
2620 & cff1*(1.0_r8-exp(-
ivlev(ng)*bio(i,k,
iphyt)))/ &
2624 & bio(i,k,
iphyt)*cff2*cff
2637 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2642 & bio(i,k,
iphyt)*cff2
2644 & bio(i,k,
iphyt)*cff3
2653 cff1=1.0_r8/(1.0_r8+cff2+cff3)
2658 & bio(i,k,
izoop)*cff2
2660 & bio(i,k,
izoop)*cff3
2666 cff2=dtdays*
detrr(ng)
2667 cff1=1.0_r8/(1.0_r8+cff2)
2672 & bio(i,k,
isdet)*cff2
2694 qc(i,k)=bio(i,k,ibio)
2700 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
2705 dltr=hz(i,j,k)*fc(i,k)
2706 dltl=hz(i,j,k)*fc(i,k-1)
2707 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
2714 IF ((dltr*dltl).le.0.0_r8)
THEN
2717 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2719 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2732 cff=(dltr-dltl)*hz_inv3(i,k)
2733 dltr=dltr-cff*hz(i,j,k+1)
2734 dltl=dltl+cff*hz(i,j,k-1)
2735 br(i,k)=qc(i,k)+dltr
2736 bl(i,k)=qc(i,k)-dltl
2737 wr(i,k)=(2.0_r8*dltr-dltl)**2
2738 wl(i,k)=(dltr-2.0_r8*dltl)**2
2744 dltl=max(cff,wl(i,k ))
2745 dltr=max(cff,wr(i,k+1))
2746 br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
2752#if defined LINEAR_CONTINUATION
2753 bl(i,
n(ng))=br(i,
n(ng)-1)
2754 br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
2755#elif defined NEUMANN
2756 bl(i,
n(ng))=br(i,
n(ng)-1)
2757 br(i,
n(ng))=1.5*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
2759 br(i,
n(ng))=qc(i,
n(ng))
2760 bl(i,
n(ng))=qc(i,
n(ng))
2761 br(i,
n(ng)-1)=qc(i,
n(ng))
2763#if defined LINEAR_CONTINUATION
2765 bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
2766#elif defined NEUMANN
2768 bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
2782 dltr=br(i,k)-qc(i,k)
2783 dltl=qc(i,k)-bl(i,k)
2786 IF ((dltr*dltl).lt.0.0_r8)
THEN
2789 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
2791 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
2794 br(i,k)=qc(i,k)+dltr
2795 bl(i,k)=qc(i,k)-dltl
2813 cff=dtdays*abs(wbio(isink))
2817 wl(i,k)=z_w(i,j,k-1)+cff
2818 wr(i,k)=hz(i,j,k)*qc(i,k)
2825 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
2827 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
2838 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
2839 fc(i,k-1)=fc(i,k-1)+ &
2842 & cu*(0.5_r8*(br(i,ks)-bl(i,ks))- &
2844 & (br(i,ks)+bl(i,ks)- &
2845 & 2.0_r8*qc(i,ks))))
2850 bio(i,k,ibio)=qc(i,k)+ &
2851 & (fc(i,k)-fc(i,k-1))*hz_inv(i,k)
2871 cff4=1.0_r8/sqrt(cff2+cff3*light(i,k)*light(i,k))
2872 cff=bio1(i,k,
iphyt)* &
2873 & cff1*cff4*light(i,k)/ &
2879 ad_cff=ad_cff+bio(i,k,
ino3_)*ad_bio(i,k,
iphyt)
2881 & cff*ad_bio(i,k,
iphyt)
2886 adfac=ad_bio(i,k,
ino3_)/(1.0_r8+cff)
2887 ad_cff=ad_cff-bio(i,k,
ino3_)*adfac
2888 ad_bio(i,k,
ino3_)=adfac
2896 adfac1=adfac*bio1(i,k,
iphyt)*cff1
2898 & cff1*cff4*light(i,k)*adfac
2899 ad_cff4=adfac1*light(i,k)
2900 ad_light(i,k)=ad_light(i,k)+ &
2907 ad_light(i,k)=ad_light(i,k)- &
2908 & cff3*light(i,k)* &
2909 & cff4*cff4*cff4*ad_cff4
2918 IF (parsur(i).gt.0.0_r8)
THEN
2931 & (z_w(i,j,kk)-z_w(i,j,kk-1))
2934 par=itop*(1.0_r8-expatt)/att
2948 ad_expatt=ad_expatt+itop*ad_par
2949 ad_itop=ad_itop+expatt*ad_par
2958 ad_par=ad_par+ad_light(i,k)
2959 ad_light(i,k)=0.0_r8
2964 ad_att=ad_att-par1*adfac
2965 ad_expatt=ad_expatt-itop*adfac
2966 ad_itop=ad_itop+(1.0_r8-expatt)*adfac
2970 ad_par=ad_par+ad_itop
2974 ad_att=ad_att-expatt*ad_expatt
2983 &
attphy(ng)*(z_w(i,j,k)-z_w(i,j,k-1))* &
2985 ad_z_w(i,j,k-1)=ad_z_w(i,j,k-1)-adfac
2986 ad_z_w(i,j,k )=ad_z_w(i,j,k )+adfac
2993 ad_light(i,k)=0.0_r8
2998 ad_parsur(i)=ad_parsur(i)+ad_par
3021 adfac=
rho0*
cp*ad_parsur(i)
3022 ad_srflx(i,j)=ad_srflx(i,j)+
parfrac(ng)*adfac
3042 ad_biotrc(ibio,nstp)=ad_biotrc(ibio,nstp)+ &
3044 ad_bio(i,k,ibio)=0.0_r8
3047 ad_biotrc(ibio,nstp)=ad_biotrc(ibio,nstp)+ &
3048 & ad_bio_old(i,k,ibio)
3049 ad_bio_old(i,k,ibio)=0.0_r8
3065 biotrc(ibio,itime)=t(i,j,k,itime,ibio)
3066 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
3067 IF (biotrc(ibio,itime).gt.biotrc(itrcmax,itime))
THEN
3070 biotrc1(ibio,itime)=biotrc(ibio,itime)
3071 biotrc(ibio,itime)=max(minval,biotrc(ibio,itime))
3073 IF (biotrc(itrcmax,itime).gt.cff1)
THEN
3077 ad_cff1=-ad_biotrc(itrcmax,itime)
3088 biotrc(ibio,itime)=t(i,j,k,itime,ibio)
3089 cff1=cff1+max(0.0_r8,minval-biotrc(ibio,itime))
3096 ad_biotrc(ibio,itime)=(0.5_r8- &
3099 & biotrc1(ibio,itime)))* &
3100 & ad_biotrc(ibio,itime)
3106 ad_biotrc(ibio,itime)=ad_biotrc(ibio,itime)- &
3107 & (0.5_r8-sign(0.5_r8, &
3108 & biotrc(ibio,itime)- &
3132 ad_hz_inv(i,k)=ad_hz_inv(i,k)+ &
3133 & t(i,j,k,nnew,ibio)*hz(i,j,k)* &
3134 & ad_biotrc(ibio,nnew)
3135 ad_t(i,j,k,nnew,ibio)=ad_t(i,j,k,nnew,ibio)+ &
3136 & hz_inv(i,k)*ad_biotrc(ibio,nnew)
3137 ad_biotrc(ibio,nnew)=0.0_r8
3140 ad_t(i,j,k,nstp,ibio)=ad_t(i,j,k,nstp,ibio)+ &
3141 & ad_biotrc(ibio,nstp)
3142 ad_biotrc(ibio,nstp)=0.0_r8
3155 adfac=hz_inv3(i,k)*hz_inv3(i,k)*ad_hz_inv3(i,k)
3156 ad_hz(i,j,k-1)=ad_hz(i,j,k-1)-adfac
3157 ad_hz(i,j,k )=ad_hz(i,j,k )-adfac
3158 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)-adfac
3159 ad_hz_inv3(i,k)=0.0_r8
3167 adfac=hz_inv2(i,k)*hz_inv2(i,k)*ad_hz_inv2(i,k)
3168 ad_hz(i,j,k )=ad_hz(i,j,k )-adfac
3169 ad_hz(i,j,k+1)=ad_hz(i,j,k+1)-adfac
3170 ad_hz_inv2(i,k)=0.0_r8
3177 ad_hz(i,j,k)=ad_hz(i,j,k)- &
3178 & hz_inv(i,k)*hz_inv(i,k)*ad_hz_inv(i,k)
3179 ad_hz_inv(i,k)=0.0_r8