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.
p5zlim.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/p5zlim.F90 @ 12537

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

Comments in routines have been revised and significantly augmented

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