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

source: NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/TOP/PISCES/P4Z/p5zlim.F90 @ 15548

Last change on this file since 15548 was 15548, checked in by gsamson, 3 years ago

update branch to the head of the trunk (r15547); ticket #2632

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