Commit Graph
4281 Commits
Author SHA1 Message Date
jonjenssen 25ad7c5cb0 Fixes by clang-format 2026-10-19 10:47:56 +00:00
jonjenssen 27fbcdf2ec Build fixes after rebase/merge 2026-10-19 12:46:36 +02:00
Jon Jenssen d9d7507bcd Preferences framework
Add preferences for HPC/Batch scheduler
Add slurm and LSF support
Add batch job monitor
Support launcher specific user settings
Use internal timer, not global view timer
Add some more options to batch monitor
Improve naming
Add tests for job lists
2026-10-19 12:09:52 +02:00
Kristian Bendiksen 8dc1d56bd3 #14688 Sim Events: Add API to query event dates and wells
Add event date and well queries with date, owner and event type/keyword
filters to SimulatorEventsDocument and WellEventTimeline, including
latest_event_date() and wells_with_msw_events() for building the
export_msw_for_wells list.
2026-10-19 12:00:28 +02:00
Kristian Bendiksen 360c3c69db #14684 Simulator Events: Allow schedule generation without a grid case
Grid-dependent keywords (WELSPECS, COMPORD, COMPDAT, COMPLUMP, WELSEGS, COMPSEGS, WSEGVALV, WSEGAICD) are skipped and reported as WARNING comments in the schedule header, so production-data-only setups can still generate DATES and well control keywords.
2026-10-19 12:00:28 +02:00
Magne Sjaastad 4770abda8e Do not dispatch widget events while sending a crash report
Repainting while the crash handler pumps the event loop can crash again,
replacing the original report with one blaming the crash handler.

Call stack:
[0] performCrashLogging at ResInsight/ApplicationExeCode/RiaMainTools.cpp:178
[1] manageSegFailureSA(int, siginfo_t*, void*) at ResInsight/ApplicationExeCode/RiaMainTools.cpp:310
[21] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[30] RiaOpenTelemetryManager::reportCrash(int, std::basic_stacktrace<std::allocator<std::stacktrace_entry> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) at ResInsight/ApplicationLibCode/Application/Tools/Telemetry/RiaOpenTelemetryManager.cpp:429
[31] performCrashLogging at ResInsight/ApplicationExeCode/RiaMainTools.cpp:211
[32] manageSegFailureSA(int, siginfo_t*, void*) at ResInsight/ApplicationExeCode/RiaMainTools.cpp:310
[52] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[62] main at ResInsight/ApplicationExeCode/RiaMain.cpp:267
[63] __libc_start_main at :0
2026-10-19 09:41:18 +02:00
Magne Sjaastad a7cecc2ecf Return nullptr from gridByIndex for an out-of-range index
A 3D pick can report a grid index that is not valid for the view grid,
which read past the end of the local grids in release builds.

Call stack:
[0] performCrashLogging at ResInsight/ApplicationExeCode/RiaMainTools.cpp:178
[1] manageSegFailureSA(int, siginfo_t*, void*) at ResInsight/ApplicationExeCode/RiaMainTools.cpp:310
[3] cvf::ref<RigLocalGrid>::p() at ResInsight/Fwk/VizFwk/LibCore/cvfObject.inl:307
[4] RiuCellAndNncPickEventHandler::handle3dPickEvent(Ric3dPickEvent const&) at ResInsight/ApplicationLibCode/UserInterface/RiuCellAndNncPickEventHandler.cpp:397
[5] RiuViewerCommands::handlePickAction(int, int, QFlags<Qt::KeyboardModifier>) at ResInsight/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp:756
[9] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[15] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[26] main at ResInsight/ApplicationExeCode/RiaMain.cpp:267
[27] __libc_start_main at :0
2026-10-19 09:41:18 +02:00
Magne Sjaastad 596bbb8fe1 Fix crash in sector model export of an inverted cell box
A view without visible cells gives min > max, which underflowed the
sector size and threw std::length_error when allocating the arrays.

Call stack:
[0] performCrashLogging at ResInsight/ApplicationExeCode/RiaMainTools.cpp:178
[1] manageSegFailureSA(int, siginfo_t*, void*) at ResInsight/ApplicationExeCode/RiaMainTools.cpp:310
[5] manageTerminate() at ResInsight/ApplicationExeCode/RiaMainTools.cpp:249
[12] RigResdataGridConverter::exportGrid(QString const&, RigEclipseCaseData*, bool, cvf::Array<unsigned char> const*, cvf::Vector3<unsigned long> const&, cvf::Vector3<unsigned long> const&, cvf::Vector3<unsigned long> const&) at ResInsight/ApplicationLibCode/ReservoirDataModel/RigResdataGridConverter.cpp:83
[13] RicExportEclipseSectorModelFeature::exportGrid(RimEclipseView*, RicExportEclipseSectorModelUi const&) at ResInsight/ApplicationLibCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp:167
[14] RicExportEclipseSectorModelFeature::executeCommand(RimEclipseView*, RicExportEclipseSectorModelUi const&, QString const&) at ResInsight/ApplicationLibCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp:141
[15] RicExportEclipseSectorModelFeature::openDialogAndExecuteCommand(RimEclipseView*) at ResInsight/ApplicationLibCode/Commands/ExportCommands/RicExportEclipseSectorModelFeature.cpp:118
[16] caf::CmdFeature::actionTriggered(bool) at ResInsight/Fwk/AppFwk/cafCommand/cafCmdFeature.cpp:176
[25] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[31] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[43] RiuViewerCommands::displayContextMenu(QMouseEvent*) at ResInsight/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp:702
[47] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[53] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1879
[64] main at ResInsight/ApplicationExeCode/RiaMain.cpp:267
[65] __libc_start_main at :0
2026-10-19 09:41:18 +02:00
Kristian Bendiksen b2a85fb7a4 #14960 Sim Events: Use first segment MD as user defined reference MD
When a SEGMENT event is applied (SIMEVENTS mapping or timeline
set_timestamp), set the segment collection Reference MD Type to User
Defined and the reference MD to the start MD of the first segment
interval, so WELSEGS TOP_LENGTH matches the first segment.
2026-10-19 09:28:29 +02:00
Kristian Bendiksen 8174e21561 #14961 Sim Events: Support segment lengths in SEGMENT events
Add FIXED_SEGMENT_LENGTH, MIN_SEGMENT_LENGTH and MAX_SEGMENT_LENGTH to
SIMEVENTS SEGMENT events. The lengths are stored on RimWellEventSegment
(new AddSegmentEvent arguments, 0 = not set) and applied to the segment
interval when the timeline is applied. Invalid combinations (fixed with
min/max, min > max, non-positive values) are reported as parse errors.
2026-10-19 09:28:29 +02:00
Kristian Bendiksen c56e921160 #14958 Sim Events: Move PRESSURE_COMPONENTS to WELSPECS
Move Pressure Drop and Length and Depth from the segment collection to
the well path completion settings. PRESSURE_COMPONENTS is now a dated
WELSPECS attribute used for the WELSEGS header at export, and is
rejected on SEGMENT events.
2026-10-19 09:28:29 +02:00
Kristian Bendiksen 2f86d4c210 #14956: Rename well event Tubing to Segment
Rename RimWellEventTubing to RimWellEventSegment (keyword WellEventSegment),
EventType::TUBING to SEGMENT, and the scripting method AddTubingEvent to
AddSegmentEvent (Python: add_segment_event). Update the project tree label,
schedule comments, Python helpers, examples, tests and docs.
2026-10-19 09:28:29 +02:00
Magne Sjaastad 3de9b3c1aa Update toggle icon automatically on UI change and after read 2026-10-17 13:23:22 +02:00
Magne Sjaastad 95bee61f91 Replace tree item tags attribute with virtual PdmUiObjectHandle::treeItemTags() 2026-10-17 13:23:22 +02:00
Magne Sjaastad b4e2cd4126 Address review comments: use slider setRange for polygon depth, restore seismic clip min 2026-10-17 13:23:22 +02:00
Magne Sjaastad 43a4378cee ResInsight: Migrate commands, UI and application code to attribute map 2026-10-17 13:23:22 +02:00
Magne Sjaastad 064ac45da0 ResInsight: Migrate project data model to attribute map 2026-10-17 13:23:22 +02:00
Magne Sjaastad c57200331e ResInsight: Migrate summary data model to attribute map 2026-10-17 13:23:22 +02:00
hnilandClaude Opus 5.5 c6090249ad Scripting: loadCase opens geomechanical cases and the grid's .pvd surfaces
loadCase only went through the grid case import, so .odb, .inp and .pvd
files could not be opened from Python or other gRPC clients. Open them
the way the GUI does and return the GeoMechCase.

The GUI import also imports "<CASE>*.pvd" surfaces next to the grid
file (e.g. fractures written by the simulator); loadCase now does the
same, so a scripted load gives the same project as the GUI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:14:57 +02:00
Magne Sjaastad 597a7775d9 #8370: Address review comments
Keep original additional summary files on Save As, reject cases combined with ensembles, keep unrestored additional file mappings, support growing file sets, update short names on ensemble import, simplify aggregator and example.
2026-10-16 09:57:12 +02:00
Magne Sjaastad 60876e0bdd #8370: Restore user-defined vectors for file set ensembles and keep project portable 2026-10-16 09:57:12 +02:00
Magne Sjaastad 62b040ac42 #8370: Add Project.summary_ensembles and summary_plot_collection 2026-10-16 09:57:12 +02:00
Magne Sjaastad fac5eb5f3b #8735: Add SummaryPlotCollection multi plot commands and subplots 2026-10-16 09:57:12 +02:00
Magne Sjaastad 1272ec7bd0 #14689: Expose EnsembleCurveSet and fix returned class names in Python generator 2026-10-16 09:57:12 +02:00
Magne Sjaastad 0d64a52115 #8370: Include Python-defined vectors in ensemble data sources and selection 2026-10-16 09:57:12 +02:00
Magne Sjaastad 038dabc77b #8370: Create summary addresses and handle unknown vectors when setting summary values 2026-10-16 09:57:12 +02:00
magnesj 36f649b8ad Fixes by clang-format 2026-10-15 18:05:59 +02:00
Magne Sjaastad 3fea49441d Use consistent formation colors in RFT plots based on formations file order
Palette colors for formations missing from the legend were assigned by position in the per-well zone list, so the same formation could get different colors for different wells. Assign them by order of first appearance in the formations file instead.
2026-10-15 18:01:46 +02:00
Magne Sjaastad c323846ec5 #13475: Unified LGR completion export tables and single WELSPECL entry per well
* Export LGR completions in single COMPDATL, WPIMULTL and COMPLMPL tables
* Export only first WELSPECL entry per well
* Move LGR test well path to subfolder and format test
2026-10-15 15:25:49 +02:00
Magne Sjaastad 1d7d0eb763 Show RFT correlation zone bars on both sides and make them wider
The selected-formation bars in the RFT track plots are now drawn on both edges and are 50% wider.
2026-10-15 15:24:47 +02:00
Magne Sjaastad 5d0c011779 Nested hybrid grid: reject active-cell-only grids and fix setCellResultIndex assert
Active-cell grids report a fixed total cell count, so appended LGR cells overflowed the active cell info array. Return an error instead, and assert on the reservoir cell index.
2026-10-15 13:21:55 +02:00
Kristian Bendiksen bcfa6e9fea Nested hybrid grid: Move well connections to reconstructed LGR cells
Well connections read from the restart file referenced the original refined
cells in the main grid. These cells are hidden after reconstruction, but the
well cell visualization does not check the invalid flag, so they were still
drawn. Re-point well connections and well heads to the corresponding LGR cells
and recompute the well cells per grid.
2026-10-15 13:21:55 +02:00
Kristian Bendiksen a789bdb4b4 Well target mapping: option to avoid growing across faults
Add AvoidFaults option that blocks cluster growth across fault faces and
fault NNCs, and generate a WELL_TARGET_FAULT_FACES result with the number
of fault faces per cell.
2026-10-15 12:56:18 +02:00
Kristian Bendiksen 19f94395a7 Well target mapping: separate start and grow data filters
Add a start data filter used when finding starting cells. If empty, the
grow filter is used. An empty grow filter allows growing anywhere.
2026-10-15 12:56:18 +02:00
jonjenssen da4e6e15cd Make sure we recreate all 3d views when main window is reopened. 2026-10-14 16:16:54 +02:00
Magne Sjaastad f8b4da83e8 #13306: Fix local grid connection summary vectors (LCGFRU) missing for ESMRY
Categorize LCGFRU/LCOFRU/LCWFRU as SUMMARY_WELL_CONNECTION_LGR and fix token count check when parsing LGR connection addresses.
2026-10-14 10:45:52 +02:00
Magne Sjaastad 71be2d0911 #14911: Use summary vector short name as axis title when description is missing 2026-10-14 10:45:36 +02:00
Kristian Bendiksen 04df5d0309 Fix MSW segmentation test initializers 2026-10-14 10:45:21 +02:00
Magne Sjaastad c6927648e8 #11172: Add auto Arps decline curve type
Add auto Arps decline curve fitting, document the algorithm and reference the AutoDCA repository.
2026-10-13 12:44:00 +02:00
Magne Sjaastad 393d32578e #11172: Create decline curves with distinct colors and tree-ordered legend 2026-10-13 12:44:00 +02:00
Magne Sjaastad 56944d8b1b #11172: Show decline curve equations in plot and select time by date 2026-10-13 12:44:00 +02:00
Magne Sjaastad a374d6f693 #11172: Support stacked overlay frames in all four plot corners 2026-10-13 12:44:00 +02:00
Magne Sjaastad 9f0b9d2840 #11172: Move decline curve math to RigDeclineCurveCalculator
Add least squares regression as an alternative to the start/end point fit.
2026-10-13 12:44:00 +02:00
Magne Sjaastad e217ffb5c6 Enable flow diagnostics for grids imported with opm-common
* Update flowdiag-app submodule with grid source abstraction
* Add opm-common grid source for flow diagnostics
* Enable flow diagnostics for grids imported with opm-common
* Test flow graph from opm-common matches resdata
* Test flow diagnostics results are equal for all grid readers
* Document EGrid constructor behavior in flow diagnostics grid source
2026-10-13 12:43:01 +02:00
Magne Sjaastad 96bb127446 #14804: Make segment length fields scriptable and check them in Python test 2026-10-12 19:12:08 +02:00
Magne Sjaastad 97d132685b #14804: Address review comments on segment placement, ISEG gRPC, min/max validation 2026-10-12 19:12:08 +02:00
Magne Sjaastad d8f346e9ab #14804 MSW export: Segmentation controls per interval and around perforations
Add fixed, min and max segment length per segment interval (fixed is exclusive with min/max, min and max can be combined), connect COMPSEGS rows to the nearest segment node, and add collection options for a single segment before the first and after the last perforation.
2026-10-12 19:12:08 +02:00
Magne Sjaastad 2f7de9469f #13568 MSW export: Optionally export ISEG in COMPSEGS
Fixes #13568.
2026-10-12 19:12:08 +02:00
Magne Sjaastad fcaf62dae5 #14906: Fix crash in ternary result coloring when eclipse case is missing
Crash signature 1a259402c999.

RivTernaryTextureCoordsCreator calls cellResultColors->eclipseCase()->eclipseCaseData() unchecked in both constructors, and then eclipseCase->gridCellToResultWellIndex(). eclipseCase() is a PdmPointer and is null once the case is gone.

Read the case data only when the case exists, and create the pipe-in-cell evaluator only when the case data and well collection exist.

Call stack:
[3] RimEclipseCase::eclipseCaseData() at ResInsight/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp:196
[4] RivTernaryTextureCoordsCreator::RivTernaryTextureCoordsCreator(RimEclipseResultDefinition const*, RimTernaryLegendConfig*, RimSimWellInViewCollection*, unsigned long, unsigned long, cvf::StructGridQuadToCellFaceMapper const*) at ResInsight/ApplicationLibCode/ModelVisualization/RivTernaryTextureCoordsCreator.cpp:55
[5] RivGridPartMgr::updateCellResultColor(unsigned long, RimEclipseCellColors*) at ResInsight/ApplicationLibCode/ModelVisualization/RivGridPartMgr.cpp:295
[6] RivReservoirPartMgr::updateCellResultColor(unsigned long, RimEclipseCellColors*) at ResInsight/ApplicationLibCode/ModelVisualization/RivReservoirPartMgr.cpp:129
[7] RimEclipseView::updateVisibleCellColors() at ResInsight/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp:1119
[8] RimEclipseView::onUpdateDisplayModelForCurrentTimeStep() at ResInsight/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp:951
[9] Rim3dView::updateDisplayModelForCurrentTimeStepAndRedraw() at ResInsight/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp:673
[10] RiuViewer::setCurrentFrame(int) at ResInsight/ApplicationLibCode/UserInterface/RiuViewer.cpp:1042
[11] RimViewLinker::updateTimeStep(Rim3dView*, int) at ResInsight/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp:119
[12] RiuViewer::slotSetCurrentFrame(int) at ResInsight/ApplicationLibCode/UserInterface/RiuViewer.cpp:365
[14] caf::FrameAnimationControl::changeFrame(int) at ResInsight/cmakebuild/Fwk/AppFwk/cafAnimControl/cafAnimControl_autogen/EWIEGA46WW/moc_cafFrameAnimationControl.cpp:321
[24] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1828
[30] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1828
[41] main at ResInsight/ApplicationExeCode/RiaMain.cpp:267
[42] __libc_start_main at :0
2026-10-12 19:00:45 +02:00
Magne Sjaastad c1cf37b792 #14906: PolygonFilter: Invalidate cached cells on case change and guard cell index
Crash signature 43cb673b7481.

RimPolygonFilter::updateCellIndexFilter writes visibility using cached m_cells indices without a bounds check. The cache is cleared only in onGridChanged(), so when the Eclipse case changes to a grid with fewer cells the stale indices write past the end of the array.

Override setCase() to clear the cached cells, and skip indices outside the visibility array.

Call stack:
[3] RimPolygonFilter::updateCellIndexFilter(cvf::Array<unsigned char>*, cvf::Array<unsigned char>*, int) at ResInsight/ApplicationLibCode/ProjectDataModel/CellFilters/RimPolygonFilter.cpp:399
[4] RimCellFilterCollection::updateCellVisibilityByIndex(cvf::Array<unsigned char>*, cvf::Array<unsigned char>*, unsigned long) const at ResInsight/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilterCollection.cpp:605
[5] RivReservoirViewPartMgr::computeFilterVisibility(RivCellSetEnum, cvf::Array<unsigned char>*, RigGridBase const*, cvf::Array<unsigned char> const*, RimCellFilterCollection const*) at ResInsight/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp:755
[6] RivReservoirViewPartMgr::computeVisibility(cvf::Array<unsigned char>*, RivCellSetEnum, RigGridBase*, unsigned long) at ResInsight/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp:352
[7] RivReservoirViewPartMgr::createGeometry(RivCellSetEnum) at ResInsight/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp:278
[8] RivReservoirViewPartMgr::appendStaticGeometryPartsToModel(cvf::ModelBasicList*, RivCellSetEnum, std::vector<unsigned long, std::allocator<unsigned long> > const&) at ResInsight/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp:205
[9] RimEclipseView::onCreateDisplayModel() at ResInsight/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp:737
[10] Rim3dView::createDisplayModelAndRedraw() at ResInsight/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp:718
[11] RiaViewRedrawScheduler::updateAndRedrawScheduledViews() at ResInsight/ApplicationLibCode/Application/RiaViewRedrawScheduler.cpp:93
[16] RiaGuiApplication::notify(QObject*, QEvent*) at ResInsight/ApplicationLibCode/Application/RiaGuiApplication.cpp:1828
[26] main at ResInsight/ApplicationExeCode/RiaMain.cpp:267
[27] __libc_start_main at :0
2026-10-12 19:00:45 +02:00