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 12193 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsed.F90 – NEMO

Ignore:
Timestamp:
2019-12-11T17:15:54+01:00 (4 years ago)
Author:
davestorkey
Message:

2019/dev_r11943_MERGE_2019: Merge in dev_r12072_TOP-01_ENHANCE-11_cethe

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsed.F90

    r11949 r12193  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    1616   USE p4zlim          !  Co-limitations of differents nutrients 
    17    USE p4zsbc          !  External source of nutrients  
    1817   USE p4zint          !  interpolation and computation of various fields 
    1918   USE sed             !  Sediment module 
     
    2524 
    2625   PUBLIC   p4z_sed   
     26   PUBLIC   p4z_sed_init 
    2727   PUBLIC   p4z_sed_alloc 
    2828  
     29   REAL(wp), PUBLIC ::   nitrfix      !: Nitrogen fixation rate 
     30   REAL(wp), PUBLIC ::   diazolight   !: Nitrogen fixation sensitivty to light 
     31   REAL(wp), PUBLIC ::   concfediaz   !: Fe half-saturation Cste for diazotrophs 
     32 
    2933   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot    !: Nitrogen fixation  
    3034   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:  ) :: sdenit     !: Nitrate reduction in the sediments 
    31    REAL(wp) :: r1_rday                  !: inverse of rday 
    32    LOGICAL, SAVE :: lk_sed 
     35   ! 
     36   REAL(wp), SAVE :: r1_rday           
     37   REAL(wp), SAVE :: sedsilfrac, sedcalfrac 
    3338 
    3439   !!---------------------------------------------------------------------- 
     
    5459      INTEGER  ::  ji, jj, jk, ikt 
    5560      REAL(wp) ::  zrivalk, zrivsil, zrivno3 
    56       REAL(wp) ::  zwflux, zlim, zfact, zfactcal 
     61      REAL(wp) ::  zlim, zfact, zfactcal 
    5762      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zolimit 
    5863      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep 
     
    6772      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight 
    6873      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep 
    69       REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zsidep, zironice 
    7074      !!--------------------------------------------------------------------- 
    7175      ! 
    7276      IF( ln_timing )  CALL timing_start('p4z_sed') 
    7377      ! 
    74       IF( kt == nittrc000 .AND. knt == 1 )   THEN 
    75           r1_rday  = 1. / rday 
    76           IF (ln_sediment .AND. ln_sed_2way) THEN 
    77              lk_sed = .TRUE. 
    78           ELSE 
    79              lk_sed = .FALSE. 
    80           ENDIF 
    81       ENDIF 
    82       ! 
    83       IF( kt == nittrc000 .AND. knt == 1 )   r1_rday  = 1. / rday 
    84       ! 
     78 
    8579      ! Allocate temporary workspace 
    8680      ALLOCATE( ztrpo4(jpi,jpj,jpk) ) 
     
    9488      zsedc   (:,:) = 0.e0 
    9589 
    96       ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
    97       ! ---------------------------------------------------- 
    98       IF( ln_ironice ) THEN   
    99          !                                               
    100          ALLOCATE( zironice(jpi,jpj) ) 
    101          !                                               
     90      IF( .NOT.lk_sed ) THEN 
     91         ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 
     92         ! -------------------------------------------------------------------- 
    10293         DO jj = 1, jpj 
    10394            DO ji = 1, jpi 
    104                zdep    = rfact2 / e3t(ji,jj,1,Kmm) 
    105                zwflux  = fmmflx(ji,jj) / 1000._wp 
    106                zironice(ji,jj) =  MAX( -0.99 * tr(ji,jj,1,jpfer,Kbb), -zwflux * icefeinput * zdep ) 
    107             END DO 
    108          END DO 
    109          ! 
    110          tr(:,:,1,jpfer,Krhs) = tr(:,:,1,jpfer,Krhs) + zironice(:,:)  
    111          !  
    112          IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) )   & 
    113             &   CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! iron flux from ice 
    114          ! 
    115          DEALLOCATE( zironice ) 
    116          !                                               
    117       ENDIF 
    118  
    119       ! Add the external input of nutrients from dust deposition 
    120       ! ---------------------------------------------------------- 
    121       IF( ln_dust ) THEN 
    122          !                                               
    123          ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 
    124          !                                              ! Iron and Si deposition at the surface 
    125          IF( ln_solub ) THEN 
    126             zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 55.85 + 3.e-10 * r1_ryyss  
    127          ELSE 
    128             zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 55.85 + 3.e-10 * r1_ryyss  
    129          ENDIF 
    130          zsidep(:,:)   = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 28.1  
    131          zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t(:,:,1,Kmm) / 31. / po4r  
    132          !                                              ! Iron solubilization of particles in the water column 
    133          !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
    134          zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 
    135          DO jk = 2, jpkm1 
    136             zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept(:,:,jk,Kmm) / 540. ) 
    137             zpdep   (:,:,jk) = zirondep(:,:,jk) * 0.023 
    138          END DO 
    139          !                                              ! Iron solubilization of particles in the water column 
    140          tr(:,:,1,jpsil,Krhs) = tr(:,:,1,jpsil,Krhs) + zsidep  (:,:) 
    141          DO jk = 1, jpkm1 
    142             tr(:,:,jk,jppo4,Krhs) = tr(:,:,jk,jppo4,Krhs) + zpdep   (:,:,jk) 
    143             tr(:,:,jk,jpfer,Krhs) = tr(:,:,jk,jpfer,Krhs) + zirondep(:,:,jk)  
    144          ENDDO 
    145          !  
    146          IF( lk_iomput ) THEN 
    147             IF( knt == nrdttrc ) THEN 
    148                 IF( iom_use( "Irondep" ) )   & 
    149                 &  CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * e3t(:,:,1,Kmm) * tmask(:,:,1) ) ! surface downward dust depo of iron 
    150                 IF( iom_use( "pdust" ) )   & 
    151                 &  CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday )  * tmask(:,:,1) ) ! dust concentration at surface 
    152             ENDIF 
    153          ENDIF 
    154          DEALLOCATE( zsidep, zpdep, zirondep ) 
    155          !                                               
    156       ENDIF 
    157       
    158       ! Add the external input of nutrients from river 
    159       ! ---------------------------------------------------------- 
    160       IF( ln_river ) THEN 
    161          DO jj = 1, jpj 
    162             DO ji = 1, jpi 
    163                DO jk = 1, nk_rnf(ji,jj) 
    164                   tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) +  rivdip(ji,jj) * rfact2 
    165                   tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) +  rivdin(ji,jj) * rfact2 
    166                   tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) +  rivdic(ji,jj) * 5.e-5 * rfact2 
    167                   tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) +  rivdsi(ji,jj) * rfact2 
    168                   tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) +  rivdic(ji,jj) * rfact2 
    169                   tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) +  ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 
    170                   tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) +  rivdoc(ji,jj) * rfact2 
    171                ENDDO 
    172             ENDDO 
    173          ENDDO 
    174          IF (ln_ligand) THEN 
    175             DO jj = 1, jpj 
    176                DO ji = 1, jpi 
    177                   DO jk = 1, nk_rnf(ji,jj) 
    178                      tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) +  rivdic(ji,jj) * 5.e-5 * rfact2 
    179                   ENDDO 
    180                ENDDO 
    181             ENDDO 
    182          ENDIF 
    183          IF( ln_p5z ) THEN 
    184             DO jj = 1, jpj 
    185                DO ji = 1, jpi 
    186                   DO jk = 1, nk_rnf(ji,jj) 
    187                      tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + rivdop(ji,jj) * rfact2 
    188                      tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + rivdon(ji,jj) * rfact2 
    189                   ENDDO 
    190                ENDDO 
    191             ENDDO 
    192          ENDIF 
    193       ENDIF 
    194        
    195       ! Add the external input of nutrients from nitrogen deposition 
    196       ! ---------------------------------------------------------- 
    197       IF( ln_ndepo ) THEN 
    198          tr(:,:,1,jpno3,Krhs) = tr(:,:,1,jpno3,Krhs) + nitdep(:,:) * rfact2 
    199          tr(:,:,1,jptal,Krhs) = tr(:,:,1,jptal,Krhs) - rno3 * nitdep(:,:) * rfact2 
    200       ENDIF 
    201  
    202       ! Add the external input of iron from hydrothermal vents 
    203       ! ------------------------------------------------------ 
    204       IF( ln_hydrofe ) THEN 
    205             tr(:,:,:,jpfer,Krhs) = tr(:,:,:,jpfer,Krhs) + hydrofe(:,:,:) * rfact2 
    206          IF( ln_ligand ) THEN 
    207             tr(:,:,:,jplgw,Krhs) = tr(:,:,:,jplgw,Krhs) + ( hydrofe(:,:,:) * lgw_rath ) * rfact2 
    208          ENDIF 
    209          ! 
    210          IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
    211             &   CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 
    212       ENDIF 
    213  
    214       ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 
    215       ! -------------------------------------------------------------------- 
    216       DO jj = 1, jpj 
    217          DO ji = 1, jpi 
    218             ikt  = mbkt(ji,jj) 
    219             zdep = e3t(ji,jj,ikt,Kmm) / xstep 
    220             zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 
    221             zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 
    222          END DO 
    223       END DO 
    224       ! 
    225       IF( .NOT.lk_sed ) THEN 
    226 ! 
    227          ! Add the external input of iron from sediment mobilization 
    228          ! ------------------------------------------------------ 
    229          IF( ln_ironsed ) THEN 
    230                             tr(:,:,:,jpfer,Krhs) = tr(:,:,:,jpfer,Krhs) + ironsed(:,:,:) * rfact2 
    231             ! 
    232             IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
    233                &   CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 
    234          ENDIF 
     95               ikt  = mbkt(ji,jj) 
     96               zdep = e3t(ji,jj,ikt,Kmm) / xstep 
     97               zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 
     98               zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 
     99            END DO 
     100         END DO 
    235101 
    236102         ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
     
    495361   END SUBROUTINE p4z_sed 
    496362 
     363   SUBROUTINE p4z_sed_init 
     364      !!---------------------------------------------------------------------- 
     365      !!                  ***  routine p4z_sed_init  *** 
     366      !! 
     367      !! ** purpose :   initialization of some parameters 
     368      !! 
     369      !!---------------------------------------------------------------------- 
     370      !!---------------------------------------------------------------------- 
     371      INTEGER  :: ji, jj, jk, jm 
     372      INTEGER  :: ios                 ! Local integer output status for namelist read 
     373      ! 
     374      !! 
     375      NAMELIST/nampissed/ nitrfix, diazolight, concfediaz 
     376      !!---------------------------------------------------------------------- 
     377      ! 
     378      IF(lwp) THEN 
     379         WRITE(numout,*) 
     380         WRITE(numout,*) 'p4z_sed_init : initialization of sediment mobilisation ' 
     381         WRITE(numout,*) '~~~~~~~~~~~~ ' 
     382      ENDIF 
     383      !                            !* set file information 
     384      READ  ( numnatp_ref, nampissed, IOSTAT = ios, ERR = 901) 
     385901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampissed in reference namelist' ) 
     386      READ  ( numnatp_cfg, nampissed, IOSTAT = ios, ERR = 902 ) 
     387902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampissed in configuration namelist' ) 
     388      IF(lwm) WRITE ( numonp, nampissed ) 
     389 
     390      IF(lwp) THEN 
     391         WRITE(numout,*) '   Namelist : nampissed ' 
     392         WRITE(numout,*) '      nitrogen fixation rate                       nitrfix = ', nitrfix 
     393         WRITE(numout,*) '      nitrogen fixation sensitivty to light    diazolight  = ', diazolight 
     394         WRITE(numout,*) '      Fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz 
     395      ENDIF 
     396      ! 
     397      r1_rday  = 1. / rday 
     398      ! 
     399      sedsilfrac = 0.03     ! percentage of silica loss in the sediments 
     400      sedcalfrac = 0.6      ! percentage of calcite loss in the sediments 
     401      ! 
     402      lk_sed = ln_sediment .AND. ln_sed_2way  
     403      ! 
     404   END SUBROUTINE p4z_sed_init 
    497405 
    498406   INTEGER FUNCTION p4z_sed_alloc() 
Note: See TracChangeset for help on using the changeset viewer.