HydPy-Evap-RET-TW2002 (Turc-Wendling reference evapotranspiration, 2002)¶
The primary purpose of evap_ret_tw2002 is to serve as a submodel that provides
estimates of potential grass reference evapotranspiration following ATV-DVWK (2002),
as demonstrated for lland_dd. However, you can also use it as a stand-alone model,
as it does not require interaction with a main model. The following examples make use
of this stand-alone functionality.
evap_ret_tw2002 requires two submodels. One must follow the RadiationModel_V1 or
the RadiationModel_V2 interface and provide global radiation data; the other must
follow the TempModel_V1 or the TempModel_V2 interface and provide temperature data.
Integration tests¶
Note
When new to HydPy, consider reading section Integration Tests first.
Application model evap_ret_tw2002 requires no input from an external model and does
not supply any data to an outlet sequence. Hence, assigning a model instance to a
blank Element instance is sufficient:
>>> from hydpy import Element
>>> from hydpy.models.evap_ret_tw2002 import *
>>> parameterstep()
>>> element = Element("element")
>>> element.model = model
The Turc-Wendling equation requires input data aggregated over at least one day. We start with a daily simulation step:
>>> from hydpy import IntegrationTest, pub
>>> pub.timegrids = "2000-07-06", "2000-07-07", "1d"
We set the parameter and input values in agreement with the
hourly simulation example of evap_ret_fao56, which allows for
comparison with the results of the FAO reference evapotranspiration model applied to
data of station Uccle (Brussels, Belgium), as reported in example 18 of
Allen et al. (1998):
>>> nmbhru(1)
>>> hruarea(1.0)
>>> evapotranspirationfactor(1.0)
>>> hrualtitude(100.0)
evap_ret_fao56 has no counterpart for the CoastFactor parameter. We set its value from
our gut feeling to 0.9, as Brussels is not directly adjacent to the coastline (0.6) but
also not that far away from it (1.0):
>>> coastfactor(0.9)
A meteo_glob_io and a meteo_temp_io submodel provide the required global radiation
and temperature data:
>>> with model.add_radiationmodel_v2("meteo_glob_io"):
... pass
>>> with model.add_tempmodel_v2("meteo_temp_io"):
... temperatureaddend(1.0)
Now, we can initialise an IntegrationTest object and set the required meteorological
input:
>>> test = IntegrationTest(element)
>>> test.dateformat = "%Y-%d-%m"
>>> model.tempmodel.sequences.inputs.temperature.series = 15.9
>>> model.radiationmodel.sequences.inputs.globalradiation.series = 255.367464
For the example at hand, there is an excellent agreement with the result calculated by
evap_ret_fao56 and given by Allen et al. (1998), which is 3.75 mm/d:
>>> test()
Click to see the table
Instead of IO submodels, one could use the main model of evap_ret_tw2002 for
providing the temperature data or a “real” submodel that calculates the global
radiation data. The first option is not feasible here due to not using
evap_ret_tw2002 as a submodel but as a stand-alone model. But we can demonstrate the
latter option by using, for example, meteo_glob_fao56, which we also configure in
agreement with the hourly simulation example. Hence,
meteo_glob_fao56 reproduces the global radiation above so that evap_ret_tw2002
calculates the same potential evapotranspiration value:
>>> with model.add_radiationmodel_v1("meteo_glob_fao56"):
... latitude(50.8)
... angstromconstant(0.25)
... angstromfactor(0.5)
>>> test = IntegrationTest(element)
>>> test.dateformat = "%Y-%d-%m"
>>> model.tempmodel.sequences.inputs.temperature.series = 15.9
>>> model.radiationmodel.sequences.inputs.sunshineduration.series = 9.25
>>> test()
Click to see the table
evap_ret_tw2002 is also applicable to sub-daily simulation step sizes. Then, it
still evaluates the Turc-Wendling equation for daily data, namely the averages of the
air temperature and the global radiation of the last 24 hours, and converts the
resulting daily evapotranspiration to the actual simulation step size. To demonstrate
this, we prepare a simulation period of 24 hours:
>>> pub.timegrids = "2000-08-03", "2000-08-04", "1h"
We switch back to IO submodels and take the hourly air temperature and global radiation
data from the hourly simulation, land example of
evap_aet_morsim:
>>> with model.add_radiationmodel_v2("meteo_glob_io"):
... pass
>>> with model.add_tempmodel_v2("meteo_temp_io"):
... temperatureaddend(0.0)
>>> test = IntegrationTest(element)
>>> test.dateformat = "%Y-%d-%m %H:00"
>>> model.tempmodel.sequences.inputs.temperature.series = (
... 16.9, 16.6, 16.4, 16.3, 16.0, 15.9, 16.0, 16.6, 17.4, 19.0, 20.3, 21.4, 21.3,
... 21.8, 22.9, 22.7, 22.5, 21.9, 21.4, 20.7, 19.4, 17.8, 17.0, 16.4)
>>> model.radiationmodel.sequences.inputs.globalradiation.series = (
... 0.0, 0.0, 0.0, 0.0, 1.943686, 21.932441, 57.256187, 109.332844, 170.949152,
... 311.762624, 501.583299, 615.018727, 626.544326, 496.133417, 419.520994,
... 387.887354, 278.496873, 137.138608, 51.080715, 13.632816, 0.185943, 0.0, 0.0,
... 0.0)
Due to averaging over the last 24 hours, we must provide the corresponding logged data for the 24 hours preceding the simulation period. We take them from the hourly simulation, land example, too:
>>> test.inits = (
... (logs.loggedglobalradiation,
... [0.0, 0.0, 0.0, 0.0, 0.0, 27.8, 55.6, 138.9, 222.2, 305.6, 333.3, 388.9,
... 527.8, 444.4, 250.0, 222.2, 166.7, 111.1, 55.6, 27.8, 0.0, 0.0, 0.0, 0.0]),
... (logs.loggedairtemperature,
... [[13.2], [13.2], [13.1], [12.6], [12.7], [13.0], [13.5], [14.8], [16.2],
... [17.7], [18.8], [19.4], [20.4], [21.0], [21.5], [21.2], [20.4], [20.7],
... [20.2], [19.7], [19.0], [18.0], [17.5], [17.1]]))
The calculated reference evapotranspiration does not follow the diurnal pattern of the meteorological input. Instead, it changes only gradually with the moving averages of air temperature and global radiation, so that, for example, the values of the last night hours even exceed those around noon:
>>> test()
Click to see the table
After 24 hours, the moving averages cover exactly the simulated day. Hence, multiplying the last hourly value by 24 gives the reference evapotranspiration one would calculate for this day in a simulation with a daily step size:
>>> from hydpy import round_
>>> round_(24.0 * fluxes.referenceevapotranspiration.series[-1, 0])
2.737713
Method features¶
- class hydpy.models.evap_ret_tw2002.Model[source]¶
Bases:
Main_TempModel_V1,Main_TempModel_V2A,Main_RadiationModel_V1,Main_RadiationModel_V2,Sub_ETModel,PETModel_V1HydPy-Evap-RET-TW2002 (Turc-Wendling reference evapotranspiration, 2002).
- The following “run methods” are called in the given sequence during each simulation step:
Process_RadiationModel_V1Let a submodel that complies with theRadiationModel_V1interface preprocess all eventually required data.Calc_GlobalRadiation_V1Query the global radiation from a submodel that complies with theRadiationModel_V1,RadiationModel_V2,RadiationModel_V3, orRadiationModel_V4interface.Calc_AirTemperature_V1Let a submodel that complies with theTempModel_V1orTempModel_V2interface determine the air temperature of the individual hydrological response units.Update_LoggedAirTemperature_V1Log the air temperature values of the last 24 hours.Calc_DailyAirTemperature_V1Calculate the average air temperature of the last 24 hours.Update_LoggedGlobalRadiation_V1Log the global radiation values of the last 24 hours.Calc_DailyGlobalRadiation_V1Average the global radiation of the last 24 hours.Calc_ReferenceEvapotranspiration_V2Calculate reference evapotranspiration after Turc-Wendling.Adjust_ReferenceEvapotranspiration_V1Adjust the previously calculated reference evapotranspiration.Calc_MeanReferenceEvapotranspiration_V1Calculate the average reference evapotranspiration.
- The following interface methods are available to main models using the defined model as a submodel:
Determine_PotentialEvapotranspiration_V1Interface method that applies the complete application model by executing all “run methods”.Get_PotentialEvapotranspiration_V1Get the current reference evapotranspiration from the selected hydrological response unit.Get_MeanPotentialEvapotranspiration_V1Get the averaged reference evapotranspiration.
- The following “additional methods” might be called by one or more of the other methods or are meant to be directly called by the user:
Calc_AirTemperature_TempModel_V1Query hydrological response units’ air temperature from a main model referenced as a sub-submodel and follows theTempModel_V1interface.Calc_AirTemperature_TempModel_V2Let a submodel that complies with theTempModel_V2interface determine the air temperature of the hydrological response units.
- Users can hook submodels into the defined main model if they satisfy one of the following interfaces:
TempModel_V1Pure getter interface for using main models as sub-submodels.TempModel_V2Simple interface for determining the temperature in one step.RadiationModel_V1Simple interface for determining all data in one step.
- DOCNAME = ('Evap-RET-TW2002', 'Turc-Wendling reference evapotranspiration, 2002')¶
- tempmodel¶
Required submodel that complies with one of the following interfaces: TempModel_V1 or TempModel_V2.
- radiationmodel¶
Required submodel that complies with one of the following interfaces: RadiationModel_V1 or RadiationModel_V2.
- REUSABLE_METHODS = ()¶
Parameter features¶
- class hydpy.models.evap_ret_tw2002.ControlParameters(master: Parameters[TM_co], cls_fastaccess: type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)¶
Bases:
ControlParametersControl parameters of model evap_ret_tw2002.
- The following classes are selected:
NmbHRUThe number of separately modelled hydrological response units [-].WaterA flag that indicates whether the individual zones are water areas or not.SoilA flag that indicates whether soil evapotranspiration is relevant for the individual zones.PlantA flag that indicates whether the individual zones contain any vegetation.HRUAreaThe area of each hydrological response unit [km²].HRUAltitudeThe altitude of each hydrological response unit [m].CoastFactorThe “coast factor” of Turc-Wendling’s reference evapotranspiration equation [-].EvapotranspirationFactorThe adjustment factor for potential evapotranspiration [-].
- class hydpy.models.evap_ret_tw2002.DerivedParameters(master: Parameters[TM_co], cls_fastaccess: type[FastAccessParameter] | None = None, cymodel: CyModelProtocol | None = None)¶
Bases:
DerivedParametersDerived parameters of model evap_ret_tw2002.
- The following classes are selected:
HRUAreaFractionThe area fraction of each hydrological response unit [-].DaysThe length of the actual simulation step size in days [d].NmbLogEntriesThe number of log entries required for a memory duration of 24 hours [-].
Sequence features¶
- class hydpy.models.evap_ret_tw2002.FactorSequences(master: Sequences[TM_co], cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)¶
Bases:
FactorSequencesFactor sequences of model evap_ret_tw2002.
- The following classes are selected:
AirTemperatureAir temperature [°C].DailyAirTemperatureThe average air temperature in the last 24 hours [°C].
- class hydpy.models.evap_ret_tw2002.FluxSequences(master: Sequences[TM_co], cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)¶
Bases:
FluxSequencesFlux sequences of model evap_ret_tw2002.
- The following classes are selected:
GlobalRadiationGlobal radiation [W/m²].DailyGlobalRadiationAverage global radiation in the last 24 hours [W/m²].ReferenceEvapotranspirationReference (grass) evapotranspiration [mm/T].MeanReferenceEvapotranspirationMean reference evapotranspiration [mm/T].
- class hydpy.models.evap_ret_tw2002.LogSequences(master: Sequences[TM_co], cls_fastaccess: type[TypeFastAccess_co] | None = None, cymodel: CyModelProtocol | None = None)¶
Bases:
LogSequencesLog sequences of model evap_ret_tw2002.
- The following classes are selected:
LoggedAirTemperatureLogged air temperature [°C].LoggedGlobalRadiationLogged global radiation [W/m²].
Auxiliary features¶
- class hydpy.models.evap_ret_tw2002.Masks[source]¶
Bases:
MasksMasks applicable to
evap_ret_tw2002.- The following classes are selected: