Conversation
CNV divides the cell residual by the cell pore volume, so cells with vanishing PV are held to a divergently strict standard: |R| <= tol*PV/(B*dt) -> 0. Measured (INFOITER pore-volume split vs deck cell counts): the decks that measurably need the relaxed-CNV escape hatch are exactly those whose offending cells have vanishing relative size -- DISPERC_FINGERS 2e-15, CO2STORE_PRECSALT ~1e-6, SPE1CASE2_RADIAL ~9e-6 (inner radial cells) -- while on the rest of the suite the hatch excuses ~7 ordinary-sized cells. The 3% pore-volume budget with tolerance 1.0 is a workaround for this ill-posed normalisation. --cnv-pore-volume-floor-fraction=f floors the normalisation volume at f x the average cell PV (0 = off). With the floor, fully strict settings (hatch closed, no iteration relaxation) become viable on the pathological class: DISPERC 46,121/1,799 (strict, no floor) -> 516/0 at matched dt; CO2STORE_PRECSALT 295/1 -> 41/0; healthy decks unchanged. Caveats recorded in investigation/CNV_PHYSICAL_REDESIGN.md: answer adjudication on DISPERC pending (its convergence failures currently act as an accidental temporal-error controller, so removing them exposes the time step to the accuracy-blind controller); one linear-solver abort on GASCONDENSATE_VAPWAT_PRECSALT under the floor; the principled form is a throughput-based denominator max(PV, dt*B*q), which also fixes the incompressible limit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hnil
force-pushed
the
cnv-pore-volume-floor
branch
from
August 11, 2026 12:05
ddc018e to
ba9231f
Compare
Member
Author
|
Closing this. The floor is a fraction of the mean cell pore volume, and the mean is set by the largest cells: on DISPERC_FINGERS (50 buffer cells at 1e10 m3 via |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CNV divides the cell residual by the cell pore volume, so vanishing-PV cells are held to a divergently strict standard (admissible residual -> 0). Measured on the regression suite: the decks that need
tolerance-cnv-relaxed=1.0are exactly those whose offending cells are 1e-6..1e-15 of the average cell size (DISPERC_FINGERS, the PRECSALT decks, SPE1CASE2_RADIAL inner radial cells) — the 3% pore-volume budget with tolerance 1.0 is compensating for a division by (near) zero.--cnv-pore-volume-floor-fraction=ffloors the normalisation volume at f x the average cell PV (default 0 = off, byte-identical). With the floor, fully strict settings become viable on that class: DISPERC 46,121 Newton / 1,799 failed substeps -> 516 / 0 at matched dt; CO2STORE_PRECSALT 295/1 -> 41/0.Draft to discuss direction: this is the cheap proxy for the physically complete form
B dt |R| / max(PV, B dt q_throughput)(residual per storage OR throughput, whichever is larger). One caveat to be aware of: on such decks the ill-posed criterion has been acting as an accidental time-step limiter, so fixing it lets dt grow and answers move — it should be paired with a real time-accuracy control before any default change.