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

source: branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/PISCES/p4zlim.F90 @ 2082

Last change on this file since 2082 was 2082, checked in by cetlod, 14 years ago

Improve the merge of TRA-TRC, see ticket #717

  • 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 trc
17   USE oce_trc         !
18   USE trc         !
19   USE sms_pisces      !
20
21   IMPLICIT NONE
22   PRIVATE
23
24   PUBLIC p4z_lim   
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 2.0 , LOCEAN-IPSL (2007)
46   !! $Id$
47   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
48   !!----------------------------------------------------------------------
49
50CONTAINS
51
52   SUBROUTINE p4z_lim( kt, jnt )
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, jnt ! ocean time step
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      IF( ( kt * jnt ) == nittrc000  )   CALL p4z_lim_init      ! Initialization (first time-step only)
70
71
72!  Tuning of the iron concentration to a minimum
73!  level that is set to the detection limit
74!  -------------------------------------
75
76      DO jk = 1, jpkm1
77         DO jj = 1, jpj
78            DO ji = 1, jpi
79               zno3=trn(ji,jj,jk,jpno3)
80               zferlim = MAX( 1.5e-11*(zno3/40E-6)**2, 3e-12 )
81               zferlim = MIN( zferlim, 1.5e-11 )
82               trn(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )
83            END DO
84         END DO
85      END DO
86
87!  Computation of a variable Ks for iron on diatoms
88!  taking into account that increasing biomass is
89!  made of generally bigger cells
90!  ------------------------------------------------
91
92      DO jk = 1, jpkm1
93         DO jj = 1, jpj
94            DO ji = 1, jpi
95               zconctemp   = MAX( 0.e0 , trn(ji,jj,jk,jpdia)-5e-7 )
96               zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp
97               zconctempn  = MAX( 0.e0 , trn(ji,jj,jk,jpphy)-1e-6 )
98               zconctempn2 = trn(ji,jj,jk,jpphy) - zconctempn
99               concdfe(ji,jj,jk) = ( zconctemp2 * conc3 + conc3m * zconctemp)   &
100                  &              / ( trn(ji,jj,jk,jpdia) + rtrn )
101               concdfe(ji,jj,jk) = MAX( conc3, concdfe(ji,jj,jk) )
102               concnfe(ji,jj,jk) = ( zconctempn2 * conc2 + conc2m * zconctempn)   &
103                  &              / ( trn(ji,jj,jk,jpphy) + rtrn )
104               concnfe(ji,jj,jk) = MAX( conc2, concnfe(ji,jj,jk) )
105            END DO
106         END DO
107      END DO
108
109      DO jk = 1, jpkm1
110         DO jj = 1, jpj
111            DO ji = 1, jpi
112   
113!      Michaelis-Menten Limitation term for nutrients
114!      Small flagellates
115!      -----------------------------------------------
116              zdenom = 1. / &
117                  & ( conc0 * concnnh4 + concnnh4 * trn(ji,jj,jk,jpno3) + conc0 * trn(ji,jj,jk,jpnh4) )
118               xnanono3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concnnh4 * zdenom
119               xnanonh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc0    * zdenom
120
121               zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk)
122               zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4          ) 
123               zlim3 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concnfe(ji,jj,jk) )
124               xlimphy(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 )
125               zlim1 = trn(ji,jj,jk,jpnh4) / ( concnnh4 + trn(ji,jj,jk,jpnh4) )
126               zlim3 = trn(ji,jj,jk,jpfer) / ( conc2    + trn(ji,jj,jk,jpfer) )
127               zlim4 = trn(ji,jj,jk,jpdoc) / ( xkdoc   + trn(ji,jj,jk,jpdoc) )
128               xlimbac(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4
129
130            END DO
131         END DO
132      END DO
133
134      DO jk = 1, jpkm1
135         DO jj = 1, jpj
136            DO ji = 1, jpi
137
138!   Michaelis-Menten Limitation term for nutrients Diatoms
139!   ----------------------------------------------
140              zdenom = 1. / &
141                  & ( conc1 * concdnh4 + concdnh4 * trn(ji,jj,jk,jpno3) + conc1 * trn(ji,jj,jk,jpnh4) )
142
143               xdiatno3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * concdnh4 * zdenom
144               xdiatnh4(ji,jj,jk) = trn(ji,jj,jk,jpnh4) * conc1    * zdenom 
145
146               zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk)
147               zlim2 = trn(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concdnh4          )
148               zlim3 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi   (ji,jj)    )
149               zlim4 = trn(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + concdfe(ji,jj,jk) )
150               xlimdia(ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 )
151
152            END DO
153         END DO
154      END DO
155
156
157      ! Compute the fraction of nanophytoplankton that is made of calcifiers
158      ! --------------------------------------------------------------------
159
160      DO jk = 1, jpkm1
161         DO jj = 1, jpj
162            DO ji = 1, jpi
163               ztemp = MAX( 0., tsn(ji,jj,jk,jp_tem) )
164               xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)   &
165                  &                       * MAX( 0.0001, ztemp / ( 2.+ ztemp ) )   &
166                  &                       * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. )
167               xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) )
168               xfracal(ji,jj,jk) = MAX( 0.01, xfracal(ji,jj,jk) )
169            END DO
170         END DO
171      END DO
172      !
173   END SUBROUTINE p4z_lim
174
175   SUBROUTINE p4z_lim_init
176
177      !!----------------------------------------------------------------------
178      !!                  ***  ROUTINE p4z_lim_init  ***
179      !!
180      !! ** Purpose :   Initialization of nutrient limitation parameters
181      !!
182      !! ** Method  :   Read the nampislim namelist and check the parameters
183      !!      called at the first timestep (nittrc000)
184      !!
185      !! ** input   :   Namelist nampislim
186      !!
187      !!----------------------------------------------------------------------
188
189      NAMELIST/nampislim/ conc0, conc1, conc2, conc2m, conc3, conc3m,   &
190         &             concnnh4, concdnh4, xksi1, xksi2, xkdoc, caco3r
191
192      REWIND( numnat )                     ! read numnat
193      READ  ( numnat, nampislim )
194
195      IF(lwp) THEN                         ! control print
196         WRITE(numout,*) ' '
197         WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim'
198         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
199         WRITE(numout,*) '    mean rainratio                            caco3r    =', caco3r
200         WRITE(numout,*) '    NO3, PO4 half saturation                  conc0      =', conc0
201         WRITE(numout,*) '    half saturation constant for Si uptake    xksi1     =', xksi1
202         WRITE(numout,*) '    half saturation constant for Si/C         xksi2     =', xksi2
203         WRITE(numout,*) '    2nd half-sat. of DOC remineralization     xkdoc    =', xkdoc
204         WRITE(numout,*) '    Phosphate half saturation for diatoms     conc1     =', conc1
205         WRITE(numout,*) '    Iron half saturation for phyto            conc2     =', conc2
206         WRITE(numout,*) '    Max iron half saturation for phyto        conc2m    =', conc2m
207         WRITE(numout,*) '    Iron half saturation for diatoms          conc3     =', conc3
208         WRITE(numout,*) '    Maxi iron half saturation for diatoms     conc3m    =', conc3m
209         WRITE(numout,*) '    NH4 half saturation for phyto             concnnh4  =', concnnh4
210         WRITE(numout,*) '    NH4 half saturation for diatoms           concdnh4  =', concdnh4
211      ENDIF
212
213   END SUBROUTINE p4z_lim_init
214
215#else
216   !!======================================================================
217   !!  Dummy module :                                   No PISCES bio-model
218   !!======================================================================
219CONTAINS
220   SUBROUTINE p4z_lim                   ! Empty routine
221   END SUBROUTINE p4z_lim
222#endif 
223
224   !!======================================================================
225END MODULE  p4zlim
Note: See TracBrowser for help on using the repository browser.