WRF-Hydro
Overview
The Weather Research and Forecasting Hydrologic Model (WRF-Hydro) is a community modeling system and framework for hydrologic modeling and model coupling. WRF-Hydro is configured to use the Noah-MP Land Surface Model to simulate land surface processes. Combined with DART, the facility is called HydroDART.
The development of HydroDART was a collaboration between James McCreight of the Research Applications Laboratory of NSF NCAR and Moha Gharamti of the Data Assimilation Research Section of NSF NCAR.
Streamflow assimilation is an active area of research and provides many interesting research challenges.
Description of this directory within the DART repository
Contents of the $DARTROOT/models/wrf_hydro/
:
├── ensemble_config_files/
│ # Files which configure ensembles in wrfhydropy.
├── experiment_config_files/
│ # File which configure hydro_dart_py experiments.
├── hydro_dart_py/
│ # Python package/library for configuring and executing experiments.
├── python/
│ # Python scripts for various purposes.
├── R/
│ # R scripts for various purposes.
├── shell_scripts/
│ # Shell scripts for various purposes.
├── templates/
│ # Obsolete?
├── work/
│ # Dart executables build directory and other testing.
├── model_mod.html
│ # The model_mod documentation.
├── model_mod.nml
│ # The model_mod namelist (subsumed by work/input.nml)
├── model_mod.f90
│ # The model_mod code.
├── noah_hydro_mod.f90
│ # Some model_mod interfaces more specific to Noah?
├── create_identity_streamflow_obs.f90
│ # For creating identity streamflow obs for the NHDPlus-based
│ # channel-network configuration of WRF-Hydro.
├── README.rst
# This file.
To set up an experiment
To set up an experiment, consult the ./python/experiment
directory.
Description of external directories on GLADE
The gridded version of the model has bits/bobs in these directories:
/gpfs/fs1/work/jamesmcc/domains/public/croton_NY/Gridded/DOMAIN
/gpfs/fs1/work/jamesmcc/domains/public/croton_NY/Gridded/RESTART
Only the gridcells with flow are retained in the qlink[1,2]
, hlink
variables, so they must be unpacked in EXACTLY the same way as wrfHydo packs
them from the grid to their ‘sparse’ representation.
Namelist
The &model_nml
namelist is read from the input.nml
file. Namelists
start with an ampersand &
and terminate with a slash /
. Character
strings that contain a /
must be enclosed in quotes to prevent them from
prematurely terminating the namelist.
&model_nml
assimilation_period_days = 0
assimilation_period_seconds = 3600
lsm_model_choice = 'noahMP'
model_perturbation_amplitude = 0.5
perturb_distribution = 'lognormal'
max_link_distance = 2000.0
streamflow_4_local_multipliers = 0.0001
debug = 0
domain_order = 'hydro'
domain_shapefiles = 'restart.hydro.nc'
lsm_variables = 'SH2O', 'QTY_SOIL_LIQUID_WATER', '0.0', 'NA', 'NOUPDATE',
'SUBSURFACE_FLUX', 'QTY_SUBSURFACE', '0.0', 'NA', 'NOUPDATE',
'OVERLAND_FLUX', 'QTY_OVERLAND_FLOW', '0.0', 'NA', 'NOUPDATE'
hydro_variables = 'qlink1', 'QTY_STREAM_FLOW', '0.0', 'NA', 'UPDATE',
'z_gwsubbas', 'QTY_AQUIFER_WATER', 'NA', 'NA', 'UPDATE'
parameters = 'qBucketMult', 'QTY_BUCKET_MULTIPLIER', '0.001', '50', 'UPDATE',
'qSfcLatRunoffMult', 'QTY_RUNOFF_MULTIPLIER', '0.001', '50', 'UPDATE'
/
This namelist is read from a file called input.nml
. This namelist provides
control over the assimilation period for the model. All observations within
(+/-) half of the assimilation period are assimilated. The assimilation period
is the minimum amount of time the model can be advanced, and checks are
performed to ensure that the assimilation window is a multiple of the NOAH
model dynamical timestep.
Item |
Type |
Description |
---|---|---|
assimilation_period_days |
integer |
The number of days to advance the model
for each assimilation. [default: |
assimilation_period_seconds |
integer |
In addition to
|
lsm_model_choice |
character(len=128) |
case-insensitive specification of the
Land Surface model. Valid values are
|
model_perturbation_amplitude |
real(r8) |
The amount of noise to add when trying
to perturb a single state vector to
create an ensemble. Only used when
|
perturb_distribution |
character(len=256) |
The switch to determine the distribution
of the perturbations used to create an
initial ensemble from a single model
state. Valid values are :
|
max_link_distance |
real(r8) |
The along-the-stream localization distance. In meters. |
streamflow_4_local_multipliers |
real(r8) |
|
debug |
integer |
The switch to specify the run-time verbosity.
All values above 0 will also write a
netCDF file of the grid information and
perform a grid interpolation test.
[default: |
domain_order |
character(len=256):: dimension(3) |
There are three possible domains to
include in the HydroDART state:
|
domain_shapefiles |
character(len=256):: dimension(3) |
There are input files used to determine
the shape of the input variables and any
geographic metadata.
They must be specified in the same
order as listed in |
lsm_variables |
character(len=32):: dimension(5,40) |
The list of variable names in the NOAH restart file to use to create the DART state vector and their corresponding DART QUANTITY. [see example below] |
hydro_variables |
character(len=32):: dimension(5,40) |
The list of variable names in the channel model file to use to create the DART state vector and their corresponding DART QUANTITY. [see example below] |
parameters |
character(len=32):: dimension(5,40) |
The list of variable names in the parameter file to use to create the DART state vector and their corresponding DART QUANTITY. [see example below] |
The columns of lsm_variables
, hydro_variables
, and parameters
needs
some explanation. Starting with the column 5,
UPDATE
denotes whether or not to replace the variable with the Posterior (i.e.
assimilated) value. Columns 3 and 4 denote lower and upper bounds that should be
enforced when writing to the files used to restart the model. These limits are not
enforced for the DART diagnostic files. Column 2 specifies the relationship between
the netCDF variable name for the model and the corresponding DART QUANTITY.
Support for these QUANTITYs is provided by
running preprocess
with the following namelist settings:
&preprocess_nml
overwrite_output = .true.
input_obs_kind_mod_file = '../../../assimilation_code/modules/observations/DEFAULT_obs_kind_mod.F90'
output_obs_kind_mod_file = '../../../assimilation_code/modules/observations/obs_kind_mod.f90'
input_obs_def_mod_file = '../../../observations/forward_operators/DEFAULT_obs_def_mod.F90'
output_obs_def_mod_file = '../../../observations/forward_operators/obs_def_mod.f90'
input_files = '../../../observations/forward_operators/obs_def_streamflow_mod.f90',
'../../../observations/forward_operators/obs_def_land_mod.f90',
'../../../observations/forward_operators/obs_def_COSMOS_mod.f90'
/