New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 15532 for NEMO/branches/2021/dev_r14318_RK3_stage1/src/TOP/PISCES/P4Z/p4zche.F90 – NEMO

Ignore:
Timestamp:
2021-11-24T12:47:32+01:00 (3 years ago)
Author:
techene
Message:

#2605 #2715 : version in dev (still buggy)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14318_RK3_stage1/src/TOP/PISCES/P4Z/p4zche.F90

    r14086 r15532  
    1212   !!                  !  2011-02  (J. Simeon, J.Orr ) update O2 solubility constants 
    1313   !!             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 
    1415   !!---------------------------------------------------------------------- 
    1516   !!   p4z_che      :  Sea water chemistry computed following OCMIP protocol 
     
    195196         !                             ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 
    196197         !                             !     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) 
    200213         chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 
    201214         chemc(ji,jj,3) = 57.7 - 0.118*ztkel 
     
    445458      REAL(wp)  ::  zca1, zba1 
    446459      REAL(wp)  ::  zd, zsqrtd, zhmin 
    447       REAL(wp)  ::  za2, za1, za0 
     460      REAL(wp)  ::  za2, za1, za0, zrhd 
    448461      REAL(wp)  ::  p_dictot, p_bortot, p_alkcb  
    449462      !!--------------------------------------------------------------------- 
     
    452465      ! 
    453466      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 
    456470      p_bortot = borat(ji,jj,jk) 
    457471      IF (p_alkcb <= 0.) THEN 
     
    502516   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_sup 
    503517   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 
    509528 
    510529   END SUBROUTINE anw_infsup 
     
    536555   REAL(wp)  ::  znumer_flu, zdnumer_flu, zdenom_flu, zalk_flu, zdalk_flu 
    537556   REAL(wp)  ::  zalk_wat, zdalk_wat 
    538    REAL(wp)  ::  zfact, p_alktot, zdic, zbot, zpt, zst, zft, zsit 
     557   REAL(wp)  ::  zrhd, p_alktot, zdic, zbot, zpt, zst, zft, zsit 
    539558   LOGICAL   ::  l_exitnow 
    540559   REAL(wp), PARAMETER :: pz_exp_threshold = 1.0 
     
    551570   DO_3D( 1, 1, 1, 1, 1, jpk ) 
    552571      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 
    554574         aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 
    555575         zh_ini = p_hini(ji,jj,jk) 
     
    580600   DO_3D( 1, 1, 1, 1, 1, jpk ) 
    581601      IF (rmask(ji,jj,jk) == 1.) THEN 
    582          zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    583          p_alktot = tr(ji,jj,jk,jptal,Kbb) / zfact 
    584          zdic  = tr(ji,jj,jk,jpdic,Kbb) / zfact 
     602         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 
    585605         zbot  = borat(ji,jj,jk) 
    586          zpt = tr(ji,jj,jk,jppo4,Kbb) / zfact * po4r 
    587          zsit = tr(ji,jj,jk,jpsil,Kbb) / zfact 
     606         zpt = tr(ji,jj,jk,jppo4,Kbb) * zrhd * po4r 
     607         zsit = tr(ji,jj,jk,jpsil,Kbb) * zrhd 
    588608         zst = sulfat (ji,jj,jk) 
    589609         zft = fluorid(ji,jj,jk) 
Note: See TracChangeset for help on using the changeset viewer.