Skip to content

Commit

Permalink
Add support to select PET algorithm (#202)
Browse files Browse the repository at this point in the history
* fix canopex time units
* added evaporation and ow_evaporation parameters.
* added evaporation and rain_snow_fraction to ostrich wps interfaces
* fix initialization of hbvec
* revert changes to how lat lon are parsed to fix notebook

Co-authored-by: richardarsenault <[email protected]>
  • Loading branch information
huard and richardarsenault authored Mar 10, 2020
1 parent 6160442 commit 782b161
Show file tree
Hide file tree
Showing 22 changed files with 493 additions and 55 deletions.
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ PYTHON_VERSION = 3.6

# Choose Anaconda installer depending on your OS
ANACONDA_URL = https://repo.continuum.io/miniconda
RAVEN_URL = http://www.civil.uwaterloo.ca/jmai/raven/raven-rev240.zip
RAVEN_URL = http://www.civil.uwaterloo.ca/jmai/raven/raven-rev245.zip
RAVEN_SRC = $(CURDIR)/src/RAVEN
OSTRICH_URL = http://www.civil.uwaterloo.ca/jmai/raven/Ostrich_2017-12-19_plus_progressJSON.zip
OSTRICH_SRC = $(CURDIR)/src/OSTRICH
Expand Down Expand Up @@ -97,9 +97,9 @@ raven_dev:
@echo "Unzipping RAVEN ..."
@test -d $(RAVEN_SRC) || unzip -j $(CURDIR)/src/RAVEN.zip -d "$(RAVEN_SRC)"
@echo "Compiling RAVEN ..."
@test -f $(RAVEN_SRC)/raven_rev.exe || $(MAKE) -C $(RAVEN_SRC) -j4
@test -f $(RAVEN_SRC)/Raven.exe || $(MAKE) -C $(RAVEN_SRC) -j4
@test -d bin || mkdir bin
@-bash -c "cp $(RAVEN_SRC)/raven_rev.exe ./bin/raven"
@-bash -c "cp $(RAVEN_SRC)/Raven.exe ./bin/raven"

.PHONY: ostrich_dev
ostrich_dev:
Expand Down
346 changes: 346 additions & 0 deletions docs/source/notebooks/CompleteChainCANOPEX.ipynb

Large diffs are not rendered by default.

63 changes: 34 additions & 29 deletions raven/models/emulators.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from pathlib import Path

from raven.models import Raven, Ostrich
from .rv import RV, RVT, RVI, Ost, RavenNcData
from .rv import RV, RVT, RVI, Ost, RavenNcData, MonthlyAverage

nc = RavenNcData
std_vars = ("pr", "rainfall", "prsn", "tasmin", "tasmax", "tas", "evspsbl", "water_volume_transport_in_river_channel")
Expand All @@ -20,7 +20,7 @@ def __init__(self, *args, **kwds):

self.rvp = RV(params=GR4JCN.params(None, None, None, None, None, None))
self.rvt = RVT(**{k: nc() for k in std_vars})
self.rvi = RVI()
self.rvi = RVI(rain_snow_fraction="RAINSNOW_DINGMAN", evaporation="PET_OUDIN")
self.rvh = RV(name=None, area=None, elevation=None, latitude=None, longitude=None)
self.rvd = RV(one_minus_CEMANEIGE_X2=None, GR4J_X1_hlf=None)

Expand All @@ -35,7 +35,7 @@ class GR4JCN_OST(Ostrich, GR4JCN):

def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvi = RVI(suppress_output=True)
self.rvi.suppress_output = True
self.txt = Ost(algorithm='DSS',
max_iterations=50,
lowerBounds=GR4JCN.params(None, None, None, None, None, None),
Expand All @@ -59,7 +59,7 @@ def __init__(self, *args, **kwds):
self.rvp = RV(params=MOHYSE.params(*((None,) * 8)))
self.rvh = RV(name=None, area=None, elevation=None, latitude=None, longitude=None, hrus=MOHYSE.hrus(None, None))
self.rvt = RVT(**{k: nc() for k in std_vars})
self.rvi = RVI()
self.rvi = RVI(evaporation="PET_MOHYSE", rain_snow_fraction="RAINSNOW_DATA")
self.rvd = RV(par_rezi_x10=None)

def derived_parameters(self):
Expand All @@ -72,7 +72,7 @@ class MOHYSE_OST(Ostrich, MOHYSE):

def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvi = RVI(suppress_output=True)
self.rvi.suppress_output = True
self.txt = Ost(algorithm='DSS',
max_iterations=50,
lowerBounds=MOHYSE.params(None, None, None, None, None, None, None, None),
Expand Down Expand Up @@ -101,7 +101,7 @@ def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvp = RV(params=HMETS.params(*((None,) * len(HMETS.params._fields))))
self.rvt = RVT(**{k: nc() for k in std_vars})
self.rvi = RVI()
self.rvi = RVI(evaporation="PET_OUDIN", rain_snow_fraction="RAINSNOW_DATA")
self.rvd = RV(TOPSOIL_m=None, PHREATIC_m=None, SUM_MELT_FACTOR=None, SUM_SNOW_SWI=None, TOPSOIL_hlf=None,
PHREATIC_hlf=None)

Expand All @@ -120,7 +120,7 @@ class HMETS_OST(Ostrich, HMETS):

def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvi = RVI(suppress_output=True)
self.rvi.suppress_output = True
self.txt = Ost(algorithm='DSS',
max_iterations=50,
lowerBounds=HMETS.params(None, None, None, None, None, None, None, None, None, None, None,
Expand Down Expand Up @@ -161,30 +161,43 @@ class HBVEC(GR4JCN):
templates = tuple((Path(__file__).parent / 'raven-hbv-ec').glob("*.rv?"))

params = namedtuple('HBVECParams', ('par_x{:02}'.format(i) for i in range(1, 22)))
mae = namedtuple('MeanAverageEvap', ('x{:02}'.format(i) for i in range(1, 13)))
mat = namedtuple('MeanAverageTemp', ('x{:02}'.format(i) for i in range(1, 13)))

def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvp = RV(params=HBVEC.params(*((None,) * len(HBVEC.params._fields))))
self.rvd = RV(one_plus_par_x15=None, par_x11_half=None, mae=HBVEC.mae, mat=HBVEC.mat)
self.rvd = RV(one_plus_par_x15=None, par_x11_half=None, monthly_ave_evaporation=MonthlyAverage(),
monthly_ave_temperature=MonthlyAverage())
self.rvt = RVT(**{k: nc() for k in std_vars})
self.rvh = RV(name=None, area=None, elevation=None, latitude=None, longitude=None)
self.rvi = RVI(evaporation="PET_FROMMONTHLY", ow_evaporation="PET_FROMMONTHLY",
rain_snow_fraction="RAINSNOW_HBV")

# TODO: Support index specification and unit changes.
def derived_parameters(self):
import xarray as xr

self.rvd['one_plus_par_x15'] = self.rvp.params.par_x15 + 1.0
self.rvd['par_x11_half'] = self.rvp.params.par_x11 / 2.0
self._monthly_average()

# TODO: Support index specification and unit changes.
def _monthly_average(self):
import xarray as xr
if self.rvi.evaporation == "PET_FROMMONTHLY" or self.rvi.ow_evaporation == "PET_FROMMONTHLY":
# If this fails, it's likely the input data is missing some necessary variables (e.g. evap).
if self.rvt.tas.path is not None:
tas = xr.open_dataset(self.rvt.tas.path)
else:
tasmax = xr.open_dataset(self.rvt.tasmax.path)[self.rvt.tasmax.var_name]
tasmin = xr.open_dataset(self.rvt.tasmin.path)[self.rvt.tasmin.var_name]
tas = (tasmax + tasmin) / 2.

if self.rvt.evspsbl.path is not None:
evap = xr.open_dataset(self.rvt.evspsbl.path)[self.rvt.evspsbl.var_name]

tasmax = xr.open_dataset(self.rvt.tasmax.path)[self.rvt.tasmax.var_name]
tasmin = xr.open_dataset(self.rvt.tasmin.path)[self.rvt.tasmin.var_name]
evap = xr.open_dataset(self.rvt.evspsbl.path)[self.rvt.evspsbl.var_name]
mat = tas.groupby('time.month').mean().values
mae = evap.groupby('time.month').mean().values

tas = (tasmax + tasmin) / 2.
self.rvd.mat = self.mat(*tas.groupby('time.month').mean().values)
self.rvd.mae = self.mae(*evap.groupby('time.month').mean().values)
self.rvd.update({"monthly_ave_temperature": MonthlyAverage("Temperature", mat),
"monthly_ave_evaporation": MonthlyAverage("Evaporation", mae)},
force=True)


class HBVEC_OST(Ostrich, HBVEC):
Expand All @@ -193,7 +206,7 @@ class HBVEC_OST(Ostrich, HBVEC):

def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.rvi = RVI(suppress_output=True)
self.rvi.suppress_output = True
self.low = HBVEC.params
self.high = HBVEC.params
self.txt = Ost(algorithm='DSS',
Expand All @@ -206,15 +219,7 @@ def __init__(self, *args, **kwds):

# TODO: Support index specification and unit changes.
def derived_parameters(self):
import xarray as xr

tasmax = xr.open_dataset(self.rvt.tasmax.path)[self.rvt.tasmax.var_name]
tasmin = xr.open_dataset(self.rvt.tasmin.path)[self.rvt.tasmin.var_name]
evap = xr.open_dataset(self.rvt.evspsbl.path)[self.rvt.evspsbl.var_name]

tas = (tasmax + tasmin) / 2.
self.rvd.mat = self.mat(*tas.groupby('time.month').mean().values)
self.rvd.mae = self.mae(*evap.groupby('time.month').mean().values)
self._monthly_average()


def get_model(name):
Expand Down
5 changes: 2 additions & 3 deletions raven/models/ostrich-hbv-ec/raven-hbv-ec.rvt.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
:RainCorrection par_x20 # HBV_PAR_20 == RFCF
:SnowCorrection par_x21 # HBV_PAR_21 == SFCF

# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
:MonthlyAveEvaporation, {mae.x01}, {mae.x02}, {mae.x03}, {mae.x04}, {mae.x05}, {mae.x06}, {mae.x07}, {mae.x08}, {mae.x09}, {mae.x10}, {mae.x11}, {mae.x12}
:MonthlyAveTemperature, {mat.x01}, {mat.x02}, {mat.x03}, {mat.x04}, {mat.x05}, {mat.x06}, {mat.x07}, {mat.x08}, {mat.x09}, {mat.x10}, {mat.x11}, {mat.x12}
{monthly_ave_evaporation}
{monthly_ave_temperature}

{pr}
{rainfall}
Expand Down
4 changes: 2 additions & 2 deletions raven/models/raven-gr4j-cemaneige/raven-gr4j-cemaneige.rvi
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
:SoilModel SOIL_MULTILAYER 4
:Routing ROUTE_NONE
:CatchmentRoute ROUTE_DUMP
:Evaporation PET_OUDIN
:RainSnowFraction RAINSNOW_DINGMAN
:Evaporation {evaporation} # PET_OUDIN
:RainSnowFraction {rain_snow_fraction} # RAINSNOW_DINGMAN
:PotentialMeltMethod POTMELT_DEGREE_DAY
:OroTempCorrect OROCORR_SIMPLELAPSE
:OroPrecipCorrect OROCORR_SIMPLELAPSE
Expand Down
6 changes: 3 additions & 3 deletions raven/models/raven-hbv-ec/raven-hbv-ec.rvi
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@
:Routing ROUTE_NONE
:CatchmentRoute TRIANGULAR_UH

:Evaporation PET_FROMMONTHLY
:OW_Evaporation PET_FROMMONTHLY
:Evaporation {evaporation} # PET_FROM_MONTHLY
:OW_Evaporation {ow_evaporation} # PET_FROM_MONTHLY
:SWRadiationMethod SW_RAD_DEFAULT
:SWCloudCorrect SW_CLOUD_CORR_NONE
:SWCanopyCorrect SW_CANOPY_CORR_NONE
:LWRadiationMethod LW_RAD_DEFAULT
:RainSnowFraction RAINSNOW_HBV
:RainSnowFraction {rain_snow_fraction} # RAINSNOW_HBV
:PotentialMeltMethod POTMELT_HBV
:OroTempCorrect OROCORR_HBV
:OroPrecipCorrect OROCORR_HBV
Expand Down
6 changes: 3 additions & 3 deletions raven/models/raven-hbv-ec/raven-hbv-ec.rvt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
:RainCorrection {params.par_x20} # HBV_PAR_20 == RFCF
:SnowCorrection {params.par_x21} # HBV_PAR_21 == SFCF

# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
:MonthlyAveEvaporation, {mae.x01}, {mae.x02}, {mae.x03}, {mae.x04}, {mae.x05}, {mae.x06}, {mae.x07}, {mae.x08}, {mae.x09}, {mae.x10}, {mae.x11}, {mae.x12}
:MonthlyAveTemperature, {mat.x01}, {mat.x02}, {mat.x03}, {mat.x04}, {mat.x05}, {mat.x06}, {mat.x07}, {mat.x08}, {mat.x09}, {mat.x10}, {mat.x11}, {mat.x12}
{monthly_ave_evaporation}
{monthly_ave_temperature}

{pr}
{rainfall}
{prsn}
Expand Down
2 changes: 1 addition & 1 deletion raven/models/raven-hmets/raven-hmets.rvi
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

:PotentialMeltMethod POTMELT_HMETS
:RainSnowFraction {rain_snow_fraction}
:Evaporation PET_OUDIN
:Evaporation {evaporation} # PET_OUDIN
:CatchmentRoute ROUTE_DUMP
:Routing ROUTE_NONE

Expand Down
2 changes: 1 addition & 1 deletion raven/models/raven-mohyse/raven-mohyse.rvi
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
:PotentialMeltMethod POTMELT_DEGREE_DAY
:Routing ROUTE_NONE
:CatchmentRoute ROUTE_GAMMA_CONVOLUTION
:Evaporation PET_MOHYSE
:Evaporation {evaporation} # PET_MOHYSE
:DirectEvaporation
:RainSnowFraction {rain_snow_fraction}

Expand Down
46 changes: 46 additions & 0 deletions raven/models/rv.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ class MyModel(RV):
rain_snow_fraction_options = ("RAINSNOW_DATA", "RAINSNOW_DINGMAN", "RAINSNOW_UBC", "RAINSNOW_HBV", "RAINSNOW_HARDER",
"RAINSNOW_HSPF")

evaporation_options = ("PET_CONSTANT", "PET_PENMAN_MONTEITH", "PET_PENMAN_COMBINATION", "PET_PRIESTLEY_TAYLOR",
"PET_HARGREAVES", "PET_HARGREAVES_1985", "PET_FROMMONTHLY", "PET_DATA", "PET_HAMON_1961",
"PET_TURC_1961", "PET_MAKKINK_1957", "PET_MONTHLY_FACTOR", "PET_MOHYSE", "PET_OUDIN")


class RVFile:

Expand Down Expand Up @@ -319,6 +323,20 @@ def __str__(self):
return self.pat.format(**kwds)


class MonthlyAverage(RV):
pat = ":MonthlyAve{var}, {data}"

def __init__(self, var=None, data=None):
self.var = var
self.data = data

def __str__(self):
if self.var is None:
return ""
out = self.pat.format(var=self.var, data=', '.join([str(d) for d in self.data]))
return out


class RVT(RV):
def __init__(self, **kwargs):
self._nc_index = None
Expand Down Expand Up @@ -367,6 +385,8 @@ def __init__(self, **kwargs):
self._end_date = None
self._now = None
self._rain_snow_fraction = "RAINSNOW_DATA"
self._evaporation = None
self._ow_evaporation = None
self._duration = 1
self._time_step = 1.0
self._evaluation_metrics = 'NASH_SUTCLIFFE RMSE'
Expand Down Expand Up @@ -498,6 +518,32 @@ def rain_snow_fraction(self, value):
else:
raise ValueError(f"Value should be one of {rain_snow_fraction_options}.")

@property
def evaporation(self):
"""Evaporation scheme"""
return self._evaporation

@evaporation.setter
def evaporation(self, value):
v = value.upper()
if v in evaporation_options:
self._evaporation = v
else:
raise ValueError(f"Value {v} should be one of {evaporation_options}.")

@property
def ow_evaporation(self):
"""Open-water evaporation scheme"""
return self._ow_evaporation

@ow_evaporation.setter
def ow_evaporation(self, value):
v = value.upper()
if v in evaporation_options:
self._ow_evaporation = v
else:
raise ValueError(f"Value {v} should be one of {evaporation_options}.")


class Ost(RV):
def __init__(self, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion raven/processes/wps_hydrobasins_shape_selection.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def _handler(self, request, response):
level = 12 # request.inputs['level'][0].data
lakes = True # request.inputs['lakes'][0].data
collect_upstream = request.inputs['aggregate_upstream'][0].data
lon, lat = map(float, request.inputs['location'][0].data.split(','))
lon, lat = parse_lonlat(request.inputs['location'][0].data)
bbox = (lon, lat, lon, lat)

shape_url = tempfile.NamedTemporaryFile(prefix='hybas_', suffix='.gml', delete=False,
Expand Down
2 changes: 1 addition & 1 deletion raven/processes/wps_ostrich_gr4j_cemaneige.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,6 @@ class OstrichGR4JCemaNeigeProcess(OstrichProcess):
inputs = [wio.ts, wio.nc_spec, lowerBounds, upperBounds, wio.algorithm, wio.max_iterations, wio.start_date,
wio.end_date,
wio.duration, wio.run_name, wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation,
wio.random_seed, wio.suppress_output]
wio.random_seed, wio.suppress_output, wio.evaporation, wio.rain_snow_fraction]

keywords = ["Ostrich", "Calibration", "DDS"]
2 changes: 1 addition & 1 deletion raven/processes/wps_ostrich_hbv_ec.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,6 @@ class OstrichHBVECProcess(OstrichProcess):
'upperBounds': HBVEC_OST.params}
inputs = [wio.ts, wio.nc_spec, lowerBounds, upperBounds, wio.algorithm, wio.max_iterations, wio.start_date,
wio.end_date, wio.duration, wio.run_name, wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation,
wio.random_seed, wio.suppress_output]
wio.random_seed, wio.suppress_output, wio.rain_snow_fraction, wio.evaporation, wio.ow_evaporation]

keywords = ["Ostrich", "Calibration", "DDS"]
2 changes: 1 addition & 1 deletion raven/processes/wps_ostrich_hmets.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,6 @@ class OstrichHMETSProcess(OstrichProcess):
'upperBounds': HMETS_OST.params}
inputs = [wio.ts, wio.nc_spec, lowerBounds, upperBounds, wio.algorithm, wio.max_iterations, wio.start_date,
wio.end_date, wio.duration, wio.run_name, wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation,
wio.random_seed, wio.suppress_output, wio.rain_snow_fraction]
wio.random_seed, wio.suppress_output, wio.rain_snow_fraction, wio.evaporation]

keywords = ["Ostrich", "Calibration", "DDS"]
2 changes: 1 addition & 1 deletion raven/processes/wps_ostrich_mohyse.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,6 @@ class OstrichMOHYSEProcess(OstrichProcess):
inputs = [wio.ts, wio.nc_spec, lowerBounds, upperBounds, hrusupperBounds, hruslowerBounds, wio.algorithm,
wio.max_iterations, wio.start_date, wio.end_date,
wio.duration, wio.run_name, wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation,
wio.random_seed, wio.suppress_output, wio.rain_snow_fraction]
wio.random_seed, wio.suppress_output, wio.rain_snow_fraction, wio.evaporation]

keywords = ["Ostrich", "Calibration", "DDS"]
3 changes: 2 additions & 1 deletion raven/processes/wps_raven_gr4j_cemaneige.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@ class RavenGR4JCemaNeigeProcess(RavenProcess):
tuple_inputs = {'params': GR4JCN.params}

inputs = [wio.ts, wio.nc_spec, params, wio.start_date, wio.end_date, wio.duration, wio.run_name,
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.nc_index]
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.nc_index, wio.evaporation,
wio.rain_snow_fraction]
3 changes: 2 additions & 1 deletion raven/processes/wps_raven_hbv_ec.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,5 @@ class RavenHBVECProcess(RavenProcess):
tuple_inputs = {'params': HBVEC.params}

inputs = [wio.ts, wio.nc_spec, params, wio.start_date, wio.end_date, wio.duration, wio.run_name,
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation]
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.rain_snow_fraction, wio.evaporation,
wio.ow_evaporation]
3 changes: 2 additions & 1 deletion raven/processes/wps_raven_hmets.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,5 @@ class RavenHMETSProcess(RavenProcess):
tuple_inputs = {'params': HMETS.params}

inputs = [wio.ts, wio.nc_spec, params, wio.start_date, wio.end_date, wio.duration, wio.run_name,
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.rain_snow_fraction]
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.rain_snow_fraction, wio.evaporation,
]
2 changes: 1 addition & 1 deletion raven/processes/wps_raven_mohyse.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ class RavenMOHYSEProcess(RavenProcess):
tuple_inputs = {'params': MOHYSE.params, 'hrus': MOHYSE.hrus}

inputs = [wio.ts, wio.nc_spec, params, hrus, wio.start_date, wio.end_date, wio.duration, wio.run_name,
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.rain_snow_fraction]
wio.name, wio.area, wio.latitude, wio.longitude, wio.elevation, wio.rain_snow_fraction, wio.evaporation]
13 changes: 13 additions & 0 deletions raven/processes/wpsio.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,19 @@
allowed_values=rv.rain_snow_fraction_options,
min_occurs=0)

evaporation = LiteralInput('evaporation', "Evaporation scheme",
abstract="Algorithm used to compute potential evapotranspiration (PET).",
data_type='string',
allowed_values=rv.evaporation_options,
min_occurs=0)

ow_evaporation = LiteralInput('ow_evaporation', "Open-water evaporation scheme",
abstract="Algorithm used to compute potential evapotranspiration (PET) over open "
"water",
data_type='string',
allowed_values=rv.evaporation_options,
min_occurs=0)

nc_spec = LiteralInput('nc_spec', "NetCDF input file specifications",
abstract="Configuration of individual netCDF input files, such as `linear_transform`"
"and `time_shift`. Should be passed as a dictionary keyed by variable, e.g. `tas` "
Expand Down
Loading

0 comments on commit 782b161

Please sign in to comment.