Post-process OpenFOAM v2412 results - residual/convergence plots, forces and force coefficients, y+, min/max, flow rates, line samples/profiles, probes, field statistics, VTK export for ParaView, screenshots, and a results report. Use when the user asks to analyze, plot, extract numbers from, visualize, or report on a completed (or running) OpenFOAM case. Also use to check status or monitor convergence of a running simulation.
Installs into .claude/skills of the current project.
Are you the author of Of Post?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/swtbkim-of-post)
---
name: of-post
description: Post-process OpenFOAM v2412 results - residual/convergence plots, forces and force coefficients, y+, min/max, flow rates, line samples/profiles, probes, field statistics, VTK export for ParaView, screenshots, and a results report. Use when the user asks to analyze, plot, extract numbers from, visualize, or report on a completed (or running) OpenFOAM case. Also use to check status or monitor convergence of a running simulation.
---
# of-post: results extraction, plots, report
If of-sim is not already loaded, Read the sibling skill's SKILL.md -
skills/of-sim/SKILL.md in this suite - section 0 (Environment + invocation), and
references/environment.md (generated by /of-setup) BEFORE the first command.
Mode A (Windows host + WSL) canonical invocation:
`MSYS_NO_PATHCONV=1 wsl.exe -d <distro> --exec bash <scripts>/<script>.sh [args...]`
Mode B (native Linux): `bash <scripts>/<script>.sh [args...]`
`<scripts>` = this suite's skills/of-sim/scripts/ dir. In mode A case paths are WSL
paths; their Windows view is `\\wsl.localhost\<distro>\...`. The Read tool works on
case files in both modes, including PNG rendering - LOOK at every plot you produce
before reporting it.
## Operation menu
### Convergence / residuals
```
ofmon.sh status <case> # time/Courant/continuity + verdict
ofmon.sh residuals <case> # CSV + verdict
ofmon.sh plot <case> # residuals.png (gnuplot, log-y)
```
### Standard derived fields (run on results, no solve)
```
ofrun.sh run <case> postProcess -funcs '(mag(U))' -latestTime
ofrun.sh run <case> postProcess -func 'fieldMinMax(U,p)' -latestTime # bounds sanity
# needs turbulence/transport model context -> run THROUGH THE SOLVER:
ofrun.sh run <case> simpleFoam -postProcess -func yPlus -latestTime
ofrun.sh run <case> simpleFoam -postProcess -func wallShearStress -latestTime
```
Outputs land in `<case>/postProcessing/<func>/<time>/*.dat` - cat them and quote numbers.
### Forces / coefficients (bodies)
Add to controlDict functions{} (or run via -postProcess if fields suffice):
```
forces1 { type forces; libs (forces); patches (<bodyPatches>); rho rhoInf; rhoInf <rho>; CofR (0 0 0); }
forceCoeffs1 { type forceCoeffs; libs (forces); patches (<body>); rho rhoInf; rhoInf <rho>;
magUInf <U>; lRef <L>; Aref <A>; liftDir (0 1 0); dragDir (1 0 0); CofR (0 0 0); pitchAxis (0 0 1); }
```
Ready-made configs: `#includeEtc "caseDicts/postProcessing/forces/forceCoeffsIncompressible.cfg"`
(siblings: forces.cfg, forceCoeffs.cfg, forcesIncompressible.cfg; #includeEtc does not expand globs).
### Profiles / line samples
Write `system/sample` (sets format):
```
type sets; libs (sampling); interpolationScheme cellPoint; setFormat raw;
fields (U p);
sets ( line1 { type uniform; axis distance; start (x1 y1 z1); end (x2 y2 z2); nPoints 100; } );
```
Run: `ofrun.sh run <case> postProcess -func sample -latestTime` ->
`postProcessing/sample/<time>/line1_*.xy`. Plot with gnuplot to PNG, or hand the numbers
to the user. (Benchmark comparisons - e.g. Ghia cavity, Poiseuille - belong here.)
### Slice heatmaps without ParaView (validated on mixer cases)
Plane-sample the field (`type surfaces; libs (sampling); surfaceFormat raw;` with a
`cuttingPlane`) at selected times, then render the scattered points via gnuplot:
`set dgrid3d 100,100; set pm3d map; splot '<time>/s_plane.raw' using 1:2:4`
(pick the two in-plane coordinate columns). Time series as 2x2 multiplot:
```
set term pngcairo size 1200,1100; set out 'snapshots.png'; set multiplot layout 2,2
set size ratio -1; set dgrid3d 100,100; set pm3d map; unset key
do for [t in "6 18 36 60"] { set title 't = '.t
splot sprintf('postProcessing/slice/%s/s_plane.raw', t) using 1:2:4 }
unset multiplot
```
### Probes (time histories)
`probes { type probes; libs (sampling); probeLocations ((x y z) ...); fields (p U); }`
in functions{} during the run.
### Flow rate through a patch
`postProcess -func 'flowRatePatch(name=outlet)' -latestTime`
### Export for ParaView (user-facing visualization)
```
ofrun.sh run <case> foamToVTK -latestTime # -> <case>/VTK/
```
Tell the user the path (mode A: the Windows `\\wsl.localhost\<distro>\...` view). With
`-allRegions` the per-region volume block is named
`internal`, not `internalMesh`. Headless screenshots (validated): `/usr/bin/pvbatch
--force-offscreen-rendering <script.py>` works with no xvfb/display. Gotchas: `ColorBy(rep,
None)` throws - use `rep.ColorArrayName=['POINTS','']` for solid colour; multi-region .vtm:
`ExtractBlock(Selectors=['//internal'])` + `MergeBlocks`; FeatureEdges only on the extracted
`internal` block (merged volume+patches -> non-manifold blowup). If pvbatch scripting fights
you, fall back to foamToVTK + user-side ParaView.
Quick built-in renders also possible with `functions { #includeFunc runTimePostProcessing }`
(graphics functionObject) - advanced, optional.
### Animation
Transient with many write times: `foamToVTK` (all times) -> ParaView; or
`foamSequenceVTKFiles` for renamed sequences. For GIFs: gnuplot frames + ImageMagick if
installed (check `which convert`).
## Report template (<case>/report.md)
```
# <title> (<date>)
## Spec - goal, geometry, fluid, regime, BCs (from of-sim spec)
## Mesh - generator, cells, checkMesh summary (nonOrtho/skew max)
## Numerics - solver, turbulence model, schemes preset, dt/Co or relaxation
## Convergence - verdict, final residuals, continuity, residuals.png
## Results - requested quantities w/ numbers + plots; y+ if turbulent
## Validation - comparison vs analytic/benchmark/expectation where possible
## Assumptions - everything defaulted (--auto) or inferred
## Reproduce - exact command sequence
## Artifacts - case path (both views in mode A), VTK, PNGs, CSVs
```
Keep chat summary short: verdict + 3-5 key numbers + artifact paths.