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 NCAR and Moha Gharamti of the Data Assimilation Research Section of NCAR.
Streamflow assimilation is an active area of research and provides many interesting research challenges.
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, consult the ./python/experiment
directory.
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.
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: 1 ] |
assimilation_period_seconds | integer | In addition to assimilation_period_days , the number of seconds to advance the model for each assimilation. [default: 0 ] |
lsm_model_choice | character(len=128) | case-insensitive specification of the Land Surface model. Valid values are noahmp and noahmp_36 |
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 input.nml is set with &filter_nml:start_from_restart = .false. . See also Generating the initial ensemble. units: standard deviation of the specified distribution the mean at the value of the state vector element. |
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 : lognormal or gaussian |
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: hydro , parameters , lsm This variable specifies the ordering of the domains. |
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 domain_order |
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'
/