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

Ignore:
Timestamp:
2015-02-11T11:50:34+01:00 (9 years ago)
Author:
timgraham
Message:

Upgraded branch to current head of trunk (r5072) so it can be used with the trunk

File:
1 edited

Legend:

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

    r4624 r5075  
    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      !!--------------------------------------------------------------------- 
     
    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. jnt == nrdttrc )  )  & 
     417         & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     418 
     419    IF( lk_iomput ) THEN 
     420       IF( jnt == 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 
Note: See TracChangeset for help on using the changeset viewer.