| name | hecras_compute_plans |
| shared_corpus | true |
| harness_scope | shared |
| source_owner | gpt-cmdr |
| security_review | internal |
| description | Executes HEC-RAS plans using RasCmdr.compute_plan(), handles parallel
execution across multiple plans, manages destination folders, and monitors
real-time progress with callbacks. Use when running HEC-RAS simulations,
computing plans, executing models, parallel workflows, setting up
distributed computation, batch processing, scenario analysis, or monitoring
execution progress in real-time.
Triggers: execute, run, compute, HEC-RAS, plan, simulation, parallel, callback, batch, scenario, destination folder, worker, monitoring, progress, real-time.
|
Executing HEC-RAS Plans
When the user asks to run HEC-RAS plans, use RasCmdr.compute_plan() for single plans or RasCmdr.compute_parallel() for multiple. Read the primary sources below for complete parameter details.
Primary Sources
1. Execution Patterns (AGENTS.md)
Location: ras_commander/AGENTS.md
Read these sections:
- "Plan Execution" - Core execution methods and parameters
- "Execution Modes" - Four modes: single, parallel, sequential, remote
- "Plan Execution Parameters" - Complete parameter reference
- "Common Workflow Pattern" - Initialize, Execute, Extract
Key execution modes:
RasCmdr.compute_plan("01", dest_folder="run1", num_cores=4)
RasCmdr.compute_parallel(["01", "02", "03"], max_workers=3)
RasCmdr.compute_test_mode(["01", "02"])
2. Working Examples (Jupyter Notebooks)
Core execution notebooks:
examples/110_single_plan_execution.ipynb - Complete single plan workflow
examples/111_executing_plan_sets.ipynb - Plan sets and batch processing
examples/112_sequential_plan_execution.ipynb - Test mode execution
examples/113_parallel_execution.ipynb - Parallel execution with performance analysis
Advanced workflows:
examples/500_remote_execution_psexec.ipynb - Distributed execution
- Real-time monitoring examples (search for
stream_callback usage)
3. Code Documentation (Docstrings)
Location: ras_commander/RasCmdr.py
Read these docstrings:
RasCmdr.compute_plan() - Lines 139-250+ (comprehensive parameter docs)
RasCmdr.compute_parallel() - Parallel execution details
RasCmdr.compute_test_mode() - Sequential debugging mode
Callback protocol: ras_commander/callbacks.py
ExecutionCallback - Protocol definition
ConsoleCallback, FileLoggerCallback, ProgressBarCallback - Implementations
Quick Reference
Single Plan Execution
Basic pattern:
from ras_commander import init_ras_project, RasCmdr
init_ras_project("path/to/project", "7.0")
RasCmdr.compute_plan("01")
With destination folder (preserves original):
RasCmdr.compute_plan("01", dest_folder="computation_folder")
With monitoring:
from ras_commander.callbacks import ConsoleCallback
RasCmdr.compute_plan(
"01",
stream_callback=ConsoleCallback(verbose=True)
)
Key parameters:
plan_number - "01", "02", etc. (use strings)
dest_folder - None = in-place, path = separate folder
num_cores - CPU cores to use (None = plan default)
clear_geompre - True after geometry changes
verify - True to check completion
skip_existing - True to resume interrupted runs
stream_callback - Real-time monitoring object
Parallel Execution
Execute multiple plans:
RasCmdr.compute_parallel(max_workers=3, num_cores=2)
RasCmdr.compute_parallel(
plans_to_run=["01", "02", "03"],
max_workers=3,
num_cores=2
)
Worker allocation:
max_workers - Parallel plan executions
num_cores - Cores per plan
- Total cores used =
max_workers × num_cores
- Optimal: 2-4 cores per worker, workers ≤ physical cores / num_cores
Sequential Test Mode
For debugging:
RasCmdr.compute_test_mode(["01", "02", "03"])
Difference from parallel:
- ONE plan at a time (not simultaneous)
- Single test folder (not multiple workers)
- Easier to debug issues
Mode Selection
To choose between execution modes (single, parallel, sequential, remote, legacy), invoke the hecras_plan_execution skill for decision trees, mode selection matrices, and parameter recommendations.
Read .claude/rules/hec-ras/execution.md for complete mode documentation.
Orchestrator Integration
Workflow: Inspector → Execute → Analyze
For complex projects, chain execution with inspection and analysis in this order:
1. Project Inspector → Understand project structure
2. Mode Selection → Choose execution approach
3. Execute → Run plans
4. Results Analyst → Interpret outputs
Integration with Project Inspector
Before executing unfamiliar projects, gather intelligence first:
plans = ["01", "02", "03", "04", "05"]
mode = "compute_parallel"
RasCmdr.compute_parallel(
plans_to_run=plans,
max_workers=3,
num_cores=4,
verify=True
)
Chaining with Other Skills
Invoke these upstream skills before execution:
hecras_parse_geometry -- After geometry modifications
dss_read_boundary-data -- After validating boundary conditions
usgs_integrate_gauges -- After setting up gauge-based boundaries
Invoke these downstream skills after execution:
hecras_extract_results -- Parse HDF outputs
- Results visualization -- Generate plots and maps
- Validation workflows -- Compare to observed data
Multi-Project Orchestration
For workflows spanning multiple HEC-RAS projects:
from ras_commander import RasPrj, init_ras_project, RasCmdr
projects = {}
for project_name in ["upstream", "downstream", "tributary"]:
projects[project_name] = RasPrj()
init_ras_project(
f"path/to/{project_name}",
"7.0",
ras_object=projects[project_name]
)
RasCmdr.compute_plan("01", ras_object=projects["upstream"])
RasCmdr.compute_plan("01", ras_object=projects["tributary"])
RasCmdr.compute_plan("01", ras_object=projects["downstream"])
Critical: Pass ras_object when working with multiple projects. See .claude/rules/python/ras-commander-patterns.md for context object discipline.
Common Patterns
Pattern: Preserve Original Project
RasCmdr.compute_plan(
"01",
dest_folder="results/run_2024_12_11",
overwrite_dest=True,
verify=True
)
Pattern: Geometry Modification Workflow
from ras_commander.RasGeo import RasGeo
RasGeo.update_mannings_n(geom_file="g01", landcover_map={...})
RasCmdr.compute_plan("01", clear_geompre=True)
Pattern: Batch Scenario Processing
scenarios = {
"baseline": {"plan": "01", "dest": "output/baseline"},
"mitigation": {"plan": "02", "dest": "output/mitigation"},
}
for name, config in scenarios.items():
RasCmdr.compute_plan(
config["plan"],
dest_folder=config["dest"],
verify=True
)
Pattern: Skip Already Completed
for plan in ["01", "02", "03"]:
RasCmdr.compute_plan(
plan,
skip_existing=True,
verify=True
)
Real-Time Monitoring
Console Output
from ras_commander.callbacks import ConsoleCallback
callback = ConsoleCallback(verbose=True)
RasCmdr.compute_plan("01", stream_callback=callback)
Output example:
[Plan 01] Starting execution...
[Plan 01] Geometry Preprocessor Version 6.6
[Plan 01] Computing Plan: 01
[Plan 01] SUCCESS in 45.2s
File Logging
from ras_commander.callbacks import FileLoggerCallback
from pathlib import Path
callback = FileLoggerCallback(output_dir=Path("logs"))
RasCmdr.compute_plan("01", stream_callback=callback)
Progress Bar
from ras_commander.callbacks import ProgressBarCallback
callback = ProgressBarCallback()
RasCmdr.compute_plan("01", stream_callback=callback)
Custom Callback
from ras_commander.callbacks import ExecutionCallback
class AlertCallback(ExecutionCallback):
def on_exec_complete(self, plan_number: str, success: bool, duration: float):
send_email(subject=f"Plan {plan_number} {'SUCCESS' if success else 'FAILED'}")
RasCmdr.compute_plan("01", stream_callback=AlertCallback())
Available callback methods (all optional):
on_prep_start() - Before geometry preprocessing
on_prep_complete() - After preprocessing
on_exec_start() - HEC-RAS subprocess starts
on_exec_message() - Each .bco file message (real-time)
on_exec_complete() - Execution finishes
on_verify_result() - After verification (if verify=True)
Thread safety: Use SynchronizedCallback wrapper for parallel execution
Verification
Return Value Check
success = RasCmdr.compute_plan("01", verify=True)
if not success:
print("Execution failed or incomplete")
Parse Compute Messages
from ras_commander.hdf import HdfResultsPlan
messages = HdfResultsPlan.get_compute_messages("01")
if "Complete Process" in messages:
print("Success!")
Validate Results
wse = HdfResultsPlan.get_wse("01", time_index=-1)
if wse is not None:
print(f"WSE range: {wse.min():.2f} to {wse.max():.2f} ft")
Performance Optimization
| Setting | Recommendation | When |
|---|
clear_geompre=False | 2x-10x faster | Geometry unchanged |
clear_geompre=True | Required | After ANY geometry edit |
num_cores=2-4 | Best balance | Most models |
num_cores=1-2 | Highest efficiency | Resource-limited |
Read .claude/rules/hec-ras/execution.md for detailed performance guidance.
Troubleshooting
Plan doesn't execute - Check: init_ras_project() called? Plan in ras.plan_df? HEC-RAS installed? Write permissions?
HDF not created - Enable ConsoleCallback(verbose=True), check compute messages, try HEC-RAS GUI manually.
Debug command:
from ras_commander import ras
print(f"Project: {ras.project_folder}")
print(f"RAS: {ras.ras_exe_path}")
print(ras.plan_df)
Cross-References
Rules (follow these):
.claude/rules/hec-ras/execution.md -- Execution mode parameters and performance tuning
.claude/rules/python/static-classes.md -- RasCmdr static method pattern
.claude/rules/python/decorators.md -- @log_call and @standardize_input usage
Agents (delegate when needed):
hecras-general-agent -- Delegate for full inspect-plan-execute-analyze workflows
hecras-project-inspector -- Delegate for project analysis before execution
Skills (related workflows):
hecras_plan_execution -- Use upstream for execution mode selection and parameter tuning
hecras_compute_remote -- Use for distributed remote execution
hecras_compute_rascontrol -- Use for legacy COM-based execution
hecras_extract_results -- Use downstream to extract results after execution
hecras_parse_compute-messages -- Use downstream to verify execution status
Primary sources:
ras_commander/AGENTS.md -- Plan execution section with complete parameter reference
ras_commander/RasCmdr.py -- Source code with comprehensive docstrings
examples/110_single_plan_execution.ipynb -- Single plan workflow
examples/113_parallel_execution.ipynb -- Parallel execution workflow