LunaMod Module


!DESCRIPTION: Calculates the photosynthetic capacities based on a prescribed leaf nitrogen content, using the LUNA model, developed by Chonggang Xu, Ashehad Ali and Rosie Fisher Currently only works for C3 plants. See Xu et al 2012; Ali et al 2015a. Ecological Applications. http://dx.doi.org/10.1890/14-2111.1. and Ali et al 2015b.In Review. !USES:


Read in LUNA namelist


this subroutine updates the photosynthetic capacity as determined by Vcmax25 and Jmax25


Use the LUNA model to calculate the Nitrogen partioning


calcualte the nitrogen investment for electron transport, carb10oxylation, respiration given a specified value of nitrogen allocation in light capture [Nlc]. This equation are based on Ali et al 2015b.


Calculate the photosynthesis by solving the following 3 equations for 3 unknowns (A, gs, Ci): Farquahr's non-linear equation (A versus Ci), Ball-Berry equation (gs versus A) and the diffusion equation (A = gs * (Ca - Ci). The approach taken is the following; Solve the 3 equations for two phases. First phase is where Rubisco is limiting (Wc <= Wj) and second phase is where light is limiting (Wj > Wc).


Calculate the reference nitrogen use effieciency dependence on CO2 and leaf temperature


Calculate the Nitrogen use effieciency dependence on CO2 and leaf temperature


Calculate the temperature response for Vcmax; assuming temperature acclimation as in CLM4.5, based on Kattge and Knorr 2007


Calculate the temperature response for Jmax; assuming temperature acclimation as in CLM4.5, based on Kattge and Knorr 2007


Calculate the temperature response for Vcmax; without assuming temperature acclimation and following Leunning 2002 Plant, Cell & Environment


Calculate the temperature response for Jmax; without assuming temperature acclimation and following Leunning 2002 Plant, Cell & Environment


Calculate the temperature response for respiration, following Bernacchi PCE 2001


Calculate the soultion using the quadratic formula



Variables

Type Visibility Attributes Name Initial
real(kind=r8), public, parameter :: Cv = 1.2e-5_r8*3600.0
real(kind=r8), public, parameter :: Kc25 = 40.49_r8
real(kind=r8), public, parameter :: Ko25 = 27840_r8
real(kind=r8), public, parameter :: Cp25 = 4.275_r8
real(kind=r8), public, parameter :: Fc25 = 294.2_r8
real(kind=r8), public, parameter :: Fj25 = 1257.0_r8
real(kind=r8), public, parameter :: NUEr25 = 33.69_r8
real(kind=r8), public, parameter :: Cb = 1.78_r8
real(kind=r8), public, parameter :: O2ref = 209460.0_r8
real(kind=r8), public, parameter :: CO2ref = 380.0_r8
real(kind=r8), public, parameter :: forc_pbot_ref = 101325.0_r8
real(kind=r8), public, parameter :: Q10Enz = 2.0_r8
real(kind=r8), public, parameter :: Jmaxb0 = 0.0311_r8
real(kind=r8), public :: Jmaxb1 = 0.1_r8
real(kind=r8), public, parameter :: Wc2Wjb0 = 0.8054_r8
real(kind=r8), public, parameter :: relhExp = 6.0999_r8
real(kind=r8), public, parameter :: Enzyme_turnover_daily = 0.1_r8
real(kind=r8), public, parameter :: NMCp25 = 0.715_r8
real(kind=r8), public, parameter :: Trange1 = 5.0_r8
real(kind=r8), public, parameter :: Trange2 = 42.0_r8
real(kind=r8), public, parameter :: SNC = 0.004_r8
real(kind=r8), public, parameter :: mp = 9.0_r8
real(kind=r8), public, parameter :: PARLowLim = 200.0_r8
real(kind=r8), public, parameter :: minrelh = 0.25_r8

Subroutines

public subroutine LunaReadNML(NLFilename)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: NLFilename

public subroutine Update_Photosynthesis_Capacity(bounds, fn, filterp, dayl_factor, atm2lnd_inst, temperature_inst, canopystate_inst, photosyns_inst, surfalb_inst, solarabs_inst, waterstate_inst, frictionvel_inst)

Arguments

Type IntentOptional Attributes Name
type(bounds_type), intent(in) :: bounds
integer, intent(in) :: fn
integer, intent(in) :: filterp(fn)
real(kind=r8), intent(in) :: dayl_factor(bounds%begp:)
type(atm2lnd_type), intent(in) :: atm2lnd_inst
type(temperature_type), intent(inout) :: temperature_inst
type(CanopyState_type), intent(inout) :: canopystate_inst
type(photosyns_type), intent(inout) :: photosyns_inst
type(surfalb_type), intent(in) :: surfalb_inst
type(solarabs_type), intent(inout) :: solarabs_inst
type(waterstate_type), intent(inout) :: waterstate_inst
type(frictionvel_type), intent(inout) :: frictionvel_inst

public subroutine Acc240_Climate_LUNA(bounds, fn, filterp, oair, cair, rb, rh, temperature_inst, photosyns_inst, surfalb_inst, solarabs_inst, waterstate_inst, frictionvel_inst)

Arguments

Type IntentOptional Attributes Name
type(bounds_type), intent(in) :: bounds
integer, intent(in) :: fn
integer, intent(in) :: filterp(fn)
real(kind=r8), intent(in) :: oair(bounds%begp:)
real(kind=r8), intent(in) :: cair(bounds%begp:)
real(kind=r8), intent(in) :: rb(bounds%begp:)
real(kind=r8), intent(in) :: rh(bounds%begp:)
type(temperature_type), intent(inout) :: temperature_inst
type(photosyns_type), intent(inout) :: photosyns_inst
type(surfalb_type), intent(in) :: surfalb_inst
type(solarabs_type), intent(inout) :: solarabs_inst
type(waterstate_type), intent(inout) :: waterstate_inst
type(frictionvel_type), intent(inout) :: frictionvel_inst

public subroutine Acc24_Climate_LUNA(bounds, fn, filterp, canopystate_inst, photosyns_inst, surfalb_inst, solarabs_inst, temperature_inst)

Arguments

Type IntentOptional Attributes Name
type(bounds_type), intent(in) :: bounds
integer, intent(in) :: fn
integer, intent(in) :: filterp(fn)
type(CanopyState_type), intent(inout) :: canopystate_inst
type(photosyns_type), intent(inout) :: photosyns_inst
type(surfalb_type), intent(in) :: surfalb_inst
type(solarabs_type), intent(inout) :: solarabs_inst
type(temperature_type), intent(inout) :: temperature_inst

public subroutine Clear24_Climate_LUNA(bounds, fn, filterp, canopystate_inst, photosyns_inst, surfalb_inst, solarabs_inst, temperature_inst)

Arguments

Type IntentOptional Attributes Name
type(bounds_type), intent(in) :: bounds
integer, intent(in) :: fn
integer, intent(in) :: filterp(fn)
type(CanopyState_type), intent(inout) :: canopystate_inst
type(photosyns_type), intent(inout) :: photosyns_inst
type(surfalb_type), intent(in) :: surfalb_inst
type(solarabs_type), intent(inout) :: solarabs_inst
type(temperature_type), intent(inout) :: temperature_inst

public subroutine Nitrogen_investments(KcKjFlag, FNCa, Nlc, forc_pbot10, relh10, CO2a10, O2a10, PARi10, PARimx10, rb10, hourpd, tair10, tleafd10, tleafn10, Kj2Kc, Wc2Wjb0, JmaxCoef, Fc, Fj, NUEc, NUEj, NUEcref, NUEjref, NUEr, Kc, Kj, ci, Vcmax, Jmax, JmeanL, JmaxL, Net, Ncb, Nresp, PSN, RESP)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: KcKjFlag
real(kind=r8), intent(in) :: FNCa
real(kind=r8), intent(in) :: Nlc
real(kind=r8), intent(in) :: forc_pbot10
real(kind=r8), intent(in) :: relh10
real(kind=r8), intent(in) :: CO2a10
real(kind=r8), intent(in) :: O2a10
real(kind=r8), intent(in) :: PARi10
real(kind=r8), intent(in) :: PARimx10
real(kind=r8), intent(in) :: rb10
real(kind=r8), intent(in) :: hourpd
real(kind=r8), intent(in) :: tair10
real(kind=r8), intent(in) :: tleafd10
real(kind=r8), intent(in) :: tleafn10
real(kind=r8), intent(in) :: Kj2Kc
real(kind=r8), intent(in) :: Wc2Wjb0
real(kind=r8), intent(in) :: JmaxCoef
real(kind=r8), intent(in) :: Fc
real(kind=r8), intent(in) :: Fj
real(kind=r8), intent(in) :: NUEc
real(kind=r8), intent(in) :: NUEj
real(kind=r8), intent(in) :: NUEcref
real(kind=r8), intent(in) :: NUEjref
real(kind=r8), intent(in) :: NUEr
real(kind=r8), intent(inout) :: Kc
real(kind=r8), intent(inout) :: Kj
real(kind=r8), intent(inout) :: ci
real(kind=r8), intent(out) :: Vcmax
real(kind=r8), intent(out) :: Jmax
real(kind=r8), intent(out) :: JmeanL
real(kind=r8), intent(out) :: JmaxL
real(kind=r8), intent(out) :: Net
real(kind=r8), intent(out) :: Ncb
real(kind=r8), intent(out) :: Nresp
real(kind=r8), intent(out) :: PSN
real(kind=r8), intent(out) :: RESP