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 14276 for NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zfechem.F90 – NEMO

Ignore:
Timestamp:
2021-01-07T23:09:56+01:00 (3 years ago)
Author:
aumont
Message:

numerous updates to PISCES, PISCES-QUOTA and the sediment module

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zfechem.F90

    r13200 r14276  
    3030   REAL(wp), PUBLIC ::   ligand       !: ligand concentration in the ocean  
    3131   REAL(wp), PUBLIC ::   kfep         !: rate constant for nanoparticle formation 
     32   REAL(wp), PUBLIC ::   scaveff      !: Fraction of scavenged iron that is considered as being subject to solubilization 
    3233 
    3334   !!---------------------------------------------------------------------- 
     
    5051      ! 
    5152      INTEGER  ::   ji, jj, jk, jic, jn 
    52       REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac 
    53       REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol, zligco 
    54       REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag, ztrc, zdust 
    55       REAL(wp) ::   zdenom2, ztfe, zhplus, zxlam, zaggliga, zaggligb 
     53      REAL(wp) ::   zlam1a, zlam1b 
     54      REAL(wp) ::   zkeq, zfesatur, zfecoll, fe3sol, zligco 
     55      REAL(wp) ::   zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 
     56      REAL(wp) ::   ztfe, zhplus, zxlam, zaggliga, zaggligb 
    5657      REAL(wp) ::   zrfact2 
    5758      CHARACTER (len=25) :: charout 
    58       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, zFeL1 
    59       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d 
     59      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, precipno3, zFeL1 
     60      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d, zprecip3d 
    6061      !!--------------------------------------------------------------------- 
    6162      ! 
     
    6667 
    6768      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
    68       ! Parameterization from Tagliabue and Voelker (2011) 
     69      ! Parameterization from Pham and Ito (2018) 
    6970      ! ------------------------------------------------- 
    7071      IF( ln_ligvar ) THEN 
    71          ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
     72         ztotlig(:,:,:) =  0.09 * 0.667 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 + MAX(0., chemo2(:,:,:) - trb(:,:,:,jpoxy) ) / 400.E-6 
    7273         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    7374      ELSE 
    7475        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9 
    75         ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9 
     76        ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9  
    7677        ENDIF 
    7778      ENDIF 
     
    7980      ! ------------------------------------------------------------ 
    8081      !  from Aumont and Bopp (2006) 
    81       ! This model is based on one ligand and Fe'  
     82      ! This model is based on one ligand, Fe2+ and Fe3+  
    8283      ! Chemistry is supposed to be fast enough to be at equilibrium 
    8384      ! ------------------------------------------------------------ 
     
    8788               zTL1(ji,jj,jk)  = ztotlig(ji,jj,jk) 
    8889               zkeq            = fekeq(ji,jj,jk) 
     90               zklight         = 4.77E-7 * etot(ji,jj,jk) * 0.5 / 10**-6.3 
    8991               zfesatur        = zTL1(ji,jj,jk) * 1E-9 
    90                ztfe            = trb(ji,jj,jk,jpfer)  
     92               ztfe            = (1.0 + zklight) * trb(ji,jj,jk,jpfer)  
    9193               ! Fe' is the root of a 2nd order polynom 
    92                zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               & 
    93                   &              + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2       & 
     94               zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * trb(ji,jj,jk,jpfer) )               & 
     95                  &              + SQRT( ( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * trb(ji,jj,jk,jpfer) )**2       & 
    9496                  &              + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
    95                zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 
    96                zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
     97               zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) - zFe3(ji,jj,jk) ) 
    9798           END DO 
    9899         END DO 
    99100      END DO 
    100          ! 
    101  
     101      ! 
     102      plig(:,:,:) =  MAX( 0., ( zFeL1(:,:,:) / ( trb(:,:,:,jpfer) + rtrn ) ) ) 
     103      ! 
    102104      zdust = 0.         ! if no dust available 
    103105      DO jk = 1, jpkm1 
     
    113115               &         + fesol(ji,jj,jk,5) / zhplus ) 
    114116               ! 
    115                zfeequi = zFe3(ji,jj,jk) * 1E-9 
    116                zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     117               zfecoll = 0.5 * zFeL1(ji,jj,jk) 
    117118               ! precipitation of Fe3+, creation of nanoparticles 
    118                precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 
     119               precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) )  
     120               ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 
     121               ! This occurs in anoxic waters only 
     122               precipno3(ji,jj,jk) = 2.0 * 130.0 * trb(ji,jj,jk,jpno3) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 
    119123               ! 
    120124               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
     125               ztrc = MAX( rtrn, ztrc ) 
    121126               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 
    122                IF (ln_ligand) THEN 
    123                   zxlam  = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * trb(ji,jj,jk,jpoxy) / 100.E-6 ) )) 
    124                ELSE 
    125                   zxlam  = xlam1 * 1.0 
    126                ENDIF 
    127                zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 
    128                zscave = zfeequi * zlam1b * xstep 
    129  
    130                ! Compute the different ratios for scavenging of iron 
    131                ! to later allocate scavenged iron to the different organic pools 
    132                ! --------------------------------------------------------- 
    133                zdenom1 = zxlam * trb(ji,jj,jk,jppoc) / zlam1b 
    134                zdenom2 = zxlam * trb(ji,jj,jk,jpgoc) / zlam1b 
    135  
    136                ! Increased scavenging for very high iron concentrations found near the coasts  
    137                ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 
    138                !  ----------------------------------------------------------- 
    139                zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 
    140                zlamfac = MIN( 1.  , zlamfac ) 
    141                zdep    = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 
    142                zcoag   = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 
     127               zxlam  = MAX( 1.E-3, (1. - EXP(-2 * trb(ji,jj,jk,jpoxy) / 100.E-6 ) )) 
     128               zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 
     129               zscave = zFe3(ji,jj,jk) * zlam1b * xstep 
    143130 
    144131               ! Compute the coagulation of colloidal iron. This parameterization  
     
    146133               ! It requires certainly some more work as it is very poorly constrained. 
    147134               ! ---------------------------------------------------------------- 
    148                zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    149                    &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     135               zlam1a   = ( 12.0  * 0.3 * trb(ji,jj,jk,jpdoc) + 9.05  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     136                   &    + ( 2.49  * trb(ji,jj,jk,jppoc) )     & 
     137                   &    + ( 127.8 * 0.3 * trb(ji,jj,jk,jpdoc) + 725.7 * trb(ji,jj,jk,jppoc) ) 
    150138               zaggdfea = zlam1a * xstep * zfecoll 
    151139               ! 
    152                zlam1b   = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
     140               zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * trb(ji,jj,jk,jpgoc) 
    153141               zaggdfeb = zlam1b * xstep * zfecoll 
    154142               ! 
    155143               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb & 
    156                &                     - zcoag - precip(ji,jj,jk) 
    157                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 
    158                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 
    159                zscav3d(ji,jj,jk)   = zscave 
     144               &                     - precip(ji,jj,jk) - precipno3(ji,jj,jk) 
     145               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * scaveff * trb(ji,jj,jk,jppoc) / ztrc 
     146               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * scaveff * trb(ji,jj,jk,jpgoc) / ztrc 
     147 
     148               ! Precipitated iron is supposed to be permanently lost. 
     149               ! Scavenged iron is supposed to be released back to seawater 
     150               ! when POM is solubilized. This is highly uncertain as probably 
     151               ! a significant part of it may be rescavenged back onto  
     152               ! the particles. An efficiency factor is applied that is read 
     153               ! in the namelist.  
     154               ! See for instance Tagliabue et al. (2019). 
     155               ! Aggregated FeL is considered as biogenic Fe as it  
     156               ! probably remains  complexed when the particle is solubilized. 
     157               ! ------------------------------------------------------------- 
     158               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zaggdfea 
     159               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggdfeb 
     160               zscav3d(ji,jj,jk)   = zscave  
    160161               zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
     162               zprecip3d(ji,jj,jk) = precip(ji,jj,jk) + precipno3(ji,jj,jk) 
    161163               ! 
    162164            END DO 
     
    175177 
    176178                  ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
    177                   ! Coefficients are taken from the p4zagg 
     179                  ! Coefficients are taken from p4zagg 
    178180                  ! ------------------------------------------------------------------------------------- 
    179                   zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    180                       &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     181                  zlam1a   = ( 12.0  * 0.3 * trb(ji,jj,jk,jpdoc) + 9.05  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     182                      &    + ( 2.49  * trb(ji,jj,jk,jppoc) )     & 
     183                      &    + ( 127.8 * 0.3 * trb(ji,jj,jk,jpdoc) + 725.7 * trb(ji,jj,jk,jppoc) ) 
    181184                  ! 
    182                   zlam1b   = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    183  
     185                  zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * trb(ji,jj,jk,jpgoc) 
    184186                  ! 50% of the ligands are supposed to be in the colloidal size fraction 
    185                   zligco   = 0.5 * trn(ji,jj,jk,jplgw) 
    186                   zaggliga = zlam1a * xstep * zligco 
     187                  ! as for FeL 
     188                  zligco   = 0.5 * trb(ji,jj,jk,jplgw) 
     189                  zaggliga = zlam1a * xstep * zligco  
    187190                  zaggligb = zlam1b * xstep * zligco 
    188191                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 
     
    191194            END DO 
    192195         END DO 
    193          ! 
    194          plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 
    195196         ! 
    196197      ENDIF 
     
    206207         IF( iom_use("FESCAV") )  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    207208         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     209         IF( iom_use("FEPREC") )  CALL iom_put("FEPREC" , zprecip3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    208210         IF( iom_use("LGWCOLL"))  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    209211      ENDIF 
     
    234236      INTEGER ::   ios   ! Local integer  
    235237      !! 
    236       NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep  
     238      NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff  
    237239      !!---------------------------------------------------------------------- 
    238240      ! 
     
    258260         WRITE(numout,*) '      ligand concentration in the ocean         ligand       =', ligand 
    259261         WRITE(numout,*) '      rate constant for nanoparticle formation  kfep         =', kfep 
     262         WRITE(numout,*) '      Scavenged iron that is added to POFe      scaveff      =', scaveff 
    260263      ENDIF 
    261264      !  
Note: See TracChangeset for help on using the changeset viewer.