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