Commit Graph
19991 Commits
Author SHA1 Message Date
Magne Sjaastad fb566f112c #14903: Guard other selection item users against deleted result definition 2026-10-12 18:49:08 +02:00
Magne Sjaastad ec9135b658 #14903: Ignore empty restart files in opm-common reader 2026-10-12 18:49:08 +02:00
Magne Sjaastad bdd10d5988 #14903: Avoid out-of-range time step for single time step contour map results 2026-10-12 18:49:08 +02:00
Magne Sjaastad b6e0ae2734 #14903: Guard cell selection highlight against deleted result definition 2026-10-12 18:49:08 +02:00
Magne Sjaastad fb00f84cee #14903: Guard well and fracture display against missing case data 2026-10-12 18:49:08 +02:00
Magne Sjaastad 9ac6ad3bec #14903: Avoid duplicate dock window ids for copied plots
Copies and plots created from templates kept the source DockWindowId. The dock
manager identifies dock widgets by name, so the earlier dock widget was deleted on
dock state restore, leaving a dangling pointer that crashed in setActiveViewer.

- Do not copy DockWindowId; copies get a new id
- Assign a new id if a dock widget with the same name exists
- Use QPointer for the dock widget
2026-10-12 18:49:08 +02:00
Kristian Bendiksen 24e5d2b441 #14870 Schedule export: reject independent trees sharing an MSW name 2026-10-12 18:47:03 +02:00
Kristian Bendiksen f3d9d04281 #14870 Schedule export: export multilateral wells once per well name
Wells sharing an export name now produce one WELSPECS/COMPORD record,
one set of MSW keywords, and no duplicate COMPDAT/COMPLUMP connections.
Events on any well in the group trigger the group's keywords.

Connections in cells shared by several well paths of a group are combined
into one record. MSW keywords are exported for the well tree of the first
group member selected for MSW export.

Fixes #14870
2026-10-12 18:47:03 +02:00
Kristian Bendiksen 164dee3f4b #14873 Schedule export: valve events only emit WSEGVALV/WSEGAICD
VALVE events no longer trigger WELSPECS, COMPORD, WELSEGS and COMPSEGS.
WELSEGS/COMPSEGS are only regenerated for tubing and perforation events.

Fixes #14873
2026-10-12 18:47:03 +02:00
Magne Sjaastad f0dc8c47f0 #14899: Hide main windows on close instead of deleting them
WA_DeleteOnClose left RiuMainWindow::instance() and RiuPlotMainWindow::instance() null after the user closed a window, so any unguarded use crashed. Keep both windows alive for the application lifetime and rebuild their views when a closed window is shown again.

Fixes #14899.
2026-10-12 17:23:10 +02:00
Magne Sjaastad 6ff9a5b46d #14899: Fix crash on grid import after plot window is closed
Use the null-safe RiaGuiApplication::isMainPlotWindowVisible() instead of dereferencing RiuPlotMainWindow::instance().
2026-10-12 17:23:10 +02:00
Magne Sjaastad 92e269ef4d #14901: Guard against crashes from corrupt Eclipse files and incomplete frustum
- RifEclipseOutputFileTools::timeSteps: avoid integer division by zero when
  the restart file has no INTEHEAD
- libecl ecl_grid: return NULL when the main EGRID grid cannot be created,
  and skip NNCHEAD blocks that cannot be read
- libecl well_info: skip wells when the restart header cannot be read
- cvf::Frustum::isOutside: do not assert on an incomplete frustum, cull nothing

Fixes #14901.
2026-10-12 17:16:11 +02:00
Magne Sjaastad 9722bfbaed Update crash-triage doc: call stacks in commits and PR, check surroundings
Commits include a fix description and call stack, the PR lists all call stacks, and fixes also cover the same pattern in close surroundings. Doc shortened.
2026-10-12 17:10:14 +02:00
Kristian Bendiksen b0f2044746 #14823 Group nested hybrid LGRs per refinement level in the Grids tree 2026-10-12 15:12:48 +02:00
Kristian Bendiksen 3d8912ba6c #14794 Cell filter: Use original parent IJK for IJK range filters on nested hybrid grids
For nested hybrid grids, IJK range filters (I/J/K slices and IJK filters)
now refer exclusively to the original (coarse) grid IJK. Nested-grid local
IJK values are no longer offered, and every cell, including cells in all
refinement levels, is mapped to the original IJK of its top-most parent.

- Add RigNestedHybridGridLayout describing how original cells are embedded
  in the flat grid, shared by the LGR reconstruction and the IJK mapping
- RigMainGrid: store the layout and compute the original IJK of any cell on
  demand by following the parent cell chain, without per-cell storage
- Range filter UI: slider limits, clamping, defaults and active cell range
  use the original grid dimensions; grid selection is hidden
- Evaluate range filters on all grids using the original IJK in the 3D view,
  combined filters and data filters
- 3D view context menu slices use the original IJK of the picked cell
- Add unit tests for the layout, the IJK mapping against OLDIJK, and slice
  filtering across refinement levels
2026-10-12 15:12:48 +02:00
Alif Be 60f96f0ebd #14643: Add blank line after RAW_TEXT 2026-10-12 12:54:20 +02:00
Magne Sjaastad 41735344c0 #14897: Fix crash when updating track annotations before the plot widget exists
RimWellRftPlot::updateFormationsOnPlot() runs during project load, before the track widgets are created. Skip the annotation update until the widget exists; onLoadDataAndUpdate() draws them later.

Fixes #14897.
2026-10-12 12:16:10 +02:00
Magne Sjaastad ab96c520bd #14895: Improve stability when importing malformed input files
* #14895: Fix null grid dereference when importing mismatching GRDECL
* #14895: Fix out-of-bounds read in perforation interval import
* #14895: Validate connectivity indices in VTK import
* #14895: Fix heap overflow for odd PORV count in dual porosity cases
* #14895: Update roffcpp to validate array lengths when parsing ROFF files
2026-10-12 09:40:23 +02:00
Magne Sjaastad 780af47317 Document regressed signatures in crash-triage guide 2026-10-11 08:54:41 +02:00
Magne Sjaastad 277322cbcb #14884 Reparent hidden field labels when rebuilding form layout
A hidden label is never added to a layout, so it stayed parented to the
group box it was created in. When the field moved directly to another
group, the old group box was deleted together with the label, and the
next update hit a null label in PdmUiCheckBoxEditor.

Add GroupVisibilityByEnum to cafTestApplication to reproduce the crash.
2026-10-09 13:31:39 +02:00
Magne Sjaastad 4d68f66455 Fix duplicate AppEnum serialization text in ApplicationEnum test object
T6 and T7 were both registered with mismatched serialization text ('T5' and
'T6' respectively), duplicating the text already used by T5 and T6. Use the
correct unique text for each enum value.
2026-10-09 13:31:39 +02:00
Magne Sjaastad 58ac56f2f8 Serialize featuretests after ResInsight to avoid DLL deploy race 2026-10-09 08:21:44 +02:00
magnesj 7e19e73960 Bump to version 2026.09.2-dev.02 2026-10-08 17:38:36 +02:00
Magne Sjaastad 5812826db6 #14880: RFT correlation plot formation workflow
* Add Add Well Picks button to well log formation settings
* Expose formation zone colors and shading alpha from RFT track
* Average observed pressures per formation with full min/max range
* Show formation-colored observed pressure and depth filter in RFT correlation plots
* Default new RFT correlation plots to formation filter and ensemble parameter coloring
* Move Qwt code out of RFT correlation Rim classes
* Align RFT correlation depth filter bars and click zones with displayed track formations
2026-10-08 17:32:23 +02:00
Magne Sjaastad 4126d25ea0 #14882: Fix missing-field-initializer warning in RigWellPathFormations-Test
Explicitly initialize the optional topXY member when constructing
RigWellPathFormation via aggregate initialization in the test helper,
avoiding a GCC -Wmissing-field-initializers warning.

Fixes #14882.
2026-10-08 15:37:58 +02:00
Magne Sjaastad bc62af3bb5 #14878: Fix stale well picks, import errors and overlapping zones 2026-10-08 12:44:14 +02:00
Magne Sjaastad 029759f548 #14878: Guard against deleted formations collection and missing geometry 2026-10-08 12:44:14 +02:00
Magne Sjaastad 6c42ba5ae0 #14878: Add well-pick zone filtering to RFT cross plot and tornado plot
Let the RFT parameter cross plot reference a RimWellFormationsFile and use its
well-pick formations to filter/group data by zone, pushed down to the tornado
plot and RFT correlation sub plots.
2026-10-08 12:44:14 +02:00
Magne Sjaastad 45814555b5 #14878: Add Well Picks (no trajectory) formation source for well log tracks and RFT
New Zonation/Formation Names source WELL_PICKS_NO_TRAJECTORY resolves zone
depths directly from a well-picks file + well name, for tracks without a well
path (e.g. RFT plots without a trajectory). Kept strictly separate from the
existing WELL_PICK_FILTER (well-path-based) source so neither falls back into
the other's resolution path. RFT plots automatically select this source when
no well path exists but a matching well-picks file is found.

Also avoids including RiaWellLogTrackDefines.h from header files; the affected
headers now use opaque enum forward declarations, with the real definitions
included only in the .cpp files that need the enumerator values.
2026-10-08 12:44:14 +02:00
Magne Sjaastad a6a88eeb21 #14878: Migrate well path formations to project-level collection, add manual import command
RimWellPath and RimWellPathCollection now reference a RimWellFormationsFile in the
project-level well formations collection instead of owning per-well-path formations
geometry directly. Reworked the well-pick import command (renamed
RifWellPathFormationsImporter to RicImportWellFormationsFeature) to create/find the
project-level file and link it to the matching (or newly created) well path.
2026-10-08 12:44:14 +02:00
Magne Sjaastad 37cacc9a41 #14878: Add FMU well-picks data model (RigWellPathFormations, RimWellFormationsFile/Collection)
Parse depth-based FMU well-pick formations.csv files in RifWellPathFormationReader
and expose them as a project-level RimWellFormationsCollection of RimWellFormationsFile
objects. RigWellPathFormations becomes a value type with top/base MD and TVD depths
per formation, independent from the existing K-layer-index .lyr formation names.
2026-10-08 12:44:14 +02:00
Magne Sjaastad fe887270e5 #14878: Add RifCsvHtmlTableTools for CSV content preview
Generic helper to render CSV file content as an HTML table, used to preview
well formations.csv content in the UI.
2026-10-08 12:44:14 +02:00
Magne Sjaastad cf36012cd2 Modernize well pick reader and RigWellPathFormations, add tests
Return values instead of out-parameters, and move the error dialog
from the reader to the importer so the reader can be unit tested.
Fix crash in level detection when erasing while iterating.
2026-10-07 13:37:23 +02:00
Magne Sjaastad 91e2e4d575 Make RigWellPathFormations a value type
The object is immutable after construction and small, so reference
counting via cvf::Object adds nothing. Store it by value and use
std::optional where it may be absent.
2026-10-07 13:37:23 +02:00
Magne Sjaastad 07d8153852 #14803 Extract well log along radial grid axis by depth
A well in a radial grid is on the grid axis or on a face between angular cells, so no cells are intersected. Fall back to the innermost cell column placed by depth. Fixes empty PLT and RFT grid curves.
2026-10-07 13:37:02 +02:00
Magne Sjaastad 02cce5db8d #14803 Fix PLT crash for MSW segments without grid cell 2026-10-07 13:37:02 +02:00
Magne Sjaastad 0fc5da8296 ci: use generic rips filename for dev-build python asset
Rename the python wheel/sdist to rips.whl/rips.tar.gz (dropping the version number) when publishing to the rolling dev-latest release, so the download link stays stable across builds.
2026-10-07 13:03:49 +02:00
Magne Sjaastad 9d9f4963d9 ci: publish python dist artifact in rolling dev release
Include the dist-python artifact (wheel/sdist built for PyPI) when packaging assets for the rolling dev-latest release, and rename the python-distribution artifact to dist-python for consistency with the dist-<name> naming convention used by other build artifacts.
2026-10-07 12:48:40 +02:00
Alif Be 1abff4c0dc Adjust ordering of Flow keywords 2026-10-07 10:48:42 +02:00
Magne Sjaastad 7fa10b3e59 #14853: Fix region-to-region curve values missing for most ensemble realizations
Region-to-region addresses were reconstructed as "R1 - R2" (with spaces) when
looking up keywords for ensemble realizations without a pre-built address map,
but opm-common's on-disk keyword format has no spaces ("R1-R2"). This caused
silent data loss for region-to-region vectors (RGFT*, ROFT*, RWFT*, etc.) in
all but one ensemble realization.

Fix formatUiTextRegionToRegion() to use "R1-R2", and add a regression test.

Fixes #14853.
2026-10-06 13:38:27 +02:00
Magne Sjaastad a7c91cf89b Docs: Require short, concise comments, commit messages and PR descriptions
Add explicit guidance to keep code comments, git commit messages, and PR descriptions short and to the point, instead of long exhaustive explanations.
2026-10-06 12:15:32 +02:00
Magne Sjaastad b35b481ff1 Extract RFT cross plot static helpers into RimRftCrossPlotTools, add unit tests
- Move depthTypeAbbreviation(), computePressureSamplesPerCase() and
  computeMeanPressurePerCase() out of RimParameterRftCrossPlot into a new
  standalone RimRftCrossPlotTools namespace, shared by RimParameterRftCrossPlot
  and RimRftTornadoPlot (removing duplicated code in the latter).
- Extract pure, reader-independent helpers filterPressuresByDepthRange() and
  computeMean() so the depth filtering and averaging logic can be unit tested
  without RFT reader/ensemble mocks.
- Add RimRftCrossPlotTools-Test.cpp with gtest cases covering depth range
  filtering (disabled, inclusive bounds, out-of-range, mismatched sizes) and
  mean computation (empty/normal), plus depth type abbreviation.

Move RimWellLogRftCurve::rftCurveDepthValues into RimRftCrossPlotTools

This static helper's only caller was already RimRftCrossPlotTools::computePressureSamplesPerCase, so move it alongside the other RFT cross plot/tornado plot helpers for consistency.
2026-10-06 11:18:06 +02:00
Magne Sjaastad 9791aaf52a Add All Samples / Mean per Realization sampling mode to RFT parameter cross plot
Adds a 'Sampling' dropdown to RimParameterRftCrossPlot: 'Mean per Realization' (previous, default behavior) plots one point per case using the mean RFT pressure within the depth range, while 'All Samples' plots one point per individual RFT pressure sample within the depth range, grouped per case/color. Extracted the shared per-case depth filtering logic into computePressureSamplesPerCase(), with computeMeanPressurePerCase() now built on top of it. Axis labels and exported ASCII data adapt to the selected mode.
2026-10-06 11:18:06 +02:00
Magne Sjaastad 07b82a52a9 Support MD and TVD depth filtering in RFT cross plot and tornado plot
Propagates the Depth Unit selection from RimRftCorrelationReportPlot to the parameter cross plot and tornado plot depth-range filters, not just the RFT pressure profile sub-plot.

- RimWellLogRftCurve::rftCurveDepthValues now takes a RiaDefines::DepthType parameter and fetches the TVD channel directly when TVD is requested (falling back to MD if unavailable), instead of always preferring MD.
- RimParameterRftCrossPlot and RimRftTornadoPlot gain a depth type field (driven by the parent report plot, hidden in their own UI) and computeMeanPressurePerCase() takes the depth type so the depth-range filter operates on the selected unit.
- Axis labels, group titles, and auto-generated plot titles now show MD/TVD instead of being hardcoded to MD.

Stop silently substituting TVD for MD (or vice versa) in RFT correlation depth filter

rftCurveDepthValues() previously fell back to the other depth type when the requested one (MD or TVD) had no data, causing MD and TVD selections to silently produce identical results. Now it strictly returns only the requested depth type, returning an empty vector if unavailable. This naturally excludes such cases from the correlation cross plot and tornado plot, showing a blank plot instead of misleading data.
2026-10-06 11:18:06 +02:00
Magne Sjaastad 99848442a6 Add depth unit (MD/TVD) dropdown to RFT correlation report plot
Adds a top-level Depth Unit dropdown to RimRftCorrelationReportPlot, restricted to measured depth and true vertical depth. The selection is pushed down to the owned RimWellRftPlot sub-plot on construction, project load, and whenever the dropdown changes.
2026-10-06 11:18:06 +02:00
Magne Sjaastad 1da4a9e188 Dock window: add permanent detach, stop auto-docking embedded RFT plots
RimWellRftPlot: add detachFromDockPermanently(), which removes the plot from its dock
and discards the window controller for good (unlike removeWindowFromDock(), which must
leave the controller intact so the window can be re-docked later). RimWellRftPlot no
longer docks itself in its constructor, since it can also be embedded as a non-dockable
child of another plot. RicCreateRftPlotsFeature now explicitly calls dockAsPlotWindow()
for its stand-alone RFT plot to preserve existing behavior.

RimRftCorrelationReportPlot: use detachFromDockPermanently() instead of
removeWindowFromDock() for its embedded RimWellRftPlot, and re-apply that detachment in
initAfterRead(), since the PDM factory bypasses the constructor when restoring child
plots from a project file.
2026-10-06 08:15:59 +02:00
Kristian Bendiksen f8b20a3f44 Add missing function headers in cpp files 2026-10-05 19:56:36 +02:00
Kristian Bendiksen d53419bd5c Remove obsolete SOURCE_GROUP_HEADER_FILES everywhere. 2026-10-05 19:56:36 +02:00
Magne Sjaastad 9bfd91df90 Workflows: Add RimWorkflowVec3Binding for Vec3-typed config fields
Recognizes Vec3-shaped object schemas ({x, y, z} number properties)
structurally in RimWorkflowDescribeTools and dispatches them to a new
RimWorkflowVec3Binding in RimWorkflowTaskInput::createBinding(). Stores
the value as a cvf::Vec3d field, parses JSON object defaults, and emits
a YAML flow-mapping ({x: .., y: .., z: ..}) matching the taskmaestro
Vec3 pydantic model shape.
2026-10-05 19:56:36 +02:00
Kristian Bendiksen 65942d455d Workflows: Read workflow schemas with the taskmaestro CLI
Replace the rips.taskmaestro_helper introspect subcommand with
`python -m taskmaestro workflow describe --json`. RimWorkflowDescribeTools
converts the describe output (JSON schemas, depends_on, config_values)
into the workflow graph used by the Workflow UI. This also adds support
for collect dependencies and maps rips.Reservoir to EclipseCase pickers.
2026-10-05 19:56:36 +02:00