Commit Graph
18146 Commits
Author SHA1 Message Date
Kristian Bendiksen 0cce2bb42d Fix critical RiuContextMenuLauncher memory leak by setting parent widget
Address sanitizer detected a memory leak in CmdFeatureMenuBuilder::MenuItem
objects caused by RiuContextMenuLauncher objects that were never deleted.

Problem: The RiuContextMenuLauncher class has two constructors:
1. RiuContextMenuLauncher(widget, CmdFeatureMenuBuilder&) - sets parent ✓
2. RiuContextMenuLauncher(widget, QStringList&) - missing parent ✗

The second constructor was missing the parent initialization, causing all
RiuContextMenuLauncher objects created with QStringList (used in 10+ locations)
to never be deleted, leading to memory leaks of their internal MenuItem vectors.

Root cause: Missing parent-child relationship meant Qt couldn't automatically
clean up these objects when their associated widgets were destroyed.

Fix: Added `: QObject( widget )` to the second constructor to match the first
constructor's behavior. This ensures Qt's automatic parent-child cleanup
handles the RiuContextMenuLauncher lifecycle properly.

This fixes the systemic issue affecting multiple plot types including:
- Correlation plots, Analysis plots, VFP plots, Well allocation plots
- All locations using `new RiuContextMenuLauncher(widget, {commands})`
2025-09-04 09:04:30 +02:00
Kristian Bendiksen aec17d54a7 Fix CmdFeatureMenuBuilder::MenuItem memory leak in RiuContextMenuLauncher
Address sanitizer detected a memory leak in CmdFeatureMenuBuilder::MenuItem
objects allocated during context menu creation.

Problem: The RiuContextMenuLauncher constructor was creating a temporary
CmdFeatureMenuBuilder object, populating it with menu items, then copying
the entire object to the member variable m_menuBuilder. This caused
unnecessary memory allocation and copying of std::vector<MenuItem> data.

Root cause: Inefficient constructor implementation:
  caf::CmdFeatureMenuBuilder menuBuilder;  // temp object
  for (cmd : commandIds) menuBuilder << cmd;  // populate temp
  m_menuBuilder = menuBuilder;  // copy entire vector (leak source)

Fix: Build the menu directly into the member variable instead of creating
a temporary object and copying it:
  for (cmd : commandIds) m_menuBuilder << cmd;  // direct construction

This eliminates the unnecessary temporary object creation and copy operation
that was causing the MenuItem vector allocation detected by the sanitizer.
The fix maintains identical functionality while being more efficient.
2025-09-04 09:04:30 +02:00
Kristian Bendiksen 89e940b1ea Fix QProxyStyle memory leak in PdmUiTreeViewStyle creation
Address sanitizer detected a memory leak in QProxyStyle objects
created during GUI theme updates.

Problem: The updateGuiTheme() function was called multiple times (e.g., during
initialization) and repeatedly created new PdmUiTreeViewStyle objects for
every PdmUiTreeViewWidget without checking if the widget already had the
correct style set.

Root cause: Each call to updateGuiTheme() would:
1. Iterate through ALL widgets in the application
2. Create a new PdmUiTreeViewStyle for every tree view widget
3. Call setStyle() which should take ownership, but repeated calls
   were causing memory leaks

Fix: Added a check to only create and set a new PdmUiTreeViewStyle if the
widget doesn't already have one. This prevents repeatedly creating new
styles for the same widgets during multiple theme update calls.

The fix uses dynamic_cast to check if the current style is already a
PdmUiTreeViewStyle before creating a new one.
2025-09-04 09:04:30 +02:00
Kristian Bendiksen 25dd9db293 Fix critical QWidgetItem memory leak in ensureWidgetContainsEmptyGridLayout
Address sanitizer detected a 1056-byte memory leak in QWidgetItem objects.
This was the actual root cause of the leak reported in the stack trace.

Problem: In ensureWidgetContainsEmptyGridLayout(), when clearing existing
layouts, the code was calling layout->takeAt(0) to remove QLayoutItem
objects but never deleting them. This caused QWidgetItem objects to
accumulate in memory without ever being freed.

The takeAt() method removes items from the layout but does NOT delete them.
The caller is responsible for deleting the returned QLayoutItem objects.

Fix: Added `delete item;` in the cleanup loop to properly free QWidgetItem
objects when clearing layouts before rebuilding the UI.
2025-09-04 09:04:30 +02:00
Kristian Bendiksen 2f4f97c80b Fix QWidgetItem memory leak in PdmUiFieldEditorHandle destructor
Address sanitizer detected a 1056-byte memory leak in QWidgetItem objects
created when adding widgets to layouts via QGridLayout::addWidget().

Root cause: PdmUiFieldEditorHandle destructor was using deleteLater() to
destroy widgets, but deleteLater() requires an active event loop to process
the delayed deletions. During application shutdown or certain cleanup
scenarios, the event loop may not process these deletions, causing
QWidgetItem objects to remain allocated.

Changes:
- Replace deleteLater() with immediate delete in destructor
- Update comment to explain why immediate deletion is necessary
- This ensures widgets and their associated QWidgetItem objects are
  properly cleaned up when field editors are destroyed

The original comment acknowledged that deleteLater() "will not work unless
you are actually inside an event loop" - this change addresses that issue
by using direct deletion instead.
2025-09-04 09:04:30 +02:00
Kristian Bendiksen a468e030af Fix memory leak in PdmUiFormLayoutObjectEditor detected by address sanitizer
Address sanitizer detected a 32-byte memory leak in QVBoxLayout objects
created by PdmUiFormLayoutObjectEditor::recursivelyConfigureAndUpdateUiOrderingInGridLayout().

Root cause: QVBoxLayout objects were being both:
1. Added to parent layouts via addLayout() (proper Qt ownership)
2. Stored in m_layouts member vector (redundant storage)

The redundant storage prevented Qt's automatic cleanup, causing memory leaks.
2025-09-04 09:04:30 +02:00
Magne Sjaastad f2fb2fdcc5 Guards against null pointer use 2025-09-04 08:26:29 +02:00
Magne Sjaastad bde4eeb892 Removes scripting capability of trajectory points
For large point arrays, the scripting causes overflow in the grpc communication. Disable scripting to make sure the grpc object size is below size threshold.
2025-09-03 16:11:13 +02:00
Kristian Bendiksen 4a8af2ff9d Add [[nodiscard]] to new api. 2025-09-03 14:21:19 +02:00
Kristian Bendiksen 086b542db2 Github Actions: workaround missing libcrypto in latest buildcache. 2025-09-03 14:21:19 +02:00
Kristian Bendiksen 10182e99a7 Refactor: Change RigGridBase::cellCornerVertices to return std::array
Refactored RigGridBase::cellCornerVertices to return std::array<cvf::Vec3d, 8> by value instead of taking a reference to std::array as an output parameter. This change improves code readability and leverages modern C++ return value optimizations.

Updated all call sites across the codebase to reflect the new function signature.
2025-09-03 14:21:19 +02:00
Kristian Bendiksen da69eef72b #1584 Replace cvf::vec3d[8] with std::array<cvf::vec3d, 8> 2025-09-03 14:21:19 +02:00
Magne Sjaastad 7b34d7f103 Compute measured depth if not present on file (#12872)
* Refactors RigWellPathGeometryTools to namespace
* Refactors measured depth calculation to utility.
* Calculates MD if missing from well path data
2025-09-03 12:59:15 +02:00
Kristian Bendiksen e10b852771 cvfVector: Fix definition in different translation unit warning 2025-09-03 12:52:24 +02:00
Magne Sjaastad 0228d14899 #12869 Allow multiple import of all well file types
Previously, we had support for import of well log file including (some) well path geometry. Then, when the full well path was imported later, the well log data was moved to the full well path. This functionality is now removed as it is not working well when we allow import of multiple well path files.
2025-09-03 11:04:21 +02:00
Magne Sjaastad b8566b7761 #12873 Make sure addresses are created on single summary case reload 2025-09-02 15:48:12 +02:00
Magne Sjaastad 880da0bb9d Updates .gitignore and removes obsolete file 2025-09-02 10:14:03 +02:00
Magne Sjaastad 72d6b303b1 Prepare dev after release 2025-09-01 15:57:40 +02:00
Magne Sjaastad 7384e97854 Release 2025.09.0 2025-09-01 11:15:26 +02:00
Magne Sjaastad 76257dac0c Always initialize addresses for HDF5 summary reader 2025-09-01 11:15:26 +02:00
magnesj 56269db7cc Fixes by clang-tidy 2025-08-30 09:20:35 +02:00
Magne Sjaastad 32cdddf7cb Release RC_2
* Enables custom color selection for statistics curves
* Bump to RC_2
2025-08-29 19:13:03 +02:00
Magne Sjaastad 7653bd80f3 Exclude inactive cells from contour map calculations
* Adds safety check for value index
* Filters inactive cells from contour map calculation
2025-08-29 16:33:34 +02:00
Kristian Bendiksen d8566b679f Rename RimFixedTrajectoryWellPath to RimPointBasedWellPath
- Renamed class from RimFixedTrajectoryWellPath to RimPointBasedWellPath
- Updated header and implementation files
- Changed PDM object display name to "Point-Based Well Path"
- Updated script keyword from "FixedTrajectoryWellPath" to "PointBasedWellPath"
- Modified CMakeLists_files.cmake to reference new filenames
- Updated all includes and instantiation references
- Applied clang-format-19 to modified C++ files
- Updated Python docstring to reflect new return type

The new name better describes the class purpose of creating well paths
from XYZ coordinate points. All tests continue to pass.
2025-08-29 16:28:30 +02:00
Kristian Bendiksen d2bed679e1 Rename wellpath_collection.import_fixed_trajectory_well_path() to import_well_path_from_points()
- Updated C++ GRPC interface method names and class names
- Renamed Python method in well_path_collection.py
- Updated all test functions and file names
- Renamed example file to match new method name
- All tests pass with the new method name

The method signature and functionality remain unchanged - only the name
has been updated to be more descriptive.
2025-08-29 16:28:30 +02:00
Kristian Bendiksen 9488a8a3a0 Refactor: simplify RimWellPathCollection::addWellPaths. 2025-08-29 15:31:47 +02:00
Kristian Bendiksen a2473af644 #12848 Python: fix unexpected returned well path when importing.
Fixes #12848.
2025-08-29 15:31:47 +02:00
JJ 393917e6f3 Histogram drag/drop and paste improvements (#12851)
* Add drag'n'drop support for ensemble summary vectors and ensembles into histogram plots

* Make sure histogram plot is shown and all update signals are connected when loading a project.

* Support ensemble parameter drag'n'drop from data sources into histogram plots. 

* Show ensemble parameters in data sources tree.

* Add copy/paste of histogram curves

* Re-use all existing parameters in a plot when dragging a new ensemble into it
2025-08-29 15:12:32 +02:00
Magne Sjaastad 35d1279b1d Prepare 2025.09.0-RC_1
* Migrates obsolete color field to main color
* Sets filter mode for older project files
* Adds surfio license information
* Removes log to file preference
* Refines short name generation.
2025-08-28 20:14:53 +02:00
Magne Sjaastad 4135a743fe Release preparations
* Adds a bounds check on the node index to prevent accessing invalid memory locations.
This prevents potential crashes caused by out-of-bounds access when retrieving summary variable values.
* Updates warning message for incomplete deltas
* Plot based on a single realization from a file set ensemble is not restored correctly on project load
* Populate result addresses if no addresses are present
* Adds CNV_ (convergence) result name
* Avoid include of RiaResultNames.h in header file
2025-08-27 14:22:11 +02:00
Magne Sjaastad 4d9a723e32 #12790 Replaces transparency with opacity settings
Simplifies color handling by replacing transparency settings with opacity for curve and fill colors.

This change provides a more intuitive user experience and ensures consistent behavior across the application.

- Renames "ColorTransparency" to "ColorOpacity" for RimCurveSetAppearance.
- Introduces "CurveColorOpacity" for RimPlotCurveAppearance.
- Updates blending calculations to correctly use opacity.
- Adjusts UI slider attributes for opacity settings, including minimum, maximum and decimals.
2025-08-27 13:50:36 +02:00
jonjenssen 59f399ed54 Build fix for qt6.9 on Windows 2025-08-27 12:46:18 +02:00
Jon Jenssen ede8655660 CMake fixes for open vds enable flag, make sure definition is set in all sub-projects where needed 2025-08-26 17:01:07 +02:00
Magne Sjaastad b8fc3df6f5 Adjustments for release
* Make sure RFT curve settings are restored correctly, use three numbers to identify project version string to compare with.
* Increases dialog window sizes for summary template operations
* Move improved summary import setting to Summary tab
* #12838 Use discrete linear as default legend for CNV_* result names
* Bump version to 2025.04.4-dev.10
2025-08-25 20:11:04 +02:00
Kristian Bendiksen 83ae9fb7ac #12569 Python: Add API for creating well paths from XYZ coordinates
Add import_fixed_trajectory_well_path() method to WellPathCollection that enables
creation of well paths from coordinate lists in Python. Implements feature request
for programmatic well path creation without file-based imports.

- Add RimFixedTrajectoryWellPath class for coordinate-based well paths
- Add GRPC interface for coordinate data transfer via key-value store
- Add comprehensive Python API with input validation and error handling
- Add example script importing well on Norne.
- Add 7 unit tests covering all functionality and edge cases

The API allows creating well paths like:
well_path = collection.import_fixed_trajectory_well_path(
    name="MyWell",
    coordinates=[[x1,y1,z1], [x2,y2,z2], ...]
)
2025-08-25 13:27:31 +02:00
Santiago Ospina De Los Ríos 66756ff21e Use template function prefix 2025-08-25 12:45:22 +02:00
Magne Sjaastad 546edadf35 Refactors font size handling using RimFontSizeField
Replaces direct PdmField usage for font sizes with the new
RimFontSizeField. This provides a consistent way to manage font
size options across different plot types.

The RimFontSizeField encapsulates the logic for generating font size
options based on the default plot font size from preferences. This
removes redundant code in various plot classes and ensures that font
size settings are synchronized with user preferences.
2025-08-25 12:43:36 +02:00
Magne Sjaastad dc2816a91c Adds new virtual method configureCapabilities to PdmFieldHandle
This makes it possible to configure the capabilities of a field one place and avoids duplication.

Extends scripting capabilities by introducing a `dataType` method to `PdmAbstractFieldScriptingCapability`.

This allows the Python generator to retrieve the data type of a field directly from its scriptability, providing a more flexible and extensible way to determine the data type for scripting purposes.
2025-08-25 12:43:36 +02:00
Magne Sjaastad 25b69f3c14 Updates build instructions for Linux and Windows
Clarifies the build process for both Linux and Windows environments, including specific instructions for Visual Studio 2022.

This includes updated prerequisites, build commands, and testing procedures, ensuring a smoother build experience for developers on both platforms.
2025-08-25 09:12:42 +02:00
Magne Sjaastad a6cd74b420 Adds CLAUDE.md for Claude Code guidance 2025-08-25 09:12:42 +02:00
Kristian Bendiksen 8f825c3cef #12534 Refactor: Simplify RiaDefines::MultiPlotPageUpdateType usage 2025-08-22 16:10:04 +02:00
Magne Sjaastad 938e8dd38d Update formatting in README for minimum requirements
Formatted the minimum requirements section for clarity.
2025-08-22 06:54:28 +02:00
Magne Sjaastad 8dff7b46c9 Improves robustness for curve merging operations
- Ensures a more robust size multiplier calculation by validating the weighted mean and preventing division by zero.
- Addresses a potential division by zero during curve interpolation when the X values are very close, ensuring a more robust and accurate result.
2025-08-22 06:47:07 +02:00
Magne Sjaastad e455011199 #12808 Improves ensemble data handling and error reporting
Enhances the robustness of ensemble data processing by:

- Displaying a tooltip when data is missing for a realization.
- Checks if an enhanced summary file exists before attempting to open it.
- Refines the creation of the realization filter to accurately represent the range of available data.
2025-08-22 06:47:07 +02:00
Magne Sjaastad 588bfbaeed Adds beta feature postfix to "Jobs" object
Ensures that the "Jobs" object name reflects its beta status by appending the appropriate postfix.
This change helps to differentiate beta features from stable ones within the application.
2025-08-22 06:47:07 +02:00
Magne 3caa1b26d5 clang-format: Reduce ColumnLimit to avoid long lines 2025-08-21 11:11:43 +02:00
Kristian Bendiksen b0483172b1 #12718 Add diameter and roughness specification for MD intervals
Implements interval-based diameter and roughness configuration for MSW completions
while maintaining backward compatibility with existing single-value approach.

- Add RimDiameterRoughnessInterval class for individual MD intervals
- Add RimDiameterRoughnessIntervalCollection for managing interval collections
- Extend RimMswCompletionParameters with interval-specific mode support
- Support both metric and field unit systems
- Provide validation and overlap detection for intervals
2025-08-21 08:48:43 +02:00
JJ 79c2c792f4 Add cmake configuration option to disable/enable openvds support (#12805)
* Add cmake configuration option to disable/enable openvds support
2025-08-21 08:31:10 +02:00
JJ ea1c4b4a85 Python: get accumulated well perforation length for a simulation well (#12798)
* Add support for getting the perforation length of a well from Python
* Fix issue with sub grid pointers in LGR grids when using active cell opm reader
2025-08-21 08:11:51 +02:00
magnesj 727fac7e0e Fixes by clang-tidy 2025-08-20 08:47:58 +02:00