1 |
mmazloff |
1.1 |
C $Header: $ |
2 |
|
|
C $Name: $ |
3 |
|
|
|
4 |
|
|
#include "BLING_OPTIONS.h" |
5 |
|
|
|
6 |
|
|
CBOP |
7 |
|
|
subroutine BLING_PROD( |
8 |
|
|
I PTR_NUT, PTR_FE, PTR_DOM, PTR_O2, |
9 |
|
|
O NUT_uptake, POM_prod, DOM_prod, |
10 |
|
|
O Fe_uptake, CaCO3_prod, |
11 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
12 |
|
|
I myIter, myTime, myThid ) |
13 |
|
|
|
14 |
|
|
C ================================================================= |
15 |
|
|
C | subroutine bling_prod |
16 |
|
|
C | o Nutrient uptake and partitioning between organic pools. |
17 |
|
|
C | - Phytoplankton biomass-specific growth rate is calculated |
18 |
|
|
C | as a function of light, nutrient limitation, and |
19 |
|
|
C | temperature. |
20 |
|
|
C | - A simple relationship between growth rate, |
21 |
|
|
C | biomass, and uptake is derived by assuming that growth is |
22 |
|
|
C | exactly balanced by losses. |
23 |
|
|
C ================================================================= |
24 |
|
|
|
25 |
|
|
implicit none |
26 |
|
|
|
27 |
|
|
C === Global variables === |
28 |
|
|
C P_sm :: Small phytoplankton biomass |
29 |
|
|
C P_lg :: Large phytoplankton biomass |
30 |
|
|
C irr_mem :: Phyto irradiance memory |
31 |
|
|
|
32 |
|
|
#include "SIZE.h" |
33 |
|
|
#include "DYNVARS.h" |
34 |
|
|
#include "EEPARAMS.h" |
35 |
|
|
#include "PARAMS.h" |
36 |
|
|
#include "GRID.h" |
37 |
|
|
#include "BLING_VARS.h" |
38 |
|
|
#include "PTRACERS_SIZE.h" |
39 |
|
|
#include "PTRACERS_PARAMS.h" |
40 |
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
41 |
|
|
# include "tamc.h" |
42 |
|
|
#endif |
43 |
|
|
|
44 |
|
|
C === Routine arguments === |
45 |
|
|
C bi,bj :: tile indices |
46 |
|
|
C iMin,iMax :: computation domain: 1rst index range |
47 |
|
|
C jMin,jMax :: computation domain: 2nd index range |
48 |
|
|
C myTime :: current time |
49 |
|
|
C myIter :: current timestep |
50 |
|
|
C myThid :: thread Id. number |
51 |
|
|
INTEGER bi, bj, imin, imax, jmin, jmax |
52 |
|
|
_RL myTime |
53 |
|
|
INTEGER myIter |
54 |
|
|
INTEGER myThid |
55 |
|
|
C === Input === |
56 |
|
|
C PTR_NUT :: macro-nutrient concentration |
57 |
|
|
C PTR_FE :: iron concentration |
58 |
|
|
C PTR_DOM :: dissolved organic matter concentration |
59 |
|
|
C PTR_O2 :: oxygen concentration |
60 |
|
|
_RL PTR_NUT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
61 |
|
|
_RL PTR_FE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
62 |
|
|
_RL PTR_DOM(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
63 |
|
|
_RL PTR_O2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
64 |
|
|
C === Output === |
65 |
|
|
C DOM_prod :: production of dissolved organic matter |
66 |
|
|
C POM_prod :: production of particulate organic matter |
67 |
|
|
C Fe_uptake :: production of particulate iron |
68 |
|
|
C CaCO3_prod :: CaCO3 uptake for growth |
69 |
|
|
_RL DOM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
70 |
|
|
_RL POM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
71 |
|
|
_RL Fe_uptake (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
72 |
|
|
_RL CaCO3_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
73 |
|
|
|
74 |
|
|
#ifdef ALLOW_BLING |
75 |
|
|
C === Local variables === |
76 |
|
|
C i,j,k :: loop indices |
77 |
|
|
C irr_eff :: effective irradiance |
78 |
|
|
C NUT_lim :: macro-nutrient limitation |
79 |
|
|
C FetoP_up :: ratio of iron to phosphorus uptake |
80 |
|
|
C Fe_lim :: iron limitation |
81 |
|
|
C alpha_Fe :: initial slope of the P-I curve |
82 |
|
|
C theta_Fe :: Chl:C ratio |
83 |
|
|
C theta_Fe_max :: Fe-replete maximum Chl:C ratio |
84 |
|
|
C irrk :: nut-limited efficiency of algal photosystems |
85 |
|
|
C Pc_m :: light-saturated maximal photosynthesis rate |
86 |
|
|
C Pc_tot :: carbon-specific photosynthesis rate |
87 |
|
|
C expkT :: temperature function |
88 |
|
|
C mu :: net carbon-specific growth rate |
89 |
|
|
C biomass_sm :: nutrient concentration in small phyto biomass |
90 |
|
|
C biomass_lg :: nutrient concentration in large phyto biomass |
91 |
|
|
C NUT_uptake :: nutrient uptake |
92 |
|
|
C C_flux :: carbon export flux 3d field |
93 |
|
|
C chl :: chlorophyll diagnostic |
94 |
|
|
INTEGER i,j,k |
95 |
|
|
_RL irr_eff(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
96 |
|
|
_RL NUT_lim |
97 |
|
|
_RL FetoP_up |
98 |
|
|
_RL Fe_lim |
99 |
|
|
_RL alpha_Fe |
100 |
|
|
_RL theta_Fe |
101 |
|
|
_RL theta_Fe_max |
102 |
|
|
_RL irrk |
103 |
|
|
_RL Pc_m |
104 |
|
|
_RL Pc_tot |
105 |
|
|
_RL expkT |
106 |
|
|
_RL mu |
107 |
|
|
_RL biomass_sm |
108 |
|
|
_RL biomass_lg |
109 |
|
|
_RL NUT_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
110 |
|
|
_RL C_flux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
111 |
|
|
_RL chl(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
112 |
|
|
CEOP |
113 |
|
|
|
114 |
|
|
c --------------------------------------------------------------------- |
115 |
|
|
c Initialize output and diagnostics |
116 |
|
|
DO k=1,Nr |
117 |
|
|
DO j=jmin,jmax |
118 |
|
|
DO i=imin,imax |
119 |
|
|
POM_prod(i,j,k) = 0. _d 0 |
120 |
|
|
DOM_prod(i,j,k) = 0. _d 0 |
121 |
|
|
Fe_uptake(i,j,k) = 0. _d 0 |
122 |
|
|
CaCO3_prod(i,j,k) = 0. _d 0 |
123 |
|
|
C_flux(i,j,k) = 0. _d 0 |
124 |
|
|
chl(i,j,k) = 0. _d 0 |
125 |
|
|
irr_eff(i,j,k) = 0. _d 0 |
126 |
|
|
ENDDO |
127 |
|
|
ENDDO |
128 |
|
|
ENDDO |
129 |
|
|
|
130 |
|
|
c --------------------------------------------------------------------- |
131 |
|
|
c Available light |
132 |
|
|
CALL BLING_LIGHT( |
133 |
|
|
U irr_eff, |
134 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
135 |
|
|
I myIter, myTime, myThid ) |
136 |
|
|
|
137 |
|
|
c --------------------------------------------------------------------- |
138 |
|
|
c Nutrient uptake and partitioning between organic pools |
139 |
|
|
|
140 |
|
|
DO k=1,Nr |
141 |
|
|
DO j=jmin,jmax |
142 |
|
|
DO i=imin,imax |
143 |
|
|
|
144 |
|
|
IF (hFacC(i,j,k,bi,bj) .gt. 0. _d 0) THEN |
145 |
|
|
|
146 |
|
|
#ifndef BLING_ADJOINT_SAFE |
147 |
|
|
#ifdef BLING_NO_NEG |
148 |
|
|
PTR_NUT(i,j,k) = max( 0. _d 0, PTR_NUT(i,j,k) ) |
149 |
|
|
PTR_FE(i,j,k) = max( 0. _d 0, PTR_FE(i,j,k) ) |
150 |
|
|
#endif |
151 |
|
|
#endif |
152 |
|
|
|
153 |
|
|
c --------------------------------------------------------------------- |
154 |
|
|
c First, calculate the limitation terms for NUT and Fe, and the |
155 |
|
|
c Fe-limited Chl:C maximum. The light-saturated maximal photosynthesis |
156 |
|
|
c rate term (Pc_m) is simply the product of a prescribed maximal |
157 |
|
|
c photosynthesis rate (Pc_0), the Eppley temperature dependence, and a |
158 |
|
|
c resource limitation term. The iron limitation term has a lower limit |
159 |
|
|
c of Fe_lim_min and is scaled by (k_Fe2P + Fe2P_max) / Fe2P_max so that |
160 |
|
|
c it approaches 1 as Fe approaches infinity. Thus, it is of comparable |
161 |
|
|
c magnitude to the macro-nutrient limitation term. |
162 |
|
|
|
163 |
|
|
c Macro-nutrient limitation |
164 |
|
|
NUT_lim = PTR_NUT(i,j,k)/(PTR_NUT(i,j,k)+k_NUT) |
165 |
|
|
|
166 |
|
|
c Iron to macro-nutrient uptake. More iron is utilized relative |
167 |
|
|
c to macro-nutrient under iron-replete conditions. |
168 |
|
|
FetoP_up = FetoP_max*PTR_FE(i,j,k)/(k_Fe+PTR_FE(i,j,k)) |
169 |
|
|
|
170 |
|
|
c Iron limitation |
171 |
|
|
Fe_lim = Fe_lim_min + (1-Fe_lim_min)*(FetoP_up/(k_FetoP |
172 |
|
|
& + FetoP_up))*(k_FetoP+FetoP_max)/FetoP_max |
173 |
|
|
|
174 |
|
|
c --------------------------------------------------------------------- |
175 |
|
|
c For the effective resource limitation, there is an option to replace |
176 |
|
|
c the default Liebig limitation (the minimum of Michaelis-Menton |
177 |
|
|
c NUT-limitation, or iron-limitation) by the product (safer for adjoint) |
178 |
|
|
|
179 |
|
|
c Light-saturated maximal photosynthesis rate |
180 |
|
|
#ifdef MULT_NUT_LIM |
181 |
|
|
Pc_m = Pc_0*exp(kappa_eppley*theta(i,j,k,bi,bj)) |
182 |
|
|
& *NUT_lim*Fe_lim*maskC(i,j,k,bi,bj) |
183 |
|
|
#else |
184 |
|
|
Pc_m = Pc_0*exp(kappa_eppley*theta(i,j,k,bi,bj)) |
185 |
|
|
& *min( NUT_lim, Fe_lim )*maskC(i,j,k,bi,bj) |
186 |
|
|
#endif |
187 |
|
|
|
188 |
|
|
|
189 |
|
|
c --------------------------------------------------------------------- |
190 |
|
|
c Fe limitation 1) reduces photosynthetic efficiency (alpha_Fe) |
191 |
|
|
c and 2) reduces the maximum achievable Chl:C ratio (theta_Fe) |
192 |
|
|
c below a prescribed, Fe-replete maximum value (theta_Fe_max), |
193 |
|
|
c to approach a prescribed minimum Chl:C (theta_Fe_min) under extreme |
194 |
|
|
c Fe-limitation. |
195 |
|
|
|
196 |
|
|
alpha_Fe = alpha_min + (alpha_max-alpha_min)*Fe_lim |
197 |
|
|
theta_Fe_max = theta_Fe_max_lo+ |
198 |
|
|
& (theta_Fe_max_hi-theta_Fe_max_lo)*Fe_lim |
199 |
|
|
theta_Fe = theta_Fe_max/(1. _d 0 + alpha_Fe*theta_Fe_max |
200 |
|
|
& *irr_mem(i,j,k,bi,bj)/(2. _d 0*Pc_m)) |
201 |
|
|
|
202 |
|
|
c --------------------------------------------------------------------- |
203 |
|
|
c Nutrient-limited efficiency of algal photosystems, irrk, is calculated |
204 |
|
|
c with the iron limitation term included as a multiplier of the |
205 |
|
|
c theta_Fe_max to represent the importance of Fe in forming chlorophyll |
206 |
|
|
c accessory antennae, which do not affect the Chl:C but still affect the |
207 |
|
|
c phytoplankton ability to use light (eg Stzrepek & Harrison, Nature 2004). |
208 |
|
|
|
209 |
|
|
irrk = Pc_m/(alpha_Fe*theta_Fe_max) + |
210 |
|
|
& irr_mem(i,j,k,bi,bj)/2. _d 0 |
211 |
|
|
|
212 |
|
|
c Carbon-specific photosynthesis rate |
213 |
|
|
Pc_tot = Pc_m * ( 1. _d 0 - exp(-irr_eff(i,j,k) |
214 |
|
|
& /(epsln + irrk))) |
215 |
|
|
|
216 |
|
|
c --------------------------------------------------------------------- |
217 |
|
|
c Account for the maintenance effort that phytoplankton must exert in |
218 |
|
|
c order to combat decay. This is prescribed as a fraction of the |
219 |
|
|
c light-saturated photosynthesis rate, resp_frac. The result of this |
220 |
|
|
c is to set a level of energy availability below which net growth |
221 |
|
|
c (and therefore nutrient uptake) is zero, given by resp_frac * Pc_m. |
222 |
|
|
|
223 |
|
|
mu = max(0., Pc_tot - resp_frac*Pc_m) |
224 |
|
|
|
225 |
|
|
c --------------------------------------------------------------------- |
226 |
|
|
c Since there is no explicit biomass tracer, use the result of Dunne |
227 |
|
|
c et al. (GBC, 2005) to calculate an implicit biomass from the uptake |
228 |
|
|
c rate through the application of a simple idealized grazing law. |
229 |
|
|
|
230 |
|
|
c instantaneous nutrient concentration in phyto biomass |
231 |
|
|
biomass_lg = Pstar*(mu/(lambda_0 |
232 |
|
|
& *exp(kappa_eppley*theta(i,j,k,bi,bj))))**3 |
233 |
|
|
biomass_sm = Pstar*(mu/(lambda_0 |
234 |
|
|
& *exp(kappa_eppley*theta(i,j,k,bi,bj)))) |
235 |
|
|
|
236 |
|
|
c phytoplankton biomass diagnostic |
237 |
|
|
c for no lag: set gamma_biomass to 0 |
238 |
|
|
P_sm(i,j,k,bi,bj) = P_sm(i,j,k,bi,bj) + |
239 |
|
|
& (biomass_sm - P_sm(i,j,k,bi,bj)) |
240 |
|
|
& *min(1., gamma_biomass*PTRACERS_dTLev(k)) |
241 |
|
|
P_lg(i,j,k,bi,bj) = P_lg(i,j,k,bi,bj) + |
242 |
|
|
& (biomass_lg - P_lg(i,j,k,bi,bj)) |
243 |
|
|
& *min(1., gamma_biomass*PTRACERS_dTLev(k)) |
244 |
|
|
|
245 |
|
|
c use the diagnostic biomass to calculate the chl concentration |
246 |
|
|
chl(i,j,k) = (P_lg(i,j,k,bi,bj)+P_sm(i,j,k,bi,bj)) |
247 |
|
|
& *CtoP/NUTfac*theta_Fe*12.01 |
248 |
|
|
|
249 |
|
|
c Nutrient uptake |
250 |
|
|
NUT_uptake(i,j,k) = mu*(P_sm(i,j,k,bi,bj) |
251 |
|
|
& + P_lg(i,j,k,bi,bj)) |
252 |
|
|
|
253 |
|
|
c --------------------------------------------------------------------- |
254 |
|
|
c Partitioning between organic pools |
255 |
|
|
|
256 |
|
|
c The uptake of nutrients is assumed to contribute to the growth of |
257 |
|
|
c phytoplankton, which subsequently die and are consumed by heterotrophs. |
258 |
|
|
c This can involve the transfer of nutrient elements between many |
259 |
|
|
c organic pools, both particulate and dissolved, with complex histories. |
260 |
|
|
c We take a simple approach here, partitioning the total uptake into two |
261 |
|
|
c fractions - sinking and non-sinking - as a function of temperature, |
262 |
|
|
c following Dunne et al. (2005). |
263 |
|
|
c Then, the non-sinking fraction is further subdivided, such that the |
264 |
|
|
c majority is recycled instantaneously to the inorganic nutrient pool, |
265 |
|
|
c representing the fast turnover of labile dissolved organic matter via |
266 |
|
|
c the microbial loop, and the remainder is converted to semi-labile |
267 |
|
|
c dissolved organic matter. Iron and macro-nutrient are treated |
268 |
|
|
c identically for the first step, but all iron is recycled |
269 |
|
|
c instantaneously in the second step (i.e. there is no dissolved organic |
270 |
|
|
c iron pool). |
271 |
|
|
|
272 |
|
|
c sinking fraction: particulate organic matter |
273 |
|
|
expkT = exp(-kappa_remin*theta(i,j,k,bi,bj)) |
274 |
|
|
POM_prod(i,j,k) = phi_sm*expkT*mu*P_sm(i,j,k,bi,bj) |
275 |
|
|
& + phi_lg*expkT*mu*P_lg(i,j,k,bi,bj) |
276 |
|
|
|
277 |
|
|
c the remainder is divided between instantaneously recycled and |
278 |
|
|
c long-lived dissolved organic matter. |
279 |
|
|
c (recycling = NUT_uptake - NUT_to_POM - NUT_to_DOM) |
280 |
|
|
|
281 |
|
|
DOM_prod(i,j,k) = phi_DOM*(NUT_uptake(i,j,k) |
282 |
|
|
& - POM_prod(i,j,k)) |
283 |
|
|
|
284 |
|
|
c Carbon flux diagnostic |
285 |
|
|
C_flux(i,j,k) = CtoP/NUTfac*POM_prod(i,j,k) |
286 |
|
|
|
287 |
|
|
c Iron is then taken up as a function of nutrient uptake and iron |
288 |
|
|
c limitation, with a maximum Fe:P uptake ratio of Fe2p_max |
289 |
|
|
Fe_uptake(i,j,k) = POM_prod(i,j,k)*FetoP_up/NUTfac |
290 |
|
|
|
291 |
|
|
c --------------------------------------------------------------------- |
292 |
|
|
c Alkalinity is consumed through the production of CaCO3. Here, this is |
293 |
|
|
c simply a linear function of the implied growth rate of small |
294 |
|
|
c phytoplankton, which gave a reasonably good fit to the global |
295 |
|
|
c observational synthesis of Dunne (2009). This is consistent |
296 |
|
|
c with the findings of Jin et al. (GBC,2006). |
297 |
|
|
|
298 |
|
|
CaCO3_prod(i,j,k) = P_sm(i,j,k,bi,bj)*phi_sm*expkT |
299 |
|
|
& *mu*CatoP/NUTfac |
300 |
|
|
|
301 |
|
|
ENDIF |
302 |
|
|
ENDDO |
303 |
|
|
ENDDO |
304 |
|
|
ENDDO |
305 |
|
|
|
306 |
|
|
c --------------------------------------------------------------------- |
307 |
|
|
|
308 |
|
|
#ifdef ALLOW_DIAGNOSTICS |
309 |
|
|
IF ( useDiagnostics ) THEN |
310 |
|
|
CALL DIAGNOSTICS_FILL(C_flux ,'BLGCflux',0,Nr,2,bi,bj,myThid) |
311 |
|
|
CALL DIAGNOSTICS_FILL(P_sm*CtoP/NUTfac |
312 |
|
|
& ,'BLGPsm ',0,Nr,1,bi,bj,myThid) |
313 |
|
|
CALL DIAGNOSTICS_FILL(P_lg*CtoP/NUTfac |
314 |
|
|
& ,'BLGPlg ',0,Nr,1,bi,bj,myThid) |
315 |
|
|
CALL DIAGNOSTICS_FILL(chl ,'BLGchl ',0,Nr,2,bi,bj,myThid) |
316 |
|
|
ENDIF |
317 |
|
|
#endif /* ALLOW_DIAGNOSTICS */ |
318 |
|
|
|
319 |
|
|
#endif /* ALLOW_BLING */ |
320 |
|
|
|
321 |
|
|
RETURN |
322 |
|
|
END |
323 |
|
|
|