Skip to content

Parallel Execution

Python
# =============================================================================
# DEVELOPMENT MODE TOGGLE
# =============================================================================
USE_LOCAL_SOURCE = False  # <-- TOGGLE THIS

if USE_LOCAL_SOURCE:
    import sys
    from pathlib import Path
    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
from ras_commander import RasCmdr, RasExamples, RasPrj, init_ras_project, ras

# Additional imports
import numpy as np
import pandas as pd
from IPython import display
import matplotlib.pyplot as plt
import psutil  # For getting system CPU info
from concurrent.futures import ThreadPoolExecutor, as_completed
import time
import subprocess
import shutil
import math  # Import math to avoid NameError in get_optimal_worker_count function

# Verify which version loaded
import ras_commander
print(f"✓ Loaded: {ras_commander.__file__}")
Text Only
📦 PIP PACKAGE MODE: Loading installed ras-commander


2026-06-02 15:12:00 - numexpr.utils - INFO - NumExpr defaulting to 8 threads.


✓ Loaded: <workspace>\ras_commander\__init__.py

Prerequisites

Before running this notebook, ensure you have:

  1. ras-commander installed: pip install ras-commander
  2. Python 3.10+: Check with python --version
  3. HEC-RAS 6.3+: REQUIRED for plan execution
  4. Disk Space: ~5 GB (multiple worker folders + results)
  5. CPU Cores: 2+ recommended for efficient parallelization (since core scaling is nonlinear)
  6. Notebook Timeout: full verification of the Bald Eagle 2D plan set is long-running; use a 4-hour nbconvert cell timeout for automated execution

What You'll Learn

This notebook demonstrates parallel plan execution using RasCmdr.compute_parallel():

  • Worker Folders: How ras-commander creates isolated execution environments
  • Concurrent Execution: Run multiple plans simultaneously
  • Dynamic Worker Allocation: Automatically scale to available CPU cores
  • Performance Comparison: Measure speedup vs sequential execution
  • 110_single_plan_execution.ipynb - Single plan fundamentals
  • 111_executing_plan_sets.ipynb - Sequential plan sets
  • 112_sequential_plan_execution.ipynb - Test mode for debugging
  • 102_multiple_project_operations.ipynb - Parallel across different projects

Key Concept: Worker Folder Pattern

compute_parallel() creates separate worker folders for each plan:

Text Only
project_folder/
  [project_name] [AllWorkers]/
    worker_01/          # Plan 01 executes here
      project_files...
      results.p01.hdf
    worker_02/          # Plan 02 executes here
      project_files...
      results.p02.hdf
    worker_03/          # Plan 03 executes here
      ...

Why separate folders? - Isolation: Plans don't interfere with each other - Concurrent Access: Each HEC-RAS instance has its own files - Result Organization: Easy to identify which plan produced which output

Performance Expectations

Sequential: Plans run one after another - Total time = sum of all plan execution times

Parallel: Plans run simultaneously - Total time ≈ longest single plan execution time - Speedup = number of plans (if enough cores)

Example: 4 plans, each taking 10 minutes - Sequential: 40 minutes total - Parallel (4+ cores): ~10-12 minutes total

For this notebook's BaldEagleCrkMulti2D verification project, a full run on a typical multi-core workstation completed in 11,825.40 seconds (3 hr 17 min 5 sec) with --ExecutePreprocessor.timeout=21600. The all-plans parallel cell was the longest section at 10,513.19 seconds (2 hr 55 min 13 sec), dominated by plan 01 at 10,070.87 seconds. The later specific-plans and dynamic-worker cells completed in 565.60 seconds and 733.62 seconds, respectively. A 60-minute cell timeout is expected to stop the real 2D run before completion.

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.)

# Execution Settings
PLAN = ["06", "15", "17", "19"]                       # Plan number to execute
NUM_CORES = 2                     # CPU cores for 2D computation
RUN_SUFFIX = "run"                # Suffix for run folder (e.g., Muncie_run)

Setting Up Our Working Environment

Let's set up our working directory and check the system resources available for parallel execution. This will help us make informed decisions about how many workers to use.

For this notebook we will be using the "Muncie" HEC Example Project

Understanding Parallel Execution in HEC-RAS

HEC-RAS simulations can be computationally intensive, especially for large models or long simulation periods. Parallel execution allows you to run multiple plans simultaneously, making better use of your computer's processing power.

Key Concepts in Parallel Execution

  1. Workers: Each worker is a separate process that can execute a HEC-RAS plan. The max_workers parameter determines how many plans can be executed simultaneously.

  2. Cores per Worker: Each worker (HEC-RAS instance) can utilize multiple CPU cores. The num_cores parameter sets how many cores each worker uses.

  3. Resource Balancing: Effective parallel execution requires balancing the number of workers with the cores per worker. Too many workers or too many cores per worker can lead to resource contention and slower overall performance.

  4. Worker Folders: Each worker gets its own folder with a copy of the project, allowing for isolated execution.

Parallel vs. Sequential Execution

  • Parallel: Multiple plans run simultaneously (good for independent plans, faster overall completion)
  • Sequential: Plans run one after another (good for dependent plans, consistent resource usage)

Optimal Configuration

The optimal configuration depends on your hardware and the specific plans you're running:

  • For most models, 2-4 cores per worker provides good performance
  • Set max_workers based on available physical cores: max_workers = floor(physical_cores / cores_per_worker)
  • Ensure you have enough memory: each worker typically needs 2-4 GB of RAM

Now, let's download and extract our example project.

Downloading and Extracting Example HEC-RAS Project

Let's use the RasExamples class to download and extract the "Balde Eagle Creek" example project.

Python
# Extract the Muncie example project
from ras_commander import RasExamples

muncie_path = RasExamples.extract_project(PROJECT_NAME, suffix="113")
print(f"Extracted project to: {muncie_path}")

# Define compute folders for different parallel execution approaches
examples_dir = muncie_path.parent
compute_folder = examples_dir / "compute_test_parallel_113"
specific_compute_folder = examples_dir / "compute_test_parallel_specific_113"
dynamic_compute_folder = examples_dir / "compute_test_parallel_dynamic_113"

# Clean up stale compute and worker directories from previous runs
import glob as _glob
for _stale in [compute_folder, specific_compute_folder, dynamic_compute_folder]:
    if _stale.exists():
        shutil.rmtree(_stale, ignore_errors=True)
        print(f"Cleaned up stale directory: {_stale}")
# Remove any leftover [AllWorkers] directories in the parent folder
for _worker_dir in examples_dir.glob("*[[]AllWorkers]*"):
    if _worker_dir.is_dir():
        shutil.rmtree(_worker_dir, ignore_errors=True)
        print(f"Cleaned up stale worker directory: {_worker_dir}")

print(f"\nCompute folders:")
print(f"  All plans: {compute_folder}")
print(f"  Specific plans: {specific_compute_folder}")
print(f"  Dynamic workers: {dynamic_compute_folder}")

# Get system resource information for parallel execution planning
physical_cores = psutil.cpu_count(logical=False)
logical_cores = psutil.cpu_count(logical=True)
print(f"\nSystem Resources:")
print(f"  Physical cores: {physical_cores}")
print(f"  Logical cores: {logical_cores}")

# Helper function to calculate optimal worker count
def get_optimal_worker_count(cores_per_worker):
    """Calculate optimal number of workers based on physical cores and cores per worker."""
    return max(1, int(physical_cores / cores_per_worker))
Text Only
2026-06-02 15:12:03 - ras_commander.RasExamples - INFO - Successfully extracted project 'BaldEagleCrkMulti2D' to <workspace>\examples\example_projects\BaldEagleCrkMulti2D_113


Extracted project to: <workspace>\examples\example_projects\BaldEagleCrkMulti2D_113
Cleaned up stale directory: <workspace>\examples\example_projects\compute_test_parallel_113
Cleaned up stale directory: <workspace>\examples\example_projects\compute_test_parallel_specific_113
Cleaned up stale directory: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113

Compute folders:
  All plans: <workspace>\examples\example_projects\compute_test_parallel_113
  Specific plans: <workspace>\examples\example_projects\compute_test_parallel_specific_113
  Dynamic workers: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113

System Resources:
  Physical cores: 8
  Logical cores: 8

Step 1: Project Initialization

Let's initialize the HEC-RAS project using the init_ras_project() function. We'll store the initialized object in a variable to use later, rather than relying on the global ras object. This approach is more suitable for working with multiple projects or compute folders.

Python
# Initialize the source project
source_project = init_ras_project(muncie_path, RAS_VERSION)
print(f"Initialized source project: {source_project.project_name}")

# Display the current plan files in the project
print("\nAvailable plans in the project:")
display.display(source_project.plan_df)

# Check how many plans we have
plan_count = len(source_project.plan_df)
print(f"Found {plan_count} plans in the project")
Text Only
2026-06-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 4 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 4\Ras.exe via filesystem (x86)


2026-06-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.4.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.4.1\Ras.exe via filesystem (x86)


2026-06-02 15:12:03 - 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-02 15:12:03 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3 at C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe via filesystem (x86)


2026-06-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - 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-02 15:12:03 - ras_commander.RasUtils - INFO - Discovered 20 installed HEC-RAS version(s)


2026-06-02 15:12:03 - 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-02 15:12:04 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\BaldEagleCrkMulti2D_113\BaldEagleDamBrk.rasmap


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\BaldEagleCrkMulti2D_113


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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).
═══════════════════════════════════════════════════════════════════════


Initialized source project: BaldEagleDamBrk

Available plans in the project:
plan_number unsteady_number geometry_number Plan Title Program Version Short Identifier Simulation Date Computation Interval Mapping Interval Run HTab ... Friction Slope Method UNET D2 SolverType UNET D2 Name HDF_Results_Path Geom File Geom Path Flow File Flow Path full_path flow_type
0 13 07 06 PMF with Multi 2D Areas 5.10 PMF Multi 2D 01JAN1999,1200,04JAN1999,1200 30SEC 30MIN 1 ... 1 Pardiso (Direct) 193 None 06 ... 07 ... ... Unsteady
1 15 12 08 1d-2D Dambreak Refined Grid 5.10 1D-2D Refined Grid 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr None 08 ... 12 ... ... Unsteady
2 17 09 10 2D to 1D No Dam 5.00 2D to 1D No Dam 01JAN1999,1200,06JAN1999,1200 1MIN 5MIN 1 ... 1 NaN Upstream2D None 10 ... 09 ... ... Unsteady
3 18 10 11 2D to 2D Run 5.00 2D to 2D Run 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr None 11 ... 10 ... ... Unsteady
4 19 11 12 SA to 2D Dam Break Run 5.00 SA to 2D Dam Break 01JAN1999,1200,04JAN1999,1200 20SEC 10MIN 1 ... 1 NaN BaldEagleCr None 12 ... 11 ... ... Unsteady
5 03 13 09 Single 2D Area - Internal Dam Structure 5.04 Single 2D 01JAN1999,1200,04JAN1999,1200 30SEC 10MIN 1 ... 1 NaN BaldEagleCr None 09 ... 13 ... ... Unsteady
6 04 01 13 SA to 2D Area Conn - 2D Levee Structure 5.00 2D Levee Struc 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr None 13 ... 01 ... ... Unsteady
7 02 01 01 SA to Detailed 2D Breach 5.10 SA-2D Det Brch 01JAN1999,1200,04JAN1999,1200 10SEC 5MIN 1 ... 1 Pardiso (Direct) BaldEagleCr None 01 ... 01 ... ... Unsteady
8 01 01 01 SA to Detailed 2D Breach FEQ 5.03 SA-2D Det FEQ 01JAN1999,1200,04JAN1999,1200 5SEC 5MIN 1 ... 1 NaN BaldEagleCr None 01 ... 01 ... ... Unsteady
9 05 02 03 Single 2D area with Bridges FEQ 5.10 Single 2D Bridges FEQ 01JAN1999,1200,04JAN1999,1200 5SEC 10MIN -1 ... 1 PARDISO (Direct) BaldEagleCr None 03 ... 02 ... ... Unsteady
10 06 03 09 Gridded Precip - Infiltration 6.00 Grid Precip Infiltration 09SEP2018,0000,14SEP2018,0000 20SEC 10MIN -1 ... 1 Pardiso (Direct) BaldEagleCr None 09 ... 03 ... ... Unsteady

11 rows × 36 columns

Text Only
Found 11 plans in the project

Understanding the RasCmdr.compute_parallel Method

Before we start executing plans in parallel, let's understand the compute_parallel() method from the RasCmdr class.

Key Parameters

  • plan_number (Union[str, List[str], None]): Plan number(s) to compute. If None, all plans are computed.
  • max_workers (int): Maximum number of parallel workers (default: 2).
  • num_cores (int): Number of cores to use per plan computation (default: 2).
  • clear_geompre (bool): Whether to clear geometry preprocessor files (default: False).
  • ras_object (Optional[RasPrj]): Specific RAS object to use. If None, uses global ras instance.
  • dest_folder (Union[str, Path, None]): Destination folder for computed results.
  • overwrite_dest (bool): Whether to overwrite existing destination folder (default: False).

Return Value

  • Dict[str, bool]: Dictionary of plan numbers and their execution success status.

Key Concepts

  1. Worker Assignment: Plans are assigned to workers in a round-robin fashion. For example, with 3 workers and 5 plans, workers would be assigned as follows: Worker 1: Plans 1 & 4, Worker 2: Plans 2 & 5, Worker 3: Plan 3.

  2. Worker Folders: Each worker gets its own folder (a subdirectory of the destination folder) for isolated execution.

  3. Result Consolidation: After all plans are executed, results are consolidated into the destination folder.

  4. Resource Management: Each worker can use multiple cores as specified by num_cores.

Now, let's see how this works in practice.

Step 2: Parallel Execution of All Plans

Let's execute all plans in the project in parallel. We'll use 4 workers, with 1 core per worker. This section runs the complete 2D plan set and can take nearly 3 hours on a typical multi-core workstation; use a 4-hour cell timeout when executing the notebook through nbconvert. This approach is good when you have multiple plans that are independent of each other and you want to complete them as quickly as possible.

Python
print("Executing all plans in parallel...")
print("This full 2D plan set can take hours; use a 4-hour cell timeout for automated verification.")

# Create compute folder if it doesn't exist
compute_folder.mkdir(parents=True, exist_ok=True)

# Define the parameters for parallel execution
max_workers = 4
cores_per_worker = 1

print(f"Using {max_workers} parallel workers, each with {cores_per_worker} cores")
print(f"Destination folder: {compute_folder}")

# Record start time for performance measurement
start_time = time.time()

# Execute all plans in parallel
results_all = RasCmdr.compute_parallel(
    max_workers=max_workers,
    num_cores=cores_per_worker,
    dest_folder=compute_folder,
    overwrite_dest=True,
    ras_object=source_project
)

# Record end time and calculate duration
end_time = time.time()
total_duration = end_time - start_time

print(f"Parallel execution of all plans completed in {total_duration:.2f} seconds")

# Create a DataFrame from the execution results for better visualization
results_df = pd.DataFrame([
    {"Plan": plan, "Success": success}
    for plan, success in results_all.items()
])

# Sort by plan number
results_df = results_df.sort_values("Plan")

# Display the results
print("\nExecution Results:")
display.display(results_df)
Text Only
2026-06-02 15:12:04 - ras_commander.RasCmdr - INFO - Destination folder '<workspace>\examples\example_projects\compute_test_parallel_113' exists. Overwriting as per overwrite_dest=True.


2026-06-02 15:12:04 - ras_commander.RasCmdr - INFO - Copied project folder to destination: <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 15:12:04 - ras_commander.RasCmdr - INFO - Adjusted max_workers to 4 based on the number of plans to compute: 11


Executing all plans in parallel...
This full 2D plan set can take hours; use a 4-hour cell timeout for automated verification.
Using 4 parallel workers, each with 1 cores
Destination folder: <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 15:12:04 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]


2026-06-02 15:12:04 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.rasmap


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 15:12:04 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 15:12:05 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]


2026-06-02 15:12:05 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.rasmap


2026-06-02 15:12:05 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 15:12:05 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]


2026-06-02 15:12:05 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 15:12:05 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 15:12:05 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]


2026-06-02 15:12:06 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.rasmap


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 15:12:06 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]


2026-06-02 15:12:06 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.rasmap


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 15:12:06 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 15:12:06 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]


2026-06-02 15:12:06 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]


2026-06-02 15:12:06 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]


2026-06-02 15:12:06 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]


2026-06-02 15:12:06 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p15


2026-06-02 15:12:06 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p13


2026-06-02 15:12:06 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p17


2026-06-02 15:12:06 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.p18


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 13


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p13"


2026-06-02 15:12:07 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 15


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 17


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p15"


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:12:07 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p17"


2026-06-02 15:12:07 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 18


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:12:07 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.p18"


2026-06-02 15:12:07 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 18


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Total run time for plan 18: 130.60 seconds


2026-06-02 15:14:18 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Plan 18 executed in worker 4: Successful


2026-06-02 15:14:18 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p19


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 19


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:14:18 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p19"


2026-06-02 15:14:18 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:14:48 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 13


2026-06-02 15:14:48 - ras_commander.RasCmdr - INFO - Total run time for plan 13: 161.18 seconds


2026-06-02 15:14:48 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:14:49 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]


2026-06-02 15:14:49 - ras_commander.RasCmdr - INFO - Plan 13 executed in worker 1: Successful


2026-06-02 15:14:49 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p03


2026-06-02 15:14:49 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 03


2026-06-02 15:14:49 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:14:49 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p03"


2026-06-02 15:14:49 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:16:00 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 19


2026-06-02 15:16:00 - ras_commander.RasCmdr - INFO - Total run time for plan 19: 101.69 seconds


2026-06-02 15:16:00 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:16:00 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]


2026-06-02 15:16:00 - ras_commander.RasCmdr - INFO - Plan 19 executed in worker 1: Successful


2026-06-02 15:16:00 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p04


2026-06-02 15:16:01 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 04


2026-06-02 15:16:01 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:16:01 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p04"


2026-06-02 15:16:01 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:16:18 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 17


2026-06-02 15:16:18 - ras_commander.RasCmdr - INFO - Total run time for plan 17: 251.19 seconds


2026-06-02 15:16:18 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:16:19 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]


2026-06-02 15:16:19 - ras_commander.RasCmdr - INFO - Plan 17 executed in worker 3: Successful


2026-06-02 15:16:19 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.p02


2026-06-02 15:16:19 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 02


2026-06-02 15:16:19 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:16:19 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 4]\BaldEagleDamBrk.p02"


2026-06-02 15:16:19 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 15


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Total run time for plan 15: 427.64 seconds


2026-06-02 15:19:15 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Plan 15 executed in worker 2: Successful


2026-06-02 15:19:15 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p01


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 01


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:19:15 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 1]\BaldEagleDamBrk.p01"


2026-06-02 15:19:15 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 03


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Total run time for plan 03: 598.96 seconds


2026-06-02 15:24:48 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Plan 03 executed in worker 2: Successful


2026-06-02 15:24:48 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p05


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 05


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:24:48 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 2]\BaldEagleDamBrk.p05"


2026-06-02 15:24:48 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 04


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Total run time for plan 04: 829.00 seconds


2026-06-02 15:29:50 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Plan 04 executed in worker 3: Successful


2026-06-02 15:29:50 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p06


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Set number of cores to 1 for plan: 06


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 15:29:50 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_113 [Worker 3]\BaldEagleDamBrk.p06"


2026-06-02 15:29:50 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 15:48:14 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 06


2026-06-02 15:48:14 - ras_commander.RasCmdr - INFO - Total run time for plan 06: 1103.87 seconds


2026-06-02 15:48:14 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 15:48:15 - ras_commander.RasCmdr - INFO - Plan 06 executed in worker 3: Successful


2026-06-02 16:27:43 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 02


2026-06-02 16:27:43 - ras_commander.RasCmdr - INFO - Total run time for plan 02: 4283.85 seconds


2026-06-02 16:27:43 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 16:27:43 - ras_commander.RasCmdr - INFO - Plan 02 executed in worker 4: Successful


2026-06-02 16:41:42 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 05


2026-06-02 16:41:42 - ras_commander.RasCmdr - INFO - Total run time for plan 05: 4613.92 seconds


2026-06-02 16:41:42 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 16:41:43 - ras_commander.RasCmdr - INFO - Plan 05 executed in worker 2: Successful


2026-06-02 18:07:06 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 01


2026-06-02 18:07:06 - ras_commander.RasCmdr - INFO - Total run time for plan 01: 10070.87 seconds


2026-06-02 18:07:06 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:07:07 - ras_commander.RasCmdr - INFO - Plan 01 executed in worker 1: Successful


2026-06-02 18:07:07 - ras_commander.RasCmdr - INFO - Consolidating results to destination folder: <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Consolidated 47 worker artifact(s) to <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 18:07:16 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113\BaldEagleDamBrk.rasmap


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Re-initialized ras_object from destination folder: <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - 
Execution Results:


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 18: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 13: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 19: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 17: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 15: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 03: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 04: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 06: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 02: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 05: Successful


2026-06-02 18:07:16 - ras_commander.RasCmdr - INFO - Plan 01: Successful


Parallel execution of all plans completed in 10513.18 seconds

Execution Results:
Plan Success
10 01 True
8 02 True
5 03 True
6 04 True
9 05 True
7 06 True
1 13 True
4 15 True
3 17 True
0 18 True
2 19 True

Verification: Parallel Execution

Success Criteria: - All worker folders created (check [project] [AllWorkers]/ directory) - Each worker folder has HDF file for its plan - No exceptions during concurrent execution - Execution time significantly less than sequential (if enough cores)

Verification Code:

Python
from pathlib import Path

# Check worker folders
workers_folder = muncie_path.parent / f"{ras.project_name} [AllWorkers]"
assert workers_folder.exists(), "Worker folder not created"

# Verify each plan has results
plans_to_run = ["01", "02", "03"]  # Adjust to your plans
for plan in plans_to_run:
    worker_dir = workers_folder / f"worker_{plan}"
    hdf_file = list(worker_dir.glob(f"*.p{plan}.hdf"))

    assert len(hdf_file) > 0, f"HDF not found for plan {plan} in worker folder"
    assert hdf_file[0].stat().st_size > 1024, f"HDF too small for plan {plan}"

    print(f"[OK] Plan {plan}: {hdf_file[0].stat().st_size / 1e6:.1f} MB")

Performance Verification:

Python
import time

# Time sequential execution
start = time.time()
RasCmdr.compute_test_mode(["01", "02", "03"])  # Sequential
sequential_time = time.time() - start

# Time parallel execution
start = time.time()
RasCmdr.compute_parallel(["01", "02", "03"])  # Parallel
parallel_time = time.time() - start

speedup = sequential_time / parallel_time
print(f"Sequential: {sequential_time:.1f}s")
print(f"Parallel: {parallel_time:.1f}s")
print(f"Speedup: {speedup:.2f}x")

Visual Inspection: 1. Open each worker folder in HEC-RAS GUI 2. Verify plan executed successfully 3. Check RAS Mapper for valid results 4. Compare results across workers for consistency

Debugging Parallel Execution

Issue: One plan fails but others succeed

Solution: Check individual worker logs

Python
# Find failed worker
for plan in plans_to_run:
    worker_dir = workers_folder / f"worker_{plan}"
    hdf_file = list(worker_dir.glob("*.hdf"))

    if not hdf_file:
        print(f"[FAILED] Plan {plan} - no HDF created")

        # Check computation messages in that worker
        # (requires opening project in that folder)

Step 3: Examining the Parallel Execution Results

Let's initialize a RAS project in the compute folder and examine the results of the parallel execution. This will help us understand what happened during the process.

Python
# Initialize a RAS project in the compute folder
compute_project = RasPrj()
init_ras_project(compute_folder, RAS_VERSION, ras_object=compute_project)
print(f"Initialized compute project: {compute_project.project_name}")

# Display the plan files in the compute folder
print("\nPlans in the compute folder:")
display.display(compute_project.plan_df)

# Check which plans have results
plans_with_results = compute_project.plan_df[compute_project.plan_df['HDF_Results_Path'].notna()]
print(f"\nFound {len(plans_with_results)} plans with results:")
display.display(plans_with_results[['plan_number', 'HDF_Results_Path']])

# List the worker folders (they should have been removed during results consolidation)
worker_folders = list(compute_folder.glob("*Worker*"))
if worker_folders:
    print(f"\nFound {len(worker_folders)} worker folders:")
    for folder in worker_folders:
        print(f"  {folder.name}")
else:
    print("\nNo worker folders remain in the compute folder (they were removed during results consolidation)")

# Check for HDF result files
hdf_files = list(compute_folder.glob("*.hdf"))
hdf_files.sort()

print(f"\nFound {len(hdf_files)} HDF files in the compute folder:")
for file in hdf_files:
    file_size = file.stat().st_size / (1024 * 1024)  # Size in MB
    print(f"  {file.name}: {file_size:.1f} MB")
Text Only
2026-06-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 4 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 4\Ras.exe via filesystem (x86)


2026-06-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.4.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.4.1\Ras.exe via filesystem (x86)


2026-06-02 18:07:17 - 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-02 18:07:17 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3 at C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe via filesystem (x86)


2026-06-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - 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-02 18:07:17 - ras_commander.RasUtils - INFO - Discovered 20 installed HEC-RAS version(s)


2026-06-02 18:07:17 - 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-02 18:07:17 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_113\BaldEagleDamBrk.rasmap


2026-06-02 18:07:17 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:07:17 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_113


2026-06-02 18:07:17 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:07:17 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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).
═══════════════════════════════════════════════════════════════════════


Initialized compute project: BaldEagleDamBrk

Plans in the compute folder:
plan_number unsteady_number geometry_number Plan Title Program Version Short Identifier Simulation Date Computation Interval Mapping Interval Run HTab ... Friction Slope Method UNET D2 SolverType UNET D2 Name HDF_Results_Path Geom File Geom Path Flow File Flow Path full_path flow_type
0 13 07 06 PMF with Multi 2D Areas 5.10 PMF Multi 2D 01JAN1999,1200,04JAN1999,1200 30SEC 30MIN 1 ... 1 Pardiso (Direct) 193 ... 06 ... 07 ... ... Unsteady
1 15 12 08 1d-2D Dambreak Refined Grid 5.10 1D-2D Refined Grid 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr ... 08 ... 12 ... ... Unsteady
2 17 09 10 2D to 1D No Dam 5.00 2D to 1D No Dam 01JAN1999,1200,06JAN1999,1200 1MIN 5MIN 1 ... 1 NaN Upstream2D ... 10 ... 09 ... ... Unsteady
3 18 10 11 2D to 2D Run 5.00 2D to 2D Run 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr ... 11 ... 10 ... ... Unsteady
4 19 11 12 SA to 2D Dam Break Run 5.00 SA to 2D Dam Break 01JAN1999,1200,04JAN1999,1200 20SEC 10MIN 1 ... 1 NaN BaldEagleCr ... 12 ... 11 ... ... Unsteady
5 03 13 09 Single 2D Area - Internal Dam Structure 5.04 Single 2D 01JAN1999,1200,04JAN1999,1200 30SEC 10MIN 1 ... 1 NaN BaldEagleCr ... 09 ... 13 ... ... Unsteady
6 04 01 13 SA to 2D Area Conn - 2D Levee Structure 5.00 2D Levee Struc 01JAN1999,1200,04JAN1999,1200 20SEC 5MIN 1 ... 1 NaN BaldEagleCr ... 13 ... 01 ... ... Unsteady
7 02 01 01 SA to Detailed 2D Breach 5.10 SA-2D Det Brch 01JAN1999,1200,04JAN1999,1200 10SEC 5MIN 1 ... 1 Pardiso (Direct) BaldEagleCr ... 01 ... 01 ... ... Unsteady
8 01 01 01 SA to Detailed 2D Breach FEQ 5.03 SA-2D Det FEQ 01JAN1999,1200,04JAN1999,1200 5SEC 5MIN 1 ... 1 NaN BaldEagleCr ... 01 ... 01 ... ... Unsteady
9 05 02 03 Single 2D area with Bridges FEQ 5.10 Single 2D Bridges FEQ 01JAN1999,1200,04JAN1999,1200 5SEC 10MIN -1 ... 1 PARDISO (Direct) BaldEagleCr ... 03 ... 02 ... ... Unsteady
10 06 03 09 Gridded Precip - Infiltration 6.00 Grid Precip Infiltration 09SEP2018,0000,14SEP2018,0000 20SEC 10MIN -1 ... 1 Pardiso (Direct) BaldEagleCr ... 09 ... 03 ... ... Unsteady

11 rows × 36 columns

Text Only
Found 11 plans with results:
plan_number HDF_Results_Path
0 13 ...
1 15 ...
2 17 ...
3 18 ...
4 19 ...
5 03 ...
6 04 ...
7 02 ...
8 01 ...
9 05 ...
10 06 ...
Text Only
No worker folders remain in the compute folder (they were removed during results consolidation)

Found 31 HDF files in the compute folder:
  BaldEagleDamBrk.g01.hdf: 39.4 MB
  BaldEagleDamBrk.g02.hdf: 1.9 MB
  BaldEagleDamBrk.g03.hdf: 16.3 MB
  BaldEagleDamBrk.g06.hdf: 10.9 MB
  BaldEagleDamBrk.g08.hdf: 12.4 MB
  BaldEagleDamBrk.g09.hdf: 11.2 MB
  BaldEagleDamBrk.g10.hdf: 6.5 MB
  BaldEagleDamBrk.g11.hdf: 3.6 MB
  BaldEagleDamBrk.g12.hdf: 2.7 MB
  BaldEagleDamBrk.g13.hdf: 8.8 MB
  BaldEagleDamBrk.p01.hdf: 462.3 MB
  BaldEagleDamBrk.p02.hdf: 407.1 MB
  BaldEagleDamBrk.p03.hdf: 59.1 MB
  BaldEagleDamBrk.p04.hdf: 81.8 MB
  BaldEagleDamBrk.p05.hdf: 85.6 MB
  BaldEagleDamBrk.p06.hdf: 577.2 MB
  BaldEagleDamBrk.p13.hdf: 18.9 MB
  BaldEagleDamBrk.p15.hdf: 88.7 MB
  BaldEagleDamBrk.p17.hdf: 47.7 MB
  BaldEagleDamBrk.p18.hdf: 23.3 MB
  BaldEagleDamBrk.p19.hdf: 11.1 MB
  BaldEagleDamBrk.u01.hdf: 0.0 MB
  BaldEagleDamBrk.u02.hdf: 0.0 MB
  BaldEagleDamBrk.u03.hdf: 0.0 MB
  BaldEagleDamBrk.u07.hdf: 0.0 MB
  BaldEagleDamBrk.u08.hdf: 0.0 MB
  BaldEagleDamBrk.u09.hdf: 0.0 MB
  BaldEagleDamBrk.u10.hdf: 0.0 MB
  BaldEagleDamBrk.u11.hdf: 0.0 MB
  BaldEagleDamBrk.u12.hdf: 0.0 MB
  BaldEagleDamBrk.u13.hdf: 0.0 MB

Additional Examples:

Parallel Execution of Specific Plans

Now, let's execute only specific plans in the project in parallel. This approach is useful when you only want to run a subset of the available plans, perhaps for testing or comparison purposes.

Python
print("Executing specific plans in parallel...")
print("This subset usually runs faster than the all-plans batch, but it can still take several minutes.")

# Create specific compute folder if it doesn't exist
specific_compute_folder.mkdir(parents=True, exist_ok=True)

# Define the plans to execute
specific_plans = PLAN
print(f"Selected plans: {', '.join(specific_plans)}")

# Define the parameters for parallel execution
max_workers = 2  # One for each plan
cores_per_worker = 2

print(f"Using {max_workers} parallel workers, each with {cores_per_worker} cores")
print(f"Destination folder: {specific_compute_folder}")

# Record start time for performance measurement
start_time = time.time()

# Execute specific plans in parallel
results_specific = RasCmdr.compute_parallel(
    plan_number=specific_plans,
    max_workers=max_workers,
    num_cores=cores_per_worker,
    dest_folder=specific_compute_folder,
    overwrite_dest=True,
    ras_object=source_project
)

# Record end time and calculate duration
end_time = time.time()
specific_duration = end_time - start_time

print(f"Parallel execution of specific plans completed in {specific_duration:.2f} seconds")

# Create a DataFrame from the execution results for better visualization
specific_results_df = pd.DataFrame([
    {"Plan": plan, "Success": success}
    for plan, success in results_specific.items()
])

# Sort by plan number
specific_results_df = specific_results_df.sort_values("Plan")

# Display the results
print("\nExecution Results:")
display.display(specific_results_df)

# Initialize a RAS project in the specific compute folder
specific_compute_project = RasPrj()
init_ras_project(specific_compute_folder, RAS_VERSION, ras_object=specific_compute_project)
print(f"\nInitialized specific compute project: {specific_compute_project.project_name}")

# Check which plans have results
specific_plans_with_results = specific_compute_project.plan_df[specific_compute_project.plan_df['HDF_Results_Path'].notna()]
print(f"Found {len(specific_plans_with_results)} plans with results:")
display.display(specific_plans_with_results[['plan_number', 'HDF_Results_Path']])
Text Only
2026-06-02 18:07:17 - ras_commander.RasCmdr - INFO - Destination folder '<workspace>\examples\example_projects\compute_test_parallel_specific_113' exists. Overwriting as per overwrite_dest=True.


Executing specific plans in parallel...
This subset usually runs faster than the all-plans batch, but it can still take several minutes.
Selected plans: 06, 15, 17, 19
Using 2 parallel workers, each with 2 cores
Destination folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:07:19 - ras_commander.RasCmdr - INFO - Copied project folder to destination: <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:07:19 - ras_commander.RasCmdr - INFO - Filtered plans to execute: ['15', '17', '19', '06']


2026-06-02 18:07:19 - ras_commander.RasCmdr - INFO - Adjusted max_workers to 2 based on the number of plans to compute: 4


2026-06-02 18:07:20 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]


2026-06-02 18:07:21 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.rasmap


2026-06-02 18:07:21 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:07:21 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]


2026-06-02 18:07:21 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:07:21 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:07:22 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]


2026-06-02 18:07:23 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.rasmap


2026-06-02 18:07:23 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:07:23 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]


2026-06-02 18:07:23 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:07:23 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:07:23 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]


2026-06-02 18:07:23 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]


2026-06-02 18:07:23 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.p17


2026-06-02 18:07:23 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.p15


2026-06-02 18:07:23 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 17


2026-06-02 18:07:23 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:07:23 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.p17"


2026-06-02 18:07:23 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:07:24 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 15


2026-06-02 18:07:24 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:07:24 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.p15"


2026-06-02 18:07:24 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:09:05 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 17


2026-06-02 18:09:05 - ras_commander.RasCmdr - INFO - Total run time for plan 17: 101.62 seconds


2026-06-02 18:09:05 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:09:05 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]


2026-06-02 18:09:05 - ras_commander.RasCmdr - INFO - Plan 17 executed in worker 2: Successful


2026-06-02 18:09:05 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.p19


2026-06-02 18:09:06 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 19


2026-06-02 18:09:06 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:09:06 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 1]\BaldEagleDamBrk.p19"


2026-06-02 18:09:06 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 15


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Total run time for plan 15: 201.07 seconds


2026-06-02 18:10:45 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Plan 15 executed in worker 1: Successful


2026-06-02 18:10:45 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.p06


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 06


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:10:45 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_specific_113 [Worker 2]\BaldEagleDamBrk.p06"


2026-06-02 18:10:45 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:12:36 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 19


2026-06-02 18:12:36 - ras_commander.RasCmdr - INFO - Total run time for plan 19: 210.22 seconds


2026-06-02 18:12:36 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:12:36 - ras_commander.RasCmdr - INFO - Plan 19 executed in worker 1: Successful


2026-06-02 18:16:37 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 06


2026-06-02 18:16:37 - ras_commander.RasCmdr - INFO - Total run time for plan 06: 351.66 seconds


2026-06-02 18:16:37 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:16:37 - ras_commander.RasCmdr - INFO - Plan 06 executed in worker 2: Successful


2026-06-02 18:16:37 - ras_commander.RasCmdr - INFO - Consolidating results to destination folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:16:42 - ras_commander.RasCmdr - INFO - Consolidated 18 worker artifact(s) to <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:16:42 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_specific_113\BaldEagleDamBrk.rasmap


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Re-initialized ras_object from destination folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - 
Execution Results:


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Plan 17: Successful


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Plan 15: Successful


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Plan 19: Successful


2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Plan 06: Successful


Parallel execution of specific plans completed in 565.60 seconds

Execution Results:
Plan Success
3 06 True
1 15 True
0 17 True
2 19 True
Text Only
2026-06-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 4 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 4\Ras.exe via filesystem (x86)


2026-06-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.4.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.4.1\Ras.exe via filesystem (x86)


2026-06-02 18:16:43 - 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-02 18:16:43 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3 at C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe via filesystem (x86)


2026-06-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - 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-02 18:16:43 - ras_commander.RasUtils - INFO - Discovered 20 installed HEC-RAS version(s)


2026-06-02 18:16:43 - 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-02 18:16:43 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_specific_113\BaldEagleDamBrk.rasmap


2026-06-02 18:16:43 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:16:43 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_specific_113


2026-06-02 18:16:43 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:16:43 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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).
═══════════════════════════════════════════════════════════════════════



Initialized specific compute project: BaldEagleDamBrk
Found 11 plans with results:
plan_number HDF_Results_Path
0 13 ...
1 15 ...
2 17 ...
3 18 ...
4 19 ...
5 03 ...
6 04 ...
7 02 ...
8 01 ...
9 05 ...
10 06 ...

Parallel Execution with Max Workers Defined by Physical Cores ("Dynamic Worker Allocation")

In this step, we'll determine the optimal number of workers based on the physical cores available on the system. This approach ensures that we make efficient use of the available hardware without overcommitting resources.

Python
print("Executing plans with dynamic worker allocation...")
print("This subset usually runs faster than the all-plans batch, but it can still take several minutes.")

# Create dynamic compute folder if it doesn't exist
dynamic_compute_folder.mkdir(parents=True, exist_ok=True)

# Define the cores per worker
cores_per_worker = 2
# 2 cores per worker is the efficiency point for most CPU's, due to L2/L3 cache being shared by 2 cores in most x86 CPU's
# 4-8 cores per worker is the maximum performance point for most CPU's, using more compute power to marginally lower runtime 
# when using parallel compute, 2 cores per worker is typically optimal as it is assumed you are maximizing throughput (efficency) over single-plan runtime (performance)

# Calculate the optimal number of workers based on physical cores
max_workers = get_optimal_worker_count(cores_per_worker)
print(f"System has {physical_cores} physical cores")
print(f"With {cores_per_worker} cores per worker, optimal worker count is {max_workers}")
print(f"Destination folder: {dynamic_compute_folder}")

# Record start time for performance measurement
start_time = time.time()

# Execute all plans with dynamic worker allocation
results_dynamic = RasCmdr.compute_parallel(
    plan_number=specific_plans,
    max_workers=max_workers,
    num_cores=cores_per_worker,
    dest_folder=dynamic_compute_folder,
    overwrite_dest=True,
    ras_object=source_project
)

# Record end time and calculate duration
end_time = time.time()
dynamic_duration = end_time - start_time

print(f"Parallel execution with dynamic worker allocation completed in {dynamic_duration:.2f} seconds")

# Create a DataFrame from the execution results for better visualization
dynamic_results_df = pd.DataFrame([
    {"Plan": plan, "Success": success}
    for plan, success in results_dynamic.items()
])

# Sort by plan number
dynamic_results_df = dynamic_results_df.sort_values("Plan")

# Display the results
print("\nExecution Results:")
display.display(dynamic_results_df)

# Initialize a RAS project in the dynamic compute folder
computed_project = RasPrj()
init_ras_project(dynamic_compute_folder, RAS_VERSION, ras_object=computed_project)
print(f"\nInitialized dynamic compute project: {computed_project.project_name}")

# Check which plans have results
dynamic_plans_with_results = computed_project.plan_df[computed_project.plan_df['HDF_Results_Path'].notna()]
print(f"Found {len(dynamic_plans_with_results)} plans with results:")
display.display(dynamic_plans_with_results[['plan_number', 'HDF_Results_Path']])
Text Only
2026-06-02 18:16:43 - ras_commander.RasCmdr - INFO - Destination folder '<workspace>\examples\example_projects\compute_test_parallel_dynamic_113' exists. Overwriting as per overwrite_dest=True.


Executing plans with dynamic worker allocation...
This subset usually runs faster than the all-plans batch, but it can still take several minutes.
System has 8 physical cores
With 2 cores per worker, optimal worker count is 4
Destination folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:16:45 - ras_commander.RasCmdr - INFO - Copied project folder to destination: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:16:45 - ras_commander.RasCmdr - INFO - Filtered plans to execute: ['15', '17', '19', '06']


2026-06-02 18:16:45 - ras_commander.RasCmdr - INFO - Adjusted max_workers to 4 based on the number of plans to compute: 4


2026-06-02 18:16:46 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]


2026-06-02 18:16:46 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]\BaldEagleDamBrk.rasmap


2026-06-02 18:16:47 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:16:47 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]


2026-06-02 18:16:47 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:16:47 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:16:48 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]


2026-06-02 18:16:48 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]\BaldEagleDamBrk.rasmap


2026-06-02 18:16:49 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:16:49 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]


2026-06-02 18:16:49 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:16:49 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:16:50 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]


2026-06-02 18:16:50 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]\BaldEagleDamBrk.rasmap


2026-06-02 18:16:51 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:16:51 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]


2026-06-02 18:16:51 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:16:51 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:16:52 - ras_commander.RasCmdr - INFO - Created worker folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]


2026-06-02 18:16:52 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]\BaldEagleDamBrk.rasmap


2026-06-02 18:16:52 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:16:52 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]


2026-06-02 18:16:52 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:16:52 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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-02 18:16:52 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Using ras_object with project folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]


2026-06-02 18:16:53 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]\BaldEagleDamBrk.p15


2026-06-02 18:16:53 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]\BaldEagleDamBrk.p19


2026-06-02 18:16:53 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]\BaldEagleDamBrk.p06


2026-06-02 18:16:53 - ras_commander.RasUtils - INFO - Successfully updated file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]\BaldEagleDamBrk.p17


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 15


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:16:53 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 1]\BaldEagleDamBrk.p15"


2026-06-02 18:16:53 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 06


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 4]\BaldEagleDamBrk.p06"


2026-06-02 18:16:54 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 19


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Set number of cores to 2 for plan: 17


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running HEC-RAS from the Command Line:


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 3]\BaldEagleDamBrk.p19"


2026-06-02 18:16:54 - ras_commander.RasCmdr - INFO - Running command: "C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe" -c "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]\BaldEagleDamBrk.prj" "<workspace>\examples\example_projects\compute_test_parallel_dynamic_113 [Worker 2]\BaldEagleDamBrk.p17"


2026-06-02 18:16:54 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:16:54 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog started — polling every 1.5s for RAS dialog windows


2026-06-02 18:25:22 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 19


2026-06-02 18:25:22 - ras_commander.RasCmdr - INFO - Total run time for plan 19: 508.74 seconds


2026-06-02 18:25:22 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:25:23 - ras_commander.RasCmdr - INFO - Plan 19 executed in worker 3: Successful


2026-06-02 18:27:08 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 15


2026-06-02 18:27:08 - ras_commander.RasCmdr - INFO - Total run time for plan 15: 615.11 seconds


2026-06-02 18:27:08 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:27:09 - ras_commander.RasCmdr - INFO - Plan 15 executed in worker 1: Successful


2026-06-02 18:28:31 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 06


2026-06-02 18:28:31 - ras_commander.RasCmdr - INFO - Total run time for plan 06: 697.54 seconds


2026-06-02 18:28:31 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:28:31 - ras_commander.RasCmdr - INFO - Plan 06 executed in worker 4: Successful


2026-06-02 18:28:46 - ras_commander.RasCmdr - INFO - HEC-RAS execution completed for plan: 17


2026-06-02 18:28:46 - ras_commander.RasCmdr - INFO - Total run time for plan 17: 712.86 seconds


2026-06-02 18:28:46 - ras_commander.RasDialogWatchdog - INFO - DialogWatchdog stopped — no dialogs encountered


2026-06-02 18:28:47 - ras_commander.RasCmdr - INFO - Plan 17 executed in worker 2: Successful


2026-06-02 18:28:47 - ras_commander.RasCmdr - INFO - Consolidating results to destination folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:28:56 - ras_commander.RasCmdr - INFO - Consolidated 18 worker artifact(s) to <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:28:57 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113\BaldEagleDamBrk.rasmap


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - Re-initialized ras_object from destination folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - 
Execution Results:


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - Plan 19: Successful


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - Plan 15: Successful


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - Plan 06: Successful


2026-06-02 18:28:57 - ras_commander.RasCmdr - INFO - Plan 17: Successful


Parallel execution with dynamic worker allocation completed in 733.62 seconds

Execution Results:
Plan Success
2 06 True
1 15 True
3 17 True
0 19 True
Text Only
2026-06-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.7 Beta 4 at C:\Program Files (x86)\HEC\HEC-RAS\6.7 Beta 4\Ras.exe via filesystem (x86)


2026-06-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.4.1 at C:\Program Files (x86)\HEC\HEC-RAS\6.4.1\Ras.exe via filesystem (x86)


2026-06-02 18:28:57 - 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-02 18:28:57 - ras_commander.RasUtils - INFO - Discovered HEC-RAS 6.3 at C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe via filesystem (x86)


2026-06-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - 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-02 18:28:57 - ras_commander.RasUtils - INFO - Discovered 20 installed HEC-RAS version(s)


2026-06-02 18:28:57 - 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-02 18:28:57 - ras_commander.RasMap - INFO - Successfully parsed RASMapper file: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113\BaldEagleDamBrk.rasmap


2026-06-02 18:28:57 - ras_commander.RasPrj - INFO - ras-commander v0.98.0 | An open-source project of CLB Engineering Corporation (https://clbengineering.com/) | Docs: https://ras-commander.readthedocs.io | GitHub: https://github.com/gpt-cmdr/ras-commander


2026-06-02 18:28:57 - ras_commander.RasPrj - INFO - Project initialized: BaldEagleDamBrk | Folder: <workspace>\examples\example_projects\compute_test_parallel_dynamic_113


2026-06-02 18:28:57 - ras_commander.RasPrj - INFO - Using HEC-RAS executable: C:\Program Files (x86)\HEC\HEC-RAS\7.0\Ras.exe


2026-06-02 18:28:57 - ras_commander.RasPrj - INFO - 
═══════════════════════════════════════════════════════════════════════
ras-commander | HEC-RAS Automation Library
Docs: https://gpt-cmdr.github.io/ras-commander/
Repo: https://github.com/gpt-cmdr/ras-commander
═══════════════════════════════════════════════════════════════════════

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).
═══════════════════════════════════════════════════════════════════════



Initialized dynamic compute project: BaldEagleDamBrk
Found 11 plans with results:
plan_number HDF_Results_Path
0 13 ...
1 15 ...
2 17 ...
3 18 ...
4 19 ...
5 03 ...
6 04 ...
7 02 ...
8 01 ...
9 05 ...
10 06 ...

Performance Comparison

Let's compare the performance of the different parallel execution approaches we've tried. This will help us understand the impact of worker count and plan selection on execution time.

Python
# Create a DataFrame for individual plan runtimes
plan_data = []

# Define the approaches with more descriptive labels including worker and core counts
approach_labels = {
    "all_plans": "All Plans (2 workers × 2 cores = 4 cores total)",
    "specific_plans": "Specific Plans (1 worker × 2 cores = 2 cores total)",
    "dynamic_workers": f"Dynamic Workers (1 worker × 4 cores = 4 cores total)"
}

# Extract runtimes from the log messages
# For all plans approach
plan_data.append({"Approach": approach_labels["all_plans"], "Plan": "01", "Runtime": 35.72})
plan_data.append({"Approach": approach_labels["all_plans"], "Plan": "03", "Runtime": 82.70})
# Omitting plan 04 as it's a 1D model

# For specific plans approach (plans 01 and 03 were run)
plan_data.append({"Approach": approach_labels["specific_plans"], "Plan": "01", "Runtime": 29.10})
plan_data.append({"Approach": approach_labels["specific_plans"], "Plan": "03", "Runtime": 36.09})

# For dynamic worker approach (plans 01 and 03 were run)
plan_data.append({"Approach": approach_labels["dynamic_workers"], "Plan": "01", "Runtime": 28.48})
plan_data.append({"Approach": approach_labels["dynamic_workers"], "Plan": "03", "Runtime": 49.43})

# Create a DataFrame
plan_runtime_df = pd.DataFrame(plan_data)

# Create a grouped bar chart for plan runtimes
plt.figure(figsize=(14, 8))

# Get all unique plan numbers and ensure they're sorted
plans = sorted(plan_runtime_df["Plan"].unique())

# Create x positions for the bars
x = np.arange(len(plans))
width = 0.25  # Width of the bars

# Plot bars for each approach
approaches = plan_runtime_df["Approach"].unique()
for i, approach in enumerate(approaches):
    # Filter data for this approach
    approach_data = plan_runtime_df[plan_runtime_df["Approach"] == approach]

    # Initialize runtimes array with NaN values
    runtimes = [np.nan] * len(plans)

    # Fill in runtimes where data exists
    for j, plan in enumerate(plans):
        plan_runtime = approach_data[approach_data["Plan"] == plan]["Runtime"]
        if not plan_runtime.empty:
            runtimes[j] = plan_runtime.values[0]

    # Create bars for this approach (only where we have data)
    valid_indices = [idx for idx, val in enumerate(runtimes) if not np.isnan(val)]
    valid_plans = [plans[idx] for idx in valid_indices]
    valid_runtimes = [runtimes[idx] for idx in valid_indices]
    valid_positions = [x[idx] + (i - len(approaches)/2 + 0.5) * width for idx in valid_indices]

    # Plot the bars
    bars = plt.bar(valid_positions, valid_runtimes, width, label=approach)

    # Add runtime labels on top of bars
    for pos, runtime in zip(valid_positions, valid_runtimes):
        plt.text(pos, runtime + 2, f"{runtime:.1f}s", ha='center', va='bottom')

# Add labels, title, and custom x-axis tick labels
plt.xlabel('Plan Number', fontsize=12)
plt.ylabel('Runtime (seconds)', fontsize=12)
plt.title('Runtime Comparison by Plan Number and Parallelization Approach', fontsize=14)
plt.xticks(x, plans, fontsize=11)
plt.legend(fontsize=10)
plt.grid(axis='y', alpha=0.3)

# Add note about omitting Plan 04
plt.figtext(0.5, 0.01, "\nNote: Plan 04 (1D model) is omitted from this comparison", 
            ha='center', fontsize=10, style='italic')

# Ensure all plan numbers show on x-axis regardless of data availability
plt.tight_layout()
plt.show()

png

Viewing Execution Summary with results_df

After parallel execution, verify all plans completed successfully.

Python
# Display execution summary from results_df
computed_project.results_df.T
0 1 2 3 4 5 6 7 8 9 10
plan_number 13 15 17 18 19 03 04 02 01 05 06
plan_title PMF with Multi 2D Areas 1d-2D Dambreak Refined Grid 2D to 1D No Dam 2D to 2D Run SA to 2D Dam Break Run Single 2D Area - Internal Dam Structure SA to 2D Area Conn - 2D Levee Structure SA to Detailed 2D Breach SA to Detailed 2D Breach FEQ Single 2D area with Bridges FEQ Gridded Precip - Infiltration
flow_type Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady Unsteady
hdf_path ... ... ... ... ... ... ... ... ... ... ...
hdf_exists True True True True True True True True True True True
hdf_file_modified 2026-06-02 15:14:48.372137 2026-06-02 18:27:08.556418 2026-06-02 18:28:46.593976 2026-06-02 15:14:17.970424 2026-06-02 18:25:22.437224 2026-06-02 15:24:47.856257 2026-06-02 15:29:49.780633 2026-06-02 16:27:42.920709 2026-06-02 18:07:06.421704 2026-06-02 16:41:42.452590 2026-06-02 18:28:31.192258
ras_version 5.10 5.10 5.00 5.00 5.00 5.04 5.00 5.10 5.03 5.10 6.00
completed True True True True True True True True True True True
has_errors False False True False False False False False False False False
has_warnings False False False False False False False False False False False
error_count 0 0 47 0 0 0 0 0 0 0 0
warning_count 0 0 0 0 0 0 0 0 0 0 0
first_error_line NaN NaN 03JAN1999 01:21:00    1D/2D Flow error\t      ... NaN NaN NaN NaN NaN NaN NaN NaN
runtime_simulation_start 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 1999-01-01 12:00:00 2018-09-09 00:00:00
runtime_simulation_end 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-06 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 1999-01-04 12:00:00 2018-09-14 00:00:00
runtime_simulation_hours 72.0 72.0 120.0 72.0 72.0 72.0 72.0 72.0 72.0 72.0 120.0
runtime_complete_process_hours 0.043481 0.170287 0.197483 0.035165 0.140834 0.165556 0.229514 1.188299 2.79579 1.280655 0.193138
runtime_unsteady_compute_hours 0.020864 0.168511 0.194193 0.033199 0.140391 0.162526 0.227149 1.178767 2.785564 1.238103 0.189592
runtime_complete_process_speed 1655.891447 422.816427 607.647924 2047.490402 511.241595 434.898599 313.706126 60.590817 25.75301 56.221218 621.317221
runtime_source hdf hdf hdf hdf hdf hdf hdf hdf hdf hdf hdf
vol_error 2009.016724 -6.940927 9.184675 1.521607 161.813583 112.083275 2.602982 28.357374 -4.672427 2.025828 0.610979
vol_accounting_units Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet Acre Feet
vol_error_percent 0.282184 0.001816 0.001201 0.000371 0.040804 0.029283 0.000683 0.007436 0.001225 0.001059 0.000431
vol_flux_in 607006.625 278420.125 760489.3125 381170.5625 381170.5625 381177.34375 381170.5625 381163.78125 381160.40625 190580.203125 141685.265625
vol_flux_out 660613.75 349243.84375 729456.3125 196073.34375 325873.21875 288000.5 253404.140625 254911.015625 224436.890625 21308.738281 17253.21875
vol_starting 104960.460938 103790.21875 4116.184082 29444.158203 28961.443359 1583.755249 76805.59375 76801.25 76799.179688 786.341003 0.0
vol_ending 53362.351562 32959.53125 35158.375 214542.90625 84420.617188 94872.6875 204574.625 203082.390625 233518.03125 170059.828125 124432.664062

Summary of Parallel Plan Execution

In this notebook, we've explored how to execute HEC-RAS plans in parallel using the RAS Commander library. Here's a summary of the key techniques we've covered:

Core Techniques

  1. Basic Parallel Execution: Using RasCmdr.compute_parallel() to run all plans in a project simultaneously
  2. Selective Parallel Execution: Running only specific plans in parallel
  3. Dynamic Worker Allocation: Determining the optimal number of workers based on available system resources
  4. Performance Analysis: Comparing execution times for different parallel configurations
  5. Smart Execution Skip (v0.88.0+): Automatically skip plans with current results

Key Functions Used

  • RasCmdr.compute_parallel(): Execute multiple plans in parallel
  • RasPlan.clone_plan(): Create a new plan based on an existing one
  • RasPlan.update_plan_description(): Update the description of a plan
  • RasPlan.set_num_cores(): Set the number of cores for a plan to use
  • RasPlan.get_results_path(): Get the path to the results file for a plan

New Parameters (v0.88.0+)

Parameter Default Use Case
force_rerun False Force all plans to execute even if results are current
force_geompre False Force complete geometry reprocessing for all plans

Smart Skip Benefits: - Automatically detects which plans need re-execution - Saves time by skipping plans with current results - Works transparently in parallel execution - Example: 10 plans, only 2 modified → 80% time savings

Best Practices for Parallel Execution

  1. Use Separate RAS Objects: Create and use separate RAS objects for different projects or folders
  2. Balance Workers and Cores: Find the right balance between the number of workers and cores per worker
  3. Consider Hardware Limits: Be mindful of your system's physical cores and memory
  4. Use Clean Compute Folders: Use the dest_folder parameter to keep your project organized
  5. Handle Overwrite Carefully: Use overwrite_dest=True for repeatable workflows, but be cautious about losing results
  6. Monitor Performance: Track execution times and adjust your configuration for optimal performance
  7. Match Workers to Plans: For best results, use one worker per plan when running a small number of plans
  8. Leverage Smart Skip: Use default behavior for intelligent execution management
  9. Use force_rerun selectively: Only when you truly need to bypass currency checks

Execution Mode Comparison

Mode Method Use Case
Single compute_plan() One plan, full parameter control
Parallel compute_parallel() Multiple independent plans, maximum throughput
Sequential compute_test_mode() Multiple plans in order, debugging
Remote compute_parallel_remote() Distributed across machines
CLB Engineering Corporation  ·  LLM Forward Engineering
RAS Commander is a free and open-source project maintained by CLB Engineering Corporation. For agencies and firms seeking to modernize H&H workflows with LLM Forward approaches, contact CLB to partner with the engineers who wrote the automation.