File indexing completed on 2024-12-17 18:33:51 UTC
view on githubraw file Latest commit 895c6145 on 2022-11-25 16:31:23 UTC
8fbfd1f382 Oliv*0001 #include "DARWIN_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 SUBROUTINE DARWIN_CALC_PCO2(
0016 I donewt,inewtonmax,ibrackmax,
0017 I t,s,diclocal,pt,sit,ta,
0018 I k1local,k2local,
0019 I k1plocal,k2plocal,k3plocal,
0020 I kslocal,kblocal,kwlocal,
0021 I ksilocal,kflocal,
0022 I k0local, fugflocal,
0023 I fflocal,btlocal,stlocal,ftlocal,
0024 U pHlocal,pCO2surfloc,
0025 I i,j,k,bi,bj,myIter,myThid )
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 IMPLICIT NONE
0036 #include "SIZE.h"
0037 #include "DYNVARS.h"
0038 #include "EEPARAMS.h"
0039 #include "PARAMS.h"
0040 #include "GRID.h"
0041 #include "FFIELDS.h"
0042 #include "DARWIN_SIZE.h"
0043 #include "DARWIN_PARAMS.h"
0044 #include "DARWIN_TRAITS.h"
0045 #include "DARWIN_FIELDS.h"
0046
0047
0048
0049
0050
0051
0052
0053
786514ddc4 Oliv*0054
8fbfd1f382 Oliv*0055 INTEGER donewt
0056 INTEGER inewtonmax
0057 INTEGER ibrackmax
0058 _RL t, s, pt, sit, ta
0059 _RL pCO2surfloc, diclocal, pHlocal
0060 _RL fflocal, btlocal, stlocal, ftlocal
0061 _RL k1local, k2local
0062 _RL k1plocal, k2plocal, k3plocal
0063 _RL kslocal, kblocal, kwlocal, ksilocal, kflocal
0064 _RL k0local, fugflocal
0065 INTEGER i,j,k,bi,bj,myIter
0066 INTEGER myThid
0067
0068
0069 #ifdef DARWIN_ALLOW_CARBON
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092 _RL phhi
0093 _RL phlo
0094 _RL c
0095 _RL a
0096 _RL a2
0097 _RL da
0098 _RL b
0099 _RL b2
0100 _RL db
0101 _RL fn
0102 _RL df
0103 _RL deltax
0104 _RL x
0105 _RL x2
0106 _RL x3
0107 _RL xmid
0108 _RL ftest
0109 _RL htotal
0110 _RL htotal2
0111 _RL co2star
0112 _RL phguess
0113 _RL fco2
0114 INTEGER inewton
0115 INTEGER ibrack
0116 INTEGER hstep
0117 _RL fni(3)
0118 _RL xlo
0119 _RL xhi
0120 _RL xguess
0121 _RL k123p
0122 _RL k12p
0123 _RL k12
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137 pt=pt*m3perkg
0138 sit=sit*m3perkg
0139 ta=ta*m3perkg
0140 diclocal=diclocal*m3perkg
0141
0142
0143
0144 phguess = phlocal
0145
0146
0147 phhi = 10.0
0148 phlo = 5.0
0149
0150 xguess = 10.0**(-phguess)
0151 xlo = 10.0**(-phhi)
0152 xhi = 10.0**(-phlo)
0153 xmid = (xlo + xhi)*0.5
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 if( donewt .eq. 1)then
0165
0166
0167
0168 x = xguess
0169
0170
0171
0172 do inewton = 1, inewtonmax
0173
0174
0175 x2=x*x
0176 x3=x2*x
0177 k12 = k1local*k2local
0178 k12p = k1plocal*k2plocal
0179 k123p = k12p*k3plocal
0180 c = 1.0 + stlocal/kslocal
0181 a = x3 + k1plocal*x2 + k12p*x + k123p
0182 a2=a*a
0183 da = 3.0*x2 + 2.0*k1plocal*x + k12p
0184 b = x2 + k1local*x + k12
0185 b2=b*b
0186 db = 2.0*x + k1local
0187
0188
0189
0190
0191 fn = k1local*x*diclocal/b +
0192 & 2.0*diclocal*k12/b +
0193 & btlocal/(1.0 + x/kblocal) +
0194 & kwlocal/x +
0195 & pt*k12p*x/a +
0196 & 2.0*pt*k123p/a +
0197 & sit/(1.0 + x/ksilocal) -
0198 & x/c -
0199 & stlocal/(1.0 + kslocal/x/c) -
0200 & ftlocal/(1.0 + kflocal/x) -
0201 & pt*x3/a -
0202 & ta
0203
0204
0205
0206
0207
0208 df = ((k1local*diclocal*b) - k1local*x*diclocal*db)/b2 -
0209 & 2.0*diclocal*k12*db/b2 -
0210 & btlocal/kblocal/(1.0+x/kblocal)**2. -
0211 & kwlocal/x2 +
0212 & (pt*k12p*(a - x*da))/a2 -
0213 & 2.0*pt*k123p*da/a2 -
0214 & sit/ksilocal/(1.0+x/ksilocal)**2. +
0215 & 1.0/c +
0216 & stlocal*(1.0 + kslocal/x/c)**(-2.0)*(kslocal/c/x2) +
0217 & ftlocal*(1.0 + kflocal/x)**(-2.)*kflocal/x2 -
0218 & pt*x2*(3.0*a-x*da)/a2
0219
0220 deltax = - fn/df
0221
0222 x = x + deltax
0223
0224
0225
0226
0227
0228
0229 end do
0230
0231
0232 else
0233
0234
0235
0236
0237
0238 do ibrack = 1, ibrackmax
0239 do hstep = 1,3
0240 if(hstep .eq. 1)x = xhi
0241 if(hstep .eq. 2)x = xlo
0242 if(hstep .eq. 3)x = xmid
0243
0244
0245
0246 x2=x*x
0247 x3=x2*x
0248 k12 = k1local*k2local
0249 k12p = k1plocal*k2plocal
0250 k123p = k12p*k3plocal
0251 c = 1.0 + stlocal/kslocal
0252 a = x3 + k1plocal*x2 + k12p*x + k123p
0253 a2=a*a
0254 da = 3.0*x2 + 2.0*k1plocal*x + k12p
0255 b = x2 + k1local*x + k12
0256 b2=b*b
0257 db = 2.0*x + k1local
0258
0259 fn = k1local*x*diclocal/b +
0260 & 2.0*diclocal*k12/b +
0261 & btlocal/(1.0 + x/kblocal) +
0262 & kwlocal/x +
0263 & pt*k12p*x/a +
0264 & 2.0*pt*k123p/a +
0265 & sit/(1.0 + x/ksilocal) -
0266 & x/c -
0267 & stlocal/(1.0 + kslocal/x/c) -
0268 & ftlocal/(1.0 + kflocal/x) -
0269 & pt*x3/a -
0270 & ta
0271 fni(hstep) = fn
0272 end do
0273
0274 ftest = fni(1)/fni(3)
0275 if(ftest .gt. 0.0)then
0276 xhi = xmid
0277 else
0278 xlo = xmid
0279 end if
0280 xmid = (xlo + xhi)*0.5
0281
0282
0283
0284
0285
0286 end do
0287
0288 x = xmid
0289
0290
0291 end if
0292
0293
0294
0295
0296
0297 htotal = x
0298
0299
0300 htotal2=htotal*htotal
0301 co2star=diclocal*htotal2/(htotal2 + k1local*htotal
0302 & + k1local*k2local)
0303 phlocal=-log10(htotal)
0304
0305
0306
0307
0308
0309 fco2 = co2star / k0local
0310 pCO2surfloc = fco2/fugflocal
0311
0312
0313
0314
0315
0316
0317 pt=pt/m3perkg
0318 sit=sit/m3perkg
0319 ta=ta/m3perkg
0320 diclocal=diclocal/m3perkg
0321
0322 #endif
0323
0324 RETURN
0325 END
0326
0327
0328
0329
0330
0331
0332
0333 SUBROUTINE DARWIN_CALC_PCO2_APPROX(
0334 I t,s,diclocal,pt,sit,ta,
0335 I k1local,k2local,
0336 I k1plocal,k2plocal,k3plocal,
0337 I kslocal,kblocal,kwlocal,
0338 I ksilocal,kflocal,
0339 I k0local, fugflocal,
0340 I fflocal,btlocal,stlocal,ftlocal,
895c6145db Oliv*0341 U pHlocal,
0342 O pCO2surfloc,co3local,
8fbfd1f382 Oliv*0343 I i,j,k,bi,bj,myIter,myThid )
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359 IMPLICIT NONE
0360
0361
0362 #include "DARWIN_SIZE.h"
0363 #include "DARWIN_PARAMS.h"
0364 #include "DARWIN_TRAITS.h"
0365
0366
0367
0368
0369
0370
0371
0372
786514ddc4 Oliv*0373
8fbfd1f382 Oliv*0374 _RL t, s, pt, sit, ta
0375 _RL pCO2surfloc, diclocal, pHlocal
0376 _RL fflocal, btlocal, stlocal, ftlocal
0377 _RL k1local, k2local
0378 _RL k1plocal, k2plocal, k3plocal
0379 _RL kslocal, kblocal, kwlocal, ksilocal, kflocal
0380 _RL k0local, fugflocal
0381 _RL co3local
0382 INTEGER i,j,k,bi,bj,myIter
0383 INTEGER myThid
0384
0385
0386 #ifdef DARWIN_ALLOW_CARBON
0387
0388
0389 _RL phguess
0390 _RL cag
0391 _RL bohg
0392 _RL hguess
0393 _RL stuff
0394 _RL gamm
0395 _RL hnew
0396 _RL co2s
0397 _RL h3po4g, h2po4g, hpo4g, po4g
0398 _RL siooh3g
0399 _RL fco2
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409 pt=pt*m3perkg
0410 sit=sit*m3perkg
0411 ta=ta*m3perkg
0412 diclocal=diclocal*m3perkg
0413
0414
0415
0416 phguess = phlocal
0417
0418
0419
0420 hguess = 10.0**(-phguess)
0421
0422 bohg = btlocal*kblocal/(hguess+kblocal)
0423
0424
0425
0426 stuff = hguess*hguess*hguess
0427 & + (k1plocal*hguess*hguess)
0428 & + (k1plocal*k2plocal*hguess)
0429 & + (k1plocal*k2plocal*k3plocal)
0430 h3po4g = (pt*hguess*hguess*hguess) / stuff
0431 h2po4g = (pt*k1plocal*hguess*hguess) / stuff
0432 hpo4g = (pt*k1plocal*k2plocal*hguess) / stuff
0433 po4g = (pt*k1plocal*k2plocal*k3plocal) / stuff
0434
0435
0436
0437 siooh3g = sit*ksilocal / (ksilocal + hguess)
0438
0439
0440 cag = ta - bohg - (kwlocal/hguess) + hguess
0441 & - hpo4g - 2.0 _d 0*po4g + h3po4g
0442 & - siooh3g
0443
0444
0445
0446 gamm = diclocal/cag
0447 stuff = (1.0 _d 0-gamm)*(1.0 _d 0-gamm)*k1local*k1local
0448 & - 4.0 _d 0*k1local*k2local*(1.0 _d 0-2.0 _d 0*gamm)
0449 hnew = 0.5 _d 0*( (gamm-1.0 _d 0)*k1local + sqrt(stuff) )
0450
0451 co2s = diclocal/
0452 & (1.0 _d 0 + (k1local/hnew) + (k1local*k2local/(hnew*hnew)))
0453
0454 phlocal = -log10(MAX(hnew, 1 _d -14))
0455
0456
0457
0458
0459 co3local = k1local*k2local*diclocal /
0460 & (hnew*hnew + k1local*hnew + k1local*k2local)
0461
0462
0463
0464 fco2 = co2s/k0local
0465 pco2surfloc = fco2/fugflocal
0466
0467
0468
0469 pt=pt/m3perkg
0470 sit=sit/m3perkg
0471 ta=ta/m3perkg
0472 diclocal=diclocal/m3perkg
0473
0474 #endif
0475
0476 RETURN
0477 END
0478
0479
0480
0481
0482
0483
0484 SUBROUTINE DARWIN_CARBON_COEFFS(
0485 I ttemp,stemp,
0486 I bi,bj,iMin,iMax,jMin,jMax,
0487 I kLevel, myThid)
0488
0489
0490
0491
0492
0493
0494
0495
c480d8bff0 Oliv*0496
0497
8fbfd1f382 Oliv*0498
0499
0500
0501
0502
0503
0504
0505
786514ddc4 Oliv*0506
8fbfd1f382 Oliv*0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525 IMPLICIT NONE
0526
0527 #include "SIZE.h"
c480d8bff0 Oliv*0528 #include "EEPARAMS.h"
8fbfd1f382 Oliv*0529 #include "GRID.h"
0530 #include "DARWIN_SIZE.h"
0531 #include "DARWIN_FIELDS.h"
0532
0533
0534
0535
0536
0537 _RL ttemp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0538 _RL stemp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0539 INTEGER bi,bj,iMin,iMax,jMin,jMax
0540 INTEGER kLevel
0541 INTEGER myThid
0542
0543
0544 #ifdef DARWIN_ALLOW_CARBON
0545
0546
0547 _RL t
0548 _RL s
0549 _RL tk
0550 _RL tk100
0551 _RL tk1002
0552 _RL dlogtk
0553 _RL sqrtis
0554 _RL sqrts
0555 _RL s15
0556 _RL scl
0557 _RL s2
0558 _RL invtk
0559 _RL is
0560 _RL is2
be29c31c6e Oliv*0561 _RL pSurf
8fbfd1f382 Oliv*0562
be29c31c6e Oliv*0563 _RL pAppl
8fbfd1f382 Oliv*0564
0565 _RL Ksp_T_Calc
0566 _RL xvalue
0567 _RL zdum
0568 _RL tmpa1
0569 _RL tmpa2
0570 _RL tmpa3
0571 _RL logKspc
0572 _RL dv
0573 _RL dk
0574 _RL pfactor
0575 _RL bigR
0576
0577 _RL P1atm
0578 _RL Rgas
0579 _RL RT
0580 _RL delta
0581 _RL B1
0582 _RL B
f50e50d718 Oliv*0583 #ifdef DARWIN_TOTALPHSCALE
0584
0585 _RL total2free_surf
0586 _RL free2sw_surf
0587 _RL total2sw_surf
0588 _RL total2free
0589 _RL free2total
0590 _RL free2sw
0591 _RL sw2free
0592 _RL total2sw
0593 _RL sw2total
0594 #endif
8fbfd1f382 Oliv*0595 INTEGER i
0596 INTEGER j
0597 INTEGER k
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
be29c31c6e Oliv*0615
0616
0617 IF (kLevel .EQ. 1) THEN
0618
0619
0620 pSurf = 1.01325 _d 0
0621 pAppl = 0 _d 0
0622 zdum = 0 _d 0
0623 ELSE
0624 pSurf = 1 _d 0
0625
0626 pAppl = -0.1 _d 0*rC(kLevel)
0627 zdum = -rC(kLevel)/10 _d 0
0628 ENDIF
8fbfd1f382 Oliv*0629
0630 do i=imin,imax
0631 do j=jmin,jmax
c480d8bff0 Oliv*0632 IF ( maskC(i,j,kLevel,bi,bj).EQ.oneRS ) THEN
8fbfd1f382 Oliv*0633 t = ttemp(i,j)
0634 s = stemp(i,j)
c480d8bff0 Oliv*0635
0636
8fbfd1f382 Oliv*0637 tk = 273.15 _d 0 + t
0638 tk100 = tk/100. _d 0
0639 tk1002=tk100*tk100
0640 invtk=1.0 _d 0/tk
0641 dlogtk=log(tk)
c480d8bff0 Oliv*0642
8fbfd1f382 Oliv*0643 is=19.924 _d 0*s/(1000. _d 0-1.005 _d 0*s)
0644 is2=is*is
0645 sqrtis=sqrt(is)
c480d8bff0 Oliv*0646
8fbfd1f382 Oliv*0647 s2=s*s
0648 sqrts=sqrt(s)
0649 s15=s**1.5 _d 0
0650 scl=s/1.80655 _d 0
f50e50d718 Oliv*0651
0652 bigR = 83.14472 _d 0
8fbfd1f382 Oliv*0653
0654
0655
0656
0657
be29c31c6e Oliv*0658 P1atm = pSurf + pAppl
8fbfd1f382 Oliv*0659 Rgas = 83.1451 _d 0
0660 RT = Rgas*tk
0661 delta = (57.7 _d 0 - 0.118 _d 0*tk)
0662 B1 = -1636.75 _d 0 + 12.0408 _d 0*tk - 0.0327957 _d 0*tk*tk
0663 B = B1 + 3.16528 _d 0*tk*tk*tk*(0.00001 _d 0)
0664 fugf(i,j,bi,bj) = exp( (B+2. _d 0*delta) * P1atm / RT)
0665
0666
0667
0668 ff(i,j,bi,bj) = exp(-162.8301 _d 0 + 218.2968 _d 0/tk100 +
0669 & 90.9241 _d 0*log(tk100) - 1.47696 _d 0*tk1002 +
0670 & s * (.025695 _d 0 - .025225 _d 0*tk100 +
0671 & 0.0049867 _d 0*tk1002))
0672
0673
f50e50d718 Oliv*0674
8fbfd1f382 Oliv*0675 ak0(i,j,bi,bj) = exp(93.4517 _d 0/tk100 - 60.2409 _d 0 +
0676 & 23.3585 _d 0 * log(tk100) +
0677 & s * (0.023517 _d 0 - 0.023656 _d 0*tk100 +
0678 & 0.0047036 _d 0*tk1002))
0679
0680
0681
f50e50d718 Oliv*0682
0683
c480d8bff0 Oliv*0684 ak1(i,j,bi,bj)=10**(-1 _d 0*(3670.7 _d 0*invtk -
8fbfd1f382 Oliv*0685 & 62.008 _d 0 + 9.7944 _d 0*dlogtk -
0686 & 0.0118 _d 0 * s + 0.000116 _d 0*s2))
c480d8bff0 Oliv*0687 ak2(i,j,bi,bj)=10**(-1 _d 0*(1394.7 _d 0*invtk + 4.777 _d 0 -
8fbfd1f382 Oliv*0688 & 0.0184 _d 0*s + 0.000118 _d 0*s2))
0689
0690
0691
0692
0693 if (kLevel.gt.1) then
be29c31c6e Oliv*0694
8fbfd1f382 Oliv*0695 ak1(i,j,bi,bj) = ak1(i,j,bi,bj)*
c480d8bff0 Oliv*0696 & exp( (24.2 _d 0-0.085 _d 0*t)
be29c31c6e Oliv*0697 & *pAppl/(83.143 _d 0*tk) )
8fbfd1f382 Oliv*0698
0699
be29c31c6e Oliv*0700
8fbfd1f382 Oliv*0701
0702
0703 ak2(i,j,bi,bj) = ak2(i,j,bi,bj)*
c480d8bff0 Oliv*0704 & exp( (16.4 _d 0-0.040 _d 0*t)
be29c31c6e Oliv*0705 & *pAppl/(83.143 _d 0*tk) )
8fbfd1f382 Oliv*0706 endif
0707
0708
0709
f50e50d718 Oliv*0710
8fbfd1f382 Oliv*0711 akb(i,j,bi,bj)=exp((-8966.90 _d 0- 2890.53 _d 0*sqrts -
0712 & 77.942 _d 0*s + 1.728 _d 0*s15 - 0.0996 _d 0*s2)*invtk +
0713 & (148.0248 _d 0 + 137.1942 _d 0*sqrts + 1.62142 _d 0*s) +
0714 & (-24.4344 _d 0 - 25.085 _d 0*sqrts - 0.2474 _d 0*s) *
0715 & dlogtk + 0.053105 _d 0*sqrts*tk)
0716 if (kLevel.gt.1) then
f50e50d718 Oliv*0717 #ifdef DARWIN_TOTALPHSCALE
0718
0719
0720
0721
0722
0723
0724
0725
0726
be29c31c6e Oliv*0727
0728
f50e50d718 Oliv*0729
0730 #else
8fbfd1f382 Oliv*0731
0732
0733
0734
c480d8bff0 Oliv*0735 bigR = 83.145 _d 0
0736 dv = -29.48 _d 0 + 0.1622 _d 0*t + 2.608 _d -3*t*t
0737 dk = -2.84 _d -3
be29c31c6e Oliv*0738 pfactor = - (dv/(bigR*tk))*pAppl
0739 & + (0.5 _d 0*dk/(bigR*tk))*pAppl*pAppl
8fbfd1f382 Oliv*0740 akb(i,j,bi,bj) = akb(i,j,bi,bj)*exp(pfactor)
f50e50d718 Oliv*0741 #endif
8fbfd1f382 Oliv*0742 endif
0743
0744
0745
f50e50d718 Oliv*0746
0747
0748
8fbfd1f382 Oliv*0749 ak1p(i,j,bi,bj) = exp(-4576.752 _d 0*invtk + 115.525 _d 0 -
0750 & 18.453 _d 0*dlogtk +
0751 & (-106.736 _d 0*invtk + 0.69171 _d 0)*sqrts +
0752 & (-0.65643 _d 0*invtk - 0.01844 _d 0)*s)
0753
0754
f50e50d718 Oliv*0755
0756
0757
0758
8fbfd1f382 Oliv*0759 ak2p(i,j,bi,bj) = exp(-8814.715 _d 0*invtk + 172.0883 _d 0 -
0760 & 27.927 _d 0*dlogtk +
0761 & (-160.340 _d 0*invtk + 1.3566 _d 0) * sqrts +
0762 & (0.37335 _d 0*invtk - 0.05778 _d 0) * s)
0763
0764
0765
f50e50d718 Oliv*0766
0767
0768
8fbfd1f382 Oliv*0769 ak3p(i,j,bi,bj) = exp(-3070.75 _d 0*invtk - 18.141 _d 0 +
0770 & (17.27039 _d 0*invtk + 2.81197 _d 0) *
0771 & sqrts + (-44.99486 _d 0*invtk - 0.09984 _d 0) * s)
0772
0773
0774
f50e50d718 Oliv*0775
0776
0777
0778
8fbfd1f382 Oliv*0779 aksi(i,j,bi,bj) = exp(-8904.2 _d 0*invtk + 117.385 _d 0 -
0780 & 19.334 _d 0*dlogtk +
0781 & (-458.79 _d 0*invtk + 3.5913 _d 0) * sqrtis +
0782 & (188.74 _d 0*invtk - 1.5998 _d 0) * is +
0783 & (-12.1652 _d 0*invtk + 0.07871 _d 0) * is2 +
0784 & log(1.0 _d 0-0.001005 _d 0*s))
0785
0786
0787
f50e50d718 Oliv*0788
0789
0790
8fbfd1f382 Oliv*0791 akw(i,j,bi,bj) = exp(-13847.26 _d 0*invtk + 148.9652 _d 0 -
0792 & 23.6521 _d 0*dlogtk +
0793 & (118.67 _d 0*invtk - 5.977 _d 0 + 1.0495 _d 0 * dlogtk)
0794 & * sqrts - 0.01615 _d 0 * s)
0795
0796
0797
f50e50d718 Oliv*0798
0799
8fbfd1f382 Oliv*0800 aks(i,j,bi,bj)=exp(-4276.1 _d 0*invtk + 141.328 _d 0 -
0801 & 23.093 _d 0*dlogtk +
c480d8bff0 Oliv*0802 & (-13856 _d 0*invtk + 324.57 _d 0 - 47.986 _d 0*dlogtk)*sqrtis+
0803 & (35474 _d 0*invtk - 771.54 _d 0 + 114.723 _d 0*dlogtk)*is -
0804 & 2698 _d 0*invtk*is**1.5 _d 0 + 1776 _d 0*invtk*is2 +
8fbfd1f382 Oliv*0805 & log(1.0 _d 0 - 0.001005 _d 0*s))
0806
0807
f50e50d718 Oliv*0808
0809
8fbfd1f382 Oliv*0810 akf(i,j,bi,bj)=exp(1590.2 _d 0*invtk - 12.641 _d 0 +
0811 & 1.525 _d 0*sqrtis + log(1.0 _d 0 - 0.001005 _d 0*s) +
0812 & log(1.0 _d 0 + (0.1400 _d 0/96.062 _d 0)*(scl)/aks(i,j,bi,bj)))
0813
0814
0815
0816 bt(i,j,bi,bj) = 0.000232 _d 0 * scl/10.811 _d 0
0817
0818 st(i,j,bi,bj) = 0.14 _d 0 * scl/96.062 _d 0
0819
0820 ft(i,j,bi,bj) = 0.000067 _d 0 * scl/18.9984 _d 0
0821
f50e50d718 Oliv*0822
0823 #ifdef DARWIN_TOTALPHSCALE
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833 total2free_surf = 1. _d 0/
0834 & (1. _d 0 + st(i,j,bi,bj)/aks(i,j,bi,bj))
0835
0836 free2sw_surf = 1. _d 0
0837 & + st(i,j,bi,bj)/ aks(i,j,bi,bj)
0838 & + ft(i,j,bi,bj)/(akf(i,j,bi,bj)*total2free_surf)
0839
0840 total2sw_surf = total2free_surf * free2sw_surf
0841
0842
0843 IF (kLevel.GT.1) THEN
0844
0845 dv=-18.03 _d 0 + 0.0466 _d 0*t + 0.316 _d -3 *t*t
0846 dk=-4.53 _d -3 + 0.09 _d -3 *t
be29c31c6e Oliv*0847 pfactor = -(dv/(bigR*tk))*pAppl
0848 & +(0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0849 aks(i,j,bi,bj) = aks(i,j,bi,bj)*exp(pfactor)
0850
0851 total2free = 1. _d 0/
0852 & (1. _d 0 + st(i,j,bi,bj)/aks(i,j,bi,bj))
0853
0854
0855 free2sw = 1. _d 0
0856 & + st(i,j,bi,bj)/ aks(i,j,bi,bj)
0857 ENDIF
0858
0859 free2total = (1. _d 0 + st(i,j,bi,bj)/aks(i,j,bi,bj))
0860
0861 aks(i,j,bi,bj) = aks(i,j,bi,bj)*free2total
0862
0863
0864 IF (kLevel.GT.1) THEN
0865
0866 akf(i,j,bi,bj) = akf(i,j,bi,bj) * total2free_surf
0867 dv = -9.78 _d 0 -0.0090 _d 0 *t -0.942 _d -3 *t*t
0868 dk = -3.91 _d -3 + 0.054 _d -3 *t
be29c31c6e Oliv*0869 pfactor = -(dv/(bigR*tk))*pAppl
0870 & +(0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0871 akf(i,j,bi,bj) = akf(i,j,bi,bj) * exp(pfactor)
0872 akf(i,j,bi,bj) = akf(i,j,bi,bj)*free2total
0873
0874
0875 free2sw = free2sw
0876 & + ft(i,j,bi,bj)/(akf(i,j,bi,bj)*total2free)
0877
0878 sw2free = 1. _d 0 / free2sw
0879
0880 total2sw = total2free * free2sw
0881 ELSE
0882 sw2free = 1. _d 0 / free2sw_surf
0883
0884 total2sw = total2sw_surf
0885 ENDIF
0886
0887 sw2total = 1. _d 0 / total2sw
0888
0889
0890
0891 ak1(i,j,bi,bj) = ak1(i,j,bi,bj)*sw2total
0892 ak2(i,j,bi,bj) = ak2(i,j,bi,bj)*sw2total
0893
0894 IF (kLevel.GT.1) THEN
0895
0896
0897 dv = -29.48 _d 0 + 0.1622 _d 0*t + 2.608 _d -3*t*t
0898 dk = -2.84 _d -3
be29c31c6e Oliv*0899 pfactor = - (dv/(bigR*tk))*pAppl
0900 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0901 akb(i,j,bi,bj) = total2sw_surf*akb(i,j,bi,bj)*exp(pfactor)
0902 akb(i,j,bi,bj) = akb(i,j,bi,bj)*sw2total
0903
0904
0905
0906 dv = -14.51 _d 0 + 0.1211 _d 0*t -0.321 _d -3*t*t
0907 dk = -2.67 _d -3 + 0.0427 _d -3*t
be29c31c6e Oliv*0908 pfactor = - (dv/(bigR*tk))*pAppl
0909 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0910 ak1p(i,j,bi,bj) = total2sw_surf*ak1p(i,j,bi,bj)*exp(pfactor)
0911 ak1p(i,j,bi,bj) = ak1p(i,j,bi,bj)*sw2total
0912
0913
0914
0915 dv = -23.12 _d 0 + 0.1758 _d 0*t -2.647 _d -3*t*t
0916 dk = -5.15 _d -3 + 0.09 _d -3*t
be29c31c6e Oliv*0917 pfactor = - (dv/(bigR*tk))*pAppl
0918 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0919 ak2p(i,j,bi,bj) = total2sw_surf*ak2p(i,j,bi,bj)*exp(pfactor)
0920 ak2p(i,j,bi,bj) = ak2p(i,j,bi,bj)*sw2total
0921
0922
0923
0924 dv = -26.57 _d 0 + 0.2020 _d 0*t -3.042 _d -3*t*t
0925 dk = -4.08 _d -3 + 0.0714 _d -3*t
be29c31c6e Oliv*0926 pfactor = - (dv/(bigR*tk))*pAppl
0927 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0928 ak3p(i,j,bi,bj) = total2sw_surf*ak3p(i,j,bi,bj)*exp(pfactor)
0929 ak3p(i,j,bi,bj) = ak3p(i,j,bi,bj)*sw2total
0930
0931
0932
0933 dv = -20.02 _d 0 + 0.1119 _d 0*t -1.409 _d -3*t*t
0934 dk = -5.13 _d -3 + 0.0794 _d -3 *t
be29c31c6e Oliv*0935 pfactor = - (dv/(bigR*tk))*pAppl
0936 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0937 akw(i,j,bi,bj) = total2sw_surf*akw(i,j,bi,bj)*exp(pfactor)
0938 akw(i,j,bi,bj) = akw(i,j,bi,bj)*sw2total
0939
0940
0941
0942
0943 dv = -29.48 _d 0 + 0.1622 _d 0*t + 2.608 _d -3*t*t
0944 dk = -2.84 _d -3
be29c31c6e Oliv*0945 pfactor = - (dv/(bigR*tk))*pAppl
0946 & + (0.5*dk/(bigR*tk))*pAppl*pAppl
f50e50d718 Oliv*0947 aksi(i,j,bi,bj) = total2sw_surf*aksi(i,j,bi,bj)*exp(pfactor)
0948 aksi(i,j,bi,bj) = aksi(i,j,bi,bj)*sw2total
0949 ENDIF
0950 #endif
0951
0952
0953
8fbfd1f382 Oliv*0954
0955
0956
0957
0958
0959
0960
0961
be29c31c6e Oliv*0962
8fbfd1f382 Oliv*0963
0964
0965
0966
c480d8bff0 Oliv*0967 tmpa1 = - 171.9065 _d 0 - (0.077993 _d 0*tk)
0968 & + (2839.319 _d 0/tk) + (71.595 _d 0*log10(tk))
0969 tmpa2 = +(-0.77712 _d 0 + (0.0028426 _d 0*tk)
0970 & + (178.34 _d 0/tk) )*sqrts
0971 tmpa3 = -(0.07711 _d 0*s) + (0.0041249 _d 0*s15)
0972 logKspc = tmpa1 + tmpa2 + tmpa3
0973 Ksp_T_Calc = 10.0 _d 0**logKspc
8fbfd1f382 Oliv*0974
0975
be29c31c6e Oliv*0976
8fbfd1f382 Oliv*0977
0978
0979
0980
0981
0982
0983
be29c31c6e Oliv*0984
0985
8fbfd1f382 Oliv*0986
0987
0988
0989
c480d8bff0 Oliv*0990 xvalue = ( (48.8 _d 0 - 0.53 _d 0*t)*zdum
0991 & + (-0.00588 _d 0 + 0.0001845 _d 0*t)*zdum*zdum)
0992 & / (188.93 _d 0*(t + 273.15 _d 0))
8fbfd1f382 Oliv*0993
0994 Ksp_TP_Calc(i,j,bi,bj) = Ksp_T_Calc*10**(xvalue)
0995
0996
c480d8bff0 Oliv*0997 ELSE
8fbfd1f382 Oliv*0998
0999 fugf(i,j,bi,bj)=0. _d 0
1000 ff(i,j,bi,bj)=0. _d 0
1001 ak0(i,j,bi,bj)= 0. _d 0
1002 ak1(i,j,bi,bj)= 0. _d 0
1003 ak2(i,j,bi,bj)= 0. _d 0
1004 akb(i,j,bi,bj)= 0. _d 0
1005 ak1p(i,j,bi,bj) = 0. _d 0
1006 ak2p(i,j,bi,bj) = 0. _d 0
1007 ak3p(i,j,bi,bj) = 0. _d 0
1008 aksi(i,j,bi,bj) = 0. _d 0
1009 akw(i,j,bi,bj) = 0. _d 0
1010 aks(i,j,bi,bj)= 0. _d 0
1011 akf(i,j,bi,bj)= 0. _d 0
1012 bt(i,j,bi,bj) = 0. _d 0
1013 st(i,j,bi,bj) = 0. _d 0
1014 ft(i,j,bi,bj) = 0. _d 0
1015 Ksp_TP_Calc(i,j,bi,bj) = 0. _d 0
c480d8bff0 Oliv*1016 ENDIF
8fbfd1f382 Oliv*1017 end do
1018 end do
1019
1020 #endif
1021
1022 RETURN
1023 END