mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-24 22:27:55 -05:00
Conductivity and width grids were built as separate lists; a missing width grid shortened one list and widthGrids[i] went out of range. Build the grids per definition so they stay paired. Crash stack (signature 642357244e71): [3] cvf::cref<RigFractureGrid>::cref(cvf::cref<RigFractureGrid> const&) at cvfObject.inl:410 [4] RigEnsembleFractureStatisticsCalculator::calculateProperty(...) at RigEnsembleFractureStatisticsCalculator.cpp:156 [5] RimStimPlanFractureTemplate::generatePropertiesTable() const at RimStimPlanFractureTemplate.cpp:791 [6] RimStimPlanFractureTemplate::loadDataAndUpdate() at RimStimPlanFractureTemplate.cpp:221 [7] RicMeshFractureTemplateHelper<RimStimPlanFractureTemplate>::createNewTemplatesFromFiles(...) at RicMeshFractureTemplateHelper.inl:149 [8] RicMeshFractureTemplateHelper<RimStimPlanFractureTemplate>::createNewTemplates(...) at RicMeshFractureTemplateHelper.inl:89 [9] RicNewStimPlanFractureTemplateFeature::createNewTemplates() at RicNewStimPlanFractureTemplateFeature.cpp:58 [10] RicNewStimPlanFractureTemplateFeature::onActionTriggered(bool) at RicNewStimPlanFractureTemplateFeature.cpp:78
75 lines
4.0 KiB
C++
75 lines
4.0 KiB
C++
#include "gtest/gtest.h"
|
|
|
|
#include "RigEnsembleFractureStatisticsCalculator.h"
|
|
#include "RigStimPlanFractureDefinition.h"
|
|
|
|
#include <QStringList>
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
/// A fracture definition without any conductivity result must not be indexed out of range
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RigEnsembleFractureStatisticsCalculatorTest, NoConductivityResultNames )
|
|
{
|
|
cvf::ref<RigStimPlanFractureDefinition> definition = new RigStimPlanFractureDefinition;
|
|
EXPECT_TRUE( definition->conductivityResultNames().isEmpty() );
|
|
|
|
std::vector<cvf::ref<RigStimPlanFractureDefinition>> definitions = { definition };
|
|
|
|
for ( auto propertyType : RigEnsembleFractureStatisticsCalculator::propertyTypes() )
|
|
{
|
|
if ( propertyType == RigEnsembleFractureStatisticsCalculator::PropertyType::FORMATION_DIP ) continue;
|
|
|
|
auto values = RigEnsembleFractureStatisticsCalculator::calculateProperty( definitions, propertyType );
|
|
EXPECT_TRUE( values.empty() );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
/// The default binning arguments must produce an invalid histogram for empty input, for both the
|
|
/// default and the custom binning code paths
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RigEnsembleFractureStatisticsCalculatorTest, EmptyDefinitionsProduceInvalidHistogram )
|
|
{
|
|
std::vector<cvf::ref<RigStimPlanFractureDefinition>> definitions;
|
|
|
|
{
|
|
RigHistogramData histogramData =
|
|
RigEnsembleFractureStatisticsCalculator::createStatisticsData( definitions,
|
|
RigEnsembleFractureStatisticsCalculator::PropertyType::HEIGHT,
|
|
50 );
|
|
EXPECT_FALSE( histogramData.isHistogramVectorValid() );
|
|
}
|
|
|
|
{
|
|
RigHistogramData histogramData =
|
|
RigEnsembleFractureStatisticsCalculator::createStatisticsData( definitions,
|
|
RigEnsembleFractureStatisticsCalculator::PropertyType::HEIGHT,
|
|
50,
|
|
RigHistogramCalculator::BinningMode::LOGARITHMIC,
|
|
std::make_pair( 1.0, 100.0 ),
|
|
RigHistogramCalculator::OutOfRangeHandling::INCLUDE_IN_BOUNDARY_BINS );
|
|
EXPECT_FALSE( histogramData.isHistogramVectorValid() );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
/// A definition with conductivity data but no width data must not produce mismatched grid lists
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RigEnsembleFractureStatisticsCalculatorTest, MissingWidthDataDoesNotCrash )
|
|
{
|
|
cvf::ref<RigStimPlanFractureDefinition> definition = new RigStimPlanFractureDefinition;
|
|
definition->addTimeStep( 1.0 );
|
|
definition->setDataAtTimeValue( "Conductivity", "md-m", { { 1.0, 1.0 }, { 1.0, 1.0 } }, 1.0 );
|
|
|
|
std::vector<cvf::ref<RigStimPlanFractureDefinition>> definitions = { definition };
|
|
|
|
auto width = RigEnsembleFractureStatisticsCalculator::calculateProperty( definitions,
|
|
RigEnsembleFractureStatisticsCalculator::PropertyType::WIDTH );
|
|
EXPECT_TRUE( width.empty() );
|
|
|
|
auto permeability =
|
|
RigEnsembleFractureStatisticsCalculator::calculateProperty( definitions,
|
|
RigEnsembleFractureStatisticsCalculator::PropertyType::PERMEABILITY );
|
|
EXPECT_TRUE( permeability.empty() );
|
|
}
|