source: NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90 @ 12759

Last change on this file since 12759 was 12759, checked in by aumont, 13 months ago

make parameterizations in PISCES-operationnal more similar to thos of PISCES-QUOTA (prey switching, optimal allocation, size, …)

File size: 39.6 KB
Line 
1MODULE p5zlim
2   !!======================================================================
3   !!                         ***  MODULE p5zlim  ***
4   !! TOP :   PISCES-QUOTA : Computes the various nutrient limitation terms
5   !!                        of phytoplankton
6   !!======================================================================
7   !! History :   1.0  !  2004     (O. Aumont) Original code
8   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
9   !!             3.4  !  2011-04  (O. Aumont, C. Ethe) Limitation for iron modelled in quota
10   !!             3.6  !  2015-05  (O. Aumont) PISCES quota
11   !!----------------------------------------------------------------------
12   !!   p5z_lim        :   Compute the nutrients limitation terms
13   !!   p5z_lim_init   :   Read the namelist
14   !!----------------------------------------------------------------------
15   USE oce_trc         ! Shared ocean-passive tracers variables
16   USE trc             ! Tracers defined
17   USE p4zlim          ! Nutrient limitation
18   USE sms_pisces      ! PISCES variables
19   USE iom             !  I/O manager
20
21   IMPLICIT NONE
22   PRIVATE
23
24   PUBLIC p5z_lim           ! called in p4zbio.F90 
25   PUBLIC p5z_lim_init      ! called in trcsms_pisces.F90
26   PUBLIC p5z_lim_alloc     ! called in trcini_pisces.F90
27
28   !! * Shared module variables
29   REAL(wp), PUBLIC ::  concpno3    !:  NO3 half saturation for picophyto 
30   REAL(wp), PUBLIC ::  concpnh4    !:  NH4 half saturation for picophyto
31   REAL(wp), PUBLIC ::  concnpo4    !:  PO4 half saturation for nanophyto
32   REAL(wp), PUBLIC ::  concppo4    !:  PO4 half saturation for picophyto
33   REAL(wp), PUBLIC ::  concdpo4    !:  PO4 half saturation for diatoms
34   REAL(wp), PUBLIC ::  concpfer    !:  Iron half saturation for picophyto
35   REAL(wp), PUBLIC ::  concbpo4    !:  PO4 half saturation for bacteria
36   REAL(wp), PUBLIC ::  xsizepic    !:  Minimum size criteria for picophyto
37   REAL(wp), PUBLIC ::  xsizerp     !:  Size ratio for picophytoplankton
38   REAL(wp), PUBLIC ::  qfnopt      !:  optimal Fe quota for nanophyto
39   REAL(wp), PUBLIC ::  qfpopt      !:  optimal Fe quota for picophyto
40   REAL(wp), PUBLIC ::  qfdopt      !:  optimal Fe quota for diatoms
41   REAL(wp), PUBLIC ::  qnnmin      !:  minimum N  quota for nanophyto
42   REAL(wp), PUBLIC ::  qnnmax      !:  maximum N quota for nanophyto
43   REAL(wp), PUBLIC ::  qpnmin      !:  minimum P quota for nanophyto
44   REAL(wp), PUBLIC ::  qpnmax      !:  maximum P quota for nanophyto
45   REAL(wp), PUBLIC ::  qnpmin      !:  minimum N quota for nanophyto
46   REAL(wp), PUBLIC ::  qnpmax      !:  maximum N quota for nanophyto
47   REAL(wp), PUBLIC ::  qppmin      !:  minimum P quota for nanophyto
48   REAL(wp), PUBLIC ::  qppmax      !:  maximum P quota for nanophyto
49   REAL(wp), PUBLIC ::  qndmin      !:  minimum N quota for diatoms
50   REAL(wp), PUBLIC ::  qndmax      !:  maximum N quota for diatoms
51   REAL(wp), PUBLIC ::  qpdmin      !:  minimum P quota for diatoms
52   REAL(wp), PUBLIC ::  qpdmax      !:  maximum P quota for diatoms
53   REAL(wp), PUBLIC ::  qfnmax      !:  maximum Fe quota for nanophyto
54   REAL(wp), PUBLIC ::  qfpmax      !:  maximum Fe quota for picophyto
55   REAL(wp), PUBLIC ::  qfdmax      !:  maximum Fe quota for diatoms
56   REAL(wp), PUBLIC ::  zpsinh4     !:  respiration cost of NH4 assimilation
57   REAL(wp), PUBLIC ::  zpsino3     !:  respiration cost of NO3 assimilation
58   REAL(wp), PUBLIC ::  zpsiuptk    !:  Mean respiration cost
59
60   !!*  Allometric variations of the quotas
61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmin    !: ???
62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmax    !: ???
63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmin    !: ???
64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmax    !: ???
65   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmin    !: ???
66   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmax    !: ???
67   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmin    !: ???
68   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmax    !: ???
69   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmin    !: ???
70   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmax    !: ???
71   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmin    !: ???
72   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmax    !: ???
73
74   !!* Phytoplankton nutrient limitation terms
75   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: Limitation of NO3 uptake by picophyto
76   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: Limitation of NH4 uptake by picophyto
77   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: Limitation of PO4 uptake by picophyto
78   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: Limitation of DOP uptake by nanophyto
79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: Limitation of DOP uptake by picophyto
80   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: Limitation of DOP uptake by diatoms
81   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: Limitation of Fe uptake by picophyto
82   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: Limitation of picophyto PP by nutrients
83   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpics   !: Limitation of picophyto PP by nutrients
84   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphys   !: Limitation of nanophyto PP by nutrients
85   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdias   !: Limitation of diatoms PP by nutrients
86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: Limitation of picophyto PP by Fe
87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk    !: Maximum potential uptake rate of nanophyto
88   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk    !: Maximum potential uptake rate of picophyto
89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk    !: Maximum potential uptake rate of diatoms
90
91   ! Coefficient for iron limitation following Flynn and Hipkin (1999)
92   REAL(wp) ::  xcoef1   = 0.00167  / 55.85
93   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5
94   REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 
95   !!----------------------------------------------------------------------
96   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
97   !! $Id: p5zlim.F90 10070 2018-08-28 14:30:54Z nicolasmartin $
98   !! Software governed by the CeCILL license (see ./LICENSE)
99   !!----------------------------------------------------------------------
100
101CONTAINS
102
103   SUBROUTINE p5z_lim( kt, knt )
104      !!---------------------------------------------------------------------
105      !!                     ***  ROUTINE p5z_lim  ***
106      !!
107      !! ** Purpose :   Compute the co-limitations by the various nutrients
108      !!                for the various phytoplankton species. Quota based
109      !!                approach. The quota model is derived from theoretical
110      !!                models proposed by Pahlow and Oschlies (2009) and
111      !!                Flynn (2001). Various adaptations from several
112      !!                publications by these authors have been also adopted.
113      !!
114      !! ** Method  : Quota based approach. The quota model is derived from
115      !!              theoretical models by Pahlow and Oschlies (2009) and
116      !!              Flynn (2001). Various adaptations from several publications
117      !!              by these authors have been also adopted.
118      !!---------------------------------------------------------------------
119      !
120      INTEGER, INTENT(in)  :: kt, knt
121      !
122      INTEGER  ::   ji, jj, jk
123      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim
124      REAL(wp) ::   z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1
125      REAL(wp) ::   zratio, zration, zratiof, znutlim, zfalim, zzpsiuptk
126      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4
127      REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe
128      REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf
129      REAL(wp) ::   fapico, fapicop, fapicof
130      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl
131      REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl
132      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4
133      REAL(wp) ::   zlim1f, zsizetmp
134      REAL(wp), DIMENSION(jpi,jpj,jpk) :: xlimnpn, xlimnpp, xlimnpd
135      !!---------------------------------------------------------------------
136      !
137      IF( ln_timing )   CALL timing_start('p5z_lim')
138      !
139      zratchl = 6.0
140      sizena(:,:,:) = 0.0  ;  sizepa(:,:,:) = 0.0  ;  sizeda(:,:,:) = 0.0
141      !
142      DO jk = 1, jpkm1
143         DO jj = 1, jpj
144            DO ji = 1, jpi
145               !
146               ! Tuning of the iron concentration to a minimum level that
147               ! is set to the detection limit
148               ! --------------------------------------------------------
149               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6
150               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 )
151               zferlim = MIN( zferlim, 7e-11 )
152               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim )
153
154               ! Computation of the Chl/C ratio of each phytoplankton group
155               ! ----------------------------------------------------------
156               z1_trnphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn )
157               z1_trnpic   = 1. / ( trb(ji,jj,jk,jppic) + rtrn )
158               z1_trndia   = 1. / ( trb(ji,jj,jk,jpdia) + rtrn )
159               znanochl = trb(ji,jj,jk,jpnch) * z1_trnphy
160               zpicochl = trb(ji,jj,jk,jppch) * z1_trnpic
161               zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia
162
163               ! Computation of a variable Ks for the different phytoplankton
164               ! group as a function of their relative size. Allometry
165               ! from Edwards et al. (2012)
166               ! ------------------------------------------------------------
167
168               ! diatoms
169               zsized            = sized(ji,jj,jk)**0.81
170               zconcdfe          = concdfer * zsized
171               zconc1d           = concdno3 * zsized
172               zconc1dnh4        = concdnh4 * zsized
173               zconc0dpo4        = concdpo4 * zsized
174
175               ! picophytoplankton
176               zsizep            = sizep(ji,jj,jk)**0.81
177               zconcpfe          = concpfer * zsizep
178               zconc0p           = concpno3 * zsizep
179               zconc0pnh4        = concpnh4 * zsizep
180               zconc0ppo4        = concppo4 * zsizep
181
182               ! nanophytoplankton
183               zsizen            = sizen(ji,jj,jk)**0.81
184               zconcnfe          = concnfer * zsizen
185               zconc0n           = concnno3 * zsizen
186               zconc0nnh4        = concnnh4 * zsizen
187               zconc0npo4        = concnpo4 * zsizen
188
189               ! Allometric variations of the minimum and maximum quotas
190               ! From Talmy et al. (2014) and Maranon et al. (2013)
191               ! -------------------------------------------------------
192               xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.3)
193               xqnnmax(ji,jj,jk) = qnnmax
194               xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.3)
195               xqndmax(ji,jj,jk) = qndmax
196               xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.48)
197               xqnpmax(ji,jj,jk) = qnpmax * sizep(ji,jj,jk)**(-0.21)
198
199               ! Computation of the optimal allocation parameters
200               ! Based on the different papers by Pahlow et al., and
201               ! Smith et al.
202               ! ---------------------------------------------------
203
204               ! Nanophytoplankton
205               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4,    &
206                 &         trb(ji,jj,jk,jpno3) / zconc0n)
207               fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
208               znutlim = trb(ji,jj,jk,jppo4) / zconc0npo4
209               fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
210               znutlim = biron(ji,jj,jk) / zconcnfe
211               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
212
213               ! Picophytoplankton
214               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4,    &
215                 &         trb(ji,jj,jk,jpno3) / zconc0p)
216               fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
217               znutlim = trb(ji,jj,jk,jppo4) / zconc0ppo4
218               fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
219               znutlim = biron(ji,jj,jk) / zconcpfe
220               fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
221
222               ! Diatoms
223               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4,    &
224                 &         trb(ji,jj,jk,jpno3) / zconc1d )
225               fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
226               znutlim = trb(ji,jj,jk,jppo4) / zconc0dpo4
227               fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
228               znutlim = biron(ji,jj,jk) / zconcdfe
229               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
230
231               ! Michaelis-Menten Limitation term by nutrients of
232               ! heterotrophic bacteria
233               ! -------------------------------------------------
234               zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) )
235               zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4)
236               !
237               zlim1    = zbactno3 + zbactnh4
238               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbpo4)
239               zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) )
240               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) )
241               ! Xlimbac is used for DOC solubilization whereas xlimbacl
242               ! is used for all the other bacterial-dependent terms
243               ! -------------------------------------------------------
244               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 )
245               xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4
246               
247               ! Michaelis-Menten Limitation term by nutrients: Nanophyto
248               ! --------------------------------------------------------
249               !
250               ! Limitation of N based nutrients uptake (NO3 and NH4)
251               zfalim = (1.-fanano) / fanano
252               xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) )
253               xnanono3(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trb(ji,jj,jk,jpno3) )  &
254               &                    * (1. - xnanonh4(ji,jj,jk))
255               !
256               ! Limitation of P based nutrients (PO4 and DOP)
257               zfalim = (1.-fananop) / fananop
258               xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 )
259               xnanodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   &
260               &                    * ( 1.0 - xnanopo4(ji,jj,jk) )
261               xnanodop(ji,jj,jk) = 0.
262               !
263               ! Limitation of Fe uptake
264               zfalim = (1.-fananof) / fananof
265               xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe )
266               !
267               ! The minimum iron quota depends on the size of PSU, respiration
268               ! and the reduction of nitrate following the parameterization
269               ! proposed by Flynn and Hipkin (1999)
270               zratiof   = trb(ji,jj,jk,jpnfe) * z1_trnphy
271               zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk)
272               !
273               zration = trb(ji,jj,jk,jpnph) * z1_trnphy
274               zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration ))
275               zzpsiuptk = xqnnmin(ji,jj,jk) * rno3 / zpsiuptk**2
276               fvnuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn)  &
277               &                   * MAX(0., (1. - zratchl * znanochl / 12. ) )
278               !
279               zlim1  = max(0., (zration - xqnnmin(ji,jj,jk) )  &
280               &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  &
281               &          / (zration + rtrn)
282               ! The value of the optimal quota in the formulation below
283               ! has been found by solving a non linear equation
284               zlim1f = max(0., ( 1.086 - xqnnmin(ji,jj,jk) )  &
285               &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)
286               zlim3  = MAX( 0.,( zratiof - zqfemn ) / qfnopt )
287               ! computation of the various limitation terms of nanophyto
288               ! growth and PP
289               xlimnfe (ji,jj,jk) = MIN( 1., zlim3 )
290               xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 )
291               xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 )
292               xlimnpn (ji,jj,jk) = MIN( 1., zlim1)
293
294               ! Michaelis-Menten Limitation term by nutrients: Picophyto
295               ! --------------------------------------------------------
296               !
297               ! Limitation of N based nutrients uptake (NO3 and NH4)
298               zfalim = (1.-fapico) / fapico 
299               xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) )
300               xpicono3(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trb(ji,jj,jk,jpno3) )  &
301               &                    * (1. - xpiconh4(ji,jj,jk))
302               !
303               ! Limitation of P based nutrients uptake (PO4 and DOP)
304               zfalim = (1.-fapicop) / fapicop 
305               xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 )
306               xpicodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   &
307               &                    * ( 1.0 - xpicopo4(ji,jj,jk) )
308               xpicodop(ji,jj,jk) = 0.
309               !
310               zfalim = (1.-fapicof) / fapicof
311               xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe )
312               !
313               ! The minimum iron quota depends on the size of PSU, respiration
314               ! and the reduction of nitrate following the parameterization
315               ! proposed by Flynn and Hipkin (1999)
316               zratiof   = trb(ji,jj,jk,jppfe) * z1_trnpic
317               zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk)
318               !
319               zration   = trb(ji,jj,jk,jpnpi) * z1_trnpic
320               zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration ))
321               zzpsiuptk = xqnpmin(ji,jj,jk) * rno3 / zpsiuptk**2
322               fvpuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn)  &
323               &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 
324               !
325               zlim1    = max(0., (zration - xqnpmin(ji,jj,jk) )  &
326               &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  &
327               &          / (zration + rtrn)
328               ! The value of the optimal quota in the formulation below
329               ! has been found by solving a non linear equation
330               zlim1f   = max(0., (1.367 - xqnpmin(ji,jj,jk) )  &
331               &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)
332               zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt )
333
334               ! computation of the various limitation terms of picophyto
335               ! growth and PP
336               xlimpfe (ji,jj,jk) = MIN( 1., zlim3 )
337               xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 )
338               xlimnpp (ji,jj,jk) = MIN( 1., zlim1 )
339               xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 )
340
341               ! Michaelis-Menten Limitation term by nutrients : Diatoms
342               ! -------------------------------------------------------
343               !
344               ! Limitation of N based nutrients uptake (NO3 and NH4)
345               zfalim = (1.-fadiat) / fadiat 
346               xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) )
347               xdiatno3(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trb(ji,jj,jk,jpno3) )  &
348               &                    * (1. - xdiatnh4(ji,jj,jk))
349               !
350               ! Limitation of P based nutrients uptake (PO4 and DOP)
351               zfalim = (1.-fadiatp) / fadiatp
352               xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 )
353               xdiatdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )  &
354               &                    * ( 1.0 - xdiatpo4(ji,jj,jk) )
355               xdiatdop(ji,jj,jk) = 0.
356               !
357               ! Limitation of Fe uptake
358               zfalim = (1.-fadiatf) / fadiatf
359               xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe )
360               !
361               ! The minimum iron quota depends on the size of PSU, respiration
362               ! and the reduction of nitrate following the parameterization
363               ! proposed by Flynn and Hipkin (1999)
364               zratiof   = trb(ji,jj,jk,jpdfe) * z1_trndia
365               zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk)
366               !
367               zration   = trb(ji,jj,jk,jpndi) * z1_trndia
368               zration   = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration ))
369               zzpsiuptk = xqndmin(ji,jj,jk) * rno3 / zpsiuptk**2
370               fvduptk(ji,jj,jk) = 1. / zzpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn)   &
371               &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 
372               !
373               zlim1    = max(0., (zration - xqndmin(ji,jj,jk) )    &
374               &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   &
375               &          * xqndmax(ji,jj,jk) / (zration + rtrn)
376               ! The value of the optimal quota in the formulation below
377               ! has been found by solving a non linear equation
378               zlim1f   = max(0., (1.077 - xqndmin(ji,jj,jk) )    &
379               &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   &
380               &          * xqndmax(ji,jj,jk)
381               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) )
382               zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt )
383               ! computation of the various limitation terms of diatoms
384               ! growth and PP
385               xlimdfe(ji,jj,jk) = MIN( 1., zlim4 )
386               xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 )
387               xlimdias(ji,jj,jk) = MIN (1.0, zlim1 / (zlim1f + rtrn ), zlim3, zlim4 )
388               xlimsi(ji,jj,jk)  = MIN( zlim1, zlim4 )
389               xlimnpd(ji,jj,jk) = MIN( 1., zlim1 )
390            END DO
391         END DO
392      END DO
393      !
394      ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013.
395      ! The relative contribution of three fonctional pools are computed: light harvesting apparatus,
396      ! nutrient uptake pool and assembly machinery. DNA is assumed to represent 1% of the dry mass of
397      ! phytoplankton (see Daines et al., 2013).
398      ! --------------------------------------------------------------------------------------------------
399      DO jk = 1, jpkm1
400         DO jj = 1, jpj
401            DO ji = 1, jpi
402               ! Size estimation of nanophytoplankton based on total biomass
403               ! Assumes that larger biomass implies addition of larger cells
404               ! ------------------------------------------------------------
405               zcoef = trb(ji,jj,jk,jpphy) - MIN(xsizephy, trb(ji,jj,jk,jpphy) )
406               sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef )
407               ! N/P ratio of nanophytoplankton
408               ! ------------------------------
409               zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn )
410               zrpho  = 1.54 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 14. + rtrn )
411               zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) )
412               xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 * xqnnmin(ji,jj,jk) ) * 16.
413               xqpnmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16.
414               xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn )  &
415               &      + (0.033 + 0.0078 ) * 16.
416               xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) )
417
418
419               ! Size estimation of picophytoplankton based on total biomass
420               ! Assumes that larger biomass implies addition of larger cells
421               ! ------------------------------------------------------------
422               zcoef = trb(ji,jj,jk,jppic) - MIN(xsizepic, trb(ji,jj,jk,jppic) )
423               sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef )
424
425               ! N/P ratio of picophytoplankton
426               ! ------------------------------
427               zfuptk = 0.2 + 0.12 / ( 0.5 * sizep(ji,jj,jk) + rtrn )
428               zrpho = 1.54 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 14. + rtrn )
429               zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) )
430               xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 * xqnpmin(ji,jj,jk) ) * 16.
431               xqppmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0517 ) * 16.
432               xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) &
433               &      +  (0.033 + 0.0078 ) * 16
434               xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) )
435
436               ! Size estimation of diatoms based on total biomass
437               ! Assumes that larger biomass implies addition of larger cells
438               ! ------------------------------------------------------------
439               zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) )
440               sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef )
441
442               ! N/P ratio of diatoms
443               ! --------------------
444               zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn )
445               zrpho = 1.54 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 14. + rtrn )
446               zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) )
447
448               xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 *  xqndmin(ji,jj,jk) ) * 16.
449               xqpdmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16.
450               xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) &
451               &      + ( 0.0078 + 0.033 ) * 16.
452               xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) )
453
454            END DO
455         END DO
456      END DO
457
458      ! Compute the fraction of nanophytoplankton that is made of calcifiers
459      ! This is a purely adhoc formulation described in Aumont et al. (2015)
460      ! This fraction depends on nutrient limitation, light, temperature
461      ! --------------------------------------------------------------------
462      DO jk = 1, jpkm1
463         DO jj = 1, jpj
464            DO ji = 1, jpi
465               zlim1 =  trb(ji,jj,jk,jpnh4) / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) + trb(ji,jj,jk,jpno3)    &
466               &        / ( trb(ji,jj,jk,jpno3) + concnno3 ) * ( 1.0 - trb(ji,jj,jk,jpnh4)   &
467               &        / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) )
468               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnpo4 )
469               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  5.E-11 ) 
470               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) )
471               ztem2  = tsn(ji,jj,jk,jp_tem) - 10.
472               zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 
473
474               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )    &
475               &                   * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 )   &
476                  &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         &
477                  &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
478               xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) )
479            END DO
480         END DO
481      END DO
482      !
483      DO jk = 1, jpkm1
484         DO jj = 1, jpj
485            DO ji = 1, jpi
486               ! denitrification factor computed from O2 levels
487               nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    &
488                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  )
489               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) )
490               !
491               ! redox factor computed from NO3 levels
492               nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - trb(ji,jj,jk,jpno3) )  &
493                  &                                / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) )
494               nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) )
495            END DO
496         END DO
497      END DO
498      !
499      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics
500        IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht
501        IF( iom_use( "LNnut"   ) ) CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
502        IF( iom_use( "LPnut"   ) ) CALL iom_put( "LPnut"  , xlimpic(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
503        IF( iom_use( "LDnut"   ) ) CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
504        IF( iom_use( "LNFe"    ) ) CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
505        IF( iom_use( "LPFe"    ) ) CALL iom_put( "LPFe"   , xlimpfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
506        IF( iom_use( "LDFe"    ) ) CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
507        IF( iom_use( "SIZEN"   ) ) CALL iom_put( "SIZEN"  , sizen(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
508        IF( iom_use( "SIZEP"   ) ) CALL iom_put( "SIZEP"  , sizep(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
509        IF( iom_use( "SIZED"   ) ) CALL iom_put( "SIZED"  , sized(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
510      ENDIF
511      !
512      IF( ln_timing )  CALL timing_stop('p5z_lim')
513      !
514   END SUBROUTINE p5z_lim
515
516
517   SUBROUTINE p5z_lim_init
518      !!----------------------------------------------------------------------
519      !!                  ***  ROUTINE p5z_lim_init  ***
520      !!
521      !! ** Purpose :   Initialization of nutrient limitation parameters
522      !!
523      !! ** Method  :   Read the nampislim and nampisquota namelists and check
524      !!      the parameters called at the first timestep (nittrc000)
525      !!
526      !! ** input   :   Namelist nampislim
527      !!
528      !!----------------------------------------------------------------------
529      INTEGER :: ios                 ! Local integer output status for namelist read
530      !!
531      NAMELIST/namp5zlim/ concnno3, concpno3, concdno3, concnnh4, concpnh4, concdnh4,  &
532         &                concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4,   &
533         &                concdpo4, concbno3, concbnh4, concbpo4, xsizedia, xsizepic,  &
534         &                xsizephy, xsizern, xsizerp, xsizerd, xksi1, xksi2, xkdoc,    &
535         &                caco3r, oxymin
536         !
537      NAMELIST/namp5zquota/ qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin,      &
538         &                  qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax,  &
539         &                  qfnopt, qfpopt, qfdopt
540      !!----------------------------------------------------------------------
541      !
542      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters
543      READ  ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901)
544901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist' )
545      !
546      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters
547      READ  ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 )
548902   IF( ios >  0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist' )
549      IF(lwm) WRITE ( numonp, namp5zlim )
550      !
551      IF(lwp) THEN                         ! control print
552         WRITE(numout,*) ' '
553         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zlim'
554         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
555         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r
556         WRITE(numout,*) '    NO3 half saturation of nanophyto         concnno3  = ', concnno3
557         WRITE(numout,*) '    NO3 half saturation of picophyto         concpno3  = ', concpno3
558         WRITE(numout,*) '    NO3 half saturation of diatoms           concdno3  = ', concdno3
559         WRITE(numout,*) '    NH4 half saturation for phyto            concnnh4  = ', concnnh4
560         WRITE(numout,*) '    NH4 half saturation for pico             concpnh4  = ', concpnh4
561         WRITE(numout,*) '    NH4 half saturation for diatoms          concdnh4  = ', concdnh4
562         WRITE(numout,*) '    PO4 half saturation for phyto            concnpo4  = ', concnpo4
563         WRITE(numout,*) '    PO4 half saturation for pico             concppo4  = ', concppo4
564         WRITE(numout,*) '    PO4 half saturation for diatoms          concdpo4  = ', concdpo4
565         WRITE(numout,*) '    half saturation constant for Si uptake   xksi1     = ', xksi1
566         WRITE(numout,*) '    half saturation constant for Si/C        xksi2     = ', xksi2
567         WRITE(numout,*) '    half-sat. of DOC remineralization        xkdoc     = ', xkdoc
568         WRITE(numout,*) '    Iron half saturation for nanophyto       concnfer  = ', concnfer
569         WRITE(numout,*) '    Iron half saturation for picophyto       concpfer  = ', concpfer
570         WRITE(numout,*) '    Iron half saturation for diatoms         concdfer  = ', concdfer
571         WRITE(numout,*) '    size ratio for nanophytoplankton         xsizern   = ', xsizern
572         WRITE(numout,*) '    size ratio for picophytoplankton         xsizerp   = ', xsizerp
573         WRITE(numout,*) '    size ratio for diatoms                   xsizerd   = ', xsizerd
574         WRITE(numout,*) '    NO3 half saturation of bacteria          concbno3  = ', concbno3
575         WRITE(numout,*) '    NH4 half saturation for bacteria         concbnh4  = ', concbnh4
576         WRITE(numout,*) '    Minimum size criteria for diatoms        xsizedia  = ', xsizedia
577         WRITE(numout,*) '    Minimum size criteria for picophyto      xsizepic  = ', xsizepic
578         WRITE(numout,*) '    Minimum size criteria for nanophyto      xsizephy  = ', xsizephy
579         WRITE(numout,*) '    Fe half saturation for bacteria          concbfe   = ', concbfe
580         WRITE(numout,*) '    halk saturation constant for anoxia       oxymin   =' , oxymin
581      ENDIF
582
583      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters
584      READ  ( numnatp_ref, namp5zquota, IOSTAT = ios, ERR = 903)
585903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in reference namelist' )
586      !
587      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters
588      READ  ( numnatp_cfg, namp5zquota, IOSTAT = ios, ERR = 904 )
589904   IF( ios >  0 ) CALL ctl_nam ( ios , 'nampisquota in configuration namelist' )
590      IF(lwm) WRITE ( numonp, namp5zquota )
591      !
592      IF(lwp) THEN                         ! control print
593         WRITE(numout,*) ' '
594         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zquota'
595         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
596         WRITE(numout,*) '    optimal Fe quota for nano.               qfnopt    = ', qfnopt
597         WRITE(numout,*) '    optimal Fe quota for pico.               qfpopt    = ', qfpopt
598         WRITE(numout,*) '    Optimal Fe quota for diatoms             qfdopt    = ', qfdopt
599         WRITE(numout,*) '    Minimal N quota for nano                 qnnmin    = ', qnnmin
600         WRITE(numout,*) '    Maximal N quota for nano                 qnnmax    = ', qnnmax
601         WRITE(numout,*) '    Minimal P quota for nano                 qpnmin    = ', qpnmin
602         WRITE(numout,*) '    Maximal P quota for nano                 qpnmax    = ', qpnmax
603         WRITE(numout,*) '    Minimal N quota for pico                 qnpmin    = ', qnpmin
604         WRITE(numout,*) '    Maximal N quota for pico                 qnpmax    = ', qnpmax
605         WRITE(numout,*) '    Minimal P quota for pico                 qppmin    = ', qppmin
606         WRITE(numout,*) '    Maximal P quota for pico                 qppmax    = ', qppmax
607         WRITE(numout,*) '    Minimal N quota for diatoms              qndmin    = ', qndmin
608         WRITE(numout,*) '    Maximal N quota for diatoms              qndmax    = ', qndmax
609         WRITE(numout,*) '    Minimal P quota for diatoms              qpdmin    = ', qpdmin
610         WRITE(numout,*) '    Maximal P quota for diatoms              qpdmax    = ', qpdmax
611         WRITE(numout,*) '    Maximal Fe quota for nanophyto.          qfnmax    = ', qfnmax
612         WRITE(numout,*) '    Maximal Fe quota for picophyto.          qfpmax    = ', qfpmax
613         WRITE(numout,*) '    Maximal Fe quota for diatoms             qfdmax    = ', qfdmax
614      ENDIF
615      !
616      zpsino3  = 2.3 * rno3
617      zpsinh4  = 1.8 * rno3
618      zpsiuptk = 1.0 / 6.625
619      !
620      nitrfac (:,:,:) = 0._wp
621      !
622   END SUBROUTINE p5z_lim_init
623
624
625   INTEGER FUNCTION p5z_lim_alloc()
626      !!----------------------------------------------------------------------
627      !!                     ***  ROUTINE p5z_lim_alloc  ***
628      !!----------------------------------------------------------------------
629      USE lib_mpp , ONLY: ctl_stop
630      INTEGER ::   ierr(2)        ! Local variables
631      !!----------------------------------------------------------------------
632      ierr(:) = 0
633      !
634      !*  Biological arrays for phytoplankton growth
635      ALLOCATE( xpicono3(jpi,jpj,jpk), xpiconh4(jpi,jpj,jpk),       &
636         &      xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk),       &
637         &      xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk),       &
638         &      xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk),       &
639         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       &
640         &      xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk),       &
641         &      xlimpics(jpi,jpj,jpk),                              &
642         &      fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk),    STAT=ierr(1) )
643         !
644      !*  Minimum/maximum quotas of phytoplankton
645      ALLOCATE( xqnnmin (jpi,jpj,jpk), xqnnmax(jpi,jpj,jpk),       &
646         &      xqpnmin (jpi,jpj,jpk), xqpnmax(jpi,jpj,jpk),       &
647         &      xqnpmin (jpi,jpj,jpk), xqnpmax(jpi,jpj,jpk),       &
648         &      xqppmin (jpi,jpj,jpk), xqppmax(jpi,jpj,jpk),       &
649         &      xqndmin (jpi,jpj,jpk), xqndmax(jpi,jpj,jpk),       &
650         &      xqpdmin (jpi,jpj,jpk), xqpdmax(jpi,jpj,jpk),     STAT=ierr(2) )
651         !
652      p5z_lim_alloc = MAXVAL( ierr )
653      !
654      IF( p5z_lim_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_lim_alloc : failed to allocate arrays.' )
655      !
656   END FUNCTION p5z_lim_alloc
657   !!======================================================================
658END MODULE p5zlim
Note: See TracBrowser for help on using the repository browser.