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 7607 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90 – NEMO

Ignore:
Timestamp:
2017-01-25T16:37:31+01:00 (7 years ago)
Author:
cetlod
Message:

v3.6 stable : add missing features for CMIP6 exercise, see ticket #1834

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r6943 r7607  
    2323   USE sms_pisces      !  PISCES Source Minus Sink variables 
    2424   USE prtctl_trc      !  print control for debugging 
     25   USE p4zche          !  Chemical model 
    2526   USE iom             !  I/O manager 
    2627 
     
    6061      ! 
    6162      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    62       INTEGER  ::   ji, jj, jk, jn 
    63       REAL(wp) ::   zalk, zdic, zph, zah2 
    64       REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
     63      INTEGER  ::   ji, jj, jk 
     64      REAL(wp) ::   zdispot, zfact, zcalcon 
    6565      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    6666      CHARACTER (len=25) :: charout 
    67       REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zco3sat, zcaldiss    
     67      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zco3sat, zcaldiss, zhinit, zhi    
    6868      !!--------------------------------------------------------------------- 
    6969      ! 
    7070      IF( nn_timing == 1 )  CALL timing_start('p4z_lys') 
    7171      ! 
    72       CALL wrk_alloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     72      CALL wrk_alloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss, zhinit, zhi ) 
    7373      ! 
    7474      zco3    (:,:,:) = 0. 
    7575      zcaldiss(:,:,:) = 0. 
     76      zhinit(:,:,:)   = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 
    7677      !     ------------------------------------------- 
    7778      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS 
    7879      !     ------------------------------------------- 
    79        
    80       DO jn = 1, 5                               !  BEGIN OF ITERATION 
    81          ! 
    82 !CDIR NOVERRCHK 
    83          DO jk = 1, jpkm1 
    84 !CDIR NOVERRCHK 
    85             DO jj = 1, jpj 
    86 !CDIR NOVERRCHK 
    87                DO ji = 1, jpi 
    88                   zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    89                   zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    90                   zdic  = trb(ji,jj,jk,jpdic) / zfact 
    91                   zalka = trb(ji,jj,jk,jptal) / zfact 
    92                   ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    93                   zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph / ( aphscale(ji,jj,jk) + rtrn )  & 
    94                   &       + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
    95                   ! CALCULATE [H+] and [CO3--] 
    96                   zaldi = zdic - zalk 
    97                   zah2  = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 
    98                   zah2  = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 
    99                   ! 
    100                   zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 
    101                   hi(ji,jj,jk)   = zah2 * zfact 
    102                END DO 
     80 
     81      CALL p4z_che_solve_hi( zhinit, zhi ) 
     82 
     83      DO jk = 1, jpkm1 
     84         DO jj = 1, jpj 
     85            DO ji = 1, jpi 
     86               zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2   & 
     87               &                + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 
     88               hi(ji,jj,jk)   = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 
    10389            END DO 
    10490         END DO 
    105          ! 
    106       END DO  
     91      END DO 
    10792 
    10893      !     --------------------------------------------------------- 
     
    138123              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    139124              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
    140               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    141125              ! 
    142126              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    167151      ENDIF 
    168152      ! 
    169       CALL wrk_dealloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     153      CALL wrk_dealloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    170154      ! 
    171155      IF( nn_timing == 1 )  CALL timing_stop('p4z_lys') 
     
    186170      !! 
    187171      !!---------------------------------------------------------------------- 
    188       INTEGER  ::  ji, jj, jk 
    189172      INTEGER  ::  ios                 ! Local integer output status for namelist read 
    190       REAL(wp) ::  zcaralk, zbicarb, zco3 
    191       REAL(wp) ::  ztmas, ztmas1 
    192  
    193173      NAMELIST/nampiscal/ kdca, nca 
    194174      !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.