Skip to content
Back to skills

PRMS

ASecurity

**Package**: `hydrocraft-prms` v1.0.0 **Model**: PRMS v5.1.0 (USGS Precipitation-Runoff Modeling System) **Created by**: Jianyun Zhang Research Group, Hohai University **Last updated**: 2026-03-25 **Stats**: 5 tools | 7 skill documents | 18 diagnostic triplets | ~2,000 lines of validated Python **Validation status**: `dissected` ---

  • 200 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 11, 2026
devopspythongobashdebugginggitbackendperformancedocumentation

Works with

  • cli

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add lzwei196/KISS---Knowledge-Infrastructure-for-Scientific-Simulation --skill PRMS --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of PRMS?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for PRMS
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lzwei196-prms/badge)](https://www.skillsdirectory.com/skills/lzwei196-prms)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
> **MANDATORY EXECUTION POLICY** — READ BEFORE PROCEEDING
>
> You MUST run the **actual model binary or package** described in this document.
> If the model fails to import, compile, or execute, you MUST:
> 1. Check `diagnostics/triplets.yaml` for a matching error pattern
> 2. Try the fix suggested in the triplet's `remedy` section
> 3. If still failing, report the error to the user with full details
>
> You MUST NOT substitute a simplified Python formula, regression equation,
> or hand-coded approximation in place of the real model.
>
>
> Before starting, run: `python preflight_check.py` (in this KI directory)
> to verify that the model binary/package and required data are available.
>
> **DEBUGGING PROTOCOL** — When something goes wrong, follow this order:
> 1. **Check triplets** — `diagnostics/triplets.yaml` may already cover this error
> 2. **Read official docs** — The model's own documentation for expected formats/units
> 3. **Find working examples** — Check `outputs/` or the model's shipped test data
> 4. **Fix the tool** — With knowledge of what "correct" looks like
>
> Do NOT write custom debug scripts. The answers are in the docs and examples.

<!-- KI-MAP:BEGIN (projected by generate_skill_map.py — edit the KI, not this table) -->
## KI map — what to read, and when

| when you need | read | why |
|---|---|---|
| FIRST, always | `preflight_check.py` | run it (`python preflight_check.py`): proves env/binary/data are usable and emits a machine-readable `PREFLIGHT_REPORT=` line. Do not debug a run that never had a healthy environment. |
| to run the pipeline stages | `tools/` (5 tools) | the executable pipeline. Read each tool's argparse (`--help`) before composing a command; SKILL.md's stage table says which tool serves which stage. |
| before running a stage | `docs/s*_*.md` (8 stage docs) | per-stage procedure, verification and traps — the how-to that SKILL.md's overview compresses. |
| on ANY error, before debugging | `diagnostics/triplets.yaml` (18 entries) | symptom → diagnosis → remedy for this model's known failure modes. Check here FIRST; the answer usually exists. Never renumber or rewrite entries. |
| to know what an output IS | `dag.yaml` | the model's identity: every output's medium, units, `validation_rank` (1 = the headline variable) and observability. Scoring and obs-binding read THIS — when asked 'what does this model predict', the dag is the answer, not a guess. |
| when building inputs / parsing outputs | `docs/format_spec.yaml` | exact I/O shapes + `known_issues`, projected from dag + triplets. Regenerate with `ki_tools_common/generate_format_spec.py` after changing either — never hand-edit. |
| to judge a run's skill | `docs/validation_convention.yaml` | how this model's field judges it validated: per-`dag_variable` metrics, directions and CITED pass-bands. A run is graded against these, not against intuition. |
| for claims and thresholds | `docs/gathered_papers.json` (21 papers) + `docs/papers_index.md` | the literature this KI is judged by; each entry's `text_path` is fetched full text in the central paper cache. `role: benchmark` marks the model's own skill paper. |
| for a machine-readable summary | `knowledge_infrastructure.yaml` | the manifest (package, pipeline, validation tier, counts) — projected by `ki_tools_common/generate_ki_manifest.py`; regenerate after structural changes, never hand-edit. |

*Projected 2026-08-17 from the KI's actual contents — 9 components present. Refresh: `python3 ki_tools_common/generate_skill_map.py --ki_dir <this KI>`.*
<!-- KI-MAP:END -->

<!-- KI-TOOL-INDEX:BEGIN (projected by generate_skill_map.py — the discoverability contract: every public tool, exact path; PURPOSE stays human-authored elsewhere) -->
### Executable tool index (projected — complete by construction)

Every public tool in this KI, by exact path. What each is FOR lives in the
human-written Tool Inventory above; `--help` on any of these prints its arguments.

| tool (exact path) | invocation |
|---|---|
| `tools/convert_forcing_to_prms.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/convert_forcing_to_prms.py --help` |
| `tools/convert_params_to_prms.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/convert_params_to_prms.py --help` |
| `tools/generate_control_file.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/generate_control_file.py --help` |
| `tools/parse_prms_output.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/parse_prms_output.py --help` |
| `tools/run_prms.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/run_prms.py --help` |

*5 public tools; `_`-prefixed helpers and packaging files excluded.*
<!-- KI-TOOL-INDEX:END -->

# PRMS v5.1.0 (Precipitation-Runoff Modeling System) — Knowledge Infrastructure

**Package**: `hydrocraft-prms` v1.0.0
**Model**: PRMS v5.1.0 (USGS Precipitation-Runoff Modeling System)
**Created by**: Jianyun Zhang Research Group, Hohai University
**Last updated**: 2026-03-25
**Stats**: 5 tools | 7 skill documents | 18 diagnostic triplets | ~2,000 lines of validated Python
**Validation status**: `dissected`

---

## Data Preparation

### Forcing data

**Data Sources**: Use `from ki_tools_common.load_forcing import load_daily_forcing` for CMFD/MSWX/NASA POWER.

**Data Validation Reference**: See `data_ki/CMFD/SKILL.md` for CMFD unit documentation and known traps.
See `data_ki/HWSD/SKILL.md` for soil property documentation.
See `data_ki/ObservedQ/SKILL.md` for observed discharge data.


## Overview

This knowledge infrastructure enables autonomous simulation of watershed hydrology using the USGS Precipitation-Runoff Modeling System (PRMS) v5.1.0 on any basin, **without manual data preparation**. The 5 validated tools replace the standard manual PRMS workflow with a Python pipeline that integrates directly with HydroCraft's forcing, soil, and routing infrastructure.

**What PRMS does**: Deterministic, distributed-parameter, physically-based watershed model. Simulates:
- Precipitation distribution (rain/snow partitioning by HRU, lapse rate methods)
- Temperature distribution (station-based or gridded climate-by-HRU)
- Solar radiation estimation (degree-day or cloud-cover methods)
- Potential evapotranspiration (Jensen-Haise, Hamon, Hargreaves-Samani, Penman-Monteith, Priestley-Taylor)
- Canopy interception (rain and snow on vegetated surfaces)
- Snow dynamics (energy-balance snowpack accumulation and melt)
- Surface runoff (variable-source-area: SMIDX or CAREA methods)
- Soil zone moisture accounting (infiltration, ET, recharge, interflow)
- Groundwater flow (linear reservoir conceptualization)
- Streamflow routing (Muskingum or simple addition)
- Depression storage (optional closed/open surface depressions)
- Cascading flow between HRUs (topographic routing of overland + subsurface flow)

**Key architectural feature**: PRMS uses the Modular Modeling System (MMS) framework. The C-language MMF core handles parameter I/O, module dispatch, and time stepping. All physical process modules are in Fortran 90. The model is configured via three file types: control file, parameter file(s), and data file.

**Unit system**: PRMS internally works in **US customary units**: temperatures in degrees Fahrenheit, precipitation in inches/day, areas in acres, elevations in feet (configurable), streamflow in cubic feet per second (cfs). This is a critical difference from most global datasets (metric). The tools handle all conversions.

---

## Installation

### Binary

```
PRMS v5.1.0:  source/repo/prms/prms_hpc
Version:      5.1.0 (05/01/2020)
Platform:     Linux x86-64, gfortran + gcc
Source:       github.com/nhm-usgs/prms
```

### Build from Source

```bash
cd source/repo
make          # Builds mmf library + prms executable
ls prms/prms_hpc   # Output binary
```

### Dependencies

```
gcc (C compiler for MMF framework)
gfortran (Fortran 90 for process modules)
libnetcdf + libnetcdff (NetCDF output support)
libhdf5 (HDF5 backend for NetCDF4)
```

### Python dependencies (all in HydroCraft venv)

```
numpy, pandas, xarray, matplotlib, pyyaml
```

---

## Execution

### Command Line Interface

```bash
# Basic run (control file specifies everything)
./prms_hpc -C/path/to/control_file

# Flags
-C<path>        # Path to control file (REQUIRED, no space after -C)
-batch          # Batch mode (default, suppress GUI)
-print          # Print parameters and variables, then exit
-por            # Run for period of record in data file
-set <var> <val> # Override control variable
-MAXDATALNLEN N # Max data line length (default 256)
-debug N        # Debug level
```

### Three Required Input Files

1. **Control file** — Master configuration: module selection, file paths, time period
2. **Parameter file(s)** — Physical parameters for each HRU (area, elevation, soil, etc.)
3. **Data file** — Time series of observed forcing (precip, temperature, streamflow)

---

## Pipeline (7 stages)

| # | Stage | Tool(s) | Description |
|---|-------|---------|-------------|
| 0 | Configuration | (manual) | Basin selection, period, module choices |
| 1 | Forcing preparation | `convert_forcing_to_prms` | Global gridded data to PRMS data file (unit conversions) |
| 2 | Parameter preparation | `convert_params_to_prms` | Soil/land use data to PRMS parameter file |
| 3 | Control file generation | `generate_control_file` | Assemble control file with paths and settings |
| 4 | Model execution | `run_prms` | Execute PRMS binary with preflight validation |
| 5 | Output analysis | `parse_prms_output` | Parse output files to CSV, compute metrics |

### Parallelism

Stages 1, 2 can run in parallel after stage 0.
Stage 3 depends on stages 1 and 2 (needs file paths).
Stage 4 depends on stage 3.
Stage 5 depends on stage 4.

---

## Tools Reference

| Tool | Stage | Script Path | Lines | Purpose |
|------|-------|-------------|------:|---------|
| `convert_forcing_to_prms` | s1 | `tools/convert_forcing_to_prms.py` | 420 | CMFD/ERA5/MSWX to PRMS data file (C->F, mm->in, m/s->cfs) |
| `convert_params_to_prms` | s2 | `tools/convert_params_to_prms.py` | 380 | HWSD/SOILGRIDS + DEM to PRMS parameter file |
| `generate_control_file` | s3 | `tools/generate_control_file.py` | 300 | Build PRMS control file |
| `run_prms` | s4 | `tools/run_prms.py` | 250 | Run PRMS with validation |
| `parse_prms_output` | s5 | `tools/parse_prms_output.py` | 350 | Parse stat/CSV output, compute NSE/KGE/PBIAS |

**Total**: 5 tools, ~1,700 lines of validated Python code.

---

## Input File Formats

### Control File Format

The control file is a plain-text file with `####` delimiters. Each variable has a key, size, type code, and value(s).

```
PRMS control file
####
start_time
6
1
1980
10
1
0
0
0
####
end_time
6
1
2010
9
30
0
0
0
####
param_file
1
4
./input/hru.param
####
data_file
1
4
./input/basin.data
####
model_mode
1
4
PRMS
####
precip_module
1
4
climate_hru
####
temp_module
1
4
climate_hru
####
et_module
1
4
potet_jh
####
solrad_module
1
4
ddsolrad
####
srunoff_module
1
4
srunoff_smidx
####
strmflow_module
1
4
strmflow
####
transp_module
1
4
transp_tindex
```

**Type codes**: 1=long integer, 2=float, 3=double, 4=string

### Parameter File Format

```
Written by PRMS parameter tool
Version: PRMS parameter tool v1.0
** Dimensions **
####
nhru
10
####
nsegment
3
####
nobs
1
** Parameters **
####
hru_area
1
nhru
10
2
100.5
200.3
...
####
hru_elev
1
nhru
10
2
1500.0
1600.5
...
```

**Dimension format**: `####`, dimension name, dimension value (NO count line between name and value).

**File header**: Two lines before `** Dimensions **` (info string + version string). The reader consumes both before searching for `** Dimensions **`.

**Parameter format**: `####`, parameter name, number of dimension names, dimension name(s), total number of values, type code (1=int, 2=float, 3=double, 4=string), then values one per line.

**Dimension assignments**: gwflow_coef/gwstor_init/gwstor_min/gwsink_coef use `ngw`. ssr2gw_rate/ssr2gw_exp/ssstor_init use `nssr`. Most other per-HRU params use `nhru`.

### Data File Format

```
PRMS data file for Test Basin
tmax 1
tmin 1
precip 1
runoff 1
####
1980 10 1 0 0 0 55.4 32.1 0.00 10.5
1980 10 2 0 0 0 58.2 34.5 0.12 12.3
1980 10 3 0 0 0 52.1 30.8 0.45 15.7
```

Header: info string, variable declarations (name + count), `####` delimiter, then daily values: year month day hour min sec val1 val2 ...

### CBH (Climate-By-HRU) Files

When using `climate_hru` module, forcing is provided per-HRU in separate files:

```
tmax 10           # variable_name nhru
########################################
1980 10 1 0 0 0 55.4 56.2 54.8 57.1 55.9 56.5 54.2 55.8 56.9 57.3
1980 10 2 0 0 0 58.2 59.1 57.5 60.0 58.7 59.4 57.1 58.5 59.8 60.2
```

---

## Unit Trap Table

This is the most critical section. PRMS uses US customary units internally. All global datasets use metric.

| Variable | PRMS Internal Unit | Common Source Unit | Conversion | Trap |
|----------|-------------------|-------------------|------------|------|
| Temperature (tmax, tmin) | degrees Fahrenheit | degrees Celsius | F = C * 9/5 + 32 | Off by ~50 if unconverted |
| Precipitation | inches/day | mm/day | in = mm / 25.4 | 25.4x too much precip |
| Elevation | feet (default, elev_units=0) | meters | ft = m / 0.3048 | Lapse rate errors |
| Area (hru_area) | acres | km2 or m2 | acres = km2 * 247.105 | Water balance wrong |
| Streamflow (runoff) | cfs (default, runoff_units=0) | m3/s (cms) | cfs = cms / 0.028317 | Calibration mismatch |
| Solar radiation | Langleys/day | W/m2 | Ly = W/m2 * 0.0864 | Affects ET and snow |
| Wind speed | m/s | m/s | No conversion needed | — |
| Humidity | percentage (0-100) | fraction (0-1) | % = fraction * 100 | Extreme ET if wrong |
| Latitude | decimal degrees | decimal degrees | No conversion needed | — |
| Longitude | degrees East | degrees East | No conversion needed | — |
| Snow depth | inches | mm or cm | in = mm / 25.4 | — |
| Pan evaporation | inches/day | mm/day | in = mm / 25.4 | — |
| Soil moisture max | inches | mm | in = mm / 25.4 | Soil dries instantly |
| Slope | decimal fraction | degrees or % | — | Use tan(degrees) |

## Unit Conversion Table

This table restates the model-facing unit conversions used by the PRMS pipeline. PRMS internally works in US customary units; source datasets and observed records are commonly metric.

| Variable | Source unit | Model unit | Conversion | Type |
|----------|-------------|------------|------------|------|
| Temperature (`tmax`, `tmin`) | degrees Celsius | degrees Fahrenheit | F = C * 9/5 + 32 | additive + multiplicative |
| Precipitation | mm/day | inches/day | in = mm / 25.4 | multiplicative |
| Elevation | meters | feet when `elev_units=0` | ft = m / 0.3048 | multiplicative |
| HRU area (`hru_area`) | km2 | acres | acres = km2 * 247.105 | multiplicative |
| Streamflow (`runoff`) | m3/s (cms) | cfs when `runoff_units=0` | cfs = cms / 0.028317 | multiplicative |
| Solar radiation | W/m2 | Langleys/day | Ly = W/m2 * 0.0864 | multiplicative |
| Wind speed | m/s | m/s | no conversion | none |
| Humidity | fraction (0-1) | percentage (0-100) | percent = fraction * 100 | multiplicative |
| Latitude | decimal degrees | decimal degrees | no conversion | none |
| Longitude | degrees East | degrees East | no conversion | none |
| Snow depth | mm | inches | in = mm / 25.4 | multiplicative |
| Pan evaporation | mm/day | inches/day | in = mm / 25.4 | multiplicative |
| Soil moisture max | mm | inches | in = mm / 25.4 | multiplicative |
| Slope | degrees or percent | decimal fraction | use decimal fraction directly; convert degrees with tangent before use | convention |

### Internal Conversion Constants (from basin.f90)

```fortran
INCH2CM = 2.54
INCH2MM = 25.4
INCH2M = 0.0254
MM2INCH = 1.0 / 25.4    ! = 0.03937
FEET2METERS = 0.3048
METERS2FEET = 1.0 / 0.3048  ! = 3.28084
CFS2CMS_CONV = 0.028316847
FT2_PER_ACRE = 43560.0
```

---

## Module Selection Guide

### Temperature Distribution

| Module | When to Use | Input |
|--------|-------------|-------|
| `temp_1sta` | Single station, lapse rate adjustment | Station tmax/tmin in data file |
| `temp_laps` | Multiple stations, lapse rate | Station data + elevations |
| `temp_dist2` | Multiple stations, inverse distance | Station data + locations |
| `climate_hru` | Pre-gridded data per HRU (CBH files) | Separate tmax/tmin files |
| `ide_dist` | Inverse-distance-elevation | Station data |
| `xyz_dist` | XYZ distance weighting | Station data |

### Precipitation Distribution

| Module | When to Use | Input |
|--------|-------------|-------|
| `precip_1sta` | Single station | Station precip in data file |
| `precip_laps` | Lapse rate adjustment | Station data + elevations |
| `precip_dist2` | Multiple stations | Station data + locations |
| `climate_hru` | Pre-gridded data per HRU (CBH files) | Separate precip file |

### Potential Evapotranspiration

| Module | Data Required | Best For |
|--------|--------------|----------|
| `potet_jh` | Tmax, Tmin | General use, data-sparse areas |
| `potet_hamon` | Tmax, Tmin | Simple, temperature-only |
| `potet_hs` | Tmax, Tmin | Hargreaves-Samani, arid regions |
| `potet_pt` | Tmax, Tmin, humidity, wind | Priestley-Taylor, humid regions |
| `potet_pm` | Tmax, Tmin, humidity, wind | Penman-Monteith, best physics |
| `potet_pan` | Pan evaporation data | When pan data available |

### Streamflow Routing

| Module | When to Use |
|--------|-------------|
| `strmflow` | Simple summation, no channel routing |
| `strmflow_in_out` | Pass-through routing |
| `muskingum` | Muskingum channel routing |
| `muskingum_lake` | Muskingum with lake routing |

### Surface Runoff

| Module | Method |
|--------|--------|
| `srunoff_smidx` | Non-linear soil moisture index |
| `srunoff_carea` | Linear contributing area |

---

## Critical Domain Knowledge

These non-obvious facts cause **silent failures** if violated.

### 1. Temperature MUST be in Fahrenheit (dt_001)

PRMS expects all temperatures in degrees Fahrenheit. Global datasets (ERA5, CMFD, MSWX) provide Celsius. If you feed Celsius directly, snow never accumulates (20C interpreted as 20F = -6.7C... but actually 20C = 68F), and the rain/snow partitioning fails completely. The `tmax_allsnow` parameter defaults to 32F.

### 2. Precipitation MUST be in inches/day (dt_002)

PRMS expects daily precipitation in inches. CMFD gives mm/3hr, ERA5 gives m/timestep. If you feed mm/day directly, the basin receives 25.4x too much precipitation, causing extreme flooding.

### 3. Elevation units matter for lapse rates (dt_003)

The `elev_units` parameter (0=feet, 1=meters) controls how lapse rate corrections are applied. If your elevations are in meters but `elev_units=0`, lapse rates are applied as if the elevation difference is in feet (3.28x too small), producing nearly flat temperature fields.

### 4. HRU area MUST be in acres (dt_004)

The `hru_area` parameter is in acres. If you use km2 without converting (1 km2 = 247.105 acres), the water balance is wrong by orders of magnitude.

### 5. Control file `-C` flag has NO space (dt_005)

The command line requires `-C/path/to/control` with NO space between `-C` and the path. Using `-C /path/to/control` (with space) treats `/path/to/control` as a separate argument and fails silently.

### 6. Data file column order must match header (dt_006)

The data file header declares variables and their sizes. The data columns MUST appear in the exact same order. PRMS does not match by name — it reads positionally after the `####` delimiter.

### 7. Parameter file dimensions must be declared first (dt_007)

In the parameter file, all dimensions (nhru, nsegment, etc.) must appear in the `** Dimensions **` section before any parameters in `** Parameters **`. Dimensions referenced by parameters must exist.

### 8. CBH files require specific header format (dt_008)

Climate-by-HRU files must have exactly one header line (`variable_name nhru_count`) followed by a `########` delimiter line, then data. Extra blank lines or comments break the reader.

---

## Key Dimensions

| Dimension | Description | Typical Range |
|-----------|-------------|---------------|
| `nhru` | Number of Hydrologic Response Units | 1 - 100,000+ |
| `nsegment` | Number of stream segments | 1 - nhru |
| `ngw` | Number of groundwater reservoirs (= nhru) | = nhru |
| `nssr` | Number of subsurface reservoirs (= nhru) | = nhru |
| `nobs` | Number of streamflow observation stations | 0 - 10 |
| `ntemp` | Number of temperature stations | 0 - 50 |
| `nrain` | Number of precipitation stations | 0 - 50 |
| `nsol` | Number of solar radiation stations | 0 - 10 |
| `nsub` | Number of subbasins | 0 - nhru |
| `nmonths` | Months in year (always 12) | 12 |
| `ndepl` | Number of snow depletion curves | 1 - 10 |

---

## Key Parameters (per HRU)

| Parameter | Unit | Description | Typical Range |
|-----------|------|-------------|---------------|
| `hru_area` | acres | Area of each HRU | 1 - 50,000 |
| `hru_elev` | elev_units (ft or m) | Mean elevation | 0 - 15,000 |
| `hru_lat` | degrees | Latitude | -90 to 90 |
| `hru_type` | none | Type (0=inactive, 1=land, 2=lake, 3=swale) | 0-3 |
| `cov_type` | none | Cover type (0=bare, 1=grass, 2=shrub, 3=tree, 4=conifer) | 0-4 |
| `covden_sum` | fraction | Summer vegetation cover density | 0-1 |
| `covden_win` | fraction | Winter vegetation cover density | 0-1 |
| `hru_percent_imperv` | fraction | Fraction impervious area | 0-0.99 |
| `soil_moist_max` | inches | Maximum soil moisture capacity | 1-20 |
| `soil_rechr_max` | inches | Maximum recharge zone capacity | 0.5-10 |
| `soil_type` | none | Soil type (1=sand, 2=loam, 3=clay) | 1-3 |
| `gwflow_coef` | fraction/day | GW linear flow coefficient | 0.001-0.5 |
| `slowcoef_lin` | fraction/day | Linear interflow coefficient | 0.001-0.5 |
| `fastcoef_lin` | fraction/day | Linear preferential flow coefficient | 0.001-1.0 |
| `ssr2gw_rate` | fraction/day | Subsurface to GW transfer rate | 0.001-0.5 |
| `smidx_coef` | fraction | Surface runoff SMIDX coefficient | 0.001-0.06 |
| `smidx_exp` | 1/inch | Surface runoff SMIDX exponent | 0.1-0.5 |
| `tmax_allsnow` | temp_units | Tmax below which all precip is snow | 32 F |
| `tmax_allrain` | temp_units | Tmax above which all precip is rain | 38 F |

---

## Output Description

This section restates `dag.yaml`. If this section and `dag.yaml` ever disagree, `dag.yaml` wins.

**Headline output**: `basin_actet` — Basin-average actual evapotranspiration (inches)

| Output variable (dag `var`) | Validation rank | Unit | Description |
|-----------------------------|----------------:|------|-------------|
| `basin_actet` | 1 | inches | Basin-average actual evapotranspiration |
| `basin_cfs` | dag output | see `dag.yaml` | other dag output |
| `basin_stflow_out` | dag output | see `dag.yaml` | other dag output |
| `seg_outflow` | dag output | see `dag.yaml` | other dag output |
| `basin_pweqv` | dag output | see `dag.yaml` | other dag output |
| `basin_soil_moist` | dag output | see `dag.yaml` | other dag output |
| `basin_ppt` | dag output | see `dag.yaml` | other dag output |

---

## Output Files

### Model Output File (model_output_file)

Basin-level daily summary written to the file specified by `model_output_file` control variable. Contains water balance components.

### CSV Output (csv_output_file)

Daily comma-separated output when `csvON_OFF = 1`:

```csv
Year,Month,Day,basin_potet,basin_actet,basin_ppt,basin_rain,basin_snow,...
1980,10,1,0.045,0.032,0.12,0.12,0.00,...
```

### Basin Summary

When `basinOutON_OFF = 1`, writes daily/monthly/yearly basin averages.

### NHru Summary

When `nhruOutON_OFF = 1`, writes per-HRU values for selected variables.

### Statvar File

When `statsON_OFF = 1`, writes selected variables at each timestep.

---

## Validated Results

Use `docs/validation_convention.yaml` to judge run quality. The convention bars below restate the KI's cited pass-bands for streamflow outputs; do not replace them with remembered thresholds. No cited threshold means the convention has no threshold for that band.

### Performance Bars

| Dag variable | Metric | Direction | Satisfactory | Good | Very good | Citation keys |
|--------------|--------|-----------|--------------|------|-----------|---------------|
| `basin_cfs` | NSE | maximize | >= 0.5 (`moriasi2015`, `hay2022_redriver`, `arnold2012`, `zhang2022_streamflow`) | >= 0.7 (`moriasi2015`, `hay2022_redriver`, `arnold2012`, `zhang2022_streamflow`) | >= 0.8 (`moriasi2015`, `hay2022_redriver`, `arnold2012`, `zhang2022_streamflow`) | `moriasi2015`, `hay2022_redriver`, `arnold2012`, `zhang2022_streamflow` |
| `basin_cfs` | RSR | minimize | <= 0.7 (`moriasi2007`, `hay2022_redriver`) | <= 0.6 (`moriasi2007`, `hay2022_redriver`) | <= 0.5 (`moriasi2007`, `hay2022_redriver`) | `moriasi2007`, `hay2022_redriver` |
| `basin_stflow_out` | NSE | maximize | >= 0.5 (`moriasi2015`, `hay2022_redriver`) | >= 0.7 (`moriasi2015`, `hay2022_redriver`) | >= 0.8 (`moriasi2015`, `hay2022_redriver`) | `moriasi2015`, `hay2022_redriver` |
| `basin_stflow_out` | RSR | minimize | <= 0.7 (`moriasi2007`, `hay2022_redriver`) | <= 0.6 (`moriasi2007`, `hay2022_redriver`) | <= 0.5 (`moriasi2007`, `hay2022_redriver`) | `moriasi2007`, `hay2022_redriver` |
| `seg_outflow` | NSE | maximize | >= 0.5 (`hay2022_redriver`, `moriasi2015`) | >= 0.7 (`hay2022_redriver`, `moriasi2015`) | >= 0.8 (`hay2022_redriver`, `moriasi2015`) | `hay2022_redriver`, `moriasi2015` |
| `seg_outflow` | RSR | minimize | <= 0.7 (`hay2022_redriver`, `moriasi2007`) | <= 0.6 (`hay2022_redriver`, `moriasi2007`) | <= 0.5 (`hay2022_redriver`, `moriasi2007`) | `hay2022_redriver`, `moriasi2007` |

### Result Recording

Record achieved calibration, validation, and full-period metrics only after running the real PRMS binary through this KI's pipeline. A metric value without the convention bar above is not a validation verdict.

---

## Skill Documents

| Stage | Document | Path |
|-------|----------|------|
| s0 | Basin Configuration | `docs/s0_basin_configuration.md` |
| s1 | Forcing Preparation | `docs/s1_forcing_preparation.md` |
| s2 | Parameter Preparation | `docs/s2_parameter_preparation.md` |
| s3 | Control File Generation | `docs/s3_control_file_generation.md` |
| s4 | Model Execution | `docs/s4_model_execution.md` |
| s5 | Output Analysis | `docs/s5_output_analysis.md` |
| s6 | Calibration | `docs/s6_calibration.md` |

---

## Diagnostic Triplets

18 diagnostic triplets covering unit conversion, file format, parameterization, and runtime failures.
See `diagnostics/triplets.yaml` for the complete set.

---

## Version History

- PRMS v5.1.0 (2020-05-01): Current version with NHM support, NetCDF output, CBH input
- PRMS v5.0.0 (2018): Added PRMS4 backward compatibility, dynamic parameters
- PRMS v4.0.3 (2015): Stable release widely used in USGS modeling
- PRMS v3.0 (2004): Modular rewrite with MMS framework

Files in this skill

  • SKILL.md26.3 KB
  • dag.yaml40.7 KB
  • diagnostics/triplets.yaml20.2 KB
  • docs/REFERENCES.md2.3 KB
  • docs/format_spec.yaml27 KB
  • docs/papers.json6.4 KB
  • docs/s0_basin_configuration.md3.3 KB
  • docs/s1_forcing_preparation.md4 KB
  • docs/s2_parameter_preparation.md4.1 KB
  • docs/s3_control_file_generation.md3.2 KB
  • docs/s4_model_execution.md3.7 KB
  • docs/s5_output_analysis.md3.6 KB
  • docs/s6_calibration.md4.4 KB
  • docs/s7_troubleshooting.md4.5 KB
  • docs/validation_convention.yaml18.4 KB
  • knowledge_infrastructure.yaml3.7 KB
  • preflight_check.py7.9 KB
  • tools/convert_forcing_to_prms.py17.8 KB
  • tools/convert_params_to_prms.py15.7 KB
  • tools/generate_control_file.py11.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…