From 551e4599427e28ba2d518a3397ba34008ee34df3 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Mon, 2 Sep 2019 15:12:07 +0200 Subject: [PATCH] #4655 Python Fix crash when streaming properties to ResInsight --- .../RiaGrpcPropertiesService.cpp | 39 +++++++++---------- .../RigCaseCellResultsData.cpp | 7 +++- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/ApplicationCode/GrpcInterface/RiaGrpcPropertiesService.cpp b/ApplicationCode/GrpcInterface/RiaGrpcPropertiesService.cpp index e97fe9454d..7446280ede 100644 --- a/ApplicationCode/GrpcInterface/RiaGrpcPropertiesService.cpp +++ b/ApplicationCode/GrpcInterface/RiaGrpcPropertiesService.cpp @@ -54,8 +54,8 @@ public: /// //-------------------------------------------------------------------------------------------------- RiaCellResultsStateHandler(bool clientStreamer = false) - : m_request(nullptr) - , m_eclipseCase(nullptr) + : m_eclipseCase(nullptr) + , m_porosityModel(RiaDefines::MATRIX_MODEL) , m_streamedValueCount(0u) , m_cellCount(0u) , m_clientStreamer(clientStreamer) @@ -83,26 +83,24 @@ public: //-------------------------------------------------------------------------------------------------- Status init(const PropertyRequest* request) { - m_request = request; - int caseId = request->case_request().id(); m_eclipseCase = dynamic_cast(RiaGrpcServiceInterface::findCase(caseId)); if (m_eclipseCase) { - auto porosityModel = static_cast(request->porosity_model()); - auto caseData = m_eclipseCase->eclipseCaseData(); - auto resultData = caseData->results(porosityModel); - auto resultType = static_cast(request->property_type()); - size_t timeStep = static_cast(request->time_step()); - - m_resultAddress = RigEclipseResultAddress(resultType, QString::fromStdString(request->property_name())); + m_porosityModel = static_cast(request->porosity_model()); + auto caseData = m_eclipseCase->eclipseCaseData(); + auto resultData = caseData->results(m_porosityModel); + auto resultType = static_cast(request->property_type()); + size_t timeStep = static_cast(request->time_step()); + + m_resultAddress = RigEclipseResultAddress(resultType, QString::fromStdString(request->property_name())); if (resultData->ensureKnownResultLoaded(m_resultAddress)) { if (timeStep < resultData->timeStepCount(m_resultAddress)) { - initResultAccess(caseData, request->grid_index(), porosityModel, timeStep, m_resultAddress); + initResultAccess(caseData, request->grid_index(), m_porosityModel, timeStep, m_resultAddress); return grpc::Status::OK; } return grpc::Status(grpc::NOT_FOUND, "No such time step"); @@ -120,7 +118,7 @@ public: scalarResultFrames.resize(timeStepCount); if (timeStep < resultData->timeStepCount(m_resultAddress)) { - initResultAccess(caseData, request->grid_index(), porosityModel, timeStep, m_resultAddress); + initResultAccess(caseData, request->grid_index(), m_porosityModel, timeStep, m_resultAddress); return grpc::Status::OK; } return grpc::Status(grpc::NOT_FOUND, "No such time step"); @@ -198,9 +196,8 @@ public: { if (m_eclipseCase) { - auto porosityModel = static_cast(m_request->porosity_model()); auto caseData = m_eclipseCase->eclipseCaseData(); - auto resultData = caseData->results(porosityModel); + auto resultData = caseData->results(m_porosityModel); resultData->recalculateStatistics(m_resultAddress); for (Rim3dView* view : m_eclipseCase->views()) @@ -221,12 +218,12 @@ protected: virtual void setCellResult(size_t currentCellIndex, double value) = 0; protected: - const rips::PropertyRequest* m_request; - RimEclipseCase* m_eclipseCase; - size_t m_streamedValueCount; - size_t m_cellCount; - bool m_clientStreamer; - RigEclipseResultAddress m_resultAddress; + RimEclipseCase* m_eclipseCase; + RiaDefines::PorosityModelType m_porosityModel; + size_t m_streamedValueCount; + size_t m_cellCount; + bool m_clientStreamer; + RigEclipseResultAddress m_resultAddress; }; class RiaActiveCellResultsStateHandler : public RiaCellResultsStateHandler diff --git a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp index 6ffbe5a255..929d7256c9 100644 --- a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp @@ -437,7 +437,12 @@ const RigActiveCellInfo* RigCaseCellResultsData::activeCellInfo() const //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::recalculateStatistics(const RigEclipseResultAddress& resVarAddr) { - m_statisticsDataCache[findScalarResultIndexFromAddress(resVarAddr)]->clearAllStatistics(); + size_t scalarResultIndex = findScalarResultIndexFromAddress(resVarAddr); + CVF_TIGHT_ASSERT(scalarResultIndex < m_cellScalarResults.size()); + if (scalarResultIndex < m_cellScalarResults.size()) + { + m_statisticsDataCache[scalarResultIndex]->clearAllStatistics(); + } } //--------------------------------------------------------------------------------------------------