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: 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.

  • 0 is as quiet as it gets

  • > 1 provides more run-time messages

  • > 5 provides ALL run-time messages

All values above 0 will also write a netCDF file of the grid information and perform a grid interpolation test. [default: 0]

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'
  /