Skip to content

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

PowerShell
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `
    -Name "LocalAccountTokenFilterPolicy" -Value 1 -PropertyType DWORD -Force
4. Remote Registry Service: Must be running 5. User Permissions: User must be in Administrators group

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

Python
# =============================================================================
# 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__}")
Text Only
📦 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
Python
# 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.

Python
# =============================================================================
# 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}")
Text Only
Configuration: BaldEagleCrkMulti2D project, RAS 7.0
Python
# 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'])}")
Text Only
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.

Python
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")
Text Only
Plans to execute: ['03', '04', '06']
Configuration: 2 cores x 3 workers
Python
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)")
Text Only
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)
Python
# 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
Python
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]')}")
Text Only
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

  1. Copy RemoteWorkers.json.template to RemoteWorkers.json
  2. Edit RemoteWorkers.json with your remote machine details
  3. The JSON file is in .gitignore for 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

JSON
{
  "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
    }
  ]
}
Python
# 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
Text Only
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

Python
# 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 = []
Text Only
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
Python
# 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)}")
Text Only
Plans to execute: ['03', '04', '06']
Workers available: 4
Python
# 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 = {}
Text Only
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)
Python
# 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
Python
# 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.")
Text Only
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.

Python
# 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")
Text Only
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.

Python
# 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.")
Text Only
Uncomment the code above to create a manual worker.

Part 7: Cleanup (Optional)

Clean up temporary worker folders on remote shares.

Python
# 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.")
Text Only
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:

Python
results = RasCmdr.compute_parallel(
    plan_number=["01", "02", "03"],
    max_workers=3,
    num_cores=2,
    ras_object=ras
)

Remote Parallel:

Python
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