Skip to main content

Module ami

Module ami 

Source
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 AMIInterpolation clips 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 (cyclicAMI with 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::CyclicAmi patch 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.