[DualPorosity] (1/5) Add the RUNSPEC porosity model - #5316
Conversation
|
jenkins build this please |
bska
left a comment
There was a problem hiding this comment.
I'd really prefer we not add more single-purpose bool flags directly to Runspec. Could you not create a separate structure for these flags and give it a more descriptive name?
Introduce PorosityModel, a value type for the continuum selection made in the RUNSPEC section: single porosity (the default), dual porosity (DUALPORO) or dual permeability (DUALPERM), together with the fracture permeability scaling option (NODPPM). Runspec holds one of these and exposes it through Runspec::porosityModel(); no single-purpose flags are added to Runspec itself. The type answers the questions downstream code asks -- does the run resolve two continua, does it resolve flow between matrix cells, and is fracture permeability scaling active -- so the deck is read in one place and every consumer takes the same answer. It follows the pattern of the other RUNSPEC value types: constructor from the deck, serialization, equality and a serialization test object. Restrict NODPPM to the RUNSPEC section and register the per-cell coupling keyword SIGMAV. Co-authored-by: AXON <axon@arturcastiel.github.io>
4af0954 to
a0aa790
Compare
|
Agreed, and done. The three flags are gone from It records the model as an enum — The name follows the EGRID header, whose corresponding item distinguishes single porosity, dual
|
|
jenkins build this please |
What this does
Adds
PorosityModel, a value type for the continuum selection made in the RUNSPEC section:single porosity (the default), dual porosity (
DUALPORO) or dual permeability (DUALPERM),together with the fracture permeability scaling option (
NODPPM).Runspecholds one andexposes it through
Runspec::porosityModel(); no flags are added toRunspecitself.The type answers the questions downstream code asks — does the run resolve two continua, does
it resolve flow between matrix cells, is fracture permeability scaling active — so the deck is
read in one place and every consumer takes the same answer. It follows the pattern of the other
RUNSPEC value types: constructor from the deck, serialization, equality, a serialization test
object.
Why
First of a short series adding a dual-continuum capability to Flow. A dual-continuum deck
declares twice the layers: the first half in K are matrix cells, the second half their
co-located fracture twins. Nothing can interpret that layout before the porosity model is known,
so this lands first.
Behavior impact
None. Flow still rejects every dual-continuum keyword; this adds the type, its accessor and the
per-cell coupling keyword's registration.
Testing
RunspecTests: the default model, each selection,DUALPERMtaking precedence overDUALPORO, the scaling option with and withoutNODPPM, equality.test_Serialization: theround trip.
Requirements and limitations
Nothing consumes the type yet — the code that does follows in the next pull request.
Gravity-drainage options are deliberately not included; that work is separate and later.