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 @ 14276

Last change on this file since 14276 was 14276, checked in by aumont, 3 years ago

numerous updates to PISCES, PISCES-QUOTA and the sediment module

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