1 | MODULE 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 "domzgr_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 | |
---|
50 | CONTAINS |
---|
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., tn(ji,jj,jk) ) |
---|
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 | !!====================================================================== |
---|
219 | CONTAINS |
---|
220 | SUBROUTINE p4z_lim ! Empty routine |
---|
221 | END SUBROUTINE p4z_lim |
---|
222 | #endif |
---|
223 | |
---|
224 | !!====================================================================== |
---|
225 | END MODULE p4zlim |
---|