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/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z – NEMO

source: NEMO/branches/2021/dev_r14383_PISCES_NEWDEV_PISCO/src/TOP/PISCES/P4Z/p5zlim.F90 @ 14416

Last change on this file since 14416 was 14416, checked in by cetlod, 4 years ago

dev_r14383_PISCES_NEWDEV_PISCO : minor improvments

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