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 7162 for branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90 – NEMO

Ignore:
Timestamp:
2016-11-01T14:23:51+01:00 (7 years ago)
Author:
cetlod
Message:

new top interface : Add PISCES quota model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r7068 r7162  
    1111   !!                  !  2011-02  (J. Simeon, J. Orr)  Calcon salinity dependence 
    1212   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Improvment of calcite dissolution 
     13   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    1314   !!---------------------------------------------------------------------- 
    1415   !!   p4z_lys        :   Compute the CaCO3 dissolution  
     
    1819   USE trc             !  passive tracers common variables  
    1920   USE sms_pisces      !  PISCES Source Minus Sink variables 
     21   USE p4zche          !  Chemical model 
    2022   USE prtctl_trc      !  print control for debugging 
    2123   USE iom             !  I/O manager 
     
    5759      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    5860      INTEGER  ::   ji, jj, jk, jn 
    59       REAL(wp) ::   zalk, zdic, zph, zah2 
    60       REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
     61      REAL(wp) ::   zdispot, zfact, zcalcon 
    6162      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    6263      CHARACTER (len=25) :: charout 
    63       REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zco3sat, zcaldiss    
     64      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss, zhinit, zhi, zco3sat 
    6465      !!--------------------------------------------------------------------- 
    6566      ! 
    6667      IF( nn_timing == 1 )  CALL timing_start('p4z_lys') 
    6768      ! 
    68       CALL wrk_alloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     69      CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    6970      ! 
    7071      zco3    (:,:,:) = 0. 
    7172      zcaldiss(:,:,:) = 0. 
     73      zhinit(:,:,:)   = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 
    7274      !     ------------------------------------------- 
    7375      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS 
    7476      !     ------------------------------------------- 
    75        
    76       DO jn = 1, 5                               !  BEGIN OF ITERATION 
    77          ! 
    78          DO jk = 1, jpkm1 
    79             DO jj = 1, jpj 
    80                DO ji = 1, jpi 
    81                   zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    82                   zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    83                   zdic  = trb(ji,jj,jk,jpdic) / zfact 
    84                   zalka = trb(ji,jj,jk,jptal) / zfact 
    85                   ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    86                   zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph / ( aphscale(ji,jj,jk) + rtrn )  & 
    87                   &       + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
    88                   ! CALCULATE [H+] and [CO3--] 
    89                   zaldi = zdic - zalk 
    90                   zah2  = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 
    91                   zah2  = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 
    92                   ! 
    93                   zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 
    94                   hi(ji,jj,jk)   = zah2 * zfact 
    95                END DO 
     77 
     78      CALL solve_at_general(zhinit, zhi) 
     79 
     80      DO jk = 1, jpkm1 
     81         DO jj = 1, jpj 
     82            DO ji = 1, jpi 
     83               zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2   & 
     84               &                + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 
     85               hi(ji,jj,jk)   = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 
    9686            END DO 
    9787         END DO 
    98          ! 
    99       END DO  
     88      END DO 
    10089 
    10190      !     --------------------------------------------------------- 
     
    111100               ! DEVIATION OF [CO3--] FROM SATURATION VALUE 
    112101               ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 
    113                zcalcon  = calcon * ( tsn(ji,jj,jk,jp_sal) / 35._wp ) 
     102               zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp ) 
    114103               zfact    = rhop(ji,jj,jk) / 1000._wp 
    115104               zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn ) 
     
    128117              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    129118              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
    130               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    131119              ! 
    132120              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    151139      ENDIF 
    152140      ! 
    153       CALL wrk_dealloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     141      CALL wrk_dealloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    154142      ! 
    155143      IF( nn_timing == 1 )  CALL timing_stop('p4z_lys') 
     
    170158      !! 
    171159      !!---------------------------------------------------------------------- 
    172       INTEGER  ::  ji, jj, jk 
    173160      INTEGER  ::  ios                 ! Local integer output status for namelist read 
    174       REAL(wp) ::  zcaralk, zbicarb, zco3 
    175       REAL(wp) ::  ztmas, ztmas1 
    176161 
    177162      NAMELIST/nampiscal/ kdca, nca 
     
    199184      ! 
    200185   END SUBROUTINE p4z_lys_init 
    201  
    202186   !!====================================================================== 
    203187END MODULE p4zlys 
Note: See TracChangeset for help on using the changeset viewer.