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 branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z – NEMO

source: branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P5Z/p5zprod.F90 @ 7617

Last change on this file since 7617 was 7617, checked in by aumont, 8 years ago

update diagnostics + changes in quota code

  • Property svn:executable set to *
File size: 36.6 KB
Line 
1MODULE p5zprod
2   !!======================================================================
3   !!                         ***  MODULE p5zprod  ***
4   !! TOP :  Growth Rate of the two phytoplanktons groups
5   !!======================================================================
6   !! History :   1.0  !  2004     (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation
9   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
10   !!----------------------------------------------------------------------
11#if defined key_pisces_quota
12   !!----------------------------------------------------------------------
13   !!   'key_pisces_quota'     PISCES bio-model with variable stoichiometry
14   !!----------------------------------------------------------------------
15   !!   p5z_prod       :   Compute the growth Rate of the two phytoplanktons groups
16   !!   p5z_prod_init  :   Initialization of the parameters for growth
17   !!   p5z_prod_alloc :   Allocate variables for growth
18   !!----------------------------------------------------------------------
19   USE oce_trc         !  shared variables between ocean and passive tracers
20   USE trc             !  passive tracers common variables
21   USE sms_pisces      !  PISCES Source Minus Sink variables
22   USE p4zopt          !  optical model
23   USE p5zlim          !  Co-limitations of differents nutrients
24   USE prtctl_trc      !  print control for debugging
25   USE iom             !  I/O manager
26
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   p5z_prod         ! called in p5zbio.F90
31   PUBLIC   p5z_prod_init    ! called in trcsms_pisces.F90
32   PUBLIC   p5z_prod_alloc
33
34   !! * Shared module variables
35   REAL(wp), PUBLIC ::  pislopen        !:
36   REAL(wp), PUBLIC ::  pislopep        !:
37   REAL(wp), PUBLIC ::  pisloped        !:
38   REAL(wp), PUBLIC ::  xadap           !:
39   REAL(wp), PUBLIC ::  excretn         !:
40   REAL(wp), PUBLIC ::  excretp         !:
41   REAL(wp), PUBLIC ::  excretd         !:
42   REAL(wp), PUBLIC ::  bresp           !:
43   REAL(wp), PUBLIC ::  thetanpm        !:
44   REAL(wp), PUBLIC ::  thetannm        !:
45   REAL(wp), PUBLIC ::  thetandm        !:
46   REAL(wp), PUBLIC ::  chlcmin         !:
47   REAL(wp), PUBLIC ::  grosip          !:
48
49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmaxn   !: optimal production = f(temperature)
50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmaxp   !: optimal production = f(temperature)
51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmaxd   !: optimal production = f(temperature)
52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   zdaylen
53   
54   REAL(wp) :: r1_rday                !: 1 / rday
55   REAL(wp) :: texcretn               !: 1 - excret
56   REAL(wp) :: texcretp               !: 1 - excretp
57   REAL(wp) :: texcretd               !: 1 - excret2       
58
59
60   !!* Substitution
61#  include "top_substitute.h90"
62   !!----------------------------------------------------------------------
63   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
64   !! $Id: p4zprod.F90 3160 2011-11-20 14:27:18Z cetlod $
65   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
66   !!----------------------------------------------------------------------
67CONTAINS
68
69   SUBROUTINE p5z_prod( kt , knt )
70      !!---------------------------------------------------------------------
71      !!                     ***  ROUTINE p5z_prod  ***
72      !!
73      !! ** Purpose :   Compute the phytoplankton production depending on
74      !!              light, temperature and nutrient availability
75      !!
76      !! ** Method  : - ???
77      !!---------------------------------------------------------------------
78      !
79      INTEGER, INTENT(in) :: kt, knt
80      !
81      INTEGER  ::   ji, jj, jk
82      REAL(wp) ::   zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2
83      REAL(wp) ::   zration, zratiop, zratiof, zmax, zmax2, zsilim, ztn, zadap
84      REAL(wp) ::   zpronmax, zpropmax, zprofmax, zrat
85      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot
86      REAL(wp) ::   zprnutmax, zdocprod, zprochln, zprochld, zprochlp
87      REAL(wp) ::   zpislopen, zpislopep, zpisloped, thetannm_n, thetandm_n, thetanpm_n
88      REAL(wp) ::   zratiosi, zquotasi, grosip2
89      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup
90      REAL(wp) ::   zrfact2
91      CHARACTER (len=25) :: charout
92      REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixpico, zmixdiat, zstrn
93      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopeadn, zpislopeadp, zpislopeadd
94      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprbio, zprpic, zprdia, zysopt
95      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprchln, zprchlp, zprchld
96      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorcan, zprorcap, zprorcad 
97      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprofed, zprofep, zprofen, zprosid
98      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewp, zpronewd
99      REAL(wp), POINTER, DIMENSION(:,:,:) :: zproregn, zproregp, zproregd
100      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpropo4n, zpropo4p, zpropo4d
101      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprodopn, zprodopp, zprodopd
102      REAL(wp), POINTER, DIMENSION(:,:,:) :: zrespn, zrespp, zrespd, zprnut
103      REAL(wp), POINTER, DIMENSION(:,:,:) :: zcroissn, zcroissp, zcroissd
104      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl
105#if defined key_ligand
106      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpligprod, zpligprod2
107#endif
108      !!---------------------------------------------------------------------
109      !
110      IF( nn_timing == 1 )  CALL timing_start('p5z_prod')
111      !
112      !  Allocate temporary workspace
113      CALL wrk_alloc( jpi, jpj,      zmixnano, zmixpico, zmixdiat, zstrn )
114      CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl )
115      CALL wrk_alloc( jpi, jpj, jpk, zpislopeadn, zpislopeadp, zpislopeadd, zysopt ) 
116      CALL wrk_alloc( jpi, jpj, jpk, zprdia, zprpic, zprbio, zprorcan, zprorcap, zprorcad )
117      CALL wrk_alloc( jpi, jpj, jpk, zprofed, zprofep, zprofen, zprosid )
118      CALL wrk_alloc( jpi, jpj, jpk, zpronewn, zpronewp, zpronewd, zproregn, zproregp, zproregd )
119      CALL wrk_alloc( jpi, jpj, jpk, zpropo4n, zpropo4p, zpropo4d, zrespn, zrespp, zrespd, zprnut )
120      CALL wrk_alloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd )
121      CALL wrk_alloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd )
122#if defined key_ligand
123      CALL wrk_alloc( jpi, jpj, jpk, zpligprod, zpligprod2 )
124#endif
125      !
126      zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp
127      zprofed (:,:,:) = 0._wp ; zprofep (:,:,:) = 0._wp ; zprofen (:,:,:) = 0._wp
128      zpronewn(:,:,:) = 0._wp ; zpronewp(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp
129      zproregn(:,:,:) = 0._wp ; zproregp(:,:,:) = 0._wp ; zproregd(:,:,:) = 0._wp 
130      zpropo4n(:,:,:) = 0._wp ; zpropo4p(:,:,:) = 0._wp ; zpropo4d(:,:,:) = 0._wp
131      zprdia  (:,:,:) = 0._wp ; zprpic  (:,:,:) = 0._wp ; zprbio  (:,:,:) = 0._wp
132      zysopt  (:,:,:) = 0._wp ; zprosid (:,:,:) = 0._wp
133      zrespn  (:,:,:) = 0._wp ; zrespp  (:,:,:) = 0._wp ; zrespd  (:,:,:) = 0._wp 
134
135      ! Computation of the optimal production
136      prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:)
137      prmaxp(:,:,:) = 0.5 / 0.8 * prmaxn(:,:,:) 
138      prmaxd(:,:,:) = prmaxn(:,:,:) 
139      zprnut(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)
140
141      IF( lk_degrad )  THEN
142         prmaxn(:,:,:) = prmaxn(:,:,:) * facvol(:,:,:) 
143         prmaxp(:,:,:) = prmaxp(:,:,:) * facvol(:,:,:)
144         prmaxd(:,:,:) = prmaxd(:,:,:) * facvol(:,:,:)
145      ENDIF
146
147      ! compute the day length depending on latitude and the day
148      zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp )
149      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  )
150
151      ! day length in hours
152      zstrn(:,:) = 0.
153      DO jj = 1, jpj
154         DO ji = 1, jpi
155            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad )
156            zargu = MAX( -1., MIN(  1., zargu ) )
157            zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. )
158         END DO
159      END DO
160
161         ! Impact of the day duration on phytoplankton growth
162      DO jk = 1, jpkm1
163         DO jj = 1 ,jpj
164            DO ji = 1, jpi
165               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
166                  zval = MAX( 1., zstrn(ji,jj) )
167                  IF( fsdept(ji,jj,jk) <= hmld(ji,jj) ) THEN
168                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
169                  ENDIF
170                  zmxl_chl(ji,jj,jk) = zval / 24.
171                  zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval )
172               ENDIF
173            END DO
174         END DO
175      END DO
176
177      zprbio(:,:,:) = prmaxn(:,:,:) * zmxl_fac(:,:,:)
178      zprdia(:,:,:) = prmaxd(:,:,:) * zmxl_fac(:,:,:)
179      zprpic(:,:,:) = prmaxp(:,:,:) * zmxl_fac(:,:,:)
180
181
182      ! Maximum light intensity
183      zdaylen(:,:) = MAX(1., zstrn(:,:)) / 24.
184      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24.
185
186      DO jk = 1, jpkm1
187!CDIR NOVERRCHK
188         DO jj = 1, jpj
189!CDIR NOVERRCHK
190            DO ji = 1, jpi
191               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
192                  ! Computation of the P-I slope for nanos and diatoms
193                  ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. )
194                  zadap       = xadap * ztn / ( 2.+ ztn )
195                  !
196                  zpislopeadn(ji,jj,jk) = pislopen * trb(ji,jj,jk,jpnch)    &
197                  &                       /( trb(ji,jj,jk,jpphy) * 12. + rtrn)
198                  zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) )   &
199                  &                       * trb(ji,jj,jk,jppch) /( trb(ji,jj,jk,jppic) * 12. + rtrn)
200                  zpislopeadd(ji,jj,jk) = pisloped * trb(ji,jj,jk,jpdch)    &
201                     &                    /( trb(ji,jj,jk,jpdia) * 12. + rtrn)
202                  !
203                  zpislopen = zpislopeadn(ji,jj,jk) / ( zprbio(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn )
204                  zpislopep = zpislopeadp(ji,jj,jk) / ( zprpic(ji,jj,jk) * rday * xlimpic(ji,jj,jk) + rtrn )
205                  zpisloped = zpislopeadd(ji,jj,jk) / ( zprdia(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn )
206
207                  ! Computation of production function for Carbon
208                  !  ---------------------------------------------
209                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
210                  zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) )  )
211                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  )
212
213                  ! Computation of production function for Chlorophyll
214                  !  -------------------------------------------------
215                  zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
216                  zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
217                  zpislopep = zpislopep * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
218                  zprchln(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
219                  zprchlp(ji,jj,jk) = prmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) )  )
220                  zprchld(ji,jj,jk) = prmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  )
221               ENDIF
222            END DO
223         END DO
224      END DO
225
226      DO jk = 1, jpkm1
227         DO jj = 1, jpj
228            DO ji = 1, jpi
229
230                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
231                  !    Si/C of diatoms
232                  !    ------------------------
233                  !    Si/C increases with iron stress and silicate availability
234                  !    Si/C is arbitrariliy increased for very high Si concentrations
235                  !    to mimic the very high ratios observed in the Southern Ocean (silpot2)
236                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil)
237                  IF (gphit(ji,jj) < -30 ) THEN
238                    zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 )
239                  ELSE
240                    zsilfac2 = 1. 
241                  ENDIF
242                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi2(ji,jj,jk) )
243                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 )
244                  zratiosi = trb(ji,jj,jk,jpndi)
245                  grosip2 = zsilfac2 * grosip
246                  zquotasi = MIN( grosip2, trn(ji,jj,jk,jpdsi) / (zratiosi + rtrn ) )
247                  zysopt(ji,jj,jk) = 1./3. * zratiosi * zlim * MAX(0.0, grosip2 - zquotasi) 
248                  zysopt(ji,jj,jk) = zysopt(ji,jj,jk) * 1.005 * zsilim**3 / (0.005 + zsilim**3 )
249              ENDIF
250            END DO
251         END DO
252      END DO
253
254      !  Sea-ice effect on production                                                                               
255      DO jk = 1, jpkm1
256         DO jj = 1, jpj
257            DO ji = 1, jpi
258               zprbio(ji,jj,jk)  = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
259               zprpic(ji,jj,jk)  = zprpic(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
260               zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
261               zprnut(ji,jj,jk)  = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
262            END DO
263         END DO
264      END DO
265
266      ! Computation of the various production terms of nanophytoplankton
267      DO jk = 1, jpkm1
268         DO jj = 1, jpj
269            DO ji = 1, jpi
270               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
271                  !  production terms for nanophyto.
272                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2
273                  !
274                  zration = trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn )
275                  zratiop = trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn )
276                  zratiof = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn )
277                  zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpphy) * rfact2
278                  ! Uptake of nitrogen
279                  zrat = MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 
280                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
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) ) )
283                  zpronewn(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xnanono3(ji,jj,jk)
284                  zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk)
285                  ! Uptake of phosphorus
286                  zrat = MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) )
287                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
288                  zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk)
289                  zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk)
290                  zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk)
291                  ! Uptake of iron
292                  zrat = MIN( 1., zratiof / qfnmax )
293                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
294                  zprofmax = zprnutmax * qfnmax * zmax
295                  zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 3. - 2.4 * xlimnfe(ji,jj,jk)    &
296                  &          / ( xlimnfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn  &
297                  &          + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )
298               ENDIF
299            END DO
300         END DO
301      END DO
302
303      ! Computation of the various production terms of picophytoplankton
304      DO jk = 1, jpkm1
305         DO jj = 1, jpj
306            DO ji = 1, jpi
307               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
308                  !  production terms for picophyto.
309                  zprorcap(ji,jj,jk) = zprpic(ji,jj,jk)  * xlimpic(ji,jj,jk) * trb(ji,jj,jk,jppic) * rfact2
310                  !
311                  zration = trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn )
312                  zratiop = trb(ji,jj,jk,jpppi) / ( trb(ji,jj,jk,jppic) + rtrn )
313                  zratiof = trb(ji,jj,jk,jppfe) / ( trb(ji,jj,jk,jppic) + rtrn )
314                  zprnutmax = zprnut(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jppic) * rfact2
315                  ! Uptake of nitrogen
316                  zrat = MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) )
317                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
318                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) )   &
319                  &          / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) )
320                  zpronewp(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xpicono3(ji,jj,jk) 
321                  zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk)
322                  ! Uptake of phosphorus
323                  zrat = MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) )
324                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
325                  zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk)
326                  zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk)
327                  zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk)
328                  ! Uptake of iron
329                  zrat = MIN( 1., zratiof / qfpmax )
330                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
331                  zprofmax = zprnutmax * qfpmax * zmax
332                  zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 3. - 2.4 * xlimpfe(ji,jj,jk)   &
333                  &          / ( xlimpfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn   &
334                  &          + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) )
335               ENDIF
336            END DO
337         END DO
338      END DO
339
340      ! Computation of the various production terms of diatoms
341      DO jk = 1, jpkm1
342         DO jj = 1, jpj
343            DO ji = 1, jpi
344               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
345                  !  production terms for diatomees
346                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2
347                  ! Computation of the respiration term according to pahlow
348                  ! & oschlies (2013)
349                  !
350                  zration = trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn )
351                  zratiop = trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn )
352                  zratiof = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn )
353                  zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpdia) * rfact2
354                  ! Uptake of nitrogen
355                  zrat = MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) )
356                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
357                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) )   &
358                  &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) )
359                  zpronewd(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xdiatno3(ji,jj,jk)
360                  zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk)
361                  ! Uptake of phosphorus
362                  zrat = MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) )
363                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 
364                  zpropmax = zprnutmax * zmax * xlimsi(ji,jj,jk)
365                  zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk)
366                  zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk)
367                  ! Uptake of Si
368                  zprosid(ji,jj,jk)  = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * rfact2 * zysopt(ji,jj,jk)
369                  ! Uptake of iron
370                  zrat = MIN( 1., zratiof / qfdmax )
371                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))
372                  zprofmax = zprnutmax * qfdmax * zmax
373                  zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 3. - 2.4 * xlimdfe(ji,jj,jk)     &
374                  &          / ( xlimdfe(ji,jj,jk) + 0.2 ) ) * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn   &
375                  &          + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )
376               ENDIF
377            END DO
378         END DO
379      END DO
380
381      DO jk = 1, jpkm1
382         DO jj = 1, jpj
383            DO ji = 1, jpi
384               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
385                     !  production terms for nanophyto. ( chlorophyll )
386                  znanotot = enano(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
387                  zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk)
388                  thetannm_n   = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   &
389                  &               * (1. - 1.14 / 43.4 * 20.))
390                  zprochln = thetannm_n * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn )
391                  zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) )
392                     !  production terms for picophyto. ( chlorophyll )
393                  zpicotot = epico(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
394                  zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk)
395                  thetanpm_n   = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   &
396                  &               * (1. - 1.14 / 43.4 * 20.))
397                  zprochlp = thetanpm_n * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn )
398                  zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) )
399                  !  production terms for diatomees ( chlorophyll )
400                  zdiattot = ediat(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )
401                  zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk)
402                  thetandm_n   = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   &
403                  &               * (1. - 1.14 / 43.4 * 20.))
404                  zprochld = thetandm_n * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn )
405                  zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) )
406                  !   Update the arrays TRA which contain the Chla sources and sinks
407                  tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn
408                  tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd
409                  tra(ji,jj,jk,jppch) = tra(ji,jj,jk,jppch) + zprochlp * texcretp
410               ENDIF
411            END DO
412         END DO
413      END DO
414
415      !   Update the arrays TRA which contain the biological sources and sinks
416      DO jk = 1, jpkm1
417         DO jj = 1, jpj
418           DO ji =1 ,jpi
419              zprontot = zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)
420              zproptot = zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)
421              zprodtot = zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)
422              zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk)  &
423              &          + excretp * zprorcap(ji,jj,jk)
424              tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zpropo4n(ji,jj,jk) - zpropo4d(ji,jj,jk)  &
425              &                     - zpropo4p(ji,jj,jk)
426              tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk)  &
427              &                     - zpronewp(ji,jj,jk)
428              tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproregn(ji,jj,jk) - zproregd(ji,jj,jk)  &
429              &                     - zproregp(ji,jj,jk)
430              tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcretn    &
431                 &                  - zpsino3 * zpronewn(ji,jj,jk) - zpsinh4 * zproregn(ji,jj,jk)   &
432                 &                  - zrespn(ji,jj,jk) 
433              zcroissn(ji,jj,jk) = tra(ji,jj,jk,jpphy) / rfact2/ (trb(ji,jj,jk,jpphy) + rtrn)
434              tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) + zprontot * texcretn
435              tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) + zpropo4n(ji,jj,jk) * texcretn   &
436              &                     + zprodopn(ji,jj,jk) * texcretn
437              tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcretn
438              tra(ji,jj,jk,jppic) = tra(ji,jj,jk,jppic) + zprorcap(ji,jj,jk) * texcretp     &
439                 &                  - zpsino3 * zpronewp(ji,jj,jk) - zpsinh4 * zproregp(ji,jj,jk)   &
440                 &                  - zrespp(ji,jj,jk) 
441              zcroissp(ji,jj,jk) = tra(ji,jj,jk,jppic) / rfact2/ (trb(ji,jj,jk,jppic) + rtrn)
442              tra(ji,jj,jk,jpnpi) = tra(ji,jj,jk,jpnpi) + zproptot * texcretp
443              tra(ji,jj,jk,jpppi) = tra(ji,jj,jk,jpppi) + zpropo4p(ji,jj,jk) * texcretp   &
444              &                     + zprodopp(ji,jj,jk) * texcretp
445              tra(ji,jj,jk,jppfe) = tra(ji,jj,jk,jppfe) + zprofep(ji,jj,jk) * texcretp
446              tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd   &
447                 &                  - zpsino3 * zpronewd(ji,jj,jk) - zpsinh4 * zproregd(ji,jj,jk)   &
448                 &                  - zrespd(ji,jj,jk) 
449              zcroissd(ji,jj,jk) = tra(ji,jj,jk,jpdia) / rfact2 / (trb(ji,jj,jk,jpdia) + rtrn)
450              tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) + zprodtot * texcretd
451              tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) + zpropo4d(ji,jj,jk) * texcretd   &
452              &                     + zprodopd(ji,jj,jk) * texcretd
453              tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd
454              tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprosid(ji,jj,jk) 
455              tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk)  &
456              &                     + excretp * zprorcap(ji,jj,jk)
457              tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + excretd * zprodtot + excretn * zprontot   &
458              &                     + excretp * zproptot
459              tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + excretd * zpropo4d(ji,jj,jk) + excretn * zpropo4n(ji,jj,jk)   &
460              &    - texcretn * zprodopn(ji,jj,jk) - texcretd * zprodopd(ji,jj,jk) + excretp * zpropo4p(ji,jj,jk)     &
461              &    - texcretp * zprodopp(ji,jj,jk)
462              tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproregn(ji,jj,jk) + zproregd(ji,jj,jk)   &
463                 &                + zproregp(ji,jj,jk) ) + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk)           &
464                 &                + zpronewd(ji,jj,jk) + zpronewp(ji,jj,jk) )   &
465                 &                - o2ut * ( zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) )
466              zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk)  &
467              &          + texcretp * zprofep(ji,jj,jk)
468              tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup
469              tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprosid(ji,jj,jk)
470              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) - zprorcap(ji,jj,jk)  &
471              &                     + zpsino3 * zpronewn(ji,jj,jk) + zpsinh4 * zproregn(ji,jj,jk)   &
472              &                     + zpsino3 * zpronewp(ji,jj,jk) + zpsinh4 * zproregp(ji,jj,jk)   &
473              &                     + zpsino3 * zpronewd(ji,jj,jk) + zpsinh4 * zproregd(ji,jj,jk)  &
474              &                     + zrespn(ji,jj,jk) + zrespd(ji,jj,jk) + zrespp(ji,jj,jk) 
475              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk)  &
476              &                     + zpronewp(ji,jj,jk) ) - rno3 * ( zproregn(ji,jj,jk) + zproregd(ji,jj,jk)     &
477              &                     + zproregp(ji,jj,jk) ) 
478#if defined key_ligand
479              tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet
480              zpligprod(ji,jj,jk) = zdocprod * ldocp
481              zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet
482#endif
483          END DO
484        END DO
485     END DO
486
487     ! Total primary production per year
488     tpp = tpp + glob_sum( ( zprorcan(:,:,:) + zprorcad(:,:,:) + zprorcap(:,:,:) ) * cvol(:,:,:) )
489
490     IF( ln_diatrc ) THEN
491         !
492         zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s
493         IF( lk_iomput ) THEN
494           IF( knt == nrdttrc ) THEN
495              CALL iom_put( "PPPHY"  , zprorcan(:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by nanophyto
496              CALL iom_put( "PPPHYP" , zprorcap(:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by nanophyto
497              CALL iom_put( "PPPHY2" , zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) )  ! primary production by diatom
498              CALL iom_put( "PPNEWN" , zpronewn(:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by nanophyto
499              CALL iom_put( "PPNEWP" , zpronewp(:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by nanophyto
500              CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) )  ! new primary production by diatom
501              CALL iom_put( "PBSi"   , zprosid(:,:,:) * zrfact2 * tmask(:,:,:)  ) ! biogenic silica production
502              CALL iom_put( "PFeD"   , zprofed (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by diatom
503              CALL iom_put( "PFeP"   , zprofep (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by diatom
504              CALL iom_put( "PFeN"   , zprofen (:,:,:) * zrfact2 * tmask(:,:,:) )  ! biogenic iron production by nanophyto
505              CALL iom_put( "Mumax"  , prmaxn(:,:,:) * tmask(:,:,:) )  ! Maximum growth rate
506              CALL iom_put( "MuN"    , zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for nanophyto
507              CALL iom_put( "MuP"    , zprpic(:,:,:) * xlimpic(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for nanophyto
508              CALL iom_put( "MuD"    , zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for diatoms
509              CALL iom_put( "MunetN"    , zcroissn(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for nanophyto
510              CALL iom_put( "MunetP"    , zcroissp(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for nanophyto
511              CALL iom_put( "MunetD"    , zcroissd(:,:,:) * tmask(:,:,:) )  ! Realized growth rate for diatoms
512              CALL iom_put( "LNlight", zprbio (:,:,:) / (prmaxn(:,:,:) + rtrn) * tmask(:,:,:) )  ! light limitation term
513              CALL iom_put( "LPlight", zprpic (:,:,:) / (prmaxp(:,:,:) + rtrn) * tmask(:,:,:) )  ! light limitation term
514              CALL iom_put( "LDlight", zprdia (:,:,:) / (prmaxd(:,:,:) + rtrn) * tmask(:,:,:) )  ! light limitation term
515#if defined key_ligand
516              CALL iom_put( "LPRODP", zpligprod(:,:,:) * 1e9 * zfact * tmask(:,:,:) )  ! light limitation term
517              CALL iom_put( "LDETP", zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) )  ! light limitation term
518#endif
519           ENDIF
520         ELSE
521              trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorcan(:,:,:) * zrfact2 * tmask(:,:,:)
522              trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:)
523              trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronewn(:,:,:) * zrfact2 * tmask(:,:,:)
524              trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:)
525              trc3d(:,:,:,jp_pcs0_3d + 8)  = zprosid(:,:,:)  * zrfact2 * tmask(:,:,:)
526              trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zrfact2 * tmask(:,:,:)
527#  if ! defined key_kriest
528              trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:)
529#  endif
530         ENDIF
531         !
532      ENDIF
533
534      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
535         WRITE(charout, FMT="('prod')")
536         CALL prt_ctl_trc_info(charout)
537         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
538      ENDIF
539      !
540      CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixpico, zmixdiat, zstrn )
541      CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl )
542      CALL wrk_dealloc( jpi, jpj, jpk, zpislopeadn, zpislopeadp, zpislopeadd, zysopt )                           
543      CALL wrk_dealloc( jpi, jpj, jpk, zprdia, zprpic, zprbio, zprorcan, zprorcap, zprorcad )
544      CALL wrk_dealloc( jpi, jpj, jpk, zprofed, zprofep, zprofen, zprosid ) 
545      CALL wrk_dealloc( jpi, jpj, jpk, zpronewn, zpronewp, zpronewd, zproregn, zproregp, zproregd )
546      CALL wrk_dealloc( jpi, jpj, jpk, zpropo4n, zpropo4p, zpropo4d, zrespn, zrespp, zrespd, zprnut )
547      CALL wrk_dealloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd )
548      CALL wrk_dealloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd )
549#if defined key_ligand
550      CALL wrk_dealloc( jpi, jpj, jpk, zpligprod, zpligprod2 )
551#endif
552      !
553      IF( nn_timing == 1 )  CALL timing_stop('p5z_prod')
554      !
555   END SUBROUTINE p5z_prod
556
557
558   SUBROUTINE p5z_prod_init
559      !!----------------------------------------------------------------------
560      !!                  ***  ROUTINE p5z_prod_init  ***
561      !!
562      !! ** Purpose :   Initialization of phytoplankton production parameters
563      !!
564      !! ** Method  :   Read the nampisprod namelist and check the parameters
565      !!      called at the first timestep (nittrc000)
566      !!
567      !! ** input   :   Namelist nampisprod
568      !!----------------------------------------------------------------------
569      !
570      NAMELIST/nampisprod/ pislopen, pislopep, pisloped, xadap, bresp, excretn, excretp, excretd,  &
571         &                 thetannm, thetanpm, thetandm, chlcmin, grosip
572
573      INTEGER :: ios                 ! Local integer output status for namelist read
574      !!----------------------------------------------------------------------
575
576      REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production
577      READ  ( numnatp_ref, nampisprod, IOSTAT = ios, ERR = 901)
578901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in reference namelist', lwp )
579
580      REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production
581      READ  ( numnatp_cfg, nampisprod, IOSTAT = ios, ERR = 902 )
582902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in configuration namelist', lwp )
583      IF(lwm) WRITE ( numonp, nampisprod )
584
585      IF(lwp) THEN                         ! control print
586         WRITE(numout,*) ' '
587         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, nampisprod'
588         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
589         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip
590         WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen
591         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap
592         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn
593         WRITE(numout,*) '    excretion ratio of picophytoplankton      excretp      =', excretp
594         WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd
595         WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp
596         WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
597         WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped
598         WRITE(numout,*) '    P-I slope  for picophytoplankton          pislopep     =', pislopep
599         WRITE(numout,*) '    Minimum Chl/N in nanophytoplankton        thetannm     =', thetannm
600         WRITE(numout,*) '    Minimum Chl/N in picophytoplankton        thetanpm     =', thetanpm
601         WRITE(numout,*) '    Minimum Chl/N in diatoms                  thetandm     =', thetandm
602      ENDIF
603      !
604      r1_rday   = 1._wp / rday 
605      texcretn  = 1._wp - excretn
606      texcretp  = 1._wp - excretp
607      texcretd  = 1._wp - excretd
608      tpp       = 0._wp
609      !
610   END SUBROUTINE p5z_prod_init
611
612
613   INTEGER FUNCTION p5z_prod_alloc()
614      !!----------------------------------------------------------------------
615      !!                     ***  ROUTINE p5z_prod_alloc  ***
616      !!----------------------------------------------------------------------
617      ALLOCATE( prmaxn(jpi,jpj,jpk), prmaxp(jpi,jpj,jpk), prmaxd(jpi,jpj,jpk),  &
618      &          zdaylen(jpi,jpj), STAT = p5z_prod_alloc )
619      !
620      IF( p5z_prod_alloc /= 0 ) CALL ctl_warn('p5z_prod_alloc : failed to allocate arrays.')
621      !
622   END FUNCTION p5z_prod_alloc
623
624#else
625   !!======================================================================
626   !!  Dummy module :                                   No PISCES bio-model
627   !!======================================================================
628CONTAINS
629   SUBROUTINE p5z_prod                    ! Empty routine
630   END SUBROUTINE p5z_prod
631#endif 
632
633   !!======================================================================
634END MODULE  p5zprod
Note: See TracBrowser for help on using the repository browser.