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.
p4zprod.F90 in branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90 @ 7513

Last change on this file since 7513 was 7513, checked in by mocavero, 7 years ago

delete optional ompdo statements

File size: 38.8 KB
Line 
1MODULE p4zprod
2   !!======================================================================
3   !!                         ***  MODULE p4zprod  ***
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   !!----------------------------------------------------------------------
10#if defined key_pisces
11   !!----------------------------------------------------------------------
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!   p4z_prod       :   Compute the growth Rate of the two phytoplanktons groups
15   !!   p4z_prod_init  :   Initialization of the parameters for growth
16   !!   p4z_prod_alloc :   Allocate variables for growth
17   !!----------------------------------------------------------------------
18   USE oce_trc         !  shared variables between ocean and passive tracers
19   USE trc             !  passive tracers common variables
20   USE sms_pisces      !  PISCES Source Minus Sink variables
21   USE p4zopt          !  optical model
22   USE p4zlim          !  Co-limitations of differents nutrients
23   USE prtctl_trc      !  print control for debugging
24   USE iom             !  I/O manager
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   p4z_prod         ! called in p4zbio.F90
30   PUBLIC   p4z_prod_init    ! called in trcsms_pisces.F90
31   PUBLIC   p4z_prod_alloc
32
33   !! * Shared module variables
34   LOGICAL , PUBLIC ::  ln_newprod      !:
35   REAL(wp), PUBLIC ::  pislope         !:
36   REAL(wp), PUBLIC ::  pislope2        !:
37   REAL(wp), PUBLIC ::  xadap           !:
38   REAL(wp), PUBLIC ::  excret          !:
39   REAL(wp), PUBLIC ::  excret2         !:
40   REAL(wp), PUBLIC ::  bresp           !:
41   REAL(wp), PUBLIC ::  chlcnm          !:
42   REAL(wp), PUBLIC ::  chlcdm          !:
43   REAL(wp), PUBLIC ::  chlcmin         !:
44   REAL(wp), PUBLIC ::  fecnm           !:
45   REAL(wp), PUBLIC ::  fecdm           !:
46   REAL(wp), PUBLIC ::  grosip          !:
47
48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmax    !: optimal production = f(temperature)
49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto
50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatomee
51   
52   REAL(wp) :: r1_rday                !: 1 / rday
53   REAL(wp) :: texcret                !: 1 - excret
54   REAL(wp) :: texcret2               !: 1 - excret2       
55
56   !!----------------------------------------------------------------------
57   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
58   !! $Id: p4zprod.F90 3160 2011-11-20 14:27:18Z cetlod $
59   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
60   !!----------------------------------------------------------------------
61CONTAINS
62
63   SUBROUTINE p4z_prod( kt , knt )
64      !!---------------------------------------------------------------------
65      !!                     ***  ROUTINE p4z_prod  ***
66      !!
67      !! ** Purpose :   Compute the phytoplankton production depending on
68      !!              light, temperature and nutrient availability
69      !!
70      !! ** Method  : - ???
71      !!---------------------------------------------------------------------
72      !
73      INTEGER, INTENT(in) :: kt, knt
74      !
75      INTEGER  ::   ji, jj, jk
76      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2
77      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap
78      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zproreg, zproreg2
79      REAL(wp) ::   zmxltst, zmxlday, zmaxday
80      REAL(wp) ::   zpislopen  , zpislope2n
81      REAL(wp) ::   zrum, zcodel, zargu, zval
82      REAL(wp) ::   zfact
83      CHARACTER (len=25) :: charout
84      REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn, zw2d
85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d   
86      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd
87      !!---------------------------------------------------------------------
88      !
89      IF( nn_timing == 1 )  CALL timing_start('p4z_prod')
90      !
91      !  Allocate temporary workspace
92      CALL wrk_alloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  )
93      CALL wrk_alloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            ) 
94      CALL wrk_alloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd )
95      !
96!$OMP PARALLEL
97!$OMP DO schedule(static) private(jk,jj,ji)
98      DO jk = 1, jpk
99         DO jj = 1, jpj
100            DO ji = 1, jpi
101               zprorca (ji,jj,jk) = 0._wp
102               zprorcad(ji,jj,jk) = 0._wp
103               zprofed (ji,jj,jk) = 0._wp
104               zprofen (ji,jj,jk) = 0._wp
105               zprochln(ji,jj,jk) = 0._wp
106               zprochld(ji,jj,jk) = 0._wp
107               zpronew (ji,jj,jk) = 0._wp
108               zpronewd(ji,jj,jk) = 0._wp
109               zprdia  (ji,jj,jk) = 0._wp
110               zprbio  (ji,jj,jk) = 0._wp
111               zprdch  (ji,jj,jk) = 0._wp
112               zprnch  (ji,jj,jk) = 0._wp
113               zysopt  (ji,jj,jk) = 0._wp
114
115      ! Computation of the optimal production
116              prmax(ji,jj,jk) = 0.6_wp * r1_rday * tgfunc(ji,jj,jk)
117            END DO
118         END DO
119      END DO 
120
121      ! day length in hours
122!$OMP DO schedule(static) private(jj,ji)
123      DO jj = 1, jpj
124         DO ji = 1, jpi
125            zstrn(ji,jj) = 0.
126         END DO
127      END DO 
128!$OMP END PARALLEL
129
130      IF( lk_degrad ) THEN
131!$OMP DO schedule(static) private(jk,jj,ji)
132      DO jk = 1, jpk
133         DO jj = 1, jpj
134            DO ji = 1, jpi
135               prmax(ji,jj,jk) = prmax(ji,jj,jk) * facvol(ji,jj,jk) 
136            END DO
137         END DO
138      END DO
139      END IF
140
141      ! compute the day length depending on latitude and the day
142      zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp )
143      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  )
144
145!$OMP PARALLEL
146!$OMP DO schedule(static) private(jj,ji,zargu)
147      DO jj = 1, jpj
148         DO ji = 1, jpi
149            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad )
150            zargu = MAX( -1., MIN(  1., zargu ) )
151            zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. )
152         END DO
153      END DO
154
155      ! Impact of the day duration on phytoplankton growth
156!$OMP DO schedule(static) private(jk,jj,ji,zval)
157      DO jk = 1, jpkm1
158         DO jj = 1 ,jpj
159            DO ji = 1, jpi
160               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
161                  zval = MAX( 1., zstrn(ji,jj) )
162                  zval = 1.5 * zval / ( 12. + zval )
163                  zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval
164                  zprdia(ji,jj,jk) = zprbio(ji,jj,jk)
165               ENDIF
166            END DO
167         END DO
168      END DO
169
170      ! Maximum light intensity
171!$OMP DO schedule(static) private(jj,ji)
172      DO jj = 1 ,jpj
173         DO ji = 1, jpi
174            IF( zstrn(ji,jj) < 1.e0 ) zstrn(ji,jj) = 24.
175            zstrn(ji,jj) = 24. / zstrn(ji,jj)
176         END DO
177      END DO
178!$OMP END PARALLEL
179
180      IF( ln_newprod ) THEN
181!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,zadap,zconctemp,zconctemp2,znanotot,zdiattot,zpislopen,zpislope2n,zmaxday)
182         DO jk = 1, jpkm1
183            DO jj = 1, jpj
184               DO ji = 1, jpi
185                  ! Computation of the P-I slope for nanos and diatoms
186                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
187                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. )
188                      zadap       = xadap * ztn / ( 2.+ ztn )
189                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia )
190                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp
191                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj)
192                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj)
193                      !
194                      zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  &
195                         &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn)
196                      !
197                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   &
198                         &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn)
199
200                      ! Computation of production function for Carbon
201                      !  ---------------------------------------------
202                      zpislopen  = zpislopead (ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn)
203                      zpislope2n = zpislopead2(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn)
204                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot )  )
205                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot )  )
206
207                      !  Computation of production function for Chlorophyll
208                      !--------------------------------------------------
209                      zmaxday  = 1._wp / ( prmax(ji,jj,jk) * rday + rtrn )
210                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead (ji,jj,jk) * zmaxday * znanotot ) )
211                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead2(ji,jj,jk) * zmaxday * zdiattot ) )
212                  ENDIF
213               END DO
214            END DO
215         END DO
216      ELSE
217!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,zadap,zconctemp,zconctemp2,znanotot,zpislopen,zpislope2n)
218         DO jk = 1, jpkm1
219            DO jj = 1, jpj
220               DO ji = 1, jpi
221
222                  ! Computation of the P-I slope for nanos and diatoms
223                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
224                      ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. )
225                      zadap       = ztn / ( 2.+ ztn )
226                      zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia )
227                      zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp
228                      znanotot    = enano(ji,jj,jk) * zstrn(ji,jj)
229                      zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj)
230                      !
231                      zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) )
232                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn )
233
234                      zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                &
235                        &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   &
236                        &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn )
237
238                      zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                &
239                        &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   &
240                        &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn )
241
242                      ! Computation of production function for Carbon
243                      !  ---------------------------------------------
244                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) )
245                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) )
246
247                      !  Computation of production function for Chlorophyll
248                      !--------------------------------------------------
249                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) )
250                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) )
251                  ENDIF
252               END DO
253            END DO
254         END DO
255      ENDIF
256
257
258      !  Computation of a proxy of the N/C ratio
259      !  ---------------------------------------
260!$OMP PARALLEL
261!$OMP DO schedule(static) private(jk,jj,ji,zval)
262      DO jk = 1, jpkm1
263         DO jj = 1, jpj
264            DO ji = 1, jpi
265                zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   &
266                &      * prmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn )
267                quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval )
268                zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) )   &
269                &      * prmax(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn )
270                quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval )
271            END DO
272         END DO
273      END DO
274!$OMP END DO NOWAIT
275
276
277!$OMP DO schedule(static) private(jk,jj,ji,zlim,zsilim,zsilfac,zsiborn,zsilfac2)
278      DO jk = 1, jpkm1
279         DO jj = 1, jpj
280            DO ji = 1, jpi
281
282                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
283                   !    Si/C of diatoms
284                   !    ------------------------
285                   !    Si/C increases with iron stress and silicate availability
286                   !    Si/C is arbitrariliy increased for very high Si concentrations
287                   !    to mimic the very high ratios observed in the Southern Ocean (silpot2)
288                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 )
289                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) )
290                  zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0
291                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil)
292                  IF (gphit(ji,jj) < -30 ) THEN
293                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )
294                  ELSE
295                    zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 )
296                  ENDIF
297                  zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2
298              ENDIF
299            END DO
300         END DO
301      END DO
302!$OMP END DO NOWAIT
303
304      !  Computation of the limitation term due to a mixed layer deeper than the euphotic depth
305!$OMP DO schedule(static) private(jj,ji,zmxltst,zmxlday)
306      DO jj = 1, jpj
307         DO ji = 1, jpi
308            zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) )
309            zmxlday = zmxltst * zmxltst * r1_rday
310            zmixnano(ji,jj) = 1. - zmxlday / ( 2. + zmxlday )
311            zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday )
312         END DO
313      END DO
314 
315      !  Mixed-layer effect on production                                                                               
316!$OMP DO schedule(static) private(jk,jj,ji)
317      DO jk = 1, jpkm1
318         DO jj = 1, jpj
319            DO ji = 1, jpi
320               IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN
321                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj)
322                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj)
323               ENDIF
324            END DO
325         END DO
326      END DO
327
328      ! Computation of the various production terms
329!$OMP DO schedule(static) private(jk,jj,ji,zratio,zmax)
330      DO jk = 1, jpkm1
331         DO jj = 1, jpj
332            DO ji = 1, jpi
333               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
334                  !  production terms for nanophyto.
335                  zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2
336                  zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn )
337                  !
338                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn )
339                  zratio = zratio / fecnm 
340                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 
341                  zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk)  &
342                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    &
343                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  &
344                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2
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                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn )
348                  !
349                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn )
350                  zratio = zratio / fecdm 
351                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 
352                  zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk)  &
353                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    &
354                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  &
355                  &             * zmax * trb(ji,jj,jk,jpdia) * rfact2
356               ENDIF
357            END DO
358         END DO
359      END DO
360!$OMP END DO NOWAIT
361!$OMP END PARALLEL
362
363      IF( ln_newprod ) THEN
364!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,znanotot,zprod,zdiattot)
365         DO jk = 1, jpkm1
366            DO jj = 1, jpj
367               DO ji = 1, jpi
368                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN
369                     zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj)
370                     zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj)
371                  ENDIF
372                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
373                     !  production terms for nanophyto. ( chlorophyll )
374                     znanotot = enano(ji,jj,jk) * zstrn(ji,jj)
375                     zprod    = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk)
376                     zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk)
377                     zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 12. * zprod / &
378                                        & (  zpislopead(ji,jj,jk) * znanotot +rtrn)
379                     !  production terms for diatomees ( chlorophyll )
380                     zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj)
381                     zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk)
382                     zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk)
383                     zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 12. * zprod / &
384                                        & ( zpislopead2(ji,jj,jk) * zdiattot +rtrn )
385                  ENDIF
386               END DO
387            END DO
388         END DO
389      ELSE
390!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,znanotot,zprod,zdiattot)
391         DO jk = 1, jpkm1
392            DO jj = 1, jpj
393               DO ji = 1, jpi
394                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
395                     !  production terms for nanophyto. ( chlorophyll )
396                     znanotot = enano(ji,jj,jk)
397                     zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk)
398                     zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk)
399                     zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod            &
400                     &                    / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn )
401                     !  production terms for diatomees ( chlorophyll )
402                     zdiattot = ediat(ji,jj,jk)
403                     zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk)
404                     zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk)
405                     zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod             &
406                     &                    / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn )
407                  ENDIF
408               END DO
409            END DO
410         END DO
411      ENDIF
412
413      !   Update the arrays TRA which contain the biological sources and sinks
414!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zproreg,zproreg2)
415      DO jk = 1, jpkm1
416         DO jj = 1, jpj
417           DO ji =1 ,jpi
418              zproreg  = zprorca(ji,jj,jk) - zpronew(ji,jj,jk)
419              zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk)
420              tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk)
421              tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronew(ji,jj,jk) - zpronewd(ji,jj,jk)
422              tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2
423              tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorca(ji,jj,jk) * texcret
424              tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln(ji,jj,jk) * texcret
425              tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcret
426              tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcret2
427              tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld(ji,jj,jk) * texcret2
428              tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2
429              tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2
430              tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk)
431              tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) &
432                 &                + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) )
433              tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk)
434              tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk)
435              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk)
436              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) &
437                 &                                      - rno3 * ( zproreg + zproreg2 )
438          END DO
439        END DO
440     END DO
441
442
443    ! Total primary production per year
444    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  &
445         & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) )
446
447    IF( lk_iomput ) THEN
448       IF( knt == nrdttrc ) THEN
449          CALL wrk_alloc( jpi, jpj,      zw2d )
450          CALL wrk_alloc( jpi, jpj, jpk, zw3d )
451          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
452          !
453          IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN
454!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
455            DO jk = 1, jpk
456               DO jj = 1, jpj
457                  DO ji = 1, jpi
458                     zw3d(ji,jj,jk) = zprorca (ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! primary production by nanophyto
459                  END DO
460               END DO
461            END DO
462              CALL iom_put( "PPPHY"  , zw3d )
463!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
464            DO jk = 1, jpk
465               DO jj = 1, jpj
466                  DO ji = 1, jpi
467                     zw3d(ji,jj,jk) = zprorcad (ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! primary production by nanophyto
468                  END DO
469               END DO
470            END DO
471              !
472              CALL iom_put( "PPPHY2"  , zw3d )
473          ENDIF
474          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN
475!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
476            DO jk = 1, jpk
477               DO jj = 1, jpj
478                  DO ji = 1, jpi
479                     zw3d(ji,jj,jk) = zpronew (ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! new primary production by nanophyto
480                  END DO
481               END DO
482            END DO
483              CALL iom_put( "PPNEWN"  , zw3d )
484              !
485!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
486            DO jk = 1, jpk
487               DO jj = 1, jpj
488                  DO ji = 1, jpi
489                     zw3d(ji,jj,jk) = zpronewd (ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! new primary production by nanophyto
490                  END DO
491               END DO
492            END DO
493              CALL iom_put( "PPNEWD"  , zw3d )
494          ENDIF
495          IF( iom_use( "PBSi" ) )  THEN
496!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
497            DO jk = 1, jpk
498               DO jj = 1, jpj
499                  DO ji = 1, jpi
500                     zw3d(ji,jj,jk) = zprorcad(ji,jj,jk) * zfact * tmask(ji,jj,jk) * zysopt(ji,jj,jk) ! biogenic silica production
501                  END DO
502               END DO
503            END DO
504              CALL iom_put( "PBSi"  , zw3d )
505          ENDIF
506          IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) )  THEN
507!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
508            DO jk = 1, jpk
509               DO jj = 1, jpj
510                  DO ji = 1, jpi
511                     zw3d(ji,jj,jk) = zprofen(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! biogenic iron production by nanophyto
512                  END DO
513               END DO
514            END DO
515              CALL iom_put( "PFeN"  , zw3d )
516              !
517!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
518            DO jk = 1, jpk
519               DO jj = 1, jpj
520                  DO ji = 1, jpi
521                     zw3d(ji,jj,jk) = zprofed(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! biogenic iron production by nanophyto
522                  END DO
523               END DO
524            END DO
525              CALL iom_put( "PFeD"  , zw3d )
526          ENDIF
527          IF( iom_use( "Mumax" ) )  THEN
528!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
529            DO jk = 1, jpk
530               DO jj = 1, jpj
531                  DO ji = 1, jpi
532                     zw3d(ji,jj,jk) = prmax(ji,jj,jk) * tmask(ji,jj,jk)   ! Maximum growth rate
533                  END DO
534               END DO
535            END DO
536              CALL iom_put( "Mumax"  , zw3d )
537          ENDIF
538          IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) )  THEN
539!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
540            DO jk = 1, jpk
541               DO jj = 1, jpj
542                  DO ji = 1, jpi
543                     zw3d(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tmask(ji,jj,jk)  ! Realized growth rate for nanophyto
544                  END DO
545               END DO
546            END DO
547              CALL iom_put( "MuN"  , zw3d )
548              !
549!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
550            DO jk = 1, jpk
551               DO jj = 1, jpj
552                  DO ji = 1, jpi
553                     zw3d(ji,jj,jk) =  zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tmask(ji,jj,jk)  ! Realized growth rate for diatoms
554                  END DO
555               END DO
556            END DO
557              CALL iom_put( "MuD"  , zw3d )
558          ENDIF
559          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN
560!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
561            DO jk = 1, jpk
562               DO jj = 1, jpj
563                  DO ji = 1, jpi
564                     zw3d(ji,jj,jk) = zprbio (ji,jj,jk) / (prmax(ji,jj,jk) + rtrn) * tmask(ji,jj,jk) ! light limitation term
565                  END DO
566               END DO
567            END DO
568              CALL iom_put( "LNlight"  , zw3d )
569              !
570!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
571            DO jk = 1, jpk
572               DO jj = 1, jpj
573                  DO ji = 1, jpi
574                     zw3d(ji,jj,jk) =  zprdia (ji,jj,jk) / (prmax(ji,jj,jk) + rtrn) * tmask(ji,jj,jk)  ! light limitation term
575                  END DO
576               END DO
577            END DO
578              CALL iom_put( "LDlight"  , zw3d )
579          ENDIF
580          IF( iom_use( "TPP" ) )  THEN
581!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
582            DO jk = 1, jpk
583               DO jj = 1, jpj
584                  DO ji = 1, jpi
585                     zw3d(ji,jj,jk) = ( zprorca(ji,jj,jk) + zprorcad(ji,jj,jk) ) * zfact * tmask(ji,jj,jk)  ! total primary production
586                  END DO
587               END DO
588            END DO
589              CALL iom_put( "TPP"  , zw3d )
590          ENDIF
591          IF( iom_use( "TPNEW" ) )  THEN
592!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
593            DO jk = 1, jpk
594               DO jj = 1, jpj
595                  DO ji = 1, jpi
596                     zw3d(ji,jj,jk) = ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) * zfact * tmask(ji,jj,jk)  ! total new production
597                  END DO
598               END DO
599            END DO
600              CALL iom_put( "TPNEW"  , zw3d )
601          ENDIF
602          IF( iom_use( "TPBFE" ) )  THEN
603!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
604            DO jk = 1, jpk
605               DO jj = 1, jpj
606                  DO ji = 1, jpi
607                     zw3d(ji,jj,jk) = ( zprofen(ji,jj,jk) + zprofed(ji,jj,jk) ) * zfact * tmask(ji,jj,jk)  ! total biogenic iron production
608                  END DO
609               END DO
610            END DO
611              CALL iom_put( "TPBFE"  , zw3d )
612          ENDIF
613          IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN 
614!$OMP PARALLEL
615!$OMP DO schedule(static) private(jj,ji)
616             DO jj = 1, jpj
617                DO ji =1 ,jpi
618                   zw2d(ji,jj) = 0.
619                END DO
620             END DO
621             DO jk = 1, jpkm1
622!$OMP DO schedule(static) private(jj,ji)
623                DO jj = 1, jpj
624                   DO ji =1 ,jpi
625                      zw2d(ji,jj) = zw2d(ji,jj) + zprorca (ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert. integrated  primary produc. by nano
626                   END DO
627                END DO
628!$OMP END DO NOWAIT
629             ENDDO
630!$OMP END PARALLEL
631             CALL iom_put( "INTPPPHY" , zw2d )
632             !
633!$OMP PARALLEL
634!$OMP DO schedule(static) private(jj,ji)
635             DO jj = 1, jpj
636                DO ji =1 ,jpi
637                   zw2d(ji,jj) = 0.
638                END DO
639             END DO
640             DO jk = 1, jpkm1
641!$OMP DO schedule(static) private(jj,ji)
642                DO jj = 1, jpj
643                   DO ji =1 ,jpi
644                      zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated  primary produc. by diatom
645                   END DO
646                END DO
647!$OMP END DO NOWAIT
648             ENDDO
649!$OMP END PARALLEL
650             CALL iom_put( "INTPPPHY2" , zw2d )
651          ENDIF
652          IF( iom_use( "INTPP" ) ) THEN   
653!$OMP PARALLEL
654!$OMP DO schedule(static) private(jj,ji)
655             DO jj = 1, jpj
656                DO ji =1 ,jpi
657                   zw2d(ji,jj) = 0.
658                END DO
659             END DO
660             DO jk = 1, jpkm1
661!$OMP DO schedule(static) private(jj,ji)
662                DO jj = 1, jpj
663                   DO ji =1 ,jpi
664                      zw2d(ji,jj) = zw2d(ji,jj) + ( zprorca(ji,jj,jk) + zprorcad(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated pp
665                   END DO
666                END DO
667!$OMP END DO NOWAIT
668             ENDDO
669!$OMP END PARALLEL
670             CALL iom_put( "INTPP" , zw2d )
671          ENDIF
672          IF( iom_use( "INTPNEW" ) ) THEN   
673!$OMP PARALLEL
674!$OMP DO schedule(static) private(jj,ji)
675             DO jj = 1, jpj
676                DO ji =1 ,jpi
677                   zw2d(ji,jj) = 0.
678                END DO
679             END DO
680             DO jk = 1, jpkm1
681!$OMP DO schedule(static) private(jj,ji)
682                DO jj = 1, jpj
683                   DO ji =1 ,jpi
684                      zw2d(ji,jj) = zw2d(ji,jj) + ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert. integrated new prod
685                   END DO
686                END DO
687!$OMP END DO NOWAIT
688             ENDDO
689!$OMP END PARALLEL
690             CALL iom_put( "INTPNEW" , zw2d )
691          ENDIF
692          IF( iom_use( "INTPBFE" ) ) THEN           !   total biogenic iron production  ( vertically integrated )
693!$OMP PARALLEL
694!$OMP DO schedule(static) private(jj,ji)
695             DO jj = 1, jpj
696                DO ji =1 ,jpi
697                   zw2d(ji,jj) = 0.
698                END DO
699             END DO
700             DO jk = 1, jpkm1
701!$OMP DO schedule(static) private(jj,ji)
702                DO jj = 1, jpj
703                   DO ji =1 ,jpi
704                      zw2d(ji,jj) = zw2d(ji,jj) + ( zprofen(ji,jj,jk) + zprofed(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert integr. bfe prod
705                   END DO
706                END DO
707!$OMP END DO NOWAIT
708             ENDDO
709!$OMP END PARALLEL
710            CALL iom_put( "INTPBFE" , zw2d )
711          ENDIF
712          IF( iom_use( "INTPBSI" ) ) THEN           !   total biogenic silica production  ( vertically integrated )
713!$OMP PARALLEL
714!$OMP DO schedule(static) private(jj,ji)
715             DO jj = 1, jpj
716                DO ji =1 ,jpi
717                   zw2d(ji,jj) = 0.
718                END DO
719             END DO
720             DO jk = 1, jpkm1
721!$OMP DO schedule(static) private(jj,ji)
722                DO jj = 1, jpj
723                   DO ji =1 ,jpi
724                      zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert integr. bsi prod
725                   END DO
726                END DO
727!$OMP END DO NOWAIT
728             ENDDO
729!$OMP END PARALLEL
730             CALL iom_put( "INTPBSI" , zw2d )
731          ENDIF
732          IF( iom_use( "tintpp" ) )  CALL iom_put( "tintpp" , tpp * zfact )  !  global total integrated primary production molC/s
733          !
734          CALL wrk_dealloc( jpi, jpj,      zw2d )
735          CALL wrk_dealloc( jpi, jpj, jpk, zw3d )
736       ENDIF
737     ELSE
738        IF( ln_diatrc ) THEN
739           zfact = 1.e+3 * rfact2r
740!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)
741            DO jk = 1, jpk
742               DO jj = 1, jpj
743                  DO ji = 1, jpi
744                     trc3d(ji,jj,jk,jp_pcs0_3d + 4)  = zprorca (ji,jj,jk) * zfact * tmask(ji,jj,jk)
745                     trc3d(ji,jj,jk,jp_pcs0_3d + 5)  = zprorcad(ji,jj,jk) * zfact * tmask(ji,jj,jk)
746                     trc3d(ji,jj,jk,jp_pcs0_3d + 6)  = zpronew (ji,jj,jk) * zfact * tmask(ji,jj,jk)
747                     trc3d(ji,jj,jk,jp_pcs0_3d + 7)  = zpronewd(ji,jj,jk) * zfact * tmask(ji,jj,jk)
748                     trc3d(ji,jj,jk,jp_pcs0_3d + 8)  = zprorcad(ji,jj,jk) * zfact * tmask(ji,jj,jk) * zysopt(ji,jj,jk)
749                     trc3d(ji,jj,jk,jp_pcs0_3d + 9)  = zprofed (ji,jj,jk) * zfact * tmask(ji,jj,jk)
750#  if ! defined key_kriest
751                     trc3d(ji,jj,jk,jp_pcs0_3d + 10) = zprofen (ji,jj,jk) * zfact * tmask(ji,jj,jk)
752#  endif
753                  END DO
754               END DO
755            END DO
756        ENDIF
757     ENDIF
758
759     IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
760         WRITE(charout, FMT="('prod')")
761         CALL prt_ctl_trc_info(charout)
762         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
763     ENDIF
764     !
765     CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  )
766     CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            ) 
767     CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd )
768     !
769     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod')
770     !
771   END SUBROUTINE p4z_prod
772
773
774   SUBROUTINE p4z_prod_init
775      !!----------------------------------------------------------------------
776      !!                  ***  ROUTINE p4z_prod_init  ***
777      !!
778      !! ** Purpose :   Initialization of phytoplankton production parameters
779      !!
780      !! ** Method  :   Read the nampisprod namelist and check the parameters
781      !!      called at the first timestep (nittrc000)
782      !!
783      !! ** input   :   Namelist nampisprod
784      !!----------------------------------------------------------------------
785      !
786      NAMELIST/nampisprod/ pislope, pislope2, xadap, ln_newprod, bresp, excret, excret2,  &
787         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip
788      INTEGER :: ios                 ! Local integer output status for namelist read
789      !!----------------------------------------------------------------------
790
791      REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production
792      READ  ( numnatp_ref, nampisprod, IOSTAT = ios, ERR = 901)
793901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in reference namelist', lwp )
794
795      REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production
796      READ  ( numnatp_cfg, nampisprod, IOSTAT = ios, ERR = 902 )
797902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in configuration namelist', lwp )
798      IF(lwm) WRITE ( numonp, nampisprod )
799
800      IF(lwp) THEN                         ! control print
801         WRITE(numout,*) ' '
802         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, nampisprod'
803         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
804         WRITE(numout,*) '    Enable new parame. of production (T/F)   ln_newprod   =', ln_newprod
805         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip
806         WRITE(numout,*) '    P-I slope                                 pislope      =', pislope
807         WRITE(numout,*) '    Acclimation factor to low light           xadap       =', xadap
808         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excret       =', excret
809         WRITE(numout,*) '    excretion ratio of diatoms                excret2      =', excret2
810         IF( ln_newprod )  THEN
811            WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp
812            WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
813         ENDIF
814         WRITE(numout,*) '    P-I slope  for diatoms                    pislope2     =', pislope2
815         WRITE(numout,*) '    Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm
816         WRITE(numout,*) '    Minimum Chl/C in diatoms                  chlcdm       =', chlcdm
817         WRITE(numout,*) '    Maximum Fe/C in nanophytoplankton         fecnm        =', fecnm
818         WRITE(numout,*) '    Minimum Fe/C in diatoms                   fecdm        =', fecdm
819      ENDIF
820      !
821      r1_rday   = 1._wp / rday 
822      texcret   = 1._wp - excret
823      texcret2  = 1._wp - excret2
824      tpp       = 0._wp
825      !
826   END SUBROUTINE p4z_prod_init
827
828
829   INTEGER FUNCTION p4z_prod_alloc()
830      !!----------------------------------------------------------------------
831      !!                     ***  ROUTINE p4z_prod_alloc  ***
832      !!----------------------------------------------------------------------
833      ALLOCATE( prmax(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc )
834      !
835      IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.')
836      !
837   END FUNCTION p4z_prod_alloc
838
839#else
840   !!======================================================================
841   !!  Dummy module :                                   No PISCES bio-model
842   !!======================================================================
843CONTAINS
844   SUBROUTINE p4z_prod                    ! Empty routine
845   END SUBROUTINE p4z_prod
846#endif 
847
848   !!======================================================================
849END MODULE p4zprod
Note: See TracBrowser for help on using the repository browser.