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.
p5zprod.F90 in NEMO/trunk/src/TOP/PISCES/P4Z – NEMO

source: NEMO/trunk/src/TOP/PISCES/P4Z/p5zprod.F90

Last change on this file was 15459, checked in by cetlod, 2 years ago

Various bug fixes and more comments in PISCES routines ; sette test OK in debug mode, nn_hls=1/2, with tiling ; run.stat unchanged ; of course tracer.stat different

  • Property svn:keywords set to Id
File size: 38.0 KB
RevLine 
[7162]1MODULE p5zprod
2   !!======================================================================
3   !!                         ***  MODULE p5zprod  ***
[15459]4   !! TOP :  Growth Rate of the three phytoplanktons groups
5   !!        PISCES-QUOTA version of the module
[7162]6   !!======================================================================
7   !! History :   1.0  !  2004     (O. Aumont) Original code
8   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
9   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation
10   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
11   !!----------------------------------------------------------------------
12   !!   p5z_prod       :   Compute the growth Rate of the two phytoplanktons groups
13   !!   p5z_prod_init  :   Initialization of the parameters for growth
14   !!   p5z_prod_alloc :   Allocate variables for growth
15   !!----------------------------------------------------------------------
16   USE oce_trc         !  shared variables between ocean and passive tracers
17   USE trc             !  passive tracers common variables
18   USE sms_pisces      !  PISCES Source Minus Sink variables
[10362]19   USE p4zlim
[10227]20   USE p5zlim          !  Co-limitations of differents nutrients
[13286]21   USE prtctl          !  print control for debugging
[7162]22   USE iom             !  I/O manager
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   p5z_prod         ! called in p5zbio.F90
28   PUBLIC   p5z_prod_init    ! called in trcsms_pisces.F90
29   PUBLIC   p5z_prod_alloc
30
31   !! * Shared module variables
[15459]32   REAL(wp), PUBLIC ::  pislopen        !: P-I slope of nanophytoplankton
33   REAL(wp), PUBLIC ::  pislopep        !: P-I slope of picophytoplankton
34   REAL(wp), PUBLIC ::  pisloped        !: P-I slope of diatoms
35   REAL(wp), PUBLIC ::  xadap           !: Adaptation factor to low light
36   REAL(wp), PUBLIC ::  excretn         !: Excretion ratio of nanophyto
37   REAL(wp), PUBLIC ::  excretp         !: Excretion ratio of picophyto
38   REAL(wp), PUBLIC ::  excretd         !: Excretion ratio of diatoms
39   REAL(wp), PUBLIC ::  bresp           !: Basal respiration rate
40   REAL(wp), PUBLIC ::  thetanpm        !: Maximum Chl/N ratio of picophyto
41   REAL(wp), PUBLIC ::  thetannm        !: Maximum Chl/N ratio of nanophyto
42   REAL(wp), PUBLIC ::  thetandm        !: Maximum Chl/N ratio of diatoms
43   REAL(wp), PUBLIC ::  chlcmin         !: Minimum Chl/C ratio of phytoplankton
44   REAL(wp), PUBLIC ::  grosip          !: Mean Si/C ratio of diatoms
[7162]45
[15459]46   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   zdaylen ! day length
[7162]47   
48   REAL(wp) :: r1_rday                !: 1 / rday
[15459]49   REAL(wp) :: texcretn               !: 1 - excretn
[7162]50   REAL(wp) :: texcretp               !: 1 - excretp
[15459]51   REAL(wp) :: texcretd               !: 1 - excretd       
[7162]52
[12377]53   !! * Substitutions
54#  include "do_loop_substitute.h90"
[13237]55#  include "domzgr_substitute.h90"
[7162]56   !!----------------------------------------------------------------------
[10067]57   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
[10068]58   !! $Id$
59   !! Software governed by the CeCILL license (see ./LICENSE)
[7162]60   !!----------------------------------------------------------------------
61CONTAINS
62
[12377]63   SUBROUTINE p5z_prod( kt , knt, Kbb, Kmm, Krhs )
[7162]64      !!---------------------------------------------------------------------
65      !!                     ***  ROUTINE p5z_prod  ***
66      !!
67      !! ** Purpose :   Compute the phytoplankton production depending on
68      !!              light, temperature and nutrient availability
[15459]69      !!              Computes also the uptake of nutrients. PISCES-quota
70      !!              relies on a full quota formalism
[7162]71      !!---------------------------------------------------------------------
72      !
73      INTEGER, INTENT(in) :: kt, knt
[12377]74      INTEGER, INTENT(in) :: Kbb, Kmm, Krhs      ! time level indices
[7162]75      !
76      INTEGER  ::   ji, jj, jk
77      REAL(wp) ::   zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2
[15459]78      REAL(wp) ::   zration, zratiop, zratiof, zmax, ztn, zadap
79      REAL(wp) ::   zpronmax, zpropmax, zprofmax, zratio
[7162]80      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot
[15459]81      REAL(wp) ::   zproddoc, zproddon, zproddop, zprodsil, zprodfer, zprodlig, zresptot     
82      REAL(wp) ::   zprnutmax, zprochln, zprochld, zprochlp
83      REAL(wp) ::   zpislopen, zpislopep, zpisloped
84      REAL(wp) ::   zval, zpptot, zpnewtot, zpregtot
85      REAL(wp) ::   zqfpmax, zqfnmax, zqfdmax
86      REAL(wp) ::   zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac, zsilim
[7162]87      CHARACTER (len=25) :: charout
[15459]88      REAL(wp), DIMENSION(jpi,jpj    ) :: zmixnano, zmixpico, zmixdiat
[9125]89      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadp, zpislopeadd
[10362]90      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprmaxp, zprmaxn, zprmaxd
[9125]91      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprbio, zprpic, zprdia, zysopt
92      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprchln, zprchlp, zprchld
93      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprorcan, zprorcap, zprorcad 
94      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprofed, zprofep, zprofen
95      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewp, zpronewd
96      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zproregn, zproregp, zproregd
97      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpropo4n, zpropo4p, zpropo4d
98      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprodopn, zprodopp, zprodopd
[10362]99      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrespn, zrespp, zrespd
[9125]100      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl
[15459]101      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zpligprod
[7162]102      !!---------------------------------------------------------------------
103      !
[9124]104      IF( ln_timing )   CALL timing_start('p5z_prod')
[15459]105
106      ! Initialize the local arrays
[12280]107      zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp
108      zprofed (:,:,:) = 0._wp ; zprofep (:,:,:) = 0._wp ; zprofen (:,:,:) = 0._wp
109      zpronewn(:,:,:) = 0._wp ; zpronewp(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp
110      zproregn(:,:,:) = 0._wp ; zproregp(:,:,:) = 0._wp ; zproregd(:,:,:) = 0._wp 
111      zpropo4n(:,:,:) = 0._wp ; zpropo4p(:,:,:) = 0._wp ; zpropo4d(:,:,:) = 0._wp
112      zprdia  (:,:,:) = 0._wp ; zprpic  (:,:,:) = 0._wp ; zprbio  (:,:,:) = 0._wp
113      zprodopn(:,:,:) = 0._wp ; zprodopp(:,:,:) = 0._wp ; zprodopd(:,:,:) = 0._wp
114      zysopt  (:,:,:) = 0._wp 
115      zrespn  (:,:,:) = 0._wp ; zrespp  (:,:,:) = 0._wp ; zrespd  (:,:,:) = 0._wp 
[15459]116      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp
[7162]117
[15459]118      ! Computation of the optimal production rates and nutrient uptake
119      ! rates. Based on a Q10 description of the thermal dependency.
120      zprnut (:,:,:) =  0.8_wp * r1_rday * tgfunc(:,:,:)
121      zprmaxn(:,:,:) =  0.8_wp * (1. + xpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:)
122      zprmaxd(:,:,:) =  0.8_wp * (1. + xpsino3 * qndmax ) * r1_rday * tgfunc(:,:,:)
123      zprmaxp(:,:,:) =  0.6_wp * (1. + xpsino3 * qnpmax ) * r1_rday * tgfunc(:,:,:)
[7162]124
[15459]125      ! Impact of the day duration and light intermittency on phytoplankton growth
126      ! Intermittency is supposed to have a similar effect on production as
127      ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac.
128      ! zmxl_chl is the fractional day length and is used to compute the mean
129      ! PAR during daytime. The effect of mixing is computed using the
130      ! absolute light level definition of the euphotic zone
131      ! -------------------------------------------------------------------------
[7162]132
[15459]133      IF ( ln_p4z_dcyc ) THEN    ! Diurnal cycle in PISCES
[7162]134
[15459]135         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
136            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
137               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
138                  zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
139               ENDIF
140               zmxl_chl(ji,jj,jk) = zval / 24.
141               zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval )
[12377]142            ENDIF
[15459]143         END_3D
[7162]144
[15459]145      ELSE ! No diurnal cycle in PISCES
146
147         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
148            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
149               zval = MAX( 1., strn(ji,jj) )
150               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
151                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
152               ENDIF
153               zmxl_chl(ji,jj,jk) = zval / 24.
154               zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval )
155            ENDIF
156         END_3D
157
158      ENDIF
159
[10362]160      zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:)
161      zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:)
162      zprpic(:,:,:) = zprmaxp(:,:,:) * zmxl_fac(:,:,:)
[7162]163
164      ! Maximum light intensity
[15459]165      zdaylen(:,:) = MAX(1., strn(:,:)) / 24.
[7162]166
[15459]167      ! Computation of the P-I slope for nanos, picos and diatoms
168      ! The formulation proposed by Geider et al. (1997) has been used.
[15090]169      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]170         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
171            ! Computation of the P-I slope for nanos and diatoms
172            ztn         = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) - 15. )
173            zadap       = xadap * ztn / ( 2.+ ztn )
174            !
[15459]175            ! Nanophytoplankton
[12377]176            zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb)    &
177            &                       /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
[15459]178
179            ! Picophytoplankton
[12377]180            zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) )   &
181            &                       * tr(ji,jj,jk,jppch,Kbb) /( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn)
[15459]182
183            ! Diatoms
[12377]184            zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb)    &
185               &                    /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn)
186            !
187            zpislopen = zpislopeadn(ji,jj,jk) / ( zprbio(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn )
188            zpislopep = zpislopeadp(ji,jj,jk) / ( zprpic(ji,jj,jk) * rday * xlimpic(ji,jj,jk) + rtrn )
189            zpisloped = zpislopeadd(ji,jj,jk) / ( zprdia(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn )
[7162]190
[12377]191            ! Computation of production function for Carbon
[15459]192            ! Actual light levels are used here
[12377]193            !  ---------------------------------------------
[15459]194            zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  )
195            zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  )
196            zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  )
[7162]197
[15459]198            !  Computation of production function for Chlorophyll
199            !  Mean light level in the mixed layer (when appropriate)
200            !  is used here (acclimation is in general slower than
201            !  the characteristic time scales of vertical mixing)
202            !  ------------------------------------------------------
[12377]203            zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
204            zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
205            zpislopep = zpislopep * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
206            zprchln(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) )  )
207            zprchlp(ji,jj,jk) = zprmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epicom(ji,jj,jk) )  )
208            zprchld(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) )  )
209         ENDIF
210      END_3D
[7162]211
[15090]212      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]213          IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
[15459]214            ! Si/C of diatoms
215            ! ------------------------
216            ! Si/C increases with iron stress and silicate availability (zsilfac)
217            ! Si/C is arbitrariliy increased for very high Si concentrations
218            ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2)
219            ! A parameterization derived from Flynn (2003) is used for the control
220            ! when Si is not limiting which is similar to the parameterisation
221            ! proposed by Gurney and Davidson (1999).
222            ! -----------------------------------------------------------------------
[12377]223            zlim  = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 )
[15459]224            zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn )
[12377]225            zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb)
226            IF (gphit(ji,jj) < -30 ) THEN
[15459]227              zsilfac2 = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 )
[12377]228            ELSE
[15459]229              zsilfac2 = 1.
[12377]230            ENDIF
[15459]231            zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn )
232            zratiosi = MAX(0., MIN(1.0, zratiosi) )
233            zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 )
234            IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN
235               zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi
236            ELSE
237               zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi
238            ENDIF
239         ENDIF
[12377]240      END_3D
[7162]241
[15459]242      !  Sea-ice effect on production
243      ! No production is assumed below sea ice
244      ! --------------------------------------
[15090]245      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]246         zprbio(ji,jj,jk)  = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
247         zprpic(ji,jj,jk)  = zprpic(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
248         zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
249         zprnut(ji,jj,jk)  = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
250      END_3D
[7162]251
[15459]252      ! Computation of the various production and uptake terms of nanophytoplankton
253      ! Interactions between N and P are modeled according to the Chain Model
254      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional
255      ! Droop kinetics. When the quota is approaching the maximum achievable
256      ! quota, uptake is downregulated according to a sigmoidal function
257      ! (power 2), as proposed by Flynn (2003)
258      ! ---------------------------------------------------------------------------
[15090]259      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]260         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
261            !  production terms for nanophyto.
262            zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2
[15459]263
264            ! Size computation
265            ! Size is made a function of the limitation of of phytoplankton growth
266            ! Strongly limited cells are supposed to be smaller. sizena is the
267            ! size at time step t+1 and is thus updated at the end of the
268            ! current time step
269            ! --------------------------------------------------------------------
270            zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn )
271            zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
272            sizena(ji,jj,jk) = MIN(xsizern, MAX( sizena(ji,jj,jk), zsizetmp ) )
273            ! Maximum potential uptake rate
[12377]274            zration = tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
275            zratiop = tr(ji,jj,jk,jppph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
276            zratiof = tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
277            zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpphy,Kbb) * rfact2
278            ! Uptake of nitrogen
[15459]279            zratio = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) )
280            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
[12377]281            zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) )   &
282            &          / ( xqpnmax(ji,jj,jk) - xqpnmin(ji,jj,jk) + rtrn ), xlimnfe(ji,jj,jk) ) )
[15459]283            zpronmax = zpronmax * xqnnmin(ji,jj,jk) / qnnmin
284            zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk)
[12377]285            zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk)
[15459]286            ! Uptake of phosphorus and DOP
287            zratio = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) )
288            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
[12377]289            zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk)
290            zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk)
291            zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk)
292            ! Uptake of iron
[15459]293            zqfnmax = xqfuncfecn(ji,jj,jk) + ( qfnmax - xqfuncfecn(ji,jj,jk) ) * xlimnpn(ji,jj,jk)
294            zratio = 1.0 - MIN( 1., zratiof / zqfnmax )
295            zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) )
296            zprofmax = zprnutmax * zqfnmax * zmax 
297            zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk)    &
298            &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn  &
[12377]299            &          + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )
300         ENDIF
301      END_3D
[7162]302
[15459]303      ! Computation of the various production and uptake terms of picophytoplankton
304      ! Interactions between N and P are modeled according to the Chain Model
305      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional
306      ! Droop kinetics. When the quota is approaching the maximum achievable
307      ! quota, uptake is downregulated according to a sigmoidal function
308      ! (power 2), as proposed by Flynn (2003)
309      ! ---------------------------------------------------------------------------
[15090]310      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]311         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
312            !  production terms for picophyto.
313            zprorcap(ji,jj,jk) = zprpic(ji,jj,jk)  * xlimpic(ji,jj,jk) * tr(ji,jj,jk,jppic,Kbb) * rfact2
[15459]314            ! Size computation
315            ! Size is made a function of the limitation of of phytoplankton growth
316            ! Strongly limited cells are supposed to be smaller. sizepa is
317            ! size at time step t+1 and is thus updated at the end of the
318            ! current time step
319            ! --------------------------------------------------------------------
320            zlimfac = zprchlp(ji,jj,jk)  * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn )
321            zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
322            sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) )
323            ! Maximum potential uptake rate of nutrients
[12377]324            zration = tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn )
325            zratiop = tr(ji,jj,jk,jpppi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn )
326            zratiof = tr(ji,jj,jk,jppfe,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn )
327            zprnutmax = zprnut(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jppic,Kbb) * rfact2
328            ! Uptake of nitrogen
[15459]329            zratio = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) )
330            zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) )
[12377]331            zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) )   &
332            &          / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) )
[15459]333            zpronmax = zpronmax * xqnpmin(ji,jj,jk) / qnnmin
334            zpronewp(ji,jj,jk) = zpronmax * xpicono3(ji,jj,jk) 
[12377]335            zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk)
336            ! Uptake of phosphorus
[15459]337            zratio = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) )
338            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
339            zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) 
[12377]340            zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk)
341            zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk)
342            ! Uptake of iron
[15459]343            zqfpmax = xqfuncfecp(ji,jj,jk) + ( qfpmax - xqfuncfecp(ji,jj,jk) ) * xlimnpp(ji,jj,jk)
344            zratio = 1.0 - MIN( 1., zratiof / zqfpmax )
345            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
346            zprofmax = zprnutmax * zqfpmax * zmax
347            zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk)  &
348            &          * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn   &
[12377]349            &          + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) )
350         ENDIF
351      END_3D
[7162]352
[15459]353      ! Computation of the various production and uptake terms of diatoms
354      ! Interactions between N and P are modeled according to the Chain Model
355      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional
356      ! Droop kinetics. When the quota is approaching the maximum achievable
357      ! quota, uptake is downregulated according to a sigmoidal function
358      ! (power 2), as proposed by Flynn (2003)
359      ! ---------------------------------------------------------------------------
[15090]360      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]361         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
362            !  production terms for diatomees
363            zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2
[15459]364            ! Size computation
365            ! Size is made a function of the limitation of of phytoplankton growth
366            ! Strongly limited cells are supposed to be smaller. sizeda is
367            ! size at time step t+1 and is thus updated at the end of the
368            ! current time step.
369            ! --------------------------------------------------------------------
370            zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn )
371            zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
372            sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) )
373            ! Maximum potential uptake rate of nutrients
[12377]374            zration = tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
375            zratiop = tr(ji,jj,jk,jppdi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
376            zratiof = tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
377            zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * tr(ji,jj,jk,jpdia,Kbb) * rfact2
378            ! Uptake of nitrogen
[15459]379            zratio = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) )
380            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
[12377]381            zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) )   &
382            &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) )
[15459]383            zpronmax = zpronmax * xqndmin(ji,jj,jk) / qnnmin
384            zpronewd(ji,jj,jk) = zpronmax * xdiatno3(ji,jj,jk)
[12377]385            zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk)
386            ! Uptake of phosphorus
[15459]387            zratio = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) )
388            zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) )
[12377]389            zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk)
390            zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk)
391            zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk)
392            ! Uptake of iron
[15459]393            zqfdmax = xqfuncfecd(ji,jj,jk) + ( qfdmax - xqfuncfecd(ji,jj,jk) ) * xlimnpd(ji,jj,jk)
394            zratio = 1.0 - MIN( 1., zratiof / zqfdmax )
395            zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
396            zprofmax = zprnutmax * zqfdmax * zmax
397            zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk)    &
398            &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn   &
[12377]399            &          + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )
400         ENDIF
401      END_3D
[7162]402
[15459]403      ! Production of Chlorophyll. The formulation proposed by Geider et al.
404      ! is adopted here.
405      ! --------------------------------------------------------------------
[15090]406      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[12377]407         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
408               !  production terms for nanophyto. ( chlorophyll )
409            znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
410            zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk)
[15459]411            zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn )
[12377]412            zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) )
413               !  production terms for picophyto. ( chlorophyll )
414            zpicotot = epicom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
415            zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk)
[15459]416            zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn )
[12377]417            zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) )
[15459]418            !  production terms for diatoms ( chlorophyll )
[12377]419            zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
420            zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk)
[15459]421            zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn )
[12377]422            zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) )
423            !   Update the arrays TRA which contain the Chla sources and sinks
424            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn
425            tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld * texcretd
426            tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) + zprochlp * texcretp
427         ENDIF
428      END_3D
[7162]429
430      !   Update the arrays TRA which contain the biological sources and sinks
[15090]431      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[15459]432        zpptot   = zpropo4n(ji,jj,jk) + zpropo4d(ji,jj,jk) + zpropo4p(ji,jj,jk)
433        zpnewtot = zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk)
434        zpregtot = zproregn(ji,jj,jk) + zproregd(ji,jj,jk) + zproregp(ji,jj,jk)
435
[12377]436        zprontot = zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)
437        zproptot = zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)
438        zprodtot = zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)
[15459]439        !
440        zproddoc = excretd * zprorcad(ji,jj,jk) &
441        &        + excretn * zprorcan(ji,jj,jk) &
442        &        + excretp * zprorcap(ji,jj,jk)
443        !
444        zproddop = excretd * zpropo4d(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) &
445        &        + excretn * zpropo4n(ji,jj,jk) - texcretn * zprodopn(ji,jj,jk) &
446        &        + excretp * zpropo4p(ji,jj,jk) - texcretp * zprodopp(ji,jj,jk)
447
448        zproddon =  excretd * zprodtot + excretn * zprontot + excretp * zproptot
449
450        zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
451        zresptot = zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) 
452        !
453        tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot
454        tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot
455        tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot 
456        !
457        tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs)         &
458           &                     + zprorcan(ji,jj,jk) * texcretn  &
459           &                     - xpsino3 * zpronewn(ji,jj,jk)   &
460           &                     - xpsinh4 * zproregn(ji,jj,jk)   &
461           &                     - zrespn(ji,jj,jk) 
462
[12377]463        tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) + zprontot * texcretn
[15459]464        tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + ( zpropo4n(ji,jj,jk) + zprodopn(ji,jj,jk) ) * texcretn
[12377]465        tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn
[15459]466
467        !
468        tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs)         &
469           &                     + zprorcap(ji,jj,jk) * texcretp  &
470           &                     - xpsino3 * zpronewp(ji,jj,jk)   &
471           &                     - xpsinh4 * zproregp(ji,jj,jk)   &
472           &                     - zrespp(ji,jj,jk) 
473
[12377]474        tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) + zproptot * texcretp
[15459]475        tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + ( zpropo4p(ji,jj,jk) + zprodopp(ji,jj,jk) ) * texcretp
[12377]476        tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) + zprofep(ji,jj,jk) * texcretp
[15459]477
478        !
479        tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs)         &
480           &                    + zprorcad(ji,jj,jk) * texcretd   &
481           &                    - xpsino3 * zpronewd(ji,jj,jk)    &
482           &                    - xpsinh4 * zproregd(ji,jj,jk)    &
483           &                    - zrespd(ji,jj,jk) 
484
[12377]485        tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) + zprodtot * texcretd
[15459]486        tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + ( zpropo4d(ji,jj,jk) + zprodopd(ji,jj,jk) ) * texcretd
[12377]487        tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd
[15459]488        tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb)
489        tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc
490        tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zproddon                                       
491        tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zproddop
492 
493        tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) &
494           &                     + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot - o2ut * zresptot 
495
496        tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer
497        consfe3(ji,jj,jk)       = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   &
498           &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2
499        tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 
500
501        tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot  &
502           &                     + xpsino3 * zpronewn(ji,jj,jk) + xpsinh4 * zproregn(ji,jj,jk)   &
503           &                     + xpsino3 * zpronewp(ji,jj,jk) + xpsinh4 * zproregp(ji,jj,jk)   &
504           &                     + xpsino3 * zpronewd(ji,jj,jk) + xpsinh4 * zproregd(ji,jj,jk) 
505
506        tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot )
507        !
[12377]508      END_3D
[15459]509     
510     ! Production and uptake of ligands by phytoplankton. This part is activated
511     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small
512     ! and based on the FeL model by Morel et al. (2008) and on the study of
513     ! Shaked and Lis (2012)
514     ! -------------------------------------------------------------------------
[7162]515     IF( ln_ligand ) THEN
[15090]516         DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
[15459]517           zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk)
518           zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
519           zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
520           !
521           tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig
522        END_3D
[7162]523     ENDIF
524
525    ! Total primary production per year
526    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  &
[10425]527      & tpp = glob_sum( 'p5zprod', ( zprorcan(:,:,:) + zprorcad(:,:,:) + zprorcap(:,:,:) ) * cvol(:,:,:) )
[7162]528
[12276]529    IF( lk_iomput .AND.  knt == nrdttrc ) THEN
530       zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
531       !
532       CALL iom_put( "PPPHYP"  , zprorcap(:,:,:) * zfact * tmask(:,:,:)   ) ! primary production by picophyto
533       CALL iom_put( "PPPHYN"  , zprorcan(:,:,:) * zfact * tmask(:,:,:) )  ! primary production by nanophyto
534       CALL iom_put( "PPPHYD"  , zprorcad(:,:,:) * zfact * tmask(:,:,:)   ) ! primary production by diatomes
535       CALL iom_put( "PPNEWN"  , zpronewp(:,:,:) * zfact * tmask(:,:,:)    ) ! new primary production by picophyto
536       CALL iom_put( "PPNEWN"  , zpronewn(:,:,:) * zfact * tmask(:,:,:)    ) ! new primary production by nanophyto
537       CALL iom_put( "PPNEWD"  , zpronewd(:,:,:) * zfact * tmask(:,:,:)   ) ! new primary production by diatomes
[15459]538       CALL iom_put( "PBSi"    , zprmaxd (:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:)  ) ! biogenic silica production
539       CALL iom_put( "PFeP"    , zprofep (:,:,:) * zfact * tmask(:,:,:)  ) ! biogenic iron production by picophyto
[12276]540       CALL iom_put( "PFeN"    , zprofen(:,:,:) * zfact * tmask(:,:,:)  ) ! biogenic iron production by nanophyto
541       CALL iom_put( "PFeD"    , zprofed(:,:,:) * zfact * tmask(:,:,:)  ) ! biogenic iron production by  diatomes
[15459]542       IF( ln_ligand .AND. ( iom_use( "LPRODP" ) .OR. iom_use( "LDETP" ) ) ) THEN
543           ALLOCATE(  zpligprod(jpi,jpj,jpk) )
544           zpligprod(:,:,:) = excretd * zprorcad(:,:,:) + excretn * zprorcan(:,:,:) + excretp * zprorcap(:,:,:)
545           CALL iom_put( "LPRODP"  , zpligprod(:,:,:) * ldocp * 1e9 * zfact * tmask(:,:,:) )
546           !
547           zpligprod(:,:,:) = ( texcretn * zprofen(:,:,:) + texcretd * zprofed(:,:,:) + texcretp * zprofep(:,:,:) ) & 
548             &                  * plig(:,:,:) / ( rtrn + plig(:,:,:) + 75.0 * (1.0 - plig(:,:,:) ) )
549           CALL iom_put( "LDETP"   , zpligprod(:,:,:)  * lthet * 1e9 * zfact * tmask(:,:,:) )
550           DEALLOCATE(  zpligprod )
[12280]551       ENDIF
[12276]552       CALL iom_put( "Mumax"   , zprmaxn(:,:,:) * tmask(:,:,:)  ) ! Maximum growth rate
553       CALL iom_put( "MuP"     , zprpic(:,:,:) * xlimpic(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for picophyto
554       CALL iom_put( "MuN"     , zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for nanophyto
555       CALL iom_put( "MuD"     , zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for diatoms
556       CALL iom_put( "LPlight" , zprpic(:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:)  )  ! light limitation term
557       CALL iom_put( "LNlight" , zprbio(:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:)  )  ! light limitation term
558       CALL iom_put( "LDlight" , zprdia(:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:)   )
[15459]559       CALL iom_put( "MunetP"  , ( tr(:,:,:,jppic,Krhs)/rfact2/(tr(:,:,:,jppic,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto
560       CALL iom_put( "MunetN"  , ( tr(:,:,:,jpphy,Krhs)/rfact2/(tr(:,:,:,jpphy,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto
561       CALL iom_put( "MunetD"  , ( tr(:,:,:,jpdia,Krhs)/rfact2/(tr(:,:,:,jpdia,Kbb)+ rtrn ) * tmask(:,:,:)) ) ! Realized growth rate for picophyto
[12276]562       CALL iom_put( "TPP"     , ( zprorcap(:,:,:) + zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  )  ! total primary production
563       CALL iom_put( "TPNEW"   , ( zpronewp(:,:,:) + zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ) ! total new production
564       CALL iom_put( "TPBFE"   , ( zprofep (:,:,:) + zprofen (:,:,:) + zprofed (:,:,:) ) * zfact * tmask(:,:,:)  )  ! total biogenic iron production
565       CALL iom_put( "tintpp"  , tpp * zfact )  !  global total integrated primary production molC/s
[7162]566     ENDIF
567
[12377]568      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
[7162]569         WRITE(charout, FMT="('prod')")
[13286]570         CALL prt_ctl_info( charout, cdcomp = 'top' )
571         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
[7162]572      ENDIF
573      !
[9124]574      IF( ln_timing )   CALL timing_stop('p5z_prod')
[7162]575      !
576   END SUBROUTINE p5z_prod
577
578
579   SUBROUTINE p5z_prod_init
580      !!----------------------------------------------------------------------
581      !!                  ***  ROUTINE p5z_prod_init  ***
582      !!
583      !! ** Purpose :   Initialization of phytoplankton production parameters
584      !!
[15459]585      !! ** Method  :   Read the namp5zprod namelist and check the parameters
[7162]586      !!      called at the first timestep (nittrc000)
587      !!
[15459]588      !! ** input   :   Namelist namp5zprod
[7162]589      !!----------------------------------------------------------------------
[15459]590      INTEGER :: ios    ! Local integer output status for namelist read
[9124]591      !!
[7162]592      NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd,     &
[7195]593         &                 thetannm, thetanpm, thetandm, chlcmin, grosip, bresp, xadap
[7162]594      !!----------------------------------------------------------------------
595
596      READ  ( numnatp_ref, namp5zprod, IOSTAT = ios, ERR = 901)
[11536]597901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zprod in reference namelist' )
[7162]598
599      READ  ( numnatp_cfg, namp5zprod, IOSTAT = ios, ERR = 902 )
[11536]600902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zprod in configuration namelist' )
[7162]601      IF(lwm) WRITE ( numonp, namp5zprod )
602
603      IF(lwp) THEN                         ! control print
604         WRITE(numout,*) ' '
605         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, namp5zprod'
606         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
607         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip
608         WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen
609         WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped
610         WRITE(numout,*) '    P-I slope  for picophytoplankton          pislopep     =', pislopep
611         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap
612         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn
613         WRITE(numout,*) '    excretion ratio of picophytoplankton      excretp      =', excretp
614         WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd
615         WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp
616         WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
617         WRITE(numout,*) '    Minimum Chl/N in nanophytoplankton        thetannm     =', thetannm
618         WRITE(numout,*) '    Minimum Chl/N in picophytoplankton        thetanpm     =', thetanpm
619         WRITE(numout,*) '    Minimum Chl/N in diatoms                  thetandm     =', thetandm
620      ENDIF
621      !
622      r1_rday   = 1._wp / rday 
623      texcretn  = 1._wp - excretn
624      texcretp  = 1._wp - excretp
625      texcretd  = 1._wp - excretd
626      tpp       = 0._wp
627      !
628   END SUBROUTINE p5z_prod_init
629
630
631   INTEGER FUNCTION p5z_prod_alloc()
632      !!----------------------------------------------------------------------
633      !!                     ***  ROUTINE p5z_prod_alloc  ***
634      !!----------------------------------------------------------------------
[10362]635      ALLOCATE( zdaylen(jpi,jpj), STAT = p5z_prod_alloc )
[7162]636      !
[10425]637      IF( p5z_prod_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_prod_alloc : failed to allocate arrays.' )
[7162]638      !
639   END FUNCTION p5z_prod_alloc
640   !!======================================================================
[9788]641END MODULE p5zprod
Note: See TracBrowser for help on using the repository browser.