2018-08-09 04:12:05 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
2019-01-09 08:21:38 -06:00
|
|
|
// Copyright (C) 2018- Equinor ASA
|
2018-08-09 04:12:05 -05:00
|
|
|
//
|
|
|
|
// ResInsight is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
//
|
|
|
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
|
|
|
// for more details.
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include "RigEclipseToStimPlanCalculator.h"
|
|
|
|
|
|
|
|
#include "RiaLogging.h"
|
2022-09-28 04:27:53 -05:00
|
|
|
#include "RiaThermalFractureDefines.h"
|
2022-09-26 11:31:46 -05:00
|
|
|
#include "RiaWeightedMeanCalculator.h"
|
2018-08-09 04:12:05 -05:00
|
|
|
|
|
|
|
#include "RigActiveCellInfo.h"
|
|
|
|
#include "RigCaseCellResultsData.h"
|
|
|
|
#include "RigCellGeometryTools.h"
|
|
|
|
#include "RigEclipseCaseData.h"
|
2022-09-26 11:31:46 -05:00
|
|
|
#include "RigEclipseToStimPlanCellTransmissibilityCalculator.h"
|
|
|
|
#include "RigEclipseToThermalCellTransmissibilityCalculator.h"
|
2018-08-09 04:12:05 -05:00
|
|
|
#include "RigFractureCell.h"
|
|
|
|
#include "RigFractureGrid.h"
|
|
|
|
#include "RigFractureTransmissibilityEquations.h"
|
|
|
|
#include "RigHexIntersectionTools.h"
|
|
|
|
#include "RigMainGrid.h"
|
|
|
|
#include "RigResultAccessorFactory.h"
|
2022-09-28 04:27:53 -05:00
|
|
|
#include "RigThermalFractureDefinition.h"
|
2018-08-09 04:12:05 -05:00
|
|
|
#include "RigTransmissibilityCondenser.h"
|
|
|
|
|
|
|
|
#include "RimEclipseCase.h"
|
2018-09-11 06:22:57 -05:00
|
|
|
#include "RimEllipseFractureTemplate.h"
|
2018-08-09 04:12:05 -05:00
|
|
|
#include "RimFracture.h"
|
|
|
|
#include "RimFractureContainmentTools.h"
|
2022-09-05 11:30:15 -05:00
|
|
|
#include "RimMeshFractureTemplate.h"
|
2022-09-26 11:31:46 -05:00
|
|
|
#include "RimThermalFractureTemplate.h"
|
2018-08-09 04:12:05 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
RigEclipseToStimPlanCalculator::RigEclipseToStimPlanCalculator( const RimEclipseCase* caseToApply,
|
|
|
|
cvf::Mat4d fractureTransform,
|
|
|
|
double skinFactor,
|
|
|
|
double cDarcy,
|
|
|
|
const RigFractureGrid& fractureGrid,
|
|
|
|
const RimFracture* fracture )
|
|
|
|
: m_case( caseToApply )
|
|
|
|
, m_fractureTransform( fractureTransform )
|
|
|
|
, m_fractureSkinFactor( skinFactor )
|
|
|
|
, m_cDarcy( cDarcy )
|
|
|
|
, m_fractureGrid( fractureGrid )
|
|
|
|
, m_fracture( fracture )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
|
|
|
computeValues();
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RigEclipseToStimPlanCalculator::computeValues()
|
|
|
|
{
|
2023-02-26 03:48:40 -06:00
|
|
|
auto reservoirCellIndicesOpenForFlow = RimFractureContainmentTools::reservoirCellIndicesOpenForFlow( m_case, m_fracture );
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2023-04-13 00:05:53 -05:00
|
|
|
auto resultValueAtIJ = []( const std::vector<std::vector<double>>& values, const RigFractureGrid& fractureGrid, size_t i, size_t j )
|
|
|
|
{
|
2023-02-26 03:48:40 -06:00
|
|
|
if ( values.empty() ) return HUGE_VAL;
|
2022-10-03 06:22:26 -05:00
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
size_t adjustedI = i + 1;
|
|
|
|
size_t adjustedJ = j + 1;
|
2022-10-03 06:22:26 -05:00
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
if ( adjustedI >= fractureGrid.iCellCount() + 1 || adjustedJ >= fractureGrid.jCellCount() + 1 ) return HUGE_VAL;
|
2022-10-03 06:22:26 -05:00
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
return values[adjustedJ][adjustedI];
|
|
|
|
};
|
2022-10-03 06:22:26 -05:00
|
|
|
|
|
|
|
std::vector<std::vector<double>> injectivityFactors;
|
|
|
|
std::vector<std::vector<double>> viscosities;
|
|
|
|
std::vector<std::vector<double>> filterCakeMobilities;
|
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
RimThermalFractureTemplate* thermalFractureTemplate = dynamic_cast<RimThermalFractureTemplate*>( m_fracture->fractureTemplate() );
|
2022-10-03 06:22:26 -05:00
|
|
|
|
|
|
|
if ( thermalFractureTemplate != nullptr )
|
|
|
|
{
|
|
|
|
auto unitSystem = thermalFractureTemplate->fractureDefinition()->unitSystem();
|
|
|
|
size_t timeStep = thermalFractureTemplate->activeTimeStepIndex();
|
|
|
|
|
|
|
|
injectivityFactors =
|
2023-02-26 03:48:40 -06:00
|
|
|
thermalFractureTemplate->resultValues( RiaDefines::injectivityFactorResultName(),
|
|
|
|
RiaDefines::getExpectedThermalFractureUnit( RiaDefines::injectivityFactorResultName(),
|
|
|
|
unitSystem ),
|
2022-10-03 06:22:26 -05:00
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
timeStep );
|
2022-10-03 06:22:26 -05:00
|
|
|
|
2023-02-26 03:48:40 -06:00
|
|
|
viscosities =
|
|
|
|
thermalFractureTemplate->resultValues( RiaDefines::viscosityResultName(),
|
|
|
|
RiaDefines::getExpectedThermalFractureUnit( RiaDefines::viscosityResultName(), unitSystem ),
|
|
|
|
timeStep );
|
2022-10-03 06:22:26 -05:00
|
|
|
|
|
|
|
filterCakeMobilities =
|
2023-02-26 03:48:40 -06:00
|
|
|
thermalFractureTemplate->resultValues( RiaDefines::filterCakeMobilityResultName(),
|
|
|
|
RiaDefines::getExpectedThermalFractureUnit( RiaDefines::filterCakeMobilityResultName(),
|
|
|
|
unitSystem ),
|
|
|
|
timeStep );
|
2022-10-03 06:22:26 -05:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( size_t i = 0; i < m_fractureGrid.fractureCells().size(); i++ )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2018-09-11 06:22:57 -05:00
|
|
|
const RigFractureCell& fractureCell = m_fractureGrid.fractureCells()[i];
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !fractureCell.hasNonZeroConductivity() ) continue;
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2022-09-26 11:31:46 -05:00
|
|
|
std::unique_ptr<RigEclipseToStimPlanCellTransmissibilityCalculator> eclToFractureTransCalc;
|
|
|
|
|
2022-10-03 06:22:26 -05:00
|
|
|
if ( thermalFractureTemplate != nullptr )
|
2022-09-26 11:31:46 -05:00
|
|
|
{
|
2022-10-03 06:22:26 -05:00
|
|
|
size_t cellI = fractureCell.getI();
|
|
|
|
size_t cellJ = fractureCell.getJ();
|
|
|
|
|
|
|
|
double injectivityFactor = resultValueAtIJ( injectivityFactors, m_fractureGrid, cellI, cellJ );
|
|
|
|
double viscosity = resultValueAtIJ( viscosities, m_fractureGrid, cellI, cellJ );
|
|
|
|
double filterCakeMobility = resultValueAtIJ( filterCakeMobilities, m_fractureGrid, cellI, cellJ );
|
2022-09-26 11:31:46 -05:00
|
|
|
|
|
|
|
// Assumed value
|
|
|
|
double relativePermeability = 1.0;
|
|
|
|
|
|
|
|
auto filterPressureDropType = thermalFractureTemplate->filterCakePressureDropType();
|
2023-02-26 03:48:40 -06:00
|
|
|
eclToFractureTransCalc = std::make_unique<RigEclipseToThermalCellTransmissibilityCalculator>( m_case,
|
|
|
|
m_fractureTransform,
|
|
|
|
m_fractureSkinFactor,
|
|
|
|
m_cDarcy,
|
|
|
|
fractureCell,
|
|
|
|
m_fracture,
|
|
|
|
filterPressureDropType,
|
|
|
|
injectivityFactor,
|
|
|
|
filterCakeMobility,
|
|
|
|
viscosity,
|
|
|
|
relativePermeability );
|
2022-09-26 11:31:46 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2023-02-26 03:48:40 -06:00
|
|
|
eclToFractureTransCalc = std::make_unique<RigEclipseToStimPlanCellTransmissibilityCalculator>( m_case,
|
|
|
|
m_fractureTransform,
|
|
|
|
m_fractureSkinFactor,
|
|
|
|
m_cDarcy,
|
|
|
|
fractureCell,
|
|
|
|
m_fracture );
|
2022-09-26 11:31:46 -05:00
|
|
|
}
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2022-09-26 11:31:46 -05:00
|
|
|
eclToFractureTransCalc->computeValues( reservoirCellIndicesOpenForFlow );
|
2023-02-26 03:48:40 -06:00
|
|
|
const std::vector<size_t>& fractureCellContributingEclipseCells = eclToFractureTransCalc->globalIndiciesToContributingEclipseCells();
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !fractureCellContributingEclipseCells.empty() )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
m_singleFractureCellCalculators.emplace( i, std::move( eclToFractureTransCalc ) );
|
2018-08-09 04:12:05 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
using CellIdxSpace = RigTransmissibilityCondenser::CellAddress;
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-02-26 03:48:40 -06:00
|
|
|
void RigEclipseToStimPlanCalculator::appendDataToTransmissibilityCondenser( bool useFiniteConductivityInFracture,
|
2019-09-06 03:40:57 -05:00
|
|
|
RigTransmissibilityCondenser* condenser ) const
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( const auto& eclToFractureTransCalc : m_singleFractureCellCalculators )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2019-11-04 08:08:09 -06:00
|
|
|
const std::vector<size_t>& fractureCellContributingEclipseCells =
|
2022-09-26 11:31:46 -05:00
|
|
|
eclToFractureTransCalc.second->globalIndiciesToContributingEclipseCells();
|
2018-08-09 04:12:05 -05:00
|
|
|
|
|
|
|
const std::vector<double>& fractureCellContributingEclipseCellTransmissibilities =
|
2022-09-26 11:31:46 -05:00
|
|
|
eclToFractureTransCalc.second->contributingEclipseCellTransmissibilities();
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2018-09-11 06:22:57 -05:00
|
|
|
size_t stimPlanCellIndex = eclToFractureTransCalc.first;
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( size_t i = 0; i < fractureCellContributingEclipseCells.size(); i++ )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( useFiniteConductivityInFracture )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2023-02-26 03:48:40 -06:00
|
|
|
condenser->addNeighborTransmissibility( { true, CellIdxSpace::ECLIPSE, fractureCellContributingEclipseCells[i] },
|
2020-11-06 03:46:38 -06:00
|
|
|
{ false, CellIdxSpace::STIMPLAN, stimPlanCellIndex },
|
2019-09-06 03:40:57 -05:00
|
|
|
fractureCellContributingEclipseCellTransmissibilities[i] );
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2023-02-26 03:48:40 -06:00
|
|
|
condenser->addNeighborTransmissibility( { true, CellIdxSpace::ECLIPSE, fractureCellContributingEclipseCells[i] },
|
2020-11-06 03:46:38 -06:00
|
|
|
{ true, CellIdxSpace::WELL, 1 },
|
2019-09-06 03:40:57 -05:00
|
|
|
fractureCellContributingEclipseCellTransmissibilities[i] );
|
2018-08-09 04:12:05 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-11 06:22:57 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2018-09-28 06:42:02 -05:00
|
|
|
///
|
2018-09-11 06:22:57 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
double RigEclipseToStimPlanCalculator::totalEclipseAreaOpenForFlow() const
|
|
|
|
{
|
|
|
|
double area = 0.0;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( const auto& singleCellCalc : m_singleFractureCellCalculators )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
double cellArea = singleCellCalc.second->areaOpenForFlow();
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2018-09-28 06:42:02 -05:00
|
|
|
area += cellArea;
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return area;
|
|
|
|
}
|
|
|
|
|
2018-08-09 04:12:05 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2018-11-21 06:44:31 -06:00
|
|
|
double RigEclipseToStimPlanCalculator::areaWeightedMatrixPermeability() const
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2018-09-14 02:12:05 -05:00
|
|
|
RiaWeightedMeanCalculator<double> calc;
|
2018-08-09 04:12:05 -05:00
|
|
|
|
2022-09-26 11:31:46 -05:00
|
|
|
for ( const auto& singleCellCalc : m_singleFractureCellCalculators )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
const std::vector<double>& areas = singleCellCalc.second->contributingEclipseCellIntersectionAreas();
|
|
|
|
const std::vector<double>& permeabilities = singleCellCalc.second->contributingEclipseCellPermeabilities();
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2022-09-26 11:31:46 -05:00
|
|
|
if ( areas.size() == permeabilities.size() )
|
|
|
|
{
|
|
|
|
for ( size_t i = 0; i < areas.size(); i++ )
|
2018-11-21 06:44:31 -06:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
calc.addValueAndWeight( permeabilities[i], areas[i] );
|
2018-11-21 06:44:31 -06:00
|
|
|
}
|
|
|
|
}
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
2021-02-26 07:27:59 -06:00
|
|
|
return calc.validAggregatedWeight() ? calc.weightedMean() : 0.0;
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
double RigEclipseToStimPlanCalculator::areaWeightedWidth() const
|
|
|
|
{
|
|
|
|
double width = 0.0;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
auto ellipseFractureTemplate = dynamic_cast<const RimEllipseFractureTemplate*>( m_fracture->fractureTemplate() );
|
|
|
|
if ( ellipseFractureTemplate )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
|
|
|
width = ellipseFractureTemplate->width();
|
|
|
|
}
|
|
|
|
|
2022-09-05 11:30:15 -05:00
|
|
|
auto stimPlanFractureTemplate = dynamic_cast<const RimMeshFractureTemplate*>( m_fracture->fractureTemplate() );
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( stimPlanFractureTemplate )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
|
|
|
auto widthValues = stimPlanFractureTemplate->widthResultValues();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !widthValues.empty() )
|
2018-08-09 04:12:05 -05:00
|
|
|
{
|
2018-10-19 08:15:03 -05:00
|
|
|
RiaWeightedMeanCalculator<double> calc;
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( const auto& singleCellCalc : m_singleFractureCellCalculators )
|
2018-10-19 08:15:03 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
double cellArea = singleCellCalc.second->areaOpenForFlow();
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2018-10-19 08:15:03 -05:00
|
|
|
size_t globalStimPlanCellIndex = singleCellCalc.first;
|
|
|
|
double widthValue = widthValues[globalStimPlanCellIndex];
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2022-09-05 11:30:15 -05:00
|
|
|
if ( !std::isinf( widthValue ) && !std::isnan( widthValue ) )
|
|
|
|
{
|
|
|
|
calc.addValueAndWeight( widthValue, cellArea );
|
|
|
|
}
|
2018-10-19 08:15:03 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
width = calc.weightedMean();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
width = stimPlanFractureTemplate->computeFractureWidth( m_fracture );
|
2018-10-19 08:15:03 -05:00
|
|
|
}
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return width;
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
double RigEclipseToStimPlanCalculator::areaWeightedConductivity() const
|
|
|
|
{
|
2018-09-14 02:12:05 -05:00
|
|
|
RiaWeightedMeanCalculator<double> calc;
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( const auto& singleCellCalc : m_singleFractureCellCalculators )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
double cellArea = singleCellCalc.second->areaOpenForFlow();
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2022-09-26 11:31:46 -05:00
|
|
|
double conductivity = singleCellCalc.second->fractureCell().getConductivityValue();
|
2022-09-05 11:30:15 -05:00
|
|
|
if ( !std::isinf( conductivity ) && !std::isnan( conductivity ) )
|
|
|
|
{
|
|
|
|
calc.addValueAndWeight( conductivity, cellArea );
|
|
|
|
}
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
2021-02-26 07:27:59 -06:00
|
|
|
return calc.validAggregatedWeight() ? calc.weightedMean() : 0.0;
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
double RigEclipseToStimPlanCalculator::longestYSectionOpenForFlow() const
|
|
|
|
{
|
2018-11-21 06:44:31 -06:00
|
|
|
// For each I, find the longest aggregated distance along J with continuous fracture cells with conductivity above
|
|
|
|
// zero connected to Eclipse cells open for flow
|
2018-09-11 06:22:57 -05:00
|
|
|
|
|
|
|
double longestRange = 0.0;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( size_t i = 0; i < m_fractureGrid.iCellCount(); i++ )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
|
|
|
double currentAggregatedDistanceY = 0.0;
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( size_t j = 0; j < m_fractureGrid.jCellCount(); j++ )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
size_t globalStimPlanCellIndex = m_fractureGrid.getGlobalIndexFromIJ( i, j );
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
auto calculatorForCell = m_singleFractureCellCalculators.find( globalStimPlanCellIndex );
|
|
|
|
if ( calculatorForCell != m_singleFractureCellCalculators.end() )
|
2018-09-11 06:22:57 -05:00
|
|
|
{
|
2022-09-26 11:31:46 -05:00
|
|
|
currentAggregatedDistanceY += calculatorForCell->second->fractureCell().cellSizeZ();
|
2018-09-11 06:22:57 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
longestRange = std::max( longestRange, currentAggregatedDistanceY );
|
2018-09-11 06:22:57 -05:00
|
|
|
currentAggregatedDistanceY = 0.0;
|
|
|
|
}
|
2018-08-09 04:12:05 -05:00
|
|
|
}
|
2018-09-11 06:22:57 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
longestRange = std::max( longestRange, currentAggregatedDistanceY );
|
2018-08-09 04:12:05 -05:00
|
|
|
}
|
|
|
|
|
2018-09-11 06:22:57 -05:00
|
|
|
return longestRange;
|
2018-08-09 04:12:05 -05:00
|
|
|
}
|