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 14963 for NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z – NEMO

Ignore:
Timestamp:
2021-06-09T18:14:48+02:00 (3 years ago)
Author:
aumont
Message:

Code updates + debugging + configuration files updates

Location:
NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zfechem.F90

    r14957 r14963  
    5656      INTEGER  ::   ji, jj, jk, jic, jn 
    5757      REAL(wp) ::   zlam1a, zlam1b 
    58       REAL(wp) ::   zkeq, zfesatur, zfecoll, fe3sol, zligco 
     58      REAL(wp) ::   zkeq, zfesatur, fe3sol, zligco 
    5959      REAL(wp) ::   zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 
    6060      REAL(wp) ::   ztfe, zhplus, zxlam, zaggliga, zaggligb 
     
    6262      REAL(wp) ::   zrfact2 
    6363      CHARACTER (len=25) :: charout 
    64       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, zfeprecip, zFeL1 
     64      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, zfeprecip, zFeL1, zfecoll 
    6565      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d 
    6666      !!--------------------------------------------------------------------- 
     
    7575      zscav3d  (:,:,jpk) = 0. 
    7676      zlcoll3d (:,:,jpk) = 0. 
    77  
     77      zfecoll  (:,:,jpk) = 0. 
     78      xfecolagg(:,:,jpk) = 0. 
     79      xcoagfe  (:,:,jpk) = 0. 
     80      ! 
    7881      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
    7982      ! Parameterization from Pham and Ito (2018) 
    8083      ! ------------------------------------------------- 
     84      xfecolagg(:,:,:) = ligand * 1E9 + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 
    8185      IF( ln_ligvar ) THEN 
    82          ztotlig(:,:,:) =  0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 & 
    83            &             + ligand * 1E9 & 
    84            &             + MAX(0., chemo2(:,:,:) - tr(:,:,:,jpoxy,Kbb) ) / 400.E-6 
     86         ztotlig(:,:,:) =  0.09 * 0.667 * tr(:,:,:,jpdoc,Kbb) * 1E6 + xfecolagg(:,:,:) 
    8587         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    8688      ELSE 
     
    111113      ! 
    112114      zdust = 0.         ! if no dust available 
     115 
     116      ! Computation of the colloidal fraction that is subjecto to coagulation 
     117      ! The assumption is that 50% of complexed iron is colloidal. Furthermore 
     118      ! The refractory part is supposed to be non sticky. The refractory 
     119      ! fraction is supposed to equal to the background concentration +  
     120      ! the fraction that accumulates in the deep ocean. AOU is taken as a  
     121      ! proxy of that accumulation following numerous studies showing  
     122      ! some relationship between weak ligands and AOU. 
     123      ! An issue with that parameterization is that when ligands are not 
     124      ! prognostic or non variable, all the colloidal fraction is supposed 
     125      ! to coagulate 
     126      ! ---------------------------------------------------------------------- 
     127      IF (ln_ligand) THEN 
     128         zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )  
     129      ELSE 
     130         IF (ln_ligvar) THEN 
     131            zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) * MAX(0., tr(:,:,:,jplgw,Kbb) - xfecolagg(:,:,:) * 1.0E-9 ) / ( tr(:,:,:,jplgw,Kbb) + rtrn )    
     132         ELSE 
     133            zfecoll(:,:,:) = 0.5 * zFeL1(:,:,:) 
     134         ENDIF 
     135      ENDIF 
     136 
    113137      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    114138         ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water.  
     
    121145         &         + fesol(ji,jj,jk,5) / zhplus ) 
    122146         ! 
    123          zfecoll = 0.5 * zFeL1(ji,jj,jk) 
    124147         ! precipitation of Fe3+, creation of nanoparticles 
    125148         zprecip = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) )  
     
    144167             &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     & 
    145168             &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 
    146          zaggdfea = zlam1a * xstep * zfecoll 
     169         zaggdfea = zlam1a * xstep * zfecoll(ji,jj,jk) 
    147170               ! 
    148171         zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 
    149          zaggdfeb = zlam1b * xstep * zfecoll 
    150  
     172         zaggdfeb = zlam1b * xstep * zfecoll(ji,jj,jk) 
     173         xcoagfe(ji,jj,jk) = zlam1a + zlam1b 
    151174         ! 
    152175         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb & 
     
    179202      biron(:,:,:) = tr(:,:,:,jpfer,Kbb)  
    180203      ! 
    181       IF( ln_ligand ) THEN 
    182          ! 
    183          DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    184              ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
    185              ! Coefficients are taken from p4zagg 
    186              ! ------------------------------------------------------------------------------------- 
    187              zlam1a   = ( 12.0  * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05  * tr(ji,jj,jk,jppoc,Kbb) ) * xdiss(ji,jj,jk)    & 
    188                  &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     & 
    189                  &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) ) 
    190              ! 
    191              zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb) 
    192              ! 50% of the ligands are supposed to be in the colloidal size fraction 
    193              ! as for FeL 
    194              zligco   = 0.5 * tr(ji,jj,jk,jplgw,Kbb) 
    195              zaggliga = zlam1a * xstep * zligco  
    196              zaggligb = zlam1b * xstep * zligco 
    197              ! 
    198              tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs)  - zaggliga - zaggligb 
    199              zlcoll3d(ji,jj,jk)  = zaggliga + zaggligb 
    200          END_3D 
    201       ENDIF 
    202  
    203204      !  Output of some diagnostics variables 
    204205      !     --------------------------------- 
     
    213214         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    214215         IF( iom_use("FEPREC") )  CALL iom_put("FEPREC" , zfeprecip(:,:,:) *1e9*tmask(:,:,:)*zrfact2 ) 
    215          IF( iom_use("LGWCOLL"))  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    216216      ENDIF 
    217217 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zligand.F90

    r14786 r14963  
    4646      ! 
    4747      INTEGER  ::   ji, jj, jk 
    48       REAL(wp) ::   zlgwp, zlgwpr, zlgwr, zlablgw 
    49       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod 
     48      REAL(wp) ::   zlgwp, zlgwpr, zlgwr, zlablgw  
     49      REAL(wp) ::   zlam1a, zlam1b, zaggliga, zligco 
     50      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod, zlcoll3d 
    5051      CHARACTER (len=25) ::   charout 
    5152      !!--------------------------------------------------------------------- 
     
    6364         ! This is based on the idea that as LGW is lower 
    6465         ! there is a larger fraction of refractory OM 
    65          zlgwr = max( rlgs , rlgw * exp( -2 * (tr(ji,jj,jk,jplgw,Kbb)*1e9) ) ) ! years 
    66          zlgwr = 1. / zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 
     66         zlgwr = ( 1.0 / rlgs * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 )    & 
     67         &       + 1.0 / rlgw * xfecolagg(ji,jj,jk) * 1.0E-9 ) / ( rtrn + tr(ji,jj,jk,jplgw,Kbb) ) 
     68         zlgwr = zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb) 
    6769         ! photochem loss of weak ligand 
    6870         zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb)**3 * (1. - fr_i(ji,jj))   & 
    6971         &        / ( tr(ji,jj,jk,jplgw,Kbb)**2 + (xklig)**2) 
    70          tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr 
     72         ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
     73         ! xcoagfe is computed in p4zfechem 
     74         ! ------------------------------------------------------------------------------------- 
     75         ! 50% of the ligands are supposed to be in the colloidal size fraction 
     76         ! as for FeL 
     77         zligco   = 0.5 * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 ) 
     78         zaggliga = xcoagfe(ji,jj,jk) * xstep * zligco 
     79 
     80         tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr - zaggliga 
     81         ! 
    7182         zligrem(ji,jj,jk)   = zlgwr 
    7283         zligpr(ji,jj,jk)    = zlgwpr 
    7384         zligprod(ji,jj,jk)  = zlgwp 
    74          ! 
     85         zlcoll3d(ji,jj,jk)  = zaggliga 
    7586      END_3D 
    7687      ! 
     
    8697         IF( iom_use( "LPRODR" ) ) THEN 
    8798           zligprod(:,:,jpk) = 0. ; CALL iom_put( "LPRODR", zligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     99         ENDIF 
     100         IF( iom_use( "LGWCOLL" ) ) THEN 
     101            zlcoll3d(:,:,jpk) = 0. ; CALL iom_put( "LGWCOLL", zlcoll3d(:,:,:) * 1.e9 *  1.e+3 * rfact2r * tmask(:,:,:) ) 
    88102         ENDIF 
    89103      ENDIF 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zrem.F90

    r14786 r14963  
    7878      CHARACTER (len=25) :: charout 
    7979      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 
     80      REAL(wp), DIMENSION(jpi,jpj    ) :: ztempbac 
    8081      !!--------------------------------------------------------------------- 
    8182      ! 
     
    9697      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    9798         zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
    98          zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6 
    99          IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN 
     99         IF ( gdept(ji,jj,jk,Kmm) < zdep ) THEN 
     100            zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6 
     101            ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
     102!         IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN 
     103         ELSE 
    100104            zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) ) 
     105            zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 
    101106            zdepeff(ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
    102107         ENDIF 
     
    182187         ! is treated here. The GGE of bacteria supposed to be equal to  
    183188         ! 0.33. This is hard-coded.  
    184          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.18 
    185          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.15 
    186          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.03 
    187          zfebact(ji,jj,jk)   = zbactfer * 0.18 
     189         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zbactfer*0.12 
     190         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zbactfer*0.10 
     191         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zbactfer*0.02 
     192         zfebact(ji,jj,jk)   = zbactfer * 0.12 
    188193         blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 
    189194      END_3D 
  • NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p4zsed.F90

    r14786 r14963  
    1616   USE p4zlim          !  Co-limitations of differents nutrients 
    1717   USE p4zint          !  interpolation and computation of various fields 
     18   USE p4zligand       !  Fe ligands sources and sinks 
    1819   USE sed             !  Sediment module 
    1920   USE iom             !  I/O manager 
     
    208209            zwstpoc = tr(ji,jj,ikt,jpgoc,Kbb) * zws4 + tr(ji,jj,ikt,jppoc,Kbb) * zws3 
    209210            ! Denitrification in the sediments             
    210             zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     211            zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 * 0.85 ) 
    211212            ! Fraction that is not denitrified 
    212             z1pdenit = zwstpoc * zrivno3 - zpdenit 
     213            z1pdenit = zwstpoc * zrivno3 * 0.85 - zpdenit 
    213214            ! Oxic remineralization of organic matter in the sediments 
    214215            zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    215216            ! The fraction that cannot be denitrified nor oxidized by O2 
    216217            ! is released back to the water column as DOC            
    217             tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit 
     218            ! 15% of the POC that is processed in sediment is released as DOC 
     219            tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit + 0.15 * zwstpoc * zrivno3 
    218220            ! Update of the tracers concentrations             
    219221            tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit 
     
    225227            sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm) 
    226228            zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc * e3t(ji,jj,ikt,Kmm) 
     229            IF ( ln_ligand ) tr(ji,jj,ikt,jplgw,Krhs) = tr(ji,jj,ikt,jplgw,Krhs) + 0.15 * zwstpoc * zrivno3 * rlig 
    227230            ! PISCES-QUOTA (p5z)             
    228231            IF( ln_p5z ) THEN 
     
    294297            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zfact * 2.0 / 3.0 
    295298            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0 
     299            IF ( ln_ligand ) tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zfact * ldocp 
    296300            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0 
    297301            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0 
     
    326330            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0 
    327331            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0 
     332            IF ( ln_ligand ) tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zfact * ldocp 
    328333            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0  & 
    329334            &                     - 16.0 / 46.0 * zfact * ztrdop / (ztrpo4 + ztrdop + rtrn) 
Note: See TracChangeset for help on using the changeset viewer.