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 2528 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90 – NEMO

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90

    • Property svn:executable deleted
    r1836 r2528  
    2323 
    2424   USE lib_mpp 
     25   USE lib_fortran 
    2526 
    2627   IMPLICIT NONE 
    2728   PRIVATE 
    2829 
    29    PUBLIC   p4z_prod    ! called in p4zbio.F90 
     30   PUBLIC   p4z_prod         ! called in p4zbio.F90 
     31   PUBLIC   p4z_prod_init    ! called in trcsms_pisces.F90 
    3032 
    3133   !! * Shared module variables 
     
    4143     grosip    = 0.151_wp 
    4244 
    43    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk)  ::        & 
    44      &                   prmax 
     45   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk)  ::  prmax  
    4546    
    4647   REAL(wp) ::   & 
     48      rday1                      ,  &  !: 0.6 / rday 
    4749      texcret                    ,  &  !: 1 - excret  
    4850      texcret2                   ,  &  !: 1 - excret2         
    49       rpis180                    ,  &  !: rpi / 180 
    5051      tpp                              !: Total primary production 
    51  
    52    INTEGER  ::  nspyr                  !: number of timesteps per year 
    5352 
    5453   !!* Substitution 
    5554#  include "top_substitute.h90" 
    5655   !!---------------------------------------------------------------------- 
    57    !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)  
     56   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    5857   !! $Id$  
    59    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     58   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    6059   !!---------------------------------------------------------------------- 
    6160 
     
    7877      REAL(wp) ::   zmxltst, zmxlday, zlim1 
    7978      REAL(wp) ::   zpislopen  , zpislope2n 
    80       REAL(wp) ::   zrum, zcodel, zargu, zvol 
    81 #if defined key_trc_diaadd && defined key_trc_dia3d 
     79      REAL(wp) ::   zrum, zcodel, zargu, zval, zvol 
     80#if defined key_diatrc 
    8281      REAL(wp) ::   zrfact2 
    8382#endif 
     
    9089      CHARACTER (len=25) :: charout 
    9190      !!--------------------------------------------------------------------- 
    92  
    93  
    94       IF( ( kt * jnt ) == nittrc000  )   CALL p4z_prod_init      ! Initialization (first time-step only) 
    95  
    9691 
    9792      zprorca (:,:,:) = 0.0 
     
    109104      ! Computation of the optimal production 
    110105 
    111 # if defined key_off_degrad 
    112       prmax(:,:,:) = 0.6 / rday * tgfunc(:,:,:) * facvol(:,:,:) 
     106# if defined key_degrad 
     107      prmax(:,:,:) = rday1 * tgfunc(:,:,:) * facvol(:,:,:) 
    113108# else 
    114       prmax(:,:,:) = 0.6 / rday * tgfunc(:,:,:) 
     109      prmax(:,:,:) = rday1 * tgfunc(:,:,:) 
    115110# endif 
    116111 
    117112      ! compute the day length depending on latitude and the day 
    118       IF(lwp) write(numout,*) 
    119       IF(lwp) write(numout,*) 'p4zday : - Julian day ', nday_year 
    120       IF(lwp) write(numout,*) '~~~~~~' 
    121  
    122       IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN 
    123          zrum = FLOAT( nday_year - 80 ) / 366. 
    124       ELSE 
    125          zrum = FLOAT( nday_year - 80 ) / 365. 
    126       ENDIF 
    127       zcodel = ASIN(  SIN( zrum * rpi * 2. ) * SIN( rpis180 * 23.5 )  ) 
     113      zrum = FLOAT( nday_year - 80 ) / REAL(nyear_len(1), wp) 
     114      zcodel = ASIN(  SIN( zrum * rpi * 2. ) * SIN( rad * 23.5 )  ) 
    128115 
    129116      ! day length in hours 
     
    131118      DO jj = 1, jpj 
    132119         DO ji = 1, jpi 
    133             zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rpis180 ) 
     120            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    134121            zargu = MAX( -1., MIN(  1., zargu ) ) 
    135             zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rpis180 / 15. ) 
     122            zval  = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     123            IF( zval < 1.e0 )   zval = 24. 
     124            zstrn(ji,jj) = 24. / zval 
    136125         END DO 
    137126      END DO 
     
    147136               ! Computation of the P-I slope for nanos and diatoms 
    148137               IF( etot(ji,jj,jk) > 1.E-3 ) THEN 
    149                    ztn    = MAX( 0., tn(ji,jj,jk) - 15. ) 
     138                   ztn    = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    150139                   zadap  = 0.+ 1.* ztn / ( 2.+ ztn ) 
    151140                   zadap2 = 0.e0 
     
    227216      END DO 
    228217 
    229  
    230       WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    231       zstrn(:,:) = 24. / zstrn(:,:) 
    232218 
    233219!CDIR NOVERRCHK 
     
    331317 
    332318     ! Total primary production per year 
    333      DO jk = 1, jpkm1 
    334         DO jj = 1, jpj 
    335           DO ji = 1, jpi 
    336              zvol = cvol(ji,jj,jk) 
    337 #if defined key_off_degrad 
    338              zvol = zvol * facvol(ji,jj,jk) 
     319 
     320#if defined key_degrad 
     321     tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) * facvol(:,:,:) ) 
     322#else 
     323     tpp = tpp + glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    339324#endif 
    340              tpp  = tpp + ( zprorca(ji,jj,jk) + zprorcad(ji,jj,jk) ) & 
    341                           * zvol * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    342           END DO 
    343         END DO 
    344       END DO 
    345  
    346  
    347       IF( MOD( kt, nspyr ) == 0 .AND. jnt == nrdttrc ) THEN 
    348         IF( lk_mpp ) CALL mpp_sum( tpp ) 
    349         WRITE(numout,*) 'Total PP :' 
     325 
     326     IF( kt == nitend .AND. jnt == nrdttrc ) THEN 
     327        WRITE(numout,*) 'Total PP (Gtc) :' 
    350328        WRITE(numout,*) '-------------------- : ',tpp * 12. / 1.E12 
    351         WRITE(numout,*) '(GtC/yr)' 
    352         tpp = 0. 
     329        WRITE(numout,*)  
    353330      ENDIF 
    354331 
    355 #if defined key_trc_diaadd && defined key_trc_dia3d && ! defined key_iomput 
     332#if defined key_diatrc && ! defined key_iomput 
    356333      !   Supplementary diagnostics 
    357334      zrfact2 = 1.e3 * rfact2r 
     
    367344#endif 
    368345 
    369 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 
     346#if defined key_diatrc && defined key_iomput 
    370347      zrfact2 = 1.e3 * rfact2r 
    371348      IF ( jnt == nrdttrc ) then 
     
    396373      !! 
    397374      !! ** Method  :   Read the nampisprod namelist and check the parameters 
    398       !!      called at the first timestep (nittrc000) 
     375      !!      called at the first timestep (nit000) 
    399376      !! 
    400377      !! ** input   :   Namelist nampisprod 
     
    423400      ENDIF 
    424401 
    425       ! number of timesteps per year 
    426       nspyr  = INT( nyear_len(1) * rday / rdt ) 
    427  
    428       rpis180   = rpi / 180. 
     402      rday1     = 0.6 / rday  
    429403      texcret   = 1.0 - excret 
    430404      texcret2  = 1.0 - excret2 
Note: See TracChangeset for help on using the changeset viewer.