Remote Execution with ras-commander¶
This notebook demonstrates how to execute HEC-RAS plans using:
1. Local parallel execution - RasCmdr.compute_parallel() on your local machine
2. Remote execution - compute_parallel_remote() on remote machines via PsExec/Docker
Features¶
- Distributed execution across multiple remote machines
- Automatic project deployment via network shares
- Parallel execution with configurable workers
- Result collection and consolidation
- Automatic PsExec.exe download (no manual setup required)
Requirements for Remote Execution¶
- Remote machine(s) configured per
REMOTE_WORKER_SETUP_GUIDE.md - Network share accessible from control machine
- HEC-RAS installed on remote machine(s)
Critical Configuration Requirements¶
IMPORTANT: Remote HEC-RAS execution requires session-based execution. Never use system_account=True.
Required on Remote Machine:
1. Session ID Configuration: Typically session_id=2 for interactive sessions
- Query session: query session /server:HOSTNAME to find correct ID
2. Group Policy Rights (on remote machine):
- Access this computer from the network
- Allow log on locally
- Log on as a batch job
3. Registry Setting: LocalAccountTokenFilterPolicy=1
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `
-Name "LocalAccountTokenFilterPolicy" -Value 1 -PropertyType DWORD -Force
Why This Matters: HEC-RAS is a GUI application and will fail silently if executed in system account context.
Reference Documentation¶
- ras-commander Remote Execution:
.claude/rules/hec-ras/remote.md(critical configuration patterns) - Worker Setup Guide:
feature_dev_notes/RasRemote/REMOTE_WORKER_SETUP_GUIDE.md - HEC-RAS System Requirements: HEC-RAS Downloads
Security Considerations¶
- Network Share Access: Ensure proper permissions and consider encryption for sensitive models
- Credential Management: Use secure credential storage (not hardcoded passwords)
- Firewall Rules: Remote execution requires SMB (port 445) and RPC access
- Audit Trail: All remote executions are logged for review
Part 1: Setup and Imports¶
# =============================================================================
# DEVELOPMENT MODE TOGGLE
# =============================================================================
from pathlib import Path # Import Path unconditionally
import os
import time
USE_LOCAL_SOURCE = False # <-- TOGGLE THIS
if USE_LOCAL_SOURCE:
import sys
local_path = str(Path.cwd().parent)
if local_path not in sys.path:
sys.path.insert(0, local_path)
print(f"📁 LOCAL SOURCE MODE: Loading from {local_path}/ras_commander")
else:
print("📦 PIP PACKAGE MODE: Loading installed ras-commander")
# Import ras-commander core functionality
from ras_commander import HdfResultsPlan, RasCmdr, RasExamples, init_ras_project, ras
# Import remote execution functions (lazy loaded)
from ras_commander import load_workers_from_json, compute_parallel_remote
# Verify which version loaded
import ras_commander
print(f"✓ Loaded: {ras_commander.__file__}")
📦 PIP PACKAGE MODE: Loading installed ras-commander
2026-06-12 15:16:50 - numexpr.utils - INFO - NumExpr defaulting to 8 threads.
✓ Loaded: C:\Users\bill\AppData\Local\Temp\rc-main\ras_commander\__init__.py
# Display results summary from results_df
desired_cols = ['plan_number', 'plan_title', 'completed', 'has_errors', 'has_warnings', 'runtime_complete_process_hours']
available_cols = [c for c in desired_cols if c in ras.results_df.columns]
ras.results_df[available_cols]
Parameters¶
Configure these values to customize the notebook for your project.
# =============================================================================
# PARAMETERS - Edit these to customize the notebook
# =============================================================================
from pathlib import Path
# Project Configuration
PROJECT_NAME = "BaldEagleCrkMulti2D" # Example project to extract
RAS_VERSION = "7.0" # HEC-RAS version (6.3, 6.5, 6.6, etc.)
# Remote Execution Settings
REMOTE_HOST = "192.168.1.100" # Remote machine hostname/IP
REMOTE_USER = "ras_user" # Username on remote machine
SESSION_ID = 2 # Windows session ID (typically 2)
REMOTE_SHARE = r"\\{host}\RAS_Share" # UNC path to shared folder
print(f"Configuration: {PROJECT_NAME} project, RAS {RAS_VERSION}")
Configuration: BaldEagleCrkMulti2D project, RAS 7.0
# Extract example project for testing
project_path = RasExamples.extract_project(PROJECT_NAME, suffix="500")
print(f"Project extracted to: {project_path}")
# Initialize project
ras = init_ras_project(project_path, RAS_VERSION)
print(f"\nProject: {ras.project_name}")
print(f"Available plans: {list(ras.plan_df['plan_number'])}")
2026-06-12 15:16:54 - ras_commander.RasExamples - INFO - Successfully extracted project 'BaldEagleCrkMulti2D' to C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0 at C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 5 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 5\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.6 at C:\Program Files (x86)\HEC\HEC-RAS\6.6\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.5 at C:\Program Files (x86)\HEC\HEC-RAS\6.5\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.3.1\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.2 at C:\Program Files (x86)\HEC\HEC-RAS\6.2\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.1\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.0 at C:\Program Files (x86)\HEC\HEC-RAS\6.0\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.7 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.7\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.6 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.6\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.5 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.5\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.4 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.4\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.3 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.3\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0 at C:\Program Files (x86)\HEC\HEC-RAS\5.0\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.1.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.1.0\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.0\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\7.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:16:54 - ras_commander.RasUtils - INFO - Discovered 18 installed HEC-RAS version(s)
2026-06-12 15:16:54 - ras_commander.RasPrj - INFO - HEC-RAS 7.0 found via version discovery: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
Project extracted to: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500
2026-06-12 15:16:55 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.rasmap
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras.plan_df Plans, HDF paths, geometry/flow associations
ras.geom_df Geometry files and HDF preprocessor paths
ras.flow_df Steady flow files
ras.unsteady_df Unsteady flow files and configurations
ras.boundaries_df Boundary conditions (type, name, location)
ras.results_df Lightweight HDF results summaries
ras.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
Project: BaldEagleDamBrk
Available plans: ['13', '15', '17', '18', '19', '03', '04', '02', '01', '05', '06']
Part 2: Local Parallel Execution¶
Use RasCmdr.compute_parallel() to run multiple plans on your local machine.
This is the simplest way to parallelize HEC-RAS execution.
LOCAL_PLANS = ["03", "04", "06"] # Plans to execute
LOCAL_MAX_WORKERS = 3 # Number of parallel processes
LOCAL_NUM_CORES = 2 # Cores per HEC-RAS instance
print(f"Plans to execute: {LOCAL_PLANS}")
print(f"Configuration: {LOCAL_NUM_CORES} cores x {LOCAL_MAX_WORKERS} workers")
Plans to execute: ['03', '04', '06']
Configuration: 2 cores x 3 workers
print(f"Starting LOCAL parallel execution of {len(LOCAL_PLANS)} plans...")
print("="*70)
start_time = time.time()
local_results = RasCmdr.compute_parallel(
plan_number=LOCAL_PLANS,
max_workers=LOCAL_MAX_WORKERS,
num_cores=LOCAL_NUM_CORES,
ras_object=ras,
overwrite_dest=True
)
elapsed = time.time() - start_time
print(f"\nExecution complete in {elapsed:.1f} seconds ({elapsed/60:.1f} minutes)")
2026-06-12 15:16:55 - ras_commander.RasCmdr - INFO - Filtered plans to execute: ['03', '04', '06']
2026-06-12 15:16:55 - ras_commander.RasCmdr - INFO - Adjusted max_workers to 3 based on the number of plans to compute: 3
2026-06-12 15:16:55 - ras_commander.RasCmdr - INFO - Created worker folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]
Starting LOCAL parallel execution of 3 plans...
======================================================================
2026-06-12 15:16:55 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]\BaldEagleDamBrk.rasmap
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:16:55 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:16:56 - ras_commander.RasCmdr - INFO - Created worker folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]
2026-06-12 15:16:56 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]\BaldEagleDamBrk.rasmap
2026-06-12 15:16:56 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:16:56 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]
2026-06-12 15:16:56 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:16:56 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:16:56 - ras_commander.RasCmdr - INFO - Created worker folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]
2026-06-12 15:16:57 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]\BaldEagleDamBrk.rasmap
2026-06-12 15:16:57 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:16:57 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]
2026-06-12 15:16:57 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:16:57 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:16:57 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]
2026-06-12 15:16:57 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]
2026-06-12 15:16:57 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]
2026-06-12 15:16:57 - ras_commander.RasUtils - INFO - Successfully updated file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]\BaldEagleDamBrk.p04
2026-06-12 15:16:57 - ras_commander.RasUtils - INFO - Successfully updated file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]\BaldEagleDamBrk.p03
2026-06-12 15:16:57 - ras_commander.RasUtils - INFO - Successfully updated file: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]\BaldEagleDamBrk.p06
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 04
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]\BaldEagleDamBrk.prj" "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 2]\BaldEagleDamBrk.p04"
2026-06-12 15:16:58 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 06
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]\BaldEagleDamBrk.prj" "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 3]\BaldEagleDamBrk.p06"
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 03
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:
2026-06-12 15:16:58 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]\BaldEagleDamBrk.prj" "C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Worker 1]\BaldEagleDamBrk.p03"
2026-06-12 15:16:58 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows
2026-06-12 15:16:58 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows
2026-06-12 15:21:49 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 03
2026-06-12 15:21:49 - ras_commander.RasCmdr - INFO - Total run time for plan 03: 291.13 seconds
2026-06-12 15:21:49 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered
2026-06-12 15:21:49 - ras_commander.RasCmdr - INFO - Plan 03 executed in worker 1: Successful
2026-06-12 15:22:43 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 04
2026-06-12 15:22:43 - ras_commander.RasCmdr - INFO - Total run time for plan 04: 345.21 seconds
2026-06-12 15:22:43 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered
2026-06-12 15:22:43 - ras_commander.RasCmdr - INFO - Plan 04 executed in worker 2: Successful
2026-06-12 15:25:16 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 06
2026-06-12 15:25:16 - ras_commander.RasCmdr - INFO - Total run time for plan 06: 498.62 seconds
2026-06-12 15:25:16 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered
2026-06-12 15:25:17 - ras_commander.RasCmdr - INFO - Plan 06 executed in worker 3: Successful
2026-06-12 15:25:17 - ras_commander.RasCmdr - INFO - Consolidating results back to original project folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500
2026-06-12 15:25:23 - ras_commander.RasCmdr - INFO - Consolidated 12 worker artifact(s) to C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500
2026-06-12 15:25:23 - ras_commander.RasCmdr - INFO -
Execution Results:
2026-06-12 15:25:23 - ras_commander.RasCmdr - INFO - Plan 03: Successful
2026-06-12 15:25:23 - ras_commander.RasCmdr - INFO - Plan 04: Successful
2026-06-12 15:25:23 - ras_commander.RasCmdr - INFO - Plan 06: Successful
Execution complete in 509.0 seconds (8.5 minutes)
# Display results summary from results_df
desired_cols = ['plan_number', 'plan_title', 'completed', 'has_errors', 'has_warnings', 'runtime_complete_process_hours']
available_cols = [c for c in desired_cols if c in ras.results_df.columns]
ras.results_df[available_cols]
| plan_number | plan_title | completed | has_errors | has_warnings | runtime_complete_process_hours | |
|---|---|---|---|---|---|---|
| 0 | 13 | PMF with Multi 2D Areas | False | False | False | NaN |
| 1 | 15 | 1d-2D Dambreak Refined Grid | False | False | False | NaN |
| 2 | 17 | 2D to 1D No Dam | False | False | False | NaN |
| 3 | 18 | 2D to 2D Run | False | False | False | NaN |
| 4 | 19 | SA to 2D Dam Break Run | False | False | False | NaN |
| 5 | 02 | SA to Detailed 2D Breach | False | False | False | NaN |
| 6 | 01 | SA to Detailed 2D Breach FEQ | False | False | False | NaN |
| 7 | 05 | Single 2D area with Bridges FEQ | False | False | False | NaN |
| 8 | 03 | Single 2D Area - Internal Dam Structure | True | False | False | 0.079592 |
| 9 | 04 | SA to 2D Area Conn - 2D Levee Structure | True | False | False | 0.094774 |
| 10 | 06 | Gridded Precip - Infiltration | True | False | False | 0.137309 |
print("LOCAL Execution Results:")
print("="*70)
success_count = sum(1 for success in local_results.values() if success)
fail_count = len(local_results) - success_count
for plan_num, success in local_results.items():
status = "SUCCESS" if success else "FAILED"
print(f" Plan {plan_num}: {status}")
print(f"\nSummary: {success_count}/{len(local_results)} plans succeeded")
print(f"Results folder: {ras.project_folder.parent / (ras.project_folder.name + ' [Computed]')}")
LOCAL Execution Results:
======================================================================
Plan 03: SUCCESS
Plan 04: SUCCESS
Plan 06: SUCCESS
Summary: 3/3 plans succeeded
Results folder: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500 [Computed]
Part 3: Remote Execution Setup¶
To use remote execution, you need to configure remote workers.
First Time Setup¶
- Copy
RemoteWorkers.json.templatetoRemoteWorkers.json - Edit
RemoteWorkers.jsonwith your remote machine details - The JSON file is in
.gitignorefor security
Worker Types¶
- local - Execute on local machine (useful for mixed local+remote)
- psexec - Execute on remote Windows via PsExec
- docker - Execute in Docker container (local or remote via SSH)
JSON Configuration Example¶
{
"workers": [
{
"name": "Local Worker",
"worker_type": "local",
"worker_folder": "C:\\RasRemote",
"cores_total": 8,
"cores_per_plan": 2,
"enabled": true
},
{
"name": "Remote Workstation",
"worker_type": "psexec",
"hostname": "192.168.1.100",
"share_path": "\\\\192.168.1.100\\RasRemote",
"worker_folder": "C:\\RasRemote",
"username": "your_username",
"password": "your_password",
"session_id": 2,
"cores_total": 16,
"cores_per_plan": 4,
"enabled": true
}
]
}
# Check if RemoteWorkers.json exists
config_file = Path("RemoteWorkers.json")
if not config_file.exists():
print("WARNING: RemoteWorkers.json not found!")
print()
print("To use remote execution:")
print("1. Copy RemoteWorkers.json.template to RemoteWorkers.json")
print("2. Edit RemoteWorkers.json with your remote machine details")
print("3. Re-run this cell")
print()
print("For now, you can still use LOCAL parallel execution (Part 2 above).")
REMOTE_AVAILABLE = False
else:
import json
with open(config_file, 'r') as f:
worker_configs = json.load(f)
enabled_configs = [w for w in worker_configs["workers"] if w.get("enabled", True)]
print(f"Found {len(enabled_configs)} enabled worker(s) in RemoteWorkers.json:")
for w in enabled_configs:
cores_total = w.get('cores_total', 'Not set')
cores_per_plan = w.get('cores_per_plan', 4)
print(f" - {w.get('name', 'unnamed')} ({w.get('worker_type', 'unknown')})")
print(f" Cores: {cores_total} total, {cores_per_plan} per plan")
REMOTE_AVAILABLE = True
Found 4 enabled worker(s) in RemoteWorkers.json:
- <WORKER-1> (local)
Cores: 8 total, 2 per plan
- <WORKER-2> (psexec)
Cores: 8 total, 2 per plan
- <WORKER-3> (psexec)
Cores: 6 total, 2 per plan
- <WORKER-4> (docker)
Cores: 8 total, 4 per plan
Part 4: Remote Parallel Execution¶
Use compute_parallel_remote() to run plans on remote machines.
Key differences from local execution: - Plans are copied to remote shares - Execution happens on remote machines - Results are collected back to local project - Supports multiple remote workers simultaneously
# Load remote workers from JSON
# NOTE: This must be called AFTER init_ras_project() so ras_exe_path is available
if REMOTE_AVAILABLE:
workers = load_workers_from_json("RemoteWorkers.json")
print(f"Loaded {len(workers)} worker(s):")
for w in workers:
print(f" - {w.worker_id} ({w.worker_type})")
if hasattr(w, 'max_parallel_plans') and w.max_parallel_plans > 1:
print(f" Parallel Capacity: {w.max_parallel_plans} plans")
else:
print("Remote workers not available - configure RemoteWorkers.json first")
workers = []
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Initializing local worker
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Initializing local worker
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Local worker configured:
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Worker folder: <WORKER-FOLDER-1>
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - RAS Exe: C:\Program Files (x86)\HEC\HEC-RAS\6.6\Ras.exe
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Process Priority: low
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Queue Priority: 0
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Parallel Capacity: 4 plans simultaneously
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Loaded worker: <WORKER-1> (local)
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Initializing psexec worker
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Initializing PsExec worker for <WORKER-HOST-2>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - PsExec worker configured:
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Hostname: <WORKER-HOST-2>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Share path: <WORKER-SHARE-2>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Worker folder: <WORKER-FOLDER-1>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - User: <WORKER-USER-2>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - System account: False
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Session ID: 2
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Process Priority: low
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Queue Priority: 1
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - WARNING - Validation deferred - share access and remote execution will be tested during actual plan execution
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Loaded worker: <WORKER-2> (psexec)
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Initializing psexec worker
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Initializing PsExec worker for <WORKER-HOST-3>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - PsExec worker configured:
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Hostname: <WORKER-HOST-3>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Share path: <WORKER-SHARE-3>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Worker folder: <WORKER-FOLDER-1>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - User: <WORKER-USER-3>
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - System account: False
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Session ID: 2
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Process Priority: low
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - INFO - Queue Priority: 1
2026-06-12 15:25:24 - ras_commander.remote.PsexecWorker - WARNING - Validation deferred - share access and remote execution will be tested during actual plan execution
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Loaded worker: <WORKER-3> (psexec)
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Initializing docker worker
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Docker daemon connected: ssh://root@<PRIVATE-IP>
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Docker image found: hecras:6.6
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - DockerWorker initialized:
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Image: hecras:6.6
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Host: ssh://root@<PRIVATE-IP>
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Preprocess on host: True
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Max parallel plans: 2
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - Timeout: 480 minutes
2026-06-12 15:25:24 - ras_commander.remote.DockerWorker - INFO - SSH client: paramiko
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Loaded worker: <WORKER-4> (docker)
2026-06-12 15:25:24 - ras_commander.remote.RasWorker - INFO - Loaded 4 workers from RemoteWorkers.json
Loaded 4 worker(s):
- <WORKER-1> (local)
Parallel Capacity: 4 plans
- <WORKER-2> (psexec)
Parallel Capacity: 4 plans
- <WORKER-3> (psexec)
Parallel Capacity: 3 plans
- <WORKER-4> (docker)
Parallel Capacity: 2 plans
# Configuration for remote execution
REMOTE_PLANS = ["03", "04", "06"] # Plans to execute remotely
REMOTE_NUM_CORES = 4 # Cores per HEC-RAS instance
print(f"Plans to execute: {REMOTE_PLANS}")
print(f"Workers available: {len(workers)}")
Plans to execute: ['03', '04', '06']
Workers available: 4
# Execute plans on REMOTE workers
if workers:
print(f"Starting REMOTE execution of {len(REMOTE_PLANS)} plans...")
print(f"Using {len(workers)} worker(s)")
print("="*70)
start_time = time.time()
remote_results = compute_parallel_remote(
plan_numbers=REMOTE_PLANS,
workers=workers,
num_cores=REMOTE_NUM_CORES,
autoclean=True # Delete temp folders after execution (default)
)
elapsed = time.time() - start_time
print(f"\nExecution complete in {elapsed:.1f} seconds ({elapsed/60:.1f} minutes)")
else:
print("No remote workers available.")
print("Configure RemoteWorkers.json to enable remote execution.")
remote_results = {}
2026-06-12 15:25:24 - ras_commander.remote.Execution - INFO - Starting distributed execution of 3 plans across 4 workers
2026-06-12 15:25:24 - ras_commander.remote.Execution - INFO - Total worker slots available: 13
2026-06-12 15:25:24 - ras_commander.remote.Execution - INFO - Submitting plan 03 to worker <WORKER-1> (sub-worker #1)
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Starting local execution of plan 03 (sub-worker #1)
2026-06-12 15:25:24 - ras_commander.remote.Execution - INFO - Submitting plan 04 to worker <WORKER-1> (sub-worker #2)
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Copying project to <WORKER-FOLDER-1>\BaldEagleDamBrk_03_SW1_325cac33
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Starting local execution of plan 04 (sub-worker #2)
2026-06-12 15:25:24 - ras_commander.remote.Execution - INFO - Submitting plan 06 to worker <WORKER-1> (sub-worker #3)
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Copying project to <WORKER-FOLDER-1>\BaldEagleDamBrk_04_SW2_668ea90c
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Starting local execution of plan 06 (sub-worker #3)
2026-06-12 15:25:24 - ras_commander.remote.LocalWorker - INFO - Copying project to <WORKER-FOLDER-1>\BaldEagleDamBrk_06_SW3_44e75db7
Starting REMOTE execution of 3 plans...
Using 4 worker(s)
======================================================================
2026-06-12 15:25:25 - ras_commander.remote.LocalWorker - INFO - Initializing project in worker folder
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0 at C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 5 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.6 at C:\Program Files (x86)\HEC\HEC-RAS\6.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.5 at C:\Program Files (x86)\HEC\HEC-RAS\6.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.3.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.2 at C:\Program Files (x86)\HEC\HEC-RAS\6.2\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.0 at C:\Program Files (x86)\HEC\HEC-RAS\6.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.7 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.7\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.6 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.5 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.4 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.4\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.3 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.3\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0 at C:\Program Files (x86)\HEC\HEC-RAS\5.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.1.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.1.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\7.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.remote.LocalWorker - INFO - Initializing project in worker folder
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered 18 installed HEC-RAS version(s)
2026-06-12 15:25:25 - ras_commander.remote.LocalWorker - INFO - Initializing project in worker folder
2026-06-12 15:25:25 - ras_commander.RasPrj - INFO - HEC-RAS 7.0 found via version discovery: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0 at C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 5 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.6 at C:\Program Files (x86)\HEC\HEC-RAS\6.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.5 at C:\Program Files (x86)\HEC\HEC-RAS\6.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0 at C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.3.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 5 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.2 at C:\Program Files (x86)\HEC\HEC-RAS\6.2\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.6 at C:\Program Files (x86)\HEC\HEC-RAS\6.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.0 at C:\Program Files (x86)\HEC\HEC-RAS\6.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.5 at C:\Program Files (x86)\HEC\HEC-RAS\6.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.7 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.7\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.3.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.6 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.2 at C:\Program Files (x86)\HEC\HEC-RAS\6.2\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.5 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.4 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.4\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.0 at C:\Program Files (x86)\HEC\HEC-RAS\6.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.3 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.3\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.7 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.7\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.6 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.6\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0 at C:\Program Files (x86)\HEC\HEC-RAS\5.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.5 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.5\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.1.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.1.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.4 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.4\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.3 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.3\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\5.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 5.0 at C:\Program Files (x86)\HEC\HEC-RAS\5.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.1.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.1.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 4.0 at C:\Program Files (x86)\HEC\HEC-RAS\4.0\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\7.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered 18 installed HEC-RAS version(s)
2026-06-12 15:25:25 - ras_commander.RasPrj - INFO - HEC-RAS 7.0 found via version discovery: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 7.0.1 at C:\Program Files (x86)\HEC\HEC-RAS\7.0.1\Ras.exe via filesystem (x86)
2026-06-12 15:25:25 - ras_commander.RasUtils - INFO - Discovered 18 installed HEC-RAS version(s)
2026-06-12 15:25:25 - ras_commander.RasPrj - INFO - HEC-RAS 7.0 found via version discovery: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:27 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <WORKER-FOLDER-1>\BaldEagleDamBrk_04_SW2_668ea90c\BaldEagleDamBrk\BaldEagleDamBrk.rasmap
2026-06-12 15:25:27 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <WORKER-FOLDER-1>\BaldEagleDamBrk_03_SW1_325cac33\BaldEagleDamBrk\BaldEagleDamBrk.rasmap
2026-06-12 15:25:27 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <WORKER-FOLDER-1>\BaldEagleDamBrk_06_SW3_44e75db7\BaldEagleDamBrk\BaldEagleDamBrk.rasmap
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_04_SW2_668ea90c\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:25:27 - ras_commander.remote.LocalWorker - INFO - Executing plan 04 with RasCmdr.compute_plan()
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_04_SW2_668ea90c\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_03_SW1_325cac33\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:25:27 - ras_commander.remote.LocalWorker - INFO - Executing plan 03 with RasCmdr.compute_plan()
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_03_SW1_325cac33\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://rascommander.info | GitHub: https://github.com/gpt-cmdr/ras-commander
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_06_SW3_44e75db7\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe
2026-06-12 15:25:27 - ras_commander.RasPrj - INFO -
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://rascommander.info/
Repo: https://github.com/gpt-cmdr/ras-commander
LLM agents: https://rascommander.info/llms.txt
═══════════════════════════════════════════════════════════════════════
PROJECT DATAFRAMES (single source of truth — use these, not file globbing):
ras_object.plan_df Plans, HDF paths, geometry/flow associations
ras_object.geom_df Geometry files and HDF preprocessor paths
ras_object.flow_df Steady flow files
ras_object.unsteady_df Unsteady flow files and configurations
ras_object.boundaries_df Boundary conditions (type, name, location)
ras_object.results_df Lightweight HDF results summaries
ras_object.rasmap_df RASMapper layers, terrain, land cover paths
KEY APIS (static classes — call directly, never instantiate):
Execution: RasCmdr.compute_plan() / compute_parallel() / compute_test_mode()
Plan Files: RasPlan.clone_plan() / clone_geom() / set_geom()
Unsteady: RasUnsteady — IC/BC management, gate openings, precipitation
Geometry: GeomCrossSection, GeomBridge, GeomStorage, GeomLateral, GeomMesh
HDF Results: HdfResultsPlan.get_wse() / get_compute_messages()
HdfResultsMesh.get_mesh_max_ws() / get_mesh_cells_timeseries()
HdfMesh.get_mesh_cell_points()
QA/QC: RasCheck.run_check() / RasFixit (geometry repair)
DSS: RasDss.get_timeseries() / check_pathname()
USGS: UsgsGaugeSpatial, GaugeMatcher, RasUsgsBoundaryGeneration
Precipitation: StormGenerator, Atlas14Storm, PrecipAorc, Atlas14Variance
Terrain: RasTerrain.create_terrain_hdf() / RasTerrainMod
MULTI-PROJECT: Pass ras_object= to all API calls when using local RasPrj instances.
EXAMPLES: 100+ notebooks in examples/ (100s=execution, 200s=geometry, 300s=unsteady,
400s=HDF results, 500s=remote, 800s=QA/QC, 900s=data integration).
Review relevant notebooks before assembling new workflows.
PLATFORM: Most HEC-RAS operations require Windows. Linux/Wine support for
headless execution, data access, geometry modification, and preprocessing
is available via RasProcess (HEC-RAS 6.6+). See ras_commander/RasProcess.py.
Remote distributed execution: ras_commander/remote/ (PsExec, Docker, SSH, cloud).
═══════════════════════════════════════════════════════════════════════
2026-06-12 15:25:27 - ras_commander.remote.LocalWorker - INFO - Executing plan 06 with RasCmdr.compute_plan()
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <WORKER-FOLDER-1>\BaldEagleDamBrk_06_SW3_44e75db7\BaldEagleDamBrk
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Skipping plan 04: Plan 04 results are current (newer than all inputs)
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Skipping plan 03: Plan 03 results are current (newer than all inputs)
2026-06-12 15:25:27 - ras_commander.RasCmdr - INFO - Skipping plan 06: Plan 06 results are current (newer than all inputs)
2026-06-12 15:25:27 - ras_commander.remote.LocalWorker - INFO - HDF file created successfully: <WORKER-FOLDER-1>\BaldEagleDamBrk_04_SW2_668ea90c\BaldEagleDamBrk\BaldEagleDamBrk.p04.hdf
2026-06-12 15:25:28 - ras_commander.remote.LocalWorker - INFO - Copied results to C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p04.hdf
2026-06-12 15:25:28 - ras_commander.remote.LocalWorker - INFO - HDF file created successfully: <WORKER-FOLDER-1>\BaldEagleDamBrk_03_SW1_325cac33\BaldEagleDamBrk\BaldEagleDamBrk.p03.hdf
2026-06-12 15:25:28 - ras_commander.remote.LocalWorker - INFO - Copied results to C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p03.hdf
2026-06-12 15:25:28 - ras_commander.remote.LocalWorker - INFO - HDF file created successfully: <WORKER-FOLDER-1>\BaldEagleDamBrk_06_SW3_44e75db7\BaldEagleDamBrk\BaldEagleDamBrk.p06.hdf
2026-06-12 15:25:28 - ras_commander.remote.Execution - INFO - Plan 04 completed successfully (3.6s)
2026-06-12 15:25:28 - ras_commander.remote.Execution - INFO - Plan 03 completed successfully (3.7s)
2026-06-12 15:25:28 - ras_commander.remote.LocalWorker - INFO - Copied results to C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p06.hdf
2026-06-12 15:25:28 - ras_commander.remote.Execution - INFO - Plan 06 completed successfully (4.0s)
2026-06-12 15:25:28 - ras_commander.remote.Execution - INFO - Distributed execution complete: 3 succeeded, 0 failed
Execution complete in 4.0 seconds (0.1 minutes)
# Display results summary from results_df
desired_cols = ['plan_number', 'plan_title', 'completed', 'has_errors', 'has_warnings', 'runtime_complete_process_hours']
available_cols = [c for c in desired_cols if c in ras.results_df.columns]
ras.results_df[available_cols]
| plan_number | plan_title | completed | has_errors | has_warnings | runtime_complete_process_hours | |
|---|---|---|---|---|---|---|
| 0 | 13 | PMF with Multi 2D Areas | False | False | False | NaN |
| 1 | 15 | 1d-2D Dambreak Refined Grid | False | False | False | NaN |
| 2 | 17 | 2D to 1D No Dam | False | False | False | NaN |
| 3 | 18 | 2D to 2D Run | False | False | False | NaN |
| 4 | 19 | SA to 2D Dam Break Run | False | False | False | NaN |
| 5 | 02 | SA to Detailed 2D Breach | False | False | False | NaN |
| 6 | 01 | SA to Detailed 2D Breach FEQ | False | False | False | NaN |
| 7 | 05 | Single 2D area with Bridges FEQ | False | False | False | NaN |
| 8 | 03 | Single 2D Area - Internal Dam Structure | True | False | False | 0.079592 |
| 9 | 04 | SA to 2D Area Conn - 2D Levee Structure | True | False | False | 0.094774 |
| 10 | 06 | Gridded Precip - Infiltration | True | False | False | 0.137309 |
# Display remote execution results
if remote_results:
print("REMOTE Execution Results:")
print("="*70)
for plan_num, result in remote_results.items():
if result.success:
print(f" Plan {plan_num}: SUCCESS ({result.execution_time:.1f}s)")
print(f" HDF Path: {result.hdf_path}")
else:
print(f" Plan {plan_num}: FAILED - {result.error_message}")
success_count = sum(1 for r in remote_results.values() if r.success)
print(f"\nSummary: {success_count}/{len(remote_results)} plans succeeded")
else:
print("No remote results - run the remote execution cell above first.")
REMOTE Execution Results:
======================================================================
Plan 04: SUCCESS (3.6s)
HDF Path: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p04.hdf
Plan 03: SUCCESS (3.7s)
HDF Path: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p03.hdf
Plan 06: SUCCESS (4.0s)
HDF Path: C:\Users\bill\AppData\Local\Temp\rc-main\examples\example_projects\BaldEagleCrkMulti2D_500\BaldEagleDamBrk.p06.hdf
Summary: 3/3 plans succeeded
Verification and Validation¶
What to Verify After Remote Execution¶
1. Remote Connection Success - ✓ Worker connected successfully (check session ID in logs) - ✓ Project files deployed to remote share - ✓ HEC-RAS process started on remote machine
2. Execution Status - ✓ Return code = 0 (success) - ✓ HDF file created on remote machine - ✓ Compute messages indicate "Run completed successfully" - ✓ No errors in execution log
3. File Transfer Validation - ✓ HDF results copied back to local machine - ✓ File size matches expected (not truncated) - ✓ HDF file is readable and contains results
4. Result Quality - ✓ Check compute messages for warnings - ✓ Verify WSE/depth values are reasonable - ✓ No NaN values in critical areas - ✓ Hydraulic stability (no excessive oscillations)
Audit Trail¶
Save these artifacts for professional review:
- Execution logs: logs/remote_execution_{timestamp}.log
- Compute messages: Extract from HDF and save as text
- Return codes: Document success/failure for each worker
- Network transfer logs: Verify data integrity
LLM Forward Principle¶
Remote execution creates multiple review pathways: 1. Traditional Engineering Review: Open HDF in HEC-RAS GUI 2. Visual Inspection: Plot results (WSE, velocity, etc.) 3. Code Audit Trail: Review execution logs and parameters
Part 5: Verify Results¶
Check that HDF files were created and contain valid results.
# Verify HDF results
from ras_commander import HdfResultsPlan
print("Result Verification:")
print("="*70)
# Check plans that were executed (either local or remote)
plans_to_check = LOCAL_PLANS if local_results else (REMOTE_PLANS if remote_results else [])
for plan_num in plans_to_check:
hdf_path = project_path / f"{ras.project_name}.p{plan_num}.hdf"
if hdf_path.exists():
size_mb = hdf_path.stat().st_size / (1024 * 1024)
print(f"\nPlan {plan_num}:")
print(f" HDF Size: {size_mb:.2f} MB")
# Get compute messages
msgs = HdfResultsPlan.get_compute_messages(hdf_path)
if "completed successfully" in msgs.lower() or "complete process" in msgs.lower():
print(f" Status: SUCCESS")
else:
print(f" Status: Check messages")
# Get volume accounting
vol = HdfResultsPlan.get_volume_accounting(hdf_path)
if vol is not None and len(vol) > 0:
error_pct = vol['Error Percent'].iloc[0]
print(f" Volume Error: {error_pct:.4f}%")
else:
print(f"\nPlan {plan_num}: HDF not found")
Result Verification:
======================================================================
Plan 03:
HDF Size: 59.15 MB
Status: SUCCESS
Volume Error: 0.0293%
Plan 04:
HDF Size: 81.80 MB
Status: SUCCESS
Volume Error: 0.0007%
Plan 06:
HDF Size: 577.28 MB
Status: SUCCESS
Volume Error: 0.0004%
Part 6: Manual Worker Configuration (Optional)¶
You can also create workers programmatically without a JSON file.
# Example: Create a PsExec worker manually
# Uncomment and modify with your settings to test
# manual_worker = init_ras_worker(
# "psexec",
# hostname="192.168.1.100",
# share_path=r"\\192.168.1.100\RasRemote",
# worker_folder=r"C:\RasRemote",
# credentials={
# "username": "your_username",
# "password": "your_password"
# },
# session_id=2,
# cores_total=8,
# cores_per_plan=2
# )
#
# print(f"Manual worker created: {manual_worker.worker_id}")
# print(f" Parallel Capacity: {manual_worker.max_parallel_plans} plans")
print("Uncomment the code above to create a manual worker.")
Uncomment the code above to create a manual worker.
Part 7: Cleanup (Optional)¶
Clean up temporary worker folders on remote shares.
# Cleanup function for remote shares
def cleanup_remote_shares(workers, dry_run=True):
"""Clean up worker folders from remote shares."""
import shutil
from ras_commander.remote.Utils import authenticate_network_share
seen_shares = set()
for w in workers:
if not hasattr(w, 'share_path') or not w.share_path:
continue
share_path = Path(w.share_path)
if str(share_path) in seen_shares:
continue
seen_shares.add(str(share_path))
# UNC access to a credentialed share needs an authenticated session first,
# otherwise share_path.exists() raises PermissionError (WinError 5).
creds = getattr(w, 'credentials', None) or {}
if creds.get('username') and creds.get('password'):
authenticate_network_share(w.share_path, creds['username'], creds['password'])
try:
if not share_path.exists():
continue
folders = [f for f in share_path.iterdir() if f.is_dir()]
print(f"Share: {share_path}")
print(f" Folders: {len(folders)}")
for folder in folders:
folder_size = sum(f.stat().st_size for f in folder.rglob('*') if f.is_file())
folder_size_mb = folder_size / (1024 * 1024)
if dry_run:
print(f" [WOULD DELETE] {folder.name} ({folder_size_mb:.1f} MB)")
else:
print(f" [DELETING] {folder.name}")
shutil.rmtree(folder, ignore_errors=True)
except Exception as e:
print(f"Error accessing {share_path}: {e}")
# Preview cleanup (dry run)
if workers:
print("CLEANUP PREVIEW (dry_run=True):")
cleanup_remote_shares(workers, dry_run=True)
print("Set dry_run=False to actually delete folders.")
else:
print("No workers loaded - nothing to clean up.")
CLEANUP PREVIEW (dry_run=True):
Share: <WORKER-SHARE-2>\
Folders: 3
[WOULD DELETE] BaldEagleDamBrk_03_SW1_140a1b33 (0.0 MB)
[WOULD DELETE] BaldEagleDamBrk_04_SW2_4b9689d9 (0.0 MB)
[WOULD DELETE] BaldEagleDamBrk_06_SW3_3875b0bc (0.0 MB)
Share: <WORKER-SHARE-3>\
Folders: 0
Set dry_run=False to actually delete folders.
Summary: Local vs Remote Execution¶
| Feature | Local (compute_parallel) |
Remote (compute_parallel_remote) |
|---|---|---|
| Setup | None | Configure RemoteWorkers.json |
| Execution | Local machine only | Remote machines via PsExec/Docker |
| File Transfer | Direct | Via network shares |
| Scaling | Limited by local cores | Unlimited remote machines |
| Best For | Small jobs, testing | Large batches, distributed work |
Quick Reference¶
Local Parallel:
results = RasCmdr.compute_parallel(
plan_number=["01", "02", "03"],
max_workers=3,
num_cores=2,
ras_object=ras
)
Remote Parallel:
workers = load_workers_from_json("RemoteWorkers.json")
results = compute_parallel_remote(
plan_numbers=["01", "02", "03"],
workers=workers,
num_cores=4
)
For complete setup instructions, see:
- feature_dev_notes/RasRemote/REMOTE_WORKER_SETUP_GUIDE.md