Changes between Version 13 and Version 14 of Branches/Driver_Improvements


Ignore:
Timestamp:
2016-05-26T17:11:28+02:00 (8 years ago)
Author:
aducharne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Branches/Driver_Improvements

    v13 v14  
    77The driver of ORCHIDEE is expected to read forcing files with a very specific temporal structure. 
    88All time information are defined on UTC time. 
    9 The fields read at a certain time step t in the NetCDF file correspond to: 
    10  * the instantaneous value at t+dt of scalar variables :  Temperature, Wind Speed, Air Pressure and Specific Humidity.  
    11  * the mean value between t and t+dt for fluxes : Long and Short Wave incoming Radiation and the Precipitation.  
     9The fields read at a certain time step t0 in the NetCDF file correspond to: 
     10 * the instantaneous value at t0+dt of scalar variables :  Temperature, Wind Speed, Air Pressure and Specific Humidity.  
     11 * the mean value between t0 and t0+dt for fluxes : Long and Short Wave incoming Radiation and the Precipitation.  
    1212Where dt is the time step of the forcing file.  
    1313 
    14 '''AD (26/5/16)''': Note that, in the above case, the time at which we read the forcing is t+dt. Let's introduce an index itau of the forcing records: itau=1 is the first record in the nc file for all variables, etc. 
    15 Imagine we are currently reading the record itau_n, coming juste after the record itau_nm1. These are the notation of dim2driver/read2dim, and we have itau_n=itau_nm1+1. The "time_stamps" corresponding to these two records are separated by dt (the dt between two records, and not dt_sechiba: dt=split*dt_sechiba). To make the link with the above notations of time, the time stamp of the record itau_n is t+dt, and the one of of itau_nm1 is t. 
     14'''AD (26/5/16)''': Note that, in the above case, the time at which we read the forcing is t0+dt. Let's introduce an index itau of the forcing records: itau=1 is the first record in the nc file for all variables, etc. 
     15Imagine we are currently reading the record itau_n, coming juste after the record itau_nm1. These are the notation of dim2driver/read2dim, and we have itau_n=itau_nm1+1. The "time_stamps" corresponding to these two records are separated by dt (the dt between two records, and not dt_sechiba=dt': dt=split*dt'). To make the link with the above notations of time, the time stamp of the record itau_n is t0+dt, and the one of of itau_nm1 is t0. 
    1616 
    17 Now we need to remember where we are in the code, and what we need the forcing for. When we read itau_n, with values corresponding to t+dt, sechiba hasn't yet run between t and t+dt. It has run (or been initialized) up to t, with forcing controlled by the forcing records itau_nm1 and before. '''So when we read the record itau_n corresponding to the time stamp t+dt, we know the state of sechiba at t, the forcing values at t (from itau_nm1), and we want to correctly define the forcing variables over each dt_sechiba between t and t+dt (dt=split*dt_sechiba).''' 
     17Now we need to remember where we are in the code, and what we need the forcing for. When we read itau_n, with values corresponding to t0+dt, sechiba hasn't yet run between t0 and t0+dt. It has run (or been initialized) up to t0, with forcing controlled by the forcing records itau_nm1 and before. '''So when we read the record itau_n corresponding to the time stamp t0+dt, we know the state of sechiba at t0, the forcing values at t0 (from itau_nm1), and we want to correctly define the forcing variables over each dt' between t0 and t0+dt (dt=split*dt').''' 
    1818 
    1919For me, these are general principles which need to be true whichever the forcing if we decide to read together all the variables that have the same time stamp. The fact that fluxes are averages over a period of length dt after or before the time stamp can be dealt with in the above general framework, at the initialisation stage (but the latter is an opinion). 
     
    2121 
    2222== Interpolation ==  
    23   * Instantaneous fields and the Long-Wave Radiation are then linearly interpolated for each model time-step t' (typically 1/2 hour) based on the values available at t and t+dt with t < t' < t+dt. ''Should we not change that for long-wave radiation so that we have one consistent procedure for scalars and another for fluxes ? '' 
     23  * Instantaneous fields and the Long-Wave Radiation are then linearly interpolated for each model time-step t' (typically 1/2 hour) based on the values available at t0 and t0+dt with t0 < t' < t0+dt. ''Should we not change that for long-wave radiation so that we have one consistent procedure for scalars and another for fluxes ? '' 
    2424  * The Precipitation field is downscaled to model's temporal resolution using a step distribution function with one parameter (nb_spread, that is the number of half-hourly time steps over which we spread the precipitation). nb_spread can vary from 1 (all precipitations over a forcing time period (3 ou 6 hours) are put on the first model time step) to SPLIT_DT (number of integration time steps with a forcing time period, in that case, the precipitation are distributed uniformly). By default, nb_spread is set to 1. This default value is not appropriate for all climates and it would make sense to have typical values for various regions of the world (see thesis of T. d'Orgeval.).  
    25   * The Short-Wave radiation is interpolated using a function distribution that corresponds to the solar angle distribution over a forcing time period and conserving the average flux for the [t,t+dt] interval. Under low incidence angles this interpolation gives at times strange values, this needs to be checked and improved. 
     25  * The Short-Wave radiation is interpolated using a function distribution that corresponds to the solar angle distribution over a forcing time period and conserving the average flux for the [t0,t0+dt] interval. Under low incidence angles this interpolation gives at times strange values, this needs to be checked and improved. 
     26 
     27'''AD (26/5/2016):''' I agree on the above general guidelines for interpolation, '''but''' : 
     28- LW should not be interpolated linearly: the mean value over the appropriate interval ([t0,t0+dt] in dim2driver) is the value read at t0+dt ; if we linearly interpolate LW between t0 and t0+dt, the mean value becomes LW(t0)+LW(t0+dt), which is usually different from LW(t0+dt). So if we do a linear interpolation, we change the amount of energy that is received by the surface compared to what is defined in the forcing file.  
     29- The simplest conservative interpolation is to use a uniform function, but it creates "steps". If we wanted to smooth this and remain conservative, we could use a function to constrain the time variations, as it is done with the zenith angle for SW. Based on the physics of LW and the data we have, we could define T4_mean as the mean of Tair^4^  over the 6 (split) dt' in the interpolation period. Then the value of LW(t0+n*dt') = LW(itau_n) * Tair(t0+n*dt')^4^ / T4_mean. I think this is conservative, but it needs to checked. 
     30- Shall we understand that the default spred_prec is one in orchidee_driver ? We recently made a collective choice to take spred_prec=split/2, is it overlooked in orchideedriver? 
     31- For the SW, what are the low incidence angle problems? It must be kept in mind that there is no particular reason why the diurnal cycle of SW should be either very smooth or well centered at noon. We do not deal with extra-terrestrial radiation, but incident SW  at the surface, and the noise induced by clouds can be very large. 
     32- Finally, the graphics below remain mysterious to me and I can't see any clear link with the above principles. 
     33 
    2634 
    2735=== Jan's understanding of the working of dim2driver (Jan 26/05/2016) === 
    28  
    29 For all model time steps (itauin) between the forcing time steps n-1 (all variables in '*_nm1') and n (variables in '*_n') a linear interpolation will be done with the forcing values to obtain the correct value at itauin. There will be 'split' time steps of ORCHIDEE between n-1 and n. Once these 'split' number of time steps have been execute variables *_n will be copied into *_nm1 and the next forcing time step of the file written into *_n. 
    30  
    31 As explained above for all time steps between itauin(n-1) and itauin(n) the interpolation will be correct for instantaneous variables as there is a perfect match between the time step space and the physical time. 
    32  
    33 The result is less predictable for fluxes which are averaged over an interval from which we only know that it contains the physical timestep of n. readdim2.f90 has not analysed the time axis of the fluxes and thus does not know where in this interval n is exactly situated. Only when n is at the centre of the time step will the interpolation be correct. 
    3436 
    3537The graphic below explains probably better the above description. 
     
    3739[[Image(Interpolation_dim2driver.jpeg, width=50%)]] 
    3840 
    39 The figure is especially meant to illustrate that the interpolation for fluxes assumes that the interval of validity of the fluxes is assumed to be between n-3/2 and n-1/2 for variables *_nm1 and n-1/2 and n+1/2 for variables *_n. 
     41The following changes in nomenclature are used in the figure : t has become Tf and thus the forcing considered is between Tf and Tf+1 for the interpolation toward t'. 
     42 
     43The figure is especially meant to illustrate that the interpolation for fluxes assumes that the interval of validity of the fluxes is assumed to be between Tf-1/2 and Tf+1/2 or, t-dt/2 and t+dt/2. 
    4044 
    4145== Add an explicit time information within the forcing files ==