- Timestamp:
- 2021-11-24T12:47:32+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14318_RK3_stage1/src/TOP/PISCES/P4Z/p4zche.F90
r14086 r15532 12 12 !! ! 2011-02 (J. Simeon, J.Orr ) update O2 solubility constants 13 13 !! 3.6 ! 2016-03 (O. Aumont) Change chemistry to MOCSY standards 14 !! 4.2 ! 2020 (J. ORR ) rhop is replaced by "in situ density" rhd 14 15 !!---------------------------------------------------------------------- 15 16 !! p4z_che : Sea water chemistry computed following OCMIP protocol … … 195 196 ! ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 196 197 ! ! AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 197 zcek1 = 9345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel & 198 & + 0.0047036e-4*ztkel**2) 199 chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000. ! mol/(L atm) 198 ! J. ORR: The previous code has been modified. It computed CO2 solubility in mol/(kg*atm), then converted that to mol/(L*atm). 199 ! But Weiss (1974) provides sets of coefficients for each of those 2 units. 200 ! Thus I have changed the code to use the coefficients for mol*L/atm. 201 ! Hence I've eliminated using the conversion (which used the variable rhop) 202 ! OLD - Coefficients for CO2 soulbility in mol/(kg*atm) (Weiss,1974, Table 1, column 2) 203 !zcek1 = 9345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel & 204 !& + 0.0047036e-4*ztkel**2) 205 ! NEW - Coefficients for CO2 soulbility in mol/(L*atm) (Weiss, 1974, Table 1, column 1) 206 zcek1 = 9050.69/ztkel - 58.0931 + 22.2940 * LOG(zt) + zsal*(0.027766 - 0.00025888*ztkel & 207 & + 0.0050578e-4*ztkel**2) 208 ! 209 ! OLD: chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000. ! mol/(L atm) 210 ! The units indicated in the above line are wrong. They are actually "mol/(L*uatm)" 211 ! NEW: 212 chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 ! mol/(L * uatm) 200 213 chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 201 214 chemc(ji,jj,3) = 57.7 - 0.118*ztkel … … 445 458 REAL(wp) :: zca1, zba1 446 459 REAL(wp) :: zd, zsqrtd, zhmin 447 REAL(wp) :: za2, za1, za0 460 REAL(wp) :: za2, za1, za0, zrhd 448 461 REAL(wp) :: p_dictot, p_bortot, p_alkcb 449 462 !!--------------------------------------------------------------------- … … 452 465 ! 453 466 DO_3D( 1, 1, 1, 1, 1, jpk ) 454 p_alkcb = tr(ji,jj,jk,jptal,Kbb) * 1000. / (rhop(ji,jj,jk) + rtrn) 455 p_dictot = tr(ji,jj,jk,jpdic,Kbb) * 1000. / (rhop(ji,jj,jk) + rtrn) 467 zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. ) 468 p_alkcb = tr(ji,jj,jk,jptal,Kbb) * zrhd 469 p_dictot = tr(ji,jj,jk,jpdic,Kbb) * zrhd 456 470 p_bortot = borat(ji,jj,jk) 457 471 IF (p_alkcb <= 0.) THEN … … 502 516 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_sup 503 517 INTEGER, INTENT(in) :: Kbb ! time level indices 504 505 p_alknw_inf(:,:,:) = -tr(:,:,:,jppo4,Kbb) * 1000. / (rhop(:,:,:) + rtrn) - sulfat(:,:,:) & 506 & - fluorid(:,:,:) 507 p_alknw_sup(:,:,:) = (2. * tr(:,:,:,jpdic,Kbb) + 2. * tr(:,:,:,jppo4,Kbb) + tr(:,:,:,jpsil,Kbb) ) & 508 & * 1000. / (rhop(:,:,:) + rtrn) + borat(:,:,:) 518 INTEGER :: ji, jj, jk 519 REAL(wp) :: zrhd 520 521 DO_3D( 1, 1, 1, 1, 1, jpk ) 522 zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. ) 523 p_alknw_inf(ji,jj,jk) = -tr(ji,jj,jk,jppo4,Kbb) * zrhd - sulfat(ji,jj,jk) & 524 & - fluorid(ji,jj,jk) 525 p_alknw_sup(ji,jj,jk) = (2. * tr(ji,jj,jk,jpdic,Kbb) + 2. * tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpsil,Kbb) ) & 526 & * zrhd + borat(ji,jj,jk) 527 END_3D 509 528 510 529 END SUBROUTINE anw_infsup … … 536 555 REAL(wp) :: znumer_flu, zdnumer_flu, zdenom_flu, zalk_flu, zdalk_flu 537 556 REAL(wp) :: zalk_wat, zdalk_wat 538 REAL(wp) :: z fact, p_alktot, zdic, zbot, zpt, zst, zft, zsit557 REAL(wp) :: zrhd, p_alktot, zdic, zbot, zpt, zst, zft, zsit 539 558 LOGICAL :: l_exitnow 540 559 REAL(wp), PARAMETER :: pz_exp_threshold = 1.0 … … 551 570 DO_3D( 1, 1, 1, 1, 1, jpk ) 552 571 IF (rmask(ji,jj,jk) == 1.) THEN 553 p_alktot = tr(ji,jj,jk,jptal,Kbb) * 1000. / (rhop(ji,jj,jk) + rtrn) 572 zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. ) 573 p_alktot = tr(ji,jj,jk,jptal,Kbb) * zrhd 554 574 aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 555 575 zh_ini = p_hini(ji,jj,jk) … … 580 600 DO_3D( 1, 1, 1, 1, 1, jpk ) 581 601 IF (rmask(ji,jj,jk) == 1.) THEN 582 z fact = rhop(ji,jj,jk) / 1000. + rtrn583 p_alktot = tr(ji,jj,jk,jptal,Kbb) / zfact584 zdic = tr(ji,jj,jk,jpdic,Kbb) / zfact602 zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. ) 603 p_alktot = tr(ji,jj,jk,jptal,Kbb) * zrhd 604 zdic = tr(ji,jj,jk,jpdic,Kbb) * zrhd 585 605 zbot = borat(ji,jj,jk) 586 zpt = tr(ji,jj,jk,jppo4,Kbb) / zfact* po4r587 zsit = tr(ji,jj,jk,jpsil,Kbb) / zfact606 zpt = tr(ji,jj,jk,jppo4,Kbb) * zrhd * po4r 607 zsit = tr(ji,jj,jk,jpsil,Kbb) * zrhd 588 608 zst = sulfat (ji,jj,jk) 589 609 zft = fluorid(ji,jj,jk)
Note: See TracChangeset
for help on using the changeset viewer.