Skip to content

Profile Line Flow Extraction

Python
from pathlib import Path
import os

import matplotlib.pyplot as plt
import pandas as pd

from ras_commander import HdfResultsMesh

Development mode: run this notebook with PYTHONPATH pointed at the repository root when testing local source changes. The committed import cell above intentionally uses the installed/importable package form.

Profile-Line Flow Extraction

This workflow extracts a modeled flow time series and peak Q across a RAS Mapper profile/reference line from completed 2D plan HDF results.

Python
validation_root = Path(
    os.environ.get(
        "CLB214_PROFILE_LINE_VALIDATION",
        r"H:/Symphony/ras-commander/CLB-214/profile_line_flow_validation",
    )
)
project_dir = validation_root / "project" / "Chippewa_2D_profile_line_flow"
plan_hdf = project_dir / "Chippewa_2D.p02.hdf"
profile_lines_path = validation_root / "profile_line_input"

line_name = "Upstream"
mesh_name = "Perimeter 1"

if not plan_hdf.exists():
    raise FileNotFoundError(
        f"Completed plan HDF not found: {plan_hdf}. "
        "Set CLB214_PROFILE_LINE_VALIDATION or replace plan_hdf/profile_lines_path "
        "with a completed project that outputs Face Flow."
    )

print(f"Plan HDF: {plan_hdf}")
print(f"Profile line source: {profile_lines_path}")
Text Only
Plan HDF: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
Profile line source: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\profile_line_input
Python
flow_ts = HdfResultsMesh.get_profile_line_flow_timeseries(
    plan_hdf,
    line_name,
    mesh_name=mesh_name,
    profile_lines_path=profile_lines_path,
    direction="absolute",
)

peak_q = HdfResultsMesh.get_profile_line_peak_flow(
    plan_hdf,
    line_name,
    mesh_name=mesh_name,
    profile_lines_path=profile_lines_path,
)

display(flow_ts.head())
display(peak_q)
Text Only
2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfBase - INFO - Using HDF file from h5py.File object: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfBase - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfBase - CRITICAL - No valid projection found. Checked:
1. HDF file projection attribute: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
2. RASMapper projection file H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\.Winona_Upload\LifeSim model\Winona Levee SQRA 2019\RAS\AW\MMC_Projection.prj found in RASMapper file, but was invalid
To fix this:
1. Open RASMapper
2. Click Map > Set Projection
3. Select an appropriate projection file or coordinate system
4. Save the RASMapper project


2026-05-01 12:58:20 - ras_commander.hdf.HdfMesh - INFO - Found 6 faces along profile line


2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:20 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - INFO - Using HDF file from h5py.File object: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - CRITICAL - No valid projection found. Checked:
1. HDF file projection attribute: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
2. RASMapper projection file H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\.Winona_Upload\LifeSim model\Winona Levee SQRA 2019\RAS\AW\MMC_Projection.prj found in RASMapper file, but was invalid
To fix this:
1. Open RASMapper
2. Click Map > Set Projection
3. Select an appropriate projection file or coordinate system
4. Save the RASMapper project


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Found 6 faces along profile line


2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
time flow line_name mesh_name direction face_count selection_source
0 2019-04-02 00:00:00 1948.334485 Upstream Perimeter 1 absolute 6 profile_lines_geometry
1 2019-04-02 00:30:00 1945.119192 Upstream Perimeter 1 absolute 6 profile_lines_geometry
2 2019-04-02 01:00:00 1919.116215 Upstream Perimeter 1 absolute 6 profile_lines_geometry
3 2019-04-02 01:30:00 1881.967214 Upstream Perimeter 1 absolute 6 profile_lines_geometry
4 2019-04-02 02:00:00 1849.279263 Upstream Perimeter 1 absolute 6 profile_lines_geometry
line_name mesh_name peak_time peak_flow direction face_count selection_source
0 Upstream Perimeter 1 2019-04-21 01:00:00 2316.140572 absolute 6 profile_lines_geometry
Python
signed_flow_ts = HdfResultsMesh.get_profile_line_flow_timeseries(
    plan_hdf,
    line_name,
    mesh_name=mesh_name,
    profile_lines_path=profile_lines_path,
    direction="signed",
)

comparison = flow_ts[["time", "flow"]].rename(columns={"flow": "absolute_flow"}).merge(
    signed_flow_ts[["time", "flow"]].rename(columns={"flow": "signed_flow"}),
    on="time",
)
display(comparison.head())
Text Only
2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.g01.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - INFO - Using HDF file from h5py.File object: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:21 - ras_commander.hdf.HdfBase - CRITICAL - No valid projection found. Checked:
1. HDF file projection attribute: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
2. RASMapper projection file H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\.Winona_Upload\LifeSim model\Winona Levee SQRA 2019\RAS\AW\MMC_Projection.prj found in RASMapper file, but was invalid
To fix this:
1. Open RASMapper
2. Click Map > Set Projection
3. Select an appropriate projection file or coordinate system
4. Save the RASMapper project


2026-05-01 12:58:22 - ras_commander.hdf.HdfMesh - INFO - Found 6 faces along profile line


2026-05-01 12:58:22 - ras_commander.hdf.HdfResultsMesh - INFO - Using existing Path object HDF file: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf


2026-05-01 12:58:22 - ras_commander.hdf.HdfResultsMesh - INFO - Final validated file path: H:\Symphony\ras-commander\CLB-214\profile_line_flow_validation\project\Chippewa_2D_profile_line_flow\Chippewa_2D.p02.hdf
time absolute_flow signed_flow
0 2019-04-02 00:00:00 1948.334485 494.805432
1 2019-04-02 00:30:00 1945.119192 490.561087
2 2019-04-02 01:00:00 1919.116215 466.979741
3 2019-04-02 01:30:00 1881.967214 432.740896
4 2019-04-02 02:00:00 1849.279263 406.301601
Python
manual_validation_csv = validation_root / "manual_face_flow_validation.csv"
if manual_validation_csv.exists():
    manual = pd.read_csv(manual_validation_csv, parse_dates=["time"])
    validation = comparison.merge(manual, on="time")
    print(
        "Max absolute-flow difference:",
        validation["absolute_difference"].abs().max(),
    )
    print(
        "Max signed-flow difference:",
        validation["signed_difference"].abs().max(),
    )
Text Only
Max absolute-flow difference: 0.0
Max signed-flow difference: 0.0
Python
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(flow_ts["time"], flow_ts["flow"], label="Absolute flow")
ax.plot(signed_flow_ts["time"], signed_flow_ts["flow"], label="Signed flow")
ax.set_ylabel("Flow (cfs)")
ax.set_title(f"{line_name} profile-line flow")
ax.legend()
ax.grid(True, alpha=0.3)
fig.autofmt_xdate()
plt.show()

png

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.