C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/bling/pkg/bling_production.F,v 1.1 2014/05/23 17:33:43 mmazloff Exp $ C $Name: $ #include "BLING_OPTIONS.h" CBOP subroutine BLING_PROD( I PTR_NUT, PTR_FE, PTR_DOM, PTR_O2, O NUT_uptake, POM_prod, DOM_prod, O Fe_uptake, CaCO3_prod, I bi, bj, imin, imax, jmin, jmax, I myIter, myTime, myThid ) C ================================================================= C | subroutine bling_prod C | o Nutrient uptake and partitioning between organic pools. C | - Phytoplankton biomass-specific growth rate is calculated C | as a function of light, nutrient limitation, and C | temperature. C | - A simple relationship between growth rate, C | biomass, and uptake is derived by assuming that growth is C | exactly balanced by losses. C ================================================================= implicit none C === Global variables === C P_sm :: Small phytoplankton biomass C P_lg :: Large phytoplankton biomass C irr_mem :: Phyto irradiance memory #include "SIZE.h" #include "DYNVARS.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "BLING_VARS.h" #include "PTRACERS_SIZE.h" #include "PTRACERS_PARAMS.h" #ifdef ALLOW_AUTODIFF_TAMC # include "tamc.h" #endif C === Routine arguments === C bi,bj :: tile indices C iMin,iMax :: computation domain: 1rst index range C jMin,jMax :: computation domain: 2nd index range C myTime :: current time C myIter :: current timestep C myThid :: thread Id. number INTEGER bi, bj, imin, imax, jmin, jmax _RL myTime INTEGER myIter INTEGER myThid C === Input === C PTR_NUT :: macro-nutrient concentration C PTR_FE :: iron concentration C PTR_DOM :: dissolved organic matter concentration C PTR_O2 :: oxygen concentration _RL PTR_NUT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_FE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_DOM(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_O2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) C === Output === C DOM_prod :: production of dissolved organic matter C POM_prod :: production of particulate organic matter C Fe_uptake :: production of particulate iron C CaCO3_prod :: CaCO3 uptake for growth _RL DOM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL POM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL Fe_uptake (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL CaCO3_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) #ifdef ALLOW_BLING C === Local variables === C i,j,k :: loop indices C irr_eff :: effective irradiance C NUT_lim :: macro-nutrient limitation C FetoP_up :: ratio of iron to phosphorus uptake C Fe_lim :: iron limitation C alpha_Fe :: initial slope of the P-I curve C theta_Fe :: Chl:C ratio C theta_Fe_max :: Fe-replete maximum Chl:C ratio C irrk :: nut-limited efficiency of algal photosystems C Pc_m :: light-saturated maximal photosynthesis rate C Pc_tot :: carbon-specific photosynthesis rate C expkT :: temperature function C mu :: net carbon-specific growth rate C biomass_sm :: nutrient concentration in small phyto biomass C biomass_lg :: nutrient concentration in large phyto biomass C NUT_uptake :: nutrient uptake C C_flux :: carbon export flux 3d field C chl :: chlorophyll diagnostic INTEGER i,j,k _RL irr_eff(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL NUT_lim _RL FetoP_up _RL Fe_lim _RL alpha_Fe _RL theta_Fe _RL theta_Fe_max _RL irrk _RL Pc_m _RL Pc_tot _RL expkT _RL mu _RL biomass_sm _RL biomass_lg _RL NUT_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL C_flux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL chl(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) CEOP c --------------------------------------------------------------------- c Initialize output and diagnostics DO k=1,Nr DO j=jmin,jmax DO i=imin,imax POM_prod(i,j,k) = 0. _d 0 DOM_prod(i,j,k) = 0. _d 0 Fe_uptake(i,j,k) = 0. _d 0 CaCO3_prod(i,j,k) = 0. _d 0 C_flux(i,j,k) = 0. _d 0 chl(i,j,k) = 0. _d 0 irr_eff(i,j,k) = 0. _d 0 ENDDO ENDDO ENDDO c --------------------------------------------------------------------- c Available light CALL BLING_LIGHT( U irr_eff, I bi, bj, imin, imax, jmin, jmax, I myIter, myTime, myThid ) c --------------------------------------------------------------------- c Nutrient uptake and partitioning between organic pools DO k=1,Nr DO j=jmin,jmax DO i=imin,imax IF (hFacC(i,j,k,bi,bj) .gt. 0. _d 0) THEN #ifndef BLING_ADJOINT_SAFE #ifdef BLING_NO_NEG PTR_NUT(i,j,k) = max( 0. _d 0, PTR_NUT(i,j,k) ) PTR_FE(i,j,k) = max( 0. _d 0, PTR_FE(i,j,k) ) #endif #endif c --------------------------------------------------------------------- c First, calculate the limitation terms for NUT and Fe, and the c Fe-limited Chl:C maximum. The light-saturated maximal photosynthesis c rate term (Pc_m) is simply the product of a prescribed maximal c photosynthesis rate (Pc_0), the Eppley temperature dependence, and a c resource limitation term. The iron limitation term has a lower limit c of Fe_lim_min and is scaled by (k_Fe2P + Fe2P_max) / Fe2P_max so that c it approaches 1 as Fe approaches infinity. Thus, it is of comparable c magnitude to the macro-nutrient limitation term. c Macro-nutrient limitation NUT_lim = PTR_NUT(i,j,k)/(PTR_NUT(i,j,k)+k_NUT) c Iron to macro-nutrient uptake. More iron is utilized relative c to macro-nutrient under iron-replete conditions. FetoP_up = FetoP_max*PTR_FE(i,j,k)/(k_Fe+PTR_FE(i,j,k)) c Iron limitation Fe_lim = Fe_lim_min + (1-Fe_lim_min)*(FetoP_up/(k_FetoP & + FetoP_up))*(k_FetoP+FetoP_max)/FetoP_max c --------------------------------------------------------------------- c For the effective resource limitation, there is an option to replace c the default Liebig limitation (the minimum of Michaelis-Menton c NUT-limitation, or iron-limitation) by the product (safer for adjoint) c Light-saturated maximal photosynthesis rate #ifdef MULT_NUT_LIM Pc_m = Pc_0*exp(kappa_eppley*theta(i,j,k,bi,bj)) & *NUT_lim*Fe_lim*maskC(i,j,k,bi,bj) #else Pc_m = Pc_0*exp(kappa_eppley*theta(i,j,k,bi,bj)) & *min( NUT_lim, Fe_lim )*maskC(i,j,k,bi,bj) #endif c --------------------------------------------------------------------- c Fe limitation 1) reduces photosynthetic efficiency (alpha_Fe) c and 2) reduces the maximum achievable Chl:C ratio (theta_Fe) c below a prescribed, Fe-replete maximum value (theta_Fe_max), c to approach a prescribed minimum Chl:C (theta_Fe_min) under extreme c Fe-limitation. alpha_Fe = alpha_min + (alpha_max-alpha_min)*Fe_lim theta_Fe_max = theta_Fe_max_lo+ & (theta_Fe_max_hi-theta_Fe_max_lo)*Fe_lim theta_Fe = theta_Fe_max/(1. _d 0 + alpha_Fe*theta_Fe_max & *irr_mem(i,j,k,bi,bj)/(2. _d 0*Pc_m)) c --------------------------------------------------------------------- c Nutrient-limited efficiency of algal photosystems, irrk, is calculated c with the iron limitation term included as a multiplier of the c theta_Fe_max to represent the importance of Fe in forming chlorophyll c accessory antennae, which do not affect the Chl:C but still affect the c phytoplankton ability to use light (eg Stzrepek & Harrison, Nature 2004). irrk = Pc_m/(alpha_Fe*theta_Fe_max) + & irr_mem(i,j,k,bi,bj)/2. _d 0 c Carbon-specific photosynthesis rate Pc_tot = Pc_m * ( 1. _d 0 - exp(-irr_eff(i,j,k) & /(epsln + irrk))) c --------------------------------------------------------------------- c Account for the maintenance effort that phytoplankton must exert in c order to combat decay. This is prescribed as a fraction of the c light-saturated photosynthesis rate, resp_frac. The result of this c is to set a level of energy availability below which net growth c (and therefore nutrient uptake) is zero, given by resp_frac * Pc_m. mu = max(0., Pc_tot - resp_frac*Pc_m) c --------------------------------------------------------------------- c Since there is no explicit biomass tracer, use the result of Dunne c et al. (GBC, 2005) to calculate an implicit biomass from the uptake c rate through the application of a simple idealized grazing law. c instantaneous nutrient concentration in phyto biomass biomass_lg = Pstar*(mu/(lambda_0 & *exp(kappa_eppley*theta(i,j,k,bi,bj))))**3 biomass_sm = Pstar*(mu/(lambda_0 & *exp(kappa_eppley*theta(i,j,k,bi,bj)))) c phytoplankton biomass diagnostic c for no lag: set gamma_biomass to 0 P_sm(i,j,k,bi,bj) = P_sm(i,j,k,bi,bj) + & (biomass_sm - P_sm(i,j,k,bi,bj)) & *min(1., gamma_biomass*PTRACERS_dTLev(k)) P_lg(i,j,k,bi,bj) = P_lg(i,j,k,bi,bj) + & (biomass_lg - P_lg(i,j,k,bi,bj)) & *min(1., gamma_biomass*PTRACERS_dTLev(k)) c use the diagnostic biomass to calculate the chl concentration chl(i,j,k) = (P_lg(i,j,k,bi,bj)+P_sm(i,j,k,bi,bj)) & *CtoP/NUTfac*theta_Fe*12.01 c Nutrient uptake NUT_uptake(i,j,k) = mu*(P_sm(i,j,k,bi,bj) & + P_lg(i,j,k,bi,bj)) c --------------------------------------------------------------------- c Partitioning between organic pools c The uptake of nutrients is assumed to contribute to the growth of c phytoplankton, which subsequently die and are consumed by heterotrophs. c This can involve the transfer of nutrient elements between many c organic pools, both particulate and dissolved, with complex histories. c We take a simple approach here, partitioning the total uptake into two c fractions - sinking and non-sinking - as a function of temperature, c following Dunne et al. (2005). c Then, the non-sinking fraction is further subdivided, such that the c majority is recycled instantaneously to the inorganic nutrient pool, c representing the fast turnover of labile dissolved organic matter via c the microbial loop, and the remainder is converted to semi-labile c dissolved organic matter. Iron and macro-nutrient are treated c identically for the first step, but all iron is recycled c instantaneously in the second step (i.e. there is no dissolved organic c iron pool). c sinking fraction: particulate organic matter expkT = exp(-kappa_remin*theta(i,j,k,bi,bj)) POM_prod(i,j,k) = phi_sm*expkT*mu*P_sm(i,j,k,bi,bj) & + phi_lg*expkT*mu*P_lg(i,j,k,bi,bj) c the remainder is divided between instantaneously recycled and c long-lived dissolved organic matter. c (recycling = NUT_uptake - NUT_to_POM - NUT_to_DOM) DOM_prod(i,j,k) = phi_DOM*(NUT_uptake(i,j,k) & - POM_prod(i,j,k)) c Carbon flux diagnostic C_flux(i,j,k) = CtoP/NUTfac*POM_prod(i,j,k) c Iron is then taken up as a function of nutrient uptake and iron c limitation, with a maximum Fe:P uptake ratio of Fe2p_max Fe_uptake(i,j,k) = POM_prod(i,j,k)*FetoP_up/NUTfac c --------------------------------------------------------------------- c Alkalinity is consumed through the production of CaCO3. Here, this is c simply a linear function of the implied growth rate of small c phytoplankton, which gave a reasonably good fit to the global c observational synthesis of Dunne (2009). This is consistent c with the findings of Jin et al. (GBC,2006). CaCO3_prod(i,j,k) = P_sm(i,j,k,bi,bj)*phi_sm*expkT & *mu*CatoP/NUTfac ENDIF ENDDO ENDDO ENDDO c --------------------------------------------------------------------- #ifdef ALLOW_DIAGNOSTICS IF ( useDiagnostics ) THEN CALL DIAGNOSTICS_FILL(C_flux ,'BLGCflux',0,Nr,2,bi,bj,myThid) CALL DIAGNOSTICS_FILL(P_sm*CtoP/NUTfac & ,'BLGPsm ',0,Nr,1,bi,bj,myThid) CALL DIAGNOSTICS_FILL(P_lg*CtoP/NUTfac & ,'BLGPlg ',0,Nr,1,bi,bj,myThid) CALL DIAGNOSTICS_FILL(chl ,'BLGchl ',0,Nr,2,bi,bj,myThid) ENDIF #endif /* ALLOW_DIAGNOSTICS */ #endif /* ALLOW_BLING */ RETURN END