Diffraction Analysis | Skills Pool
Diffraction Analysis Master skill for hydrodynamic diffraction analysis - AQWA, OrcaWave, and BEMRosetta integration
majiayu000 4 stars Feb 5, 2026 Occupation Categories Machine Learning Diffraction Analysis Master Skill
Overview
This skill provides guidance on hydrodynamic diffraction/radiation analysis using the available modules in digitalmodel. Three primary modules handle different aspects of the workflow:
Module Purpose Primary Use Case aqwa Native AQWA analysis Direct AQWA .LIS file processing orcawave OrcaWave diffraction OrcaFlex-integrated analysis bemrosetta Format conversion AQWA → OrcaFlex workflow, mesh conversion diffraction Unified schemas Data structures and comparison framework
Version
Quick Install
Diffraction Analysis npx skillvault add majiayu000/majiayu000-claude-skill-registry-data-data-diffraction-analysis-skill-md
stars 4
Updated Feb 5, 2026
Occupation
Updated : 2026-01-27
Category : Offshore Engineering
Module Comparison
When to Use Each Module Scenario Recommended Module Reason Parse AQWA .LIS files aqwa or bemrosettaNative parsing, no external dependencies Run OrcaWave analysis orcawaveDirect OrcaFlex API integration Convert AQWA → OrcaFlex bemrosettaPurpose-built converter with validation Compare AQWA vs OrcaWave diffractionUnified schema comparison framework Handle QTF data bemrosettaQTF parser and OrcaFlex export Convert mesh formats bemrosettaGDF/DAT/STL conversion Store/retrieve coefficients hydrodynamicsCoefficient database
Feature Matrix Feature aqwa orcawave bemrosetta diffraction Parse AQWA .LIS ✅ ❌ ✅ ✅ (via converter) Parse OrcaWave ❌ ✅ ❌ ✅ (via converter) RAO extraction ✅ ✅ ✅ ✅ Added mass/damping ✅ ✅ ✅ ✅ QTF (2nd order) ❌ ✅ ✅ ❌ Export to OrcaFlex ❌ Native ✅ ✅ Mesh conversion ❌ ❌ ✅ ❌ Coefficient validation ❌ ❌ ✅ ✅ Comparison framework ❌ ❌ ❌ ✅
Unified Data Schema All modules use the unified schema from diffraction.output_schemas:
from digitalmodel.modules.diffraction import (
DiffractionResults, # Complete analysis container
RAOSet, RAOComponent, # RAO data structures
AddedMassSet, DampingSet, # Coefficient matrices
HydrodynamicMatrix, # 6×6 frequency-dependent matrix
FrequencyData, HeadingData, # Discretization
DOF, Unit, # Enumerations
)
DiffractionResults Structure DiffractionResults
├── vessel_name: str
├── frequencies: FrequencyData
├── headings: HeadingData
├── raos: RAOSet
│ ├── surge: RAOComponent (magnitude, phase)
│ ├── sway: RAOComponent
│ ├── heave: RAOComponent
│ ├── roll: RAOComponent
│ ├── pitch: RAOComponent
│ └── yaw: RAOComponent
├── added_mass: AddedMassSet
│ └── matrices: List[HydrodynamicMatrix] # 6×6 per frequency
├── damping: DampingSet
│ └── matrices: List[HydrodynamicMatrix]
└── source_file: str
Typical Workflows
Workflow 1: AQWA Analysis Only from digitalmodel.modules.aqwa import AQWAAnalysis
# Direct AQWA analysis
analysis = AQWAAnalysis(folder="aqwa_results/")
analysis.run()
Workflow 2: AQWA → OrcaFlex Conversion from digitalmodel.modules.bemrosetta import (
AQWAParser, OrcaFlexConverter, validate_coefficients
)
# Parse AQWA
parser = AQWAParser()
results = parser.parse("analysis.LIS")
# Validate
report = validate_coefficients(results)
if report.is_valid:
# Convert to OrcaFlex
converter = OrcaFlexConverter(output_dir="./orcaflex")
converter.convert(results)
Workflow 3: OrcaWave Analysis from digitalmodel.modules.orcawave import OrcaWaveAnalysis
# Run OrcaWave (requires OrcFxAPI)
analysis = OrcaWaveAnalysis()
analysis.setup_model(vessel_file="vessel.yml")
analysis.run_diffraction()
results = analysis.get_results()
Workflow 4: AQWA vs OrcaWave Comparison from digitalmodel.modules.diffraction import (
DiffractionComparator,
AQWAConverter,
OrcaWaveConverter,
)
# Convert both sources to unified schema
aqwa_results = AQWAConverter("aqwa_folder/").convert_to_unified_schema()
orcawave_results = OrcaWaveConverter(model).convert_to_unified_schema()
# Compare
comparator = DiffractionComparator()
report = comparator.compare(aqwa_results, orcawave_results)
print(f"RAO match: {report.rao_match_percentage:.1f}%")
Workflow 5: Complete Pipeline with QTF from digitalmodel.modules.bemrosetta import (
AQWAParser, QTFParser, OrcaFlexConverter,
CoefficientValidator, CausalityChecker,
)
# Parse main results
parser = AQWAParser()
results = parser.parse("analysis.LIS")
# Parse QTF
qtf_parser = QTFParser()
qtf_data = qtf_parser.parse("analysis.QTF")
# Validate
coef_validator = CoefficientValidator(check_symmetry=True)
coef_report = coef_validator.validate(results)
causality_checker = CausalityChecker()
kk_report = causality_checker.validate(results)
# Convert with QTF
converter = OrcaFlexConverter(output_dir="./output")
converter.set_qtf_data(qtf_data)
converter.convert(results)
CLI Commands
AQWA Module # (Uses existing AQWA CLI if available)
BEMRosetta Module bemrosetta convert analysis.LIS -o ./output
bemrosetta convert analysis.LIS --qtf analysis.QTF -o ./output
bemrosetta info analysis.LIS
bemrosetta validate analysis.LIS --strict --causality
bemrosetta convert-mesh hull.gdf -o hull.stl
bemrosetta status
Diffraction Module # Batch processing
python -m digitalmodel.modules.diffraction.batch_processor config.yml
OrcaFlex Vessel Type YAML VesselType:
Name: FPSO
Category: Vessel
PrimaryMotion: Calculated (6 DOF)
RAOOrigin: [0, 0, 0]
RAOPhaseConvention: AQWA
Coefficient CSV Frequency_rad/s,A11,A12,A13,A14,A15,A16,...
0.3,1.0e7,0.0,0.0,0.0,0.0,0.0,...
0.4,1.1e7,0.0,0.0,0.0,0.0,0.0,...
QTF CSV Freq1_rad/s,Freq2_rad/s,Heading_deg,Surge_Re,Surge_Im,...
0.3,0.3,0.0,1.2e5,0.0,...
Validation Criteria
Coefficient Validation
Symmetry : Added mass and damping matrices should be symmetric
Positive definiteness : Diagonal elements non-negative
Physical limits : No NaN/Inf values, reasonable magnitudes
Kramers-Kronig Causality
Added mass A(ω) and damping B(ω) must satisfy K-K relations
Tolerance: typically 10% relative error acceptable
RAO Validation
Magnitude non-negative
Phase in reasonable range (-360° to 360°)
Physical trends (heave RAO → 1.0 at low frequency)
Best Practices
Always validate coefficients before using in OrcaFlex
Check K-K causality for added mass/damping consistency
Compare results when both AQWA and OrcaWave are available
Use unified schema for interoperability
Document water depth and frequency range assumptions
Skill Description aqwa-analysis AQWA .LIS processing and RAO extraction orcawave-analysis OrcaWave diffraction/radiation analysis bemrosetta AQWA → OrcaFlex converter with QTF support hydrodynamics 6×6 matrices, wave spectra, OCIMF loading orcaflex-rao-import Multi-format RAO import to OrcaFlex orcawave-to-orcaflex OrcaWave to OrcaFlex conversion orcawave-aqwa-benchmark Cross-validation comparison
Module Locations src/digitalmodel/modules/
├── aqwa/ # AQWA analysis tools
├── orcawave/ # OrcaWave analysis
├── bemrosetta/ # Format conversion
│ ├── parsers/ # AQWA, QTF parsers
│ ├── converters/ # OrcaFlex export
│ ├── mesh/ # GDF, DAT, STL handlers
│ └── validators/ # Coefficient, causality
├── diffraction/ # Unified schemas
│ ├── output_schemas.py # DiffractionResults
│ ├── aqwa_converter.py # AQWA to unified
│ ├── orcawave_converter.py # OrcaWave to unified
│ ├── orcaflex_exporter.py # Export to OrcaFlex
│ └── comparison_framework.py # Compare results
└── hydrodynamics/ # Coefficient database
References 02
Overview