[6] | 1 | SUBROUTINE ice_carb_chem |
---|
| 2 | |
---|
| 3 | !------------------------------------------------------------------------------! |
---|
| 4 | ! *** ice_carb_chem *** |
---|
| 5 | ! |
---|
| 6 | ! This routine re-equilibrates the chemical species of the carbonate system |
---|
| 7 | ! given two variables (DIC and Alk, or CO2 and Alk) |
---|
| 8 | ! |
---|
| 9 | ! Original code: Zeebe and Wolf-Gladrow, 2001. CO2 in Seawater: |
---|
| 10 | ! Equilibrium, Kinetics, Isotopes. |
---|
| 11 | ! (http://www.soest.hawaii.edu/oceanography/faculty/zeebe_files/CO2_System_in_Seawater/csys.html) |
---|
| 12 | ! |
---|
| 13 | ! Translation in F90: S. Moreau, P.-Y Barriat, S. Dubinkina, June 2012 |
---|
| 14 | ! |
---|
| 15 | ! Rewriting: M. Vancopppenolle, S. Moreau, Dec 2015 |
---|
| 16 | ! |
---|
| 17 | ! - Remove dummy arrays for T and S (use t_i_bio and sbr_bio instead) |
---|
| 18 | ! - change the name of the routine |
---|
| 19 | ! - remove the obsolete declarations |
---|
| 20 | |
---|
| 21 | ! Present status : c_i_bio(13,*) is wrong... to be continued!! |
---|
| 22 | ! |
---|
| 23 | !------------------------------------------------------------------------------! |
---|
| 24 | |
---|
| 25 | USE lib_fortran |
---|
| 26 | |
---|
| 27 | INCLUDE 'type.com' |
---|
| 28 | INCLUDE 'para.com' |
---|
| 29 | INCLUDE 'const.com' |
---|
| 30 | INCLUDE 'ice.com' |
---|
| 31 | INCLUDE 'thermo.com' |
---|
| 32 | INCLUDE 'bio.com' |
---|
| 33 | |
---|
| 34 | EXTERNAL zgeev ! lapack (computes the eigenvalues of complex nonsymmetric matrix) |
---|
| 35 | |
---|
| 36 | REAL(8), DIMENSION(nlay_bio) :: |
---|
| 37 | & Kw, !: Equilibrium constants |
---|
| 38 | & Kh, |
---|
| 39 | & Kb, |
---|
| 40 | & Ks, |
---|
| 41 | & Kf, |
---|
| 42 | & K1, |
---|
| 43 | & K2 |
---|
| 44 | |
---|
| 45 | REAL(8) :: ! define local variables |
---|
| 46 | & h1, |
---|
| 47 | & ztmp, |
---|
| 48 | & ztmp1, |
---|
| 49 | & ztmp2, |
---|
| 50 | & ztmp3, |
---|
| 51 | & ztmp4, |
---|
| 52 | & zbor, |
---|
| 53 | & zT, |
---|
| 54 | & z1T, |
---|
| 55 | & zlogT, |
---|
| 56 | & zT2, |
---|
| 57 | & zT3, |
---|
| 58 | & ztc, |
---|
| 59 | & ztc2, |
---|
| 60 | & ztc3, |
---|
| 61 | & zS12, |
---|
| 62 | & zS, |
---|
| 63 | & zS32, |
---|
| 64 | & zS2, |
---|
| 65 | & zhp |
---|
| 66 | |
---|
| 67 | LOGICAL :: |
---|
| 68 | & ln_write_bio = .TRUE. |
---|
| 69 | |
---|
| 70 | REAL(8), DIMENSION(6) :: |
---|
| 71 | & zpoly |
---|
| 72 | |
---|
| 73 | INTEGER(4), PARAMETER :: ! Parameters for H+ retrieval |
---|
| 74 | & n_hp = 5 ! size of the polynom |
---|
| 75 | |
---|
| 76 | REAL(8) :: |
---|
| 77 | & zb5(2,0:n_hp), |
---|
| 78 | & zrwrk(2*n_hp) |
---|
| 79 | |
---|
| 80 | INTEGER(4) |
---|
| 81 | & zinfo |
---|
| 82 | |
---|
| 83 | ! COMPLEX(16) :: |
---|
| 84 | DOUBLE COMPLEX :: |
---|
| 85 | & zA(n_hp+1,n_hp+1), |
---|
| 86 | & zvl(n_hp,n_hp), |
---|
| 87 | & zvr(n_hp,n_hp), |
---|
| 88 | & zwrk(3*n_hp), |
---|
| 89 | & zeigs(n_hp) |
---|
| 90 | |
---|
| 91 | !==============================================================================! |
---|
| 92 | |
---|
| 93 | IF ( ln_write_bio ) THEN |
---|
| 94 | |
---|
| 95 | WRITE(numout,*) |
---|
| 96 | WRITE(numout,*) ' ice_carb_chem ' |
---|
| 97 | WRITE(numout,*) '~~~~~~~~~~~~~~~' |
---|
| 98 | WRITE(numout,*) |
---|
| 99 | |
---|
| 100 | ENDIF |
---|
| 101 | |
---|
| 102 | CALL ice_brine |
---|
| 103 | |
---|
| 104 | DO layer = 1, nlay_bio |
---|
| 105 | |
---|
| 106 | !------------------------------------------------------------ |
---|
| 107 | ! 1) Physical inputs (temperature and brine salinity) |
---|
| 108 | !------------------------------------------------------------ |
---|
| 109 | |
---|
| 110 | ! temperature factors |
---|
| 111 | zT = t_i_bio(layer) |
---|
| 112 | z1t = 1.d0/zT |
---|
| 113 | zlogT = LOG(zT) |
---|
| 114 | zT2 = zT*zT |
---|
| 115 | |
---|
| 116 | ! Brine salinity factors |
---|
| 117 | ztc = tc_bio(layer) |
---|
| 118 | ztc2 = ztc*ztc |
---|
| 119 | ztc3 = ztc2 * ztc |
---|
| 120 | |
---|
| 121 | zS12 = SQRT(sbr_bio(layer)) |
---|
| 122 | zS = sbr_bio(layer) |
---|
| 123 | zS32 = zS12*zS |
---|
| 124 | zS2 = zS*zS |
---|
| 125 | |
---|
| 126 | !---------------------------------------------------------------- |
---|
| 127 | ! 2) Equilibrium constants |
---|
| 128 | !---------------------------------------------------------------- |
---|
| 129 | ! |
---|
| 130 | ! units: mol/kg-soln |
---|
| 131 | ! set phflag (0:Total), (1:Free) |
---|
| 132 | |
---|
| 133 | !--- Kw (water dissociation constant) |
---|
| 134 | !-------------------------------------- |
---|
| 135 | ! |
---|
| 136 | ! Millero (1995)(in Dickson and Goyet (1994, Chapter 5, p.18)) |
---|
| 137 | ! K_w in mol/kg-soln. |
---|
| 138 | ! pH-scale: total scale. |
---|
| 139 | |
---|
| 140 | ztmp1 = -13847.26*z1T + 148.96502 - 23.6521*zlogT |
---|
| 141 | ztmp2 = ( 118.67*z1T - 5.977 + 1.0495*zlogT)*zs12 - 0.01615*zS |
---|
| 142 | |
---|
| 143 | ztmp = ztmp1 + ztmp2 |
---|
| 144 | |
---|
| 145 | Kw(layer) = EXP(ztmp) |
---|
| 146 | |
---|
| 147 | !--- Kh (Henry's solubility) |
---|
| 148 | !---------------------------- |
---|
| 149 | ! |
---|
| 150 | ! CO2(g) <-> CO2(aq.) |
---|
| 151 | ! Kh = [CO2]/ p CO2 |
---|
| 152 | ! |
---|
| 153 | ! Weiss (1974) [mol/kg/atm] |
---|
| 154 | ! |
---|
| 155 | |
---|
| 156 | ztmp = 9345.17*z1t - 60.2409 + 23.3585*(zlogt - LOG(100.)) |
---|
| 157 | ztmp = ztmp + zS*( 0.023517 - 2.3656e-4*zT + 4.7036e-7*zT2 ) |
---|
| 158 | |
---|
| 159 | Kh(layer) = EXP(ztmp) |
---|
| 160 | |
---|
| 161 | !--- K1 (first acidity constant) |
---|
| 162 | !-------------------------------- |
---|
| 163 | ! [H+].[HCO3-]/[CO2] = K1 |
---|
| 164 | |
---|
| 165 | IF ( nn_carbonate .EQ. 1 ) THEN |
---|
| 166 | ! Roy et al. (1993) IN: Dickson and Goyet (1994), Ch. 5, p. 14 |
---|
| 167 | ! pH-scale: 'total'. mol/kg-soln |
---|
| 168 | |
---|
| 169 | ztmp1 = 2.83655 - 2307.1266*z1t - |
---|
| 170 | & 1.5529413*zlogt |
---|
| 171 | ztmp2 = - ( 0.20760841 + 4.0484 *z1t ) * zs12 |
---|
| 172 | ztmp3 = 0.08468345*zS - 0.00654208*zS32 |
---|
| 173 | ztmp4 = LOG( 1. - 0.001005*zS ) |
---|
| 174 | |
---|
| 175 | ztmp = ztmp1 + ztmp2 + ztmp3 + ztmp4 |
---|
| 176 | |
---|
| 177 | K1(layer) = EXP(ztmp) |
---|
| 178 | |
---|
| 179 | ELSE |
---|
| 180 | ! Mehrbach et al (1973) refit by Lueker et al. (2000). |
---|
| 181 | ! pH-scale: 'total'. mol/kg-soln |
---|
| 182 | ztmp = 3633.86 * z1t - 61.2172 + 9.6777*zlogt - |
---|
| 183 | & 0.011555*zS + 0.0001152*zS2 |
---|
| 184 | |
---|
| 185 | K1(layer) = 10**(-ztmp) |
---|
| 186 | |
---|
| 187 | ENDIF |
---|
| 188 | |
---|
| 189 | !--- K2 (second acidity constant) |
---|
| 190 | !--------------------------------- |
---|
| 191 | ! [H+].[CO32-]/[HCO3-] = K2 |
---|
| 192 | |
---|
| 193 | IF ( nn_carbonate .EQ. 1 ) THEN |
---|
| 194 | ! Roy et al 1993, total ph-scale mol/kg-soln |
---|
| 195 | ztmp1 = - 9.226508 - 3351.6106*z1t - 0.2005743*zlogt |
---|
| 196 | ztmp2 = ( -0.106901773 - 23.9722*z1t ) * zs12 |
---|
| 197 | ztmp3 = 0.1130822*zs - 8.46934e-3*zs32 + LOG(1.-1.005e-3*zS) |
---|
| 198 | |
---|
| 199 | ztmp = ztmp1 + ztmp2 + ztmp3 |
---|
| 200 | |
---|
| 201 | K2(layer) = EXP(ztmp) |
---|
| 202 | |
---|
| 203 | ELSE |
---|
| 204 | |
---|
| 205 | ! Mehrbach et al. (1973) refit by Lueker et al. (2000). |
---|
| 206 | ztmp = 471.78*z1T + 25.9290 - |
---|
| 207 | & 3.16967*zlogT - |
---|
| 208 | & 0.01781*zS + 0.0001122*zS2 |
---|
| 209 | |
---|
| 210 | K2(layer) = 10**(-ztmp) |
---|
| 211 | |
---|
| 212 | ENDIF |
---|
| 213 | |
---|
| 214 | !--- KB (Boron dissociation constant) |
---|
| 215 | !------------------------------------- |
---|
| 216 | ! Kbor = [H+][B(OH)4-]/[B(OH)3] |
---|
| 217 | ! Dickson (1990), IN:Dickson and Goyet, 1994, Chapter 5, p. 14) |
---|
| 218 | ! pH-scale: 'total'. mol/kg-soln |
---|
| 219 | |
---|
| 220 | ztmp1 = ( -8966.90 - 2890.53*zs12 - 77.942 * zS + |
---|
| 221 | & 1.728*zS32 - 0.0996*zS2 ) |
---|
| 222 | ztmp2 = 148.0248 + 137.1942 * zs12 + 1.62142 * zS |
---|
| 223 | ztmp3 = (-24.4344 - 25.085*zs12 - 0.2474*zs)*zlogT |
---|
| 224 | |
---|
| 225 | ztmp = ztmp1 * z1t + ztmp2 + ztmp3 + 0.053105*zs12*zT |
---|
| 226 | |
---|
| 227 | Kb(layer) = EXP(ztmp) |
---|
| 228 | |
---|
| 229 | END DO ! layer |
---|
| 230 | |
---|
| 231 | IF ( ln_write_bio ) THEN |
---|
| 232 | |
---|
| 233 | WRITE(numout,*) |
---|
| 234 | WRITE(numout,*) ' Carbonate system constants ' |
---|
| 235 | WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~' |
---|
| 236 | WRITE(numout,*) |
---|
| 237 | WRITE(numout,*) ' Kw :',( Kw(layer), layer=layer_00, nlay_bio ) |
---|
| 238 | WRITE(numout,*) |
---|
| 239 | WRITE(numout,*) ' Kh :',( Kh(layer), layer=layer_00, nlay_bio ) |
---|
| 240 | WRITE(numout,*) |
---|
| 241 | WRITE(numout,*) ' K1 :',( K1(layer), layer=layer_00, nlay_bio ) |
---|
| 242 | WRITE(numout,*) |
---|
| 243 | WRITE(numout,*) ' K2 :',( K2(layer), layer=layer_00, nlay_bio ) |
---|
| 244 | WRITE(numout,*) |
---|
| 245 | WRITE(numout,*) ' Kb :',( Kb(layer), layer=layer_00, nlay_bio ) |
---|
| 246 | |
---|
| 247 | ENDIF |
---|
| 248 | |
---|
| 249 | !------------------------------------------------------------------------ |
---|
| 250 | ! 3) Convert brine concentrations units (mmol/m3 -> mol/kg) |
---|
| 251 | !------------------------------------------------------------------------ |
---|
| 252 | ! mmol/m3 to mol/kg |
---|
| 253 | DO layer = 1, nlay_bio |
---|
| 254 | |
---|
| 255 | zunit = 1000. * rhobr_bio(layer) |
---|
| 256 | |
---|
| 257 | c_i_bio(jn_dic,layer) = |
---|
| 258 | & c_i_bio(jn_dic,layer) / zunit |
---|
| 259 | |
---|
| 260 | c_i_bio(jn_alk,layer) = |
---|
| 261 | & c_i_bio(jn_alk,layer) / zunit |
---|
| 262 | |
---|
| 263 | END DO |
---|
| 264 | |
---|
| 265 | ! Alk |
---|
| 266 | |
---|
| 267 | !------------------------------------------------------------------------ |
---|
| 268 | ! 4) Carbonate system equilibration |
---|
| 269 | !------------------------------------------------------------------------ |
---|
| 270 | |
---|
| 271 | DO layer = 1, nlay_bio |
---|
| 272 | |
---|
| 273 | !--- polynomial coefficients |
---|
| 274 | !---------------------------- |
---|
| 275 | zbor = 1.*(416.*(sbr_bio(layer)/35.))* 1.e-6 ! Total boron (mol/kg), DOE94 |
---|
| 276 | |
---|
| 277 | ! Compute the coefficients of the 5th order polynom for H+ |
---|
| 278 | ! -> Check Orr et al GMD 2015 and Munhoven et al., GBC2014 for more efficient computations |
---|
| 279 | |
---|
| 280 | ! poly = [p5 p4 p3 p2 p1 p0] |
---|
| 281 | ! test = p5 h⁵ + p4 h⁴ + p3 h³ + p2 h² + p1 h¹ + p0 |
---|
| 282 | |
---|
| 283 | zpoly(1) = - 1. ! p5 |
---|
| 284 | |
---|
| 285 | zpoly(2) = - c_i_bio(jn_alk,layer) - ! p4 |
---|
| 286 | & Kb(layer) - K1(layer) |
---|
| 287 | |
---|
| 288 | zpoly(3) = c_i_bio(jn_dic,layer)*K1(layer) - ! p3 |
---|
| 289 | & c_i_bio(jn_alk,layer)*( Kb(layer) + K1(layer) ) + |
---|
| 290 | & Kb(layer)*zbor + Kw(layer) - |
---|
| 291 | & Kb(layer)*K1(layer) - K1(layer)*K2(layer) |
---|
| 292 | |
---|
| 293 | ztmp = c_i_bio(jn_alk,layer)*( Kb(layer)*K1(layer) + |
---|
| 294 | & 2.*K1(layer)*K2(layer)) - c_i_bio(jn_dic,layer)* |
---|
| 295 | & ( Kb(layer)*K1(layer) + K1(layer)*K2(layer) ) + |
---|
| 296 | & Kb(layer)*zbor*K1(layer) |
---|
| 297 | |
---|
| 298 | zpoly(4) = ztmp + Kw(layer)*Kb(layer) + ! p2 |
---|
| 299 | & Kw(layer)*K1(layer) - |
---|
| 300 | & Kb(layer)*K1(layer)*K2(layer) |
---|
| 301 | |
---|
| 302 | ztmp = ( 2.*c_i_bio(jn_dic,layer) - |
---|
| 303 | & c_i_bio(jn_alk,layer) + zbor)* |
---|
| 304 | & K1(layer)*K2(layer)*Kb(layer) |
---|
| 305 | |
---|
| 306 | zpoly(5) = ztmp + ( Kb(layer) + K2(layer) )* ! p1 |
---|
| 307 | & K1(layer)*Kw(layer) |
---|
| 308 | |
---|
| 309 | zpoly(6) = Kw(layer)*Kb(layer)*K1(layer)*K2(layer) ! p0 |
---|
| 310 | |
---|
| 311 | !--- find roots of the 5th degree monic polynomial |
---|
| 312 | !-------------------------------------------------- |
---|
| 313 | zb5(1,0:n_hp) = zpoly(:) |
---|
| 314 | zb5(2,:) = 0.d0 |
---|
| 315 | |
---|
| 316 | ! IF ( ln_write_bio ) THEN |
---|
| 317 | ! WRITE(numout,*) |
---|
| 318 | ! WRITE(numout,*) ' zb5 - 1 : ', zb5(1,0:n_hp) |
---|
| 319 | ! WRITE(numout,*) ' zb5 - 2 : ', zb5(2,0:n_hp) |
---|
| 320 | ! WRITE(numout,*) |
---|
| 321 | ! WRITE(numout,*) ' zpoly : ', zpoly |
---|
| 322 | ! WRITE(numout,*) |
---|
| 323 | ! ENDIF |
---|
| 324 | |
---|
| 325 | ! Setup companion matrix for polynomials |
---|
| 326 | DO i = 1, n_hp + 1 |
---|
| 327 | DO j = 1, n_hp + 1 |
---|
| 328 | IF ( j .EQ. n_hp+1 ) THEN |
---|
| 329 | zA(i,j) = -DCMPLX(zb5(1, n_hp+1-i),zb5(2,n_hp+1-i)) |
---|
| 330 | ELSE IF (J.EQ.I-1) THEN |
---|
| 331 | zA(i,j) = DCMPLX(1.d0,0.d0) |
---|
| 332 | ELSE |
---|
| 333 | zA(i,j) = DCMPLX(0.d0,0.d0) |
---|
| 334 | ENDIF |
---|
| 335 | END DO |
---|
| 336 | END DO |
---|
| 337 | |
---|
| 338 | ! IF ( ln_write_bio ) THEN |
---|
| 339 | ! WRITE(numout,*) |
---|
| 340 | ! WRITE(numout,*) ' zA : ', zA |
---|
| 341 | ! WRITE(numout,*) |
---|
| 342 | ! ENDIF |
---|
| 343 | |
---|
| 344 | ! Calculate eigenvalues of companion matrix (LAPACK) |
---|
| 345 | ! 'N' -> left eigen vectors are not computed |
---|
| 346 | ! 'N' -> right egien vectors are not computer |
---|
| 347 | ! n_hp+1 -> order of the matrix A |
---|
| 348 | ! A -> complex matrix, dimension (LDA, N) |
---|
| 349 | ! ->IN: complex NxN |
---|
| 350 | ! ->OUT: overwritten |
---|
| 351 | ! n_hp+1 -> leading dimension of A |
---|
| 352 | ! zeigs-> computed eigen values |
---|
| 353 | ! zvl -> dummy (unused here) left eigenvector |
---|
| 354 | ! n_hp + 1 -> dimension of eigen vector |
---|
| 355 | ! zvr -> dummy (unused here) left eigenvector |
---|
| 356 | ! n_hp + 1 -> dimension of right eigen vector |
---|
| 357 | ! zwrk, zrwrk -> workarray |
---|
| 358 | ! 3*n_hp+3 -> size of workarray |
---|
| 359 | ! zinfo -> =0 successful work |
---|
| 360 | CALL zgeev('N','N',n_hp+1,zA,n_hp+1,zeigs,zvl,n_hp+1, |
---|
| 361 | & zvr,n_hp+1,zwrk,3*n_hp+3,zrwrk,zinfo) |
---|
| 362 | |
---|
| 363 | zhp = MAXVAL( REAL ( zeigs ) ) |
---|
| 364 | |
---|
| 365 | ! Print eigenvalues of companion matrix (roots of the polynom) |
---|
| 366 | ! IF ( ln_write_bio ) THEN |
---|
| 367 | ! WRITE(numout,*) |
---|
| 368 | ! WRITE(numout,*) ' zinfo : ', zinfo |
---|
| 369 | ! WRITE(numout,*) |
---|
| 370 | ! WRITE(numout,*) ' zeigs :', ( zeigs(i), i = 1, n_hp ) |
---|
| 371 | ! WRITE(numout,*) |
---|
| 372 | ! WRITE(numout,*) ' zhp :', zhp |
---|
| 373 | ! WRITE(numout,*) |
---|
| 374 | ! WRITE(numout,*) ' pH : ', -LOG10( zhp ) |
---|
| 375 | ! WRITE(numout,*) |
---|
| 376 | ! WRITE(numout,*) |
---|
| 377 | ! ENDIF |
---|
| 378 | |
---|
| 379 | !--- Retrieve carbonate system diagnostics |
---|
| 380 | !-------------------------------------------------- |
---|
| 381 | |
---|
| 382 | zhp2 = zhp * zhp ! [H+]^2 |
---|
| 383 | |
---|
| 384 | c_i_bio(jn_co2, layer) = c_i_bio(jn_dic, layer) / ! CO2 |
---|
| 385 | & ( 1. + K1(layer) / zhp + |
---|
| 386 | & K1(layer)*K2(layer) / zhp2 ) |
---|
| 387 | |
---|
| 388 | CO2aq(layer) = c_i_bio(jn_co2,layer) !--- temporary as jn_co2 is bound to disappear |
---|
| 389 | |
---|
| 390 | CO32m(layer) = c_i_bio(jn_dic,layer) / ! CO32- |
---|
| 391 | & ( 1. + zhp / K2(layer) + |
---|
| 392 | & zhp2 / K1(layer) / K2(layer) ) |
---|
| 393 | |
---|
| 394 | HCO3m(layer) = c_i_bio(jn_dic,layer) / ! HCO3- |
---|
| 395 | & ( 1. + zhp / K1(layer) + |
---|
| 396 | & K2(layer) / zhp ) |
---|
| 397 | |
---|
| 398 | pH(layer) = -LOG10( zhp ) |
---|
| 399 | |
---|
| 400 | pCO2(layer) = CO2aq(layer) / Kh(layer) ! pCO2 = CO2aq / Kh |
---|
| 401 | |
---|
| 402 | END DO ! layer |
---|
| 403 | |
---|
| 404 | !------------------------------------------------------------------------ |
---|
| 405 | ! 5) Convert units (mol/kg to mmol/m3), retrieve bulk concentrations |
---|
| 406 | !------------------------------------------------------------------------ |
---|
| 407 | |
---|
| 408 | DO layer = 1, nlay_bio |
---|
| 409 | |
---|
| 410 | ! mol/kg -> mmol/m3 |
---|
| 411 | zunit = 1000. * rhobr_bio(layer) |
---|
| 412 | |
---|
| 413 | c_i_bio(jn_dic,layer) = c_i_bio(jn_dic,layer) * zunit !--- dont change DIC and TA, can remove |
---|
| 414 | c_i_bio(jn_alk,layer) = c_i_bio(jn_alk,layer) * zunit !--- dont change DIC and TA, can remove |
---|
| 415 | c_i_bio(jn_co2,layer) = c_i_bio(jn_co2,layer) * zunit |
---|
| 416 | CO2aq(layer) = CO2aq(layer) * zunit |
---|
| 417 | CO32m(layer) = CO32m(layer) * zunit |
---|
| 418 | HCO3m(layer) = HCO3m(layer) * zunit |
---|
| 419 | |
---|
| 420 | ! brine -> bulk |
---|
| 421 | cbu_i_bio(jn_co2,layer) = c_i_bio(jn_co2,layer)*e_i_bio(layer) |
---|
| 422 | CO2aq(layer) = CO2aq(layer)*e_i_bio(layer) |
---|
| 423 | CO32m(layer) = CO32m(layer)*e_i_bio(layer) |
---|
| 424 | HCO3m(layer) = HCO3m(layer)*e_i_bio(layer) |
---|
| 425 | |
---|
| 426 | ! atm-> muatm |
---|
| 427 | pCO2(layer) = pCO2(layer) * 1.0e6 |
---|
| 428 | |
---|
| 429 | END DO |
---|
| 430 | |
---|
| 431 | !------------------------------------------------------------------------ |
---|
| 432 | ! 6) Control Print |
---|
| 433 | !------------------------------------------------------------------------ |
---|
| 434 | |
---|
| 435 | IF ( ln_write_bio ) THEN |
---|
| 436 | |
---|
| 437 | WRITE(numout,*) |
---|
| 438 | WRITE(numout,*) ' ** End of ice_carb_chem ' |
---|
| 439 | WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' |
---|
| 440 | WRITE(numout,*) ' At time step : ', numit |
---|
| 441 | WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' |
---|
| 442 | WRITE(numout,*) |
---|
| 443 | |
---|
| 444 | |
---|
| 445 | DO jn = 1, ntra_bio |
---|
| 446 | |
---|
| 447 | IF ( ( jn .EQ. jn_dic ) .OR. ( jn .EQ. jn_alk ) .OR. |
---|
| 448 | & ( jn .EQ. jn_co2 ) ) THEN |
---|
| 449 | |
---|
| 450 | WRITE(numout,*) ' Tracer : ', biotr_i_nam(jn) |
---|
| 451 | WRITE(numout,*) ' c_i_bio : ', ( c_i_bio(jn,layer), |
---|
| 452 | & layer = 1, nlay_bio ) |
---|
| 453 | WRITE(numout,*) ' cbu_i_bio: ', ( cbu_i_bio(jn,layer), |
---|
| 454 | & layer = 1, nlay_bio ) |
---|
| 455 | ENDIF |
---|
| 456 | |
---|
| 457 | END DO |
---|
| 458 | |
---|
| 459 | WRITE(numout,*) ' CO2aq : ', |
---|
| 460 | & ( CO2aq(layer), layer = 1, nlay_bio ) |
---|
| 461 | WRITE(numout,*) ' CO32- : ', |
---|
| 462 | & ( CO32m(layer), layer = 1, nlay_bio ) |
---|
| 463 | WRITE(numout,*) ' HCO3- : ', |
---|
| 464 | & ( HCO3m(layer), layer = 1, nlay_bio ) |
---|
| 465 | WRITE(numout,*) ' pH : ', |
---|
| 466 | & ( pH(layer), layer = 1, nlay_bio ) |
---|
| 467 | WRITE(numout,*) ' pCO2 : ', |
---|
| 468 | & ( pCO2(layer), layer = 1, nlay_bio ) |
---|
| 469 | |
---|
| 470 | ENDIF |
---|
| 471 | ! |
---|
| 472 | !------------------------------------------------------------------------------! |
---|
| 473 | ! 7) End of the routine |
---|
| 474 | !------------------------------------------------------------------------------! |
---|
| 475 | ! |
---|
| 476 | WRITE(numout,*) |
---|
| 477 | WRITE(numout,*) ' End of ice_carb_chem ' |
---|
| 478 | WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' |
---|
| 479 | |
---|
| 480 | RETURN |
---|
| 481 | |
---|
| 482 | END |
---|