Commit Graph
3859 Commits
Author SHA1 Message Date
Magne Sjaastad 3023e6e335 #14450 Guard against missing data source in RFT plot
RimWellRftPlot::dataSource() returned a default constructed variant when no source was selected. The variant then held a null RimSummaryCase pointer, and RicCreateRftPlotsFeature dereferenced it. Add std::monostate as first alternative to represent no data source.
2026-08-05 09:20:35 +02:00
Magne Sjaastad fe0e691e6c #14448 Fix dangling formation names pointer in case data
RigCaseCellResultsData and RigFemPartResultsCollection held a raw pointer to RigFormationNames owned by a unique_ptr in RimFormationNames. Reloading or deleting the formation names left the case data with a dangling pointer. Store a copy instead, as RigFormationNames is a small value type with no identity.
2026-08-04 13:05:26 +02:00
Magne Sjaastad 5efcf88949 #14446 Initialize loggers before reading cloud config files
Cloud services are configured from RiaApplication::initialize(), which runs before the subclasses append their logger instances. All messages from the cloud config file search were therefore dropped. Add a virtual initializeLoggers() called before the cloud configuration is read, and move creation of the file logger and the std out logger into the overrides. The message panel logger depends on the main windows, and is still created in RiaGuiApplication::initialize().

Do not write fields with IO disabled to the application store, mirroring the check already present when reading. This stops the cloud service configuration from being persisted into the user preferences file.
2026-08-04 13:05:03 +02:00
Magne Sjaastad 1aa95936fc #14362 Allow arbitrary Z-scale factor
Make the Z-scale combo boxes in the toolbar and property editor editable, so any positive scale value can be entered as text. Invalid input is rejected and the previous value is restored.

Add keyboard shortcuts Ctrl+Shift+Up and Ctrl+Shift+Down to step the Z-scale of the active view through the predefined scale values.
2026-08-04 12:50:34 +02:00
Magne Sjaastad 9ccca3e20a #14401 Introduce initAfterInsert() to combine resolveReferencesRecursively() and initAfterReadRecursively() 2026-08-03 15:34:10 +02:00
Magne Sjaastad 32cfac7722 #14391 Expose RMS seed value from RMS_SEED_USED file as a realization parameter 2026-08-03 10:55:07 +02:00
Magne Sjaastad 69faf4ac13 #14437 Guard against lateral without active well targets
A lateral gets its well path geometry from the parent well, and is
visualized even when it has no active well targets. Building the well
target spheres then calls setVectors() with empty arrays, which asserts.
2026-07-31 17:14:41 +02:00
Magne Sjaastad 403450dfdf #14434 Guard against non-valve objects referring to a valve template
RimWellEventValve also holds a pointer to RimValveTemplate, so the dynamic_cast to RimWellPathValve can return nullptr.
2026-07-31 16:45:33 +02:00
Magne Sjaastad 134befead4 #14434 Guard against missing perforation interval in templateUpdated 2026-07-31 16:38:33 +02:00
Magne Sjaastad af2c5d429c #14431 Guard against zero active cells in validKeywordsForPorosityModel
validKeywordsForPorosityModel divided valueCount by the number of active matrix cells without checking it, causing SIGFPE during grid import when the matrix porosity model has no active cells.

Return early when the requested porosity model has no active cells, and guard the remaining matrix divisors.
2026-07-31 15:17:46 +02:00
Magne Sjaastad 800ab27370 #14429 Ignore mismatched cell visibility in grid cross plot 2026-07-31 14:31:58 +02:00
Magne Sjaastad 42aa580192 #14426 Export multiple surface properties to IRAP/GRI
Add a multi-select list of values to export in the export dialog, containing the surface depth and the properties available on the selected surfaces. IRAP/GRI files hold a single value per node, so each selected value is written to a separate file named <surface>--<value>. Exporting depth only keeps the plain surface name.

Property values are exported without resampling and require a regular surface with matching Nx and Ny. Values that cannot be exported are reported as warnings.

The export grid defaults are no longer rounded when they originate from a regular surface, and the grid rotation is added to the dialog. Both are required to export the surface without resampling.
2026-07-31 13:54:54 +02:00
Magne Sjaastad 172e8f746a #14426 Select first available surface property in all views
A regular surface created from Python is added to the views before any property is set, so the surface in view never assigned a default property. Assign the first available property in loadDataAndUpdate() when no property is selected yet.
2026-07-31 13:54:54 +02:00
Magne Sjaastad d48ecbdcdf #14426 Remember last used export folder when exporting surface to IRAP/GRI
The export folder was only applied to the dialog when a single regular surface was selected. Always seed the folder from the last used EXPORT_SURFACE directory by splitting setDefaults() into setExportFolder() and setGridDefaults().

A single non-regular surface now also falls into the bounding box estimation branch instead of keeping the 10x10 field defaults.
2026-07-31 13:54:54 +02:00
Magne Sjaastad 4f5e320a65 #14403 Show histogram statistics lines when only the cumulative curve is visible
The P10/P90/Mean annotations were tied to the visibility of the histogram curve, making it impossible to show only the cumulative curve together with the statistics lines. The annotations are now drawn by the non-cumulative curve as long as either it or its cumulative counterpart curve is visible, and the statistics settings are presented only by the non-cumulative curve.
2026-07-31 08:23:18 +02:00
Magne Sjaastad 272f7fa56b #14409 Fix crash when creating h5 file from summary file without TIME vector (#14410)
Opm::EclIO::ESmry::dates() throws when the summary file has no TIME vector. The call was made
from inside an OpenMP critical section, and GCC terminates the application when an exception
leaves an OpenMP structured block. The result of the call was never used.

Remove the unused call, and move the exception handling inside the critical section.
2026-07-30 12:57:36 +02:00
Magne Sjaastad 4c39ce3e6c #14404 Guard against whitespace in AppEnum serialization text and fix affected enums 2026-07-30 08:41:27 +02:00
Magne Sjaastad c91e5fa9a7 #14344 Update ensemble grid model views on polygon import
Include reservoir grid ensemble views in RimProject::allViews() so that
polygon and surface imports update the view tree items and schedule a
redraw for these views.

Make RimReservoirGridEnsemble::allViews() robust against re-entrant
calls during project close by iterating child array fields with
childrenByType(), which skips entries nulled during deleteChildren().
2026-07-29 15:23:23 +02:00
Magne Sjaastad f9c881e442 #14343 Add context menu for toggling selected cases in ensemble import dialog 2026-07-29 15:17:05 +02:00
Magne Sjaastad b1e741d5c3 #14398 Guard against out of range time step in well allocation plot 2026-07-29 11:27:34 +02:00
Magne Sjaastad 278621e97a #14395 Guard against date resampling period NONE in summary table 2026-07-29 10:34:06 +02:00
Magne Sjaastad 3cc4b00903 #14392 Guard against data lines before well name header in pressure depth reader 2026-07-28 15:21:55 +02:00
Magne Sjaastad 2515a4daea #14385 Catch exceptions when saving deck file during sector model export 2026-07-28 14:53:03 +02:00
Magne Sjaastad f50cd02bb3 #14383 Guard against missing keyword exception when reading simulation well data 2026-07-28 14:46:37 +02:00
Magne Sjaastad 14a4b5ef53 #14381 Fail gracefully when reading truncated or corrupt SMSPEC file 2026-07-28 14:44:25 +02:00
Magne Sjaastad a9f420bfde #14384 Guard residual oil and gas data against missing static results 2026-07-28 14:33:49 +02:00
Magne Sjaastad febea598dc #14379 Guard against missing intersection view in Show 2D Intersection View 2026-07-28 13:02:18 +02:00
Magne Sjaastad 4a06edea28 #14372 Resolve references when creating contour map from 3D view 2026-07-28 11:35:58 +02:00
Magne Sjaastad e35f9aa85e #14370 Guard against NULL base when selecting summary file lists 2026-07-28 11:26:18 +02:00
Magne Sjaastad f409fd8a4d #14376 Guard ODB API calls in RifOdbReader destructor 2026-07-28 09:46:24 +02:00
Magne Sjaastad 7c10106545 #14374 Fail gracefully when importing a malformed GRID file 2026-07-28 09:45:12 +02:00
c3e7c05fd6 Initial ri-cloud-api lifecycle management test (#14364)
Co-authored-by: Magne Sjaastad <magne.sjaastad@ceetronsolutions.com>
Co-authored-by: magnesj <1793152+magnesj@users.noreply.github.com>
2026-07-28 09:36:14 +02:00
Kristian Bendiksen 87518f2f2f #14365 Nested hybrid grid: import as a reconstructed LGR hierarchy 2026-07-27 15:24:25 +02:00
Kristian Bendiksen 280763f4c0 #14203 Add cumulative curve option to Grid Statistics plot
A new "Show Cumulative Curve" checkbox on the grid statistics data source adds a cumulative curve on the right axis, in addition to the regular histogram curve. The cumulative curve shares the data source of its non-cumulative counterpart and follows all changes to it. The cumulative sum works with all frequency types and both graph types.

Remove the legacy Grid Statistics dialog (RicGridStatisticsDialog) and its context menu command, which provided the previous cumulative display.
2026-07-27 12:37:59 +02:00
Kristian Bendiksen 5dc3374733 #14226 intersection along ijk axis
* #14226 Add intersection along i/j/k axis

Add a new persistent intersection type that follows the grid pillars at a
fixed i, j or k index. Unlike the axis-aligned intersection box, the surface
is built from the grid cell faces and therefore steps along faults and curved
pillars, which is useful for structural restoration analysis.

The user selects the axis, the fixed index, the two perpendicular index
ranges and which cell face (front/back pillar) to use. The geometry generator
emits the chosen cell face of every cell in the index plane directly from the
native pillar corners, so cell result colors map exactly.

The feature is available from the Intersections context menu for Eclipse
views and supports 3D-view picking and cell result readout.
2026-07-27 11:21:05 +02:00
Magne Sjaastad 2ebefe73b6 #14360 Histogram Plots: Implement Show Plot Data 2026-07-27 10:56:41 +02:00
Kristian Bendiksen 6357cef1ab #14334 Fix formation dip sign when aligning fracture with formation dip
The sign of the projected formation direction vector flips with the fracture
direction normal, which follows the well drilling direction, while the fracture
azimuth defining the dip rotation in RimFracture::transformMatrix() is only
defined mod 180 degrees. Canonicalize the formation direction against the
fracture azimuth direction before computing the dip, so a positive dip means
the formation descends toward the azimuth direction.

Restore std::abs() in calculateFormationDipFromHorizontal() so the StimPlan
model formation dip (BedDipDeg in the Asymmetric FRK export) keeps the
non-negative convention from #8877.
2026-07-13 14:34:17 +02:00
jonjenssen 6b7f87e260 Make sure to add, not merge, WELSEGS and COMPSEGS keywords 2026-07-10 16:30:18 +02:00
jonjenssen 4c3791698e Reduce line length for ACTNUM grdecl export 2026-07-10 14:23:50 +02:00
jonjenssen f96c9354c1 Possible fix for #14334 2026-07-08 15:40:08 +02:00
Magne Sjaastad 931c8d066c #14235 Correlation report: synchronise all sub-plots and control data source from the report
Selecting a summary vector in a correlation report now propagates to the contained tornado, cross and summary plots by selecting the first matrix cell, which sends the existing selection signal handled by the report. A virtual onDataSourceChanged() hook on the abstract correlation plot is called after the summary vector selection dialog, and the matrix and tornado plots override it to re-select their first item so dependent plots update.

When a plot is used as a sub-plot of a correlation report, the data source and correlation settings are controlled from the report, so its property editor exposes only the plot settings. Used individually the plots show the complete set of options. Whether a plot is a report sub-plot is tracked with a flag set by the owning report on construction and after read.

Use updateAllRequiredEditors() for sub-plot interactions and for time step changes driven from the summary plot, so the project tree text and property panel reflect the updated auto-generated titles. Re-apply the configured dock title bar visibility after toggling a sub-plot dock, so the title bar stays hidden when a hidden sub-plot is shown again.
2026-06-26 17:09:26 +02:00
Magne Sjaastad 189bf3e35c #14324 Avoid crash in Mobile Pore Volume when SWCR/MULTPV size differs from PORV 2026-06-26 17:09:04 +02:00
jonjenssen 023beffd15 Avoid crash due to a deleted window being active during delete operation. 2026-06-26 13:09:05 +02:00
Magne Sjaastad 75fa8efa21 Allow sub-tasks to display progress 2026-06-25 11:34:59 +02:00
Magne Sjaastad c0059da42c #14306 Fix orphaned progress dialog when importing summary ensembles
Driving caf::ProgressInfo from worker threads inside the OpenMP loop in
loadFileSummaryCaseData() marshaled setProgress() to the GUI thread via a
queued connection. These updates could be delivered after the ProgressInfo
scope had ended and the progress stacks were popped, accessing an empty stack
and resurrecting the just-closed dialog stuck at 0% with no way to close it.

Only update the progress dialog from the master thread, using an atomic
counter for a monotonic progress value, and guard the ProgressInfo mutators
against stale updates delivered after the stacks are empty.
2026-06-25 09:56:22 +02:00
Magne Sjaastad 2ac1948abe #14245 Remove gsl functions and ThirdParty/gsl folder 2026-06-24 18:47:04 +02:00
JJ 82aa009378 Dock system selection improvements and fixes (#14305)
* Make sure we don't trigger another select when a view in the project tree is selected.
* Fix for #14255 and related issues
* Make sure we can close and open a main window, keeping the layout when reopened.
2026-06-24 16:07:21 +02:00
Kristian Bendiksen ac97f76e97 #14312 Exclude user input events while pumping the event loop during crash reporting
reportCrash pumps a nested Qt event loop from within the signal handler to
let the async crash-report HTTP POST finish. Pumping all events also
dispatches buffered mouse/keyboard events, which re-enter arbitrary UI code
mid-crash and can re-trigger the faulting path, causing a double-fault
inside the handler. Pump with QEventLoop::ExcludeUserInputEvents so socket
and timer events still flow (the reply completes) while user input is held
back.

Fixes #14312
2026-06-24 16:06:12 +02:00
Kristian Bendiksen 1c39fed294 #14311 Fix crash selecting a polygon-in-view with no polygon assigned
The polygon field was added to the UI ordering by value rather than by
address, so an empty (null) polygon reference resolved to the
PdmObjectHandle overload of PdmUiOrdering::add and aborted on the null
assertion while building the property panel. Pass the field by address so
the field-handle overload is used, matching the other add calls.

Fixes #14311
2026-06-24 16:06:12 +02:00
Magne Sjaastad e3f7e3f1c7 #14309 Open summary case without UNSMRY data file as empty reader
A SMSPEC file without a UNSMRY data file is re-read on every request for a summary vector, since RifReaderEclipseSummary::open returns false and no reader is cached. For an ensemble with multiple realizations missing UNSMRY, this is a severe performance problem.

Guard RifReaderEclipseSummary::open so that when no ESMRY, h5 or resdata data file is present, it returns true and creates a valid but empty reader. Skip ESMRY conversion when no UNSMRY is present, and add RifEclipseSummaryTools::hasSummaryDataFiles to detect the missing data file.
2026-06-24 15:35:07 +02:00