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 branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z – NEMO

source: branches/CNRS/dev_r4826_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zlim.F90 @ 5266

Last change on this file since 5266 was 5266, checked in by cetlod, 9 years ago

PISCES_QUOTA : First commits, see ticket #1516

  • Property svn:executable set to *
File size: 28.4 KB
Line 
1MODULE p5zlim
2   !!======================================================================
3   !!                         ***  MODULE p5zlim  ***
4   !! TOP :   PISCES with variable stoichiometry
5   !!======================================================================
6   !! History :   1.0  !  2004     (O. Aumont) Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
8   !!             3.4  !  2011-04  (O. Aumont, C. Ethe) Limitation for iron modelled in quota
9   !!             3.6  !  2015-04  (O. Aumont) variable stoichiometry
10   !!----------------------------------------------------------------------
11#if defined key_pisces_quota
12   !!----------------------------------------------------------------------
13   !!   'key_pisces_quota'            PISCES bio-model with variable stoichiometry
14   !!----------------------------------------------------------------------
15   !!   p5z_lim        :   Compute the nutrients limitation terms
16   !!   p5z_lim_init   :   Read the namelist
17   !!----------------------------------------------------------------------
18   USE oce_trc         ! Shared ocean-passive tracers variables
19   USE trc             ! Tracers defined
20   USE sms_pisces      ! PISCES variables
21   USE p4zopt          ! Optical
22   USE iom             !  I/O manager
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC p5z_lim   
28   PUBLIC p5z_lim_init   
29
30   !! * Shared module variables
31   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation   
32   REAL(wp), PUBLIC ::  concpno3    !:  NO3, PO4 half saturation   
33   REAL(wp), PUBLIC ::  concdno3    !:  Phosphate half saturation for diatoms 
34   REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for phyto 
35   REAL(wp), PUBLIC ::  concpnh4    !:  NH4 half saturation for phyto 
36   REAL(wp), PUBLIC ::  concdnh4    !:  NH4 half saturation for diatoms
37   REAL(wp), PUBLIC ::  concnpo4    !:  NH4 half saturation for diatoms
38   REAL(wp), PUBLIC ::  concppo4    !:  NH4 half saturation for diatoms
39   REAL(wp), PUBLIC ::  concdpo4    !:  NH4 half saturation for diatoms
40   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto
41   REAL(wp), PUBLIC ::  concpfer    !:  Iron half saturation for nanophyto
42   REAL(wp), PUBLIC ::  concdfer    !:  Iron half saturation for diatoms 
43   REAL(wp), PUBLIC ::  concbno3    !:  NO3 half saturation  for bacteria
44   REAL(wp), PUBLIC ::  concbnh4    !:  NH4 half saturation for bacteria
45   REAL(wp), PUBLIC ::  concbpo4    !:  PO4 half saturation for bacteria
46   REAL(wp), PUBLIC ::  xsizedia    !:  Minimum size criteria for diatoms
47   REAL(wp), PUBLIC ::  xsizepic    !:  Minimum size criteria for diatoms
48   REAL(wp), PUBLIC ::  xsizephy    !:  Minimum size criteria for nanophyto
49   REAL(wp), PUBLIC ::  xsizern     !:  Size ratio for nanophytoplankton
50   REAL(wp), PUBLIC ::  xsizerp     !:  Size ratio for nanophytoplankton
51   REAL(wp), PUBLIC ::  xsizerd     !:  Size ratio for diatoms
52   REAL(wp), PUBLIC ::  xksi1       !:  half saturation constant for Si uptake
53   REAL(wp), PUBLIC ::  xksi2       !:  half saturation constant for Si/C
54   REAL(wp), PUBLIC ::  xkdoc       !:  2nd half-sat. of DOC remineralization 
55   REAL(wp), PUBLIC ::  concbfe     !:  Fe half saturation for bacteria
56   REAL(wp), PUBLIC ::  qfnopt      !:  optimal Fe quota for nanophyto
57   REAL(wp), PUBLIC ::  qfpopt      !:  optimal Fe quota for nanophyto
58   REAL(wp), PUBLIC ::  qfdopt      !:  optimal Fe quota for diatoms
59   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio
60   REAL(wp), PUBLIC ::  qnnmin      !:  optimal Fe quota for diatoms
61   REAL(wp), PUBLIC ::  qnnmax      !:  optimal Fe quota for diatoms
62   REAL(wp), PUBLIC ::  qpnmin      !:  optimal Fe quota for diatoms
63   REAL(wp), PUBLIC ::  qpnmax      !:  optimal Fe quota for diatoms
64   REAL(wp), PUBLIC ::  qnpmin      !:  optimal Fe quota for diatoms
65   REAL(wp), PUBLIC ::  qnpmax      !:  optimal Fe quota for diatoms
66   REAL(wp), PUBLIC ::  qppmin      !:  optimal Fe quota for diatoms
67   REAL(wp), PUBLIC ::  qppmax      !:  optimal Fe quota for diatoms
68   REAL(wp), PUBLIC ::  qndmin      !:  optimal Fe quota for diatoms
69   REAL(wp), PUBLIC ::  qndmax      !:  optimal Fe quota for diatoms
70   REAL(wp), PUBLIC ::  qpdmin      !:  optimal Fe quota for diatoms
71   REAL(wp), PUBLIC ::  qpdmax      !:  optimal Fe quota for diatoms
72   REAL(wp), PUBLIC ::  qfnmax      !:  optimal Fe quota for diatoms
73   REAL(wp), PUBLIC ::  qfpmax      !:  optimal Fe quota for diatoms
74   REAL(wp), PUBLIC ::  qfdmax      !:  optimal Fe quota for diatoms
75   REAL(wp), PUBLIC ::  zpsinh4
76   REAL(wp), PUBLIC ::  zpsino3
77   REAL(wp), PUBLIC ::  zpsiuptk
78
79   ! Coefficient for iron limitation
80   REAL(wp) ::  xcoef1   = 0.00167  / 55.85
81   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5
82   REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 
83   !!* Substitution
84#  include "top_substitute.h90"
85   !!----------------------------------------------------------------------
86   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
87   !! $Id: p4zlim.F90 3160 2011-11-20 14:27:18Z cetlod $
88   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
89   !!----------------------------------------------------------------------
90
91CONTAINS
92
93   SUBROUTINE p5z_lim( kt, jnt )
94      !!---------------------------------------------------------------------
95      !!                     ***  ROUTINE p5z_lim  ***
96      !!
97      !! ** Purpose :   Compute the co-limitations by the various nutrients
98      !!              for the various phytoplankton species
99      !!
100      !! ** Method  : - ???
101      !!---------------------------------------------------------------------
102      !
103      INTEGER, INTENT(in)  :: kt, jnt
104      !
105      INTEGER  ::   ji, jj, jk
106      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim
107      REAL(wp) ::   z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1
108      REAL(wp) ::   zratio, zration, zratiof, znutlim, zfalim
109      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4
110      REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe
111      REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf
112      REAL(wp) ::   fapico, fapicop, fapicof
113      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl
114      REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl
115      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4
116      !!---------------------------------------------------------------------
117      !
118      IF( nn_timing == 1 )  CALL timing_start('p5z_lim')
119      !
120      zratchl = 6.0
121      !
122      DO jk = 1, jpkm1
123         DO jj = 1, jpj
124            DO ji = 1, jpi
125               !
126               ! Tuning of the iron concentration to a minimum level that is set to the detection limit
127               !-------------------------------------
128               zno3    = trn(ji,jj,jk,jpno3) / 40.e-6
129               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 )
130               zferlim = MIN( zferlim, 7e-11 )
131               trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )
132
133               ! Computation of the mean relative size of each community
134               ! -------------------------------------------------------
135               z1_trnphy   = 1. / ( trn(ji,jj,jk,jpphy) + rtrn )
136               z1_trnpic   = 1. / ( trn(ji,jj,jk,jppic) + rtrn )
137               z1_trndia   = 1. / ( trn(ji,jj,jk,jpdia) + rtrn )
138               znanochl = trn(ji,jj,jk,jpnch) * z1_trnphy
139               zpicochl = trn(ji,jj,jk,jppch) * z1_trnpic
140               zdiatchl = trn(ji,jj,jk,jpdch) * z1_trndia
141
142               ! Computation of a variable Ks for iron on diatoms taking into account
143               ! that increasing biomass is made of generally bigger cells
144               !------------------------------------------------
145               zsized            = sized(ji,jj,jk)**0.81
146               zconcdfe          = concdfer * zsized
147               zconc1d           = concdno3 * zsized
148               zconc1dnh4        = concdnh4 * zsized
149               zconc0dpo4        = concdpo4 * zsized
150
151               zsizep            = 1.
152               zconcpfe          = concpfer * zsizep
153               zconc0p           = concpno3 * zsizep
154               zconc0pnh4        = concpnh4 * zsizep
155               zconc0ppo4        = concppo4 * zsizep
156
157               zsizen            = 1.
158               zconcnfe          = concnfer * zsizen
159               zconc0n           = concnno3 * zsizen
160               zconc0nnh4        = concnnh4 * zsizen
161               zconc0npo4        = concnpo4 * zsizen
162
163               ! Allometric variations of the minimum and maximum quotas
164               ! From Talmy et al. (2014) and Maranon et al. (2013)
165               ! -------------------------------------------------------
166               xqnnmin(ji,jj,jk) = qnnmin
167               xqnnmax(ji,jj,jk) = qnnmax
168               xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 
169               xqndmax(ji,jj,jk) = qndmax
170               xqnpmin(ji,jj,jk) = qnpmin
171               xqnpmax(ji,jj,jk) = qnpmax
172
173               ! Computation of the optimal allocation parameters
174               ! Based on the different papers by Pahlow et al., and Smith et al.
175               ! -----------------------------------------------------------------
176               znutlim = MAX( trn(ji,jj,jk,jpnh4) / zconc0nnh4,    &
177                 &         trn(ji,jj,jk,jpno3) / zconc0n)
178               fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
179               znutlim = trn(ji,jj,jk,jppo4) / zconc0npo4
180               fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
181               znutlim = biron(ji,jj,jk) / zconcnfe
182               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
183               znutlim = MAX( trn(ji,jj,jk,jpnh4) / zconc0pnh4,    &
184                 &         trn(ji,jj,jk,jpno3) / zconc0p)
185               fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
186               znutlim = trn(ji,jj,jk,jppo4) / zconc0ppo4
187               fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
188               znutlim = biron(ji,jj,jk) / zconcpfe
189               fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
190               znutlim = MAX( trn(ji,jj,jk,jpnh4) / zconc1dnh4,    &
191                 &         trn(ji,jj,jk,jpno3) / zconc1d )
192               fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
193               znutlim = trn(ji,jj,jk,jppo4) / zconc0dpo4
194               fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
195               znutlim = biron(ji,jj,jk) / zconcdfe
196               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
197               !
198               ! Michaelis-Menten Limitation term for nutrients Small bacteria
199               ! -------------------------------------------------------------
200               zbactnh4 = trn(ji,jj,jk,jpnh4) / ( concbnh4 + trn(ji,jj,jk,jpnh4) )
201               zbactno3 = trn(ji,jj,jk,jpno3) / ( concbno3 + trn(ji,jj,jk,jpno3) ) * (1. - zbactnh4)
202               !
203               zlim1    = zbactno3 + zbactnh4
204               zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbpo4)
205               zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) )
206               zlim4    = trn(ji,jj,jk,jpdoc) / ( xkdoc   + trn(ji,jj,jk,jpdoc) )
207               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 )
208               xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4
209               !
210               ! Michaelis-Menten Limitation term for nutrients Small flagellates
211               ! -----------------------------------------------
212               zfalim = (1.-fanano) / fanano
213               xnanonh4(ji,jj,jk) = (1. - fanano) * trn(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trn(ji,jj,jk,jpnh4) )
214               xnanono3(ji,jj,jk) = (1. - fanano) * trn(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trn(ji,jj,jk,jpno3) )  &
215               &                    * (1. - xnanonh4(ji,jj,jk))
216               !
217               zfalim = (1.-fananop) / fananop
218               xnanopo4(ji,jj,jk) = (1. - fananop) * trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zfalim * zconc0npo4 )
219               xnanodop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )   &
220               &                    * ( 1.0 - xnanopo4(ji,jj,jk) )
221               !
222               zfalim = (1.-fananof) / fananof
223               xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe )
224               !
225               zratiof   = trn(ji,jj,jk,jpnfe) * z1_trnphy
226               zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk)
227               !
228               zration = trn(ji,jj,jk,jpnph) * z1_trnphy
229               fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn)  &
230               &                   * MAX(0., (1. - zratchl * znanochl / 12. ) )
231               !
232               zlim1    = max(0., (zration - 2. * xqnnmin(ji,jj,jk) )  &
233               &          / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  &
234               &          / (zration + rtrn)
235               zlim3    = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 
236               xlimnfe(ji,jj,jk) = MIN( 1., zlim3 )
237               xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 )
238               !
239               ! Michaelis-Menten Limitation term for nutrients picophytoplankton
240               ! ----------------------------------------------------------------
241               zfalim = (1.-fapico) / fapico 
242               xpiconh4(ji,jj,jk) = (1. - fapico) * trn(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trn(ji,jj,jk,jpnh4) )
243               xpicono3(ji,jj,jk) = (1. - fapico) * trn(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trn(ji,jj,jk,jpno3) )  &
244               &                    * (1. - xpiconh4(ji,jj,jk))
245               !
246               zfalim = (1.-fapicop) / fapicop 
247               xpicopo4(ji,jj,jk) = (1. - fapicop) * trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 )
248               xpicodop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )   &
249               &                    * ( 1.0 - xpicopo4(ji,jj,jk) )
250               !
251               zfalim = (1.-fapicof) / fapicof
252               xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe )
253               !
254               zratiof   = trn(ji,jj,jk,jppfe) * z1_trnpic
255               zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk)
256               !
257               zration   = trn(ji,jj,jk,jpnpi) * z1_trnpic
258               fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn)  &
259               &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 
260               !
261               zlim1    = max(0., (zration - 2. * xqnpmin(ji,jj,jk) )  &
262               &          / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  &
263               &          / (zration + rtrn)
264               zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt )
265               xlimpfe(ji,jj,jk) = MIN( 1., zlim3 )
266               xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 )
267               !
268               !   Michaelis-Menten Limitation term for nutrients Diatoms
269               !   ------------------------------------------------------
270               zfalim = (1.-fadiat) / fadiat 
271               xdiatnh4(ji,jj,jk) = (1. - fadiat) * trn(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trn(ji,jj,jk,jpnh4) )
272               xdiatno3(ji,jj,jk) = (1. - fadiat) * trn(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trn(ji,jj,jk,jpno3) )  &
273               &                    * (1. - xdiatnh4(ji,jj,jk))
274               !
275               zfalim = (1.-fadiatp) / fadiatp
276               xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 )
277               xdiatdop(ji,jj,jk) = trn(ji,jj,jk,jpdop) / ( trn(ji,jj,jk,jpdop) + xkdoc )  &
278               &                    * ( 1.0 - xdiatpo4(ji,jj,jk) )
279               !
280               zfalim = (1.-fadiatf) / fadiatf
281               xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe )
282               !
283               zratiof   = trn(ji,jj,jk,jpdfe) * z1_trndia
284               zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk)
285               !
286               zration   = trn(ji,jj,jk,jpndi) * z1_trndia
287               fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn)   &
288               &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 
289               !
290               zlim1    = max(0., (zration - 2. * xqndmin(ji,jj,jk) )    &
291               &          / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) )   &
292               &          * xqndmax(ji,jj,jk) / (zration + rtrn)
293               zlim3    = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) )
294               zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt )
295               xlimdfe(ji,jj,jk) = MIN( 1., zlim4 )
296               xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 )
297               xlimsi(ji,jj,jk)  = MIN( zlim1, zlim4 )
298            END DO
299         END DO
300      END DO
301      !
302      ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013.
303      ! The relative contribution of three fonctional pools are computed: light harvesting apparatus,
304      ! nutrient uptake pool and assembly machinery. DNA is assumed to represent 1% of the dry mass of
305      ! phytoplankton (see Daines et al., 2013).
306      ! --------------------------------------------------------------------------------------------------
307      DO jk = 1, jpkm1
308         DO jj = 1, jpj
309            DO ji = 1, jpi
310               ! Size estimation of nanophytoplankton
311               ! ------------------------------------
312               zfvn = 2. * fvnuptk(ji,jj,jk)
313               sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) )
314
315               ! N/P ratio of nanophytoplankton
316               ! ------------------------------
317               zfuptk = 0.23 * zfvn
318               zrpho = 2.24 * trn(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpnph) * rno3 * 15. + rtrn )
319               zrass = 1. - 0.2 - zrpho - zfuptk
320               xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16.
321               xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trn(ji,jj,jk,jpnph) / ( trn(ji,jj,jk,jpphy) + rtrn ) + 0.13
322               xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16.
323
324               ! Size estimation of picophytoplankton
325               ! ------------------------------------
326               zfvn = 2. * fvpuptk(ji,jj,jk)
327               sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) )
328
329               ! N/P ratio of picophytoplankton
330               ! ------------------------------
331               zfuptk = 0.35 * zfvn
332               zrpho = 2.24 * trn(ji,jj,jk,jppch) / ( trn(ji,jj,jk,jpnpi) * rno3 * 15. + rtrn )
333               zrass = 1. - 0.4 - zrpho - zfuptk
334               xqppmax(ji,jj,jk) =  (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16.
335               xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trn(ji,jj,jk,jpnpi) / ( trn(ji,jj,jk,jppic) + rtrn ) + 0.13
336               xqppmin(ji,jj,jk) = 0.13
337
338               ! Size estimation of diatoms
339               ! --------------------------
340               zfvn = 2. * fvduptk(ji,jj,jk)
341               sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) )
342               zcoef = trn(ji,jj,jk,jpdia) - MIN(xsizedia, trn(ji,jj,jk,jpdia) )
343               sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 )
344
345               ! N/P ratio of diatoms
346               ! --------------------
347               zfuptk = 0.2 * zfvn
348               zrpho = 2.24 * trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpndi) * rno3 * 15. + rtrn )
349               zrass = 1. - 0.2 - zrpho - zfuptk
350               xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16.
351               xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trn(ji,jj,jk,jpndi) / ( trn(ji,jj,jk,jpdia) + rtrn ) + 0.13
352               xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16.
353            END DO
354         END DO
355      END DO
356
357      ! Compute the fraction of nanophytoplankton that is made of calcifiers
358      ! --------------------------------------------------------------------
359      DO jk = 1, jpkm1
360         DO jj = 1, jpj
361            DO ji = 1, jpi
362               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) )
363               ztem2  = tsn(ji,jj,jk,jp_tem) - 10.
364               zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 
365
366               xfracal(ji,jj,jk) = caco3r * ztem1 / ( 2. + ztem1 ) * (1. + trn(ji,jj,jk,jpphy) / ( 5E-7    &
367                  &                       + trn(ji,jj,jk,jpphy) ) ) * zetot1 * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )  &
368                  &                       * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
369               xfracal(ji,jj,jk) = MAX( 0.05, MIN( 0.8 , xfracal(ji,jj,jk) ) )
370            END DO
371         END DO
372      END DO
373      !
374      IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN        ! save output diagnostics
375        !
376        CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht
377        CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
378        CALL iom_put( "LPnut"  , xlimpic(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
379        CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term
380        CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
381        CALL iom_put( "LPFe"   , xlimpfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
382        CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term
383        CALL iom_put( "SIZEN"  , sizen(:,:,:) * tmask(:,:,:) )  ! Iron
384        CALL iom_put( "SIZEP"  , sizep(:,:,:) * tmask(:,:,:) )  ! Iron
385        CALL iom_put( "SIZED"  , sized(:,:,:) * tmask(:,:,:) )  ! Iron
386        !
387      ENDIF
388      !
389      IF( nn_timing == 1 )  CALL timing_stop('p5z_lim')
390      !
391   END SUBROUTINE p5z_lim
392
393   SUBROUTINE p5z_lim_init
394
395      !!----------------------------------------------------------------------
396      !!                  ***  ROUTINE p5z_lim_init  ***
397      !!
398      !! ** Purpose :   Initialization of nutrient limitation parameters
399      !!
400      !! ** Method  :   Read the nampislim namelist and check the parameters
401      !!      called at the first timestep (nittrc000)
402      !!
403      !! ** input   :   Namelist nampislim
404      !!
405      !!----------------------------------------------------------------------
406
407      NAMELIST/nampislim/ concnno3, concpno3, concdno3, concnnh4, concpnh4, concdnh4,  &
408         &                concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4,   &
409         &                concdpo4, concbno3, concbnh4, concbpo4,   &
410         &                xsizedia, xsizepic, xsizephy, xsizern, xsizerp, xsizerd,     &
411         &                xksi1, xksi2, xkdoc, qfnopt, qfpopt, qfdopt, caco3r,   &
412         &                qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin,      &
413         &                qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax 
414
415      INTEGER :: ios                 ! Local integer output status for namelist read
416
417      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters
418      READ  ( numnatp_ref, nampislim, IOSTAT = ios, ERR = 901)
419901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist', lwp )
420
421      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters
422      READ  ( numnatp_cfg, nampislim, IOSTAT = ios, ERR = 902 )
423902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist', lwp )
424      IF(lwm) WRITE ( numonp, nampislim )
425
426      IF(lwp) THEN                         ! control print
427         WRITE(numout,*) ' '
428         WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim'
429         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
430         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r
431         WRITE(numout,*) '    NO3 half saturation of nanophyto         concnno3  = ', concnno3
432         WRITE(numout,*) '    NO3 half saturation of picophyto         concpno3  = ', concpno3
433         WRITE(numout,*) '    NO3 half saturation of diatoms           concdno3  = ', concdno3
434         WRITE(numout,*) '    NH4 half saturation for phyto            concnnh4  = ', concnnh4
435         WRITE(numout,*) '    NH4 half saturation for pico             concpnh4  = ', concpnh4
436         WRITE(numout,*) '    NH4 half saturation for diatoms          concdnh4  = ', concdnh4
437         WRITE(numout,*) '    PO4 half saturation for phyto            concnpo4  = ', concnpo4
438         WRITE(numout,*) '    PO4 half saturation for pico             concppo4  = ', concppo4
439         WRITE(numout,*) '    PO4 half saturation for diatoms          concdpo4  = ', concdpo4
440         WRITE(numout,*) '    half saturation constant for Si uptake   xksi1     = ', xksi1
441         WRITE(numout,*) '    half saturation constant for Si/C        xksi2     = ', xksi2
442         WRITE(numout,*) '    half-sat. of DOC remineralization        xkdoc     = ', xkdoc
443         WRITE(numout,*) '    Iron half saturation for nanophyto       concnfer  = ', concnfer
444         WRITE(numout,*) '    Iron half saturation for picophyto       concpfer  = ', concpfer
445         WRITE(numout,*) '    Iron half saturation for diatoms         concdfer  = ', concdfer
446         WRITE(numout,*) '    size ratio for nanophytoplankton         xsizern   = ', xsizern
447         WRITE(numout,*) '    size ratio for picophytoplankton         xsizerp   = ', xsizerp
448         WRITE(numout,*) '    size ratio for diatoms                   xsizerd   = ', xsizerd
449         WRITE(numout,*) '    NO3 half saturation of bacteria          concbno3  = ', concbno3
450         WRITE(numout,*) '    NH4 half saturation for bacteria         concbnh4  = ', concbnh4
451         WRITE(numout,*) '    Minimum size criteria for diatoms        xsizedia  = ', xsizedia
452         WRITE(numout,*) '    Minimum size criteria for picophyto      xsizepic  = ', xsizepic
453         WRITE(numout,*) '    Minimum size criteria for nanophyto      xsizephy  = ', xsizephy
454         WRITE(numout,*) '    Fe half saturation for bacteria          concbfe   = ', concbfe
455         WRITE(numout,*) '    optimal Fe quota for nano.               qfnopt    = ', qfnopt
456         WRITE(numout,*) '    optimal Fe quota for pico.               qfpopt    = ', qfpopt
457         WRITE(numout,*) '    Optimal Fe quota for diatoms             qfdopt    = ', qfdopt
458         WRITE(numout,*) '    Minimal N quota for nano                 qnnmin    = ', qnnmin
459         WRITE(numout,*) '    Maximal N quota for nano                 qnnmax    = ', qnnmax
460         WRITE(numout,*) '    Minimal P quota for nano                 qpnmin    = ', qpnmin
461         WRITE(numout,*) '    Maximal P quota for nano                 qpnmax    = ', qpnmax
462         WRITE(numout,*) '    Minimal N quota for pico                 qnpmin    = ', qnpmin
463         WRITE(numout,*) '    Maximal N quota for pico                 qnpmax    = ', qnpmax
464         WRITE(numout,*) '    Minimal P quota for pico                 qppmin    = ', qppmin
465         WRITE(numout,*) '    Maximal P quota for pico                 qppmax    = ', qppmax
466         WRITE(numout,*) '    Minimal N quota for diatoms              qndmin    = ', qndmin
467         WRITE(numout,*) '    Maximal N quota for diatoms              qndmax    = ', qndmax
468         WRITE(numout,*) '    Minimal P quota for diatoms              qpdmin    = ', qpdmin
469         WRITE(numout,*) '    Maximal P quota for diatoms              qpdmax    = ', qpdmax
470         WRITE(numout,*) '    Minimal P quota for nanophyto.           qfnmax    = ', qfnmax
471         WRITE(numout,*) '    Minimal P quota for picophyto.           qfpmax    = ', qfpmax
472         WRITE(numout,*) '    Maximal P quota for diatoms              qfdmax    = ', qfdmax
473
474      ENDIF
475
476      zpsino3 = 2.3 * rno3
477      zpsinh4 = 1.8 * rno3
478!      zpsino3 = 1.1 * rno3
479!      zpsinh4 = 0.6 * rno3
480      zpsiuptk = 2.3 * rno3
481
482   END SUBROUTINE p5z_lim_init
483
484#else
485   !!======================================================================
486   !!  Dummy module :                                   No PISCES bio-model
487   !!======================================================================
488CONTAINS
489   SUBROUTINE p5z_lim                   ! Empty routine
490   END SUBROUTINE p5z_lim
491#endif 
492
493   !!======================================================================
494END MODULE  p5zlim
Note: See TracBrowser for help on using the repository browser.