File indexing completed on 2023-11-24 06:10:12 UTC
view on githubraw file Latest commit 15ec8028 on 2023-11-23 16:15:51 UTC
c0d1c06c15 Matt*0001 #include "BLING_OPTIONS.h"
0002
0003
15ec8028f7 aver*0004 SUBROUTINE BLING_CARBONATE_SYS(
c0d1c06c15 Matt*0005 I PTR_DIC, PTR_ALK, PTR_PO4,
e0f9a7ba0b Matt*0006 #ifdef USE_SIBLING
0007 I PTR_SI,
0008 #endif
15ec8028f7 aver*0009 I bi, bj, iMin, iMax, jMin, jMax,
0010 I myTime, myIter, myThid )
c0d1c06c15 Matt*0011
0012
0013
0014
0015
0016
0017
e0f9a7ba0b Matt*0018 IMPLICIT NONE
0019
c0d1c06c15 Matt*0020
0021 #include "SIZE.h"
0022 #include "DYNVARS.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "GRID.h"
0026 #include "BLING_VARS.h"
0027
0028
0029
0030
0031
0032
15ec8028f7 aver*0033
0034
c0d1c06c15 Matt*0035 _RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0036 _RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0037 _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
e0f9a7ba0b Matt*0038 #ifdef USE_SIBLING
0039 _RL PTR_SI(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0040 #endif
15ec8028f7 aver*0041 INTEGER bi, bj, iMin, iMax, jMin, jMax
0042 _RL myTime
0043 INTEGER myIter
0044 INTEGER myThid
c0d1c06c15 Matt*0045
0046 #ifdef ALLOW_PTRACERS
0047
0048
0049
0050
0051
15ec8028f7 aver*0052
c0d1c06c15 Matt*0053
0054
0055
0056
e0f9a7ba0b Matt*0057
0058
c0d1c06c15 Matt*0059 INTEGER i,j,k
0060 _RL carbonate
0061 _RL calcium
0062 _RL po4local
15ec8028f7 aver*0063 _RL sitlocal
c0d1c06c15 Matt*0064 _RL diclocal
0065 _RL alklocal
0066 _RL pCO2local
0067 _RL pHlocal
15ec8028f7 aver*0068 _RL locTemp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0069 _RL locSalt(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
c0d1c06c15 Matt*0070
e0f9a7ba0b Matt*0071
0072
c0d1c06c15 Matt*0073
0074
0075
0076
e0f9a7ba0b Matt*0077
c0d1c06c15 Matt*0078
0079
0080
0081
0082
0083 DO k=1,Nr
0084
15ec8028f7 aver*0085 DO j=jMin,jMax
0086 DO i=iMin,iMax
0087 locTemp(i,j) = theta(i,j,k,bi,bj)
0088 locSalt(i,j) = salt (i,j,k,bi,bj)
0089 ENDDO
0090 ENDDO
c0d1c06c15 Matt*0091
e0f9a7ba0b Matt*0092 #ifdef CARBONCHEM_SOLVESAPHE
0093 #ifdef ALLOW_DEBUG
0094 IF (debugMode) CALL DEBUG_CALL(
0095 & 'DIC_COEFFS_DEEP',myThid)
0096 #endif
0097
0098 CALL DIC_COEFFS_SURF(
15ec8028f7 aver*0099 I locTemp, locSalt,
e0f9a7ba0b Matt*0100 I bi,bj,iMin,iMax,jMin,jMax,myThid)
0101
0102
0103 CALL DIC_COEFFS_DEEP(
15ec8028f7 aver*0104 I locTemp, locSalt,
e0f9a7ba0b Matt*0105 I bi,bj,iMin,iMax,jMin,jMax,
0106 I k,myThid)
0107
15ec8028f7 aver*0108 #else /* CARBONCHEM_SOLVESAPHE */
e0f9a7ba0b Matt*0109
0110 #ifdef ALLOW_DEBUG
0111 IF (debugMode) CALL DEBUG_CALL(
0112 & 'CARBON_COEFFS_PRESSURE_DEP',myThid)
0113 #endif
0114
c0d1c06c15 Matt*0115
15ec8028f7 aver*0116 CALL CARBON_COEFFS_PRESSURE_DEP(
0117 I locTemp, locSalt,
0118 I bi, bj, iMin, iMax, jMin, jMax,
0119 I k, myThid )
0120 #endif /* CARBONCHEM_SOLVESAPHE */
c0d1c06c15 Matt*0121
0122
0123
0124
15ec8028f7 aver*0125 DO j=jMin,jMax
c0d1c06c15 Matt*0126
15ec8028f7 aver*0127 DO i=iMin,iMax
c0d1c06c15 Matt*0128
15ec8028f7 aver*0129 IF ( hFacC(i,j,k,bi,bj) .GT. 0. _d 0) THEN
c0d1c06c15 Matt*0130
0131
e0f9a7ba0b Matt*0132 #ifdef CARBONCHEM_SOLVESAPHE
15ec8028f7 aver*0133 calcium = cat(i,j,bi,bj)
e0f9a7ba0b Matt*0134 #else
c0d1c06c15 Matt*0135
15ec8028f7 aver*0136 calcium = 1.028 _d -2*salt(i,j,k,bi,bj)/35. _d 0
e0f9a7ba0b Matt*0137 #endif
c0d1c06c15 Matt*0138
15ec8028f7 aver*0139 po4local = PTR_PO4(i,j,k)
0140 diclocal = PTR_DIC(i,j,k)
0141 alklocal = PTR_ALK(i,j,k)
0142 pHlocal = pH(i,j,k,bi,bj)
e0f9a7ba0b Matt*0143
0144
0145
0146
0147 #ifdef USE_SIBLING
15ec8028f7 aver*0148 sitlocal = PTR_SI(i,j,k)
e0f9a7ba0b Matt*0149 #else
15ec8028f7 aver*0150 sitlocal = 0.03 _d 0
e0f9a7ba0b Matt*0151 #endif
0152
0153 #ifdef CARBONCHEM_SOLVESAPHE
15ec8028f7 aver*0154 IF ( selectPHsolver.GT.0 ) THEN
e0f9a7ba0b Matt*0155
0156 #ifdef ALLOW_DEBUG
0157 IF (debugMode) CALL DEBUG_CALL('AHINI_FOR_AT',myThid)
0158 #endif
0159
0160
0161
0162
0163
0164
0165
0166 #ifdef ALLOW_DEBUG
0167 IF (debugMode) CALL DEBUG_CALL('CALC_PCO2_SOLVESAPHE',myThid)
0168 #endif
0169 CALL CALC_PCO2_SOLVESAPHE(
15ec8028f7 aver*0170 I locTemp(i,j), locSalt(i,j),
e0f9a7ba0b Matt*0171 I diclocal, po4local,
15ec8028f7 aver*0172 I sitlocal, alklocal,
0173 U pHlocal, pCO2local, carbonate,
e0f9a7ba0b Matt*0174 I i,j,k,bi,bj,myIter,myThid )
15ec8028f7 aver*0175
0176
0177 carbonate = carbonate*permil
0178 ELSE
e0f9a7ba0b Matt*0179
0180 #endif /* CARBONCHEM_SOLVESAPHE */
0181 #ifdef ALLOW_DEBUG
0182 IF (debugMode) CALL DEBUG_CALL('CALC_PCO2_APPROX',myThid)
0183 #endif
c0d1c06c15 Matt*0184
0185
0186
0187
15ec8028f7 aver*0188
c0d1c06c15 Matt*0189
0190
0191
15ec8028f7 aver*0192 CALL CALC_PCO2_APPROX(
0193 I locTemp(i,j), locSalt(i,j),
c0d1c06c15 Matt*0194 I diclocal, po4local,
15ec8028f7 aver*0195 I sitlocal,alklocal,
c0d1c06c15 Matt*0196 I ak1(i,j,bi,bj),ak2(i,j,bi,bj),
0197 I ak1p(i,j,bi,bj),ak2p(i,j,bi,bj),ak3p(i,j,bi,bj),
0198 I aks(i,j,bi,bj),akb(i,j,bi,bj),akw(i,j,bi,bj),
0199 I aksi(i,j,bi,bj),akf(i,j,bi,bj),
e0f9a7ba0b Matt*0200 I ak0(i,j,bi,bj),fugf(i,j,bi,bj),ff(i,j,bi,bj),
c0d1c06c15 Matt*0201 I bt(i,j,bi,bj),st(i,j,bi,bj),ft(i,j,bi,bj),
0202 U pHlocal,pCO2local,carbonate,
0203 I i,j,k,bi,bj,myIter,myThid )
15ec8028f7 aver*0204
c0d1c06c15 Matt*0205
e0f9a7ba0b Matt*0206 #ifdef CARBONCHEM_SOLVESAPHE
15ec8028f7 aver*0207 ENDIF
e0f9a7ba0b Matt*0208 #endif /* CARBONCHEM_SOLVESAPHE */
0209
15ec8028f7 aver*0210 pH(i,j,k,bi,bj) = pHlocal
c0d1c06c15 Matt*0211
e0f9a7ba0b Matt*0212
c0d1c06c15 Matt*0213
15ec8028f7 aver*0214 omegaC(i,j,k,bi,bj) = calcium * carbonate /
c0d1c06c15 Matt*0215 & Ksp_TP_Calc(i,j,bi,bj)
15ec8028f7 aver*0216 omegaAr(i,j,k,bi,bj) = calcium * carbonate /
c0d1c06c15 Matt*0217 & Ksp_TP_Arag(i,j,bi,bj)
0218
15ec8028f7 aver*0219 ELSE
c0d1c06c15 Matt*0220
15ec8028f7 aver*0221 pH(i,j,k,bi,bj) = 8. _d 0
0222 omegaC(i,j,k,bi,bj) = 0. _d 0
0223 omegaAr(i,j,k,bi,bj) = 0. _d 0
c0d1c06c15 Matt*0224
15ec8028f7 aver*0225 ENDIF
c0d1c06c15 Matt*0226
0227 ENDDO
0228 ENDDO
0229 ENDDO
0230
0231 #endif /* ALLOW_PTRACERS */
0232 RETURN
0233 END