Expand description
Arbitrary Mesh Interface (AMI) weight computation and non-conformal periodic (cyclicAMI) coupling representation.
Mirrors OpenFOAM’s
src/meshTools/AMIInterpolation/AMIInterpolation/AMIInterpolation.H
(the geometric face-overlap weighting) and
src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.H
(the coupled-interface contribution), together with the
cyclicAMIPolyPatch topology.
§What AMI is (and why it differs from plain cyclic)
A plain PatchKind::Cyclic patch pair is
conformal: local face i of one half matches local face i of the
other exactly one-to-one, so the seam is discretised like an ordinary
internal face (see CyclicCoupling).
A PatchKind::CyclicAmi pair is
non-conformal: the two halves’ faces do not line up, so each target
face overlaps several source faces. The coupling for one target face is
therefore a weighted set of source cells, the weight of each being the
geometric overlap-area fraction
w_k = overlap_area(target, source_k) / target_area.
When a target is fully covered by sources these weights sum to 1
(conservative interpolation), so the value seen across the seam is the
area-weighted average of the overlapping source cells.
§Overlap method implemented here (first pass — planar / 1-D structured)
overlap_weights_1d projects both patch halves onto a common seam plane
and treats each face as an interval along a single transverse axis of
constant out-of-plane depth (a structured 2-D seam). The overlap of a target
interval [t0, t1] with a source interval [s0, s1] is the 1-D segment
overlap max(0, min(t1, s1) - max(t0, s0)), multiplied by the constant
depth to give an overlap area [m²]. This is exact for axis-aligned,
coplanar, structured seams (e.g. a translational-periodic channel meshed with
differing transverse resolutions on the two halves) — the case this first
pass targets.
§Deferred (documented limitations)
- General 3-D polygon clipping. True
AMIInterpolationclips arbitrary source polygons against each target polygon (Sutherland-Hodgman / greatest-area walk). That is not implemented here; only the 1-D interval overlap above is. Non-axis-aligned faces, skewed seams, and unstructured transverse tilings are out of scope for this pass. - Two transverse axes. Only one transverse coordinate is overlapped; a fully 2-D tiled seam (subdivided in both in-plane directions) is not handled.
- Non-planar / curved seams and per-face normal rotation (
cyclicAMIwith a rotational transform) are not handled.
These limits are acceptable for the verification cases this module ships (matching-mesh limit reproduces plain cyclic; a 2:1 non-conformal case is conservative). This code is an untrusted AI-assisted draft pending human V&V review (2026-08-04).
Structs§
- AmiCoupling
- One target seam face of a
PatchKind::CyclicAmipatch pair, together with the weighted set of source cells it couples to. - AmiOverlap
- One overlap between a target face and a source face on an AMI seam.
- AmiWeight
- One weighted source-cell contribution to a single AMI target seam face.
Functions§
- overlap_
weights_ 1d - Planar / 1-D-structured AMI overlap weights.