Commit Graph
2065 Commits
Author SHA1 Message Date
JJ 24be78f105 Tie-in valve improvements (#13661)
Support (bool, something) pairs as tuples on python side.
Support custom outlet valve md
Add python test for custom outlet valve md
Use tie-in depth as default for custom valve md
Standalone valve creation and display updates
Update MSW valve export
Add valve open/shut flag.
Add python examples
2026-03-06 12:01:14 +01:00
magnesj 759b143c5e Fixes by codespell 2026-03-06 06:44:52 +01:00
Magne Sjaastad 50009ac4d2 Use cafPdmUiButton instead of bool PdmField in multiple classes
Replace PdmField<bool> push button pattern with addNewButton() lambdas
in RiaPreferences, RiaPreferencesSummary, RicUserDefinedCalculatorUi,
RimUserDefinedPolylinesAnnotation, RimPolygonFilter, RimFractureTemplate,
RimEllipseFractureTemplate, RimMeshFractureTemplate, and
RicSummaryPlotEditorWidgetCreator.
2026-03-04 09:52:17 +01:00
Magne Sjaastad 9f30c981bc Remove unused cafPdmUiPushButtonEditor.h includes
Follow-up cleanup after switching from bool PdmField push buttons to cafPdmUiButton.
2026-03-04 09:52:17 +01:00
Magne Sjaastad f5234f0e06 RigWellTargetMapping: Extract private implementation into RigWellTargetMappingTools
Move private methods, DataContainer, and ClusterStatistics from
RigWellTargetMapping into a new RigWellTargetMappingTools class to reduce
header complexity. Change generateEnsembleCandidates to accept
std::vector<RimEclipseCase*> instead of RimEclipseCaseEnsemble.
2026-03-04 07:37:19 +01:00
Magne Sjaastad 61a69bacc4 Use cafPdmUiButton instead of bool in PdmField
* Adopts dynamic PDM buttons with lambda callbacks

Refactors PDM push buttons from boolean fields to use the `addNewButton` API with direct lambda callbacks.

This change enforces a new coding guideline to extract complex or multi-line lambdas to dedicated `on*Clicked()` methods, improving code readability and maintainability.

- Replaces `PdmField` button fields with `PdmUiOrdering::addNewButton` calls.
- Extracts multi-line/control-flow lambdas into named methods in `RimFlowCharacteristicsPlot`, `RimGeoMechCase`, and `RimStatisticsContourMap`.
- Removes obsolete `defineEditorAttribute` overrides and `fieldChangedByUi` logic for these buttons.
- Updates `RimWellPathFracture` to utilize base class-provided button creation.
- Adds new lambda line-count guideline to the coding style documentation.
- Includes minor build fixes, such as adding `cafPdmUiButton.h` and correcting tooltip API usage.
2026-03-03 08:54:45 +01:00
Magne Sjaastad 5b7e62f649 RicNewStatisticsContourMapFeature: Consolidate addStatisticsContourMap to use RimReservoirGridEnsembleBase 2026-03-03 07:35:48 +01:00
Magne Sjaastad 8fdaa83f15 RimReservoirGridEnsembleBase: Make optional methods non-pure virtual with default implementations
mainGrid(), unionOfActiveCells(), computeUnionOfActiveCells(), and statisticsCaseCollection() default to null/no-op. Remove redundant overrides from RimEclipseCaseEnsemble.
2026-03-03 07:35:48 +01:00
Magne Sjaastad 601a3bbb78 Refactor RigFormationNames
- Rename RifColorLegendData to RifFormationNamesReader to better reflect the
class purpose of reading formation names from .lyr files.
- Remove inheritance of cvf::Object
- Improve const correctness
2026-02-27 14:17:21 +01:00
Magne Sjaastad 90c08d8981 #13660 Summary: Skip empty curve data to avoid assert in addCurveData 2026-02-26 08:23:53 +01:00
Magne Sjaastad 896e960e58 #13558 Help menu: Add "What's New" item linking to release notes
Adds a new menu item "What's New" to the Help menu that opens the
release notes page at https://resinsight.org/releases/release-notes/latest/.
Includes a new star-shaped SVG icon matching the existing help icon style.

Consolidate all urls into constants in RiaNetworkTools
2026-02-26 08:23:53 +01:00
Magne Sjaastad 1cd3cf3b67 Fix zone colors to honor LYR-file specification (#13658)
* #12974 Fix zone colors to honor LYR-file specification

- Map formation colors by name instead of palette index in updateFormationNamesOnPlot()
- Map formation colors by categoryValue lookup in updateCellResultLegend(), fixing
  incorrect colors when showOnlyVisibleCategoriesInLegend filters the active set
- Add RimColorLegendCollection::createColorLegendFromFormationNames() and call it
  from readAllFormationNames() so LYR colors are available after project load
- Auto-assign formation color legend when a formation case is set on a well log track
- Rename fileNameWoPath() to shortName() and switch to baseName() (no extension)
- Remove addCustomColorLegend() from RicImportFormationNamesFeature; logic now lives
  in RimColorLegendCollection
- Set formation legend when creating new Well Log Extraction Curve track
2026-02-25 18:16:03 +01:00
Magne Sjaastad b262527812 Fill statistical values with infinity if no values could be calculated
If percentiles could not be calculated (e.g. not enough data points or infinity in any of the input values), fill with infinity to indicate missing data.

The previous solution caused no statistical curves to be displayed due to wrong number of elements in the percentile vector.

Seen in regression test "ProjectFiles2024Tests\TestCase_Ensemble"
2026-02-24 14:24:15 +01:00
Magne Sjaastad 71b734efec #13651 Fix formation dip sign issue when fracture normal is rotated 180 deg
Rename calculateFormationDip to calculateAngleFromVertical to better reflect what the function computes. Add calculateFormationDipFromHorizontal which applies the -90 deg adjustment and std::abs, fixing the wrong sign when the fracture direction normal is flipped.
2026-02-24 13:46:15 +01:00
Magne Sjaastad d3d1c1a148 #13642 Avoid time axis zoom reset when stepping ensemble curve sets
When stepping a RimEnsembleCurveSet by well/group/region/etc., the updateEnsembleAddresses lambda was unconditionally setting doZoomAll=true, causing zoomAll() to be called and resetting the time axis zoom. This is now consistent with regular curve stepping which preserves the time axis.
2026-02-24 13:46:15 +01:00
Magne Sjaastad ab1cd9bb22 #13603 Replace bool/errorText with std::expected in ExpressionParser
evaluate() and expandIfStatementsAndEvaluate() now return std::expected<void, QString>: the error message is always part of the return value rather than an optional out-parameter, making it impossible for callers to silently discard errors.

Update RimGridCalculation and RimSummaryCalculation to use evaluateResult.error() instead of a separate errorText variable.
2026-02-23 19:19:09 +01:00
Magne Sjaastad 812b605a31 #12919 Updates curve hash to include X axis type
Updates the curve hash calculation to include the X axis type.
This ensures that curves are properly recreated when the X axis type changes, preventing potential display issues.
2026-02-23 19:17:55 +01:00
Kristian Bendiksen 7cc1853302 #13609 Extract default curve appearance as static constexpr members
Replace local variables and magic numbers with static constexpr
defaults. Reset curves to default appearance when switching back
from custom to default mode.
2026-02-23 12:18:09 +01:00
Kristian Bendiksen 69ba3c2418 #13609 Fix ensemble cross-plot curve appearance not responding to changes
Apply custom appearance settings (line style, symbol, symbol size) to
existing realization curves when the data hash is unchanged. Previously
these settings were only applied during curve creation.
2026-02-23 12:18:09 +01:00
Magne Sjaastad 441a0d4338 Enhances dual porosity result display and plotting
Improves the handling and display of dual porosity results by:

- Adds an option to display a dual porosity label in the UI tree, clarifying the porosity model being used.
- Adjusts the K index calculation for the fracture porosity model in relative permeability plots, ensuring correct indexing.
- Adds a warning message when plotting relative permeability curves for fracture cells since it is not fully supported.
- Replaces direct checks for dual-porosity results with checks against the main grid to determine dual porosity for UI element display.
2026-02-20 09:27:20 +01:00
Kristian Bendiksen c156d5d23c #13606 Summary Calculator: Add support for block vectors 2026-02-18 17:38:45 +01:00
Magne Sjaastad 8e4000590c Add RiaSummaryAddressCollectionTools utility module
Refactor summary address collection logic into a new utility module, RiaSummaryAddressCollectionTools, with functions for object identification, curve definition generation, duplicate filtering, and address-to-case/ensemble mapping. Update RimSummaryPlot to use these utilities, improving modularity and maintainability. Add comprehensive
unit tests for the new module.

Adds test for mock summary case
2026-02-18 14:27:36 +01:00
Magne Sjaastad d52f595c41 Refactor: Rename RiaStatisticsTools to RigStatisticsTools
Replaced all references to RiaStatisticsTools with RigStatisticsTools across the codebase, including header includes, static method calls, and test files. Updated CMake configuration to remove RiaStatisticsTools and add RigStatisticsTools. Renamed and updated related unit tests. No changes to logic or algorithms; this is a namespace and organizational refactor for consistency. Also added ApplicationLibCode include directories as PRIVATE to relevant targets.
2026-02-18 09:22:39 +01:00
Magne Sjaastad e8bab38b49 Refactor MSW segment model to support more detailed fields
Refactored RimMswSegment to store join segment, length, depth, and next segment length
2026-02-18 09:22:14 +01:00
Magne Sjaastad e6e6d5b818 Refactor MSW segment update to use static method
Refactored RimMswSegmentCollection::updateSegments from an instance method to a static method that requires explicit top-level RimWellPath and RimEclipseCase parameters. Updated RimWellPathCollection to collect unique top-level wells and call the new static method.
2026-02-18 09:22:14 +01:00
Magne Sjaastad dbe08064ce Refactor double editor config to use attribute map
Remove custom editor attribute classes and migrate all double field validation and formatting (range, decimals, number format) to the attribute map system. Refactor PdmUiDoubleValueEditor to read settings from the field's attributes and always display formatted values. Remove redundant defineEditorAttribute overrides. Add tests for pair<bool, double> field validation. Centralize and simplify double field UI configuration for improved maintainability.
2026-02-16 16:54:22 +01:00
Magne Sjaastad 9aa5a3d222 Move number formatting setting to CAF to enable use in UI editors
* Move RiaNumberFormat to cafPdmUiNumberFormat in caf framework
* Add unit test
2026-02-16 11:32:04 +01:00
Magne Sjaastad aa3372efce Add support for Reservoir Grid Ensembles
Introduce RimReservoirGridEnsemble and RimReservoirGridEnsembleBase to manage ensembles of grid-only Eclipse cases. Enable detection of identical grids for shared operations and statistics. Integrate grid ensembles into project structure, UI, and menu system. Refactor statistics and view handling to support both case groups and grid ensembles via a common interface. Add deferred grid loading, robust case referencing, and migration for well data source fields. New features and menu items allow creation and management of grid ensembles from file sets, enabling new workflows for grid-only ensemble analysis.
2026-02-13 14:35:52 +01:00
magnesj 10e8d9e39a Fixes by clang-tidy 2026-02-13 08:22:16 +01:00
Magne Sjaastad a2b3445692 Add support for custom percentiles in ensemble statistics
Introduced custom percentile handling for ensemble statistics:
- Added "CUSTOM" statistics type and percentile field to RifEclipseSummaryAddress
- Refactored RimEnsembleStatisticsCase to store and compute arbitrary percentiles
- RimEnsembleStatistics now parses custom percentiles from UI input
- RimEnsembleCurveSet and related interfaces updated to handle custom percentile curves and labels
- Hashing and statistics calculations now include custom percentiles for cache validity
2026-02-12 14:25:48 +01:00
Kristian Bendiksen 1ec53cc3f2 #13425 Fix ICD/AICD valve output in schedule generation
ICD valves now produce WSEGVALV and AICD valves now produce WSEGAICD
in the generated schedule. Three root causes were fixed:

- Create per-event valve templates with proper parameters instead of
  reusing default templates that lack orifice diameter and AICD fields
- Use perforation interval range for ICD/AICD valve positioning so
  valveLocations() returns non-empty results for the accumulator
- Add 5 AICD parameter fields to the Python API and event classes
2026-02-12 08:15:22 +01:00
Kristian Bendiksen 82e2dbc434 #13425 Fix WELSEGS date scoping: tubing events only appear at their event dates
Tubing event diameter/roughness values were leaking into earlier date
sections in the generated schedule. The WELSEGS collection functions
did not filter intervals by export date, unlike COMPSEGS and other
keywords which already received the exportDate parameter.

Thread exportDate through collectWelsegsData, collectWelsegsDataRecursively,
and collectWelsegsSegment. Add date-aware overloads of getDiameterAtMD and
getRoughnessAtMD that use isActiveOnDate to filter intervals. Update test
to verify tubing values only appear at their scheduled dates.
2026-02-12 08:15:22 +01:00
Kristian Bendiksen 561006c60c Refactor: Use export date instead of time step for MSW export. 2026-02-12 08:15:22 +01:00
Kristian Bendiksen a4dad97024 #13425 Add time-dependent well events and schedule data generation
Implement timeline-based event system for managing temporal changes in
well completions, perforations, valves, and production controls.

Features:
- Event timeline container with date-based querying
- Six event types: PERF, VALVE, TUBING, WSTATE, WTYPE, WCONTROL
- Schedule keyword generation (DATES, COMPDAT, WELSEGS, WCONPROD, WCONINJE)
- Multi-well schedule generation support
- Python GRPC API for event management
- YAML configuration file support
- Comprehensive test suite

Implementation:
- New directory: ApplicationLibCode/ProjectDataModel/WellEvents/
- Event classes inherit from RimWellEvent base class
- RimWellEventTimeline integrated into RimWellPath
- RicScheduleDataGenerator for multi-well schedule export
- Python API: event_timeline(), add_perf_event(), add_valve_event(), etc.
- Tests verify all event types and YAML config parsing

#13425 Add date tracking to valves and diameter/roughness intervals

Add creation date fields to RimWellPathValve and RimDiameterRoughnessInterval
to support filtering objects by date during completion data export.

- Add m_useCustomStartDate and m_startDate fields
- Add enableCustomStartDate(), setCustomStartDate(), isActiveOnDate() methods
- Set creation dates when applying valve and tubing events in RimWellEventTimeline

#13425 Add date-based filtering for schedule data export

Add optional export date parameter to MSW data collection functions to filter
valves and perforations based on their creation dates during schedule export.

- Add exportDate parameter to collectWsegvalvData, collectWsegAicdData,
  collectWsegSicdData, and collectCompsegData functions
- Filter valves by checking isActiveOnDate() on the associated RimWellPathValve
- Add RimPerforationInterval reference to RicMswPerforation for date filtering
- Pass export date from RicScheduleDataGenerator through the extraction chain

This ensures segment numbers reflect the full model while only including
objects active on the export date in output keywords.

Add test to prove compsegs changes over time.

#13425 Fix mypy type checking errors in well_events.py

- Add type annotations to all function parameters
- Fix generic type hints (dict -> Dict[str, Any])
- Import Any type for proper type safety
- Add type: ignore for method reassignment
- All 31 tests pass

#13425 Add schedule-level keyword events for non-well-specific keywords

Add a new event type called "Keyword Event" for schedule-level Eclipse
keywords (RPTRST, GRUPTREE, RPTSCHED, etc.) that are NOT tied to a
specific well path. This complements the existing RimWellEventKeyword
which operates at the well level.

- Add RimKeywordEvent class inheriting from RimWellEvent with null wellPath
- Add SCHEDULE_KEYWORD enum value to EventType
- Add addKeywordEvent() method to RimWellEventTimeline
- Add AddKeywordEvent Python API method to RimcWellEventTimeline
- Update RicScheduleDataGenerator to output global keywords after well sections
- Add Python wrapper add_keyword_event() with type inference
- Add tests and examples for RPTRST, GRUPTREE keywords
2026-02-12 08:15:22 +01:00
Magne Sjaastad 96eabcfd96 Fixes color shading for formation annotation.
Addresses an issue where color shading for formation annotations was not working as expected due to a null color legend in `RimWellLogTrack`.

Implements a fallback mechanism to use the default legend colors when the color shading legend is not available, ensuring proper visualization of formation annotations.

Related to https://github.com/OPM/ResInsight/issues/12974
2026-02-11 11:13:00 +01:00
Magne Sjaastad 93bd0b9c9d Refactor well log track settings into modular classes
* Refactor well log track settings into modular classes

Major refactoring of RimWellLogTrack to delegate property axis, formation, region annotation, and well path attribute settings to dedicated settings classes. Introduces RimWellLogPropertyAxisSettings, RimWellLogFormationSettings, RimWellLogRegionAnnotationSettings, and RimWellLogWellPathAttributeSettings, each encapsulating related fields, UI logic, and option handling. Old fields are retained for migration and backward compatibility. Updates enums and signatures for consistency.
2026-02-09 15:33:18 +01:00
Magne Sjaastad af8213509a Improve description of statistical formulas (#13567)
* Refactor and extend percentile calculation utilities

Refactored percentile and quantile calculation logic for improved flexibility and maintainability. Added helper functions for quantile/percentile validation, introduced a new vector-based calculatePercentiles method, and updated calculateStatisticsCurves to use it. Refactored nearest-rank and interpolated percentile methods to accept percentiles as vectors and improved parameter validation. Enhanced documentation throughout and updated function signatures in the header for clarity.
2026-02-08 11:52:42 +01:00
Magne Sjaastad f1f25ca760 #13510 Add exclusion support to range selection parsing
Range selection functions now support exclusion tokens (e.g., "!4", "!5-7") for omitting values or ranges. UI placeholder texts and documentation updated to reflect new syntax. Comprehensive tests added for exclusion cases, including edge scenarios. Open-ended exclusion ranges are safely ignored in min/max variant. This enhances flexibility and precision for value selection.
2026-02-04 18:07:28 +01:00
JJ fe3cf9b94a Handle vector names with colon as groups in summary data explorer (#13555)
* Handle vector names with colon as groups in summary data explorer
2026-02-04 14:59:26 +01:00
Magne Sjaastad 913eab2065 Update cell count logic for radial grids and add bounds check
Refined total and active cell count calculations in Rim3dOverlayInfoConfig to exclude temporary grid cells for radial grids, ensuring overlay info is accurate. Added a bounds check in RigActiveCellInfo::gridActiveCellCounts to prevent out-of-range access.
2026-02-03 20:14:12 +01:00
Magne Sjaastad 058918a85e Improve UI labels for grid slices in radial and Cartesian modes
Enhance slice feature constructors and UI logic to support context-aware labeling for both Cartesian and radial grids. Axis and slice labels now clearly indicate both physical and index names (e.g., "Radial (I)", "Theta (J)"). Context menus and filter UIs display the appropriate labels based on grid type, improving clarity and usability.
2026-02-03 20:14:12 +01:00
Magne Sjaastad ca5465a660 Handles API changes for Arrow Parquet file reading
Adapts the code to handle different API versions of the Arrow library for reading Parquet files.
It uses preprocessor directives to select the correct API based on the `ARROW_VERSION_MAJOR`.
This ensures compatibility with both older and newer versions of the Arrow library.
2026-01-31 17:25:26 +01:00
JJ 94c3059fd8 Add support for SICD valves (#13496)
* Add SICD parameters
* Add wsegsicd valves to completion export
* Add python method to read template info from valve
* Update tests
2026-01-29 11:16:05 +01:00
jonjenssen 415ad7869e Make sure optional parameters with 0 values are treated as default values in welspecs keyword export 2026-01-29 07:21:29 +01:00
Magne Sjaastad 4ddace05fb Replaces push buttons with new UI ordering
Removes the usage of `cafPdmUiPushButtonEditor` and implements the same functionality using the `addNewButton` method in `cafPdmUiOrdering`.

This change provides a more flexible and consistent way to add buttons to the UI and simplifies the code by removing the need for a dedicated editor class.
2026-01-27 13:37:37 +01:00
Magne Sjaastad 5be1a4feb7 Replaces push buttons with addNewButton
Removes the explicit usage of PdmUiPushButtonEditor and associated fields.

Replaces these with the more flexible addNewButton function in PdmUiOrdering.
This provides a more streamlined way to add buttons to the UI.
2026-01-27 13:37:37 +01:00
Magne Sjaastad de3758cf60 Set PdmUiButton default alignment to right
Removed manual setAlignment(Qt::AlignRight) calls for UI buttons,
as PdmUiButton now defaults to right alignment. Also removed
unused cafPdmUiButton.h includes from several files.
2026-01-27 13:37:26 +01:00
Magne Sjaastad ac594eb54e Add SurfaceColorMode setting to control surface visualization
Add a Color Mode dropdown to surfaces and surface collections that
controls how surfaces are rendered:
- Both: Show surface color and cell result colors
- Surface Color: Show only the uniform surface color
- Cell Result Colors: Show only cell results mapped to surface

Individual surfaces default to inherit from their parent collection but can override with their own setting.
2026-01-26 11:36:26 +01:00
Magne Sjaastad fde113259a Use Fwk base classes for named objects and checked objects 2026-01-23 13:31:47 +01:00
Magne Sjaastad 5c9438ab04 Remove references to cafPdmUiActionPushButtonEditor 2026-01-23 13:31:34 +01:00