Skip to content

Commit 08427db

Browse files
committed
Add again 'tc_ref' as argument to calc_ftemp for vcmax and jmax
calc_ftemp_inst_jmax and calc_ftemp_inst_vcmax had this before addition of tc_home. This now recovers it. Note that it is used in the method "smith19".
1 parent 4dcc1ae commit 08427db

3 files changed

Lines changed: 25 additions & 16 deletions

File tree

src/gpp_pmodel.mod.f90

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,15 @@ subroutine gpp( tile, tile_fluxes, co2, climate, grid, init, in_ppfd, tc_home)
212212
! quantities with instantaneous temperature response
213213
tile_fluxes(lu)%plant(pft)%vcmax = calc_ftemp_inst_vcmax( &
214214
tc_leaf = climate%dtemp, &
215-
tc_growth = temp_memory) * out_pmodel%vcmax25
215+
tc_growth = temp_memory, &
216+
! no tc_home needed for calc_ftemp_inst_vcmax
217+
tc_ref = 25.0 ) * out_pmodel%vcmax25
216218

217219
tile_fluxes(lu)%plant(pft)%jmax = calc_ftemp_inst_jmax( &
218220
tc_leaf = climate%dtemp, &
219221
tc_growth = temp_memory, &
220-
tc_home = tc_home ) * out_pmodel%jmax25
222+
tc_home = tc_home, &
223+
tc_ref = 25.0 ) * out_pmodel%jmax25
221224

222225
!----------------------------------------------------------------
223226
! Stomatal conductance

src/photosynth_pmodel.mod.f90

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ function pmodel( kphio, beta, kc_jmax, ppfd, co2, tc, vpd, patm, tc_home, c4, me
133133
real :: fact_jmaxlim ! Jmax limitation factor (unitless)
134134

135135
! local variables for Jmax limitation following Nick Smith's method
136-
real :: omega, omega_star, jmax_over_vcmax, jmax_prime
136+
real :: omega, omega_star, tc_ref, jmax_over_vcmax, jmax_prime
137137

138138
real, parameter :: theta = 0.85 ! used only for smith19 setup
139139
real, parameter :: c_cost = 0.05336251 ! used only for smith19 setup
@@ -263,19 +263,23 @@ function pmodel( kphio, beta, kc_jmax, ppfd, co2, tc, vpd, patm, tc_home, c4, me
263263
omega = calc_omega( theta = theta, c_cost = c_cost, m = out_optchi%mj ) ! Eq. S4
264264
omega_star = 1.0 + omega - sqrt( (1.0 + omega)**2 - (4.0 * theta * omega) ) ! Eq. 18
265265

266-
! calculate Vcmax-star, which corresponds to Vcmax at a reference temperature 'tc_home'
266+
! calculate Vcmax-star, which corresponds to Vcmax at a reference temperature 'tc_ref'
267267
vcmax_star = kphio * ppfd * out_optchi%mjoc * omega_star / (8.0 * theta) ! Eq. 19
268+
269+
! tc_ref is the optimum temperature in K, assumed to be the temperature at which Vcmax* is operating.
270+
! tc_ref is estimated based on its relationship to growth temperature following Kattge & Knorr 2007
271+
tc_ref = 0.44 * tc + 24.92
268272

269273
! calculated acclimated Vcmax at prevailing growth temperatures
270-
ftemp_inst_vcmax = calc_ftemp_inst_vcmax( tc, tc )
274+
ftemp_inst_vcmax = calc_ftemp_inst_vcmax( tc, tc, tc_ref = tc_ref )
271275
vcmax = vcmax_star * ftemp_inst_vcmax ! Eq. 20
272276

273277
! calculate Jmax
274278
jmax_over_vcmax = (8.0 * theta * omega) / (out_optchi%mjoc * omega_star) ! Eq. 15 / Eq. 19
275279
jmax_prime = jmax_over_vcmax * vcmax
276280

277281
! light use efficiency
278-
lue = c_molmass * kphio * out_optchi%mj * omega_star / (8.0 * theta)
282+
lue = c_molmass * kphio * out_optchi%mj * omega_star / (8.0 * theta) ! treat theta as a calibratable parameter
279283

280284
else if (method_jmaxlim=="none") then
281285

@@ -303,7 +307,7 @@ function pmodel( kphio, beta, kc_jmax, ppfd, co2, tc, vpd, patm, tc_home, c4, me
303307
! Corrolary preditions (This is prelimirary!)
304308
!-----------------------------------------------------------------------
305309
! Vcmax25 (vcmax normalized to 25 deg C)
306-
ftemp_inst_vcmax = calc_ftemp_inst_vcmax(tc, tc)
310+
ftemp_inst_vcmax = calc_ftemp_inst_vcmax( tc, tc, tc_ref = 25.0 )
307311
vcmax25 = vcmax / ftemp_inst_vcmax
308312

309313
! ! Dark respiration at growth temperature
@@ -328,7 +332,7 @@ function pmodel( kphio, beta, kc_jmax, ppfd, co2, tc, vpd, patm, tc_home, c4, me
328332
! (-) * (-) * (mol m-2 s-1) / (-)
329333
end if
330334
! for normalization using temperature response from Duursma et al., 2015, implemented in plantecophys R package
331-
ftemp_inst_jmax = calc_ftemp_inst_jmax(tc, tc, tc_home)
335+
ftemp_inst_jmax = calc_ftemp_inst_jmax(tc, tc, tc_home, tc_ref = 25.0 )
332336
jmax25 = jmax / ftemp_inst_jmax
333337
end if
334338

@@ -892,14 +896,15 @@ function calc_ftemp_inst_rd( tc ) result( fr )
892896
end function calc_ftemp_inst_rd
893897

894898

895-
function calc_ftemp_inst_vcmax( tc_leaf, tc_growth ) result( fv )
899+
function calc_ftemp_inst_vcmax( tc_leaf, tc_growth, tc_ref ) result( fv )
896900
!-----------------------------------------------------------------------
897901
! Calculates the instantaneous temperature response factor for Vcmax.
898902
!
899903
! Arguments:
900904
! tc_leaf: Instantaneous leaf temperature (°C)
901905
! tc_growth: Growth temperature, 30-day mean damped temperature (°C)
902906
! tc_home: Long-term mean maximum temperature of the warmest month (°C)
907+
! tc_ref: Reference temperature (°C), is 'to' in Nick's set it to 25 °C (=298.15 K in other cals)
903908
!
904909
! Returns:
905910
! fv: Instantaneous temperature response factor (unitless)
@@ -911,9 +916,10 @@ function calc_ftemp_inst_vcmax( tc_leaf, tc_growth ) result( fv )
911916
! Function arguments
912917
real, intent(in) :: tc_leaf
913918
real, intent(in) :: tc_growth
919+
real, intent(in) :: tc_ref
914920

915921
! Local variables
916-
real :: tc_ref, tk_ref, tk_leaf, dent, fva, fvb
922+
real :: tk_ref, tk_leaf, dent, fva, fvb
917923
real :: Ha, Hd
918924

919925
! Output variable
@@ -923,7 +929,6 @@ function calc_ftemp_inst_vcmax( tc_leaf, tc_growth ) result( fv )
923929
Ha = (42.6 + 1.14 * tc_growth) * 1.0e3 ! activation energy (J/mol)
924930
Hd = 200000.0 ! deactivation energy (J/mol)
925931
! kR ! kR is universal gas constant (J/mol/K)
926-
tc_ref = 25.0 ! reference temperature (deg C)
927932

928933
tk_ref = tc_ref + 273.15 ! to Kelvin
929934
tk_leaf = tc_leaf + 273.15 ! to Kelvin
@@ -937,14 +942,15 @@ function calc_ftemp_inst_vcmax( tc_leaf, tc_growth ) result( fv )
937942
end function calc_ftemp_inst_vcmax
938943

939944

940-
function calc_ftemp_inst_jmax( tc_leaf, tc_growth, tc_home ) result( fv )
945+
function calc_ftemp_inst_jmax( tc_leaf, tc_growth, tc_home, tc_ref ) result( fv )
941946
!-----------------------------------------------------------------------
942947
! Calculates the instantaneous temperature response factor for Jmax.
943948
!
944949
! Arguments:
945950
! tc_leaf: Instantaneous leaf temperature (°C)
946951
! tc_growth: Growth temperature, 30-day mean damped temperature (°C)
947952
! tc_home: Long-term mean maximum temperature of the warmest month (°C)
953+
! tc_ref: Reference temperature (°C), is 'to' in Nick's set it to 25 °C (=298.15 K in other cals)
948954
!
949955
! Returns:
950956
! fv: Instantaneous temperature response factor (unitless)
@@ -957,9 +963,10 @@ function calc_ftemp_inst_jmax( tc_leaf, tc_growth, tc_home ) result( fv )
957963
real, intent(in) :: tc_leaf
958964
real, intent(in) :: tc_growth
959965
real, intent(in) :: tc_home
966+
real, intent(in) :: tc_ref
960967

961968
! Local variables
962-
real :: tc_ref, tk_ref, tk_leaf, dent, fva, fvb
969+
real :: tk_ref, tk_leaf, dent, fva, fvb
963970
real :: Hd, Ha
964971

965972
! Output variable
@@ -969,7 +976,6 @@ function calc_ftemp_inst_jmax( tc_leaf, tc_growth, tc_home ) result( fv )
969976
Ha = 40710.0 ! J/mol (constant activation energy for Jmax)
970977
Hd = 200000.0 ! deactivation energy (J/mol)
971978
! kR ! kR is universal gas constant (J/mol/K)
972-
tc_ref = 25.0 ! reference temperature (deg C)
973979

974980
tk_ref = tc_ref + 273.15 ! to Kelvin
975981
tk_leaf = tc_leaf + 273.15 ! to Kelvin

src/pmodel.mod.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ subroutine pmodel_onestep_f( &
104104
)
105105

106106
! quantities with instantaneous temperature response
107-
vcmax = calc_ftemp_inst_vcmax( temp, temp ) * out_pmodel%vcmax25
108-
jmax = calc_ftemp_inst_jmax( temp, temp, tc_home ) * out_pmodel%jmax25
107+
vcmax = calc_ftemp_inst_vcmax( temp, temp, tc_ref = 25.0 ) * out_pmodel%vcmax25
108+
jmax = calc_ftemp_inst_jmax( temp, temp, tc_home, tc_ref = 25.0 ) * out_pmodel%jmax25
109109
rd = out_pmodel%vcmax25 * rd_to_vcmax * calc_ftemp_inst_rd( temp ) * c_molmass
110110

111111
!----------------------------------------------------------------

0 commit comments

Comments
 (0)