New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
p5zprod.F90 in NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90 @ 12496

Last change on this file since 12496 was 12496, checked in by aumont, 4 years ago

uptake of ligand by phytoplankton + bug correction in the river supply (h_rnf) + cosmetic changes

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