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 15297 for NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedinorg.F90 – NEMO

Ignore:
Timestamp:
2021-09-28T11:20:56+02:00 (3 years ago)
Author:
aumont
Message:

major update of the sediment module

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/SED/sedinorg.F90

    r15127 r15297  
    77   !! * Modules used 
    88   USE sed     ! sediment global variable 
     9   USE sed_oce 
    910   USE sedini 
     11   USE sedmat 
    1012   USE lib_mpp         ! distribued memory computing library 
    1113   USE lib_fortran 
     
    4547      ! --- local variables 
    4648      INTEGER   ::  ji,jk          ! dummy looop indices 
    47       REAL(wp)  ::  zsieq 
    48       REAL(wp)  ::  zsolid1, zreasat 
     49      REAL(wp), DIMENSION(jpoce) ::  zsieq, reac_silf 
     50      REAL(wp)  ::  zsolid1, zreasat, zco3sat 
    4951      REAL(wp)  ::  zsatur, zsatur2, znusil, zsolcpcl, zsolcpsi, zexcess 
     52      REAL(wp), DIMENSION(jpoce,jpksed) :: zundsat, zrearat, psms 
    5053      !! 
    5154      !!---------------------------------------------------------------------- 
     
    7174         END DO 
    7275         zsolcpsi = MAX( zsolcpsi, rtrn ) 
    73          zsieq = sieqs(ji) * MAX(0.25, 1.0 - (0.045 * zsolcpcl / zsolcpsi )**0.58 ) 
     76         zsieq(ji) = sieqs(ji) * MAX(0.2, 1.0 - (0.045 * zsolcpcl / zsolcpsi )**0.58 ) 
     77         reac_silf(ji) = reac_sil * ( 0.05 + 0.055 * ( 1.64 * ( zsolcpcl / zsolcpsi + 0.01 ) )**(-0.75) ) / 1.25  
     78      END DO 
    7479 
    75          !---------------------------------------------------------- 
    76          ! 5.  Beginning of  Pore Water diffusion and solid reaction 
    77          !--------------------------------------------------------- 
    7880       
    79          !----------------------------------------------------------------------------- 
    80          ! For jk=2,jpksed, and for couple  
    81          !  1 : jwsil/jsopal  ( SI/Opal ) 
    82          !  2 : jsclay/jsclay ( clay/clay )  
    83          !  3 : jwoxy/jspoc   ( O2/POC ) 
    84          !  reaction rate is a function of solid=concentration in solid reactif in [mol/l]  
    85          !  and undersaturation in [mol/l]. 
    86          !  Solid weight fractions should be in ie [mol/l]) 
    87          !  second member and solution are in zundsat variable 
    88          !------------------------------------------------------------------------- 
     81      DO ji = 1, jpoce 
    8982         DO jk = 2, jpksed 
    9083            zsolid1 = volc(ji,jk,jsopal) * solcp(ji,jk,jsopal) 
    91             zsatur = MAX(0., ( zsieq - pwcp(ji,jk,jwsil) ) / zsieq ) 
     84            zsatur = MAX(0., ( zsieq(ji) - pwcp(ji,jk,jwsil) ) / zsieq(ji) ) 
    9285            zsatur2 = (1.0 + temp(ji) / 400.0 )**37 
    9386            znusil = ( 0.225 * ( 1.0 + temp(ji) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 ) 
    94             solcp(ji,jk,jsopal) = solcp(ji,jk,jsopal) - reac_sil * znusil * dtsed * solcp(ji,jk,jsopal) 
    95             pwcp(ji,jk,jwsil) = pwcp(ji,jk,jwsil) + reac_sil * znusil * dtsed * zsolid1 
     87            solcp(ji,jk,jsopal) = solcp(ji,jk,jsopal) - reac_silf(ji) * znusil * dtsed * solcp(ji,jk,jsopal) 
     88            pwcp(ji,jk,jwsil) = pwcp(ji,jk,jwsil) + reac_silf(ji) * znusil * dtsed * zsolid1 
    9689         END DO 
    9790      END DO 
     
    10497      ! *densSW(l)**2 converts aksps [mol2/kg sol2] into [mol2/l2] to get [undsat] in [mol/l] 
    10598      DO ji = 1, jpoce 
    106          saturco3(ji,:) = 1.0 - co3por(ji,:) * calcon2(ji) / ( aksps(ji) * densSW(ji) * densSW(ji) + rtrn )  
    107          DO jk = 2, jpksed 
     99         zco3sat = aksps(ji) * densSW(ji) * densSW(ji) / ( calcon2(ji) + rtrn ) 
     100         saturco3(ji,:) = 1.0 - co3por(ji,:) / ( rtrn + zco3sat ) 
     101         DO jk = 1, jpksed 
    108102            zsolid1 = volc(ji,jk,jscal) * solcp(ji,jk,jscal) 
    109             zexcess = MAX( 0., saturco3(ji,jk) )  
    110             zreasat = reac_cal * dtsed * zexcess * zsolid1 
    111             solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat / volc(ji,jk,jscal) 
     103            zundsat(ji,jk) = MAX( 0., zco3sat - co3por(ji,jk) ) 
     104            zrearat(ji,jk) = ( reac_cal * zsolid1 / ( zco3sat + rtrn ) ) / & 
     105            &                ( 1. + reac_cal * dtsed * zundsat(ji,jk) / ( zco3sat + rtrn ) ) 
     106         END DO 
     107      END DO 
     108 
     109      psms(:,:) = 0.0 
     110      ! solves tridiagonal system 
     111      CALL sed_mat_dsri( jwdic, -zrearat(:,:), psms(:,:), dtsed, zundsat ) 
     112 
     113      ! New solid concentration values (jk=2 to jksed) for cacO3 
     114      DO jk = 2, jpksed 
     115         DO ji = 1, jpoce 
     116            zreasat = zrearat(ji,jk) * dtsed * zundsat(ji,jk) / ( volc(ji,jk,jscal) + rtrn ) 
     117            solcp(ji,jk,jscal) = solcp(ji,jk,jscal) - zreasat 
     118            zreasat = zrearat(ji,jk) * dtsed * zundsat(ji,jk) 
    112119            ! For DIC 
    113120            pwcp(ji,jk,jwdic)  = pwcp(ji,jk,jwdic) + zreasat 
    114121            ! For alkalinity 
    115             pwcp(ji,jk,jwalk)  = pwcp(ji,jk,jwalk) + 2.0 * zreasat 
    116          END DO 
    117       END DO 
     122            pwcp(ji,jk,jwalk)  = pwcp(ji,jk,jwalk) + 2.* zreasat 
     123         ENDDO 
     124      ENDDO 
     125 
    118126 
    119127      IF( ln_timing )  CALL timing_stop('sed_inorg') 
Note: See TracChangeset for help on using the changeset viewer.