wiki:Tags/196/ExternalisationParameters/ValidateExternalisation

Version 4 (modified by dsolyga, 9 years ago) (diff)

--

Validate the externalized version

fluxnet site (MARCH 2011)

First of all, we validate the externalization of parameters on a fluxnet site and with IMPOSE_VEG = y.

We consider the following reference simulation (named REF-TEST) with 10% of bare soil and 90% of C3 grass :

# - Fluxnet files path
FluxnetPath=/home/orchidee01/vuichard/AR5/FORCING

# - Number of PFTs :
NbPFTs= 13

#   * ORCHIDEE name for physical parameters on each sites
#   PFT (IMPOSE_VEG), \
#   initial LAI (IMPOSE_VEG)
NameSitesParam= ( SECHIBA_VEGMAX, SECHIBA_LAI )
# by Default : 
# 1) first line is for PFT
# 2) second line is for LAI default for SLOWPROC lai model with : 
#    llaimax = 0.,  8.,  8.,  4., 4.5, 4.5,  4., 4.5,  4.,  2.,  2.,  2.,  2.)

#   * Name of component for each physical parameter described in NameSitesParam
#     (in SECHIBA, STOMATE, DRIVER)
CompSitesParam= ( SECHIBA, SECHIBA )

# Sites descriptions
#       Abbrv,  Filename ,      Inital year (for gregorian calendar) , Length (Y),  \
#param 1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13
Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
     0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9, 0.0, 0.0, 0.0, \
      0.,  8.,  8.,  4., 4.5, 4.5,  4., 4.5,  4.,  2.,  2.,  2.,  2. ) \ 
[SPINUP]
    # SPINUP configuration : 
    # ----------------------
# !! Step of time in N Years !!
# !! The spinup will change if the fluxnet file contains more than one year !!
#    ( N = Number of years contain in fluxnet forcing file ) 
#     each Year * N

# Initialisation for spin-up :
# orchidee with sechiba alone (!!! if ok_stomate == n !!!)
duree_nostomate=0
# orchidee with stomate
duree_inistomate=1
# teststomate (only if duree_nostomate or duree_inistomate > 0)
duree_offlineini=0

# Loop configuration for spin-up :
# The whole job is restarted n_iter times
n_iter=1
# orchidee with sechiba (and stomate if ok_stomate=y below)
duree_sechiba=20
# teststomate
duree_stomate=0
# forcesoil
duree_carbonsol=0

# Finalization for spin-up :
# all orchidee
duree_final=20
# This last parameter must be non-zero.


    # POST configuration : 
    # --------------------
# ATLAS fix parameters :
# Atlas Name : 
AtlasCfg=atlas_FLUXNET_LATHUILE.cfg
#atlas_FLUXNET.cfg
#atlas_FLUXNET_soenke.cfg

# observation_file
observation_file_path='/home/orchidee01/vuichard/AR5/OBS/${Site}.synth.hourly.allvars.nc'
#'${R_BC}/OOL/${config_UserChoices_TagName}/FLUXNET/OLD/${Site}.nc'
#'${R_BC}/OOL/${config_UserChoices_TagName}/FLUXNET/OBS/${Site}_obs_gapfilled.nc'

# old history file
reference_file_path='/home/orchidee01/vuichard/IGCM_OUT/OL2/LATHUILE_HIST_2m/${Site}_sechiba_hist.nc'
# 3 choices : SECHIBA, OK_CO2, OK_STOMATE
#'/dmnfs/cont003/p86manci/VALID_OL/SECHIBA/${Site}_sechiba_hist.nc'

# Modulo for SpinUp years
# by default, only one ATLAS-DIFF will be created 
# between the last step and the first one.
#Modulo=15


[UserChoices]

#
###-- STOMATE flag
#
ok_stomate=y
#
###-- OK_CO2 flag
#
ok_co2=y

#
###-- NEW HYDROL CWRR flag
#
ok_newhydrol=n

#
## DEBUG mode for SPINUP 
#
# This mode keep all SPINUP directory in ARCHIVE
# If disable, all ARCHIVE is automaticly cleaned.
# 
DEBUG_SPIN=n
# If you don't want to keep old spinup steps, but last one
CONSERVE=y

[SubJobParams]
# You can specify here any parameters to be modified in sechiba.def, stomate.def or driver.def for SpinUp Subjobs.
# NEW : due to split of orchidee.def in component specific parameter files,
#       you must add here a prefix for the specific parameter file.
driver_DEBUG_INFO=n
sechiba_LONGPRINT=n
stomate_BAVARD=1
sechiba_ALMA_OUTPUT=y
driver_ALLOW_WEATHERGEN=n
sechiba_SECHIBA_reset_time=y
sechiba_IMPOSE_VEG=y
## To begin with half water stress
#sechiba_HYDROL_HUMR=0.5
# FLUXNET files have hour frequency values.
driver_SPLIT_DT=1

Then we tried to compare the outputs files of the reference job to the following tests :

  1. REF-TEST on 2PFTS : we want to check if the matching array PFT_TO_MTC works correctly. So we have in fluxnet.card :
# - Number of PFTs :
NbPFTs= 2

# Sites descriptions
#       Abbrv,  Filename ,      Inital year (for gregorian calendar) , Length (Y),  \
#param 1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13
Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
      0.1, 0.9, \
      0.0,  2. ) \ 

and in PARAM/driver.def :

NVM = 2

PFT_TO_MTC__01 = 01
PFT_TO_MTC__02 = 10

  1. The second test consists to test if the re-parametrization works correctly.

As there are some few differences between C3 crop and C3 grass, we change the parameters of the C3 crop and we give the values of the C3 grass.

So we turn a C3 crop in a C3 grass. Now we have in fluxnet.card (by the following we only show the changing lines):

# - Number of PFTs :
NbPFTs= 13

# Sites descriptions
#       Abbrv,  Filename ,      Inital year (for gregorian calendar) , Length (Y),  \
#param 1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13
Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
     0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9, 0.0, \
      0.,  8.,  8.,  4., 4.5, 4.5,  4., 4.5,  4.,  2.,  2.,  2.,  2. ) \ 


In driver.def, we only got :

VCMAX_FIX__12 = 60.
VJMAX_FIX__12 = 120.
NATURAL__12 = TRUE
VJMAX_OPT__12 = 160.
TPHOTO_MIN_A__12 = 0.0025  
TPHOTO_MIN_B__12 = 0.1
TPHOTO_MIN_C__12 = -3.25
TPHOTO_OPT_A__12 = 0.0025
TPHOTO_OPT_B__12 = 0.25
TPHOTO_OPT_C__12 = 27.25
TPHOTO_MAX_A__12 =  0.00375
TPHOTO_MAX_B__12 =  0.35
TPHOTO_MAX_C__12 = 41.125
FLAM__12 = .25
LAI_MAX__12 = 2.5
PHENO_TYPE__12 = 4
PHENO_GDD_CRIT_A__12 = 0.03125 
PHENO_GDD_CRIT_B__12 = 6.25
PHENO_GDD_CRIT_C__12 = 270.
HUM_MIN_TIME__12 = 35.
LEAFAGECRIT__12 = 120.
SENESCENCE_HUM__12 = .2
SENESCENCE_TEMP_C__12 = -1.375 
SENESCENCE_TEMP_B__12 = .1
SENESCENCE_TEMP_A__12 = .00375
RSTRUCT_CONST__12 = 2.5

To be sure that we have the real C3 crop, we add this test consisting to write in driver.def ( with the same fluxnet.card) :

NVM = 13

PFT_TO_MTC__01 = 1
PFT_TO_MTC__02 = 2
PFT_TO_MTC__03 = 3
PFT_TO_MTC__04 = 4
PFT_TO_MTC__05 = 5
PFT_TO_MTC__06 = 6
PFT_TO_MTC__07 = 7
PFT_TO_MTC__08 = 8
PFT_TO_MTC__09 = 9
PFT_TO_MTC__10 = 10
PFT_TO_MTC__11 = 11
PFT_TO_MTC__12 = 10
PFT_TO_MTC__13 = 13

in order to see that the system of Metaclasses work well.

  1. The third validation test is the opposite of the first one. We set the C3 grass as the 14th PFT.

We have respectively in fluxnet.card and in driver.def :

# - Number of PFTs :
NbPFTs= 14

# Sites descriptions
#       Abbrv,  Filename ,      Inital year (for gregorian calendar) , Length (Y),  \
#param 1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13
Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
     0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9 \
      0.,  8.,  8.,  4., 4.5, 4.5,  4., 4.5,  4.,  2.,  2.,  2.,  2., 2.) \ 

# Number of vegetation types (by default 13) :
NVM = 14

# PFT_TO_MTC :
# Here is the list of the MTC implememented in the model
# & (/ 'bared ground                      ', &          !  1
# &    'tropical  broad-leaved evergreen  ', &          !  2
# &    'tropical  broad-leaved raingreen  ', &          !  3
# &    'temperate needleleaf   evergreen  ', &          !  4
# &    'temperate broad-leaved evergreen  ', &          !  5
# &    'temperate broad-leaved summergreen', &          !  6
# &    'boreal    needleleaf   evergreen  ', &          !  7
# &    'boreal    broad-leaved summergreen', &          !  8
# &    'boreal    needleleaf   summergreen', &          !  9
# &    '          C3           grass      ', &          ! 10
# &    '          C4           grass      ', &          ! 11
# &    '          C3           agriculture', &          ! 12
# &    '          C4           agriculture'  /)         ! 13

# Give the MTC associated to each PFT
# WARNING : you had to set PFT_TO_MTC (1) = 1
# ie, the first pft ought to be the bare soil
# WARNING : more than one bare soil is prohibited
# if you don't respect these two rules, the job will stop

PFT_TO_MTC__01 = 1
PFT_TO_MTC__02 = 2
PFT_TO_MTC__03 = 3
PFT_TO_MTC__04 = 4
PFT_TO_MTC__05 = 5
PFT_TO_MTC__06 = 6
PFT_TO_MTC__07 = 7
PFT_TO_MTC__08 = 8
PFT_TO_MTC__09 = 9
PFT_TO_MTC__10 = 10
PFT_TO_MTC__11 = 11
PFT_TO_MTC__12 = 12
PFT_TO_MTC__13 = 13 
PFT_TO_MTC__14 = 10

  1. The last test consists to have three PFTs : one bare soil and two C3 grass like this :
# - Number of PFTs :
NbPFTs= 14

# Sites descriptions
#       Abbrv,  Filename ,      Inital year (for gregorian calendar) , Length (Y),  \
#param 1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13
Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
     0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45, 0.0, 0.0, 0.0, 0.45 \
      0.,  8.,  8.,  4., 4.5, 4.5,  4., 4.5,  4.,  2.,  2.,  2.,  2., 2.) \ 

in this case, we spli the C3 grass in two. The corresponding driver.def is :

# Number of vegetation types (by default 13) :
NVM = 14


PFT_TO_MTC__01 = 1
PFT_TO_MTC__02 = 2
PFT_TO_MTC__03 = 3
PFT_TO_MTC__04 = 4
PFT_TO_MTC__05 = 5
PFT_TO_MTC__06 = 6
PFT_TO_MTC__07 = 7
PFT_TO_MTC__08 = 8
PFT_TO_MTC__09 = 9
PFT_TO_MTC__10 = 10
PFT_TO_MTC__11 = 11
PFT_TO_MTC__12 = 12
PFT_TO_MTC__13 = 13 
PFT_TO_MTC__14 = 10

Results

The comparisons are OK.

Veget Map

  1. We tried to validate th externalized version of ORCHIDEE with a standard job : copy of OOL_SEC_STO on a region, using the standard veget map.

We wanted to know if we obtained the same results than the standard version of ORCHIDEE.

We compare the results with the "original" version (the version of ORCHIDEE without the externalization, dating from july 2010). Here again, the comparisons between the output files for sechiba and stomate are OK.

  1. With a new veget map : we made a script in python which can generate a standard veget map (based on Olson classification) with a floating number

of PFTs.

NEW VALIDATION TESTS (OCT-NOV 2011)

After merging the tag 1.9.5.2 into the externalized version, I launched some new validation tests.

There are three kind of tests : Fluxnet (local scale), regional and global.

These tests are not part of a scientific validation of the model but only technical ones. As I have only reorganized the code, I have to check if I obtain the same results in both cases.

I used the same forcing files for all tests : ncc forcing ( for the year 1982) except for the test with the weather generator (CRU for the year 1985).

My referenced version was the TAG 1.9.5.2 with corrections of the two following bugs : black_carbon and herbivorory.
The tools used are cdo (cdo diffv command), a validation script (ksh + ferret) and ferret (difference maps).

FLUXNET sites

I launched the following tests :

  1. FLUXNET_REF_OCT2011 (launched with the referenced version)
  2. VAL_FLUXNET_2PFTS_OCT
  3. VAL_FLUXNET_C3crop_to_C3grass
  4. VAL_FLUXNET_C3GRASS_in_14
  5. VAL_FLUXNET_C3GRASS_SPLIT

The four last ones were launched with the externalized version. The setup of these jobs are the same defined in March (see above) :

VAL_FLUXNET_2PFTS_OCT setup : 2 PFTS
VAL_FLUXNET_C3crop_to_C3grass setup : 13 PFTs with PFT_12 reparametrized as PFT 10
VAL_FLUXNET_C3GRASS_in_14 setup : 14 PFTs with PFT 14 as C3 grass
VAL_FLUXNET_C3GRASS_SPLIT setup : 14 PFTs with C3grass shared between PFT 10 and PFT 14

In order to check in teststomate was correctly adapted to the externalized version, I launched and compared the two following jobs :

  1. FLUXNET_TESTSTOMATE (referenced version) : 13 PFTs with vegetation only on PFT1 and PFT 10
  2. EXT_TESTSTOMATE_FLUXNET : 2PFTS

Both have the following setup :

# Initialisation for spin-up :
# orchidee with sechiba alone (!!! if ok_stomate == n !!!)
duree_nostomate=0
# orchidee with stomate
duree_inistomate=1
# teststomate (only if duree_inistomate > 0)
duree_offlineini=20

# Loop over ORCHIDEE runs (used for spin-up)
# The whole job is restarted n_iter times
n_iter=1
# orchidee with sechiba (and stomate if ok_stomate=y below)
duree_sechiba=20
# teststomate
duree_stomate=0
# forcesoil
duree_carbonsol=0

# Final run (full ORCHIDEE)
# This last parameter must be non-zero.
duree_final=20
    

The last configuration to test was FORCESOIL. So I launched the following jobs :

  1. TAG_FLUX_FOR (referenced version) : 13 PFTs
  2. EXT_FLUX_FOR : 13 PFTs

The setup was :

# Initialisation for spin-up :
# orchidee with sechiba alone (!!! if ok_stomate == n !!!)
duree_nostomate=0
# orchidee with stomate
duree_inistomate=1
# teststomate (only if duree_inistomate > 0)
duree_offlineini=0

# Loop over ORCHIDEE runs (used for spin-up)
# The whole job is restarted n_iter times
n_iter=1
# orchidee with sechiba (and stomate if ok_stomate=y below)
duree_sechiba=20
# teststomate
duree_stomate=0
# forcesoil
duree_carbonsol=10000

# Final run (full ORCHIDEE)
# This last parameter must be non-zero.
duree_final=20

Comparisons

The comparisons by the three tools were all OK. All results are available in a directory called VALIDATE_OCTOBRE_2011 on obelix.

Regional scale

Only one test was made over a region of Europe (France I think). The setup was :

  • Forcing file : Ncc, 1982
  • Length : 1Y, daily outputs
  • SECHIBA and STOMATE activated, no DGVM
  • LAND_USE map
  • Launched on Titane

The referenced run is in the directory TAG_FRANCE_TEST. The "externalized" run is in EXT_FRANCE_TEST.
Here again, the comparisons were OK.

Global scale

At the global scale, two comparisons were made in order to check STOMATE, STOMATE+DGVM. First of all, I wanted to check if I got the same results when stomate only is activated by the two jobs:

  1. TAG_STOD1Y (the referenced job)
  2. EXT_STODAY1Y (launched with ORCHIDEE_EXT)

The common setup is :

  • Forcing file : Ncc, 1982
  • Length : 1Y, daily outputs
  • SECHIBA and STOMATE activated, no DGVM
  • LAND_USE map
  • Launched on Titane, compiled with the check-bounds option

After that, I want to check the dgvm with the following jobs :

  1. TAG_DGVM_1Y (reference)
  2. EXT_DGVM_1Y

The common setup is :

  • Forcing file : Ncc, 1982
  • Length : 1Y, annual outputs
  • SECHIBA, STOMATE and DGVM activated
  • LAND_USE map
  • Launched on Titane, compiled with the check-bounds option

New parameterization for weather.f90

In the externalized version, weather has the same physical parametrisations, which was not the case before. In order to see the differences between the two parameterisations, i launched the two following jobs :

  1. TAG_WEATHERGEN : 13 PFTs, "old (or classical)" parametrisations
  2. EXT_WEATHERGEN : 13 PFTs, "new" parametrisations

The common setup is :

  • Forcing file : CRU, 1985
  • Length : 1Y, monthly outputs
  • SECHIBA, STOMATE and DGVM activated
  • LAND_USE map
  • Launched on Titane, compiled with the check-bounds option

Test new map

I launched a job which use a veget map with 14 PFTs. This map was created with the python script available on ORCHIDEE/TOOLS.

The vegetation map has no scientific purpose : I only split the fraction occupied by the PFT 6 with the PFT 14. Setup used for the job MAP_14PFTS :

  • Veget_map : Carte_14pfts_split_pft6.nc
  • Forcing file : ncc, 1982
  • Length : 1Y, annual outputs
  • SECHIBA, STOMATE
  • LAND_USE map
  • Launched on Titane, compiled with the check-bounds option

Diverse

Other simulations were made in order to check the consistency of the code :

  • TEST_GLOBAL_SOIL : Only the bare soil (so only one PFT), 1Y, monthly outputs, NCC, 1982
  • TEST_FORCESOIL_14PFTS : fluxnet test with forcesoil activated and 14 PFTS. I used the following setup :
    Sites= ( NL-Loo, NL-Loo.nc   ,          1996,                         11     , \
         0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45, 0.0, 0.0, 0.0, 0.45 )\
    

and

 # Initialisation for spin-up :
# orchidee with sechiba alone (!!! if ok_stomate == n !!!)
duree_nostomate=0
# orchidee with stomate
duree_inistomate=1
# teststomate (only if duree_inistomate > 0)
duree_offlineini=0

# Loop over ORCHIDEE runs (used for spin-up)
# The whole job is restarted n_iter times
n_iter=1
# orchidee with sechiba (and stomate if ok_stomate=y below)
duree_sechiba=20
# teststomate
duree_stomate=0
# forcesoil
duree_carbonsol=10000

# Final run (full ORCHIDEE)
# This last parameter must be non-zero.
duree_final=20
    

Configurations not tested

I haven't verify the following configurations :

  • SECHIBA only
  • routing / new hydrology
  • Coupling with LMDZ
  • Old vegetation maps