wiki:GroupActivities/Meetings/Retreat20151119/GuidelinesXIOS

Version 4 (modified by nvuilsce, 5 years ago) (diff)

--

XIOS Guidelines

For the moment, calls to XIOS (for writting outputs) in the code of ORCHIDEE completely mimic those that were done to IOIPSL (the old I/O library).
Because XIOS has advanced features (compared to IOIPSL), we propose to take advantages of these features in order to simplify the way that we output variables into ORCHIDEE. Here below, are described some of these features and how we can benefit of them :

Guideline 1 : Id name

With XIOS, we can easily rename any output variable by modifying the field_def file. This is possible without recompiling the code. What we only have to do in the code is to specify a Id name for each variable that is output. By default, we propose that the Id name should be the same as the name of the variable in the code. Here below is an example with the Ground heat flux variable that is output in the thermosoil_main routine (thermosoil.f90 file)

Example:

For the moment, we have line 622

CALL xios_orchidee_send_field("Qg",soilflx)

where Qg is the field id
and soilflx, the local variable in the FORTRAN code

and in field_def:

<field id="Qg" name="Qg" long_name="Ground heat flux" unit="W/m^2"/>

where name is the name of variable in the output file: here "Qg" (because name="Qg")


Using the same name for the Id and the variable in the code, we should have now :
in the code:

CALL xios_orchidee_send_field("soilflx",soilflx)

and in the field_def file:

<field id="soilflx" name="Qg" long_name="Ground heat flux" unit="W/m^2"/>

For variables which are vectors, such as the variable 'carbon'

Guideline 2 : Units

We propose to output variables with the same units

Guideline 2

We do the "CALL xios_orchidee_send_field" in the module where the variable is calculated. If the variable is changed in several places, we do the call in the last XIOS module where it is changed or in sechiba_main, this has to be decided case by case.

Guideline 3

If the variable is only calculated for a specific run case, then we deactivate the output from xios_orchidee.f90 with xios_set_field_attr as for the case not calculated. This leaves us the possibility of having the same file_def_orchidee.xml for different setups. If we forgot, it will work but we will have declared variables in the .nc files without values, which is is troubling. As an exception, the stomate variables are not deactivated in this way, that would be too many exception cases. But since we traditionally separated variables between sechiba_history.nc and stomate_history.nc, we have no problem because we deactivate the whole stomate_history.nc file if stomate is not active.

For example, for the routing variables, we deactivate them if we have no routing. In this case, even if they are in file_def_orchidee.xml, they will not be written. In xios_orchidee:

IF (.NOT. River_routing) THEN
   CALL xios_set_field_attr ("basinmap" enabled = .FALSE.)
...