Claude-skill-registry hecras_parse_compute-messages
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/hecras-parse-compute-messages-gpt-cmdr-ras-commander" ~/.claude/skills/majiayu000-claude-skill-registry-hecras-parse-compute-messages && rm -rf "$T"
skills/data/hecras-parse-compute-messages-gpt-cmdr-ras-commander/SKILL.mdParsing HEC-RAS Compute Messages
Primary Sources (navigate to these for complete details):
- HDF Class Reference:
- Class hierarchy, decoratorsras_commander/hdf/AGENTS.md - HdfResultsPlan Implementation:
- Compute message methodsras_commander/hdf/HdfResultsPlan.py - Working Example:
- Compute message extractionexamples/400_1d_hdf_data_extraction.ipynb
This skill provides patterns for extracting and interpreting HEC-RAS computation output. For implementation details, see the primary sources above.
Quick Start
Check Plan Completion and Extract Messages
from ras_commander import init_ras_project, HdfResultsPlan # Initialize project init_ras_project("C:/Projects/MyModel", "6.6") # Extract compute messages (handles HDF + .txt fallback automatically) messages = HdfResultsPlan.get_compute_messages("01") # Check if plan has results (runtime data exists only for completed plans) runtime = HdfResultsPlan.get_runtime_data("01") is_complete = runtime is not None if is_complete: print(f"Plan completed in {runtime['Complete Process (hr)'].values[0]:.2f} hours") else: print("Plan has not been executed or did not complete")
API Reference
HdfResultsPlan.get_compute_messages()
Purpose: Extract raw computation messages from HDF file
Signature:
@staticmethod @log_call @standardize_input(file_type='plan_hdf') def get_compute_messages(hdf_path: Path) -> str
Parameters:
: Plan HDF file path OR plan number string (e.g., "01")hdf_path
Returns: String containing all computation messages, empty string if unavailable
Fallback Behavior:
- First attempts: HDF path
/Results/Summary/Compute Messages (text) - Fallback:
file via RasControl (for pre-6.x HEC-RAS).txt
Example:
messages = HdfResultsPlan.get_compute_messages("01") print(len(messages)) # Character count
HdfResultsPlan.get_compute_messages_hdf_only()
Purpose: Extract compute messages WITHOUT RasControl/COM fallback
Use When: Automated workflows where COM locking is problematic
Fallback Order:
- HDF
/Results/Summary/Compute Messages (text)
(HEC-RAS 6.x+){plan_file}.computeMsgs.txt
(HEC-RAS 5.x){plan_file}.comp_msgs.txt
HdfResultsPlan.get_runtime_data()
Purpose: Extract detailed performance metrics for completed plans
Returns: DataFrame with columns:
,Plan NameFile Name
,Simulation Start TimeSimulation End Time
,Simulation Duration (s)Simulation Time (hr)
,Completing Geometry (hr)Preprocessing Geometry (hr)
,Completing Event Conditions (hr)Unsteady Flow Computations (hr)Complete Process (hr)
,Unsteady Flow Speed (hr/hr)Complete Process Speed (hr/hr)
Returns None if: Plan not executed or did not complete
Common Error Patterns
Critical Errors (Plan Failed)
| Pattern | Meaning | Likely Cause |
|---|---|---|
| Missing/corrupt geometry file | File path error, file locked |
| DSS path invalid | Wrong DSS pathname, missing file |
| Output file issue | Permissions, disk full |
| Fatal execution error | Model configuration issue |
Stability Warnings (Plan May Succeed)
| Pattern | Meaning | Action |
|---|---|---|
| Stability issues | May need smaller time step |
| Convergence problem | Check Manning's n, geometry |
| Critical instability | Review problem areas |
| Numerical issues | Check boundary conditions |
Informational Messages
| Pattern | Meaning |
|---|---|
| Plan finished successfully |
| Output phase started |
| Preprocessing successful |
| Boundary setup successful |
Message Parsing Pattern
Basic Severity Classification
def classify_message_severity(message_line: str) -> str: """Classify a compute message line by severity.""" line_upper = message_line.upper() # CRITICAL - plan likely failed if any(x in line_upper for x in [ 'UNRECOVERABLE', 'FATAL', 'UNABLE TO OPEN', 'CANNOT OPEN', 'ERROR:', 'FAILED' ]): return 'CRITICAL' # ERROR - significant issue if any(x in line_upper for x in [ 'ERROR', 'NOT FOUND', 'EXCEEDED MAXIMUM' ]): return 'ERROR' # WARNING - potential issue if any(x in line_upper for x in [ 'WARNING', 'TIME STEP REDUCTION', 'DID NOT CONVERGE', 'INSTABILITY', 'REDUCED' ]): return 'WARNING' # INFO - normal operation return 'INFO'
Extract Structured Diagnostics
def parse_compute_messages(raw_messages: str) -> dict: """Parse raw compute messages into structured format.""" lines = raw_messages.strip().split('\n') result = { 'critical': [], 'errors': [], 'warnings': [], 'info': [], 'is_complete': False, 'total_lines': len(lines) } for line in lines: line = line.strip() if not line: continue severity = classify_message_severity(line) if severity == 'CRITICAL': result['critical'].append(line) elif severity == 'ERROR': result['errors'].append(line) elif severity == 'WARNING': result['warnings'].append(line) else: result['info'].append(line) # Check for completion marker if 'COMPLETE PROCESS' in line.upper(): result['is_complete'] = True return result
Output Schema for Orchestrators
When reporting compute message analysis, use this structured format:
## Compute Messages Analysis ### Execution Status - **Plan**: {plan_number} - **HDF File**: {hdf_filename} - **Completed**: Yes/No - **Duration**: X.XX hours (if completed) ### Messages by Severity **CRITICAL ({count})**: - {critical message 1} - {critical message 2} **ERRORS ({count})**: - {error message 1} **WARNINGS ({count})**: - {warning message 1} **INFO ({count})**: {count} informational messages (omitted for brevity) ### Diagnostics - {Actionable interpretation} - {Recommended next steps} ### Performance (if completed) - Simulation Time: X.X hours - Compute Time: X.X hours - Speed Ratio: X.X hr/hr
Complete Workflow Example
from ras_commander import init_ras_project, HdfResultsPlan from pathlib import Path def analyze_plan_execution(project_path: str, ras_version: str, plan_number: str): """Comprehensive compute message analysis for a plan.""" # Initialize init_ras_project(project_path, ras_version) # Get compute messages messages = HdfResultsPlan.get_compute_messages(plan_number) # Get runtime data (None if not complete) runtime = HdfResultsPlan.get_runtime_data(plan_number) # Parse messages parsed = parse_compute_messages(messages) # Build report report = { 'plan': plan_number, 'completed': runtime is not None, 'critical_count': len(parsed['critical']), 'error_count': len(parsed['errors']), 'warning_count': len(parsed['warnings']), 'info_count': len(parsed['info']), 'runtime_hours': None, 'speed_ratio': None } if runtime is not None: report['runtime_hours'] = runtime['Complete Process (hr)'].values[0] report['speed_ratio'] = runtime['Complete Process Speed (hr/hr)'].values[0] # Print summary print(f"Plan {plan_number}: ", end='') if report['completed']: print(f"COMPLETE in {report['runtime_hours']:.2f}h ({report['speed_ratio']:.1f}x speed)") else: print("NOT COMPLETE") if parsed['critical']: print(f" CRITICAL: {len(parsed['critical'])} issues") for msg in parsed['critical'][:3]: # Show first 3 print(f" - {msg[:80]}...") if parsed['warnings']: print(f" WARNINGS: {len(parsed['warnings'])} issues") return report # Usage report = analyze_plan_execution("C:/Projects/Muncie", "6.6", "01")
Integration with Results Analyst Agent
When delegating compute message analysis to the Results Analyst Agent:
Context to Provide:
- Plan number and HDF path
- Expected completion status
- Any known issues or concerns
Expected Output:
- Structured diagnostics following output schema
- Severity classification of all messages
- Actionable recommendations
Example Delegation:
Task( subagent_type="results-analyst", model="sonnet", prompt=""" Analyze compute messages for plan 01. Context files: - agent_tasks/.agent/STATE.md Task: Extract compute messages from examples/Muncie.p01.hdf, classify by severity, and provide diagnostics. Write findings to: .claude/outputs/results-analyst/compute-analysis.md """ )
Common Issues
Empty Messages
Cause: Plan not executed yet, or HDF missing Results/Summary group
Solution: Check if plan has been executed:
runtime = HdfResultsPlan.get_runtime_data("01") if runtime is None: print("Plan has not been executed - execute with RasCmdr.compute_plan('01')")
COM Locking in Automated Workflows
Cause:
get_compute_messages() may invoke RasControl COM fallback
Solution: Use
get_compute_messages_hdf_only() for automation:
# Safe for parallel/automated workflows messages = HdfResultsPlan.get_compute_messages_hdf_only("01")
Partial Results
Cause: Plan crashed mid-execution
Symptoms:
returns Noneget_runtime_data()
shows partial outputget_compute_messages()- HDF file exists but is incomplete
Diagnosis: Check for error patterns at end of messages
Primary Sources
For complete details, navigate to:
-
(lines 717-914)ras_commander/hdf/HdfResultsPlan.py
implementationget_compute_messages()
implementationget_compute_messages_hdf_only()- HDF path
/Results/Summary/Compute Messages (text)
-
(lines 200-305)ras_commander/hdf/HdfResultsPlan.py
implementationget_runtime_data()- Process time extraction
- Speed calculations
-
examples/400_1d_hdf_data_extraction.ipynb- Working compute message extraction example
- Output formatting patterns
-
ras_commander/hdf/AGENTS.md- HDF class organization
- Decorator patterns
- File type expectations
See Also
- hecras_extract_results: Full HDF results extraction patterns
- hecras_compute_plans: Plan execution that generates compute messages
- qa_repair_geometry: Fixing geometry errors found in messages