Commit Graph
20024 Commits
Author SHA1 Message Date
Magne Sjaastad 044454b9b1 Auto-assign Y-axis for ensemble curve sets based on unit/vector match
Extends the existing single-curve auto axis assignment (unit and summary vector matching, then alternating left/right) to also cover RimEnsembleCurveSet. Previously ensemble curve sets were always placed on the default left axis, so e.g. FOPT and FOPR ensembles ended up on the same axis despite differing units.

- Add RimEnsembleCurveSet::unitNameY(), looked up from the first available summary case reader in the ensemble.
- Move X and Y axis assignment from RimSummaryPlot to new RimSummaryPlotTools. Y-axis assignment takes a RiaSummaryAddressModifier::CurveAddressProvider, and compares against both curves and curve sets in the plot.
- RimEnsembleCurveSetCollection::addCurveSet gains an autoAssignPlotAxis flag (default true, matching addCurveAndUpdate for single curves).

Also fixes a bug in the summary plot editor where ensemble curve sets manually assigned to different Y-axes collapsed onto the same axis when clicking OK. The PdmPtrField axis reference does not resolve across the cloned preview and target plots. Add RimEnsembleCurveSet::findOrAssignLeftOrRightAxisY() to capture and re-apply the axis explicitly.

Add RimSummaryPlot-Test.cpp with unit tests for axis auto-assignment of curves and ensemble curve sets.

Fixes #14728
2026-09-16 06:28:50 -04:00
Kristian Bendiksen f32d59775b Python: Reject summary writes for unsupported case types 2026-09-16 11:37:59 +02:00
Kristian Bendiksen ef1ad39723 Python: Reject overwriting source summary vectors 2026-09-16 11:37:59 +02:00
Kristian Bendiksen dc1cc8e243 #14667 Python: Update tubing event interval test 2026-09-16 11:35:13 +02:00
Kristian Bendiksen 52e212e24f #14667 Completions: Simplify segment interval properties 2026-09-16 11:35:13 +02:00
Kristian Bendiksen 63bcc22485 #14667 Completions: Move MSW settings to segments 2026-09-16 11:35:13 +02:00
Magne Sjaastad cfb9e5765e #14761 Find summary data files when file name contains multiple dots
QFileInfo::baseName() truncates at the first dot, so the ESMRY and h5 files were not found for realizations like CASE.V2-0.SMSPEC. Without an UNSMRY file the realization was opened as an empty summary case. Use completeBaseName() to strip only the extension.
2026-09-16 05:06:47 -04:00
Magne Sjaastad 3414fee046 #14345 Ensure reservoir case is open for destination ensemble grid calculations
Also open the reservoir case when the calculation's destination ensemble is set, not only when additional cases type is ENSEMBLE.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen 26314940a3 #14345 Property Filter: Use view case for ensemble filters 2026-09-16 10:53:31 +02:00
Kristian Bendiksen 42d46cf1a8 #14345 Property Filter: Allow bounds without result limits 2026-09-16 10:53:31 +02:00
Kristian Bendiksen 99ce6daf58 #14345 Grid Calculation: Fix additional ensemble selection 2026-09-16 10:53:31 +02:00
Kristian Bendiksen 0ba20f0b65 #14345 Grid Calculation: Add destination ensemble 2026-09-16 10:53:31 +02:00
Kristian Bendiksen 8cbc81fe98 #14345 Grid Calculation: Close cases opened during calculation 2026-09-16 10:53:31 +02:00
Kristian Bendiksen bc9f64af92 #14345 Propagate LGR parent visibility for index-based data filters
The grid calculation data filter evaluated index filters (polygon, user
defined) directly on every grid. An INDEX_K polygon evaluated on a fine
LGR can select no cells, so refined cells whose parent host cell is
inside the polygon were dropped from the aggregation. This gave a lower
sum than the histogram of visible cells in the 3d view, which renders
LGR cells following their parent grid cell.

Hoist the parent grid visibility propagation out of the range filter
branch so it also runs for index filters. Property filters are evaluated
per cell against their own result values and are left untouched.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen b62738ff8a #14345 Restore view visibility for the cell filter view filter type
The cell filter view filter type was changed to use the cell filter
geometry to include cells inside the filters that are inactive in the
view's case, at the cost of ignoring property filters in the view. That
use case is now covered by the data filter type, which evaluates the
filters per calculation case. Restore the original visible cells
semantics for the cell filter view filter type, so property filters in
the view affect the calculation again.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen 5a7e043837 #14345 Add Data Filters to grid ensembles
Add a data filter collection to RimReservoirGridEnsemble, so filters
can be defined once for the ensemble instead of per realization. The
filters are bound to the main case of the ensemble for configuration,
and evaluated per case as elsewhere.

The filter creation commands are available from a Data Filters submenu
on the ensemble node, and the collection node is hidden while empty,
matching the case-level behavior. The grid calculation data filter
options include the filters of the ensemble the destination case
belongs to.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen 996e18426c #14345 Grid Calculation: add filtering with view-independent data filters
Add a filter type option to the grid calculation: None, Cell Filter
View or Data Filter. In data filter mode a single filter from the
destination case's Data Filters collection is selected, and the filter
is evaluated per calculation case and time step using each case's own
active cells and result values. Property based filtering of ensemble
calculations then uses each realization's own property values, which is
not possible with view based filtering.

Old projects with a cell filter view are migrated to the cell filter
view mode. Complex filtering is composed with a combined filter (AND/OR)
in the Data Filters collection.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen e9b28c1b02 #14345 Add per-case cell filter evaluation with source case override
Add a sourceCaseOverride parameter to RimCellFilter::applyToCellVisibility.
When set, property filters evaluate against the override case's result
values instead of the case the filter is bound to, allowing the same
filter definition to be evaluated against each case in an ensemble.
Combined filters forward the override to their children, and geometry
based filters ignore it.

Add RimCellFilterTools::computeReservoirCellVisibility, which evaluates
a cell filter against a given case for all grids and returns the
visibility indexed by reservoir cell index. Range filters propagate the
parent grid visibility into LGR cells, matching the filtered geometry
of a 3d view.

Also add RimCellFilter::setFilterMode.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen da28ffe613 #14345 Use cell filter geometry for grid calculation visibility
The visibility mask for 'filter by view' was taken from the view's
visible cells, which are limited to the active cells of the view's
case. When applying the calculation to additional cases with different
ACTNUM, cells inside the filter geometry that are inactive in the
view's case were excluded from the aggregation for cases where they are
active, giving too low sums.

Build the mask from the cell filter geometry (RANGE_FILTERED +
RANGE_FILTERED_INACTIVE) instead, so each calculation case contributes
its own active cells inside the filters. Property filters in the view
no longer affect the calculation. The result filtering now uses the
same mask as the input filtering, also when the visibility filter is
provided by the caller.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen be9969d5b4 #14345 Add debug logging of value counts used in aggregations and histogram statistics
Log at debug level, for each case and time step, how many input values
contribute to a grid calculation aggregation and how many were replaced
with the default value (non-visible cells and undefined values). Also
log the sum and number of values used when computing visible cells
statistics, to allow comparison with the histogram sum in the 3d view.
2026-09-16 10:53:31 +02:00
Kristian Bendiksen 0ad61a004a #14345 Grid Calculation: replace undefined values with default value in aggregations
Aggregation functions like sum() in the expression parser include all
values in the input vector. Undefined values (HUGE_VAL) could leak into
the aggregation input when a grid case group member has fewer time steps
on disk than the main case it inherits result meta data from, or when a
cell is active in the calculation case but has no value in the source
data. This produced infinite sums for some realizations, while the
histogram statistics ignore undefined values.

Replace undefined values in the aggregation input with the default value
0.0, matching the histogram semantics, and log a warning per case and
variable when values were replaced.
2026-09-16 10:53:31 +02:00
Magne Sjaastad 0579dbb468 Move time-step control and grid-only hooks from Rim3dView to RimGridView
* #14760 Move time-step control and grid-only hooks from Rim3dView to RimGridView
* #14760 Store named 3D visualization models in a shared collection instead of per-model fields
2026-09-16 08:44:00 +02:00
Magne Sjaastad f73afc5b76 #14741 Fix null-pointer dereference in RicPlaceThermalFractureUsingTemplateDataFeature
selectedThermalFracture() dereferenced the result of selectedItemOfType<RimWellPathFracture>() without a null check, surfaced by the command-feature enablement sweep when no fracture is selected.
2026-09-15 08:15:59 -04:00
Magne Sjaastad c1bce5299a #14741 Add individual Ric*Feature command tests
Curated feature tests exercising specific Ric*Feature commands (close case, new view, delete well path, toggle items, new intersection, Eclipse property/cell filters, well path lateral, perforation interval, summary plot, well log plot, polygon, cell index filter), grouped under FeatureTests/Tests with their own CMakeLists_files.cmake.
2026-09-15 08:15:59 -04:00
Magne Sjaastad 7fa9d0c5bf #14741 Add command-feature test infrastructure
Add the ResInsight-featuretests executable: a headless GUI test harness (RiaFeatureTestModelBuilder, RiaFeatureTestTreeView), a runner that triggers Ric*Feature commands through their QAction (RicFeatureExecutionRunner), a generic execution sweep over every registered feature (RicFeatureSweep-Test, RicFeatureExecutionSweep-Test, RicFeatureSubprocessSweep-Test, RicFeatureSweepDenylist), and supporting CMake wiring. Adds RiaRegressionTestRunner::setRunningRegressionTests() so tests can suppress modal dialogs, and shares RimMockSummaryCase as a common test model under TestModels.
2026-09-15 08:15:59 -04:00
Magne Sjaastad aad5fca262 Docs: Add copilot config, extract shared agent workflow guidelines
Create .github/copilot-instructions.md as a minimal GitHub Copilot entry point, trim CLAUDE.md to a minimal pointer file, and move shared safety/output-expectation guidance into docs/agents/workflow.md. Also update the header/implementation-split rule in docs/agents/coding-style.md to allow short one-line bodies and short initializer lists inline in the header.
2026-09-15 12:51:35 +02:00
Magne Sjaastad 2474e8885e #14711 Restyle tiling icons to match Maximize Windows design
Update TileWindows, TileVertically, and TileHorizontally icons to use
a flat, pastel-fill/colored-stroke style consistent with the existing
Maximize Windows icon, replacing the previous bright gradient/dot
design.
2026-09-15 05:01:17 -04:00
JJ b4aededbdb Support tiling windows in a single direction (horz or vert) (#14754)
* Support tiling windows in a single direction (horz or vert)
2026-09-14 20:30:46 +02:00
Magne Sjaastad 43c6e0b518 #14739 Fix null pointer crash in intersection result text builders
Guard against a null flatIntersectionPartMgr() in RiuResultTextBuilder and RiuFemResultTextBuilder. The part manager is only created when the display model is built, but result text can be requested (via selection updates) before that happens, e.g. right after appending a new intersection.
2026-09-14 08:18:04 -04:00
Magne Sjaastad 2120a13d63 #14654 Fix Linux Release build defining NO_DEBUG instead of NDEBUG
* #14654 Fix Linux Release build defining NO_DEBUG instead of NDEBUG

CMAKE_CXX_FLAGS_RELEASE was overwritten with -DNO_DEBUG on Linux in
both CMakeLists.txt and Fwk/CMakeLists.txt. NO_DEBUG is not a standard
macro, so NDEBUG was never defined in Linux Release builds.

As a result, cafAssert.h fell back to CAF_ENABLE_ASSERTS 1, keeping
CAF_ASSERT (and standard assert()) active in Release and aborting the
app, even though RESINSIGHT_ENABLE_ASSERTS_IN_RELEASE defaults to OFF.
Windows and macOS Release builds were unaffected.

Drop the override entirely so CMake supplies its default Release
flags (-O3 -DNDEBUG) on Linux, matching Windows and macOS.

Also simplify CEE_USE_QT5/CEE_USE_QT6 handling: set them directly
instead of via option() with malformed NOT DEFINED(...) guards.

Fixed missing initialization in VfpValueSelection and WellPathCellIntersectionInfo
2026-09-14 14:17:33 +02:00
Magne Sjaastad 64361c2f78 #14746 Fix duplicate AppEnum serialization text and detect it in addItem
RimGridCalculation::AdditionalCasesType::ALL_CASES and
RimIntersectionFilterEnum::INTERSECT_FILTER_BETWEEN both reused the
serialization text of a sibling enum value (NONE and
INTERSECT_SHOW_BELOW respectively), so they would silently round-trip
as the wrong value when read back from a project file.

AppEnumMapperBase::addItem only asserted alias uniqueness, not text
uniqueness, so this class of bug went undetected. Add a CAF_ASSERT
checking that a new enum value's serialization text does not match an
existing value's text or aliases.

Found while investigating the AppEnum alias-duplication note in #14654.
2026-09-14 08:14:19 -04:00
dependabot[bot] 98c84cde99 Bump astral-sh/setup-uv from 10.0.1 to 10.1.0
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 10.0.1 to 10.1.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/20cfd1bf945f4377ade1205e4dbc17946fc9a30d...bec219d24cd3e171d82865faccec33120bb574f4)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 10.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-14 08:01:58 -04:00
Kristian Bendiksen 58b9f46a95 RifReaderOpmCommon: Compute restart data size locally 2026-09-14 11:59:32 +02:00
Magne Sjaastad 90a4282783 #14727 Fix ensemble filter by summary value for oscillating rate vectors
RimEnsembleCurveFilter::applyFilter() (SUMMARY_VALUE mode) only compared
the value at the last time step inside the selected time range against
the filter's value range, discarding the result of every earlier time
step. For monotonically increasing cumulative vectors (e.g. FOPT) this
coincidentally matched user expectations, but for rate vectors (e.g.
FOPR) that oscillate at high frequency between zero and a non-zero
value, the outcome depended arbitrarily on whether the last time step
happened to land on zero or not.

The filter now excludes a realization if any time step inside the
selected time range has a value outside the selected value range, i.e.
all time steps in range must be inside the value range for the
realization to be kept. This makes the behavior consistent between
FOPT and FOPR style vectors.

Added a regression test reproducing the oscillating-rate scenario, and
updated the existing performance test to describe and exercise the new
semantics.
2026-09-14 03:10:24 -04:00
Magne Sjaastad 8776a2e2bf #14703 Grid statistics: Fix missing results for computed dynamic results like riPORV*SOIL
RimEclipseStatisticsCaseEvaluator::addNamedResult() sized the destination
statistics containers (MEAN/P10/P50/P90/etc.) using the time step count of
an arbitrary first result found in the source case (existingResults()[0]).

Results computed by ResInsight, such as riPORV*SOIL and riPORV*SGAS, do not
have their own time step info populated until they are actually computed,
so existingResults()[0] can end up being an unrelated result, including a
static one (e.g. PORV) with only a single time step. Using its size to
size the destination containers collapsed the statistics for all dynamic
results to a single time step, silently dropping the results for every
other time step, i.e. no results were shown for riPORV*SOIL / riPORV*SGAS.

Fix by using RigCaseCellResultsData::maxTimeStepCount() to find the source
result with the most time steps, and use its time step info both for the
destination time step metadata and for sizing the destination containers,
instead of depending on an arbitrary source result.

Added a unit test reproducing the ensemble statistics computation for
riPORV*SOIL across two source cases.
2026-09-12 04:53:16 -04:00
Magne Sjaastad b922fd96a7 #14737 Add reordering support to case collections
Add caf::PdmFieldReorderCapability to the child array fields holding
RimCase objects:
- RimEclipseCaseCollection::cases (grid models in Project Tree)
- RimCaseCollection::reservoirs (statistics case groups)
- RimGeoMechModels::m_cases (geomechanical models)

This enables the built-in move up/down tree item controls for
reordering cases, matching the pattern already used for e.g.
RimSurfaceCollection and RimMultiPlot.
2026-09-12 04:11:57 -04:00
Magne Sjaastad 3ec1a2659c #14690 Restore Close context menu command for cases
RicCloseCaseFeature::isCommandEnabled() was updated to require
RimCase::isDeletable() to be true, but no case type ever set this
flag to true by default. As a result, the 'Close' context menu item
disappeared for all grid models.

Set setDeletable( true ) as the default in the RimCase constructor.
Special cases that should not be closed directly by the user (e.g.
the generated ensemble grid case in RimWellTargetMapping) already
opt out by calling setDeletable( false ) explicitly.
2026-09-12 04:10:14 -04:00
Magne Sjaastad 055fbb60fa #14709 RimReservoirGridEnsemble: Auto-import per-realization formation zone files 2026-09-12 04:05:24 -04:00
Magne Sjaastad cb6807102c Select RHEL8 vcpkg-configuration.json via CMake instead of renaming the tracked file
* Select RHEL8 vcpkg-configuration.json via CMake instead of renaming the tracked file

RHEL8 CI jobs previously ran 'cp vcpkg-configuration-rhel8.json vcpkg-configuration.json'
before configuring, temporarily overwriting the tracked default configuration
in the checkout. The vcpkg toolchain file only defaults VCPKG_MANIFEST_DIR to
CMAKE_SOURCE_DIR when it is not already defined, and reads it while processing
project(), so setting VCPKG_MANIFEST_DIR earlier -- before project() -- lets
vcpkg read a different vcpkg-configuration.json without ever touching the
tracked file.

Add a RESINSIGHT_VCPKG_PROFILE cache variable, implemented in the new
cmake/ResInsightVcpkgProfile.cmake (included from the root CMakeLists.txt
before project(), which is required for VCPKG_MANIFEST_DIR to take effect).
When set (e.g. to 'rhel8'), it copies vcpkg.json and
vcpkg-configuration-<profile>.json into a profile-specific directory under
the build tree and points VCPKG_MANIFEST_DIR there. The copy is regenerated on
every configure, so it can never drift from the root vcpkg.json.

overlay-ports/overlay-triplets entries (e.g. 'ThirdParty/vcpkg-overlay-ports')
are resolved by vcpkg relative to the directory vcpkg-configuration.json lives
in, so repo-relative 'ThirdParty/...' paths are rewritten to absolute paths
right after the copy is generated, keeping them valid from the new location.

Update the RHEL8 workflows and Dockerfile.rhel8 build-warmup stage to pass
-DRESINSIGHT_VCPKG_PROFILE=rhel8 instead of the cp step, and update
vcpkg-readme.md to describe the new mechanism.

* #14733 Use x64-linux-release vcpkg triplet explicitly in RHEL8 CI

The RHEL8 CI workflows and the Docker image's warmup/vcpkg-cache stages
did not set VCPKG_TARGET_TRIPLET/VCPKG_HOST_TRIPLET, so vcpkg fell back
to its plain x64-linux default triplet, which builds both debug and
release variants of every dependency even though the CI build is
Release-only. Set both to x64-linux-release consistently across the
image's vcpkg install, the warmup CMake configure, and the two
consuming workflows so the baked binary cache and the CI configure use
matching ABI hashes and skip the unused debug builds.
2026-09-11 22:49:30 +02:00
Magne Sjaastad 3052d3d554 Select RHEL8 vcpkg-configuration.json via CMake instead of renaming the tracked file
* Select RHEL8 vcpkg-configuration.json via CMake instead of renaming the tracked file

RHEL8 CI jobs previously ran 'cp vcpkg-configuration-rhel8.json vcpkg-configuration.json'
before configuring, temporarily overwriting the tracked default configuration
in the checkout. The vcpkg toolchain file only defaults VCPKG_MANIFEST_DIR to
CMAKE_SOURCE_DIR when it is not already defined, and reads it while processing
project(), so setting VCPKG_MANIFEST_DIR earlier -- before project() -- lets
vcpkg read a different vcpkg-configuration.json without ever touching the
tracked file.

Add a RESINSIGHT_VCPKG_PROFILE cache variable, implemented in the new
cmake/ResInsightVcpkgProfile.cmake (included from the root CMakeLists.txt
before project(), which is required for VCPKG_MANIFEST_DIR to take effect).
When set (e.g. to 'rhel8'), it copies vcpkg.json and
vcpkg-configuration-<profile>.json into a profile-specific directory under
the build tree and points VCPKG_MANIFEST_DIR there. The copy is regenerated on
every configure, so it can never drift from the root vcpkg.json.

overlay-ports/overlay-triplets entries (e.g. 'ThirdParty/vcpkg-overlay-ports')
are resolved by vcpkg relative to the directory vcpkg-configuration.json lives
in, so repo-relative 'ThirdParty/...' paths are rewritten to absolute paths
right after the copy is generated, keeping them valid from the new location.

Update the RHEL8 workflows and Dockerfile.rhel8 build-warmup stage to pass
-DRESINSIGHT_VCPKG_PROFILE=rhel8 instead of the cp step, and update
vcpkg-readme.md to describe the new mechanism.

* #14733 Use x64-linux-release vcpkg triplet explicitly in RHEL8 CI

The RHEL8 CI workflows and the Docker image's warmup/vcpkg-cache stages
did not set VCPKG_TARGET_TRIPLET/VCPKG_HOST_TRIPLET, so vcpkg fell back
to its plain x64-linux default triplet, which builds both debug and
release variants of every dependency even though the CI build is
Release-only. Set both to x64-linux-release consistently across the
image's vcpkg install, the warmup CMake configure, and the two
consuming workflows so the baked binary cache and the CI configure use
matching ABI hashes and skip the unused debug builds.
2026-09-11 22:49:16 +02:00
Magne Sjaastad 8f65fed265 Gate cvf logging bridge behind an experimental feature flag
Register a new "cvf-logging" experimental feature keyword and guard both
RiaCvfLoggingManager::initializeCvfLogging() and shutdownCvfLogging() with
RiaPreferencesSystem::current()->isFeatureEnabled("cvf-logging"). The bridge
now stays disabled by default, and can be turned on for troubleshooting via
Preferences -> System -> Experimental Features.

Also document how to enable and use it: added a step-by-step usage note to
RiaToCvfLogging.h (enable the feature, restart, use --loglevel debug to see
cvf's debug output, look for the 'cvf[<logger-name>]: ' prefix) and expanded
the experimental feature description shown in Preferences -> System ->
Experimental Features accordingly.
2026-09-11 10:22:22 -04:00
magnesj 792e41b9f4 Bump to version 2026.09.1-dev.02 2026-09-11 08:34:11 -04:00
Kristian Bendiksen c87fff08d6 Revert "#14714 Add opt-in native window for 3D viewers"
This reverts commit aa3ec82e1c.
2026-09-11 08:15:21 -04:00
Kristian Bendiksen 7b70f7e0a3 #14708 Fix black docked views by updating ADS
Update Qt Advanced Docking System to the parent-preservation fix cherry-picked onto CeetronSolutions master. Keep inactive docks hidden under the dock manager instead of temporarily making them top-level windows, avoiding disruption of QOpenGLWidget composition without enabling native windows.

Related to #14714. ADS fix cherry-picked from kriben/Qt-Advanced-Docking-System commit 7d6f2e71e374b95d600467602b770a8c8cf85d07.
2026-09-11 08:15:21 -04:00
magnesj 8ff1515bf4 vcpkg: Patch thrift for GCC 15 via overlay port
thrift 0.20.0#1, a transitive dependency of arrow, declares int64_t in lib/cpp/src/thrift/concurrency/Mutex.h without including <cstdint>. libstdc++ in GCC 15 no longer provides that header transitively through <memory>, so the port fails to compile at TSSLServerSocket.cpp with gcc-toolset-15. gcc-toolset-14 and older are unaffected, which is why RHEL8 CI has been green: it pins gcc-toolset-14 and restores thrift from the prebuilt cache in the CI image.

Vendor the port under ThirdParty/vcpkg-overlay-ports and add gcc15-cstdint.patch. An overlay port is used rather than a port-scoped flag in the x64-linux-release triplet because triplet_abi is a hash of the triplet file contents and is identical for every port, so editing a triplet invalidates the whole dependency set and forces a cold-cache rebuild.

Register overlay-ports in vcpkg-configuration-rhel8.json, which the RHEL8 workflow and Dockerfile.rhel8 copy over vcpkg-configuration.json. The bumped port-version misses the vcpkg binary cache baked into the current CI image, so the RHEL8 image needs a rebuild to pick up thrift 0.20.0#2.
2026-09-11 07:36:34 -04:00
Magne Sjaastad d0d472aaa2 #14723 Python: Pin grpcio-tools to keep protobuf 6 gencode loadable
grpcio-tools 1.82.0+ (including its 1.82.0 pre-releases) bundles a
protoc that emits protobuf 7.35.x gencode, which no protobuf 6 runtime
can load. Pin grpcio-tools below that (excluding pre-releases via the
'.dev0' trick, since a plain '<1.82' bound already let a 1.82.0rc
release slip through once) and add a CI check that verifies the
generated *_pb2.py files stay within the protobuf floor declared in
pyproject.toml.

Only the load-bearing bounds are kept: protobuf's '>=6.33.5' floor
(must match the emitted gencode) and grpcio-tools' '<1.82.0.dev0'
ceiling. Non-load-bearing bounds (protobuf's '<8', grpcio-tools'
'>=1.81') were dropped since they don't change dependency resolution
or protect against anything the above doesn't already cover.
2026-09-11 05:46:28 -04:00
magnesj d92091cc91 Fixes by clang-tidy 2026-09-11 01:20:47 -04:00
Magne Sjaastad ff7a6be7f4 #14722 Remove object from list before deleting it to avoid crash
RicDeleteItemExec::redo() and RicCloseCaseFeature::deleteEclipseCase()
deleted the pdm object before removing it from the owning
PdmChildArrayField. Destroying the object first could corrupt the
field's internal state before the list removal, causing a crash.

Swap the order so the object is removed from the list before it is
deleted.
2026-09-10 14:02:12 -04:00
magnesj 3f7aee5972 #14720 Probe std::stacktrace by linking instead of trusting the feature macro
libstdc++ defines __cpp_lib_stacktrace from GCC 13 on, but the implementation
lives in libstdc++exp, which some distributions do not ship (Red Hat's
gcc-toolset among them). The header-only feature test then reports the feature
as present and the link fails with undefined references to
std::__stacktrace_impl::_S_current.

Add cmake/StdStacktrace.cmake, which probes the feature by actually linking:
first with no extra library, then with stdc++exp. The result selects the link
library through RESINSIGHT_STACKTRACE_LIBRARIES, or defines
RIA_HAS_STD_STACKTRACE=0 project-wide when neither links, so the crash handler
compiles out its stack-trace capture and logs the signal only.

RiaMainTools.cpp and RiaOpenTelemetryManager.h now honour a
RIA_HAS_STD_STACKTRACE definition from the build system and only include
<stacktrace> when the feature is enabled.

Follow-up to #14045.
2026-09-10 08:33:38 -04:00
Magne Sjaastad aa3ec82e1c #14714 Add opt-in native window for 3D viewers
Two 3D views docked in the same tab group render black after switching
between tabs. Tracing the render path shows it completes correctly every
time: the offscreen FBO is complete, no OpenGL context is created or
destroyed on a tab switch, and the blit lands on the widget's own default
framebuffer in the widget's own context. The pixels are produced and never
reach the screen.

Without a native window a QOpenGLWidget is composited into the top-level
backing store, and that composition is not refreshed when the dock system
hides one viewer and shows another in the same tab group. A native surface
skips compositing, and the black view goes away.

On Wayland a native child widget becomes a subsurface with its own
rendering and stacking problems, so this is opt-in rather than default.
Set RESINSIGHT_ENABLE_NATIVE_GL_WIDGET=1 to enable it.

cafViewer now links cafPdmCore so the viewer can log through caf, which is
bridged to RiaLogging and therefore reaches the ResInsight log file.
2026-09-10 08:22:50 -04:00