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_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90 @ 9461

Last change on this file since 9461 was 9461, checked in by aumont, 6 years ago

bug fixes in iron cycle

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