Skip to content

Remove some dependencies from Rig to ApplicationLibCode#854

Open
magnesj wants to merge 11 commits intodevfrom
reduce-rig-rim-dependencies-01
Open

Remove some dependencies from Rig to ApplicationLibCode#854
magnesj wants to merge 11 commits intodevfrom
reduce-rig-rim-dependencies-01

Conversation

@magnesj
Copy link
Copy Markdown
Owner

@magnesj magnesj commented Apr 6, 2026

No description provided.

magnesj added 10 commits April 6, 2026 09:07
Remove dead updateFilters method which was the only Rim* dependency. Also remove the now-unused RiaApplication include.
…erpolationTools

The class has no Ria/Rim dependencies — pure numeric utility — so it belongs in the Rig layer. All 12 call sites updated to use the new name and include path.
Move GridPart, BorderSurface, Boundary and ElementSets into a new RigFaultReactivationEnums.h in namespace RigFaultReactivation. RimFaultReactivationEnums.h now includes the Rig header and provides using-aliases in namespace RimFaultReactivation for backward compatibility with all Rim* callers.
Change postProcessElementSets to take RigMainGrid* and RigActiveCellInfo* directly instead of RimEclipseCase*. The Rim caller (RimFaultReactivationModel) now extracts these from eclipseCase() before calling.
Replace RimFracture* constructor parameter with the four Rig/primitive values it extracted: fractureXf, wellRadius, perforationLength, fractureGrid. Callers in RimMeshFractureTemplate and RicExportFractureCompletionsImpl now unpack from RimFracture before calling.
Remove unused RimStimPlanFractureTemplate.h include. Add explicit RigFractureGrid.h include that was previously pulled in transitively.
Replace the RimSimWellInView* public entry point with explicit Rig/primitive parameters (eclipseCaseData, simWellData, timeStepIndex, shortBranchMergeThreshold). The former private wrapper is gone; the caller in RimSimWellInView::wellBranchesForVisualization now unpacks these values from the Rim objects before calling.
Replace the RimSimWellInView* entry point with explicit parameters (eclipseCaseData, simWellData, isAutoDetectBranches, useAllCellCenters). The static centerline method now delegates directly to calculateWellPipeCenterlineForTimeStep with timeStepIndex=-1. Both callers in RimSimWellInView unpack from the view/case before calling.
Replace RimEclipseCase* constructor parameter with RigEclipseCaseData*,
RigCaseCellResultsData*, and a std::function for uiToNativeTimeStepIndex.
Private methods now take RigActiveCellInfo* directly instead of going
through RimEclipseCase. Also removes RimEclipseCase.h from
RigFlowDiagResults.cpp.
@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Reduce Rig to ApplicationLibCode dependencies by decoupling from Rim types

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Move RiaInterpolationTools to ReservoirDataModel layer as RigInterpolationTools
• Decouple RigWellPathStimplanIntersector from RimFracture by accepting primitive parameters
• Decouple RigFaultReactivationModel from RimEclipseCase by accepting RigMainGrid and
  RigActiveCellInfo
• Move fault reactivation enums to Rig layer with backward-compatible Rim aliases
• Decouple well centerline calculators from Rim types by accepting explicit Rig parameters
• Decouple RigNumberOfFloodedPoreVolumesCalculator from RimEclipseCase
Diagram
flowchart LR
  RiaInterpolationTools["RiaInterpolationTools<br/>ApplicationLibCode"]
  RigInterpolationTools["RigInterpolationTools<br/>ReservoirDataModel"]
  RimTypes["Rim* Types<br/>ProjectDataModel"]
  RigTypes["Rig* Types<br/>ReservoirDataModel"]
  
  RiaInterpolationTools -- "moved to" --> RigInterpolationTools
  RigInterpolationTools -- "no dependency on" --> RimTypes
  RigInterpolationTools -- "uses" --> RigTypes
  
  RigWellPathStimplanIntersector["RigWellPathStimplanIntersector"]
  RigWellPathStimplanIntersector -- "decoupled from RimFracture" --> RigTypes
  
  RigFaultReactivationModel["RigFaultReactivationModel"]
  RigFaultReactivationModel -- "decoupled from RimEclipseCase" --> RigTypes
Loading

Grey Divider

File Changes

1. ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.h ✨ Enhancement +1/-1

Rename RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.h


2. ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.cpp ✨ Enhancement +11/-11

Rename RiaInterpolationTools to RigInterpolationTools implementation

ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.cpp


3. ApplicationLibCode/ReservoirDataModel/RigFaultReactivationEnums.h ✨ Enhancement +55/-0

Create new Rig-layer fault reactivation enums

ApplicationLibCode/ReservoirDataModel/RigFaultReactivationEnums.h


View more (36)
4. ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h ✨ Enhancement +6/-30

Update to use Rig enums with backward-compatible aliases

ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h


5. ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h ✨ Enhancement +7/-6

Decouple from RimEclipseCase, use Rig types

ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h


6. ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp ✨ Enhancement +8/-12

Update postProcessElementSets to accept Rig parameters

ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp


7. ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp ✨ Enhancement +0/-27

Remove dead updateFilters method and Rim dependencies

ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp


8. ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h ✨ Enhancement +5/-5

Update to use RigFaultReactivationEnums

ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h


9. ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp ✨ Enhancement +14/-17

Update enum references to use Rig namespace

ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp


10. ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h ✨ Enhancement +6/-5

Decouple from RimFracture, accept primitive parameters

ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h


11. ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp ✨ Enhancement +8/-16

Replace RimFracture parameter with extracted primitive values

ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp


12. ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp ✨ Enhancement +1/-1

Remove RimStimPlanFractureTemplate include, add RigFractureGrid

ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp


13. ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h ✨ Enhancement +4/-7

Decouple from RimSimWellInView, accept Rig parameters

ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h


14. ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp ✨ Enhancement +4/-39

Replace RimSimWellInView parameter with explicit Rig parameters

ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp


15. ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h ✨ Enhancement +4/-6

Decouple from RimSimWellInView, accept Rig parameters

ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h


16. ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp ✨ Enhancement +6/-95

Replace RimSimWellInView parameter with explicit Rig parameters

ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp


17. ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h ✨ Enhancement +11/-5

Decouple from RimEclipseCase, accept Rig parameters

ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h


18. ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp ✨ Enhancement +21/-35

Replace RimEclipseCase with RigEclipseCaseData and callback

ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp


19. ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp ✨ Enhancement +39/-4

Update to pass explicit parameters to decoupled calculators

ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp


20. ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp ✨ Enhancement +6/-1

Update to pass explicit parameters to decoupled postProcessElementSets

ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp


21. ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp


22. ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp ✨ Enhancement +5/-5

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp


23. ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp ✨ Enhancement +1/-1

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp


24. ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp ✨ Enhancement +1/-1

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp


25. ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp ✨ Enhancement +5/-5

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp


26. ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp


27. ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp


28. ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp ✨ Enhancement +1/-1

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp


29. ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp


30. ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp


31. ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp ✨ Enhancement +8/-3

Decouple from RimEclipseCase, pass explicit Rig parameters

ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp


32. ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp ✨ Enhancement +5/-1

Update RigWellPathStimplanIntersector call with primitive parameters

ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp


33. ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp ✨ Enhancement +5/-1

Update RigWellPathStimplanIntersector call with primitive parameters

ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp


34. ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp ✨ Enhancement +0/-1

Remove unused RigMswCenterLineCalculator include

ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp


35. ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp 🧪 Tests +15/-15

Update test includes to use RigInterpolationTools

ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp


36. ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp ✨ Enhancement +2/-2

Update include from RiaInterpolationTools to RigInterpolationTools

ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp


37. ApplicationLibCode/Application/Tools/CMakeLists_files.cmake ⚙️ Configuration changes +0/-2

Remove RiaInterpolationTools from ApplicationLibCode build

ApplicationLibCode/Application/Tools/CMakeLists_files.cmake


38. ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake ⚙️ Configuration changes +2/-0

Add RigInterpolationTools to ReservoirDataModel build

ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake


39. ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h Additional files +0/-2

...

ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review bot commented Apr 6, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX Issues (0)

Grey Divider


Action required

1. Flooded PV null deref🐞 Bug ☼ Reliability
Description
RigFlowDiagResults::calculateNumFloodedPV passes eclCase->eclipseCaseData() and
eclCase->results(...) to RigNumberOfFloodedPoreVolumesCalculator without validating they’re
non-null, but the calculator dereferences both immediately. This can crash when a
RimEclipseResultCase exists but hasn’t loaded case data/results yet.
Code

ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[R434-446]

+    auto eclCase = m_flowDiagSolution->firstAncestorOrThisOfType<RimEclipseResultCase>();
+    if ( !eclCase ) return;
+
   std::vector<QString> tracerNames;
   for ( const std::string& tracerName : resVarAddr.selectedTracerNames )
   {
       tracerNames.push_back( QString::fromUtf8( tracerName.c_str() ) );
   }
-    RigNumberOfFloodedPoreVolumesCalculator calc( eclipseCase, tracerNames );
+    RigNumberOfFloodedPoreVolumesCalculator calc(
+        eclCase->eclipseCaseData(),
+        eclCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL ),
+        [eclCase]( size_t idx ) { return eclCase->uiToNativeTimeStepIndex( idx ); },
+        tracerNames );
Evidence
The call site does not validate eclipseCaseData()/results() before constructing the calculator, and
both APIs are nullable. The calculator constructor dereferences eclipseCaseData and gridCellResults
immediately, so nulls will crash deterministically.

ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[432-447]
ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp[41-52]
ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp[178-189]
ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp[977-998]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`RigFlowDiagResults::calculateNumFloodedPV()` constructs `RigNumberOfFloodedPoreVolumesCalculator` with pointers returned by `eclCase->eclipseCaseData()` and `eclCase->results(...)` without checking for null. The calculator dereferences these pointers immediately, so any uninitialized/partially-loaded case will crash.
### Issue Context
Both `RimEclipseCase::eclipseCaseData()` and `RimEclipseCase::results()` can legally return `nullptr` when the underlying `m_rigEclipseCase` is not set.
### Fix Focus Areas
- Add explicit null checks for `eclipseCaseData()` and `results(...)` before constructing the calculator; if missing, either create empty result frames filled with `HUGE_VAL`/`inf` or return an error value and log.
- Add defensive `CAF_ASSERT`/`CVF_ASSERT` (or `gsl::not_null`) in `RigNumberOfFloodedPoreVolumesCalculator` constructor to enforce the new contract.
- ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[432-455]
- ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp[41-53]
- ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp[178-189]
- ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp[977-998]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Flooded PV missing result 🐞 Bug ≡ Correctness
Description
calculateNumFloodedPV returns early when it can’t find a RimEclipseResultCase ancestor, so
calculateDerivedResult returns nullptr for Water Flooded PV. This produces missing data without any
log/diagnostic signal to explain why the derived result is absent.
Code

ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[R434-436]

+    auto eclCase = m_flowDiagSolution->firstAncestorOrThisOfType<RimEclipseResultCase>();
+    if ( !eclCase ) return;
+
Evidence
The derived-result dispatcher assumes calculateNumFloodedPV populates scalar frames, but
calculateNumFloodedPV can return before calling createScalarResult, leaving findScalarResultFrame()
to return null (no logging).

ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[187-215]
ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[432-449]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
When no `RimEclipseResultCase` ancestor is found, `calculateNumFloodedPV()` returns immediately and does not create/update scalar frames for the derived variable. The caller (`calculateDerivedResult`) then returns `nullptr`, leading to missing data without explanation.
### Issue Context
`calculateDerivedResult()` explicitly calls `calculateNumFloodedPV()` and then expects `findScalarResultFrame()` to succeed.
### Fix Focus Areas
- Add a warning/error log when the ancestor case is missing.
- Ensure a defined output: either create empty frames (e.g., filled with `HUGE_VAL`/`inf`) before returning, or change `calculateDerivedResult()` to handle this path explicitly.
- ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[187-215]
- ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp[432-449]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment thread ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp Outdated
Prevent potential null dereference when eclipseCaseData() or results()
return nullptr for a partially loaded case. Add warning logs for both
the missing ancestor case and unloaded data scenarios.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant