wiki:DevelopmentActivities/ORCHIDEE-DOFOCO

Version 101 (modified by luyssaert, 7 years ago) (diff)

--

ORCHIDEE-OCN-CAN

STRATEGIES OF THE MERGE

Additional pages describe the Strategy of the merge

MINUTES

DevelopmentActivities/ORCHIDEE-DOFOCO/Minutes

STATUS

11.11.2016

  • Checked out revision 3879. The multi-layer set-up worked for 19 years for 37 PFTs for a single PFT (4 age classes for forests).
  • [NOT solved] Generating daily output took 15 seconds per day or 18 minutes per month. Generating monthly output takes 280 seconds or 80 minutes per month. Annual output takes 63 minutes per year. Part of the timing is due to the size of the *_out_orchidee files which is currently 6GB per year! All write statements should be placed within (sub)routine-specific printlev flags (see stomate) such that the *_out_orchidee file can be controlled.
  • [NOT solved] Running the same version of the model with a different run.def crashed in the first year on a mass balance error in soil_carbon. SL is currently working on this crash.

xx.xx.2016

PLEASE UPDATE STATUS (known problems that need to be solved) of the versions committed between 14.09 and 11.11

14.09.2016

  • Revision 3798 includes updated calculations for temperature coefficient (gtemp) in stomate_resp.f90; gtemp calculation now uses externalized parameters and is adjusted to account for half-hourly stomate time step (instead of using aggregated daily values). Autotrophic respiration demands are now comparable to those used in the DOFOCO code. Most PFTs seem to grow more or less as expected. The model runs for 109 years with no crashes. The respiration "hack" implemented in revision 3710 is no longer necessary. Attached file "LAI_3795_all_pdfs_updated.pdf" shows results for LAI, individual tree density, mean diameter and tree height for all PFTs.

25.08.2016

  • Revision 3710 includes an updated stomate scheme. This revision features an optional hack which takes all carbon required for autotrophic respiration from the atmosphere. It was found that this allows most PFTs to grow (mostly) normally. The relevant changes are contained in stomate_growth_fun_all.f90. The model runs for 102 years with no crashes.
  • [NOT solved] History variables BM_ALLOC_RES_c and BM_ALLOC_RES_n are written with invalid data. C and N in the reserve pools are contained in the variable RESERVE_M_c and RESERVE_M_n.
  • [NOT solved] Some PFTs still have abnormalities in their long-term growth and decay patterns; After 100 simulation years, PFTs 18 and 22 (Broadleaved Summergreen Temperate age class 01, Needleleaf Evergreen Boreal age class 01) both contain a sharp spike in atm_to_bm-N. This spike should coincide with a sudden increase in individual tree density, but this does not seem to be the case. PFT 28 (Broadleaved Summergreen Boreal age class 03) shows jumps in mean tree diameter that coincide with sudden drops in individual tree density. This behavior is unexpected for unmanaged tree stands. See attached pdfs for data.

21.07.2016

  • Revision 3634 has no new functionality.
  • It is the exact code that Alex used and with which he could run the model for 34-years (crash after a run-time error).

20.07.2016

  • Revision 3634 has no new functionality.
  • Several mass balance problems were fixed for the option impose_cn = y
  • [NOT solved] Alex could run the model for 34 years without any problems on obelix. Sebastiaan could run the model for 7 years on Curie and got a crash in year 8 in stomate_growth_fun_alloc.f90. The model crashes in allocation because the biomass is zero and the code tries to divide by zero which does not work. This is a conceptual problem. The allocation scheme needs biomass to decide how to allocate biomass. Hence, the scheme should never be called if biomass is zero. In allocation some of the if-statements use the veget_max criterion for consistency with the other routines. We could simply replace this by a biomass criterion but then we loose consistency with the other routines and more importantly we simply hide the bug. The real problem is that we have pfts for which veget_max is greater than zero but biomass is zero. This should never occur in allocation because allocation is right after prescribe and in-between there is no mortality. If veget_max is greater than zero and biomass equals zero, prescribe should add biomass to that pixel. This is a long story to say that the real problem is in prescribe and not in allocation. How it is possible that and apparent empty PFT (biomass = 0) with a veget_max>0 does not receive new biomass in prescribe. Given that we did not have this problem in the C-only version it is probably good to start looking in the lines of code where N is dealt with.

07.07.2016

  • Revision 3612 has no new functionality.
  • Several mass balance problems were fixed for the option impose_cn = y.
  • N_support was replaced by atm_to_bm to avoid having variables that only contain one nutrient. atm_to_bm has a dimension for ::nelements. atm_to_bm is a flux and was as such accounted for in the mass balance closure
  • Several print statements were suppressed. Run time is back at 70 seconds per years when compiled in dev on Curie
  • [solved] Runs for 7 years then crashes.
  • Commit to share cleaner and faster code among the developers.

16.05.2016

  • Revision 3442 has a more or less complete version of stomate (LCC is still missing but this routine does not affect the parameterisation of the model).
  • [solved] Most PFTs (except the crops) don't grow but don't die either (an issue with N-availability?)
  • The mass balance has been closed for all the activated stomate routines (for FOREST_MANAGED_FORCED = 1 or 2).
  • [NOT solved] Need to test mass balance closure for FOREST_MANAGED_FORCED = 3 (Coppice) and FOREST_MANAGED_FORCED = 4 (Short Rotation Coppice).
  • [NOT solved] Need to re-activate the independent mass balance check for stomate and write it to the history file (request from IPSL)

12.05.2016

  • The routines with stomate_resp, stomate_soilcarbon and stomate_litter has been merged in rev3421.
  • The mass balance was not closed in the original files from ORCHIDEE-N in particular for the routing nitrogen dynamic.
  • [solved] With FOREST_MANAGED_FORCED > 1 the model crash after 24 years because of a mass balance error in stomate_natural_mortality. When FOREST_MANAGED_FORCED =1 the model runs fine for 50 years.

02.05.2016

  • Revision 3398. Added forestry, litter raking and anthropogenic mortality.
  • no new issues were found when testing the code.
  • [solved] When moving from age class 2 to age class 3 several PFTs show a sudden jump in LAI. Needs to be looked at. May be one of the variables does not get correctly reset or calculated when moving the information from one to the next PFT. It was noticed just now but, if a bug, it was probably introduced at the time the age classes were introduced. No obvious link with forestry.

29.04.2016

  • Revision 3397. Added two-way albedo
  • [NOT solved] problems with 'snow_frac', feeding into values for the snow albedo greater than 1, and crashes shortly afterwards. Variable that is causing the problem appears to be 'frac_snow_veg', in the subroutine 'albedo_two_stream'. This is a variable that is calculated in 'calculate_snow_albedo' subroutine and passed up to 'albedo_two_stream', and from there to condveg. The only place that it is calculated is 'calculate_snow_albedo'. In this particular model run it is zero for all PFTs. However in a later loop over all PFTs (within 'albedo_two_stream') the value of 'frac_snow_veg' strangely deviates from zero, which causes incremental increases in the albedo, until eventually the model crashes. When I define a local variable for this PFT loop, 'frac_snow_veg_loc' (just within 'albedo_two_stream') the model does not crash. This is rather a clumsy solution, but it is strange that 'frac_snow_veg' does not retain its value during the loop.

22.04.2016

  • Revision 3382. Added age classes and the subroutine age_class_distr that moves the biomass between age classes. Adjusted the internal consistency checks for better testing. Created a new run.def to be used with the age classes.
  • No new issues were found when updating the code. The code compiles and was run for 50 years over a single pixel containing all PFTs.

19.04.2016

  • Revision 3374. Added natural mortality and the mortality_clean which is the routine that deals with the diameter classes within a stand.
  • [solved] The code crashes after 39 years with a sudden appearance of a very negative biomass. The code to keep the diameter classes monotonically increasing is not yet implemented (next step).

08.04.2016

  • Revision 3348. Replaced ::begin_leaves, ::allow_initpheno and ::senescence by a variable called ::plant_status. This variable contains the different phenological and growth phases of the plant. The biggest advantage of the new approach is that the variable plant_status can only have one value (=status) at a time and is therefore always consistent contrary to the old approach were conflicts between the 3 variables were possible.
  • [solved] The code crashes after 4 years because a mass balance closure error with labile N in crops.

01.04.2016

  • Revision 3337. Merged the turnover code and the mass balance is closed.
  • [solved] The code crashes after 8 years because the biomass in de different diameter classes is not monotonically increasing. At that point the biomass is very negative. The code should crash on the fact that the biomass is very negative - this is checked at the end of each routine in stomate. In CAN we have dedicated routines to deal with those issues. Those routines have not been merged/activated yet. For the moment we do not kill PFTs so we may have a run-away turnover but it could as well be a bug. It is expected that the problem will become more pronounced and easier to find) when all biomass-subroutines are activated.
  • [solved] There is no leaf on-set for the deciduous trees. Sapwood is simply consumed.
  • [solved] Crops grow for just one year. Crops do not get planted in year 2.

11.03.2016

  • Revision 3264. All changes were put into its own branch called ORCHIDEE-CN-CAN and the branch is up to date with r3238 of ORCHIDEE-CN. This branch can now be used to start working in parallel on different parts of the code.
  • No new issues were found when establishing the branch and updating the code

18.02.2016

  • Merged the laieff code and made the link between stomate and sechiba
  • [NOT solved] LAI is still passed around. According to the DOFOCO philosophy it should be calculated from biomass when needed. This should be checked. Difficulty is that the option to read the LAI map needs to be maintained. Probably best to convert LAI in biomass and pass biomass raound in line with the rest of the code.
  • [NOT solved] veget is now calculated from laieff. It needs to be checked whether this is always the case. Not sure about that.
  • [NOT solved] canopy structure is declared in sechiba and calculated in stomate. The output files are also written in stomate so for the moment it has not been tested whether it is correctly passed to sechiba.

03.02.2016

  • Both evergreens and deciduous allocate C and N.
  • [solved] No nitrogen allocation for deciduous trees
  • [solved] Added a patch for allow_initpheno in stomate_phenology to make the model work with turnover. This patch should be removed as soon as turnover is activated. The patch is marked with +++PATCH+++
  • [NOT solved] We end up with rather large residuals in ordinary allocation. This is something new and unwanted. The code itself should be OK so most likely this is the result of a bug somewhere else in the code (no idea where) or a problem due to the parameter settings. The numerical approximation makes use of ::s and ::step. That is probably where the problem is really happening. A temporary fix was implemented.
  • [NOT solved] The code runs with ncirc=3 but the output needs to be adjusted to reflect the different diameter classes.
  • [solved] Phenology now uses a battery of variables: allow_phenology, begin_leaves, senescence, ... these variables can be in conflict with each other. The code could be simplified and made more robust by merging all this information is a single variable,for example; pheno_status. The value of that variable could be iallowpheno, ibeginleaf, igrowth, isenescent, idormancy. That way the plant can only have one condition at a time and inconsistencies would no longer be possible.
  • [NOT solved] Phenology seems to work but is far from realistic.

03.02.2016

  • A very basic version of the model (i.e., prescribe, phenology, allocation and all of sechiba) runs for 10 year (end of test) on a single pixel for all PFTs (without crops). The mass balance is closed for N and C and the different biomass variables are synchronized.
  • [solved] The evergreen PFTs respond as expected, the deciduous PFTs allocate C but do not allocate N.

27.01.2016

  • [solved] Fixed the crashes in stomate_growth_fun_alloc.f90. Mass balance is now closed for carbon and nitrogen and biomass and circ_class_biomass are synchronized for carbon. Need a longer test to check whether nitrogen is also in sync.
  • [solved] it needs to be tested whether stomate_allocation.f90 correctly synchronizes biomass and circ_class_biomass for nitrogen. The code crashes before N gets allocated so it can not be tested for the moment.
  • [solved] lai is an input variable in diffuco_trans_co2 in ORCHIDEE-CN but is calculated in sechiba in ORCHIDEE-CAN. For the moment no lai is passed to diffuco and so the model crashes on photosynthesis.
  • [NOT solved] in the first time step lai is prescribed (8, 4, ...), lai is not capped in ORCHIDEE-CAN so this should be checked and removed.

12.01.2016

  • Merged stomate_phenology
  • Checked for mass balance closure for carbon and nitrogen
  • Removed the effect of water stress from this code in line with the current implementation of the hydraulic architecture
  • Fixed a nitrogen accounting issue
  • Used get_printlev (constantes.f90) as a more clean and consistent substitute for the ld_flags that were used for debugging in ORCHIDEE-CAN.
  • [solved] The code crashes in stomate_growth_fun_alloc.f90.
  • [NOT solved] waterstress is implemented through the hydraulic architecture. The way the model accounts for waterstress needs to be checked as several options were coded but never really used and tested.

06.01.2016

  • Merged stomate_phenology
  • Checked for mass balance closure for carbon and nitrogen
  • Re-introduced circ_class_biomass and circ_class_n.
  • Used get_printlev (constantes.f90) as a more clean and consistent substitute for the ld_flags that were used for debugging in ORCHIDEE-CAN.
  • [solved] The code crashes in stomate_growth_fun_alloc.f90 where qm_dia is calculated. All values are zero.
  • [NOT solved] The code still makes use of biomass and circ_class_biomass. Both were kept because in the initial implementation the labile and reserve pool were not defined at the circumference level. While merging phenology I found my myself working on code that distributed the reserves over the circumference classes. If this is consistently done throughout stomate there is no reason to keep biomass (and ind). This would also overcome the need to sync biomass vs circ_class_biomass and ind vs circ_class_ind.
  • [solved] the Nitrogen version of the code makes use of Nsupport when impose_cn is TRUE. The function of the variable seems identical to atm_to_bm (which replaces co2_to_bm and n_to_bm) so Nsupport is no longer used. Confirm whether this is acceptable.
  • [solved] The code for the dynamic N-cycle seems to be incomplete (the if-loop only accounts for one case for other cases variables may become undefined). This section was marked with +++CHECK+++.

27.12.2015

  • Merged stomate_prescribe
  • Checked for mass balance closure for carbon and nitrogen
  • Re-introduced circ_class_biomass and circ_class_n. These variables are defined in sechiba because they are use by both stomate and sechiba.f90
  • [solved] Tried to make use of get_printlev (constantes.f90) as a more clean and consistent substitute for the ld_flags that were used for debugging in ORCHIDEE-CAN. get_printlev does not work.
  • [solved] The code crashes in stomate_growth_fun_alloc.f90 where qm_dia is calculated. All values are zero.

22.12.2015

  • Checked out svn 2978 twice (ORCHIDEE.NITROGEN and ORCHIDEE.MERGE). The nitrogen set-up is the reference for all the merges. Set-up 3 test runs: a single pixel run, a run over 4 pixels with 4 processors and a global run. The global run failed (see issues 22.12.2015). The SBG output for both installations was identical after 10 years. The SRF output differed by 10-5 to 10-8 for the C-fluxes for the 4 pixels and 10-6 to 10-9 for the single pixel run. This appears as a minor issue but it suggests that the 1+1 problem has not been solved.
  • [NOT solved] the land mask of the nitrogen map does not seem to match the land mask of the PFT map. In the single and multiple-pixel test cases impose_veget=y and thus the PFT map was not used. Switching on the PFT map for a global grid results in the following error. FATAL ERROR FROM ROUTINE slowproc_ninput . No information for a point . Fatal error from ORCHIDEE. STOP in ipslerr_p with code.
  • [NOT solved] two identical installations of the revision 2978 do not result in identical output for SRF. The SRF output differed by 10-5 to 10-8 for the C-fluxes for the 4 pixels and 10-6 to 10-9 for the single pixel run. This appears as a minor issue but it suggests that the 1+1 problem has not been solved. Interestingly GPP in stomate is identical. GPP in SRF is among the variables with shows small differences.
  • [solved] the function get_printlev does not work. Only printlev is read and used. printlev_loc is not working. Tried to debug but without success. This function contains about 5 lines of code so finding the problem shouldn't be too difficult.

10.12.2015

  • Checked out svn 2978. Compiled and set-up single-pixel, and multiple-pixels.
  • [NOT solved] svn 2978: the compiler had problems finding a library file for forcesoil. I removed forcesoil.exe and teststomate.exe from ../modeles/ORCHIDEE/makeorchidee_fcm so it compiles.
  • [solved] No LAI for PFT 12 and 13 (impose_veg = y).





ORCHIDEE-CAN

ROUTINES CHANGED

src_driver

  • readdim2.f90: bug fix from the trunk
  • teststomate.f90: added albedo variables to compile...in theory, this should be free of the albedo, but for the albedo we need the LAI effective which is calculated from the canopy structure, and therefore done in src_stomate...this should not cause problems as the added variables aren't used for anything, but only added to make the subroutine calls happy

src_parameters

  • pft_parameters.f90: added PFT-dependant variables related to the externalization of the new albedo, including declaration, allocation, deallocation, reading values from the input file, and setting default values. Added all PFT-dependent variables for respiration, growth and allocation.
  • constantes.f90: added some control variables for choosing albedo and snow albedo, a variable which defines the number of spectra bands, the number of vertical levels for the albedo/energy budget, some externalized parameters for the new albedo that are not PFT-dependent, as well as reading them in from the file. Made some constants PFT-dependent and thus moved them to pft_parameters.
  • constantes_mtc.f90: added default values for PFT-dependent albedo; respiration, growth and allocation parameters

src_sechiba

  • intersurf.f90: added a check to see if control flags are consistent for the new albedo, define a couple variables for the history files
  • sechiba.f90: added two new module variables, including allocation and initialization of one, passing around a couple more variables related to albedo
  • albedo.f90: new, separated all the vegetation and snow albedo routines from sechiba into their own file
  • condveg.f90: pass some additional variables to the module needed for the albedo, moved the snow and vegetation albedo routines into their own module (albedo.f90)...snow albedo needs to be calculated before the vegetation albedo for the new scheme, while it was calculated afterwards in the old scheme, which lead to some restructuring
  • slowproc.f90: passing around some albedo variables (sinang, nlevels, laieff)
  • enerbil.f90: merged in a bug fix from the trunk
  • AA_make: added albedo.f90 to compile

src_stomate

  • AA_make: Added file names to compile for some new modules
  • stomate.f90: added a call to calculate the effective lai used in the albedo routines, and pass the required variables (laieff, sinang, z_level) around...initializes the effective LAI during the first call
  • stomate_lpj.f90: switches to the different growth routines were removed from the subroutines and moved to stomate_lpj.f90 this resulted in cleaner and readable subroutines delaing with plant growth (see below).
  • stomate_laieff.f90: new, contains the routines to calculate the effective LAI for the albedo using the Pgap model of Haverd et al
  • stomate_alloc.f90: the original code was merged with stomate_npp.f90 into a new module stomate_growth_res_lim.f90 that deals with all the aspects of growth as formalized by Friedlingstein et al 1999.
  • stomate_npp.f90: the original code was merged with stomate_alloc.f90 into a new module stomate_growth_res_lim.f90 that deals with all the aspects of growth as formalized by Friedlingstein et al 1999.
  • stomate_growth_res_lim.f90: this is a new module containing all aspects of growth as formalized by Friedlingstein et al 1999.
  • stomate_growth_res_lim_ocn.f90: this is a new module containing all aspects of growth as formalized by Friedlingstein et al 1999 AND it has a labile pool such that it can deal with N-allocation. Not used in the dofoco branch because there is an issue with growth respiration but the code is available if the N-cycle is merged into the trunk.
  • stomate_growth_fun_all.f90: this is a new module that contains allometric-based growth and largely follows the logic of OC-N. However, the logic flow of phenological growth does no longer follow OCN. The linearisation and thus all other equations were changed to allow solving the set of equations for different basal area classes at the same time and for solving the equation for basal area rather than diameter to increase compatibility with forestry (to do).
  • stomate_prescribe.f90: the logic of the original code is preserved in a subroutine prescribe_diagnostic, however, stomate_prescribe is only called when firstcall = TRUE. Further, the code itself was simplified an entirely rewritten such that the initial stand respects the allometric relationships. In the diagnostic approach diameter and number of individuals is calculated from biomass. A second subroutine, called prescribe_prognostic is being coded in which basal area, biomass and the number of individuals respect the allometric relationships and the self-thinning rule.
  • stomate_data.f90: the biomass of a sapling now respects the allometric relationships
  • stomate_resp.f90: was rewritten in line with the respiration in OCN. For the moment the C/N ratio of tissue is a PFT-dependent variable, when N is added CN ratios should be calculated rather than prescribed.
  • stomate_stand_structure.f90: when the model is ran in the diagnostic mode, this routine is very similar to stomate_prescribe, however, it is called at every day. When the DOFOCO set-up is run this module calculates the prognostic stand structure as well as the canopy structure that is used to calculate LAIeffective.
  • stomate_resp: the routine is very similar to the one of ORCHIDEE-CN. I mainly update the code with the coding guidelines.
  • stomate_soilcarbon: here again it's very similar to ORCHIDEE-CN with few modifications related to the coding guidelines. I also modified the loop over PFT to start from ivm=1 instead of 2 like in ORCHIDEE-CN. This has been done first because in case of land use change you can have C in bare soil and this C is not stored for eternity. Secondly, PFT1 can be associated to vegetated soil if the user wants.
  • stomate_litter: The littercalc routines was not changed that much compared to ORCHIDEE-CN. The nitrogen_dynamics was corrected of several bugs. First, the update of the pool after export calculation was done at the end and not after each export calculation inducing errors in mass balance. Secondly, all the input fluxes are added to the soil_n_min variable at the beginning of the routine and not in the middle like it was previously. It is more consistent because there were no obvious reason to assume that all the mineral N pool is not available for all the export fluxes.

RADIATION

APPROACH

The two stream radiation transfer model of Pinty et al. 2006 (J. Geophys. Res., 111, D02116, doi:10.1029/2005JD005952) 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. We are also making it into a multi-layer model with an arbitrary number of layers. The single scattering and forward efficiency values of the canopy are changed to match the diffuse and direct top of the canopy albedos for the single layer case. The calculation of the effective LAI now uses the Pgap model of Haverd et al described in their 2012 paper (Agricultural and Forest Meteorology, Vol. 160, pp 14-35) to take the canopy structure into account.

TASKS ACCOMPLISHED

  • Two stream radiation transfer model of Pinty et al is implemented
  • Effecive LAI is now calculated by the Pgap model of Haverd et al described in their 2012 paper (Agricultural and Forest Meteorology, Vol. 160, pp 14-35)
  • A framework capable of using an arbitrary number of canopy layers is in place, although the tests are still not satisfactory
  • The snow calculation has been modified to include snow in the background reflectance of Pinty's scheme, effectively putting snow under the canopy
  • Bernard's two stream solver routine has been modified to have both a diffuse and direct background reflectance value
  • The snow albedo model of CLM3 has been incorporated, since it distinguishes between NIR and VIS light, as well as diffuse and direct
  • All the albedo routines have been merged into the branch ORCHIDEE-DOFOCO

TO DO

  • change the dimensions of the variable albedo to store direct, diffuse, VIS and NIR (the direct and diffuse distinction becomes moot with the current multilayering scheme, as they must be averaged into one value for the background reflection to communicate between the layers)
  • Check the cause of the one day mismatch in between LAI and LAI_eff...UPDATE: seems like this is caused by the biomass being updated at 1800 s after midnight, while the LAIeff is updated in the slow processes, at midnight
  • Use single scattering values that change over the course of the year...initial tests described below make it seem like this is important
  • to generate single scattering values for all PFTs (so far only values for main tree species in Europe are available, status 21.1.)
  • to introduce calculation of LAI_eff for grass and crops
  • test to make sure that the PFTs are not being split into canopy and bare soil anywhere in the code...for example, set vegmax to 1.0 for PFT 6 and wildly change the bare soil parameters...this should have no effect
  • Validate the multilayer scheme against the RAMI-IV results

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
  • The Pgap implimentation was compared to the result given by Jenny and Vanessa's code, with the same numerical result
  • The new scheme was compared against the old one in v1.9.6.0, and the results are qualitatively similar, but not identical
  • A 20 layer model was tested against the single layer model, giving small differences (a few percent, relative, at midday)
  • We tried to optimize the single scattering and forward efficiency values in the n-layer case to reproduce the average albedo in the 1-layer case, and using a generalised set search a full optimization with 20 layers can take thousands of steps and 200 times longer than doing no-optimization, and only a third of the points are optimised completely (for two layers, it takes about ten times longer than the no-opt case and optimises almost 70% of the timesteps)...using only 10-50 optimization steps results in 1-10% of the points being fully optimized, but looking at a graph of the two runs shows that the differences are really minimal, so we need to test the partial optimization in the new energy budget to see if it makes a real difference
  • Inclusion of the new snow albedo (CLM3) gives realistic trends, with the total albedo spiking after snowfalls and showing diurnal variation with leaves are present, but being flat at other times (the solar angle is incorporated through the use of Pgap, which mostly depends on the canopy)
  • I made use of single scattering albedos that Juliane got from Bernard's inversion scheme for 20 tree species, running tests with the min and max values for single scattering albedo and forward scattering efficiency for both VIS and NIR bands...the MUE for the overal albedo varies by 0.01 to 0.04 albdo units depending on the spectrum, showing that we should take this into account



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

TO DO

CHECK

  • Define all allometric relationships in a single subroutine to increase consistency of the model
  • Only pass prognostic variables in the argument list i.e. ::lai should not be passed as it can be calculated from biomass which is already passed. Same applies for ::height
  • why is lai_target an output variable?
  • can lai_happy be replaced by i.e. 0.5*lai_target in growth_fun_all
  • Externalize variables in resp, growth, prescribe, ...
  • Check the code for +++CHECK+++ and +++TEMP+++
  • Change area rather than number of individuals. Always have 100 individuals but calculate a scalar to adjust the fluxes. Seems easier to initialize then the current approach
  • rewrite equations for grasslands

CAUTION

  • Both resource and allometric allocation make use of the variable pipe_tune2 and pipe_tune3. In 1.9.5.2 these variables are set to 40 and 0.5 respectively. In OCN the values are 55 and 0.65 respectively. Use the appropriate values depending on the tests.
  • The variable ::use_reserve, seems to be consistently used as a flag in the allometric based allocation. However, in the resource-based allocation it is consistently used as a C stock (gC m-2). The value is set in stomate_alloc.f90 and used in stomate_npp.f90.
  • Unexpectedly, the resource based scheme (which should simply reproduce the previous scheme) now has a seasonal cycle for ilabile (The previous scheme does not). However, it does not seem to affect the outcome and it clearly is on purpose as stomate_npp.f90 contains several lines of code dealing with ilabile in the resource based scheme.

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 made up by stomate_alloc.f90 and stomate_npp.f90 (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 2b: The old allocation scheme made up by stomate_growth_res_lim.f90 (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.



ENERGY BUDGET

APPROACH

The aim of this development is to improve the simulation of the energy balance in Orchidee through the implementation of a multi-layer energy balance model that retains implicit coupling with the atmospheric model and with the sub-surface hydrology scheme. The scheme is described in full in the working document 'Towards a multi-layer representation of the energy balance in a land surface model' (contact: James Ryder).

ROUTINES TO BE CHANGED

  • enerbil.f90: Re-write to describe new calculation scheme but with the preservation of existing input and output variables
  • diffuco.f90: Re-write to calculate diffusion co-efficients in new scheme
  • intersurf.f90: Addition of new coupling co-efficients for description of transport between the surface and the LMDz atmospheric model

Attachments (8)