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.
p4zlim.F90 in branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zlim.F90 @ 2977

Last change on this file since 2977 was 2977, checked in by cetlod, 13 years ago

Add in branch 2011/dev_LOCEAN_2011 changes from 2011/dev_r2787_PISCES_improvment, 2011/dev_r2787_LOCEAN_offline_fldread and 2011/dev_r2787_LOCEAN3_TRA_TRP branches, see ticket #877

  • Property svn:keywords set to Id
File size: 12.9 KB
Line 
1MODULE p4zlim
2   !!======================================================================
3   !!                         ***  MODULE p4zlim  ***
4   !! TOP :   PISCES
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   !!----------------------------------------------------------------------
10#if defined key_pisces
11   !!----------------------------------------------------------------------
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !!   p4z_lim        :   Compute the nutrients limitation terms
15   !!   p4z_lim_init   :   Read the namelist
16   !!----------------------------------------------------------------------
17   USE oce_trc         ! Shared ocean-passive tracers variables
18   USE trc             ! Tracers defined
19   USE sms_pisces      ! PISCES variables
20   USE p4zopt          ! Optical
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC p4z_lim   
26   PUBLIC p4z_lim_init   
27
28   !! * Shared module variables
29   REAL(wp), PUBLIC ::  conc0     = 2.e-6_wp      !:  NO3, PO4 half saturation   
30   REAL(wp), PUBLIC ::  conc1     = 8.e-6_wp      !:  Phosphate half saturation for diatoms 
31   REAL(wp), PUBLIC ::  conc2     = 1.e-9_wp      !:  Iron half saturation for nanophyto
32   REAL(wp), PUBLIC ::  conc2m    = 3.e-9_wp      !:  Max iron half saturation for nanophyto
33   REAL(wp), PUBLIC ::  conc3     = 2.e-9_wp      !:  Iron half saturation for diatoms 
34   REAL(wp), PUBLIC ::  conc3m    = 8.e-9_wp      !:  Max iron half saturation for diatoms
35   REAL(wp), PUBLIC ::  xsizedia  = 5.e-7_wp      !:  Minimum size criteria for diatoms
36   REAL(wp), PUBLIC ::  xsizephy  = 1.e-6_wp      !:  Minimum size criteria for nanophyto
37   REAL(wp), PUBLIC ::  concnnh4  = 1.e-7_wp      !:  NH4 half saturation for phyto 
38   REAL(wp), PUBLIC ::  concdnh4  = 4.e-7_wp      !:  NH4 half saturation for diatoms
39   REAL(wp), PUBLIC ::  xksi1     = 2.E-6_wp      !:  half saturation constant for Si uptake
40   REAL(wp), PUBLIC ::  xksi2     = 3.33e-6_wp    !:  half saturation constant for Si/C
41   REAL(wp), PUBLIC ::  xkdoc     = 417.e-6_wp    !:  2nd half-sat. of DOC remineralization 
42   REAL(wp), PUBLIC ::  concfebac = 1.E-11_wp     !:  Fe half saturation for bacteria
43   REAL(wp), PUBLIC ::  qnfelim   = 7.E-6_wp      !:  optimal Fe quota for nanophyto
44   REAL(wp), PUBLIC ::  qdfelim   = 7.E-6_wp      !:  optimal Fe quota for diatoms
45   REAL(wp), PUBLIC ::  caco3r    = 0.16_wp       !:  mean rainratio
46
47   ! Coefficient for iron limitation
48   REAL(wp) ::  xcoef1   = 0.0016  / 55.85 
49   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5
50   REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 
51   !!* Substitution
52#  include "top_substitute.h90"
53   !!----------------------------------------------------------------------
54   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
55   !! $Id$
56   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
57   !!----------------------------------------------------------------------
58
59CONTAINS
60
61   SUBROUTINE p4z_lim( kt )
62      !!---------------------------------------------------------------------
63      !!                     ***  ROUTINE p4z_lim  ***
64      !!
65      !! ** Purpose :   Compute the co-limitations by the various nutrients
66      !!              for the various phytoplankton species
67      !!
68      !! ** Method  : - ???
69      !!---------------------------------------------------------------------
70      !
71      INTEGER, INTENT(in)  :: kt
72      !
73      INTEGER  ::   ji, jj, jk
74      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim
75      REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2
76      REAL(wp) ::   z1_trndia, z1_trnphy, ztem1, ztem2, zetot1, zetot2
77      REAL(wp) ::   zdenom, zratio, zironmin
78      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4   
79      !!---------------------------------------------------------------------
80
81      DO jk = 1, jpkm1
82         DO jj = 1, jpj
83            DO ji = 1, jpi
84               
85               ! Tuning of the iron concentration to a minimum level that is set to the detection limit
86               !-------------------------------------
87               zno3    = trn(ji,jj,jk,jpno3) / 40.e-6
88               zferlim = MAX( 2e-11 * zno3 * zno3, 5e-12 )
89               zferlim = MIN( zferlim, 3e-11 )
90               trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )
91
92               ! Computation of a variable Ks for iron on diatoms taking into account
93               ! that increasing biomass is made of generally bigger cells
94               !------------------------------------------------
95               zconcd   = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia )
96               zconcd2  = trn(ji,jj,jk,jpdia) - zconcd
97               zconcn   = MAX( 0.e0 , trn(ji,jj,jk,jpphy) - xsizephy )
98               zconcn2  = trn(ji,jj,jk,jpphy) - zconcn
99               z1_trnphy   = 1. / ( trn(ji,jj,jk,jpphy) + rtrn )
100               z1_trndia   = 1. / ( trn(ji,jj,jk,jpdia) + rtrn )
101
102               concdfe(ji,jj,jk) = MAX( conc3       , ( zconcd2 *      conc3    + conc3m        * zconcd ) * z1_trndia )
103               zconc1d           = MAX( 2.* conc0   , ( zconcd2 * 2. * conc0    + conc1         * zconcd ) * z1_trndia )
104               zconc1dnh4        = MAX( 2.* concnnh4, ( zconcd2 * 2. * concnnh4 + concdnh4      * zconcd ) * z1_trndia )
105
106               concnfe(ji,jj,jk) = MAX( conc2       , ( zconcn2 * conc2         + conc2m        * zconcn ) * z1_trnphy )
107               zconc0n           = MAX( conc0       , ( zconcn2 * conc0         + 2. * conc0    * zconcn ) * z1_trnphy )
108               zconc0nnh4        = MAX( concnnh4    , ( zconcn2 * concnnh4      + 2. * concnnh4 * zconcn ) * z1_trnphy )
109
110               ! Michaelis-Menten Limitation term for nutrients Small flagellates
111               ! -----------------------------------------------
112               zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trn(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) )
113               xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom
114               xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc0n    * zdenom
115               !
116               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk)
117               zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 )
118               zratio   = trn(ji,jj,jk,jpnfe) * z1_trnphy 
119               zironmin = xcoef1 * trn(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk)
120               zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim )
121               xlimnfe(ji,jj,jk) = MIN( 1., zlim3 )
122               xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 )
123               !
124               zlim1    = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) )
125               zlim3    = trn(ji,jj,jk,jpfer) / ( concfebac+ trn(ji,jj,jk,jpfer) )
126               zlim4    = trn(ji,jj,jk,jpdoc) / ( xkdoc   + trn(ji,jj,jk,jpdoc) )
127               xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4
128
129               !   Michaelis-Menten Limitation term for nutrients Diatoms
130               !   ----------------------------------------------
131               zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trn(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) )
132               xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom
133               xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * zconc1d    * zdenom
134               !
135               zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk)
136               zlim2    = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4  )
137               zlim3    = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) )
138               zratio   = trn(ji,jj,jk,jpdfe)/(trn(ji,jj,jk,jpdia)+rtrn)
139               zironmin = xcoef1 * trn(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk)
140               zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim )
141               xlimdfe(ji,jj,jk) = MIN( 1., zlim4 )
142               xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 )
143               xlimsi(ji,jj,jk)  = MIN( zlim1, zlim2, zlim4 )
144           END DO
145         END DO
146      END DO
147
148      ! Compute the fraction of nanophytoplankton that is made of calcifiers
149      ! --------------------------------------------------------------------
150      DO jk = 1, jpkm1
151         DO jj = 1, jpj
152            DO ji = 1, jpi
153               zlim1 =  ( trn(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * conc0 )    &
154                  &   / ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3)  + conc0 * trn(ji,jj,jk,jpnh4) ) 
155               zlim2  = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 )
156               zlim3  = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concfebac )
157               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) )
158               ztem2  = tsn(ji,jj,jk,jp_tem) - 10.
159               zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) 
160               zetot2 = 1. / ( 30. + etot(ji,jj,jk) ) 
161
162               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  &
163                  &                       * ztem1 / ( 0.1 + ztem1 )                     &
164                  &                       * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. )  &
165                  &                       * 2.325 * zetot1 * 30. * zetot2               &
166                  &                       * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         &
167                  &                       * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
168               xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) )
169               xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) )
170            END DO
171         END DO
172      END DO
173      !
174   END SUBROUTINE p4z_lim
175
176   SUBROUTINE p4z_lim_init
177
178      !!----------------------------------------------------------------------
179      !!                  ***  ROUTINE p4z_lim_init  ***
180      !!
181      !! ** Purpose :   Initialization of nutrient limitation parameters
182      !!
183      !! ** Method  :   Read the nampislim namelist and check the parameters
184      !!      called at the first timestep (nit000)
185      !!
186      !! ** input   :   Namelist nampislim
187      !!
188      !!----------------------------------------------------------------------
189
190      NAMELIST/nampislim/ conc0, conc1, conc2, conc2m, conc3, conc3m,   &
191         &                xsizedia, xsizephy, concnnh4, concdnh4,       &
192         &                xksi1, xksi2, xkdoc, concfebac, qnfelim, qdfelim, caco3r
193
194      REWIND( numnatp )                     ! read numnat
195      READ  ( numnatp, nampislim )
196
197      IF(lwp) THEN                         ! control print
198         WRITE(numout,*) ' '
199         WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim'
200         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
201         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r
202         WRITE(numout,*) '    NO3, PO4 half saturation                 conc0     =  ', conc0
203         WRITE(numout,*) '    half saturation constant for Si uptake   xksi1     = ', xksi1
204         WRITE(numout,*) '    half saturation constant for Si/C        xksi2     = ', xksi2
205         WRITE(numout,*) '    2nd half-sat. of DOC remineralization    xkdoc     = ', xkdoc
206         WRITE(numout,*) '    Phosphate half saturation for diatoms    conc1     = ', conc1
207         WRITE(numout,*) '    Iron half saturation for phyto           conc2     = ', conc2
208         WRITE(numout,*) '    Max iron half saturation for phyto       conc2m    = ', conc2m
209         WRITE(numout,*) '    Iron half saturation for diatoms         conc3     = ', conc3
210         WRITE(numout,*) '    Maxi iron half saturation for diatoms    conc3m    = ', conc3m
211         WRITE(numout,*) '    Minimum size criteria for diatoms        xsizedia  = ', xsizedia
212         WRITE(numout,*) '    Minimum size criteria for nanophyto      xsizephy  = ', xsizephy
213         WRITE(numout,*) '    NH4 half saturation for phyto            concnnh4  = ', concnnh4
214         WRITE(numout,*) '    NH4 half saturation for diatoms          concdnh4  = ', concdnh4
215         WRITE(numout,*) '    Fe half saturation for bacteria          concfebac = ', concfebac
216         WRITE(numout,*) '    optimal Fe quota for nano.               qnfelim   = ', qnfelim
217         WRITE(numout,*) '    Optimal Fe quota for diatoms             qdfelim   = ', qdfelim
218      ENDIF
219
220   END SUBROUTINE p4z_lim_init
221
222#else
223   !!======================================================================
224   !!  Dummy module :                                   No PISCES bio-model
225   !!======================================================================
226CONTAINS
227   SUBROUTINE p4z_lim                   ! Empty routine
228   END SUBROUTINE p4z_lim
229#endif 
230
231   !!======================================================================
232END MODULE  p4zlim
Note: See TracBrowser for help on using the repository browser.