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 5581 for branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

Ignore:
Timestamp:
2015-07-10T13:28:53+02:00 (9 years ago)
Author:
timgraham
Message:

Merged head of trunk into branch

Location:
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r4793 r5581  
    4444CONTAINS 
    4545 
    46    SUBROUTINE p4z_bio ( kt, jnt ) 
     46   SUBROUTINE p4z_bio ( kt, knt ) 
    4747      !!--------------------------------------------------------------------- 
    4848      !!                     ***  ROUTINE p4z_bio  *** 
     
    5454      !! ** Method  : - ??? 
    5555      !!--------------------------------------------------------------------- 
    56       INTEGER, INTENT(in) :: kt, jnt 
    57       INTEGER  ::  ji, jj, jk, jn 
    58       REAL(wp) ::  ztra 
    59 #if defined key_kriest 
    60       REAL(wp) ::  zcoef1, zcoef2 
    61 #endif 
     56      INTEGER, INTENT(in) :: kt, knt 
     57      INTEGER             :: ji, jj, jk, jn 
    6258      CHARACTER (len=25) :: charout 
    6359 
     
    8076 
    8177           
    82       CALL p4z_opt  ( kt, jnt )     ! Optic: PAR in the water column 
    83       CALL p4z_sink ( kt, jnt )     ! vertical flux of particulate organic matter 
    84       CALL p4z_fechem(kt, jnt )     ! Iron chemistry/scavenging 
    85       CALL p4z_lim  ( kt, jnt )     ! co-limitations by the various nutrients 
    86       CALL p4z_prod ( kt, jnt )     ! phytoplankton growth rate over the global ocean.  
     78      CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
     79      CALL p4z_sink ( kt, knt )     ! vertical flux of particulate organic matter 
     80      CALL p4z_fechem(kt, knt )     ! Iron chemistry/scavenging 
     81      CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     82      CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
    8783      !                             ! (for each element : C, Si, Fe, Chl ) 
    8884      CALL p4z_mort ( kt      )     ! phytoplankton mortality 
    89       !                             ! zooplankton sources/sinks routines  
    90       CALL p4z_micro( kt, jnt )           ! microzooplankton 
    91       CALL p4z_meso ( kt, jnt )           ! mesozooplankton 
    92       CALL p4z_rem  ( kt, jnt )     ! remineralization terms of organic matter+scavenging of Fe 
     85     !                             ! zooplankton sources/sinks routines  
     86      CALL p4z_micro( kt, knt )           ! microzooplankton 
     87      CALL p4z_meso ( kt, knt )           ! mesozooplankton 
     88      CALL p4z_rem  ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
    9389      !                             ! test if tracers concentrations fall below 0. 
    94       xnegtr(:,:,:) = 1.e0 
    95       DO jn = jp_pcs0, jp_pcs1 
    96          DO jk = 1, jpk 
    97             DO jj = 1, jpj 
    98                DO ji = 1, jpi 
    99                   IF( ( trn(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
    100                      ztra             = ABS( trn(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
    101  
    102                      xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
    103                   ENDIF 
    104               END DO 
    105             END DO 
    106          END DO 
    107       END DO 
    108       !                                ! where at least 1 tracer concentration becomes negative 
    109       !                                !  
    110       DO jn = jp_pcs0, jp_pcs1 
    111          trn(:,:,:,jn) = trn(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
    112       END DO 
    113  
    114  
    115       tra(:,:,:,:) = 0.e0 
    116  
    117 #if defined key_kriest 
    118       !  
    119       zcoef1 = 1.e0 / xkr_massp  
    120       zcoef2 = 1.e0 / xkr_massp / 1.1 
    121       DO jk = 1,jpkm1 
    122          trn(:,:,jk,jpnum) = MAX(  trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
    123          trn(:,:,jk,jpnum) = MIN(  trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef2              ) 
    124       END DO 
    125 #endif 
    126  
    127       ! 
     90      !                                                             ! 
    12891      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    12992         WRITE(charout, FMT="('bio ')") 
    13093         CALL prt_ctl_trc_info(charout) 
    131          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
     94         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    13295      ENDIF 
    13396      ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    168168   !!---------------------------------------------------------------------- 
    169169   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    170    !! $Id: p4zche.F90 3294 2012-01-28 16:44:18Z rblod $  
     170   !! $Id$  
    171171   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    172172   !!---------------------------------------------------------------------- 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r4624 r5581  
    4848CONTAINS 
    4949 
    50    SUBROUTINE p4z_fechem( kt, jnt ) 
     50   SUBROUTINE p4z_fechem( kt, knt ) 
    5151      !!--------------------------------------------------------------------- 
    5252      !!                     ***  ROUTINE p4z_fechem  *** 
     
    6262      !!--------------------------------------------------------------------- 
    6363      ! 
    64       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     64      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6565      ! 
    6666      INTEGER  ::   ji, jj, jk, jic 
     
    101101      ! ------------------------------------------------- 
    102102      IF( ln_ligvar ) THEN 
    103          ztotlig(:,:,:) =  0.09 * trn(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
     103         ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
    104104         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    105105      ELSE 
     
    127127                  zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 
    128128                  zph    = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 
    129                   zoxy   = trn(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
     129                  zoxy   = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
    130130                  ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 
    131131                  zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 )  & 
     
    137137                  zkph1 = zkph2 / 5. 
    138138                  ! pass the dfe concentration from PISCES 
    139                   ztfe = trn(ji,jj,jk,jpfer) * 1e9 
     139                  ztfe = trb(ji,jj,jk,jpfer) * 1e9 
    140140                  ! ---------------------------------------------------------- 
    141141                  ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION 
     
    204204                  zkeq           = fekeq(ji,jj,jk) 
    205205                  zfesatur       = zTL1(ji,jj,jk) * 1E-9 
    206                   ztfe           = trn(ji,jj,jk,jpfer)  
     206                  ztfe           = trb(ji,jj,jk,jpfer)  
    207207                  ! Fe' is the root of a 2nd order polynom 
    208208                  zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               & 
     
    210210                     &               + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
    211211                  zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 
    212                   zFeL1(ji,jj,jk) = MAX( 0., trn(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
     212                  zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
    213213              END DO 
    214214            END DO 
     
    240240               ENDIF 
    241241#if defined key_kriest 
    242                ztrc   = ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6  
     242               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    243243#else 
    244                ztrc   = ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6  
     244               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    245245#endif 
    246                IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust * rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 
     246               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 
    247247               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 
    248248               zscave = zfeequi * zlam1b * zstep 
     
    251251               ! to later allocate scavenged iron to the different organic pools 
    252252               ! --------------------------------------------------------- 
    253                zdenom1 = xlam1 * trn(ji,jj,jk,jppoc) / zlam1b 
     253               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 
    254254#if ! defined key_kriest 
    255                zdenom2 = xlam1 * trn(ji,jj,jk,jpgoc) / zlam1b 
     255               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 
    256256#endif 
    257257 
     
    262262               zlamfac = MIN( 1.  , zlamfac ) 
    263263               zdep    = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 
    264                zlam1b  = xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
    265                zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trn(ji,jj,jk,jpfer) 
     264               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
     265               zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 
    266266 
    267267               !  Compute the coagulation of colloidal iron. This parameterization  
     
    269269               !  It requires certainly some more work as it is very poorly constrained. 
    270270               !  ---------------------------------------------------------------- 
    271                zlam1a  = ( 0.369  * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4  * trn(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    272                    &   + ( 114.   * 0.3 * trn(ji,jj,jk,jpdoc) + 5.09E3 * trn(ji,jj,jk,jppoc) ) 
     271               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     272                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 
    273273               zaggdfea = zlam1a * zstep * zfecoll 
    274274#if defined key_kriest 
     
    278278               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 
    279279#else 
    280                zlam1b = 3.53E3 *   trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
     280               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    281281               zaggdfeb = zlam1b * zstep * zfecoll 
    282282               ! 
     
    292292      !  ---------------------------------------- 
    293293      IF( ln_fechem ) THEN 
    294           biron(:,:,:) = MAX( 0., trn(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
     294          biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
    295295      ELSE 
    296           biron(:,:,:) = trn(:,:,:,jpfer)  
     296          biron(:,:,:) = trb(:,:,:,jpfer)  
    297297      ENDIF 
    298298 
    299299      !  Output of some diagnostics variables 
    300300      !     --------------------------------- 
    301       IF( ln_diatrc .AND. lk_iomput ) THEN 
    302          IF( jnt == nrdttrc ) THEN 
    303             CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
    304             CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
    305             CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1 
    306             CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
    307             CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron 
    308             IF( ln_fechem ) THEN 
    309                CALL iom_put("Fe2" , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+ 
    310                CALL iom_put("FeL2", zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2 
    311                CALL iom_put("FeP" , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP 
    312                CALL iom_put("TL2" , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2 
    313             ENDIF 
     301      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     302         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
     303         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     304         IF( iom_use("TL1")    )  CALL iom_put("TL1"    , zTL1   (:,:,:)       * tmask(:,:,:) )   ! TL1 
     305         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
     306         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron 
     307         IF( ln_fechem ) THEN 
     308            IF( iom_use("Fe2")  ) CALL iom_put("Fe2"    , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+ 
     309            IF( iom_use("FeL2") ) CALL iom_put("FeL2"   , zFeL2  (:,:,:)       * tmask(:,:,:) )   ! FeL2 
     310            IF( iom_use("FeP")  ) CALL iom_put("FeP"    , zFeP   (:,:,:)       * tmask(:,:,:) )   ! FeP 
     311            IF( iom_use("TL2")  ) CALL iom_put("TL2"    , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2 
    314312         ENDIF 
    315313      ENDIF 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    6363   !!---------------------------------------------------------------------- 
    6464   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    65    !! $Id: p4zflx.F90 3294 2012-01-28 16:44:18Z rblod $  
     65   !! $Id$  
    6666   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    6767   !!---------------------------------------------------------------------- 
    6868CONTAINS 
    6969 
    70    SUBROUTINE p4z_flx ( kt ) 
     70   SUBROUTINE p4z_flx ( kt, knt ) 
    7171      !!--------------------------------------------------------------------- 
    7272      !!                     ***  ROUTINE p4z_flx  *** 
     
    8181      !!--------------------------------------------------------------------- 
    8282      ! 
    83       INTEGER, INTENT(in) ::   kt   ! 
     83      INTEGER, INTENT(in) ::   kt, knt   ! 
    8484      ! 
    8585      INTEGER  ::   ji, jj, jm, iind, iindm1 
     
    8989      REAL(wp) ::   zyr_dec, zdco2dt 
    9090      CHARACTER (len=25) :: charout 
    91       REAL(wp), POINTER, DIMENSION(:,:) :: zkgco2, zkgo2, zh2co3, zoflx  
     91      REAL(wp), POINTER, DIMENSION(:,:) :: zkgco2, zkgo2, zh2co3, zoflx, zw2d  
    9292      !!--------------------------------------------------------------------- 
    9393      ! 
     
    101101      !     IS USED TO COMPUTE AIR-SEA FLUX OF CO2 
    102102 
    103       IF( kt /= nit000 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
     103      IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
    104104 
    105105      IF( ln_co2int ) THEN  
     
    130130               zbot  = borat(ji,jj,1) 
    131131               zfact = rhop(ji,jj,1) / 1000. + rtrn 
    132                zdic  = trn(ji,jj,1,jpdic) / zfact 
     132               zdic  = trb(ji,jj,1,jpdic) / zfact 
    133133               zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
    134                zalka = trn(ji,jj,1,jptal) / zfact 
     134               zalka = trb(ji,jj,1,jptal) / zfact 
    135135 
    136136               ! CALCULATE [ALK]([CO3--], [HCO3-]) 
     
    184184            zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj)   ! (mol/L) * (m/s) 
    185185            zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj)                                   ! (mol/L) (m/s) ? 
    186             oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
     186            oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
    187187            ! compute the trend 
    188             tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 
     188            tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 
    189189 
    190190            ! Compute O2 flux  
    191191            zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj)          ! (mol/L) * (m/s) 
    192             zflu16 = trn(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 
     192            zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 
    193193            zoflx(ji,jj) = zfld16 - zflu16 
    194             tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1) 
     194            tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 
    195195         END DO 
    196196      END DO 
    197197 
    198       t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) )      ! Cumulative Total Flux of Carbon 
    199       t_atm_co2_flx = glob_sum( satmco2(:,:) * e1e2t(:,:) )         ! Total atmospheric pCO2 
    200  
     198      t_oce_co2_flx     = glob_sum( oce_co2(:,:) )                    !  Total Flux of Carbon 
     199      t_oce_co2_flx_cum = t_oce_co2_flx_cum + t_oce_co2_flx       !  Cumulative Total Flux of Carbon 
     200!      t_atm_co2_flx     = glob_sum( satmco2(:,:) * e1e2t(:,:) )       ! Total atmospheric pCO2 
     201      t_atm_co2_flx     =  atcco2      ! Total atmospheric pCO2 
     202  
    201203      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    202204         WRITE(charout, FMT="('flx ')") 
     
    205207      ENDIF 
    206208 
    207       IF( ln_diatrc ) THEN 
    208          IF( lk_iomput ) THEN 
    209             CALL iom_put( "Cflx" , oce_co2(:,:) / e1e2t(:,:) / rfact )  
    210             CALL iom_put( "Oflx" , zoflx(:,:) * 1000 * tmask(:,:,1)  ) 
    211             CALL iom_put( "Kg"   , zkgco2(:,:) * tmask(:,:,1) ) 
    212             CALL iom_put( "Dpco2", ( satmco2(:,:) * patm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) ) 
    213             CALL iom_put( "Dpo2" , ( atcox * patm(:,:) - trn(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) ) 
    214          ELSE 
    215             trc2d(:,:,jp_pcs0_2d    ) = oce_co2(:,:) / e1e2t(:,:) / rfact  
     209      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     210         CALL wrk_alloc( jpi, jpj, zw2d )   
     211         IF( iom_use( "Cflx"  ) )  THEN 
     212            zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 
     213            CALL iom_put( "Cflx"     , zw2d )  
     214         ENDIF 
     215         IF( iom_use( "Oflx"  ) )  THEN 
     216            zw2d(:,:) =  zoflx(:,:) * 1000 * tmask(:,:,1) 
     217            CALL iom_put( "Oflx" , zw2d ) 
     218         ENDIF 
     219         IF( iom_use( "Kg"    ) )  THEN 
     220            zw2d(:,:) =  zkgco2(:,:) * tmask(:,:,1) 
     221            CALL iom_put( "Kg"   , zw2d ) 
     222         ENDIF 
     223         IF( iom_use( "Dpco2" ) ) THEN 
     224           zw2d(:,:) = ( satmco2(:,:) * patm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) 
     225           CALL iom_put( "Dpco2" ,  zw2d ) 
     226         ENDIF 
     227         IF( iom_use( "Dpo2" ) )  THEN 
     228           zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 
     229           CALL iom_put( "Dpo2"  , zw2d ) 
     230         ENDIF 
     231         IF( iom_use( "tcflx" ) )  CALL iom_put( "tcflx"    , t_oce_co2_flx * rfact2r )   ! molC/s 
     232         CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum )      ! molC 
     233         ! 
     234         CALL wrk_dealloc( jpi, jpj, zw2d ) 
     235      ELSE 
     236         IF( ln_diatrc ) THEN 
     237            trc2d(:,:,jp_pcs0_2d    ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r  
    216238            trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1)  
    217239            trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1)  
     
    290312      ! 
    291313      oce_co2(:,:)  = 0._wp                ! Initialization of Flux of Carbon 
     314      t_oce_co2_flx = 0._wp 
    292315      t_atm_co2_flx = 0._wp 
    293       t_oce_co2_flx = 0._wp 
    294316      ! 
    295317      CALL p4z_patm( nit000 ) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    2626   !!---------------------------------------------------------------------- 
    2727   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    28    !! $Id: p4zint.F90 3294 2012-01-28 16:44:18Z rblod $  
     28   !! $Id$  
    2929   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3030   !!---------------------------------------------------------------------- 
     
    5656      DO ji = 1, jpi 
    5757         DO jj = 1, jpj 
    58             zvar = trn(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil) 
     58            zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 
    5959            xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 
    6060         END DO 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r4793 r5581  
    6262CONTAINS 
    6363 
    64    SUBROUTINE p4z_lim( kt, jnt ) 
     64   SUBROUTINE p4z_lim( kt, knt ) 
    6565      !!--------------------------------------------------------------------- 
    6666      !!                     ***  ROUTINE p4z_lim  *** 
     
    7272      !!--------------------------------------------------------------------- 
    7373      ! 
    74       INTEGER, INTENT(in)  :: kt, jnt 
     74      INTEGER, INTENT(in)  :: kt, knt 
    7575      ! 
    7676      INTEGER  ::   ji, jj, jk 
    7777      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    7878      REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2 
    79       REAL(wp) ::   z1_trndia, z1_trnphy, ztem1, ztem2, zetot1, zetot2 
     79      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    8080      REAL(wp) ::   zdenom, zratio, zironmin 
    8181      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
     
    9090               ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    9191               !------------------------------------- 
    92                zno3    = trn(ji,jj,jk,jpno3) / 40.e-6 
     92               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    9393               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    9494               zferlim = MIN( zferlim, 7e-11 ) 
    95                trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim ) 
     95               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    9696 
    9797               ! Computation of a variable Ks for iron on diatoms taking into account 
    9898               ! that increasing biomass is made of generally bigger cells 
    9999               !------------------------------------------------ 
    100                zconcd   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    101                zconcd2  = trn(ji,jj,jk,jpdia) - zconcd 
    102                zconcn   = MAX( 0.e0 , trn(ji,jj,jk,jpphy) - xsizephy ) 
    103                zconcn2  = trn(ji,jj,jk,jpphy) - zconcn 
    104                z1_trnphy   = 1. / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    105                z1_trndia   = 1. / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    106  
    107                concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trndia ) 
    108                zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trndia ) 
    109                zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trndia ) 
    110  
    111                concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trnphy ) 
    112                zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trnphy ) 
    113                zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trnphy ) 
     100               zconcd   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     101               zconcd2  = trb(ji,jj,jk,jpdia) - zconcd 
     102               zconcn   = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 
     103               zconcn2  = trb(ji,jj,jk,jpphy) - zconcn 
     104               z1_trbphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     105               z1_trbdia   = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     106 
     107               concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 
     108               zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 
     109               zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 
     110 
     111               concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 
     112               zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 
     113               zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 
    114114 
    115115               ! Michaelis-Menten Limitation term for nutrients Small bacteria 
    116116               ! ------------------------------------------------------------- 
    117                zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trn(ji,jj,jk,jpno3) + concbno3 * trn(ji,jj,jk,jpnh4) ) 
    118                xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concbnh4 * zdenom 
    119                xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * concbno3 * zdenom 
     117               zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 
     118               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 
     119               xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 
    120120               ! 
    121121               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    122                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbnh4 ) 
    123                zlim3    = trn(ji,jj,jk,jpfer) / ( concbfe + trn(ji,jj,jk,jpfer) ) 
    124                zlim4    = trn(ji,jj,jk,jpdoc) / ( xkdoc   + trn(ji,jj,jk,jpdoc) ) 
     122               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 
     123               zlim3    = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 
     124               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) ) 
    125125               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    126126               xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
     
    128128               ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    129129               ! ----------------------------------------------- 
    130                zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trn(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) ) 
    131                xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
    132                xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc0n    * zdenom 
     130               zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 
     131               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
     132               xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n    * zdenom 
    133133               ! 
    134134               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
    135                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 ) 
    136                zratio   = trn(ji,jj,jk,jpnfe) * z1_trnphy  
    137                zironmin = xcoef1 * trn(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
     135               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 
     136               zratio   = trb(ji,jj,jk,jpnfe) * z1_trbphy  
     137               zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
    138138               zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
    139139               xnanopo4(ji,jj,jk) = zlim2 
     
    143143               !   Michaelis-Menten Limitation term for nutrients Diatoms 
    144144               !   ---------------------------------------------- 
    145                zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trn(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) ) 
    146                xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
    147                xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc1d    * zdenom 
     145               zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 
     146               xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
     147               xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d    * zdenom 
    148148               ! 
    149149               zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
    150                zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4  ) 
    151                zlim3    = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
    152                zratio   = trn(ji,jj,jk,jpdfe) * z1_trndia 
    153                zironmin = xcoef1 * trn(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
     150               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4  ) 
     151               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
     152               zratio   = trb(ji,jj,jk,jpdfe) * z1_trbdia 
     153               zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
    154154               zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
    155155               xdiatpo4(ji,jj,jk) = zlim2 
     
    166166         DO jj = 1, jpj 
    167167            DO ji = 1, jpi 
    168                zlim1 =  ( trn(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * concnno3 )    & 
    169                   &   / ( concnno3 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + concnno3 * trn(ji,jj,jk,jpnh4) )  
    170                zlim2  = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 ) 
    171                zlim3  = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) +  5.E-11   ) 
     168               zlim1 =  ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 )    & 
     169                  &   / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) )  
     170               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 
     171               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  5.E-11   ) 
    172172               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
    173173               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
    174                zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) )  
    175                zetot2 = 30. / ( 30. + etot(ji,jj,jk) )  
     174               zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) )  
     175               zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
    176176 
    177177               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
    178178                  &                       * ztem1 / ( 0.1 + ztem1 )                     & 
    179                   &                       * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. )  & 
     179                  &                       * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. )  & 
    180180                  &                       * zetot1 * zetot2               & 
    181181                  &                       * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
     
    187187      END DO 
    188188      ! 
    189       IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN        ! save output diagnostics 
    190         ! 
    191         CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht 
    192         CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
    193         CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
    194         CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    195         CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    196         ! 
     189      ! 
     190      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics 
     191        IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht 
     192        IF( iom_use( "LNnut"   ) ) CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     193        IF( iom_use( "LDnut"   ) ) CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     194        IF( iom_use( "LNFe"    ) ) CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     195        IF( iom_use( "LDFe"    ) ) CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    197196      ENDIF 
    198  
    199197      ! 
    200198      IF( nn_timing == 1 )  CALL timing_stop('p4z_lim') 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r4793 r5581  
    4848CONTAINS 
    4949 
    50    SUBROUTINE p4z_lys( kt ) 
     50   SUBROUTINE p4z_lys( kt, knt ) 
    5151      !!--------------------------------------------------------------------- 
    5252      !!                     ***  ROUTINE p4z_lys  *** 
     
    5959      !!--------------------------------------------------------------------- 
    6060      ! 
    61       INTEGER, INTENT(in) ::   kt ! ocean time step 
     61      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6262      INTEGER  ::   ji, jj, jk, jn 
    6363      REAL(wp) ::   zalk, zdic, zph, zah2 
    6464      REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
    6565      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    66       REAL(wp) ::   zrfact2 
    6766      CHARACTER (len=25) :: charout 
    6867      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss    
     
    8988                  zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    9089                  zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    91                   zdic  = trn(ji,jj,jk,jpdic) / zfact 
    92                   zalka = trn(ji,jj,jk,jptal) / zfact 
     90                  zdic  = trb(ji,jj,jk,jpdic) / zfact 
     91                  zalka = trb(ji,jj,jk,jptal) / zfact 
    9392                  ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    9493                  zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
     
    130129               !       (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 
    131130               !       CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 
    132                zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal) 
     131               zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 
    133132# if defined key_degrad 
    134133               zdispot = zdispot * facvol(ji,jj,jk) 
     
    136135              !  CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 
    137136              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    138               zcaldiss(ji,jj,jk)  = zdispot / rmtss ! calcite dissolution 
    139               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) * rfact 
     137              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
     138              zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    140139              ! 
    141140              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    146145      END DO 
    147146      ! 
    148       IF( ln_diatrc )  THEN 
    149          ! 
    150          IF( lk_iomput ) THEN 
    151             zrfact2 = 1.e3 * rfact2r 
    152             CALL iom_put( "PH"    , -1. * LOG10( hi(:,:,:) )                * tmask(:,:,:) ) 
    153             CALL iom_put( "CO3"   ,        zco3    (:,:,:) * 1e+3           * tmask(:,:,:) ) 
    154             CALL iom_put( "CO3sat",        aksp    (:,:,:) * 1e+3 / calcon  * tmask(:,:,:) ) 
    155             CALL iom_put( "DCAL"  ,        zcaldiss(:,:,:) * zrfact2        * tmask(:,:,:) ) 
    156          ELSE 
    157             trc3d(:,:,:,jp_pcs0_3d    ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) 
    158             trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:)              * tmask(:,:,:) 
    159             trc3d(:,:,:,jp_pcs0_3d + 2) = aksp(:,:,:) / calcon     * tmask(:,:,:) 
    160          ENDIF 
    161          ! 
     147 
     148      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     149         IF( iom_use( "PH"     ) ) CALL iom_put( "PH"    , -1. * LOG10( hi(:,:,:) )          * tmask(:,:,:) ) 
     150         IF( iom_use( "CO3"    ) ) CALL iom_put( "CO3"   , zco3(:,:,:) * 1.e+3               * tmask(:,:,:) ) 
     151         IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", aksp(:,:,:) * 1.e+3 / calcon      * tmask(:,:,:) ) 
     152         IF( iom_use( "DCAL"   ) ) CALL iom_put( "DCAL"  , zcaldiss(:,:,:) * 1.e+3 * rfact2r   * tmask(:,:,:) ) 
     153      ELSE 
     154         trc3d(:,:,:,jp_pcs0_3d    ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) 
     155         trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:)              * tmask(:,:,:) 
     156         trc3d(:,:,:,jp_pcs0_3d + 2) = aksp(:,:,:) / calcon     * tmask(:,:,:) 
    162157      ENDIF 
    163158      ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r4793 r5581  
    6060CONTAINS 
    6161 
    62    SUBROUTINE p4z_meso( kt, jnt ) 
     62   SUBROUTINE p4z_meso( kt, knt ) 
    6363      !!--------------------------------------------------------------------- 
    6464      !!                     ***  ROUTINE p4z_meso  *** 
     
    6868      !! ** Method  : - ??? 
    6969      !!--------------------------------------------------------------------- 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     70      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7171      INTEGER  :: ji, jj, jk 
    7272      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
     
    8383      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    8484      CHARACTER (len=25) :: charout 
    85       REAL(wp) :: zrfact2 
    86       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
     85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
    8786 
    8887      !!--------------------------------------------------------------------- 
     
    9089      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    9190      ! 
    92       IF( ln_diatrc .AND. lk_iomput ) THEN 
     91      IF( lk_iomput ) THEN 
    9392         CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    9493         zgrazing(:,:,:) = 0._wp 
     
    9897         DO jj = 1, jpj 
    9998            DO ji = 1, jpi 
    100                zcompam   = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
     99               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
    101100# if defined key_degrad 
    102101               zstep     = xstep * facvol(ji,jj,jk) 
     
    108107               !  Respiration rates of both zooplankton 
    109108               !  ------------------------------------- 
    110                zrespz2   = resrat2 * zfact * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) )  & 
     109               zrespz2   = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    111110                  &      + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 
    112111 
     
    114113               !  no real reason except that it seems to be more stable and may mimic predation 
    115114               !  --------------------------------------------------------------- 
    116                ztortz2   = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 
     115               ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
    117116               ! 
    118                zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
    119                zcompaz   = MAX( ( trn(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
     117               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
     118               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
    120119               ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    121120               ! it is to predation by mesozooplankton 
    122121               ! ------------------------------------------------------------------------------- 
    123                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
     122               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
    124123                  &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    125                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
     124               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
    126125 
    127126               zfood     = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc  
     
    129128               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    130129               zdenom2   = zdenom / ( zfood + rtrn ) 
    131                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpmes)  
     130               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
    132131 
    133132               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    136135               zgrazpoc  = zgraze2  * xprefpoc * zcompapoc * zdenom2  
    137136 
    138                zgraznf   = zgrazn   * trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn) 
    139                zgrazf    = zgrazd   * trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn) 
    140                zgrazpof  = zgrazpoc * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn) 
     137               zgraznf   = zgrazn   * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 
     138               zgrazf    = zgrazd   * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 
     139               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    141140 
    142141               !  Mesozooplankton flux feeding on GOC 
     
    145144# if ! defined key_kriest 
    146145               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    147                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 
    148                zgrazfffg = zgrazffeg * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     146               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     147               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    149148# endif 
    150149               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     & 
    151                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 
    152                zgrazfffp = zgrazffep * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     150               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     151               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    153152              ! 
    154153# if ! defined key_kriest 
     
    159158              ! diatoms based aggregates are more prone to fractionation 
    160159              ! since they are more porous (marine snow instead of fecal pellets) 
    161               zratio    = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     160              zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    162161              zratio2   = zratio * zratio 
    163162              zfrac     = zproport * grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    164                &          * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)          & 
    165                &          * ( 0.1 + 3.9 * zratio2 / ( 1.**2 + zratio2 ) ) 
    166               zfracfe   = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     163               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          & 
     164               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
     165              zfracfe   = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    167166 
    168167              zgrazffep = zproport * zgrazffep 
     
    186185 
    187186              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    188               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     187              IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
    189188 
    190189              !    Mesozooplankton efficiency 
     
    216215               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 
    217216               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 
    218                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trn(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    219                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    220                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    221                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     217               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     218               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     219               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     220               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    222221               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 
    223222               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
     
    232231               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    233232#if defined key_kriest 
    234               znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     233              znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    235234              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
    236235              tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
     
    249248      END DO 
    250249      ! 
    251       IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN 
    252          zrfact2 = 1.e3 * rfact2r 
    253          CALL iom_put( "GRAZ2", zgrazing(:,:,:) * zrfact2 * tmask(:,:,:) )  ! Total grazing of phyto by zooplankton 
    254          CALL iom_put( "PCAL" , prodcal(:,:,:)  * zrfact2 * tmask(:,:,:) )  ! Calcite production 
     250      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     251         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     252         IF( iom_use( "GRAZ2" ) ) THEN 
     253            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !   Total grazing of phyto by zooplankton 
     254            CALL iom_put( "GRAZ2", zw3d ) 
     255         ENDIF 
     256         IF( iom_use( "PCAL" ) ) THEN 
     257            zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)   !  Calcite production 
     258            CALL iom_put( "PCAL", zw3d )   
     259         ENDIF 
     260         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    255261      ENDIF 
    256262      ! 
     
    261267      ENDIF 
    262268      ! 
    263       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     269      IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    264270      ! 
    265271      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r4793 r5581  
    5959CONTAINS 
    6060 
    61    SUBROUTINE p4z_micro( kt, jnt ) 
     61   SUBROUTINE p4z_micro( kt, knt ) 
    6262      !!--------------------------------------------------------------------- 
    6363      !!                     ***  ROUTINE p4z_micro  *** 
     
    6868      !!--------------------------------------------------------------------- 
    6969      INTEGER, INTENT(in) ::  kt  ! ocean time step 
    70       INTEGER, INTENT(in) ::  jnt  
     70      INTEGER, INTENT(in) ::  knt  
    7171      ! 
    7272      INTEGER  :: ji, jj, jk 
     
    7979      REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    8080      REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
    81       REAL(wp) :: zrfact2 
    82       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
    8382      CHARACTER (len=25) :: charout 
    8483      !!--------------------------------------------------------------------- 
     
    8685      IF( nn_timing == 1 )  CALL timing_start('p4z_micro') 
    8786      ! 
    88       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     87      IF( lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    8988      ! 
    9089      DO jk = 1, jpkm1 
    9190         DO jj = 1, jpj 
    9291            DO ji = 1, jpi 
    93                zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
     92               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
    9493               zstep   = xstep 
    9594# if defined key_degrad 
     
    10099               !  Respiration rates of both zooplankton 
    101100               !  ------------------------------------- 
    102                zrespz = resrat * zfact * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) )  & 
     101               zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  & 
    103102                  &   + resrat * zfact * 3. * nitrfac(ji,jj,jk) 
    104103 
     
    106105               !  no real reason except that it seems to be more stable and may mimic predation. 
    107106               !  --------------------------------------------------------------- 
    108                ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 
    109  
    110                zcompadi  = MIN( MAX( ( trn(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
    111                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
    112                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
     107               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 
     108 
     109               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
     110               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
     111               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
    113112                
    114113               !     Microzooplankton grazing 
     
    118117               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
    119118               zdenom2   = zdenom / ( zfood + rtrn ) 
    120                zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpzoo)  
     119               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
    121120 
    122121               zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2  
     
    124123               zgrazsd   = zgraze  * xpref2d * zcompadi  * zdenom2  
    125124 
    126                zgrazpf   = zgrazp  * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 
    127                zgrazmf   = zgrazm  * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
    128                zgrazsf   = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 
     125               zgrazpf   = zgrazp  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 
     126               zgrazmf   = zgrazm  * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
     127               zgrazsf   = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 
    129128               ! 
    130129               zgraztot  = zgrazp  + zgrazm  + zgrazsd  
     
    137136               !    Various remineralization and excretion terms 
    138137               !    -------------------------------------------- 
    139                zgrasrat  = zgraztotf / ( zgraztot + rtrn ) 
    140                zgrasratn = zgraztotn / ( zgraztot + rtrn ) 
     138               zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztot + rtrn ) 
     139               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn ) 
    141140               zepshert  =  MIN( 1., zgrasratn, zgrasrat / ferat3) 
    142141               zepsherv  = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) 
     
    166165               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 
    167166               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 
    168                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp  * trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 
    169                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trn(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn) 
    170                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trn(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn) 
    171                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trn(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn) 
     167               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp  * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
     168               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 
     169               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
     170               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
    172171               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 
    173172               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
     
    185184#if defined key_kriest 
    186185               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 
    187                                                          - zgrazm * trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     186                                                         - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    188187#endif 
    189188            END DO 
     
    191190      END DO 
    192191      ! 
    193       IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN 
    194          zrfact2 = 1.e3 * rfact2r 
    195          CALL iom_put( "GRAZ1" , zgrazing(:,:,:) * zrfact2 * tmask(:,:,:) )  ! Total grazing of phyto by zooplankton 
     192      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     193         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     194         IF( iom_use( "GRAZ1" ) ) THEN 
     195            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
     196            CALL iom_put( "GRAZ1", zw3d ) 
     197         ENDIF 
     198         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    196199      ENDIF 
    197200      ! 
     
    202205      ENDIF 
    203206      ! 
    204       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     207      IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    205208      ! 
    206209      IF( nn_timing == 1 )  CALL timing_stop('p4z_micro') 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    3939   !!---------------------------------------------------------------------- 
    4040   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    41    !! $Id: p4zmort.F90 3160 2011-11-20 14:27:18Z cetlod $  
     41   !! $Id$  
    4242   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    4343   !!---------------------------------------------------------------------- 
     
    8585         DO jj = 1, jpj 
    8686            DO ji = 1, jpi 
    87                zcompaph = MAX( ( trn(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
     87               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
    8888               zstep    = xstep 
    8989# if defined key_degrad 
     
    9494               !     due to turbulence is negligible. Mortality is also set 
    9595               !     to 0 
    96                zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trn(ji,jj,jk,jpphy) 
     96               zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 
    9797               !     Squared mortality of Phyto similar to a sedimentation term during 
    9898               !     blooms (Doney et al. 1996) 
     
    102102               !     increased when nutrients are limiting phytoplankton growth 
    103103               !     as observed for instance in case of iron limitation. 
    104                ztortp = mprat * xstep * zcompaph / ( xkmort + trn(ji,jj,jk,jpphy) ) * zsizerat 
     104               ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 
    105105 
    106106               zmortp = zrespp + ztortp 
     
    108108               !   Update the arrays TRA which contains the biological sources and sinks 
    109109 
    110                zfactfe = trn(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn) 
    111                zfactch = trn(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn) 
     110               zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 
     111               zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
    112112               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 
    113113               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 
     
    172172            DO ji = 1, jpi 
    173173 
    174                zcompadi = MAX( ( trn(ji,jj,jk,jpdia) - 1e-9), 0. ) 
     174               zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 
    175175 
    176176               !    Aggregation term for diatoms is increased in case of nutrient 
     
    186186               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    187187               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    188                zrespp2 = 1.e6 * zstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trn(ji,jj,jk,jpdia) 
     188               zrespp2 = 1.e6 * zstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    189189 
    190190               !     Phytoplankton mortality.  
    191191               !     ------------------------ 
    192                ztortp2 = mprat2 * zstep * trn(ji,jj,jk,jpdia)  / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi  
     192               ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia)  / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi  
    193193 
    194194               zmortp2 = zrespp2 + ztortp2 
     
    196196               !   Update the arrays tra which contains the biological sources and sinks 
    197197               !   --------------------------------------------------------------------- 
    198                zfactch = trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    199                zfactfe = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    200                zfactsi = trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     198               zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     199               zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     200               zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    201201               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2  
    202202               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r4793 r5581  
    3535   REAL(wp) :: parlux      !: Fraction of shortwave as PAR 
    3636   REAL(wp) :: xparsw                 !: parlux/3 
     37   REAL(wp) :: xsi0r                 !:  1. /rn_si0 
    3738 
    3839   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_par      ! structure of input par 
     
    4243 
    4344   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat   !: PAR for phyto, nano and diat  
     45   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy      !: PAR over 24h in case of diurnal cycle 
    4446   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy           !: averaged PAR in the mixed layer 
     47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
    4548 
    4649   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
     
    5760CONTAINS 
    5861 
    59    SUBROUTINE p4z_opt( kt, jnt ) 
     62   SUBROUTINE p4z_opt( kt, knt ) 
    6063      !!--------------------------------------------------------------------- 
    6164      !!                     ***  ROUTINE p4z_opt  *** 
     
    6770      !!--------------------------------------------------------------------- 
    6871      ! 
    69       INTEGER, INTENT(in) ::   kt, jnt   ! ocean time step 
     72      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step 
    7073      ! 
    7174      INTEGER  ::   ji, jj, jk 
    7275      INTEGER  ::   irgb 
    73       REAL(wp) ::   zchl, zxsi0r 
     76      REAL(wp) ::   zchl 
    7477      REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep 
    75       REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp, zetmp1, zetmp2 
    76       REAL(wp), POINTER, DIMENSION(:,:,:) :: zekg, zekr, zekb, ze0, ze1, ze2, ze3 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 
    7780      !!--------------------------------------------------------------------- 
    7881      ! 
     
    8083      ! 
    8184      ! Allocate temporary workspace 
    82       CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp, zetmp1, zetmp2 )  
    83       CALL wrk_alloc( jpi, jpj, jpk, zekg, zekr, zekb, ze0, ze1, ze2, ze3 ) 
    84  
    85       IF( jnt == 1 .AND. ln_varpar ) CALL p4z_optsbc( kt ) 
     85      CALL wrk_alloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     86      CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 
     87 
     88      IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
    8689 
    8790      !     Initialisation of variables used to compute PAR 
    8891      !     ----------------------------------------------- 
    89       ze1(:,:,jpk) = 0._wp 
    90       ze2(:,:,jpk) = 0._wp 
    91       ze3(:,:,jpk) = 0._wp 
    92  
     92      ze1(:,:,:) = 0._wp 
     93      ze2(:,:,:) = 0._wp 
     94      ze3(:,:,:) = 0._wp 
    9395      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    9496      DO jk = 1, jpkm1                         !  -------------------------------------------------------- 
     
    9799!CDIR NOVERRCHK 
    98100            DO ji = 1, jpi 
    99                zchl = ( trn(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
     101               zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
    100102               zchl = MIN(  10. , MAX( 0.05, zchl )  ) 
    101103               irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
    102104               !                                                          
    103                zekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 
    104                zekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 
    105                zekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 
     105               ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 
     106               ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 
     107               ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 
    106108            END DO 
    107109         END DO 
    108110      END DO 
    109  
    110  
    111111      !                                        !* Photosynthetically Available Radiation (PAR) 
    112112      !                                        !  -------------------------------------- 
    113  
    114       IF( ln_varpar ) THEN 
    115          ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 
    116          ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 
    117          ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 
     113      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
     114         ! 1% of qsr to compute euphotic layer 
     115         zqsr100(:,:) = 0.01 * qsr_mean(:,:)     !  daily mean qsr 
     116         ! 
     117         CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 )  
     118         ! 
     119         DO jk = 1, nksrp       
     120            etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     121            enano    (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     122            ediat    (:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
     123         END DO 
     124         ! 
     125         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     126         ! 
     127         DO jk = 1, nksrp       
     128            etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
     129         END DO 
     130         ! 
    118131      ELSE 
    119          ze1(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 
    120          ze2(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 
    121          ze3(:,:,1) = xparsw         * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 
    122       ENDIF 
    123  
    124 !CDIR NOVERRCHK 
    125       DO jj = 1, jpj 
    126 !CDIR NOVERRCHK 
    127          DO ji = 1, jpi 
    128             zc1 = ze1(ji,jj,1) 
    129             zc2 = ze2(ji,jj,1)  
    130             zc3 = ze3(ji,jj,1) 
    131             etot (ji,jj,1) = (       zc1 +        zc2 +       zc3 ) 
    132             enano(ji,jj,1) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 
    133             ediat(ji,jj,1) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 
    134          END DO 
    135       END DO 
    136  
    137      
    138       DO jk = 2, nksrp       
    139 !CDIR NOVERRCHK 
    140          DO jj = 1, jpj 
    141 !CDIR NOVERRCHK 
    142             DO ji = 1, jpi 
    143                zc1 = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 
    144                zc2 = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 
    145                zc3 = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 
    146                ze1  (ji,jj,jk) = zc1 
    147                ze2  (ji,jj,jk) = zc2 
    148                ze3  (ji,jj,jk) = zc3 
    149                etot (ji,jj,jk) = (       zc1 +        zc2 +       zc3 ) 
    150                enano(ji,jj,jk) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 
    151                ediat(ji,jj,jk) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 
    152             END DO 
    153          END DO 
    154       END DO 
     132         ! 1% of qsr to compute euphotic layer 
     133         zqsr100(:,:) = 0.01 * qsr(:,:) 
     134         ! 
     135         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
     136         ! 
     137         DO jk = 1, nksrp       
     138            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     139            enano(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     140            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
     141         END DO 
     142         etot_ndcy(:,:,:) =  etot(:,:,:)  
     143      ENDIF 
     144 
    155145 
    156146      IF( ln_qsr_bio ) THEN                    !* heat flux accros w-level (used in the dynamics) 
    157147         !                                     !  ------------------------ 
    158          zxsi0r = 1.e0 / rn_si0 
    159          ! 
    160          ze0(:,:,1) = rn_abs * qsr(:,:) 
    161          !                                                    ! surface value : separation in R-G-B + near surface 
    162          IF( ln_varpar ) THEN 
    163             ze0(:,:,1) = ( 1. - 3. * par_varsw(:,:) ) * qsr(:,:) 
    164             ze1(:,:,1) = par_varsw(:,:)               * qsr(:,:)          
    165             ze2(:,:,1) = par_varsw(:,:)               * qsr(:,:) 
    166             ze3(:,:,1) = par_varsw(:,:)               * qsr(:,:) 
    167          ELSE 
    168             ze0(:,:,1) = ( 1. - 3. * xparsw )  * qsr(:,:) 
    169             ze1(:,:,1) = xparsw                * qsr(:,:)          
    170             ze2(:,:,1) = xparsw                * qsr(:,:) 
    171             ze3(:,:,1) = xparsw                * qsr(:,:) 
    172          ENDIF 
     148         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 
     149         ! 
    173150         etot3(:,:,1) =  qsr(:,:) * tmask(:,:,1) 
    174          ! 
    175          ! 
    176151         DO jk = 2, nksrp + 1 
    177 !CDIR NOVERRCHK 
    178             DO jj = 1, jpj 
    179 !CDIR NOVERRCHK 
    180                DO ji = 1, jpi 
    181                   zc0 = ze0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * zxsi0r ) 
    182                   zc1 = ze1(ji,jj,jk-1) * EXP( -zekb(ji,jj,jk-1 ) ) 
    183                   zc2 = ze2(ji,jj,jk-1) * EXP( -zekg(ji,jj,jk-1 ) ) 
    184                   zc3 = ze3(ji,jj,jk-1) * EXP( -zekr(ji,jj,jk-1 ) ) 
    185                   ze0(ji,jj,jk) = zc0 
    186                   ze1(ji,jj,jk) = zc1 
    187                   ze2(ji,jj,jk) = zc2 
    188                   ze3(ji,jj,jk) = zc3 
    189                   etot3(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * tmask(ji,jj,jk) 
    190               END DO 
    191               ! 
    192             END DO 
    193             ! 
    194         END DO 
    195         ! 
    196       ENDIF 
    197  
     152            etot3(:,:,jk) =  ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 
     153         END DO 
     154         !                                     !  ------------------------ 
     155      ENDIF 
    198156      !                                        !* Euphotic depth and level 
    199157      neln(:,:) = 1                            !  ------------------------ 
     
    203161         DO jj = 1, jpj 
    204162           DO ji = 1, jpi 
    205               IF( etot(ji,jj,jk) * tmask(ji,jj,jk) >= 0.0043 * qsr(ji,jj) )  THEN 
     163              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) )  THEN 
    206164                 neln(ji,jj) = jk+1                    ! Euphotic level : 1rst T-level strictly below Euphotic layer 
    207165                 !                                     ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 
     
    211169        END DO 
    212170      END DO 
    213   
     171      ! 
    214172      heup(:,:) = MIN( 300., heup(:,:) ) 
    215  
    216173      !                                        !* mean light over the mixed layer 
    217174      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
    218       zetmp  (:,:)   = 0.e0 
    219175      zetmp1 (:,:)   = 0.e0 
    220176      zetmp2 (:,:)   = 0.e0 
     177      zetmp3 (:,:)   = 0.e0 
     178      zetmp4 (:,:)   = 0.e0 
    221179 
    222180      DO jk = 1, nksrp 
     
    226184            DO ji = 1, jpi 
    227185               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    228                   zetmp  (ji,jj) = zetmp  (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 
    229                   zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 
    230                   zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 
     186                  zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot     (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 
     187                  zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 
     188                  zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
     189                  zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * fse3t(ji,jj,jk) ! production 
    231190                  zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 
    232191               ENDIF 
     
    235194      END DO 
    236195      ! 
    237       emoy(:,:,:) = etot(:,:,:) 
     196      emoy(:,:,:) = etot(:,:,:)       ! remineralisation 
     197      zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
    238198      ! 
    239199      DO jk = 1, nksrp 
     
    244204               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    245205                  z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
    246                   emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 
    247                   enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
    248                   ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
     206                  emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
     207                  zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
     208                  enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 
     209                  ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 
    249210               ENDIF 
    250211            END DO 
    251212         END DO 
    252213      END DO 
    253  
    254       IF( ln_diatrc ) THEN        ! save output diagnostics 
     214      ! 
     215      IF( lk_iomput ) THEN 
     216        IF( knt == nrdttrc ) THEN 
     217           IF( iom_use( "Heup"  ) ) CALL iom_put( "Heup" , heup(:,:  ) * tmask(:,:,1) )  ! euphotic layer deptht 
     218           IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
     219           IF( iom_use( "PAR"   ) ) CALL iom_put( "PAR"  , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
     220        ENDIF 
     221      ELSE 
     222         IF( ln_diatrc ) THEN        ! save output diagnostics 
     223            trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1) 
     224            trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
     225         ENDIF 
     226      ENDIF 
     227      ! 
     228      CALL wrk_dealloc( jpi, jpj,      zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     229      CALL wrk_dealloc( jpi, jpj, jpk, zpar,  ze0, ze1, ze2, ze3 ) 
     230      ! 
     231      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
     232      ! 
     233   END SUBROUTINE p4z_opt 
     234 
     235   SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 )  
     236      !!---------------------------------------------------------------------- 
     237      !!                  ***  routine p4z_opt_par  *** 
     238      !! 
     239      !! ** purpose :   compute PAR of each wavelength (Red-Green-Blue) 
     240      !!                for a given shortwave radiation 
     241      !! 
     242      !!---------------------------------------------------------------------- 
     243      !! * arguments 
     244      INTEGER, INTENT(in)                                       ::  kt            !   ocean time-step 
     245      REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in)              ::  pqsr          !   shortwave 
     246      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout)           ::  pe1 , pe2 , pe3   !  PAR ( R-G-B) 
     247      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL ::  pe0   
     248      !! * local variables 
     249      INTEGER    ::   ji, jj, jk     ! dummy loop indices 
     250      REAL(wp), DIMENSION(jpi,jpj)     ::  zqsr          !   shortwave 
     251      !!---------------------------------------------------------------------- 
     252 
     253      !  Real shortwave 
     254      IF( ln_varpar ) THEN  ;  zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
     255      ELSE                  ;  zqsr(:,:) = xparsw         * pqsr(:,:) 
     256      ENDIF 
     257      ! 
     258      IF( PRESENT( pe0 ) ) THEN     !  W-level 
     259         ! 
     260         pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:)    !   ( 1 - 3 * alpha ) * q 
     261         pe1(:,:,1) = zqsr(:,:)          
     262         pe2(:,:,1) = zqsr(:,:) 
     263         pe3(:,:,1) = zqsr(:,:) 
     264         ! 
     265         DO jk = 2, nksrp + 1 
     266!CDIR NOVERRCHK 
     267            DO jj = 1, jpj 
     268!CDIR NOVERRCHK 
     269               DO ji = 1, jpi 
     270                  pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 
     271                  pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 
     272                  pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 
     273                  pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 
     274               END DO 
     275              ! 
     276            END DO 
     277            ! 
     278         END DO 
    255279        ! 
    256         IF( lk_iomput ) THEN 
    257            IF( jnt == nrdttrc ) THEN 
    258               CALL iom_put( "Heup", heup(:,:  ) * tmask(:,:,1) )  ! euphotic layer deptht 
    259               CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
    260            ENDIF 
    261         ELSE 
    262            trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1)   
    263            trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
    264         ENDIF 
     280      ELSE   ! T- level 
    265281        ! 
    266       ENDIF 
    267       ! 
    268       CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp, zetmp1, zetmp2 ) 
    269       CALL wrk_dealloc( jpi, jpj, jpk, zekg, zekr, zekb, ze0, ze1, ze2, ze3 ) 
    270       ! 
    271       IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
    272       ! 
    273    END SUBROUTINE p4z_opt 
    274  
    275    SUBROUTINE p4z_optsbc( kt ) 
    276       !!---------------------------------------------------------------------- 
    277       !!                  ***  routine p4z_optsbc  *** 
     282        pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 
     283        pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 
     284        pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 
     285        ! 
     286        DO jk = 2, nksrp       
     287!CDIR NOVERRCHK 
     288           DO jj = 1, jpj 
     289!CDIR NOVERRCHK 
     290              DO ji = 1, jpi 
     291                 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -0.5 * ( ekb(ji,jj,jk-1) + ekb(ji,jj,jk) ) ) 
     292                 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -0.5 * ( ekg(ji,jj,jk-1) + ekg(ji,jj,jk) ) ) 
     293                 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -0.5 * ( ekr(ji,jj,jk-1) + ekr(ji,jj,jk) ) ) 
     294              END DO 
     295           END DO 
     296        END DO     
     297        ! 
     298      ENDIF 
     299      !  
     300   END SUBROUTINE p4z_opt_par 
     301 
     302 
     303   SUBROUTINE p4z_opt_sbc( kt ) 
     304      !!---------------------------------------------------------------------- 
     305      !!                  ***  routine p4z_opt_sbc  *** 
    278306      !! 
    279307      !! ** purpose :   read and interpolate the variable PAR fraction 
     
    286314      !!---------------------------------------------------------------------- 
    287315      !! * arguments 
    288       INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     316      INTEGER ,                INTENT(in) ::   kt     ! ocean time step 
    289317 
    290318      !! * local declarations 
     
    299327         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 
    300328            CALL fld_read( kt, 1, sf_par ) 
    301             par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) )/3.0 
     329            par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 
    302330         ENDIF 
    303331      ENDIF 
     
    305333      IF( nn_timing == 1 )  CALL timing_stop('p4z_optsbc') 
    306334      ! 
    307    END SUBROUTINE p4z_optsbc 
     335   END SUBROUTINE p4z_opt_sbc 
    308336 
    309337   SUBROUTINE p4z_opt_init 
     
    349377      ! 
    350378      xparsw = parlux / 3.0 
     379      xsi0r  = 1.e0 / rn_si0 
    351380      ! 
    352381      ! Variable PAR at the surface of the ocean 
     
    374403      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 
    375404      ! 
    376                          etot (:,:,:) = 0._wp 
    377                          enano(:,:,:) = 0._wp 
    378                          ediat(:,:,:) = 0._wp 
    379       IF( ln_qsr_bio )   etot3(:,:,:) = 0._wp 
     405                         ekr      (:,:,:) = 0._wp 
     406                         ekb      (:,:,:) = 0._wp 
     407                         ekg      (:,:,:) = 0._wp 
     408                         etot     (:,:,:) = 0._wp 
     409                         etot_ndcy(:,:,:) = 0._wp 
     410                         enano    (:,:,:) = 0._wp 
     411                         ediat    (:,:,:) = 0._wp 
     412      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
    380413      !  
    381414      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt_init') 
     
    388421      !!                     ***  ROUTINE p4z_opt_alloc  *** 
    389422      !!---------------------------------------------------------------------- 
    390       ALLOCATE( enano(jpi,jpj,jpk), ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
     423      ALLOCATE( ekb(jpi,jpj,jpk)      , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk),   & 
     424        &       enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk), & 
     425        &       etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
    391426         ! 
    392427      IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r4793 r5581  
    6464CONTAINS 
    6565 
    66    SUBROUTINE p4z_prod( kt , jnt ) 
     66   SUBROUTINE p4z_prod( kt , knt ) 
    6767      !!--------------------------------------------------------------------- 
    6868      !!                     ***  ROUTINE p4z_prod  *** 
     
    7474      !!--------------------------------------------------------------------- 
    7575      ! 
    76       INTEGER, INTENT(in) :: kt, jnt 
     76      INTEGER, INTENT(in) :: kt, knt 
    7777      ! 
    7878      INTEGER  ::   ji, jj, jk 
     
    8383      REAL(wp) ::   zpislopen  , zpislope2n 
    8484      REAL(wp) ::   zrum, zcodel, zargu, zval 
    85       REAL(wp) ::   zrfact2 
     85      REAL(wp) ::   zfact 
    8686      CHARACTER (len=25) :: charout 
    87       REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn 
    88       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt    
     87      REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn, zw2d 
     88      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d    
    8989      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd 
    9090      !!--------------------------------------------------------------------- 
     
    129129      END DO 
    130130 
    131       IF( ln_newprod ) THEN 
    132          ! Impact of the day duration on phytoplankton growth 
    133          DO jk = 1, jpkm1 
    134             DO jj = 1 ,jpj 
    135                DO ji = 1, jpi 
    136                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
    137                      zval = MAX( 1., zstrn(ji,jj) ) 
    138                      zval = 1.5 * zval / ( 12. + zval ) 
    139                      zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 
    140                      zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
    141                   ENDIF 
    142                END DO 
    143             END DO 
    144          END DO 
    145       ENDIF 
     131      ! Impact of the day duration on phytoplankton growth 
     132      DO jk = 1, jpkm1 
     133         DO jj = 1 ,jpj 
     134            DO ji = 1, jpi 
     135               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     136                  zval = MAX( 1., zstrn(ji,jj) ) 
     137                  zval = 1.5 * zval / ( 12. + zval ) 
     138                  zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 
     139                  zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
     140               ENDIF 
     141            END DO 
     142         END DO 
     143      END DO 
    146144 
    147145      ! Maximum light intensity 
     
    157155               DO ji = 1, jpi 
    158156                  ! Computation of the P-I slope for nanos and diatoms 
    159                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     157                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    160158                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    161159                      zadap       = xadap * ztn / ( 2.+ ztn ) 
    162                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    163                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     160                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     161                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    164162                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    165163                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    166164                      ! 
    167165                      zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  & 
    168                          &                   * trn(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn) 
     166                         &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    169167                      ! 
    170                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trn(ji,jj,jk,jpdia) + rtrn )   & 
    171                          &                   * trn(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn) 
     168                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
     169                         &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    172170 
    173171                      ! Computation of production function for Carbon 
     
    196194 
    197195                  ! Computation of the P-I slope for nanos and diatoms 
    198                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     196                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    199197                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    200198                      zadap       = ztn / ( 2.+ ztn ) 
    201                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    202                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     199                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     200                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
     201                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
     202                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    203203                      ! 
    204                       zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -0.21 * enano(ji,jj,jk) ) ) 
    205                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    206  
    207                       zpislopen =  zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch)                & 
    208                         &          / ( trn(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
     204                      zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) ) 
     205                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     206 
     207                      zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                & 
     208                        &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
    209209                        &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    210210 
    211                       zpislope2n = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch)                & 
    212                         &          / ( trn(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
     211                      zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                & 
     212                        &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
    213213                        &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    214214 
    215215                      ! Computation of production function for Carbon 
    216216                      !  --------------------------------------------- 
    217                       zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
    218                       zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
     217                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) ) 
     218                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 
    219219 
    220220                      !  Computation of production function for Chlorophyll 
    221221                      !-------------------------------------------------- 
    222                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) * zstrn(ji,jj) ) ) 
    223                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) * zstrn(ji,jj) ) ) 
     222                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
     223                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
    224224                  ENDIF 
    225225               END DO 
     
    252252            DO ji = 1, jpi 
    253253 
    254                 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     254                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    255255                   !    Si/C of diatoms 
    256256                   !    ------------------------ 
     
    258258                   !    Si/C is arbitrariliy increased for very high Si concentrations 
    259259                   !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
    260                   zlim  = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) 
     260                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    261261                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    262262                  zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    263                   zsiborn = trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) 
     263                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    264264                  IF (gphit(ji,jj) < -30 ) THEN 
    265265                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     
    302302!CDIR NOVERRCHK 
    303303            DO ji = 1, jpi 
    304                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     304               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    305305                  !  production terms for nanophyto. 
    306                   zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 
     306                  zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    307307                  zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    308308                  ! 
    309                   zratio = trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
     309                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    310310                  zratio = zratio / fecnm  
    311311                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    313313                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    314314                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    315                   &             * zmax * trn(ji,jj,jk,jpphy) * rfact2 
     315                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    316316                  !  production terms for diatomees 
    317                   zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 
     317                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    318318                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    319319                  ! 
    320                   zratio = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     320                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    321321                  zratio = zratio / fecdm  
    322322                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    324324                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    325325                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
    326                   &             * zmax * trn(ji,jj,jk,jpdia) * rfact2 
     326                  &             * zmax * trb(ji,jj,jk,jpdia) * rfact2 
    327327               ENDIF 
    328328            END DO 
     
    341341                     zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 
    342342                  ENDIF 
    343                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     343                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    344344                     !  production terms for nanophyto. ( chlorophyll ) 
    345345                     znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
     
    365365!CDIR NOVERRCHK 
    366366               DO ji = 1, jpi 
    367                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     367                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    368368                     !  production terms for nanophyto. ( chlorophyll ) 
    369                      znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
    370                      zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trn(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 
     369                     znanotot = enano(ji,jj,jk) 
     370                     zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 
    371371                     zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 
    372372                     zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod            & 
    373                      &                    / ( zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) * znanotot +rtrn ) 
     373                     &                    / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 
    374374                     !  production terms for diatomees ( chlorophyll ) 
    375                      zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 
    376                      zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trn(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 
     375                     zdiattot = ediat(ji,jj,jk) 
     376                     zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 
    377377                     zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 
    378378                     zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod             & 
    379                      &                    / ( zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
     379                     &                    / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
    380380                  ENDIF 
    381381               END DO 
     
    412412     END DO 
    413413 
    414      ! Total primary production per year 
    415      tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    416  
    417      IF( ln_diatrc ) THEN 
    418          ! 
    419          zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s 
    420          IF( lk_iomput ) THEN 
    421            IF( jnt == nrdttrc ) THEN 
    422               CALL iom_put( "PPPHY"  , zprorca (:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by nanophyto 
    423               CALL iom_put( "PPPHY2" , zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by diatom 
    424               CALL iom_put( "PPNEWN" , zpronew (:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by nanophyto 
    425               CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by diatom 
    426               CALL iom_put( "PBSi"   , zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production 
    427               CALL iom_put( "PFeD"   , zprofed (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by diatom 
    428               CALL iom_put( "PFeN"   , zprofen (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by nanophyto 
    429               CALL iom_put( "Mumax"  , prmax(:,:,:) * tmask(:,:,:) )  ! Maximum growth rate 
    430               CALL iom_put( "MuN"    , zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for nanophyto 
    431               CALL iom_put( "MuD"    , zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for diatoms 
    432               CALL iom_put( "LNlight", zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) )  ! light limitation term 
    433               CALL iom_put( "LDlight", zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) )  ! light limitation term 
    434            ENDIF 
    435          ELSE 
    436               trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zrfact2 * tmask(:,:,:) 
    437               trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) 
    438               trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronew (:,:,:) * zrfact2 * tmask(:,:,:) 
    439               trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) 
    440               trc3d(:,:,:,jp_pcs0_3d + 8)  = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) 
    441               trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zrfact2 * tmask(:,:,:) 
     414 
     415    ! Total primary production per year 
     416    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
     417         & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     418 
     419    IF( lk_iomput ) THEN 
     420       IF( knt == nrdttrc ) THEN 
     421          CALL wrk_alloc( jpi, jpj,      zw2d ) 
     422          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     423          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     424          ! 
     425          IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN 
     426              zw3d(:,:,:) = zprorca (:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
     427              CALL iom_put( "PPPHY"  , zw3d ) 
     428              ! 
     429              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
     430              CALL iom_put( "PPPHY2"  , zw3d ) 
     431          ENDIF 
     432          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN 
     433              zw3d(:,:,:) = zpronew (:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
     434              CALL iom_put( "PPNEWN"  , zw3d ) 
     435              ! 
     436              zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by diatomes 
     437              CALL iom_put( "PPNEWD"  , zw3d ) 
     438          ENDIF 
     439          IF( iom_use( "PBSi" ) )  THEN 
     440              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 
     441              CALL iom_put( "PBSi"  , zw3d ) 
     442          ENDIF 
     443          IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) )  THEN 
     444              zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by nanophyto 
     445              CALL iom_put( "PFeN"  , zw3d ) 
     446              ! 
     447              zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by  diatomes 
     448              CALL iom_put( "PFeD"  , zw3d ) 
     449          ENDIF 
     450          IF( iom_use( "Mumax" ) )  THEN 
     451              zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:)   ! Maximum growth rate 
     452              CALL iom_put( "Mumax"  , zw3d ) 
     453          ENDIF 
     454          IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) )  THEN 
     455              zw3d(:,:,:) = zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:)  ! Realized growth rate for nanophyto 
     456              CALL iom_put( "MuN"  , zw3d ) 
     457              ! 
     458              zw3d(:,:,:) =  zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:)  ! Realized growth rate for diatoms 
     459              CALL iom_put( "MuD"  , zw3d ) 
     460          ENDIF 
     461          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN 
     462              zw3d(:,:,:) = zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     463              CALL iom_put( "LNlight"  , zw3d ) 
     464              ! 
     465              zw3d(:,:,:) =  zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     466              CALL iom_put( "LDlight"  , zw3d ) 
     467          ENDIF 
     468          IF( iom_use( "TPP" ) )  THEN 
     469              zw3d(:,:,:) = ( zprorca(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
     470              CALL iom_put( "TPP"  , zw3d ) 
     471          ENDIF 
     472          IF( iom_use( "TPNEW" ) )  THEN 
     473              zw3d(:,:,:) = ( zpronew(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
     474              CALL iom_put( "TPNEW"  , zw3d ) 
     475          ENDIF 
     476          IF( iom_use( "TPBFE" ) )  THEN 
     477              zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:)  ! total biogenic iron production 
     478              CALL iom_put( "TPBFE"  , zw3d ) 
     479          ENDIF 
     480          IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN   
     481             zw2d(:,:) = 0. 
     482             DO jk = 1, jpkm1 
     483               zw2d(:,:) = zw2d(:,:) + zprorca (:,:,jk) * fse3t(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
     484             ENDDO 
     485             CALL iom_put( "INTPPPHY" , zw2d ) 
     486             ! 
     487             zw2d(:,:) = 0. 
     488             DO jk = 1, jpkm1 
     489                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * fse3t(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated  primary produc. by diatom 
     490             ENDDO 
     491             CALL iom_put( "INTPPPHY2" , zw2d ) 
     492          ENDIF 
     493          IF( iom_use( "INTPP" ) ) THEN    
     494             zw2d(:,:) = 0. 
     495             DO jk = 1, jpkm1 
     496                zw2d(:,:) = zw2d(:,:) + ( zprorca(:,:,jk) + zprorcad(:,:,jk) ) * fse3t(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
     497             ENDDO 
     498             CALL iom_put( "INTPP" , zw2d ) 
     499          ENDIF 
     500          IF( iom_use( "INTPNEW" ) ) THEN     
     501             zw2d(:,:) = 0. 
     502             DO jk = 1, jpkm1 
     503                zw2d(:,:) = zw2d(:,:) + ( zpronew(:,:,jk) + zpronewd(:,:,jk) ) * fse3t(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
     504             ENDDO 
     505             CALL iom_put( "INTPNEW" , zw2d ) 
     506          ENDIF 
     507          IF( iom_use( "INTPBFE" ) ) THEN           !   total biogenic iron production  ( vertically integrated ) 
     508             zw2d(:,:) = 0. 
     509             DO jk = 1, jpkm1 
     510                zw2d(:,:) = zw2d(:,:) + ( zprofen(:,:,jk) + zprofed(:,:,jk) ) * fse3t(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bfe prod 
     511             ENDDO 
     512            CALL iom_put( "INTPBFE" , zw2d ) 
     513          ENDIF 
     514          IF( iom_use( "INTPBSI" ) ) THEN           !   total biogenic silica production  ( vertically integrated ) 
     515             zw2d(:,:) = 0. 
     516             DO jk = 1, jpkm1 
     517                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * zysopt(:,:,jk) * fse3t(:,:,jk) * zfact * tmask(:,:,jk)  ! vert integr. bsi prod 
     518             ENDDO 
     519             CALL iom_put( "INTPBSI" , zw2d ) 
     520          ENDIF 
     521          IF( iom_use( "tintpp" ) )  CALL iom_put( "tintpp" , tpp * zfact )  !  global total integrated primary production molC/s 
     522          ! 
     523          CALL wrk_dealloc( jpi, jpj,      zw2d ) 
     524          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
     525       ENDIF 
     526     ELSE 
     527        IF( ln_diatrc ) THEN 
     528           zfact = 1.e+3 * rfact2r 
     529           trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zfact * tmask(:,:,:) 
     530           trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) 
     531           trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronew (:,:,:) * zfact * tmask(:,:,:) 
     532           trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zfact * tmask(:,:,:) 
     533           trc3d(:,:,:,jp_pcs0_3d + 8)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) 
     534           trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zfact * tmask(:,:,:) 
    442535#  if ! defined key_kriest 
    443               trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 
     536           trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:) 
    444537#  endif 
    445          ENDIF 
    446          ! 
    447       ENDIF 
    448  
    449       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     538        ENDIF 
     539     ENDIF 
     540 
     541     IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    450542         WRITE(charout, FMT="('prod')") 
    451543         CALL prt_ctl_trc_info(charout) 
    452544         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    453       ENDIF 
    454       ! 
    455       CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
    456       CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
    457       CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
    458       ! 
    459       IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
    460       ! 
     545     ENDIF 
     546     ! 
     547     CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
     548     CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
     549     CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
     550     ! 
     551     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
     552     ! 
    461553   END SUBROUTINE p4z_prod 
    462554 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r4624 r5581  
    5959CONTAINS 
    6060 
    61    SUBROUTINE p4z_rem( kt, jnt ) 
     61   SUBROUTINE p4z_rem( kt, knt ) 
    6262      !!--------------------------------------------------------------------- 
    6363      !!                     ***  ROUTINE p4z_rem  *** 
     
    6868      !!--------------------------------------------------------------------- 
    6969      ! 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     70      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7171      ! 
    7272      INTEGER  ::   ji, jj, jk 
     
    7878      REAL(wp) ::   zofer2 
    7979#endif 
    80       REAL(wp) ::   zonitr, zstep, zrfact2 
     80      REAL(wp) ::   zonitr, zstep, zfact 
    8181      CHARACTER (len=25) :: charout 
    82       REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac  
    83       REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod 
     82      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac 
     83      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 
    8484      !!--------------------------------------------------------------------- 
    8585      ! 
     
    104104               zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    105105               IF( fsdept(ji,jj,jk) < zdep ) THEN 
    106                   zdepbac(ji,jj,jk) = MIN( 0.7 * ( trn(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 ) 
     106                  zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 
    107107                  ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
    108108               ELSE 
     
    119119            DO ji = 1, jpi 
    120120               ! denitrification factor computed from O2 levels 
    121                nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trn(ji,jj,jk,jpoxy) )    & 
    122                   &                                / ( oxymin + trn(ji,jj,jk,jpoxy) )  ) 
     121               nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    & 
     122                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  ) 
    123123               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
    124124            END DO 
     
    140140               ! Ammonification in oxic waters with oxygen consumption 
    141141               ! ----------------------------------------------------- 
    142                zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trn(ji,jj,jk,jpdoc)  
    143                zolimi(ji,jj,jk) = MIN( ( trn(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
     142               zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     143               zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    144144               ! Ammonification in suboxic waters with denitrification 
    145145               ! ------------------------------------------------------- 
    146                denitr(ji,jj,jk)  = MIN(  ( trn(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
    147                   &                     zremik * nitrfac(ji,jj,jk) * trn(ji,jj,jk,jpdoc)  ) 
     146               denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
     147                  &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
    148148               ! 
    149149               zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
     
    165165               ! below 2 umol/L. Inhibited at strong light  
    166166               ! ---------------------------------------------------------- 
    167                zonitr  =nitrif * zstep * trn(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
    168                denitnh4(ji,jj,jk) = nitrif * zstep * trn(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
     167               zonitr  =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
     168               denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
    169169               ! Update of the tracers trends 
    170170               ! ---------------------------- 
     
    192192               ! ---------------------------------------------------------- 
    193193               zbactfer = 10.e-6 *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    194                   &              * trn(ji,jj,jk,jpfer) / ( 2.5E-10 + trn(ji,jj,jk,jpfer) )    & 
     194                  &              * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) )    & 
    195195                  &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    196196#if defined key_kriest 
     
    228228               ! means a disaggregation constant about 0.5 the value in oxic zones 
    229229               ! ----------------------------------------------------------------- 
    230                zorem  = zremip * trn(ji,jj,jk,jppoc) 
    231                zofer  = zremip * trn(ji,jj,jk,jpsfe) 
     230               zorem  = zremip * trb(ji,jj,jk,jppoc) 
     231               zofer  = zremip * trb(ji,jj,jk,jpsfe) 
    232232#if ! defined key_kriest 
    233                zorem2 = zremip * trn(ji,jj,jk,jpgoc) 
    234                zofer2 = zremip * trn(ji,jj,jk,jpbfe) 
     233               zorem2 = zremip * trb(ji,jj,jk,jpgoc) 
     234               zofer2 = zremip * trb(ji,jj,jk,jpbfe) 
    235235#else 
    236                zorem2 = zremip * trn(ji,jj,jk,jpnum) 
     236               zorem2 = zremip * trb(ji,jj,jk,jpnum) 
    237237#endif 
    238238 
     
    272272               ! Remineralization rate of BSi depedant on T and saturation 
    273273               ! --------------------------------------------------------- 
    274                zsatur   = ( sio3eq(ji,jj,jk) - trn(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
     274               zsatur   = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
    275275               zsatur   = MAX( rtrn, zsatur ) 
    276276               zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
     
    287287               zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 
    288288               zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 
    289                zosil    = zsiremin * trn(ji,jj,jk,jpgsi) 
     289               zosil    = zsiremin * trb(ji,jj,jk,jpgsi) 
    290290               ! 
    291291               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 
     
    315315      END DO 
    316316 
    317       IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN 
    318           zrfact2 = 1.e3 * rfact2r 
    319           CALL iom_put( "REMIN" , zolimi(:,:,:) * tmask(:,:,:) * zrfact2 )  ! Remineralisation rate 
    320           CALL iom_put( "DENIT" , denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zrfact2  )  ! Denitrification 
    321       ENDIF 
     317      IF( knt == nrdttrc ) THEN 
     318          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     319          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     320          ! 
     321          IF( iom_use( "REMIN" ) )  THEN 
     322              zw3d(:,:,:) = zolimi(:,:,:) * tmask(:,:,:) * zfact !  Remineralisation rate 
     323              CALL iom_put( "REMIN"  , zw3d ) 
     324          ENDIF 
     325          IF( iom_use( "DENIT" ) )  THEN 
     326              zw3d(:,:,:) = denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zfact ! Denitrification 
     327              CALL iom_put( "DENIT"  , zw3d ) 
     328          ENDIF 
     329          ! 
     330          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
     331       ENDIF 
    322332 
    323333      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    8080   REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 
    8181 
    82    REAL(wp) :: ryyss                    !: number of seconds per year  
    8382 
    8483   !!* Substitution 
     
    8685   !!---------------------------------------------------------------------- 
    8786   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    88    !! $Header:$  
     87   !! $Id$  
    8988   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    9089   !!---------------------------------------------------------------------- 
     
    118117         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 
    119118            CALL fld_read( kt, 1, sf_dust ) 
    120             dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     119            IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 
     120               dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     121            ELSE 
     122               dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 
     123            ENDIF 
    121124         ENDIF 
    122125      ENDIF 
     
    137140            DO jj = 1, jpj 
    138141               DO ji = 1, jpi 
    139                   zcoef = ryyss * cvol(ji,jj,1)  
     142                  zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
    140143                  rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    141144                     &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     
    188191      INTEGER  :: ierr, ierr1, ierr2, ierr3 
    189192      INTEGER  :: ios                 ! Local integer output status for namelist read 
     193      INTEGER  :: ik50                !  last level where depth less than 50 m 
     194      INTEGER  :: isrow             ! index for ORCA1 starting row 
    190195      REAL(wp) :: zexpide, zdenitide, zmaskt 
    191196      REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep  
     
    208213      IF( nn_timing == 1 )  CALL timing_start('p4z_sbc_init') 
    209214      ! 
    210       ryyss   = nyear_len(1) * rday    ! number of seconds per year and per month 
    211       ! 
    212215      !                            !* set file information 
    213216      REWIND( numnatp_ref )              ! Namelist nampissbc in reference namelist : Pisces external sources of nutrients 
     
    219222902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 
    220223      IF(lwm) WRITE ( numonp, nampissbc ) 
     224 
     225      IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 
     226         IF(lwp) THEN 
     227            WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 
     228            WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 
     229            WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 
     230            ln_ironice = .FALSE. 
     231         ENDIF 
     232      ENDIF 
    221233 
    222234      IF(lwp) THEN 
     
    250262      ENDIF 
    251263 
     264      ! set the number of level over which river runoffs are applied  
     265      ! online configuration : computed in sbcrnf 
     266      IF( lk_offline ) THEN 
     267        nk_rnf(:,:) = 1 
     268        h_rnf (:,:) = fsdept(:,:,1) 
     269      ENDIF 
     270 
    252271      ! dust input from the atmosphere 
    253272      ! ------------------------------ 
     
    361380         rivalkinput = 0._wp 
    362381      END IF  
    363  
    364382      ! nutrient input from dust 
    365383      ! ------------------------ 
     
    413431         CALL iom_close( numiron ) 
    414432         ! 
    415          DO jk = 1, 5 
     433         ik50 = 5        !  last level where depth less than 50 m 
     434         DO jk = jpkm1, 1, -1 
     435            IF( gdept_1d(jk) > 50. )  ik50 = jk - 1 
     436         END DO 
     437         IF (lwp) WRITE(numout,*) 
     438         IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ',  ik50,' ', gdept_1d(ik50+1) 
     439         IF (lwp) WRITE(numout,*) 
     440         DO jk = 1, ik50 
    416441            DO jj = 2, jpjm1 
    417442               DO ji = fs_2, fs_jpim1 
     
    424449            END DO 
    425450         END DO 
    426          IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 
    427             ii0 = 176   ;   ii1 =  176        ! Southern Island : Kerguelen 
    428             ij0 =  37   ;   ij1 =   37  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    429             ! 
    430             ii0 = 119   ;   ii1 =  119        ! South Georgia 
    431             ij0 =  29   ;   ij1 =   29  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    432             ! 
    433             ii0 = 111   ;   ii1 =  111        ! Falklands 
    434             ij0 =  35   ;   ij1 =   35  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    435             ! 
    436             ii0 = 168   ;   ii1 =  168        ! Crozet 
    437             ij0 =  40   ;   ij1 =   40  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    438             ! 
    439             ii0 = 119   ;   ii1 =  119        ! South Orkney 
    440             ij0 =  28   ;   ij1 =   28  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    441             ! 
    442             ii0 = 140   ;   ii1 =  140        ! Bouvet Island 
    443             ij0 =  33   ;   ij1 =   33  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    444             ! 
    445             ii0 = 178   ;   ii1 =  178        ! Prince edwards 
    446             ij0 =  34   ;   ij1 =   34  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    447             ! 
    448             ii0 =  43   ;   ii1 =   43        ! Balleny islands 
    449             ij0 =  21   ;   ij1 =   21  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    450          ENDIF 
     451         ! 
    451452         CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
     453         ! 
    452454         DO jk = 1, jpk 
    453455            DO jj = 1, jpj 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    • Property svn:keywords set to Id
    r4793 r5581  
    2121   USE p4zopt          !  optical model 
    2222   USE p4zlim          !  Co-limitations of differents nutrients 
    23    USE p4zrem          !  Remineralisation of organic matter 
    2423   USE p4zsbc          !  External source of nutrients  
    2524   USE p4zint          !  interpolation and computation of various fields 
     
    3029   PRIVATE 
    3130 
    32    PUBLIC   p4z_sed    
     31   PUBLIC   p4z_sed   
     32   PUBLIC   p4z_sed_alloc 
     33  
    3334 
    3435   !! * Module variables 
    35    REAL(wp) :: ryyss                    !: number of seconds per year  
    36    REAL(wp) :: r1_ryyss                 !: inverse of ryyss 
    37    REAL(wp) :: rmtss                    !: number of seconds per month 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot    !: Nitrogen fixation  
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:  ) :: sdenit     !: Nitrate reduction in the sediments 
    3838   REAL(wp) :: r1_rday                  !: inverse of rday 
    39  
    40    INTEGER ::  numnit   
    41  
    4239 
    4340   !!* Substitution 
     
    4542   !!---------------------------------------------------------------------- 
    4643   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    47    !! $Header:$  
     44   !! $Id$  
    4845   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    4946   !!---------------------------------------------------------------------- 
    5047CONTAINS 
    5148 
    52    SUBROUTINE p4z_sed( kt, jnt ) 
     49   SUBROUTINE p4z_sed( kt, knt ) 
    5350      !!--------------------------------------------------------------------- 
    5451      !!                     ***  ROUTINE p4z_sed  *** 
     
    6158      !!--------------------------------------------------------------------- 
    6259      ! 
    63       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     60      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6461      INTEGER  ::   ji, jj, jk, ikt 
    6562#if ! defined key_sed 
     
    7269      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    7370      REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
    74       REAL(wp) ::  zrdenittot, zsdenittot, znitrpottot 
    7571      ! 
    7672      CHARACTER (len=25) :: charout 
    77       REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3, zwork4 
     73      REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3 
    7874      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    7975      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    80       REAL(wp), POINTER, DIMENSION(:,:,:) :: znitrpot, zirondep, zsoufer 
     76      REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 
    8177      !!--------------------------------------------------------------------- 
    8278      ! 
    8379      IF( nn_timing == 1 )  CALL timing_start('p4z_sed') 
    8480      ! 
    85       IF( kt == nittrc000 .AND. jnt == 1 )  THEN 
    86          ryyss    = nyear_len(1) * rday    ! number of seconds per year and per month 
    87          rmtss    = ryyss / raamo 
    88          r1_rday  = 1. / rday 
    89          r1_ryyss = 1. / ryyss 
    90          IF( ln_check_mass .AND. lwp)  & 
    91            &  CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    92       ENDIF 
     81      IF( kt == nittrc000 .AND. knt == 1 )   r1_rday  = 1. / rday 
    9382      ! 
    9483      ! Allocate temporary workspace 
    95       CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4, zbureff ) 
     84      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    9685      CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    97       CALL wrk_alloc( jpi, jpj, jpk, znitrpot, zsoufer ) 
     86      CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 
    9887 
    9988      zdenit2d(:,:) = 0.e0 
    10089      zbureff (:,:) = 0.e0 
     90      zwork1  (:,:) = 0.e0 
     91      zwork2  (:,:) = 0.e0 
     92      zwork3  (:,:) = 0.e0 
    10193 
    10294      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    110102               zdep    = rfact2 / fse3t(ji,jj,1) 
    111103               zwflux  = fmmflx(ji,jj) / 1000._wp 
    112                zfminus = MIN( 0._wp, -zwflux ) * trn(ji,jj,1,jpfer) * zdep 
     104               zfminus = MIN( 0._wp, -zwflux ) * trb(ji,jj,1,jpfer) * zdep 
    113105               zfplus  = MAX( 0._wp, -zwflux ) * icefeinput * zdep 
    114106               zironice(ji,jj) =  zfplus + zfminus 
     
    116108         END DO 
    117109         ! 
    118          trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:)  
    119          !                                               
    120          IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   & 
     110         tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:)  
     111         !  
     112         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) )   & 
    121113            &   CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice 
     114         ! 
    122115         CALL wrk_dealloc( jpi, jpj, zironice ) 
    123116         !                                               
     
    132125         !                                              ! Iron and Si deposition at the surface 
    133126         IF( ln_solub ) THEN 
    134             zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
     127            zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
    135128         ELSE 
    136             zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 55.85 * rmtss ) + 3.e-10 * r1_ryyss  
     129            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
    137130         ENDIF 
    138          zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 28.1  * rmtss ) 
    139          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) / po4r  
     131         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 28.1  
     132         zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / fse3t(:,:,1) / 31. / po4r  
    140133         !                                              ! Iron solubilization of particles in the water column 
    141134         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
     
    145138         END DO 
    146139         !                                              ! Iron solubilization of particles in the water column 
    147          trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep   (:,:) 
    148          trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep  (:,:) 
    149          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)  
    150          !                                               
    151          IF( ln_diatrc ) THEN 
    152             zfact = 1.e+3 * rfact2r 
    153             IF( lk_iomput ) THEN 
    154                IF( jnt == nrdttrc ) THEN 
    155                   CALL iom_put( "Irondep", zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron 
    156                   CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday )  * tmask(:,:,1) ) ! dust concentration at surface 
    157                ENDIF 
    158             ELSE 
    159                trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * zfact * fse3t(:,:,1) * tmask(:,:,1) 
     140         tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep   (:,:) 
     141         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
     142         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:)  
     143         !  
     144         IF( lk_iomput ) THEN 
     145            IF( knt == nrdttrc ) THEN 
     146                IF( iom_use( "Irondep" ) )   & 
     147                &  CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron 
     148                IF( iom_use( "pdust" ) )   & 
     149                &  CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday )  * tmask(:,:,1) ) ! dust concentration at surface 
    160150            ENDIF 
     151         ELSE                                     
     152            IF( ln_diatrc )  & 
     153              &  trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 
    161154         ENDIF 
    162155         CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep ) 
     
    168161      ! ---------------------------------------------------------- 
    169162      IF( ln_river ) THEN 
    170          trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 
    171          trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 
    172          trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 
    173          trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 
    174          trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 
    175          trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 
     163         DO jj = 1, jpj 
     164            DO ji = 1, jpi 
     165               DO jk = 1, nk_rnf(ji,jj) 
     166                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) +  rivdip(ji,jj) * rfact2 
     167                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) +  rivdin(ji,jj) * rfact2 
     168                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) +  rivdic(ji,jj) * 5.e-5 * rfact2 
     169                  tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) +  rivdsi(ji,jj) * rfact2 
     170                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) +  rivdic(ji,jj) * rfact2 
     171                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) +  ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 
     172               ENDDO 
     173            ENDDO 
     174         ENDDO 
    176175      ENDIF 
    177176       
     
    179178      ! ---------------------------------------------------------- 
    180179      IF( ln_ndepo ) THEN 
    181          trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2 
    182          trn(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 
     180         tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 
     181         tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 
    183182      ENDIF 
    184183 
     
    186185      ! ------------------------------------------------------ 
    187186      IF( ln_ironsed ) THEN 
    188          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     187         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
    189188         ! 
    190          IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   & 
     189         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
    191190            &   CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 
    192191      ENDIF 
     
    195194      ! ------------------------------------------------------ 
    196195      IF( ln_hydrofe ) THEN 
    197          trn(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     196         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
    198197         ! 
    199          IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc )   & 
     198         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
    200199            &   CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 
    201200      ENDIF 
    202  
    203201 
    204202      ! OA: Warning, the following part is necessary, especially with Kriest 
     
    224222              ikt = mbkt(ji,jj) 
    225223# if defined key_kriest 
    226               zflx =    trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)    * 1E3 * 1E6 / 1E4 
     224              zflx =    trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)    * 1E3 * 1E6 / 1E4 
    227225# else 
    228               zflx = (  trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    229                 &     + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
     226              zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     227                &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
    230228#endif 
    231229              zflx  = LOG10( MAX( 1E-3, zflx ) ) 
    232               zo2   = LOG10( MAX( 10. , trn(ji,jj,ikt,jpoxy) * 1E6 ) ) 
    233               zno3  = LOG10( MAX( 1.  , trn(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
     230              zo2   = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 
     231              zno3  = LOG10( MAX( 1.  , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
    234232              zdep  = LOG10( fsdepw(ji,jj,ikt+1) ) 
    235233              zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    & 
     
    237235              zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
    238236              ! 
    239               zflx = (  trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    240                 &     + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
     237              zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     238                &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
    241239              zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
    242240           ENDIF 
     
    250248      DO jj = 1, jpj 
    251249         DO ji = 1, jpi 
    252             ikt = mbkt(ji,jj)  
     250            IF( tmask(ji,jj,1) == 1 ) THEN 
     251               ikt = mbkt(ji,jj)  
    253252# if defined key_kriest 
    254             zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 
    255             zwork2(ji,jj) = trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 
     253               zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 
     254               zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 
    256255# else 
    257             zwork1(ji,jj) = trn(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
    258             zwork2(ji,jj) = trn(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
     256               zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
     257               zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
    259258# endif 
    260             ! For calcite, burial efficiency is made a function of saturation 
    261             zfactcal      = MIN( excess(ji,jj,ikt), 0.2 ) 
    262             zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    263             zwork3(ji,jj) = trn(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
     259               ! For calcite, burial efficiency is made a function of saturation 
     260               zfactcal      = MIN( excess(ji,jj,ikt), 0.2 ) 
     261               zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
     262               zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
     263            ENDIF 
    264264         END DO 
    265265      END DO 
     
    279279         DO ji = 1, jpi 
    280280            ikt  = mbkt(ji,jj) 
    281             zdep = xstep / fse3t(ji,jj,ikt) 
     281            zdep = xstep / fse3t(ji,jj,ikt)  
    282282            zws4 = zwsbio4(ji,jj) * zdep 
    283283            zwsc = zwscal (ji,jj) * zdep 
    284284# if defined key_kriest 
    285             zsiloss = trn(ji,jj,ikt,jpgsi) * zws4 
     285            zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 
    286286# else 
    287             zsiloss = trn(ji,jj,ikt,jpgsi) * zwsc 
     287            zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 
    288288# endif 
    289             zcaloss = trn(ji,jj,ikt,jpcal) * zwsc 
     289            zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 
    290290            ! 
    291             trn(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss 
    292             trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss 
     291            tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 
     292            tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 
    293293#if ! defined key_sed 
    294             trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
     294            tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
    295295            zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 
    296296            zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    297297            zrivalk  =  1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 
    298             trn(ji,jj,ikt,jptal) =  trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
    299             trn(ji,jj,ikt,jpdic) =  trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
     298            tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
     299            tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
    300300#endif 
    301301         END DO 
     
    304304      DO jj = 1, jpj 
    305305         DO ji = 1, jpi 
    306             ikt     = mbkt(ji,jj) 
    307             zdep    = xstep / fse3t(ji,jj,ikt) 
     306            ikt  = mbkt(ji,jj) 
     307            zdep = xstep / fse3t(ji,jj,ikt)  
    308308            zws4 = zwsbio4(ji,jj) * zdep 
    309309            zws3 = zwsbio3(ji,jj) * zdep 
    310310            zrivno3 = 1. - zbureff(ji,jj) 
    311311# if ! defined key_kriest 
    312             trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4 
    313             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3 
    314             trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4 
    315             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3 
    316             zwstpoc              =  trn(ji,jj,ikt,jpgoc) * zws4 + trn(ji,jj,ikt,jppoc) * zws3  
     312            tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4  
     313            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
     314            tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 
     315            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
     316            zwstpoc              = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    317317# else 
    318             trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4 
    319             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3 
    320             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3 
    321             zwstpoc = trn(ji,jj,ikt,jppoc) * zws3  
     318            tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4  
     319            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
     320            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
     321            zwstpoc = trb(ji,jj,ikt,jppoc) * zws3  
    322322# endif 
    323323 
     
    325325            ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    326326            ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
    327             zpdenit  = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     327            zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
    328328            z1pdenit = zwstpoc * zrivno3 - zpdenit 
    329             zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    330             zdenitt = MIN(  0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
    331             trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
    332             trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
    333             trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
    334             trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
    335             trn(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut 
    336             trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
    337             trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    338             zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 
     329            zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     330            zdenitt = MIN(  0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
     331            tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
     332            tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
     333            tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
     334            tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
     335            tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 
     336            tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
     337            tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
     338            sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 
    339339#endif 
    340340         END DO 
     
    356356#endif 
    357357               ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
    358                ztrpo4 = trn  (ji,jj,jk,jppo4) / ( concnnh4   + trn  (ji,jj,jk,jppo4) )  
    359                zlight =  ( 1.- EXP( -etot(ji,jj,jk) / diazolight ) )  
    360                znitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
     358               ztrpo4 = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
     359               zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) )  
     360               nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
    361361                 &         *  zfact * MIN( ztrfer, ztrpo4 ) * zlight 
    362362               zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) 
     
    370370         DO jj = 1, jpj 
    371371            DO ji = 1, jpi 
    372                zfact = znitrpot(ji,jj,jk) * nitrfix 
    373                trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) +             zfact 
    374                trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3      * zfact 
    375                trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit     * zfact  
    376                trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) & 
    377                &                     * 0.002 * trn(ji,jj,jk,jpdoc) * rfact2 / rday 
    378                trn(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     372               zfact = nitrpot(ji,jj,jk) * nitrfix 
     373               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
     374               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
     375               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
     376               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
     377               &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
     378               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
    379379           END DO 
    380380         END DO  
    381381      END DO 
    382382 
    383   
    384       IF( ln_check_mass ) THEN 
    385         ! Global budget of N SMS : denitrification in the water column and in the sediment 
    386          !                          nitrogen fixation by the diazotrophs 
    387          ! -------------------------------------------------------------------------------- 
    388          zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
    389          zsdenittot   = glob_sum ( zwork4(:,:)   * e1e2t(:,:) ) 
    390          znitrpottot  = glob_sum ( znitrpot(:,:,:) * nitrfix              * cvol(:,:,:) ) 
    391          IF( kt == nitend .AND. jnt == nrdttrc ) THEN 
    392             zfact = 1.e+3 * rfact2r * rno3 * ryyss * 14. / 1e12 
    393             IF(lwp) WRITE(numnit,9100) ndastp, znitrpottot * nitrfix * zfact, zrdenittot * zfact , zsdenittot * zfact 
     383      IF( lk_iomput ) THEN 
     384         IF( knt == nrdttrc ) THEN 
     385            zfact = 1.e+3 * rfact2r * rno3  !  conversion from molC/l/kt  to molN/m3/s 
     386            IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) )  ! nitrogen fixation  
     387            IF( iom_use("INTNFIX") ) THEN   ! nitrogen fixation rate in ocean ( vertically integrated ) 
     388               zwork1(:,:) = 0. 
     389               DO jk = 1, jpkm1 
     390                 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 
     391               ENDDO 
     392               CALL iom_put( "INTNFIX" , zwork1 )  
     393            ENDIF 
    394394         ENDIF 
    395        ENDIF 
    396       ! 
    397       IF( ln_diatrc ) THEN 
    398          zfact = 1.e+3 * rfact2r 
    399          IF( lk_iomput ) THEN 
    400             IF( jnt == nrdttrc ) THEN 
    401                CALL iom_put( "Nfix"  , znitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) )  ! nitrogen fixation  
    402                CALL iom_put( "Sdenit", zwork4(:,:)               * rno3 * zfact * tmask(:,:,1) )  ! Nitrate reduction in the sediments 
    403             ENDIF 
    404          ELSE 
    405             trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * zfact * fse3t(:,:,1) * tmask(:,:,1) 
    406          ENDIF 
     395      ELSE 
     396         IF( ln_diatrc )  & 
     397            &  trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 
    407398      ENDIF 
    408399      ! 
     
    410401         WRITE(charout, fmt="('sed ')") 
    411402         CALL prt_ctl_trc_info(charout) 
    412          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
    413       ENDIF 
    414       ! 
    415       CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zwork4, zbureff ) 
     403         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
     404      ENDIF 
     405      ! 
     406      CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    416407      CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    417       CALL wrk_dealloc( jpi, jpj, jpk, znitrpot, zsoufer ) 
     408      CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 
    418409      ! 
    419410      IF( nn_timing == 1 )  CALL timing_stop('p4z_sed') 
     
    422413      ! 
    423414   END SUBROUTINE p4z_sed 
     415 
     416 
     417   INTEGER FUNCTION p4z_sed_alloc() 
     418      !!---------------------------------------------------------------------- 
     419      !!                     ***  ROUTINE p4z_sed_alloc  *** 
     420      !!---------------------------------------------------------------------- 
     421      ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 
     422      ! 
     423      IF( p4z_sed_alloc /= 0 )   CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 
     424      ! 
     425   END FUNCTION p4z_sed_alloc 
     426 
    424427 
    425428#else 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r4793 r5581  
    4141#endif 
    4242 
    43    INTEGER  :: iksed  = 10 
     43   INTEGER  :: ik100 
    4444 
    4545#if  defined key_kriest 
     
    7979   !!---------------------------------------------------------------------- 
    8080 
    81    SUBROUTINE p4z_sink ( kt, jnt ) 
     81   SUBROUTINE p4z_sink ( kt, knt ) 
    8282      !!--------------------------------------------------------------------- 
    8383      !!                     ***  ROUTINE p4z_sink  *** 
     
    8888      !! ** Method  : - ??? 
    8989      !!--------------------------------------------------------------------- 
    90       INTEGER, INTENT(in) :: kt, jnt 
     90      INTEGER, INTENT(in) :: kt, knt 
    9191      INTEGER  ::   ji, jj, jk, jit 
    9292      INTEGER  ::   iiter1, iiter2 
     
    9494      REAL(wp) ::   zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3 
    9595      REAL(wp) ::   zfact, zwsmax, zmax, zstep 
    96       REAL(wp) ::   zrfact2 
    97       INTEGER  ::   ik1 
    9896      CHARACTER (len=25) :: charout 
     97      REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 
     98      REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
    9999      !!--------------------------------------------------------------------- 
    100100      ! 
     
    199199               zfact = zstep * xdiss(ji,jj,jk) 
    200200               !  Part I : Coagulation dependent on turbulence 
    201                zagg1 = 25.9  * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 
    202                zagg2 = 4452. * zfact * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 
     201               zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     202               zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    203203 
    204204               ! Part II : Differential settling 
    205205 
    206206               !  Aggregation of small into large particles 
    207                zagg3 =  47.1 * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc) 
    208                zagg4 =  3.3  * zstep * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc) 
     207               zagg3 =  47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
     208               zagg4 =  3.3  * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    209209 
    210210               zagg   = zagg1 + zagg2 + zagg3 + zagg4 
    211                zaggfe = zagg * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     211               zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    212212 
    213213               ! Aggregation of DOC to POC :  
     
    215215               ! 2nd term is shear aggregation of DOC-POC 
    216216               ! 3rd term is differential settling of DOC-POC 
    217                zaggdoc  = ( ( 0.369 * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact       & 
    218                &            + 2.4 * zstep * trn(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc) 
     217               zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
     218               &            + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
    219219               ! transfer of DOC to GOC :  
    220220               ! 1st term is shear aggregation 
    221221               ! 2nd term is differential settling  
    222                zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trn(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc) 
     222               zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    223223               ! tranfer of DOC to POC due to brownian motion 
    224                zaggdoc3 =  ( 5095. * trn(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc) 
     224               zaggdoc3 =  ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 
    225225 
    226226               !  Update the trends 
     
    235235      END DO 
    236236 
    237      ! Total primary production per year 
    238      t_oce_co2_exp = t_oce_co2_exp + glob_sum( ( sinking(:,:,iksed+1) + sinking2(:,:,iksed+1) ) * e1e2t(:,:) * tmask(:,:,1) ) 
     237 
     238     ! Total carbon export per year 
     239     IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
     240        &   t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
    239241     ! 
    240      IF( ln_diatrc ) THEN 
    241          zrfact2 = 1.e3 * rfact2r 
    242          ik1  = iksed + 1 
    243          IF( lk_iomput ) THEN 
    244            IF( jnt == nrdttrc ) THEN 
    245               CALL iom_put( "EPC100"  , ( sinking(:,:,ik1) + sinking2(:,:,ik1) ) * zrfact2 * tmask(:,:,1) ) ! Export of carbon at 100m 
    246               CALL iom_put( "EPFE100" , ( sinkfer(:,:,ik1) + sinkfer2(:,:,ik1) ) * zrfact2 * tmask(:,:,1) ) ! Export of iron at 100m 
    247               CALL iom_put( "EPCAL100",   sinkcal(:,:,ik1)                       * zrfact2 * tmask(:,:,1) ) ! Export of calcite  at 100m 
    248               CALL iom_put( "EPSI100" ,   sinksil(:,:,ik1)                       * zrfact2 * tmask(:,:,1) ) ! Export of biogenic silica at 100m 
    249            ENDIF 
    250          ELSE 
    251            trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik1) * zrfact2 * tmask(:,:,1) 
    252            trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik1) * zrfact2 * tmask(:,:,1) 
    253            trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik1) * zrfact2 * tmask(:,:,1) 
    254            trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik1) * zrfact2 * tmask(:,:,1) 
    255            trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik1) * zrfact2 * tmask(:,:,1) 
    256            trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik1) * zrfact2 * tmask(:,:,1) 
     242     IF( lk_iomput ) THEN 
     243       IF( knt == nrdttrc ) THEN 
     244          CALL wrk_alloc( jpi, jpj,      zw2d ) 
     245          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     246          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     247          ! 
     248          IF( iom_use( "EPC100" ) )  THEN 
     249              zw2d(:,:) = ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of carbon at 100m 
     250              CALL iom_put( "EPC100"  , zw2d ) 
     251          ENDIF 
     252          IF( iom_use( "EPFE100" ) )  THEN 
     253              zw2d(:,:) = ( sinkfer(:,:,ik100) + sinkfer2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of iron at 100m 
     254              CALL iom_put( "EPFE100"  , zw2d ) 
     255          ENDIF 
     256          IF( iom_use( "EPCAL100" ) )  THEN 
     257              zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 
     258              CALL iom_put( "EPCAL100"  , zw2d ) 
     259          ENDIF 
     260          IF( iom_use( "EPSI100" ) )  THEN 
     261              zw2d(:,:) =  sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 
     262              CALL iom_put( "EPSI100"  , zw2d ) 
     263          ENDIF 
     264          IF( iom_use( "EXPC" ) )  THEN 
     265              zw3d(:,:,:) = ( sinking(:,:,:) + sinking2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     266              CALL iom_put( "EXPC"  , zw3d ) 
     267          ENDIF 
     268          IF( iom_use( "EXPFE" ) )  THEN 
     269              zw3d(:,:,:) = ( sinkfer(:,:,:) + sinkfer2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of iron  
     270              CALL iom_put( "EXPFE"  , zw3d ) 
     271          ENDIF 
     272          IF( iom_use( "EXPCAL" ) )  THEN 
     273              zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite  
     274              CALL iom_put( "EXPCAL"  , zw3d ) 
     275          ENDIF 
     276          IF( iom_use( "EXPSI" ) )  THEN 
     277              zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 
     278              CALL iom_put( "EXPSI"  , zw3d ) 
     279          ENDIF 
     280          IF( iom_use( "tcexp" ) )  CALL iom_put( "tcexp" , t_oce_co2_exp * zfact )   ! molC/s 
     281          !  
     282          CALL wrk_dealloc( jpi, jpj,      zw2d ) 
     283          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
     284        ENDIF 
     285      ELSE 
     286         IF( ln_diatrc ) THEN 
     287            zfact = 1.e3 * rfact2r 
     288            trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1) 
     289            trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) 
     290            trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1) 
     291            trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik100) * zfact * tmask(:,:,1) 
     292            trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1) 
     293            trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1) 
    257294         ENDIF 
    258295      ENDIF 
     
    272309      !!                  ***  ROUTINE p4z_sink_init  *** 
    273310      !!---------------------------------------------------------------------- 
    274  
     311      INTEGER :: jk 
     312 
     313      ik100 = 10        !  last level where depth less than 100 m 
     314      DO jk = jpkm1, 1, -1 
     315         IF( gdept_1d(jk) > 100. )  ik100 = jk - 1 
     316      END DO 
     317      IF (lwp) WRITE(numout,*) 
     318      IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ',  ik100 + 1 
     319      IF (lwp) WRITE(numout,*) 
     320      ! 
    275321      t_oce_co2_exp = 0._wp 
    276322      ! 
     
    282328   !!---------------------------------------------------------------------- 
    283329 
    284    SUBROUTINE p4z_sink ( kt, jnt ) 
     330   SUBROUTINE p4z_sink ( kt, knt ) 
    285331      !!--------------------------------------------------------------------- 
    286332      !!                ***  ROUTINE p4z_sink  *** 
     
    292338      !!--------------------------------------------------------------------- 
    293339      ! 
    294       INTEGER, INTENT(in) :: kt, jnt 
     340      INTEGER, INTENT(in) :: kt, knt 
    295341      ! 
    296342      INTEGER  :: ji, jj, jk, jit, niter1, niter2 
     
    300346      REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5 
    301347      REAL(wp) :: zval1, zval2, zval3, zval4 
    302       REAL(wp) :: zrfact2 
     348      REAL(wp) :: zfact 
    303349      INTEGER  :: ik1 
    304350      CHARACTER (len=25) :: charout 
    305351      REAL(wp), POINTER, DIMENSION(:,:,:) :: znum3d  
     352      REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 
     353      REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
    306354      !!--------------------------------------------------------------------- 
    307355      ! 
     
    325373            DO ji = 1, jpi 
    326374               IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    327                   znum = trn(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 
     375                  znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 
    328376                  ! -------------- To avoid sinking speed over 50 m/day ------- 
    329377                  znum  = MIN( xnumm(jk), znum ) 
     
    387435               IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    388436 
    389                   znum = trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp 
     437                  znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 
    390438                  !-------------- To avoid sinking speed over 50 m/day ------- 
    391439                  znum  = min(xnumm(jk),znum) 
     
    405453                  !    ---------------------------------------------- 
    406454 
    407                   zagg1 =  0.163 * trn(ji,jj,jk,jpnum)**2               & 
     455                  zagg1 =  0.163 * trb(ji,jj,jk,jpnum)**2               & 
    408456                     &            * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3)    & 
    409457                     &            * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min)    & 
    410458                     &            * (zfm*xkr_mass_max**2-xkr_mass_min**2)                  & 
    411459                     &            * (zeps-1.)**2/(zdiv2*zdiv3))  
    412                   zagg2 =  2*0.163*trn(ji,jj,jk,jpnum)**2*zfm*                       & 
     460                  zagg2 =  2*0.163*trb(ji,jj,jk,jpnum)**2*zfm*                       & 
    413461                     &                   ((xkr_mass_max**3+3.*(xkr_mass_max**2          & 
    414462                     &                    *xkr_mass_min*(zeps-1.)/zdiv2                 & 
     
    418466                     &                    (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))     
    419467 
    420                   zagg3 =  0.163*trn(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3   
     468                  zagg3 =  0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3   
    421469                   
    422470                 !    Aggregation of small into large particles 
     
    424472                 !    ---------------------------------------------- 
    425473 
    426                   zagg4 =  2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2*                       & 
     474                  zagg4 =  2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2*                       & 
    427475                     &                 xkr_wsbio_min*(zeps-1.)**2                         & 
    428476                     &                 *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4)      & 
     
    431479                     &                 *xkr_eta)/(zdiv*zdiv3*zdiv5) )    
    432480 
    433                   zagg5 =   2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2                         & 
     481                  zagg5 =   2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2                         & 
    434482                     &                 *(zeps-1.)*zfm*xkr_wsbio_min                        & 
    435483                     &                 *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2)         & 
     
    441489                  !     ------------------------------------ 
    442490 
    443                   zfract = 2.*3.141*0.125*trn(ji,jj,jk,jpmes)*12./0.12/0.06**3*trn(ji,jj,jk,jpnum)  & 
     491                  zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum)  & 
    444492                    &      * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2  & 
    445493                    &      * 10000.*xstep 
     
    448496                  !     -------------------------------------- 
    449497 
    450                   zaggdoc = 0.83 * trn(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc)   & 
    451                      &        + 0.005 * 231. * trn(ji,jj,jk,jpdoc) * xstep * trn(ji,jj,jk,jpdoc) 
    452                   zaggdoc1 = 271. * trn(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc)  & 
    453                      &  + 0.02 * 16706. * trn(ji,jj,jk,jppoc) * xstep * trn(ji,jj,jk,jpdoc) 
     498                  zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)   & 
     499                     &        + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 
     500                  zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  & 
     501                     &  + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 
    454502 
    455503# if defined key_degrad 
     
    466514                  zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 
    467515                  ! 
    468                   znumdoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     516                  znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    469517                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 
    470518                  tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg 
     
    477525 
    478526     ! Total primary production per year 
    479      t_oce_co2_exp = t_oce_co2_exp + glob_sum( ( sinking(:,:,:) ) * cvol(:,:,:) ) 
     527     t_oce_co2_exp = t_oce_co2_exp + glob_sum( ( sinking(:,:,ik100) * e1e2t(:,:) * tmask(:,:,1) ) 
    480528     ! 
    481       IF( ln_diatrc ) THEN 
    482          ! 
    483          ik1 = iksed + 1 
    484          zrfact2 = 1.e3 * rfact2r 
    485          IF( jnt == nrdttrc ) THEN 
    486            CALL iom_put( "POCFlx"  , sinking (:,:,:)      * zrfact2 * tmask(:,:,:) )  ! POC export 
    487            CALL iom_put( "NumFlx"  , sinking2 (:,:,:)     * zrfact2 * tmask(:,:,:) )  ! Num export 
    488            CALL iom_put( "SiFlx"   , sinksil (:,:,:)      * zrfact2 * tmask(:,:,:) )  ! Silica export 
    489            CALL iom_put( "CaCO3Flx", sinkcal (:,:,:)      * zrfact2 * tmask(:,:,:) )  ! Calcite export 
    490            CALL iom_put( "xnum"    , znum3d  (:,:,:)                * tmask(:,:,:) )  ! Number of particles in aggregats 
    491            CALL iom_put( "W1"      , wsbio3  (:,:,:)                * tmask(:,:,:) )  ! sinking speed of POC 
    492            CALL iom_put( "W2"      , wsbio4  (:,:,:)                * tmask(:,:,:) )  ! sinking speed of aggregats 
     529     IF( lk_iomput ) THEN 
     530        IF( knt == nrdttrc ) THEN 
     531          CALL wrk_alloc( jpi, jpj,      zw2d ) 
     532          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     533          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     534          ! 
     535          IF( iom_use( "EPC100" ) )  THEN 
     536              zw2d(:,:) = sinking(:,:,ik100) * zfact * tmask(:,:,1) ! Export of carbon at 100m 
     537              CALL iom_put( "EPC100"  , zw2d ) 
     538          ENDIF 
     539          IF( iom_use( "EPN100" ) )  THEN 
     540              zw2d(:,:) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) ! Export of number of aggregates ? 
     541              CALL iom_put( "EPN100"  , zw2d ) 
     542          ENDIF 
     543          IF( iom_use( "EPCAL100" ) )  THEN 
     544              zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 
     545              CALL iom_put( "EPCAL100"  , zw2d ) 
     546          ENDIF 
     547          IF( iom_use( "EPSI100" ) )  THEN 
     548              zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 
     549              CALL iom_put( "EPSI100"  , zw2d ) 
     550          ENDIF 
     551          IF( iom_use( "EXPC" ) )  THEN 
     552              zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     553              CALL iom_put( "EXPC"  , zw3d ) 
     554          ENDIF 
     555          IF( iom_use( "EXPN" ) )  THEN 
     556              zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     557              CALL iom_put( "EXPN"  , zw3d ) 
     558          ENDIF 
     559          IF( iom_use( "EXPCAL" ) )  THEN 
     560              zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite  
     561              CALL iom_put( "EXPCAL"  , zw3d ) 
     562          ENDIF 
     563          IF( iom_use( "EXPSI" ) )  THEN 
     564              zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 
     565              CALL iom_put( "EXPSI"  , zw3d ) 
     566          ENDIF 
     567          IF( iom_use( "XNUM" ) )  THEN 
     568              zw3d(:,:,:) =  znum3d(:,:,:) * tmask(:,:,:) !  Number of particles on aggregats 
     569              CALL iom_put( "XNUM"  , zw3d ) 
     570          ENDIF 
     571          IF( iom_use( "WSC" ) )  THEN 
     572              zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles 
     573              CALL iom_put( "WSC"  , zw3d ) 
     574          ENDIF 
     575          IF( iom_use( "WSN" ) )  THEN 
     576              zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number 
     577              CALL iom_put( "WSN"  , zw3d ) 
     578          ENDIF 
     579          ! 
     580          CALL wrk_dealloc( jpi, jpj,      zw2d ) 
     581          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
     582      ELSE 
     583         IF( ln_diatrc ) THEN 
     584            zfact = 1.e3 * rfact2r 
     585            trc2d(:,:  ,jp_pcs0_2d + 4)  = sinking (:,:,ik100)  * zfact * tmask(:,:,1) 
     586            trc2d(:,:  ,jp_pcs0_2d + 5)  = sinking2(:,:,ik100)  * zfact * tmask(:,:,1) 
     587            trc2d(:,:  ,jp_pcs0_2d + 6)  = sinkfer (:,:,ik100)  * zfact * tmask(:,:,1) 
     588            trc2d(:,:  ,jp_pcs0_2d + 7)  = sinksil (:,:,ik100)  * zfact * tmask(:,:,1) 
     589            trc2d(:,:  ,jp_pcs0_2d + 8)  = sinkcal (:,:,ik100)  * zfact * tmask(:,:,1) 
     590            trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:)      * zfact * tmask(:,:,:) 
     591            trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:)      * zfact * tmask(:,:,:) 
     592            trc3d(:,:,:,jp_pcs0_3d + 13) = sinksil (:,:,:)      * zfact * tmask(:,:,:) 
     593            trc3d(:,:,:,jp_pcs0_3d + 14) = sinkcal (:,:,:)      * zfact * tmask(:,:,:) 
     594            trc3d(:,:,:,jp_pcs0_3d + 15) = znum3d  (:,:,:)              * tmask(:,:,:) 
     595            trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3  (:,:,:)              * tmask(:,:,:) 
     596            trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4  (:,:,:)              * tmask(:,:,:) 
    493597         ENDIF 
    494 # if ! defined key_iomput 
    495          trc2d(:,:  ,jp_pcs0_2d + 4)  = sinking (:,:,ik1)    * zrfact2 * tmask(:,:,1) 
    496          trc2d(:,:  ,jp_pcs0_2d + 5)  = sinking2(:,:,ik1)    * zrfact2 * tmask(:,:,1) 
    497          trc2d(:,:  ,jp_pcs0_2d + 6)  = sinkfer (:,:,ik1)    * zrfact2 * tmask(:,:,1) 
    498          trc2d(:,:  ,jp_pcs0_2d + 7)  = sinksil (:,:,ik1)    * zrfact2 * tmask(:,:,1) 
    499          trc2d(:,:  ,jp_pcs0_2d + 8)  = sinkcal (:,:,ik1)    * zrfact2 * tmask(:,:,1) 
    500          trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:)      * zrfact2 * tmask(:,:,:) 
    501          trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:)      * zrfact2 * tmask(:,:,:) 
    502          trc3d(:,:,:,jp_pcs0_3d + 13) = sinksil (:,:,:)      * zrfact2 * tmask(:,:,:) 
    503          trc3d(:,:,:,jp_pcs0_3d + 14) = sinkcal (:,:,:)      * zrfact2 * tmask(:,:,:) 
    504          trc3d(:,:,:,jp_pcs0_3d + 15) = znum3d  (:,:,:)                * tmask(:,:,:) 
    505          trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3  (:,:,:)                * tmask(:,:,:) 
    506          trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4  (:,:,:)                * tmask(:,:,:) 
    507 # endif 
    508         ! 
    509598      ENDIF 
     599 
    510600      ! 
    511601      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    663753      END DO 
    664754      ! 
     755      ik100 = 10        !  last level where depth less than 100 m 
     756      DO jk = jpkm1, 1, -1 
     757         IF( gdept_1d(jk) > 100. )  iksed = jk - 1 
     758      END DO 
     759      IF (lwp) WRITE(numout,*) 
     760      IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ',  ik100 + 1 
     761      IF (lwp) WRITE(numout,*) 
     762      ! 
    665763      t_oce_co2_exp = 0._wp 
    666764      ! 
     
    702800      ztraz(:,:,:) = 0.e0 
    703801      zakz (:,:,:) = 0.e0 
    704       ztrb (:,:,:) = trn(:,:,:,jp_tra) 
     802      ztrb (:,:,:) = trb(:,:,:,jp_tra) 
    705803 
    706804      DO jk = 1, jpkm1 
     
    717815         !  first guess of the slopes interior values 
    718816         DO jk = 2, jpkm1 
    719             ztraz(:,:,jk) = ( trn(:,:,jk-1,jp_tra) - trn(:,:,jk,jp_tra) ) * tmask(:,:,jk) 
     817            ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 
    720818         END DO 
    721819         ztraz(:,:,1  ) = 0.0 
     
    748846                  zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 
    749847                  zew   = zwsink2(ji,jj,jk+1) 
    750                   psinkflx(ji,jj,jk+1) = -zew * ( trn(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
     848                  psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
    751849               END DO 
    752850            END DO 
     
    761859               DO ji = 1, jpi 
    762860                  zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 
    763                   trn(ji,jj,jk,jp_tra) = trn(ji,jj,jk,jp_tra) + zflx 
     861                  trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 
    764862               END DO 
    765863            END DO 
     
    777875      END DO 
    778876 
    779       trn(:,:,:,jp_tra) = ztrb(:,:,:) 
     877      trb(:,:,:,jp_tra) = ztrb(:,:,:) 
    780878      psinkflx(:,:,:)   = 2. * psinkflx(:,:,:) 
    781879      ! 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r4624 r5581  
    1111   !!   'key_pisces'                                       PISCES bio-model 
    1212   !!---------------------------------------------------------------------- 
    13    !!   p4zsms        :  Time loop of passive tracers sms 
     13   !!   p4zsms         :  Time loop of passive tracers sms 
    1414   !!---------------------------------------------------------------------- 
    1515   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2424   USE p4zsed          !  Sedimentation 
    2525   USE p4zint          !  time interpolation 
     26   USE p4zrem          !  remineralisation 
    2627   USE iom             !  I/O manager 
    27    USE trdmod_oce      !  Ocean trends variables 
    28    USE trdmod_trc      !  TOP trends variables 
     28   USE trd_oce         !  Ocean trends variables 
     29   USE trdtrc          !  TOP trends variables 
    2930   USE sedmodel        !  Sediment model 
    3031   USE prtctl_trc      !  print control for debugging 
     
    3334   PRIVATE 
    3435 
    35    PUBLIC   p4z_sms_init    ! called in p4zsms.F90 
    36    PUBLIC   p4z_sms    ! called in p4zsms.F90 
    37  
    38    REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 
    39    INTEGER ::  numco2, numnut  !: logical unit for co2 budget 
    40  
     36   PUBLIC   p4z_sms_init   ! called in p4zsms.F90 
     37   PUBLIC   p4z_sms        ! called in p4zsms.F90 
     38 
     39   REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 
     40   REAL(wp) :: xfact1, xfact2, xfact3 
     41   INTEGER ::  numco2, numnut, numnit  !: logical unit for co2 budget 
     42 
     43   !!* Array used to indicate negative tracer values 
     44   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xnegtr     !: ??? 
     45 
     46 
     47   !! * Substitutions 
     48#  include "top_substitute.h90" 
    4149   !!---------------------------------------------------------------------- 
    4250   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6169      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6270      !! 
    63       INTEGER ::   jnt, jn, jl 
     71      INTEGER ::   ji, jj, jk, jnt, jn, jl 
     72      REAL(wp) ::  ztra 
     73#if defined key_kriest 
     74      REAL(wp) ::  zcoef1, zcoef2 
     75#endif 
    6476      CHARACTER (len=25) :: charout 
    65       REAL(wp), POINTER, DIMENSION(:,:,:,:)  :: ztrdpis 
    6677      !!--------------------------------------------------------------------- 
    6778      ! 
    6879      IF( nn_timing == 1 )  CALL timing_start('p4z_sms') 
    6980      ! 
    70       IF( l_trdtrc )  THEN 
    71          CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    72          DO jn = 1, jp_pisces 
    73             jl = jn + jp_pcs0 - 1 
    74             ztrdpis(:,:,:,jn) = trn(:,:,:,jl) 
    75          ENDDO 
    76       ENDIF 
    77       ! 
    7881      IF( kt == nittrc000 ) THEN 
     82        ! 
     83        ALLOCATE( xnegtr(jpi,jpj,jpk) ) 
    7984        ! 
    8085        CALL p4z_che                              ! initialize the chemical constants 
     
    8893      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    8994      ! 
     95      !                                                                    !   set time step size (Euler/Leapfrog) 
     96      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN   ;    rfact = rdttrc(1)     !  at nittrc000 
     97      ELSEIF( kt <= nittrc000 + nn_dttrc )                          THEN   ;    rfact = 2. * rdttrc(1)   ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 
     98      ENDIF 
     99      ! 
     100      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
     101         rfactr  = 1. / rfact 
     102         rfact2  = rfact / FLOAT( nrdttrc ) 
     103         rfact2r = 1. / rfact2 
     104         xstep = rfact2 / rday         ! Time step duration for biology 
     105         IF(lwp) WRITE(numout,*)  
     106         IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdttra(1) 
     107         IF(lwp) write(numout,*) '    PISCES  Biology time step    rfact2 = ', rfact2 
     108         IF(lwp) WRITE(numout,*) 
     109      ENDIF 
     110 
     111      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 
     112         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter 
     113            trb(:,:,:,jn) = trn(:,:,:,jn) 
     114         END DO 
     115      ENDIF 
     116      ! 
    90117      IF( ndayflxtr /= nday_year ) THEN      ! New days 
    91118         ! 
     
    105132      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    106133         ! 
    107          CALL p4z_bio (kt, jnt)    ! Biology 
    108          CALL p4z_sed (kt, jnt)    ! Sedimentation 
    109          ! 
     134         CALL p4z_bio( kt, jnt )   ! Biology 
     135         CALL p4z_sed( kt, jnt )   ! Sedimentation 
     136         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
     137         CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
     138         ! 
     139         xnegtr(:,:,:) = 1.e0 
    110140         DO jn = jp_pcs0, jp_pcs1 
    111             trb(:,:,:,jn) = trn(:,:,:,jn) 
    112          ENDDO 
    113          ! 
     141            DO jk = 1, jpk 
     142               DO jj = 1, jpj 
     143                  DO ji = 1, jpi 
     144                     IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 
     145                        ztra             = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 
     146                        xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk),  ztra ) 
     147                     ENDIF 
     148                 END DO 
     149               END DO 
     150            END DO 
     151         END DO 
     152         !                                ! where at least 1 tracer concentration becomes negative 
     153         !                                !  
     154         DO jn = jp_pcs0, jp_pcs1 
     155           trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
     156         END DO 
     157        ! 
     158         DO jn = jp_pcs0, jp_pcs1 
     159            tra(:,:,:,jn) = 0._wp 
     160         END DO 
     161         ! 
     162         IF( ln_top_euler ) THEN 
     163            DO jn = jp_pcs0, jp_pcs1 
     164               trn(:,:,:,jn) = trb(:,:,:,jn) 
     165            END DO 
     166         ENDIF 
    114167      END DO 
    115168 
    116       IF( l_trdtrc )  THEN 
    117          DO jn = 1, jp_pisces 
    118             jl = jn + jp_pcs0 - 1 
    119             ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 
    120          ENDDO 
    121       ENDIF 
    122  
    123       CALL p4z_lys( kt )             ! Compute CaCO3 saturation 
    124       CALL p4z_flx( kt )             ! Compute surface fluxes 
    125  
    126       DO jn = jp_pcs0, jp_pcs1 
    127         CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
    128         CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    129         CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 
     169#if defined key_kriest 
     170      !  
     171      zcoef1 = 1.e0 / xkr_massp  
     172      zcoef2 = 1.e0 / xkr_massp / 1.1 
     173      DO jk = 1,jpkm1 
     174         trb(:,:,jk,jpnum) = MAX(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
     175         trb(:,:,jk,jpnum) = MIN(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2              ) 
    130176      END DO 
    131177      ! 
     178#endif 
     179      ! 
     180      ! 
     181      IF( l_trdtrc ) THEN 
     182         DO jn = jp_pcs0, jp_pcs1 
     183           CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     184         END DO 
     185      END IF 
     186      ! 
    132187      IF( lk_sed ) THEN  
    133188         ! 
     
    135190         ! 
    136191         DO jn = jp_pcs0, jp_pcs1 
    137            CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 
     192           CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 
    138193         END DO 
    139194         ! 
     
    142197      IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file  
    143198      ! 
    144       IF( l_trdtrc ) THEN 
    145          DO jn = 1, jp_pisces 
    146             jl = jn + jp_pcs0 - 1 
    147              ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 
    148              CALL trd_mod_trc( ztrdpis(:,:,:,jn), jn, jptra_trd_sms, kt )   ! save trends 
    149           END DO 
    150           CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis )  
    151       END IF 
    152       ! 
    153       CALL p4z_chk_mass( kt ) ! Mass conservation checking 
     199 
     200      IF( lk_iomput .OR. ln_check_mass )  CALL p4z_chk_mass( kt ) ! Mass conservation checking 
    154201 
    155202      IF ( lwm .AND. kt == nittrc000 ) CALL FLUSH    ( numonp )     ! flush output namelist PISCES 
     
    281328               ztmas   = tmask(ji,jj,jk) 
    282329               ztmas1  = 1. - tmask(ji,jj,jk) 
    283                zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
    284                zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
    285                zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 
     330               zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
     331               zco3    = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
     332               zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 
    286333               hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 
    287334            END DO 
     
    328375         ENDIF 
    329376         ! 
     377         IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon 
     378            CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum  ) 
     379         ELSE 
     380            t_oce_co2_flx_cum = 0._wp 
     381         ENDIF 
     382         ! 
    330383      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    331384         IF( kt == nitrst ) THEN 
     
    337390         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
    338391         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
     392         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
    339393      ENDIF 
    340394      ! 
     
    355409      REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
    356410      ! 
    357       REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 
     411      REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 
     412      REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 
    358413      !!--------------------------------------------------------------------- 
    359414 
     
    368423         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6               
    369424 
    370          zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    371          zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    372          zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    373          zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     425         zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     426         zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     427         zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     428         zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    374429  
    375          IF(lwp) WRITE(numout,*) '       TALK mean : ', zalksum 
    376          trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 
    377  
    378          IF(lwp) WRITE(numout,*) '       PO4  mean : ', zpo4sum 
    379          trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 
    380  
    381          IF(lwp) WRITE(numout,*) '       NO3  mean : ', zno3sum 
    382          trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 
    383  
    384          IF(lwp) WRITE(numout,*) '       SiO3 mean : ', zsilsum 
    385          trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 
    386          ! 
    387       ENDIF 
    388  
     430         IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
     431         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
     432 
     433         IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
     434         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
     435 
     436         IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
     437         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
     438 
     439         IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
     440         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
     441         ! 
     442         ! 
     443         IF( .NOT. ln_top_euler ) THEN 
     444            zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     445            zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     446            zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     447            zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     448  
     449            IF(lwp) WRITE(numout,*) ' ' 
     450            IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
     451            trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
     452 
     453            IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
     454            trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
     455 
     456            IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
     457            trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
     458 
     459            IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
     460            trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     461        ENDIF 
     462        ! 
     463      ENDIF 
     464        ! 
    389465   END SUBROUTINE p4z_dmp 
    390466 
     
    399475      ! 
    400476      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    401       !! 
     477      REAL(wp)             ::  zrdenittot, zsdenittot, znitrpottot 
     478      CHARACTER(LEN=100)   ::   cltxt 
     479      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 
     480      INTEGER :: jk 
     481      !!---------------------------------------------------------------------- 
     482 
     483      ! 
    402484      !!--------------------------------------------------------------------- 
    403485 
     
    406488            CALL ctl_opn( numco2, 'carbon.budget'  , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    407489            CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     490            CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     491            xfact1 = rfact2r * 12. / 1.e15 * ryyss    ! conversion molC/kt --> PgC/yr 
     492            xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/s ----> TgN/m3/yr 
     493            xfact3 = 1.e+3 * rfact2r * rno3   ! conversion molC/l/kt ----> molN/m3/s 
     494            cltxt='time-step   Alkalinity        Nitrate        Phosphorus         Silicate           Iron' 
     495            IF( lwp ) WRITE(numnut,*)  TRIM(cltxt) 
     496            IF( lwp ) WRITE(numnut,*)  
    408497         ENDIF 
    409498      ENDIF 
    410499 
    411       IF( ln_check_mass .AND. kt == nitend ) THEN      !   Compute the budget of NO3, ALK, Si, Fer 
     500      ! 
     501      IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
     502         !   Compute the budget of NO3, ALK, Si, Fer 
    412503         no3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  & 
    413504            &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
     
    417508            &                    + trn(:,:,:,jpgoc)                     & 
    418509#endif 
    419             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  )  
    420          !  
     510            &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
     511         ! 
     512         no3budget = no3budget / areatot 
     513         CALL iom_put( "pno3tot", no3budget ) 
     514      ENDIF 
     515      ! 
     516      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
     517         po4budget = glob_sum( (   trn(:,:,:,jppo4)                     & 
     518            &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
     519            &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
     520            &                    + trn(:,:,:,jppoc)                     & 
     521#if ! defined key_kriest 
     522            &                    + trn(:,:,:,jpgoc)                     & 
     523#endif 
     524            &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
     525         po4budget = po4budget / areatot 
     526         CALL iom_put( "ppo4tot", po4budget ) 
     527      ENDIF 
     528      ! 
     529      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    421530         silbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpgsi)  & 
    422531            &                    + trn(:,:,:,jpdsi)                     ) * cvol(:,:,:)  ) 
    423          !  
     532         ! 
     533         silbudget = silbudget / areatot 
     534         CALL iom_put( "psiltot", silbudget ) 
     535      ENDIF 
     536      ! 
     537      IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    424538         alkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              & 
    425539            &                    + trn(:,:,:,jptal)                     & 
    426540            &                    + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  ) 
    427          !  
     541         ! 
     542         alkbudget = alkbudget / areatot 
     543         CALL iom_put( "palktot", alkbudget ) 
     544      ENDIF 
     545      ! 
     546      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    428547         ferbudget = glob_sum( (   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe)  & 
    429548            &                    + trn(:,:,:,jpdfe)                     & 
     
    434553            &                    + trn(:,:,:,jpzoo) * ferat3            & 
    435554            &                    + trn(:,:,:,jpmes) * ferat3            ) * cvol(:,:,:)  ) 
    436  
    437          ! 
     555         ! 
     556         ferbudget = ferbudget / areatot 
     557         CALL iom_put( "pfertot", ferbudget ) 
     558      ENDIF 
     559      ! 
     560 
     561      ! Global budget of N SMS : denitrification in the water column and in the sediment 
     562      !                          nitrogen fixation by the diazotrophs 
     563      ! -------------------------------------------------------------------------------- 
     564      IF( iom_use( "tnfix" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     565         znitrpottot  = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 
     566         CALL iom_put( "tnfix"  , znitrpottot * 1.e+3 * rno3 )  ! Global  nitrogen fixation molC/l  to molN/m3  
     567      ENDIF 
     568      ! 
     569      IF( iom_use( "tdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     570         zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
     571         CALL iom_put( "tdenit"  , zrdenittot * 1.e+3 * rno3 )  ! Total denitrification molC/l to molN/m3  
     572      ENDIF 
     573      ! 
     574      IF( iom_use( "Sdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
     575         zsdenittot   = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 
     576         CALL iom_put( "Sdenit", sdenit(:,:) * xfact3 * tmask(:,:,1) )  ! Nitrate reduction in the sediments 
     577      ENDIF 
     578 
     579      IF( ln_check_mass .AND. kt == nitend ) THEN   ! Compute the budget of NO3, ALK, Si, Fer 
    438580         t_atm_co2_flx  = t_atm_co2_flx / glob_sum( e1e2t(:,:) ) 
    439          t_oce_co2_flx  = t_oce_co2_flx         * 12. / 1.e15 * (-1 ) 
    440          tpp            = tpp           * 1000. * 12. / 1.E15 
    441          t_oce_co2_exp  = t_oce_co2_exp * 1000. * 12. / 1.E15 
    442          ! 
    443          no3budget = no3budget / areatot 
    444          silbudget = silbudget / areatot 
    445          alkbudget = alkbudget / areatot 
    446          ferbudget = ferbudget / areatot 
    447          ! 
    448          IF(lwp) THEN 
    449             WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 
    450             WRITE(numnut,9500) ndastp, alkbudget, no3budget, silbudget, ferbudget 
    451          ENDIF 
    452          ! 
    453       ENDIF 
    454        ! 
     581         t_oce_co2_flx  = t_oce_co2_flx         * xfact1 * (-1 ) 
     582         tpp            = tpp           * 1000. * xfact1 
     583         t_oce_co2_exp  = t_oce_co2_exp * 1000. * xfact1 
     584         IF( lwp ) WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 
     585         IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget        * 1.e+06, & 
     586             &                                no3budget * rno3 * 1.e+06, & 
     587             &                                po4budget * po4r * 1.e+06, & 
     588             &                                silbudget        * 1.e+06, & 
     589             &                                ferbudget        * 1.e+09 
     590         ! 
     591         IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2  , & 
     592         &                             zrdenittot  * xfact2  , & 
     593         &                             zsdenittot  * xfact2 
     594 
     595      ENDIF 
     596      ! 
    455597 9000  FORMAT(i8,f10.5,e18.10,f10.5,f10.5) 
    456  9500  FORMAT(i8,4e18.10)      
     598 9100  FORMAT(i8,5e18.10) 
     599 9200  FORMAT(i8,3f10.5) 
     600 
    457601       ! 
    458602   END SUBROUTINE p4z_chk_mass 
Note: See TracChangeset for help on using the changeset viewer.