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_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zlim.F90 @ 2819

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

Improvment of branch dev_r2787_LOCEAN3_TRA_TRP

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