C $Header: /u/gcmpack/MITgcm/pkg/bling/bling_carbonate_sys.F,v 1.3 2016/10/12 22:34:27 mmazloff Exp $ C $Name: $ #include "BLING_OPTIONS.h" CBOP subroutine BLING_CARBONATE_SYS( I PTR_DIC, PTR_ALK, PTR_PO4, I bi, bj, imin, imax, jmin, jmax, I myIter, myTime, myThid) C ================================================================= C | subroutine bling_carbonate_sys C | o Calculate carbonate fluxes C | Also update pH (3d field) C ================================================================= implicit none C == GLobal variables == #include "SIZE.h" #include "DYNVARS.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "BLING_VARS.h" C == Routine arguments == C PTR_DIC :: dissolved inorganic carbon C PTR_ALK :: alkalinity C PTR_PO4 :: phosphate C myThid :: thread Id. number C myIter :: current timestep C myTime :: current time INTEGER myThid INTEGER myIter _RL myTime _RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) INTEGER imin, imax, jmin, jmax, bi, bj #ifdef ALLOW_PTRACERS C == Local variables == C i,j,k :: loop indices C carbonate :: local value of calcium carbonate C calcium :: local value of Ca C diclocal :: local value of DIC C alklocal :: local value of ALK C pCO2local :: local value of pCO2 C pHlocal :: local value of pH C CO3ITER :: iterations counter for CO3 ion calculation C CO3ITERmax :: total number of iterations C silicaDEEP :: subsurface silica concentration INTEGER i,j,k _RL carbonate _RL calcium _RL po4local _RL diclocal _RL alklocal _RL pCO2local _RL pHlocal _RL silicaDEEP _RL ttmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL stmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER CO3ITER INTEGER CO3ITERmax CEOP C Assume constant deep silica value C 30 micromol = 0.03 mol m-3 C This is temporary until SiBLING is included C Since pH is now a 3D field and is solved for at every time step C few iterations are needed CO3itermax = 1 C determine carbonate ion concentration through full domain C determine calcite saturation state C$TAF LOOP = parallel DO k=1,Nr DO j=jMin,jMax DO i=iMin,iMax ttmp(i,j) = theta(i,j,k,bi,bj) stmp(i,j) = salt(i,j,k,bi,bj) ENDDO ENDDO C Get coefficients for carbonate calculations CALL CARBON_COEFFS_PRESSURE_DEP( I ttmp, stmp, I bi, bj, imin, imax, jmin, jmax, I k, myThid) C-------------------------------------------------- C$TAF LOOP = parallel DO j=jMin,jMax C$TAF LOOP = parallel DO i=iMin,iMax IF ( hFacC(i,j,k,bi,bj) .gt. 0. _d 0) THEN C$TAF init dic_caco3 = static, 2 C Estimate calcium concentration from salinity calcium = 1.028 _d -2*salt(i,j,k,bi,bj)/35. _d 0 po4local = PTR_PO4(i,j,k) diclocal = PTR_DIC(i,j,k) alklocal = PTR_ALK(i,j,k) pHlocal = pH(i,j,k,bi,bj) silicaDEEP = 0.03 _d 0 C Evaluate carbonate (CO3) ions concentration C iteratively c DO CO3iter = 1, CO3itermax C-------------------------------------------------- CALL CALC_PCO2_APPROX( I ttmp(i,j),stmp(i,j), I diclocal, po4local, I silicaDEEP,alklocal, I ak1(i,j,bi,bj),ak2(i,j,bi,bj), I ak1p(i,j,bi,bj),ak2p(i,j,bi,bj),ak3p(i,j,bi,bj), I aks(i,j,bi,bj),akb(i,j,bi,bj),akw(i,j,bi,bj), I aksi(i,j,bi,bj),akf(i,j,bi,bj), I ak0(i,j,bi,bj), fugf(i,j,bi,bj), ff(i,j,bi,bj), I bt(i,j,bi,bj),st(i,j,bi,bj),ft(i,j,bi,bj), U pHlocal,pCO2local,carbonate, I i,j,k,bi,bj,myIter,myThid ) c ENDDO pH(i,j,k,bi,bj) = pHlocal C Calculate calcium carbonate (calcite and aragonite) C saturation state omegaC(i,j,k,bi,bj) = calcium * carbonate / & Ksp_TP_Calc(i,j,bi,bj) omegaAr(i,j,k,bi,bj) = calcium * carbonate / & Ksp_TP_Arag(i,j,bi,bj) else pH(i,j,k,bi,bj) = 0. _d 0 omegaC(i,j,k,bi,bj) = 0. _d 0 omegaAr(i,j,k,bi,bj) = 0. _d 0 endif ENDDO ENDDO ENDDO #endif /* ALLOW_PTRACERS */ RETURN END