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