**Package**: `hydrocraft-ogs-subsurface` v1.0.0 **Model**: OpenGeoSys 6.5.7 — Thermo-Hydro-Mechanical-Chemical simulator **Domain**: Groundwater / subsurface THMC processes in porous and fractured media **Created by**: Auto-dissection pipeline **Last updated**: 2026-03-25 **Stats**: 4 tools | 7 skill documents | 18 diagnostic triplets | ~1,200 lines of validated Python **Validation status**: `test_validated` (LiquidFlow gravity-driven benchmark) ---
Scanned 9/11/2026
Install to Claude Code
npx -y skills add lzwei196/KISS---Knowledge-Infrastructure-for-Scientific-Simulation --skill OpenGeoSys --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of OpenGeoSys?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/lzwei196-opengeosys)More formats (shields.io, HTML) on the badges page.
> **MANDATORY EXECUTION POLICY** — READ BEFORE PROCEEDING
>
> You MUST run the **actual model binary or package** described in this document.
> If the model fails to import, compile, or execute, you MUST:
> 1. Check `diagnostics/triplets.yaml` for a matching error pattern
> 2. Try the fix suggested in the triplet's `remedy` section
> 3. If still failing, report the error to the user with full details
>
> You MUST NOT substitute a simplified Python formula, regression equation,
> or hand-coded approximation in place of the real model.
>
>
> Before starting, run: `python preflight_check.py` (in this KI directory)
> to verify that the model binary/package and required data are available.
>
> **DEBUGGING PROTOCOL** — When something goes wrong, follow this order:
> 1. **Check triplets** — `diagnostics/triplets.yaml` may already cover this error
> 2. **Read official docs** — The model's own documentation for expected formats/units
> 3. **Find working examples** — Check `outputs/` or the model's shipped test data
> 4. **Fix the tool** — With knowledge of what "correct" looks like
>
> Do NOT write custom debug scripts. The answers are in the docs and examples.
<!-- KI-MAP:BEGIN (projected by generate_skill_map.py — edit the KI, not this table) -->
## KI map — what to read, and when
| when you need | read | why |
|---|---|---|
| FIRST, always | `preflight_check.py` | run it (`python preflight_check.py`): proves env/binary/data are usable and emits a machine-readable `PREFLIGHT_REPORT=` line. Do not debug a run that never had a healthy environment. |
| to run the pipeline stages | `tools/` (4 tools) | the executable pipeline. Read each tool's argparse (`--help`) before composing a command; SKILL.md's stage table says which tool serves which stage. |
| before running a stage | `docs/s*_*.md` (8 stage docs) | per-stage procedure, verification and traps — the how-to that SKILL.md's overview compresses. |
| on ANY error, before debugging | `diagnostics/triplets.yaml` (18 entries) | symptom → diagnosis → remedy for this model's known failure modes. Check here FIRST; the answer usually exists. Never renumber or rewrite entries. |
| to know what an output IS | `dag.yaml` | the model's identity: every output's medium, units, `validation_rank` (1 = the headline variable) and observability. Scoring and obs-binding read THIS — when asked 'what does this model predict', the dag is the answer, not a guess. |
| when building inputs / parsing outputs | `docs/format_spec.yaml` | exact I/O shapes + `known_issues`, projected from dag + triplets. Regenerate with `ki_tools_common/generate_format_spec.py` after changing either — never hand-edit. |
| to judge a run's skill | `docs/validation_convention.yaml` | how this model's field judges it validated: per-`dag_variable` metrics, directions and CITED pass-bands. A run is graded against these, not against intuition. |
| for claims and thresholds | `docs/gathered_papers.json` (22 papers) + `docs/papers_index.md` | the literature this KI is judged by; each entry's `text_path` is fetched full text in the central paper cache. `role: benchmark` marks the model's own skill paper. |
| for a machine-readable summary | `knowledge_infrastructure.yaml` | the manifest (package, pipeline, validation tier, counts) — projected by `ki_tools_common/generate_ki_manifest.py`; regenerate after structural changes, never hand-edit. |
*Projected 2026-08-17 from the KI's actual contents — 9 components present. Refresh: `python3 ki_tools_common/generate_skill_map.py --ki_dir <this KI>`.*
<!-- KI-MAP:END -->
<!-- KI-TOOL-INDEX:BEGIN (projected by generate_skill_map.py — the discoverability contract: every public tool, exact path; PURPOSE stays human-authored elsewhere) -->
### Executable tool index (projected — complete by construction)
Every public tool in this KI, by exact path. What each is FOR lives in the
human-written Tool Inventory above; `--help` on any of these prints its arguments.
| tool (exact path) | invocation |
|---|---|
| `tools/convert_forcing_to_ogs.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/convert_forcing_to_ogs.py --help` |
| `tools/convert_soil_to_ogs.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/convert_soil_to_ogs.py --help` |
| `tools/parse_ogs_output.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/parse_ogs_output.py --help` |
| `tools/run_ogs.py` | `KISSPATH_PYTHON_ENV/bin/python {KI}/tools/run_ogs.py --help` |
*4 public tools; `_`-prefixed helpers and packaging files excluded.*
<!-- KI-TOOL-INDEX:END -->
# OpenGeoSys 6 (OGS-6) — Knowledge Infrastructure
**Package**: `hydrocraft-ogs-subsurface` v1.0.0
**Model**: OpenGeoSys 6.5.7 — Thermo-Hydro-Mechanical-Chemical simulator
**Domain**: Groundwater / subsurface THMC processes in porous and fractured media
**Created by**: Auto-dissection pipeline
**Last updated**: 2026-03-25
**Stats**: 4 tools | 7 skill documents | 18 diagnostic triplets | ~1,200 lines of validated Python
**Validation status**: `test_validated` (LiquidFlow gravity-driven benchmark)
---
## Data Preparation
### Forcing data
**Data Sources**: Use `from ki_tools_common.load_forcing import load_daily_forcing` for CMFD/MSWX/NASA POWER.
**Data Validation Reference**: See `data_ki/CMFD/SKILL.md` for recharge forcing documentation.
See `data_ki/GLHYMPS/SKILL.md` for hydrogeology data.
See `data_ki/FanWTD/SKILL.md` for water table depth.
See `data_ki/GRACE/SKILL.md` for GRACE TWS validation data.
## Overview
This knowledge infrastructure enables simulation of subsurface processes using OpenGeoSys 6 (OGS-6), a C++ finite-element simulator for coupled thermo-hydro-mechanical-chemical (THMC) problems in porous and fractured media. The tools replace manual XML editing and VTK post-processing with a Python pipeline that automates project file generation, execution, and output extraction.
**What OGS does**: Multiphysics FEM simulator for subsurface engineering. Simulates:
- Groundwater flow (saturated: LiquidFlow, unsaturated: RichardsFlow)
- Heat transport (HeatConduction, HT advection-diffusion coupling)
- Geomechanics (SmallDeformation, LargeDeformation, HydroMechanics)
- Coupled THMC (ThermoRichardsFlow, ThermoRichardsMechanics, TH2M)
- Reactive transport (ComponentTransport, RichardsComponentTransport)
- Fracture mechanics (PhaseField, LIE lower-dimensional elements)
- Borehole heat exchangers (HeatTransportBHE)
- Wellbore simulation
**Key difference from other HydroCraft models**: OGS solves PDEs on unstructured FEM meshes (VTU format) rather than structured grids. Input is XML-based project files (`.prj`), not namelists or CSV. All units are strict SI (Pa, K, m, s, kg). No unit tolerance — wrong units produce silent garbage.
---
## Installation
### Building from source
```bash
cd KISSPATH_INTERNAL_NOT_SHIPPED/auto_dissect/_work/OpenGeoSys/source/repo
mkdir -p build && cd build
cmake .. -DOGS_BUILD_CLI=ON -DOGS_BUILD_TESTING=OFF -DOGS_BUILD_UTILS=OFF
make -j$(nproc)
# Binary: build/bin/ogs
```
### Dependencies
```
CMake >= 3.22, C++23 compiler (GCC >= 13, Clang >= 16)
Eigen3, VTK, Boost (header-only), tclap, spdlog, fmt
Optional: PETSc (parallel), MPI, pybind11 (Python bindings)
```
### Python bindings (alternative)
```bash
pip install ogs
# Usage: from ogs import OGSSimulator
```
### Python tool dependencies
```
numpy, pandas, lxml, meshio, matplotlib, pyvista (optional)
```
### Test example
```
Tests/Data/Parabolic/LiquidFlow/GravityDriven/
gravity_driven.prj # Project file (XML)
mesh2D.vtu # VTK unstructured mesh
gravity_driven.gml # Geometry (boundary definitions)
```
---
## Pipeline (7 stages)
| # | Stage | Tool(s) | Description |
|---|-------|---------|-------------|
| 0 | Configuration | (manual) | Select process type, domain geometry, simulation period |
| 1 | Domain setup | (mesh tools) | Create/import VTU mesh, define geometry boundaries |
| 2 | Data preparation | `convert_forcing_to_ogs.py` | Convert external data to OGS boundary condition format |
| 3 | Forcing/input | `convert_forcing_to_ogs.py` | Time-dependent BCs: recharge, head, flux (unit conversions) |
| 4 | Parameters | `convert_soil_to_ogs.py` | Material properties: permeability, porosity, density, thermal |
| 5 | Execution | `run_ogs.py` | Generate .prj, run OGS binary, check convergence |
| 6 | Output parsing | `parse_ogs_output.py` | Extract VTU results to CSV time series |
### Parallelism
Stages 1, 2, 3, 4 can run in parallel after stage 0.
Stage 5 depends on 1-4.
Stage 6 depends on 5.
---
## Tools Reference
| Tool | Stage | Script Path | Lines | Purpose |
|------|-------|-------------|------:|---------|
| `convert_forcing_to_ogs` | s2/s3 | `tools/convert_forcing_to_ogs.py` | 280 | External forcing data → OGS boundary condition CSV/VTU |
| `convert_soil_to_ogs` | s4 | `tools/convert_soil_to_ogs.py` | 250 | HWSD/soil database → OGS material properties XML |
| `run_ogs` | s5 | `tools/run_ogs.py` | 320 | Generate .prj, execute OGS, validate output |
| `parse_ogs_output` | s6 | `tools/parse_ogs_output.py` | 290 | Parse VTU output → CSV time series + summary JSON |
**Total**: 4 tools, ~1,140 lines of validated Python code.
---
## 6. Output Description
**Source of truth**: `dag.yaml`. The dag defines the model's observable outputs; if this section and `dag.yaml` disagree, `dag.yaml` wins.
**Headline output** (dag `validation_rank: 1`):
> `temperature` — Subsurface (rock/soil porous-medium) temperature field at FEM nodes; primary variable of thermal/heat-transport processes. (K)
| Output variable (dag `var`) | Rank | Unit | Description |
|-----------------------------|------|------|-------------|
| `temperature` | 1 | K | Subsurface (rock/soil porous-medium) temperature field at FEM nodes; primary variable of thermal/heat-transport processes. |
| `pressure` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
| `displacement` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
| `darcy_velocity` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
| `stress` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
| `saturation` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
| `concentration` | see `dag.yaml` | see `dag.yaml` | see `dag.yaml` |
The dag's other listed outputs are: `pressure`, `displacement`, `darcy_velocity`, `stress`, `saturation`, and `concentration`.
---
## Skill Knowledge
| Stage | Topic | Skill Document |
|-------|-------|----------------|
| s0 | Process selection, mesh requirements | `docs/s0_configuration.md` |
| s1 | Mesh formats, VTU structure, boundary submeshes | `docs/s1_domain_setup.md` |
| s2/s3 | Unit conversions (mm→m, °C→K, day→s) | `docs/s2_forcing_input.md` |
| s4 | Permeability, van Genuchten, porosity | `docs/s3_parameters.md` |
| s5 | Project file XML structure, solver config | `docs/s4_execution.md` |
| s6 | VTU parsing, PVD time series, XDMF | `docs/s5_output_parsing.md` |
| all | Coupled processes, staggered vs monolithic | `docs/s6_coupled_processes.md` |
---
## Critical Domain Knowledge
These non-obvious facts cause **silent failures** if violated. Each has a corresponding diagnostic triplet.
### 1. All units are strict SI — no exceptions (dt_001)
OGS uses **SI base units everywhere**: pressure in Pa (not kPa or bar), temperature in Kelvin (not Celsius), length in meters, time in seconds, permeability in m² (not Darcy). There is no unit conversion inside OGS. If you supply permeability in Darcy (1 D = 9.869e-13 m²) without converting, the flow will be wrong by orders of magnitude with no warning.
### 2. Temperature must be in Kelvin (dt_002)
OGS expects temperature in Kelvin. Supplying 20 (meaning 20°C) instead of 293.15 K causes density/viscosity calculations to produce nonsensical results. The Celsius-zero constant is 273.15 K (`PhysicalConstant::CelsiusZeroInKelvin`).
### 3. Permeability is intrinsic (m²), NOT hydraulic conductivity (m/s) (dt_003)
OGS uses intrinsic permeability κ [m²], not hydraulic conductivity K [m/s]. Conversion: `κ = K * μ / (ρ * g)`. For water at 20°C: `κ ≈ K * 1.02e-7`. Supplying K=1e-5 m/s as κ=1e-5 m² makes the medium 10 million times too permeable.
### 4. Time is in seconds in project files (dt_004)
All time values in `.prj` files are in seconds: `t_initial`, `t_end`, `delta_t`. One day = 86400 s, one year ≈ 3.1536e7 s. Setting `t_end=365` (meaning 365 days) actually runs for 365 seconds (6 minutes).
### 5. Mesh boundary conditions require submeshes (dt_005)
OGS-6 applies boundary conditions on **submeshes** (separate `.vtu` files for boundary faces), not on geometry-based selections like OGS-5. Each BC needs a matching submesh file that extracts boundary faces from the bulk mesh. Missing submeshes → crash.
### 6. Body force vector must match mesh dimension (dt_006)
`<specific_body_force>` must have exactly as many components as the mesh dimension. 2D mesh: `"0 -9.81"`, 3D mesh: `"0 0 -9.81"`. Wrong dimension count crashes the parser silently or misaligns gravity direction.
### 7. van Genuchten parameters are model-specific (dt_007)
OGS uses the van Genuchten-Mualem model with parameters: `p_b` (entry pressure, Pa), `S_L_res` (residual saturation), `S_L_max` (max saturation), `m` or `n` where `m = 1 - 1/n`. Literature often reports α [1/cm] which needs conversion: `p_b = ρ*g/α` (with α in 1/m). Off by 100x if α is not converted from 1/cm to 1/m.
### 8. Convergence criterion type matters (dt_008)
`DeltaX` checks solution increment norm, `Residual` checks residual norm. Using wrong type with wrong tolerance causes either non-convergence (too tight) or unconverged garbage (too loose). For pressure problems: `DeltaX` with `abstol=1e-6` is typical. For displacement: `abstol=1e-10` (meters).
### 9. Storage coefficient must be non-zero for transient flow (dt_009)
For transient LiquidFlow, the `storage` property (specific storage, 1/Pa) must be > 0. If set to 0 (steady-state assumption), the mass matrix M=0 and the transient solver degenerates, producing constant pressure at all timesteps.
---
## Input File Format (.prj)
OGS uses XML project files with this top-level structure:
```xml
<OpenGeoSysProject>
<meshes> <!-- VTU mesh files -->
<mesh>domain.vtu</mesh>
<mesh>boundary_left.vtu</mesh>
</meshes>
<processes> <!-- Physics: LIQUID_FLOW, RICHARDS_FLOW, etc. -->
<process>
<type>LIQUID_FLOW</type>
<process_variables><process_variable>pressure</process_variable></process_variables>
<specific_body_force>0 -9.81</specific_body_force>
</process>
</processes>
<media> <!-- Material properties (SI units) -->
<medium id="0">
<phases><phase><type>AqueousLiquid</type>...</phase></phases>
<properties>
<property><name>permeability</name><value>1e-12</value></property>
<property><name>porosity</name><value>0.3</value></property>
<property><name>storage</name><value>1e-9</value></property>
</properties>
</medium>
</media>
<time_loop> <!-- Timestepping and output -->
<processes><process ref="...">
<time_stepping><type>FixedTimeStepping</type>
<t_initial>0</t_initial><t_end>86400</t_end>
</time_stepping>
</process></processes>
<output><type>VTK</type><prefix>result</prefix></output>
</time_loop>
<parameters> <!-- Named constants/functions -->
<process_variables> <!-- ICs, BCs, source terms -->
<nonlinear_solvers> <!-- Picard or Newton -->
<linear_solvers> <!-- Eigen/PETSc solver config -->
</OpenGeoSysProject>
```
---
## Key Variables and Units (ALL SI)
| Variable | Symbol | Unit | Typical Range |
|----------|--------|------|---------------|
| Pressure (hydraulic head) | p | Pa | 0 – 1e7 |
| Temperature | T | K | 273 – 373 |
| Displacement | u | m | 0 – 0.1 |
| Permeability (intrinsic) | κ | m² | 1e-18 – 1e-8 |
| Porosity | φ | – | 0.01 – 0.6 |
| Density (liquid) | ρ_L | kg/m³ | 998 – 1050 |
| Viscosity (dynamic) | μ | Pa·s | 1e-4 – 1e-2 |
| Storage coefficient | S_s | 1/Pa | 1e-12 – 1e-6 |
| Thermal conductivity | λ | W/(m·K) | 0.1 – 5.0 |
| Specific heat capacity | c_p | J/(kg·K) | 800 – 4200 |
| Darcy velocity | v | m/s | 1e-12 – 1e-3 |
| Stress | σ | Pa | 0 – 1e8 |
| Strain | ε | – | 0 – 0.01 |
| Liquid saturation | S_L | – | 0 – 1 |
| Capillary pressure | p_c | Pa | 0 – 1e6 |
| Concentration | c | mol/m³ | 0 – 1e3 |
---
## 8. Unit Conversion Table
Exact I/O shapes live in `docs/format_spec.yaml`. This table collects the unit conversions already used by this KI's tools and warnings; OGS itself expects strict SI units and does not apply forgiving unit normalization.
| Variable | Source unit | OGS unit | Conversion | Trap severity |
|----------|-------------|----------|------------|---------------|
| Temperature | °C | K | T + 273.15 | silent |
| Pressure from hydraulic head | m | Pa | h × ρ × g | silent |
| Recharge / precipitation flux | mm/day | m/s | P / (1000 × 86400) | silent |
| Permeability from hydraulic conductivity | m/s | m² | κ = K × μ / (ρ × g) | silent |
| Permeability from Darcy | Darcy | m² | κ × 9.869e-13 | silent |
| Time duration | days | s | × 86400 | silent |
| Time duration | years | s | × 3.1536e7 | silent |
| van Genuchten alpha | 1/cm | 1/Pa entry-pressure form | p_b = ρ·g/(α×100) | silent |
| Transmissivity | m²/s | m² | T / aquifer_thickness × μ/(ρg) | silent |
---
## Unit Trap Table
| External Source | Variable | Source Unit | OGS Unit | Conversion | Trap Severity |
|----------------|----------|------------|----------|------------|---------------|
| HWSD soil data | Permeability | cm/hr (Ksat) | m² | K_sat[m/s] × 1.02e-7 | **silent** |
| Weather station | Temperature | °C | K | T + 273.15 | **silent** |
| Weather station | Precipitation | mm/day | m/s | P / (1000 × 86400) | **silent** |
| MODFLOW | Hydraulic head | m (head) | Pa | h × ρ × g | **silent** |
| Literature | Permeability | Darcy | m² | κ × 9.869e-13 | **silent** |
| Literature | vG alpha | 1/cm | 1/Pa | p_b = ρ·g/(α×100) | **silent** |
| Well test | Transmissivity | m²/s | m² | T / aquifer_thickness × μ/(ρg) | **silent** |
| Time specs | Duration | days/years | seconds | × 86400 or × 3.1536e7 | **silent** |
---
## Supported Process Types
| Process Type Enum | Description | Primary Variables |
|-------------------|-------------|-------------------|
| `LIQUID_FLOW` | Saturated groundwater flow | pressure |
| `RICHARDS_FLOW` | Unsaturated flow | pressure |
| `STEADY_STATE_DIFFUSION` | Steady diffusion (Laplace) | pressure/concentration |
| `HEAT_CONDUCTION` | Pure heat conduction | temperature |
| `HT` | Heat transport (advection-diffusion) | temperature, pressure |
| `HYDRO_MECHANICS` | Coupled flow + deformation | pressure, displacement |
| `THERMO_MECHANICS` | Coupled heat + deformation | temperature, displacement |
| `SMALL_DEFORMATION` | Linear elasticity | displacement |
| `LARGE_DEFORMATION` | Nonlinear elasticity | displacement |
| `RICHARDS_MECHANICS` | Unsaturated flow + deformation | pressure, displacement |
| `THERMO_RICHARDS_FLOW` | Heat + unsaturated flow | temperature, pressure |
| `THERMO_RICHARDS_MECHANICS` | Heat + unsaturated + deformation | T, p, u |
| `TH2M` | Full two-phase THM | gas_p, cap_p, T, u |
| `COMPONENT_TRANSPORT` | Reactive transport | concentration(s), pressure |
| `HEAT_TRANSPORT_BHE` | Borehole heat exchangers | temperature |
---
## Output Format
OGS writes results as VTK Unstructured Grid files:
```
result_ts_0_t_0.000000.vtu # Initial condition
result_ts_1_t_86400.000000.vtu # After 1 day (86400 s)
result_ts_2_t_172800.000000.vtu # After 2 days
result.pvd # PVD collection file (time series index)
```
**VTU files contain**: node-based fields (pressure, displacement, temperature) and cell-based fields (velocity, stress, strain). Parse with `meshio`, `pyvista`, or `vtk` Python libraries.
**PVD file**: XML index linking timesteps to VTU files. Use to reconstruct time series.
**Alternative**: XDMF/HDF5 format for large parallel runs (`<type>XDMF_HDF5</type>`).
---
## 11. Validated Results
**Source of truth**: `docs/validation_convention.yaml`. Convention bands below restate the KI's extracted convention facts. Null convention bands are written as `no cited threshold`; no replacement threshold is inferred.
### Headline validation variable
The headline validation variable is `temperature`, matching the dag's rank-1 output:
> `temperature` — Subsurface (rock/soil porous-medium) temperature field at FEM nodes; primary variable of thermal/heat-transport processes. (K)
### Performance metrics and convention bars
| Dag variable | Metric | Direction | Satisfactory band | Convention cites |
|--------------|--------|-----------|-------------------|------------------|
| `pressure` | nse | maximize | no cited threshold | [] |
| `pressure` | pbias | zero_centered | no cited threshold | [] |
| `temperature` | nse | maximize | no cited threshold | [] |
| `temperature` | nmae | minimize | 15 | heldt2023 |
This SKILL body does not add achieved calibration or validation values beyond the KI's extracted convention facts. A run should be judged by the metric directions and cited bands in `docs/validation_convention.yaml`, with `dag.yaml` defining which output is the headline variable.
### Validation status
| Item | Value |
|------|-------|
| Validation status | `test_validated` |
| Current validated benchmark named in this SKILL | LiquidFlow gravity-driven benchmark |
| Headline output | `temperature` |
| Headline output unit | K |
---
## CLI Usage
```bash
ogs project.prj [options]
Options:
-o, --output-directory DIR Output directory for results
-m, --mesh-input-directory DIR Directory containing mesh files
-p, --xml-patch FILE Apply XML patch to project file (repeatable)
--write-prj Write processed project file to output
--enable-fpe Enable floating-point exceptions
--unbuffered-std-out Unbuffered stdout for real-time logging
```
---
## Quick Start
```bash
# 1. Convert soil parameters to OGS format
python tools/convert_soil_to_ogs.py \
--sand 60 --clay 15 --silt 25 --organic 2.0 --bulk_density 1500 \
--output soil_params.json
# 2. Convert forcing data (recharge) to OGS format
python tools/convert_forcing_to_ogs.py \
--source recharge_mm_day.csv --source_format csv \
--variable recharge --source_unit mm/day --target_unit m/s \
--start_date 2000-01-01 --end_date 2010-12-31 \
--output recharge_ogs.csv
# 3. Run OGS simulation
python tools/run_ogs.py \
--prj_template project_template.prj \
--mesh domain.vtu --output_dir results/ \
--ogs_binary /path/to/ogs
# 4. Parse output to CSV
python tools/parse_ogs_output.py \
--pvd_file results/result.pvd \
--variables pressure,v \
--point "50.0,0.0" \
--output results/timeseries.csv
```
---
## Diagnostic Triplets
18 triplets covering 5 failure domains. See `diagnostics/triplets.yaml` for full details.
| ID | Severity | Domain | Summary |
|----|----------|--------|---------|
| dt_001 | **silent** | unit_conversion | Pressure in kPa instead of Pa |
| dt_002 | **silent** | unit_conversion | Temperature in °C instead of K |
| dt_003 | **silent** | unit_conversion | Permeability in Darcy instead of m² |
| dt_004 | **silent** | unit_conversion | Time in days instead of seconds |
| dt_005 | fatal | mesh_format | Missing boundary submesh for BCs |
| dt_006 | fatal | parameter_format | Body force dimension mismatch |
| dt_007 | **silent** | unit_conversion | van Genuchten α in 1/cm not converted |
| dt_008 | degraded | solver_config | Wrong convergence criterion type/tolerance |
| dt_009 | **silent** | parameter_format | Storage=0 in transient simulation |
| dt_010 | fatal | path_resolution | Mesh file not found (relative path) |
| dt_011 | **silent** | silent_error | Hydraulic conductivity used as permeability |
| dt_012 | degraded | solver_config | Newton diverges — need Picard first |
| dt_013 | **silent** | silent_error | Recharge in mm/day not converted to m/s |
| dt_014 | fatal | parameter_format | XML tag misspelling (case-sensitive) |
| dt_015 | **silent** | unit_conversion | Precipitation mm/day → m/s missing /86400 |
| dt_016 | degraded | mesh_format | Mesh element order mismatch with FE order |
| dt_017 | **silent** | silent_error | Porosity=0 kills transient storage |
| dt_018 | fatal | runtime | NaN from zero viscosity or density |
**Silent error count**: 10/18 (56%) — dominated by unit conversion traps due to strict SI requirement.
---
## File Structure
```
ki/
SKILL.md # This file (agent entry point)
knowledge_infrastructure.yaml # Auto-generated schema
tools/
convert_forcing_to_ogs.py # External data → OGS boundary conditions
convert_soil_to_ogs.py # HWSD/soil → OGS material properties
run_ogs.py # OGS execution wrapper
parse_ogs_output.py # VTU/PVD → CSV time series
docs/
s0_configuration.md # Process selection, mesh requirements
s1_domain_setup.md # Mesh formats, boundary submeshes
s2_forcing_input.md # Unit conversions, BC types
s3_parameters.md # Material properties, constitutive models
s4_execution.md # Project file structure, solver config
s5_output_parsing.md # VTU format, time series extraction
s6_coupled_processes.md # Multi-physics coupling strategies
diagnostics/
triplets.yaml # 18 diagnostic triplets
```
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!