Skip to content

[DualPorosity] (4/5) Apply the dual-continuum policy and twin co-location - #7350

Draft
arturcastiel wants to merge 1 commit into
OPM:masterfrom
arturcastiel:dualporo-sim-policy
Draft

[DualPorosity] (4/5) Apply the dual-continuum policy and twin co-location#7350
arturcastiel wants to merge 1 commit into
OPM:masterfrom
arturcastiel:dualporo-sim-policy

Conversation

@arturcastiel

@arturcastiel arturcastiel commented Aug 24, 2026

Copy link
Copy Markdown
Member

Builds on OPM/opm-common#5318, which must merge before this compiles.

What this does

Applies the dual-continuum policy in the simulator. The complete face policy in one place — a
face between a matrix cell and a fracture cell never carries flow, because the coupling is the
input non-neighbour connection; matrix-matrix faces flow only under dual permeability; fracture
permeability is scaled unless the run disables it; twin couplings are exempt from the
non-neighbour prune. Fracture cells are treated as physically co-located with their matrix twin
in equilibration, cell-centre depths and the result writer.

Why

The input layer for this landed in opm-common; this is the consumer.

Two fixes ride along because they are the same story. The input grid is now bound inside its
guard at every site rather than unconditionally — the parallel state object throws for non-zero
ranks, so the unguarded pattern reached that throw on every multi-process run. And twin
classification is derived from the Cartesian dimensions rather than the input grid: the same
arithmetic without a rank-0 dependency, following the read-and-broadcast convention this file
already uses a few lines below for the pinch options.

Behavior impact

None yet — the keywords are still rejected. The switch is the next pull request.

Testing

Face policy: cross-half faces zero, matrix-matrix under dual permeability, permeability scaling
on and off, and dual-permeability half-equivalence against single-porosity analogues. Twin
couplings surviving the non-neighbour prune, with a case at more than one matrix layer — where
the twin offset stops coinciding with the neighbour offset and the exemption is genuinely
exercised.

Requirements and limitations

Serial only. Measured: at two processes none of nine twin pairs separated across ranks; at
four processes at least four of nine did. Rather than silently drop couplings, a dual-continuum
run at more than one process stops with a located error. The design does not preclude parallel
support later; the guard is the honest state today.

Co-authored-by: AXON <axon@arturcastiel.github.io>
@arturcastiel arturcastiel changed the title [DualPorosity] Apply the dual-continuum policy and twin co-location [DualPorosity] (4/5) Apply the dual-continuum policy and twin co-location Aug 24, 2026
@arturcastiel arturcastiel added the manual:enhancement This is an enhancement/improvent that needs to be documented in the manual label Aug 24, 2026
@arturcastiel

Copy link
Copy Markdown
Member Author

jenkins build this please

@arturcastiel

Copy link
Copy Markdown
Member Author

jenkins build this please with opm-common=5318

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

manual:enhancement This is an enhancement/improvent that needs to be documented in the manual

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant