Three schemes are provided here to compute vertical soil moisture profiles.
- Scheme for conceptual soil reserviors (e.g., CFE)
- Schemes for layered soil reservoirs (e.g., LGAR)
- Schemes for topmodel (details are provided below)
For conceptual reservoirs, see the following schematic and algorithm. We use the Clap-Hornberger soil moisture characteristic function here, and soil moisture storage is the main input passed through a BMI.
For layered soil reserviors, the two options include
- constant by layer, and Clap-Horngerger soil moisture characteristic function for the profile below the depth of the last layer
- linearly interpolated profile between consecutive layers, and Clap-Horngerger soil moisture characteristic function for the profile below the depth of the last layer
- (flux-based method) A method using an iterative scheme to first compute watertable depth and then soil moisture profile (Blazkova et al. (2002))
- (deficit-based method) A method using catchment deficit to first compute watertable depth and then soil moisture profile (Franchini et al. (1996)
There are two examples (CFE and Topmodel) for running SoilMoistureProfiles as described below. They assume you have GCC and CMAKE on your machine. These are simple examples and provide a one-way coupling (model --> SoilMoistureProfiles), does not change the functionality of the model, and are only for demonstration purposes.
Option STANDALONE
: An example of usingsoil_storage
(conceptual reservoir; CFE) to computesoil_moisture_profile
Option WITHTOPMODEL
: An example of using topmodel's outputs to computewatertable
andsoil_moisture_profile
git clone https://github.com/NOAA-OWP/SoilMoistureProfiles.git
cd SoilMoistureProfiles
git clone https://github.com/NOAA-OWP/topmodel extern/topmodel (needed for running with Topmodel, i.e., -DWITHTOPMODEL=ON)
mkdir build && cd build
cmake ../ [-DSTANDALONE=ON,-DWITHTOPMODEL=ON] (pick one option, e.g. `cmake ../ -DSTANDALONE=ON`)
make && cd ..
./run_smp.sh [STANDALONE, WITHTOPMODEL] (pick one option)
- Coupling SoilMoistureProfiles to any module (for instance, CFE or SFT) must follow these instructions for building and running. Note separate instructions are provided for building/running in the ngen framework on the SoilFreezeThaw repo.
- Follow this example: couple SMP with SFT
Variable _____________________ | Datatype _______________ | Limits _________________ | Units ____ | Role ___ | Description _____________________________________________________________________ |
---|---|---|---|---|---|
smcmax | double (1D array) | - | - | - | the maximum moisture content (i.e., porosity). Note porosity for layered-based models vary by layers |
b | double | - | - | - | the pore size distribution, beta exponent in Clapp-Hornberger function |
satpsi | double | - | - | - | saturated capillary head (saturated moisture potential) |
soil_z | double (1D array) | - | m | - | vertical resolution of the soil moisture profile (depths from the surface) |
soil_storage_model_depth | double | - | m | - | depth of the soil reservoir model (e.g., CFE). Note: this depth can be different from the depth of the soil moisture profile which is based on soil_z |
soil_storage_model | string | conceptual or layered or topmodel | - | - | if conceptual , conceptual models are used for computing the soil moisture profile (e.g., CFE). If layered , layered-based soil moisture models are used (e.g., LGAR). If topmodel , topmodel's variables are used |
soil_moisture_profile_option | string | constant or linear | - | - | constant for layered-constant profile. linear for linearly interpolated values between two consecutive layers. Needed if soil_storage_model = layered . |
soil_depth_layers | double (1D array) | - | - | - | Absolute depth of soil layers. Needed if soil_storage_model = layered . |
soil_moisture_fraction_depth | double | (0, domain_depth] | m | - | *user specified depth for the soil moisture fraction (default is 40 cm) |
water_table_based_method | string | flux-based or deficit-based | - | - | Needed if soil_storage_model = topmodel . flux-based uses an iterative scheme, and deficit-based uses catchment deficit to compute soil moisture profile |
*Note: SoilMoistureProfiles has a bmi output called soil_moisture_fraction (water in the topsoil over total water in the soil column) needs the depth of the topsoil (soil_moisture_fraction_depth
, default is set to 40 cm -- the top two cells in the soil column of the NWM 3.0)