215     &                        LBi, UBi, LBj, UBj, UBk, UBt,             &
 
  216     &                        IminS, ImaxS, JminS, JmaxS,               &
 
  222#  ifdef DIAGNOSTICS_BIO
 
  227     &                        Hz, z_r, z_w, srflx,                      &
 
  228#if defined CARBON || defined OXYGEN
 
  238#ifdef DIAGNOSTICS_BIO
 
  239     &                        DiaBio2d, DiaBio3d,                       &
 
  253      integer, 
intent(in) :: ng, tile
 
  254      integer, 
intent(in) :: LBi, UBi, LBj, UBj, UBk, UBt
 
  255      integer, 
intent(in) :: IminS, ImaxS, JminS, JmaxS
 
  256      integer, 
intent(in) :: nstp, nnew
 
  260      real(r8), 
intent(in) :: rmask(LBi:,LBj:)
 
  262      real(r8), 
intent(in) :: rmask_wet(LBi:,LBj:)
 
  263#   ifdef DIAGNOSTICS_BIO 
  264      real(r8), 
intent(in) :: rmask_full(LBi:,LBj:)
 
  268      real(r8), 
intent(in) :: Hz(LBi:,LBj:,:)
 
  269      real(r8), 
intent(in) :: z_r(LBi:,LBj:,:)
 
  270      real(r8), 
intent(in) :: z_w(LBi:,LBj:,0:)
 
  271      real(r8), 
intent(in) :: srflx(LBi:,LBj:)
 
  272# if defined CARBON || defined OXYGEN 
  274      real(r8), 
intent(in) :: Uwind(LBi:,LBj:)
 
  275      real(r8), 
intent(in) :: Vwind(LBi:,LBj:)
 
  277      real(r8), 
intent(in) :: sustr(LBi:,LBj:)
 
  278      real(r8), 
intent(in) :: svstr(LBi:,LBj:)
 
  282      real(r8), 
intent(inout) :: pH(LBi:,LBj:)
 
  284# ifdef DIAGNOSTICS_BIO 
  285      real(r8), 
intent(inout) :: DiaBio2d(LBi:,LBj:,:)
 
  286      real(r8), 
intent(inout) :: DiaBio3d(LBi:,LBj:,:,:)
 
  288      real(r8), 
intent(inout) :: t(LBi:,LBj:,:,:,:)
 
  291      real(r8), 
intent(in) :: rmask(LBi:UBi,LBj:UBj)
 
  293      real(r8), 
intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
 
  294#   ifdef DIAGNOSTICS_BIO 
  295      real(r8), 
intent(in) :: rmask_full(LBi:UBi,LBj:UBj)
 
  299      real(r8), 
intent(in) :: Hz(LBi:UBi,LBj:UBj,UBk)
 
  300      real(r8), 
intent(in) :: z_r(LBi:UBi,LBj:UBj,UBk)
 
  301      real(r8), 
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:UBk)
 
  302      real(r8), 
intent(in) :: srflx(LBi:UBi,LBj:UBj)
 
  303# if defined CARBON || defined OXYGEN 
  305      real(r8), 
intent(in) :: Uwind(LBi:UBi,LBj:UBj)
 
  306      real(r8), 
intent(in) :: Vwind(LBi:UBi,LBj:UBj)
 
  308      real(r8), 
intent(in) :: sustr(LBi:UBi,LBj:UBj)
 
  309      real(r8), 
intent(in) :: svstr(LBi:UBi,LBj:UBj)
 
  313      real(r8), 
intent(inout) :: pH(LBi:UBi,LBj:UBj)
 
  315# ifdef DIAGNOSTICS_BIO 
  316      real(r8), 
intent(inout) :: DiaBio2d(LBi:UBi,LBj:UBj,NDbio2d)
 
  317      real(r8), 
intent(inout) :: DiaBio3d(LBi:UBi,LBj:UBj,UBk,NDbio3d)
 
  319      real(r8), 
intent(inout) :: t(LBi:UBi,LBj:UBj,UBk,3,UBt)
 
  325      integer, 
parameter :: Nsink = 6
 
  327      integer, 
parameter :: Nsink = 4
 
  330      integer :: Iter, i, ibio, isink, itrc, ivar, j, k, ks
 
  332      integer, 
dimension(Nsink) :: idsink
 
  334      real(r8), 
parameter :: eps = 1.0e-20_r8
 
  336#if defined CARBON || defined OXYGEN 
  340# if defined OCMIP_OXYGEN_SC 
  346      real(r8), 
parameter :: A_O2 = 1638.0_r8
 
  347      real(r8), 
parameter :: B_O2 = 81.83_r8
 
  348      real(r8), 
parameter :: C_O2 = 1.483_r8
 
  349      real(r8), 
parameter :: D_O2 = 0.008004_r8
 
  350      real(r8), 
parameter :: E_O2 = 0.0_r8
 
  352# elif defined RW14_OXYGEN_SC 
  357      real(r8), 
parameter :: A_O2 = 1920.4_r8
 
  358      real(r8), 
parameter :: B_O2 = 135.6_r8
 
  359      real(r8), 
parameter :: C_O2 = 5.2122_r8
 
  360      real(r8), 
parameter :: D_O2 = 0.10939_r8
 
  361      real(r8), 
parameter :: E_O2 = 0.00093777_r8
 
  368      real(r8), 
parameter :: A_O2 = 1953.4_r8
 
  369      real(r8), 
parameter :: B_O2 = 128.0_r8
 
  370      real(r8), 
parameter :: C_O2 = 3.9918_r8
 
  371      real(r8), 
parameter :: D_O2 = 0.050091_r8
 
  372      real(r8), 
parameter :: E_O2 = 0.0_r8
 
  374      real(r8), 
parameter :: OA0 = 2.00907_r8       
 
  375      real(r8), 
parameter :: OA1 = 3.22014_r8       
 
  376      real(r8), 
parameter :: OA2 = 4.05010_r8       
 
  377      real(r8), 
parameter :: OA3 = 4.94457_r8
 
  378      real(r8), 
parameter :: OA4 =-0.256847_r8
 
  379      real(r8), 
parameter :: OA5 = 3.88767_r8
 
  380      real(r8), 
parameter :: OB0 =-0.00624523_r8
 
  381      real(r8), 
parameter :: OB1 =-0.00737614_r8
 
  382      real(r8), 
parameter :: OB2 =-0.0103410_r8
 
  383      real(r8), 
parameter :: OB3 =-0.00817083_r8
 
  384      real(r8), 
parameter :: OC0 =-0.000000488682_r8
 
  385      real(r8), 
parameter :: rOxNO3= 8.625_r8       
 
  386      real(r8), 
parameter :: rOxNH4= 6.625_r8       
 
  387      real(r8) :: l2mol = 1000.0_r8/22.3916_r8      
 
  391      integer, 
parameter :: DoNewton = 0            
 
  393# if defined RW14_CO2_SC 
  394      real(r8), 
parameter :: A_CO2 = 2116.8_r8      
 
  395      real(r8), 
parameter :: B_CO2 = 136.25_r8      
 
  396      real(r8), 
parameter :: C_CO2 = 4.7353_r8      
 
  397      real(r8), 
parameter :: D_CO2 = 0.092307_r8    
 
  398      real(r8), 
parameter :: E_CO2 = 0.0007555_r8
 
  400      real(r8), 
parameter :: A_CO2 = 2073.1_r8      
 
  401      real(r8), 
parameter :: B_CO2 = 125.62_r8      
 
  402      real(r8), 
parameter :: C_CO2 = 3.6276_r8      
 
  403      real(r8), 
parameter :: D_CO2 = 0.043219_r8    
 
  404      real(r8), 
parameter :: E_CO2 = 0.0_r8
 
  407      real(r8), 
parameter :: A1 = -60.2409_r8       
 
  408      real(r8), 
parameter :: A2 = 93.4517_r8        
 
  409      real(r8), 
parameter :: A3 = 23.3585_r8        
 
  410      real(r8), 
parameter :: B1 = 0.023517_r8       
 
  411      real(r8), 
parameter :: B2 = -0.023656_r8
 
  412      real(r8), 
parameter :: B3 = 0.0047036_r8
 
  415      real(r8) :: pCO2air_secular
 
  418      real(r8), 
parameter :: pi2 = 6.2831853071796_r8
 
  420      real(r8), 
parameter :: D0 = 282.6_r8          
 
  421      real(r8), 
parameter :: D1 = 0.125_r8          
 
  422      real(r8), 
parameter :: D2 =-7.18_r8           
 
  423      real(r8), 
parameter :: D3 = 0.86_r8           
 
  424      real(r8), 
parameter :: D4 =-0.99_r8
 
  425      real(r8), 
parameter :: D5 = 0.28_r8
 
  426      real(r8), 
parameter :: D6 =-0.80_r8
 
  427      real(r8), 
parameter :: D7 = 0.06_r8
 
  430      real(r8) :: Att, AttFac, ExpAtt, Itop, PAR
 
  431      real(r8) :: Epp, L_NH4, L_NO3, LTOT, Vp
 
  433      real(r8), 
parameter :: MinVal = 1.0e-6_r8
 
  435      real(r8) :: L_PO4, LMIN, mu, cff6
 
  437      real(r8) :: Chl2C, dtdays, t_PPmax, inhNH4
 
  439      real(r8) :: cff, cff1, cff2, cff3, cff4, cff5
 
  441      real(r8) :: cff7, cff8
 
  443      real(r8) :: fac1, fac2, fac3
 
  444      real(r8) :: cffL, cffR, cu, dltL, dltR
 
  448#ifdef DIAGNOSTICS_BIO 
  453      real(r8) :: SchmidtN_Ox, O2satu, O2_Flux
 
  458      real(r8) :: C_Flux_RemineL, C_Flux_RemineS, C_Flux_RemineR
 
  459      real(r8) :: CO2_Flux, CO2_sol, SchmidtN, TempK
 
  462      real(r8) :: N_Flux_Assim
 
  463      real(r8) :: N_Flux_CoagD, N_Flux_CoagP
 
  464      real(r8) :: N_Flux_Egest
 
  465      real(r8) :: N_Flux_NewProd, N_Flux_RegProd
 
  466      real(r8) :: N_Flux_Nitrifi
 
  467      real(r8) :: N_Flux_Pmortal, N_Flux_Zmortal
 
  468      real(r8) :: N_Flux_RemineL, N_Flux_RemineS, N_Flux_RemineR
 
  469      real(r8) :: N_Flux_Zexcret, N_Flux_Zmetabo
 
  471      real(r8), 
dimension(Nsink) :: Wbio
 
  473      integer, 
dimension(IminS:ImaxS,N(ng)) :: ksource
 
  475      real(r8), 
dimension(IminS:ImaxS) :: PARsur
 
  477      real(r8), 
dimension(IminS:ImaxS) :: pCO2
 
  480      real(r8), 
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio
 
  481      real(r8), 
dimension(IminS:ImaxS,N(ng),NT(ng)) :: Bio_old
 
  483      real(r8), 
dimension(IminS:ImaxS,0:N(ng)) :: FC
 
  485      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
 
  486      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
 
  487      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
 
  488      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: WL
 
  489      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: WR
 
  490      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: bL
 
  491      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: bR
 
  492      real(r8), 
dimension(IminS:ImaxS,N(ng)) :: qc
 
  494#include "set_bounds.h" 
  495#ifdef DIAGNOSTICS_BIO 
  502     &     (mod(
iic(ng),
ndia(ng)).eq.1)).or.                            &
 
  508              diabio2d(i,j,ivar)=0.0_r8
 
  516                diabio3d(i,j,k,ivar)=0.0_r8
 
  535#ifdef DIAGNOSTICS_BIO 
  540      fiter=1.0_r8/real(
bioiter(ng),r8)
 
  568      j_loop : 
DO j=jstr,jend
 
  571            hz_inv(i,k)=1.0_r8/hz(i,j,k)
 
  576            hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
 
  581            hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
 
  596              bio_old(i,k,ibio)=max(0.0_r8,t(i,j,k,nstp,ibio))
 
  597              bio(i,k,ibio)=bio_old(i,k,ibio)
 
  604            bio_old(i,k,
itic_)=min(bio_old(i,k,
itic_),3000.0_r8)
 
  605            bio_old(i,k,
itic_)=max(bio_old(i,k,
itic_),400.0_r8)
 
  615            bio(i,k,
itemp)=min(t(i,j,k,nstp,
itemp),35.0_r8)
 
  616            bio(i,k,
isalt)=max(t(i,j,k,nstp,
isalt), 0.0_r8)
 
  683        iter_loop: 
DO iter=1,
bioiter(ng)
 
  703            IF (parsur(i).gt.0.0_r8) 
THEN 
  713     &               (z_w(i,j,k)-z_w(i,j,k-1))
 
  716                par=itop*(1.0_r8-expatt)/att    
 
  720                cff=
phycn(ng)*12.0_r8
 
  721                chl2c=min(bio(i,k,
ichlo)/(bio(i,k,
iphyt)*cff+eps),      &
 
  728                vp=
vp0(ng)*0.59_r8*(1.066_r8**bio(i,k,
itemp))
 
  730                epp=vp/sqrt(vp*vp+fac1*fac1)
 
  737                inhnh4=1.0_r8/(1.0_r8+cff1)
 
  738                l_nh4=cff1/(1.0_r8+cff1)
 
  739                l_no3=cff2*inhnh4/(1.0_r8+cff2)
 
  743                l_po4=cff3/(1.0_r8+cff3)
 
  750                mu=dtdays*t_ppmax*lmin
 
  751                cff4=mu*bio(i,k,
iphyt)*l_no3/                           &
 
  752     &               max(minval,ltot)/max(minval,bio(i,k,
ino3_))
 
  753                cff5=mu*bio(i,k,
iphyt)*l_nh4/                           &
 
  754     &               max(minval,ltot)/max(minval,bio(i,k,
inh4_))
 
  756     &               max(minval,bio(i,k,
ipo4_))
 
  759                cff4=fac1*
k_no3(ng)*inhnh4/(1.0_r8+cff2)*bio(i,k,
iphyt)
 
  760                cff5=fac1*
k_nh4(ng)/(1.0_r8+cff1)*bio(i,k,
iphyt)
 
  767                n_flux_newprod=bio(i,k,
ino3_)*cff4
 
  768                n_flux_regprod=bio(i,k,
inh4_)*cff5
 
  770     &                         n_flux_newprod+n_flux_regprod
 
  774     &                         (dtdays*t_ppmax*t_ppmax*lmin*lmin*       &
 
  776     &                         (dtdays*t_ppmax*t_ppmax*ltot*ltot*       &
 
  779     &                         (
phyis(ng)*max(chl2c,eps)*par+eps)
 
  780#ifdef DIAGNOSTICS_BIO 
  781                diabio3d(i,j,k,
ippro)=diabio3d(i,j,k,
ippro)+            &
 
  785     &                                (n_flux_newprod+n_flux_regprod)*  &
 
  787                diabio3d(i,j,k,
ino3u)=diabio3d(i,j,k,
ino3u)+            &
 
  791     &                                n_flux_newprod*fiter
 
  795     &                         n_flux_newprod*roxno3+                   &
 
  796     &                         n_flux_regprod*roxnh4
 
  802                cff1=
phycn(ng)*(n_flux_newprod+n_flux_regprod)
 
  804# ifdef TALK_NONCONSERV 
  808                bio(i,k,
italk)=bio(i,k,
italk)+n_flux_newprod-           &
 
  826                fac2=max(bio(i,k,
ioxyg),0.0_r8)     
 
  827                fac3=max(fac2/(3.0_r8+fac2),0.0_r8) 
 
  828                fac1=dtdays*
nitrir(ng)*fac3
 
  834                cff2=1.0_r8-max(0.0_r8,cff1)
 
  837                n_flux_nitrifi=bio(i,k,
inh4_)*cff3
 
  839#ifdef DIAGNOSTICS_BIO 
  840                diabio3d(i,j,k,
inifx)=diabio3d(i,j,k,
inifx)+            &
 
  844     &                                n_flux_nitrifi*fiter
 
  847                bio(i,k,
ioxyg)=bio(i,k,
ioxyg)-2.0_r8*n_flux_nitrifi
 
  849#if defined CARBON && defined TALK_NONCONSERV 
  850                bio(i,k,
italk)=bio(i,k,
italk)-2.0_r8*n_flux_nitrifi
 
  865                n_flux_nitrifi=bio(i,k,
inh4_)*cff3
 
  867#ifdef DIAGNOSTICS_BIO 
  868                diabio3d(i,j,k,
inifx)=diabio3d(i,j,k,
inifx)+            &
 
  872     &                                n_flux_nitrifi*fiter
 
  875                bio(i,k,
ioxyg)=bio(i,k,
ioxyg)-2.0_r8*n_flux_nitrifi
 
  877#if defined CARBON && defined TALK_NONCONSERV 
  878                bio(i,k,
italk)=bio(i,k,
italk)-2.0_r8*n_flux_nitrifi
 
  891          fac1=dtdays*
zoogr(ng)
 
  892          cff2=dtdays*
phymr(ng)
 
  900              cff3=1.0_r8/(1.0_r8+cff1)
 
  916              n_flux_pmortal=cff2*max(bio(i,k,
iphyt)-
phymin(ng),0.0_r8)
 
  924     &                       
phycn(ng)*(n_flux_egest+n_flux_pmortal)+   &
 
  936          cff1=dtdays*
zoobm(ng)
 
  937          fac2=dtdays*
zoomr(ng)
 
  938          fac3=dtdays*
zooer(ng)
 
  943              cff2=fac2*bio(i,k,
izoop)
 
  950              n_flux_zmortal=cff2*bio(i,k,
izoop)
 
  951              n_flux_zexcret=cff3*bio(i,k,
izoop)
 
  960              n_flux_zmetabo=cff1*max(bio(i,k,
izoop)-
zoomin(ng),0.0_r8)
 
  968     &                       roxnh4*(n_flux_zmetabo+n_flux_zexcret)
 
  972     &                       
zoocn(ng)*n_flux_zmortal
 
  974     &                       
zoocn(ng)*(n_flux_zmetabo+n_flux_zexcret)
 
  975#ifdef TALK_NONCONSERV 
  976              bio(i,k,
italk)=bio(i,k,
italk)+n_flux_zmetabo+             &
 
  987          fac1=dtdays*
coagr(ng)
 
  991              cff2=1.0_r8/(1.0_r8+cff1)
 
  995              n_flux_coagp=bio(i,k,
iphyt)*cff1
 
  996              n_flux_coagd=bio(i,k,
isden)*cff1
 
  998     &                       n_flux_coagp+n_flux_coagd
 
 1002     &                       
phycn(ng)*(n_flux_coagp+n_flux_coagd)
 
 1014              fac1=max(bio(i,k,
ioxyg)-6.0_r8,0.0_r8) 
 
 1015              fac2=max(fac1/(3.0_r8+fac1),0.0_r8) 
 
 1016              cff1=dtdays*
sderrn(ng)*fac2
 
 1017              cff2=1.0_r8/(1.0_r8+cff1)
 
 1018              cff3=dtdays*
lderrn(ng)*fac2
 
 1019              cff4=1.0_r8/(1.0_r8+cff3)
 
 1022              n_flux_remines=bio(i,k,
isden)*cff1
 
 1023              n_flux_reminel=bio(i,k,
ilden)*cff3
 
 1025     &                       n_flux_remines+n_flux_reminel
 
 1028     &                      *(n_flux_remines+n_flux_reminel)
 
 1031     &                       (n_flux_remines+n_flux_reminel)*roxnh4
 
 1032# if defined CARBON && defined TALK_NONCONSERV 
 1033              bio(i,k,
italk)=bio(i,k,
italk)+n_flux_remines+             &
 
 1037              cff7=dtdays*
rderrn(ng)*fac2
 
 1038              cff8=1.0_r8/(1.0_r8+cff7)
 
 1040              n_flux_reminer=bio(i,k,
irden)*cff7
 
 1047              bio(i,k,
ioxyg)=bio(i,k,
ioxyg)-n_flux_reminer*roxnh4
 
 1048#  if defined CARBON && defined TALK_NONCONSERV 
 1056          cff2=1.0_r8/(1.0_r8+cff1)
 
 1058          cff4=1.0_r8/(1.0_r8+cff3)
 
 1061          cff8=1.0_r8/(1.0_r8+cff7)
 
 1067              n_flux_remines=bio(i,k,
isden)*cff1
 
 1068              n_flux_reminel=bio(i,k,
ilden)*cff3
 
 1070     &                       n_flux_remines+n_flux_reminel
 
 1073     &                      *(n_flux_remines+n_flux_reminel)
 
 1075# if defined CARBON && defined TALK_NONCONSERV 
 1076              bio(i,k,
italk)=bio(i,k,
italk)+n_flux_remines+             &
 
 1081              n_flux_reminer=bio(i,k,
irden)*cff7
 
 1087#  if defined CARBON && defined TALK_NONCONSERV 
 1103# if defined RW14_OXYGEN_SC 
 1104          cff2=dtdays*0.251_r8*24.0_r8/100.0_r8
 
 1106          cff2=dtdays*0.31_r8*24.0_r8/100.0_r8
 
 1114            u10squ=uwind(i,j)*uwind(i,j)+vwind(i,j)*vwind(i,j)
 
 1116            u10squ=cff1*sqrt((0.5_r8*(sustr(i,j)+sustr(i+1,j)))**2+     &
 
 1117     &                       (0.5_r8*(svstr(i,j)+svstr(i,j+1)))**2)
 
 1119            schmidtn_ox=a_o2-bio(i,k,
itemp)*(b_o2-bio(i,k,
itemp)*(c_o2- &
 
 1120     &                                            bio(i,k,
itemp)*(d_o2- &
 
 1121     &                                            bio(i,k,
itemp)*e_o2)))
 
 1122            cff3=cff2*u10squ*sqrt(660.0_r8/schmidtn_ox)
 
 1127            ts=log((298.15_r8-bio(i,k,
itemp))/                          &
 
 1128     &             (273.15_r8+bio(i,k,
itemp)))
 
 1129            aa=oa0+ts*(oa1+ts*(oa2+ts*(oa3+ts*(oa4+ts*oa5))))+          &
 
 1130     &             bio(i,k,
isalt)*(ob0+ts*(ob1+ts*(ob2+ts*ob3)))+       &
 
 1135            o2satu=l2mol*exp(aa)
 
 1139            o2_flux=cff3*(o2satu-bio(i,k,
ioxyg))
 
 1141     &                     o2_flux*hz_inv(i,k)
 
 1142# ifdef DIAGNOSTICS_BIO 
 1145     &                          rmask_full(i,j)*                        &
 
 1160          cff2=1.0_r8/(1.0_r8+cff1)
 
 1162          cff4=1.0_r8/(1.0_r8+cff3)
 
 1165          cff8=1.0_r8/(1.0_r8+cff7)
 
 1171              c_flux_remines=bio(i,k,
isdec)*cff1
 
 1172              c_flux_reminel=bio(i,k,
ildec)*cff3
 
 1174     &                       c_flux_remines+c_flux_reminel
 
 1177              c_flux_reminer=bio(i,k,
irdec)*cff7
 
 1182# ifndef TALK_NONCONSERV 
 1189              bio(i,k,
italk)=587.05_r8+50.56_r8*bio(i,k,
isalt)
 
 1204     &                        imins, imaxs, j, donewton,                &
 
 1208     &                        bio(imins:,k,
itemp), bio(imins:,k,
isalt), &
 
 1209     &                        bio(imins:,k,
itic_), bio(imins:,k,
italk), &
 
 1212          CALL pco2_water (istr, iend, lbi, ubi, lbj, ubj,              &
 
 1213     &                     imins, imaxs, j, donewton,                   &
 
 1217     &                     bio(imins:,k,
itemp), bio(imins:,k,
isalt),    &
 
 1218     &                     bio(imins:,k,
itic_), bio(imins:,k,
italk),    &
 
 1219     &                     0.0_r8, 0.0_r8, ph, pco2)
 
 1225# if defined RW14_CO2_SC 
 1226          cff2=dtdays*0.251_r8*24.0_r8/100.0_r8
 
 1228          cff2=dtdays*0.31_r8*24.0_r8/100.0_r8
 
 1235            u10squ=uwind(i,j)**2+vwind(i,j)**2
 
 1237            u10squ=cff1*sqrt((0.5_r8*(sustr(i,j)+sustr(i+1,j)))**2+     &
 
 1238     &                       (0.5_r8*(svstr(i,j)+svstr(i,j+1)))**2)
 
 1240            schmidtn=a_co2-bio(i,k,
itemp)*(b_co2-bio(i,k,
itemp)*(c_co2- &
 
 1241     &                                           bio(i,k,
itemp)*(d_co2- &
 
 1242     &                                           bio(i,k,
itemp)*e_co2)))
 
 1243            cff3=cff2*u10squ*sqrt(660.0_r8/schmidtn)
 
 1247            tempk=0.01_r8*(bio(i,k,
itemp)+273.15_r8)
 
 1251     &                  bio(i,k,
isalt)*(b1+tempk*(b2+b3*tempk)))
 
 1256            pmonth=year-1951.0_r8+yday/365.0_r8
 
 1257# if defined PCO2AIR_DATA 
 1258            pco2air_secular=380.464_r8+9.321_r8*sin(pi2*yday/365.25_r8+ &
 
 1260            co2_flux=cff3*co2_sol*(pco2air_secular-pco2(i))
 
 1261# elif defined PCO2AIR_SECULAR 
 1262            pco2air_secular=d0+d1*pmonth*12.0_r8+                       &
 
 1263     &                         d2*sin(pi2*pmonth+d3)+                   &
 
 1264     &                         d4*sin(pi2*pmonth+d5)+                   &
 
 1265     &                         d6*sin(pi2*pmonth+d7)
 
 1266            co2_flux=cff3*co2_sol*(pco2air_secular-pco2(i))
 
 1268            co2_flux=cff3*co2_sol*(
pco2air(ng)-pco2(i))
 
 1271     &                     co2_flux*hz_inv(i,k)
 
 1272# ifdef DIAGNOSTICS_BIO 
 1275     &                          rmask_full(i,j)*                        &
 
 1278            diabio2d(i,j,
ipco2)=pco2(i)
 
 1280            diabio2d(i,j,
ipco2)=diabio2d(i,j,
ipco2)*rmask_full(i,j)
 
 1294          sink_loop: 
DO isink=1,nsink
 
 1304                qc(i,k)=bio(i,k,ibio)
 
 1310                fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
 
 1315                dltr=hz(i,j,k)*fc(i,k)
 
 1316                dltl=hz(i,j,k)*fc(i,k-1)
 
 1317                cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
 
 1324                IF ((dltr*dltl).le.0.0_r8) 
THEN 
 1327                ELSE IF (abs(dltr).gt.abs(cffl)) 
THEN 
 1329                ELSE IF (abs(dltl).gt.abs(cffr)) 
THEN 
 1342                cff=(dltr-dltl)*hz_inv3(i,k)
 
 1343                dltr=dltr-cff*hz(i,j,k+1)
 
 1344                dltl=dltl+cff*hz(i,j,k-1)
 
 1345                br(i,k)=qc(i,k)+dltr
 
 1346                bl(i,k)=qc(i,k)-dltl
 
 1347                wr(i,k)=(2.0_r8*dltr-dltl)**2
 
 1348                wl(i,k)=(dltr-2.0_r8*dltl)**2
 
 1354                dltl=max(cff,wl(i,k  ))
 
 1355                dltr=max(cff,wr(i,k+1))
 
 1356                br(i,k)=(dltr*br(i,k)+dltl*bl(i,k+1))/(dltr+dltl)
 
 1362#if defined LINEAR_CONTINUATION 
 1363              bl(i,
n(ng))=br(i,
n(ng)-1)
 
 1364              br(i,
n(ng))=2.0_r8*qc(i,
n(ng))-bl(i,
n(ng))
 
 1365#elif defined NEUMANN 
 1366              bl(i,
n(ng))=br(i,
n(ng)-1)
 
 1367              br(i,
n(ng))=1.5_r8*qc(i,
n(ng))-0.5_r8*bl(i,
n(ng))
 
 1369              br(i,
n(ng))=qc(i,
n(ng))       
 
 1370              bl(i,
n(ng))=qc(i,
n(ng))       
 
 1371              br(i,
n(ng)-1)=qc(i,
n(ng))
 
 1373#if defined LINEAR_CONTINUATION 
 1375              bl(i,1)=2.0_r8*qc(i,1)-br(i,1)
 
 1376#elif defined NEUMANN 
 1378              bl(i,1)=1.5_r8*qc(i,1)-0.5_r8*br(i,1)
 
 1392                dltr=br(i,k)-qc(i,k)
 
 1393                dltl=qc(i,k)-bl(i,k)
 
 1396                IF ((dltr*dltl).lt.0.0_r8) 
THEN 
 1399                ELSE IF (abs(dltr).gt.abs(cffl)) 
THEN 
 1401                ELSE IF (abs(dltl).gt.abs(cffr)) 
THEN 
 1404                br(i,k)=qc(i,k)+dltr
 
 1405                bl(i,k)=qc(i,k)-dltl
 
 1423            cff=dtdays*abs(wbio(isink))
 
 1427                wl(i,k)=z_w(i,j,k-1)+cff
 
 1428                wr(i,k)=hz(i,j,k)*qc(i,k)
 
 1435                  IF (wl(i,k).gt.z_w(i,j,ks)) 
THEN 
 1437                    fc(i,k-1)=fc(i,k-1)+wr(i,ks)
 
 1448                cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
 
 1449                fc(i,k-1)=fc(i,k-1)+                                    &
 
 1452     &                     cu*(0.5_r8*(br(i,ks)-bl(i,ks))-              &
 
 1454     &                         (br(i,ks)+bl(i,ks)-                      &
 
 1455     &                          2.0_r8*qc(i,ks))))
 
 1460                bio(i,k,ibio)=qc(i,k)+(fc(i,k)-fc(i,k-1))*hz_inv(i,k)
 
 1475            cff3=115.0_r8/16.0_r8
 
 1476            cff4=106.0_r8/16.0_r8
 
 1478            IF ((ibio.eq.
iphyt).or.                                     &
 
 1479     &          (ibio.eq.
isden).or.                                     &
 
 1480     &          (ibio.eq.
ilden)) 
THEN 
 1482                cff1=fc(i,0)*hz_inv(i,1)
 
 1483# ifdef DENITRIFICATION 
 1485#  ifdef DIAGNOSTICS_BIO 
 1488     &                              rmask_full(i,j)*                    &
 
 1490     &                              (1.0_r8-cff2)*cff1*hz(i,j,1)*fiter
 
 1506#  if defined CARBON && defined TALK_NONCONSERV 
 1513#  ifdef DENITRIFICATION 
 1517            IF ((ibio.eq.
isdec).or.                                     &
 
 1518     &          (ibio.eq.
ildec))
THEN 
 1520                cff1=fc(i,0)*hz_inv(i,1)
 
 1524            IF (ibio.eq.
iphyt)
THEN 
 1526                cff1=fc(i,0)*hz_inv(i,1)
 
 1563              cff=bio(i,k,ibio)-bio_old(i,k,ibio)
 
 1567              cff=cff*rmask_wet(i,j)
 
 1570              t(i,j,k,nnew,ibio)=t(i,j,k,nnew,ibio)+cff*hz(i,j,k)
 
 
 1582     &                          LBi, UBi, LBj, UBj, IminS, ImaxS,       &
 
 1587     &                          T, S, TIC, TAlk, pH, pCO2)
 
 1642      integer,  
intent(in) :: LBi, UBi, LBj, UBj, IminS, ImaxS
 
 1643      integer,  
intent(in) :: Istr, Iend, j, DoNewton
 
 1645#  ifdef ASSUMED_SHAPE 
 1647      real(r8), 
intent(in) :: rmask(LBi:,LBj:)
 
 1649      real(r8), 
intent(in) :: T(IminS:)
 
 1650      real(r8), 
intent(in) :: S(IminS:)
 
 1651      real(r8), 
intent(in) :: TIC(IminS:)
 
 1652      real(r8), 
intent(in) :: TAlk(IminS:)
 
 1653      real(r8), 
intent(inout) :: pH(LBi:,LBj:)
 
 1656      real(r8), 
intent(in) :: rmask(LBi:UBi,LBj:UBj)
 
 1658      real(r8), 
intent(in) :: T(IminS:ImaxS)
 
 1659      real(r8), 
intent(in) :: S(IminS:ImaxS)
 
 1660      real(r8), 
intent(in) :: TIC(IminS:ImaxS)
 
 1661      real(r8), 
intent(in) :: TAlk(IminS:ImaxS)
 
 1662      real(r8), 
intent(inout) :: pH(LBi:UBi,LBj:UBj)
 
 1665      real(r8), 
intent(out) :: pCO2(IminS:ImaxS)
 
 1669      integer, 
parameter :: InewtonMax = 10
 
 1670      integer, 
parameter :: IbrackMax = 30
 
 1672      integer :: Hstep, Ibrack, Inewton, i
 
 1674      real(r8) :: Tk, centiTk, invTk, logTk
 
 1675      real(r8) :: scl, sqrtS
 
 1676      real(r8) :: borate, alk, dic
 
 1677      real(r8) :: ff, K1, K2, K12, Kb, Kw
 
 1678      real(r8) :: p5, p4, p3, p2, p1, p0
 
 1679      real(r8) :: df, fn, fni(3), ftest
 
 1680      real(r8) :: deltaX, invX, invX2, X, X2, X3
 
 1681      real(r8) :: pH_guess, pH_hi, pH_lo
 
 1682      real(r8) :: X_guess, X_hi, X_lo, X_mid
 
 1683      real(r8) :: CO2star, Htotal, Htotal2
 
 1690      i_loop: 
DO i=istr,iend
 
 1692        IF (rmask(i,j).gt.0.0_r8) 
THEN 
 1701        alk= talk(i)*0.000001_r8
 
 1702        dic = tic(i)*0.000001_r8
 
 1709        ff=exp(-162.8301_r8+                                            &
 
 1710     &         218.2968_r8/centitk+                                     &
 
 1711     &         log(centitk)*90.9241_r8-                                 &
 
 1712     &         centitk*centitk*1.47696_r8+                              &
 
 1713     &         s(i)*(0.025695_r8-                                       &
 
 1714     &               centitk*(0.025225_r8-                              &
 
 1715     &                        centitk*0.0049867_r8)))
 
 1728        k1=10.0_r8**(62.008_r8-                                         &
 
 1729     &               invtk*3670.7_r8-                                   &
 
 1730     &               logtk*9.7944_r8+                                   &
 
 1731     &               s(i)*(0.0118_r8-                                   &
 
 1732     &                     s(i)*0.000116_r8))
 
 1733        k2=10.0_r8**(-4.777_r8-                                         &
 
 1734     &               invtk*1394.7_r8+                                   &
 
 1735     &               s(i)*(0.0184_r8-                                   &
 
 1736     &                     s(i)*0.000118_r8))
 
 1743        kb=exp(-invtk*(8966.90_r8+                                      &
 
 1744     &                 sqrts*(2890.53_r8+                               &
 
 1745     &                        sqrts*(77.942_r8-                         &
 
 1746     &                               sqrts*(1.728_r8-                   &
 
 1747     &                                      sqrts*0.0996_r8))))-        &
 
 1748     &         logtk*(24.4344_r8+                                       &
 
 1749     &                sqrts*(25.085_r8+                                 &
 
 1750     &                       sqrts*0.2474_r8))+                         &
 
 1751     &         tk*(sqrts*0.053105_r8)+                                  &
 
 1753     &         sqrts*(137.1942_r8+                                      &
 
 1754     &                sqrts*1.62142_r8))
 
 1761        kw=exp(148.9652_r8-                                             &
 
 1762     &         invtk*13847.26_r8-                                       &
 
 1763     &         logtk*23.6521_r8-                                        &
 
 1764     &         sqrts*(5.977_r8-                                         &
 
 1765     &                invtk*118.67_r8-                                  &
 
 1766     &                logtk*1.0495_r8)-                                 &
 
 1773        borate=0.000232_r8*scl/10.811_r8
 
 1790        p3 = dic*k1-alk*(kb+k1)+kb*borate+kw-kb*k1-k12
 
 1791        p2 = dic*(kb*k1+2*k12)-alk*(kb*k1+k12)+kb*borate*k1             &
 
 1792     &       +(kw*kb+kw*k1-kb*k12)
 
 1793        p1 = 2.0_r8*dic*kb*k12-alk*kb*k12+kb*borate*k12                 &
 
 1805        x_guess=10.0_r8**(-ph_guess)
 
 1806        x_lo=10.0_r8**(-ph_hi)
 
 1807        x_hi=10.0_r8**(-ph_lo)
 
 1808        x_mid=0.5_r8*(x_lo+x_hi)
 
 1814        IF (donewton.eq.1) 
THEN 
 1817          DO inewton=1,inewtonmax
 
 1821            fn=((((p5*x+p4)*x+p3)*x+p2)*x+p1)*x+p0
 
 1827            df=(((5*p5*x+4*p4)*x+3*p3)*x+2*p2)*x+p1
 
 1847          brack_it: 
DO ibrack=1,ibrackmax
 
 1849              IF (hstep.eq.1) x=x_hi
 
 1850              IF (hstep.eq.2) x=x_lo
 
 1851              IF (hstep.eq.3) x=x_mid
 
 1855              fni(hstep)=((((p5*x+p4)*x+p3)*x+p2)*x+p1)*x+p0
 
 1860            IF (fni(3).eq.0) 
THEN 
 1864               IF (ftest.gt.0) 
THEN 
 1869               x_mid=0.5_r8*(x_lo+x_hi)
 
 1885        htotal2=htotal*htotal
 
 1891        co2star=dic*htotal2/(htotal2+k1*htotal+k1*k2)
 
 1895        ph(i,j)=-log10(htotal)
 
 1899        pco2(i)=co2star*1000000.0_r8/ff
 
 
 1914     &                       LBi, UBi, LBj, UBj,                        &
 
 1915     &                       IminS, ImaxS, j, DoNewton,                 &
 
 1919     &                       T, S, TIC, TAlk, PO4b, SiO3, pH, pCO2)
 
 1970      integer,  
intent(in) :: LBi, UBi, LBj, UBj, IminS, ImaxS
 
 1971      integer,  
intent(in) :: Istr, Iend, j, DoNewton
 
 1973#  ifdef ASSUMED_SHAPE 
 1975      real(r8), 
intent(in) :: rmask(LBi:,LBj:)
 
 1977      real(r8), 
intent(in) :: T(IminS:)
 
 1978      real(r8), 
intent(in) :: S(IminS:)
 
 1979      real(r8), 
intent(in) :: TIC(IminS:)
 
 1980      real(r8), 
intent(in) :: TAlk(IminS:)
 
 1981      real(r8), 
intent(inout) :: pH(LBi:,LBj:)
 
 1984      real(r8), 
intent(in) :: rmask(LBi:UBi,LBj:UBj)
 
 1986      real(r8), 
intent(in) :: T(IminS:ImaxS)
 
 1987      real(r8), 
intent(in) :: S(IminS:ImaxS)
 
 1988      real(r8), 
intent(in) :: TIC(IminS:ImaxS)
 
 1989      real(r8), 
intent(in) :: TAlk(IminS:ImaxS)
 
 1990      real(r8), 
intent(inout) :: pH(LBi:UBi,LBj:UBj)
 
 1992      real(r8), 
intent(in) :: PO4b
 
 1993      real(r8), 
intent(in) :: SiO3
 
 1995      real(r8), 
intent(out) :: pCO2(IminS:ImaxS)
 
 1999      integer, 
parameter :: InewtonMax = 10
 
 2000      integer, 
parameter :: IbrackMax = 30
 
 2002      integer :: Hstep, Ibrack, Inewton, i
 
 2004      real(r8) :: Tk, centiTk, invTk, logTk
 
 2005      real(r8) :: SO4, scl, sqrtS, sqrtSO4
 
 2006      real(r8) :: alk, dic, phos, sili
 
 2007      real(r8) :: borate, sulfate, fluoride
 
 2008      real(r8) :: ff, K1, K2, K1p, K2p, K3p, Kb, Kf, Ks, Ksi, Kw
 
 2009      real(r8) :: K12, K12p, K123p, invKb, invKs, invKsi
 
 2010      real(r8) :: A, A2, B, B2, C, dA, dB
 
 2011      real(r8) :: df, fn, fni(3), ftest
 
 2012      real(r8) :: deltaX, invX, invX2, X, X2, X3
 
 2013      real(r8) :: pH_guess, pH_hi, pH_lo
 
 2014      real(r8) :: X_guess, X_hi, X_lo, X_mid
 
 2015      real(r8) :: CO2star, Htotal, Htotal2
 
 2022      i_loop: 
DO i=istr,iend
 
 2024        IF (rmask(i,j).gt.0.0_r8) 
THEN 
 2031        so4=19.924_r8*s(i)/(1000.0_r8-1.005_r8*s(i))
 
 2035        alk=talk(i)*0.000001_r8
 
 2036        dic=tic(i)*0.000001_r8
 
 2037        phos=po4b*0.000001_r8
 
 2038        sili=sio3*0.000001_r8
 
 2045        ff=exp(-162.8301_r8+                                            &
 
 2046     &         218.2968_r8/centitk+                                     &
 
 2047     &         log(centitk)*90.9241_r8-                                 &
 
 2048     &         centitk*centitk*1.47696_r8+                              &
 
 2049     &         s(i)*(0.025695_r8-                                       &
 
 2050     &               centitk*(0.025225_r8-                              &
 
 2051     &                        centitk*0.0049867_r8)))
 
 2064        k1=10.0_r8**(62.008_r8-                                         &
 
 2065     &               invtk*3670.7_r8-                                   &
 
 2066     &               logtk*9.7944_r8+                                   &
 
 2067     &               s(i)*(0.0118_r8-                                   &
 
 2068     &                     s(i)*0.000116_r8))
 
 2069        k2=10.0_r8**(-4.777_r8-                                         &
 
 2070     &               invtk*1394.7_r8+                                   &
 
 2071     &               s(i)*(0.0184_r8-                                   &
 
 2072     &                     s(i)*0.000118_r8))
 
 2079        kb=exp(-invtk*(8966.90_r8+                                      &
 
 2080     &                 sqrts*(2890.53_r8+                               &
 
 2081     &                        sqrts*(77.942_r8-                         &
 
 2082     &                               sqrts*(1.728_r8-                   &
 
 2083     &                                      sqrts*0.0996_r8))))-        &
 
 2084     &         logtk*(24.4344_r8+                                       &
 
 2085     &                sqrts*(25.085_r8+                                 &
 
 2086     &                       sqrts*0.2474_r8))+                         &
 
 2087     &         tk*(sqrts*0.053105_r8)+                                  &
 
 2089     &         sqrts*(137.1942_r8+                                      &
 
 2090     &                sqrts*1.62142_r8))
 
 2104        k1p=exp(115.525_r8-                                             &
 
 2105     &          invtk*4576.752_r8-                                      &
 
 2106     &          logtk*18.453_r8+                                        &
 
 2107     &          sqrts*(0.69171_r8-invtk*106.736_r8)-                    &
 
 2108     &          s(i)*(0.01844_r8+invtk*0.65643_r8))
 
 2109        k2p=exp(172.0883_r8-                                            &
 
 2110     &          invtk*8814.715_r8-                                      &
 
 2111     &          logtk*27.927_r8+                                        &
 
 2112     &          sqrts*(1.3566_r8-invtk*160.340_r8)-                     &
 
 2113     &          s(i)*(0.05778_r8-invtk*0.37335_r8))
 
 2114        k3p=exp(-18.141_r8-                                             &
 
 2115     &          invtk*3070.75_r8+                                       &
 
 2116     &          sqrts*(2.81197_r8+invtk*17.27039_r8)-                   &
 
 2117     &          s(i)*(0.09984_r8+invtk*44.99486_r8))
 
 2124        ksi=exp(117.385_r8-                                             &
 
 2125     &          invtk*8904.2_r8-                                        &
 
 2126     &          logtk*19.334_r8+                                        &
 
 2127     &          sqrtso4*(3.5913_r8-invtk*458.79_r8)-                    &
 
 2128     &          so4*(1.5998_r8-invtk*188.74_r8-                         &
 
 2129     &               so4*(0.07871_r8-invtk*12.1652_r8))+                &
 
 2130     &          log(1.0_r8-0.001005_r8*s(i)))
 
 2137        kw=exp(148.9652_r8-                                             &
 
 2138     &         invtk*13847.26_r8-                                       &
 
 2139     &         logtk*23.6521_r8-                                        &
 
 2140     &         sqrts*(5.977_r8-                                         &
 
 2141     &                invtk*118.67_r8-                                  &
 
 2142     &                logtk*1.0495_r8)-                                 &
 
 2150        ks=exp(141.328_r8-                                              &
 
 2151     &         invtk*4276.1_r8-                                         &
 
 2152     &         logtk*23.093_r8+                                         &
 
 2153     &         sqrtso4*(324.57_r8-invtk*13856.0_r8-logtk*47.986_r8-     &
 
 2154     &                  so4*invtk*2698.0_r8)-                           &
 
 2155     &         so4*(771.54_r8-invtk*35474.0_r8-logtk*114.723_r8-        &
 
 2156     &              so4*invtk*1776.0_r8)+                               &
 
 2157     &         log(1.0_r8-0.001005_r8*s(i)))
 
 2164        kf=exp(-12.641_r8+                                              &
 
 2165     &         invtk*1590.2_r8+                                         &
 
 2166     &         sqrtso4*1.525_r8+                                        &
 
 2167     &         log(1.0_r8-0.001005_r8*s(i))+                            &
 
 2168     &         log(1.0_r8+0.1400_r8*scl/(96.062_r8*ks)))
 
 2175        borate=0.000232_r8*scl/10.811_r8
 
 2176        sulfate=0.14_r8*scl/96.062_r8
 
 2177        fluoride=0.000067_r8*scl/18.9984_r8
 
 2195        x_guess=10.0_r8**(-ph_guess)
 
 2196        x_lo=10.0_r8**(-ph_hi)
 
 2197        x_hi=10.0_r8**(-ph_lo)
 
 2198        x_mid=0.5_r8*(x_lo+x_hi)
 
 2204        IF (donewton.eq.1) 
THEN 
 2213          DO inewton=1,inewtonmax
 
 2223            a=x*(k12p+x*(k1p+x))
 
 2225            c=1.0_r8/(1.0_r8+sulfate*invks)
 
 2229            da=x*(2.0_r8*k1p+3.0_r8*x)+k12p
 
 2236            fn=dic*k1*(x+2.0_r8*k2)/b+                                  &
 
 2237     &         borate/(1.0_r8+x*invkb)+                                 &
 
 2239     &         phos*(k12p*x+2.0_r8*k123p-x3)/a+                         &
 
 2240     &         sili/(1.0_r8+x*invksi)-                                  &
 
 2242     &         sulfate/(1.0_r8+ks*invx*c)-                              &
 
 2243     &         fluoride/(1.0_r8+kf*invx)-                               &
 
 2250            df=dic*k1*(b-db*(x+2.0_r8*k2))/b2-                          &
 
 2251     &         borate/(invkb*(1.0+x*invkb)**2)-                         &
 
 2253     &         phos*(a*(k12p-3.0_r8*x2)-da*(k12p*x+2.0_r8*k123p-x3))/a2-&
 
 2254     &         sili/(invksi*(1.0_r8+x*invksi)**2)+                      &
 
 2256     &         sulfate*ks*c*invx2/((1.0_r8+ks*invx*c)**2)+              &
 
 2257     &         fluoride*kf*invx2/((1.0_r8+kf*invx)**2)
 
 2284          brack_it: 
DO ibrack=1,ibrackmax
 
 2286              IF (hstep.eq.1) x=x_hi
 
 2287              IF (hstep.eq.2) x=x_lo
 
 2288              IF (hstep.eq.3) x=x_mid
 
 2297              a=x*(k12p+x*(k1p+x))+k123p
 
 2299              c=1.0_r8/(1.0_r8+sulfate*invks)
 
 2303              da=x*(k1p*2.0_r8+3.0_r8*x2)+k12p
 
 2308              fni(hstep)=dic*(k1*x+2.0_r8*k12)/b+                       &
 
 2309     &                   borate/(1.0_r8+x*invkb)+                       &
 
 2311     &                   phos*(k12p*x+2.0_r8*k123p-x3)/a+               &
 
 2312     &                   sili/(1.0_r8+x*invksi)-                        &
 
 2314     &                   sulfate/(1.0_r8+ks*invx*c)-                    &
 
 2315     &                   fluoride/(1.0_r8+kf*invx)-                     &
 
 2321            IF (fni(3).eq.0.0_r8) 
THEN 
 2325              IF (ftest.gt.0.0) 
THEN 
 2330              x_mid=0.5_r8*(x_lo+x_hi)
 
 2346        htotal2=htotal*htotal
 
 2352        co2star=dic*htotal2/(htotal2+k1*htotal+k1*k2)
 
 2356        ph(i,j)=-log10(htotal)
 
 2360        pco2(i)=co2star*1000000.0_r8/ff