wiki:DevelopmentActivities/ORCHIDEE-DOFOCO

Version 9 (modified by luyssaert, 12 years ago) (diff)

--

RADIATION

APPROACH

The two stream radiation transfer model of Pinty et al is implemented in ORCHIDEE. This routine uses leaf scatter and canopy structure to calculate the radiation transfer and as a result albedo can be calculated

ROUTINES CHANGED

  • stomate.f90: Added the variables sinang and lai_eff to history files, added the subroutine stomate_canopy_structure and the subroutine effective_lai
  • condveg.f90: Added the subroutine condveg_2_stream, two_stream_solver and the functions gamma, bhrT1, etc.
  • intersurf.f90: Added lai_eff and sinang to the definition of the history files
  • sechiba.f90: Added lai_eff and sinang to history files

TO DO

  • Add snow
  • Discretize the scheme
  • change the dimensions of the variable albedo to store direct, diffuse, VIS and NIR
  • Check the cause of the one day mismatch in between LAI and LAI_eff
  • clean code, why is laieff and singang written in both stomate and sechiba?

TESTS

  • The old albedo scheme from the svn 1.9.5.2 code was compared against the old albedo scheme from the code of ORCHIDEE in which changes were made. Both old schemes resulted in the same numerical result



ALLOCATION

APPROACH

The functional allocation introduced in OCN is being moved into ORCHIDEE v1.9.5.2. Functional allocation respects allometric relationships between foliage, wood and root C allocation

ROUTINES CHANGED

  • stomate_alloc.f90
  • stomate_npp.f90
  • stomate_resp.f90
  • stomate.f90
  • stomate_io.f90
  • stomate_constants.f90
  • stomate_data.f90
  • sechiba.f90
  • diffuco.f90
  • intersurf.f90

TO DO

  • Check 'use_reserve' sometimes it is a value, sometimes it looks like a flag (its value is set to 1) in stomate_alloc.f90
  • Check the difference between the labile and reserve pool
  • Change calling arguments in stomate_lpj
  • Calculate rue_longterm in stomate_season.f90
  • Define fcn_root(j) and fcn_wood(j) in a constantes files, define for all plant parts (needed to calculate resp and in npp), define as fcn(j,k) where j = nvm and k = ipart. This is ok for stomate_resp. check whether this would be OK for stomate_npp
  • In Sonke's code ! fraction of GPP which is lost as growth respiration is defined as REAL(r_std), SAVE :: frac_growthresp in 1.9.5.2 it is defined as a PARAMETER.
  • Check whether the code works for all PFT's
  • Check NPP dip in first year
  • Add labile Carbon pool to history file
  • Check whether a spin-up works
  • Check where lab_fac comes from in stomate_resp.f90
  • Check the values of limit_cn
  • Check the values of GPP and NPP (much lower with the new scheme)
  • Add the calculated height to the history files

TESTS

  • TEST 1: The old allocation scheme (flag STOMATE_FUNCTIONAL_ALLOCATION is not available) in the tag 1.9.5.2 (rev 712) was run for: (1) one pixel (52-53N, 6-7E), (2) 2 years, (3) without restart file, (4) with NCC forcing and (5) for all forest PFTs on a single pixel. The configuration can be found at home/users/sluys/MY_1_9_5_2/config/ORCHIDEE_OL/MYDEBUG1.
  • TEST 2: The old allocation scheme (flag STOMATE_FUNCTIONAL_ALLOCATION = n) in the adjusted 1.9.5.2 (rev 712) code was run for: (1) one pixel (52-53N, 6-7E), (2) 2 years, (3) without restart file, (4) with NCC forcing and (5) for all forest PFTs on a single pixel. The configuration can be found at home/users/sluys/MY_DEBUG/config/ORCHIDEE_OL/MYDEBUG2.
  • TEST 3: The new allocation scheme (flag STOMATE_FUNCTIONAL_ALLOCATION = y) in the adjusted 1.9.5.2 (rev 712) code was run for: (1) one pixel (52-53N, 6-7E), (2) 10 years, (3) without restart file, (4) with NCC forcing and (5) for all forest PFTs on a single pixel. The configuration can be found at home/users/sluys/MMY_DEBUG/config/ORCHIDEE_OL/MYDEBUG3.
  • Conclusion TEST 1 vs TEST 2: the outcome was different (OL2/MYDEBUG1/output.txt) but should have been the same. Checked ediff for config.card, stomate.card, sechiba.card, orchidee_ol.card, driver.def, stomate.def and sechiba.def: no differences except for the job name. On day 1 the total living biomass was around 400 gC/m2 in TEST 1 and only 40 gC/m2 in TEST 2. Looks like an intialisation issue.
  • Conclusion TEST 3: the new allocation appeared stable over 10 years for all tree PFT's
  • Conclusion TEST 2 vs TEST 3: new allocation has substantial less NPP due to substantial higher Ra

BUGS

  • Lai is optimised for mean annual radiation use efficiency and the C costs for producing the canopy. The cost-benefit ratio is optimised when the marginal gain / marginal cost = 1 Investing 1gC in the canopy comes at a total cost that is composed by the C required for the canopy in addition to the roots and the sapwood to support the canopy. The total cost (C) is thus calculated as C: LAI * ( (1/tau_leaf)/sla + (one_year/tau_root)*LF/sla + (one_year/tau_sap)*height/(sla*KF)) The marginal cost for one unit of LAI is then dC/dLAI : (1/tau_leaf)/sla + (1/tau_root)*LF/sla + (1/tau_sap)*height/(sla*KF) Where, tau_leaf is given by ::leaflife_tab in years, tau-root by ::tau_root_d in days and tau_sap by ::tau_sap in days. LF is unitless, KF is expressed in meters and sla in m2.gC-1. The unit of dC/dLAI is thus gC.m-2 but all turnover times need to be expressed on an annual scale. Investing 1gC in the canopy enables the plant to assimilate more carbon The gain (G) can be approximated by using the 'radiation use efficiency' as follows: RUE * one_year ( 1. - exp (-0.5 * LAI )) Where, 0.5 is the extinction factor that accounts for the fact the lower parts of the canopy receive less light. Note that RUE has a particular definition and is calculated as the ratio of GPP over the fraction of radiation absorbed by the canopy. Hence the unit of RUE is gC.m-2.day-1. The marginal gain of one unit of LAI is dG/dLAI: 0.5 * one_year * RUE exp (-0.5 * LAI). Subsequently, the optimal LAI is estimated as LAI_opt = -2. * log(2*(dC/dt)/RUE*one_year) ??Why was it not considered a cost when the leaves life longer than one year i.e. MIN(1.,leaflife_tab) in the original code - THINK ABOUT THIS!!
  • Check what will happen if Cl_target is reached? Seems that the current routines keeps allocating C to the canopy.



ENERGY BUDGET


Attachments (8)