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

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

dev_r11708_aumont_PISCES_QUOTA : merge with the trunk

File size: 39.2 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   !! * 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, zzpsiuptk
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 * zpsiuptk * 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 * zpsiuptk * 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 * zpsiuptk * 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      DO_3D( 1, 1, 1, 1, 1, jpkm1 )
489         ! denitrification factor computed from O2 levels
490         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    &
491            &                                / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) )  )
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 - tr(ji,jj,jk,jpno3,Kbb) )  &
496            &                                / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) )
497         nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) )
498      END_3D
499      !
500      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics
501        CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht
502        CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
503        CALL iom_put( "LPnut"  , xlimpic(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
504        CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
505        CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
506        CALL iom_put( "LPFe"   , xlimpfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
507        CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
508        CALL iom_put( "SIZEN"  , sizen  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
509        CALL iom_put( "SIZEP"  , sizep  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
510        CALL iom_put( "SIZED"  , sized  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
511        CALL iom_put( "RASSN"  , zrassn (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
512        CALL iom_put( "RASSP"  , zrassp (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
513        CALL iom_put( "RASSD"  , zrassd (:,:,:) * tmask(:,:,:) )  ! Iron limitation term
514      ENDIF
515      !
516      IF( ln_timing )  CALL timing_stop('p5z_lim')
517      !
518   END SUBROUTINE p5z_lim
519
520
521   SUBROUTINE p5z_lim_init
522      !!----------------------------------------------------------------------
523      !!                  ***  ROUTINE p5z_lim_init  ***
524      !!
525      !! ** Purpose :   Initialization of nutrient limitation parameters
526      !!
527      !! ** Method  :   Read the namp5zlim and nampisquota namelists and check
528      !!      the parameters called at the first timestep (nittrc000)
529      !!
530      !! ** input   :   Namelist namp5zlim
531      !!
532      !!----------------------------------------------------------------------
533      INTEGER :: ios                 ! Local integer output status for namelist read
534      !!
535      NAMELIST/namp5zlim/ concnno3, concpno3, concdno3, concnnh4, concpnh4, concdnh4,  &
536         &                concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4,   &
537         &                concdpo4, concbno3, concbnh4, concbpo4, xsizedia, xsizepic,  &
538         &                xsizephy, xsizern, xsizerp, xsizerd, xksi1, xksi2, xkdoc,    &
539         &                caco3r, oxymin
540         !
541      NAMELIST/namp5zquota/ qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin,      &
542         &                  qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax,  &
543         &                  qfnopt, qfpopt, qfdopt
544      !!----------------------------------------------------------------------
545      !
546      READ  ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901)
547901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zlim in reference namelist' )
548      !
549      READ  ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 )
550902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zlim in configuration namelist' )
551      IF(lwm) WRITE ( numonp, namp5zlim )
552      !
553      IF(lwp) THEN                         ! control print
554         WRITE(numout,*) ' '
555         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zlim'
556         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
557         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r
558         WRITE(numout,*) '    NO3 half saturation of nanophyto         concnno3  = ', concnno3
559         WRITE(numout,*) '    NO3 half saturation of picophyto         concpno3  = ', concpno3
560         WRITE(numout,*) '    NO3 half saturation of diatoms           concdno3  = ', concdno3
561         WRITE(numout,*) '    NH4 half saturation for phyto            concnnh4  = ', concnnh4
562         WRITE(numout,*) '    NH4 half saturation for pico             concpnh4  = ', concpnh4
563         WRITE(numout,*) '    NH4 half saturation for diatoms          concdnh4  = ', concdnh4
564         WRITE(numout,*) '    PO4 half saturation for phyto            concnpo4  = ', concnpo4
565         WRITE(numout,*) '    PO4 half saturation for pico             concppo4  = ', concppo4
566         WRITE(numout,*) '    PO4 half saturation for diatoms          concdpo4  = ', concdpo4
567         WRITE(numout,*) '    half saturation constant for Si uptake   xksi1     = ', xksi1
568         WRITE(numout,*) '    half saturation constant for Si/C        xksi2     = ', xksi2
569         WRITE(numout,*) '    half-sat. of DOC remineralization        xkdoc     = ', xkdoc
570         WRITE(numout,*) '    Iron half saturation for nanophyto       concnfer  = ', concnfer
571         WRITE(numout,*) '    Iron half saturation for picophyto       concpfer  = ', concpfer
572         WRITE(numout,*) '    Iron half saturation for diatoms         concdfer  = ', concdfer
573         WRITE(numout,*) '    size ratio for nanophytoplankton         xsizern   = ', xsizern
574         WRITE(numout,*) '    size ratio for picophytoplankton         xsizerp   = ', xsizerp
575         WRITE(numout,*) '    size ratio for diatoms                   xsizerd   = ', xsizerd
576         WRITE(numout,*) '    NO3 half saturation of bacteria          concbno3  = ', concbno3
577         WRITE(numout,*) '    NH4 half saturation for bacteria         concbnh4  = ', concbnh4
578         WRITE(numout,*) '    Minimum size criteria for diatoms        xsizedia  = ', xsizedia
579         WRITE(numout,*) '    Minimum size criteria for picophyto      xsizepic  = ', xsizepic
580         WRITE(numout,*) '    Minimum size criteria for nanophyto      xsizephy  = ', xsizephy
581         WRITE(numout,*) '    Fe half saturation for bacteria          concbfe   = ', concbfe
582         WRITE(numout,*) '    halk saturation constant for anoxia       oxymin   =' , oxymin
583      ENDIF
584
585      READ  ( numnatp_ref, namp5zquota, IOSTAT = ios, ERR = 903)
586903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in reference namelist' )
587      !
588      READ  ( numnatp_cfg, namp5zquota, IOSTAT = ios, ERR = 904 )
589904   IF( ios >  0 ) CALL ctl_nam ( ios , 'nampisquota in configuration namelist' )
590      IF(lwm) WRITE ( numonp, namp5zquota )
591      !
592      IF(lwp) THEN                         ! control print
593         WRITE(numout,*) ' '
594         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zquota'
595         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
596         WRITE(numout,*) '    optimal Fe quota for nano.               qfnopt    = ', qfnopt
597         WRITE(numout,*) '    optimal Fe quota for pico.               qfpopt    = ', qfpopt
598         WRITE(numout,*) '    Optimal Fe quota for diatoms             qfdopt    = ', qfdopt
599         WRITE(numout,*) '    Minimal N quota for nano                 qnnmin    = ', qnnmin
600         WRITE(numout,*) '    Maximal N quota for nano                 qnnmax    = ', qnnmax
601         WRITE(numout,*) '    Minimal P quota for nano                 qpnmin    = ', qpnmin
602         WRITE(numout,*) '    Maximal P quota for nano                 qpnmax    = ', qpnmax
603         WRITE(numout,*) '    Minimal N quota for pico                 qnpmin    = ', qnpmin
604         WRITE(numout,*) '    Maximal N quota for pico                 qnpmax    = ', qnpmax
605         WRITE(numout,*) '    Minimal P quota for pico                 qppmin    = ', qppmin
606         WRITE(numout,*) '    Maximal P quota for pico                 qppmax    = ', qppmax
607         WRITE(numout,*) '    Minimal N quota for diatoms              qndmin    = ', qndmin
608         WRITE(numout,*) '    Maximal N quota for diatoms              qndmax    = ', qndmax
609         WRITE(numout,*) '    Minimal P quota for diatoms              qpdmin    = ', qpdmin
610         WRITE(numout,*) '    Maximal P quota for diatoms              qpdmax    = ', qpdmax
611         WRITE(numout,*) '    Maximal Fe quota for nanophyto.          qfnmax    = ', qfnmax
612         WRITE(numout,*) '    Maximal Fe quota for picophyto.          qfpmax    = ', qfpmax
613         WRITE(numout,*) '    Maximal Fe quota for diatoms             qfdmax    = ', qfdmax
614      ENDIF
615      !
616      ! Metabolic cost of nitrate and ammonium utilisation
617      zpsino3  = 2.3 * rno3
618      zpsinh4  = 1.8 * rno3
619      zpsiuptk = 1.0 / 6.625
620      !
621      nitrfac(:,:,jpk) = 0._wp
622      xfracal(:,:,jpk) = 0._wp
623      xlimphy(:,:,jpk) = 0._wp
624      xlimpic(:,:,jpk) = 0._wp
625      xlimdia(:,:,jpk) = 0._wp
626      xlimnfe(:,:,jpk) = 0._wp
627      xlimpfe(:,:,jpk) = 0._wp
628      xlimdfe(:,:,jpk) = 0._wp
629      sizen  (:,:,jpk) = 0._wp
630      sizep  (:,:,jpk) = 0._wp
631      sized  (:,:,jpk) = 0._wp
632      !
633   END SUBROUTINE p5z_lim_init
634
635
636   INTEGER FUNCTION p5z_lim_alloc()
637      !!----------------------------------------------------------------------
638      !!                     ***  ROUTINE p5z_lim_alloc  ***
639      !!----------------------------------------------------------------------
640      USE lib_mpp , ONLY: ctl_stop
641      INTEGER ::   ierr(2)        ! Local variables
642      !!----------------------------------------------------------------------
643      ierr(:) = 0
644      !
645      !*  Biological arrays for phytoplankton growth
646      ALLOCATE( xpicono3(jpi,jpj,jpk), xpiconh4(jpi,jpj,jpk),       &
647         &      xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk),       &
648         &      xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk),       &
649         &      xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk),       &
650         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       &
651         &      xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk),       &
652         &      xlimnpp (jpi,jpj,jpk), xlimnpn (jpi,jpj,jpk),       &
653         &      xlimnpd (jpi,jpj,jpk),                              &
654         &      xlimpics(jpi,jpj,jpk), xqfuncfecp(jpi,jpj,jpk),     &
655         &      fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk),    STAT=ierr(1) )
656         !
657      !*  Minimum/maximum quotas of phytoplankton
658      ALLOCATE( xqnnmin (jpi,jpj,jpk), xqnnmax(jpi,jpj,jpk),       &
659         &      xqpnmin (jpi,jpj,jpk), xqpnmax(jpi,jpj,jpk),       &
660         &      xqnpmin (jpi,jpj,jpk), xqnpmax(jpi,jpj,jpk),       &
661         &      xqppmin (jpi,jpj,jpk), xqppmax(jpi,jpj,jpk),       &
662         &      xqndmin (jpi,jpj,jpk), xqndmax(jpi,jpj,jpk),       &
663         &      xqpdmin (jpi,jpj,jpk), xqpdmax(jpi,jpj,jpk),     STAT=ierr(2) )
664         !
665      p5z_lim_alloc = MAXVAL( ierr )
666      !
667      IF( p5z_lim_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_lim_alloc : failed to allocate arrays.' )
668      !
669   END FUNCTION p5z_lim_alloc
670   !!======================================================================
671END MODULE p5zlim
Note: See TracBrowser for help on using the repository browser.