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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r4624 r6225  
    5454   REAL(wp) :: texcret2               !: 1 - excret2         
    5555 
    56  
    57    !!* Substitution 
    58 #  include "top_substitute.h90" 
    5956   !!---------------------------------------------------------------------- 
    6057   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6461CONTAINS 
    6562 
    66    SUBROUTINE p4z_prod( kt , jnt ) 
     63   SUBROUTINE p4z_prod( kt , knt ) 
    6764      !!--------------------------------------------------------------------- 
    6865      !!                     ***  ROUTINE p4z_prod  *** 
     
    7471      !!--------------------------------------------------------------------- 
    7572      ! 
    76       INTEGER, INTENT(in) :: kt, jnt 
     73      INTEGER, INTENT(in) :: kt, knt 
    7774      ! 
    7875      INTEGER  ::   ji, jj, jk 
     
    8380      REAL(wp) ::   zpislopen  , zpislope2n 
    8481      REAL(wp) ::   zrum, zcodel, zargu, zval 
    85       REAL(wp) ::   zrfact2 
     82      REAL(wp) ::   zfact 
    8683      CHARACTER (len=25) :: charout 
    87       REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn 
    88       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt    
     84      REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn, zw2d 
     85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d    
    8986      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd 
    9087      !!--------------------------------------------------------------------- 
     
    129126      END DO 
    130127 
    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 
     128      ! Impact of the day duration on phytoplankton growth 
     129      DO jk = 1, jpkm1 
     130         DO jj = 1 ,jpj 
     131            DO ji = 1, jpi 
     132               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     133                  zval = MAX( 1., zstrn(ji,jj) ) 
     134                  zval = 1.5 * zval / ( 12. + zval ) 
     135                  zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 
     136                  zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
     137               ENDIF 
     138            END DO 
     139         END DO 
     140      END DO 
    146141 
    147142      ! Maximum light intensity 
     
    150145 
    151146      IF( ln_newprod ) THEN 
    152 !CDIR NOVERRCHK 
    153147         DO jk = 1, jpkm1 
    154 !CDIR NOVERRCHK 
    155148            DO jj = 1, jpj 
    156 !CDIR NOVERRCHK 
    157149               DO ji = 1, jpi 
    158150                  ! Computation of the P-I slope for nanos and diatoms 
    159                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     151                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    160152                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    161153                      zadap       = xadap * ztn / ( 2.+ ztn ) 
    162                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    163                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     154                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     155                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    164156                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    165157                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    166158                      ! 
    167159                      zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  & 
    168                          &                   * trn(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn) 
     160                         &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    169161                      ! 
    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) 
     162                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
     163                         &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    172164 
    173165                      ! Computation of production function for Carbon 
     
    188180         END DO 
    189181      ELSE 
    190 !CDIR NOVERRCHK 
    191182         DO jk = 1, jpkm1 
    192 !CDIR NOVERRCHK 
    193183            DO jj = 1, jpj 
    194 !CDIR NOVERRCHK 
    195184               DO ji = 1, jpi 
    196185 
    197186                  ! Computation of the P-I slope for nanos and diatoms 
    198                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     187                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    199188                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    200189                      zadap       = ztn / ( 2.+ ztn ) 
    201                       zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 
    202                       zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
     190                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     191                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
     192                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
     193                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    203194                      ! 
    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 )   & 
     195                      zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) ) 
     196                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     197 
     198                      zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                & 
     199                        &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
    209200                        &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    210201 
    211                       zpislope2n = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch)                & 
    212                         &          / ( trn(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
     202                      zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                & 
     203                        &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
    213204                        &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    214205 
    215206                      ! Computation of production function for Carbon 
    216207                      !  --------------------------------------------- 
    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) ) ) 
     208                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) ) 
     209                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 
    219210 
    220211                      !  Computation of production function for Chlorophyll 
    221212                      !-------------------------------------------------- 
    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) ) ) 
     213                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
     214                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
    224215                  ENDIF 
    225216               END DO 
     
    231222      !  Computation of a proxy of the N/C ratio 
    232223      !  --------------------------------------- 
    233 !CDIR NOVERRCHK 
    234224      DO jk = 1, jpkm1 
    235 !CDIR NOVERRCHK 
    236225         DO jj = 1, jpj 
    237 !CDIR NOVERRCHK 
    238226            DO ji = 1, jpi 
    239227                zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   & 
     
    252240            DO ji = 1, jpi 
    253241 
    254                 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     242                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    255243                   !    Si/C of diatoms 
    256244                   !    ------------------------ 
     
    258246                   !    Si/C is arbitrariliy increased for very high Si concentrations 
    259247                   !    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 ) 
     248                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    261249                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    262250                  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) 
     251                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    264252                  IF (gphit(ji,jj) < -30 ) THEN 
    265253                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     
    287275         DO jj = 1, jpj 
    288276            DO ji = 1, jpi 
    289                IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
     277               IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    290278                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) 
    291279                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 
     
    296284 
    297285      ! Computation of the various production terms  
    298 !CDIR NOVERRCHK 
    299286      DO jk = 1, jpkm1 
    300 !CDIR NOVERRCHK 
    301287         DO jj = 1, jpj 
    302 !CDIR NOVERRCHK 
    303288            DO ji = 1, jpi 
    304                IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     289               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    305290                  !  production terms for nanophyto. 
    306                   zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 
     291                  zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    307292                  zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    308293                  ! 
    309                   zratio = trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
     294                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    310295                  zratio = zratio / fecnm  
    311296                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    313298                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    314299                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    315                   &             * zmax * trn(ji,jj,jk,jpphy) * rfact2 
     300                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    316301                  !  production terms for diatomees 
    317                   zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 
     302                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    318303                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    319304                  ! 
    320                   zratio = trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     305                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    321306                  zratio = zratio / fecdm  
    322307                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    324309                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    325310                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
    326                   &             * zmax * trn(ji,jj,jk,jpdia) * rfact2 
     311                  &             * zmax * trb(ji,jj,jk,jpdia) * rfact2 
    327312               ENDIF 
    328313            END DO 
     
    331316 
    332317      IF( ln_newprod ) THEN 
    333 !CDIR NOVERRCHK 
    334318         DO jk = 1, jpkm1 
    335 !CDIR NOVERRCHK 
    336319            DO jj = 1, jpj 
    337 !CDIR NOVERRCHK 
    338320               DO ji = 1, jpi 
    339                   IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
     321                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    340322                     zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj) 
    341323                     zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 
    342324                  ENDIF 
    343                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     325                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    344326                     !  production terms for nanophyto. ( chlorophyll ) 
    345327                     znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
     
    359341         END DO 
    360342      ELSE 
    361 !CDIR NOVERRCHK 
    362343         DO jk = 1, jpkm1 
    363 !CDIR NOVERRCHK 
    364344            DO jj = 1, jpj 
    365 !CDIR NOVERRCHK 
    366345               DO ji = 1, jpi 
    367                   IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
     346                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    368347                     !  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) 
     348                     znanotot = enano(ji,jj,jk) 
     349                     zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 
    371350                     zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 
    372351                     zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod            & 
    373                      &                    / ( zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) * znanotot +rtrn ) 
     352                     &                    / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 
    374353                     !  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) 
     354                     zdiattot = ediat(ji,jj,jk) 
     355                     zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 
    377356                     zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 
    378357                     zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod             & 
    379                      &                    / ( zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
     358                     &                    / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 
    380359                  ENDIF 
    381360               END DO 
     
    412391     END DO 
    413392 
    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(:,:,:) 
     393 
     394    ! Total primary production per year 
     395    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
     396         & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     397 
     398    IF( lk_iomput ) THEN 
     399       IF( knt == nrdttrc ) THEN 
     400          CALL wrk_alloc( jpi, jpj,      zw2d ) 
     401          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     402          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     403          ! 
     404          IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN 
     405              zw3d(:,:,:) = zprorca (:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
     406              CALL iom_put( "PPPHY"  , zw3d ) 
     407              ! 
     408              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
     409              CALL iom_put( "PPPHY2"  , zw3d ) 
     410          ENDIF 
     411          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN 
     412              zw3d(:,:,:) = zpronew (:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
     413              CALL iom_put( "PPNEWN"  , zw3d ) 
     414              ! 
     415              zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by diatomes 
     416              CALL iom_put( "PPNEWD"  , zw3d ) 
     417          ENDIF 
     418          IF( iom_use( "PBSi" ) )  THEN 
     419              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 
     420              CALL iom_put( "PBSi"  , zw3d ) 
     421          ENDIF 
     422          IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) )  THEN 
     423              zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by nanophyto 
     424              CALL iom_put( "PFeN"  , zw3d ) 
     425              ! 
     426              zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by  diatomes 
     427              CALL iom_put( "PFeD"  , zw3d ) 
     428          ENDIF 
     429          IF( iom_use( "Mumax" ) )  THEN 
     430              zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:)   ! Maximum growth rate 
     431              CALL iom_put( "Mumax"  , zw3d ) 
     432          ENDIF 
     433          IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) )  THEN 
     434              zw3d(:,:,:) = zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:)  ! Realized growth rate for nanophyto 
     435              CALL iom_put( "MuN"  , zw3d ) 
     436              ! 
     437              zw3d(:,:,:) =  zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:)  ! Realized growth rate for diatoms 
     438              CALL iom_put( "MuD"  , zw3d ) 
     439          ENDIF 
     440          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN 
     441              zw3d(:,:,:) = zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     442              CALL iom_put( "LNlight"  , zw3d ) 
     443              ! 
     444              zw3d(:,:,:) =  zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     445              CALL iom_put( "LDlight"  , zw3d ) 
     446          ENDIF 
     447          IF( iom_use( "TPP" ) )  THEN 
     448              zw3d(:,:,:) = ( zprorca(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
     449              CALL iom_put( "TPP"  , zw3d ) 
     450          ENDIF 
     451          IF( iom_use( "TPNEW" ) )  THEN 
     452              zw3d(:,:,:) = ( zpronew(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
     453              CALL iom_put( "TPNEW"  , zw3d ) 
     454          ENDIF 
     455          IF( iom_use( "TPBFE" ) )  THEN 
     456              zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:)  ! total biogenic iron production 
     457              CALL iom_put( "TPBFE"  , zw3d ) 
     458          ENDIF 
     459          IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN   
     460             zw2d(:,:) = 0. 
     461             DO jk = 1, jpkm1 
     462               zw2d(:,:) = zw2d(:,:) + zprorca (:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
     463             ENDDO 
     464             CALL iom_put( "INTPPPHY" , zw2d ) 
     465             ! 
     466             zw2d(:,:) = 0. 
     467             DO jk = 1, jpkm1 
     468                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated  primary produc. by diatom 
     469             ENDDO 
     470             CALL iom_put( "INTPPPHY2" , zw2d ) 
     471          ENDIF 
     472          IF( iom_use( "INTPP" ) ) THEN    
     473             zw2d(:,:) = 0. 
     474             DO jk = 1, jpkm1 
     475                zw2d(:,:) = zw2d(:,:) + ( zprorca(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
     476             ENDDO 
     477             CALL iom_put( "INTPP" , zw2d ) 
     478          ENDIF 
     479          IF( iom_use( "INTPNEW" ) ) THEN     
     480             zw2d(:,:) = 0. 
     481             DO jk = 1, jpkm1 
     482                zw2d(:,:) = zw2d(:,:) + ( zpronew(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
     483             ENDDO 
     484             CALL iom_put( "INTPNEW" , zw2d ) 
     485          ENDIF 
     486          IF( iom_use( "INTPBFE" ) ) THEN           !   total biogenic iron production  ( vertically integrated ) 
     487             zw2d(:,:) = 0. 
     488             DO jk = 1, jpkm1 
     489                zw2d(:,:) = zw2d(:,:) + ( zprofen(:,:,jk) + zprofed(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bfe prod 
     490             ENDDO 
     491            CALL iom_put( "INTPBFE" , zw2d ) 
     492          ENDIF 
     493          IF( iom_use( "INTPBSI" ) ) THEN           !   total biogenic silica production  ( vertically integrated ) 
     494             zw2d(:,:) = 0. 
     495             DO jk = 1, jpkm1 
     496                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * zysopt(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert integr. bsi prod 
     497             ENDDO 
     498             CALL iom_put( "INTPBSI" , zw2d ) 
     499          ENDIF 
     500          IF( iom_use( "tintpp" ) )  CALL iom_put( "tintpp" , tpp * zfact )  !  global total integrated primary production molC/s 
     501          ! 
     502          CALL wrk_dealloc( jpi, jpj,      zw2d ) 
     503          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
     504       ENDIF 
     505     ELSE 
     506        IF( ln_diatrc ) THEN 
     507           zfact = 1.e+3 * rfact2r 
     508           trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zfact * tmask(:,:,:) 
     509           trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) 
     510           trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronew (:,:,:) * zfact * tmask(:,:,:) 
     511           trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zfact * tmask(:,:,:) 
     512           trc3d(:,:,:,jp_pcs0_3d + 8)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) 
     513           trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zfact * tmask(:,:,:) 
    442514#  if ! defined key_kriest 
    443               trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 
     515           trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:) 
    444516#  endif 
    445          ENDIF 
    446          ! 
    447       ENDIF 
    448  
    449       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     517        ENDIF 
     518     ENDIF 
     519 
     520     IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    450521         WRITE(charout, FMT="('prod')") 
    451522         CALL prt_ctl_trc_info(charout) 
    452523         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       ! 
     524     ENDIF 
     525     ! 
     526     CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
     527     CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
     528     CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
     529     ! 
     530     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
     531     ! 
    461532   END SUBROUTINE p4z_prod 
    462533 
     
    537608 
    538609   !!====================================================================== 
    539 END MODULE  p4zprod 
     610END MODULE p4zprod 
Note: See TracChangeset for help on using the changeset viewer.