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

source: trunk/NEMO/TOP_SRC/PISCES/p4zlim.F90 @ 935

Last change on this file since 935 was 935, checked in by cetlod, 16 years ago

adding modules for PISCES SMS model, see ticket 141

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