mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2146 Num Flooded PV: Add weighted mean calulator
This commit is contained in:
parent
2e63ae0b30
commit
47429b1c6b
@ -63,7 +63,7 @@ ${CEE_CURRENT_LIST_DIR}RigEclipseResultInfo.h
|
|||||||
${CEE_CURRENT_LIST_DIR}RigTofAccumulatedPhaseFractionsCalculator.h
|
${CEE_CURRENT_LIST_DIR}RigTofAccumulatedPhaseFractionsCalculator.h
|
||||||
${CEE_CURRENT_LIST_DIR}RigTransmissibilityEquations.h
|
${CEE_CURRENT_LIST_DIR}RigTransmissibilityEquations.h
|
||||||
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.h
|
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.h
|
||||||
|
${CEE_CURRENT_LIST_DIR}RigWeightedMeanCalc.h
|
||||||
)
|
)
|
||||||
|
|
||||||
if (RESINSIGHT_ENABLE_PROTOTYPE_FEATURE_FRACTURES)
|
if (RESINSIGHT_ENABLE_PROTOTYPE_FEATURE_FRACTURES)
|
||||||
@ -133,6 +133,7 @@ ${CEE_CURRENT_LIST_DIR}RigEclipseResultInfo.cpp
|
|||||||
${CEE_CURRENT_LIST_DIR}RigTofAccumulatedPhaseFractionsCalculator.cpp
|
${CEE_CURRENT_LIST_DIR}RigTofAccumulatedPhaseFractionsCalculator.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigTransmissibilityEquations.cpp
|
${CEE_CURRENT_LIST_DIR}RigTransmissibilityEquations.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.cpp
|
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.cpp
|
||||||
|
${CEE_CURRENT_LIST_DIR}RigWeightedMeanCalc.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if (RESINSIGHT_ENABLE_PROTOTYPE_FEATURE_FRACTURES)
|
if (RESINSIGHT_ENABLE_PROTOTYPE_FEATURE_FRACTURES)
|
||||||
|
111
ApplicationCode/ReservoirDataModel/RigWeightedMeanCalc.cpp
Normal file
111
ApplicationCode/ReservoirDataModel/RigWeightedMeanCalc.cpp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2017- Statoil ASA
|
||||||
|
//
|
||||||
|
// 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 "RigWeightedMeanCalc.h"
|
||||||
|
|
||||||
|
#include "RiaDefines.h"
|
||||||
|
|
||||||
|
#include "RigActiveCellInfo.h"
|
||||||
|
#include "RigFlowDiagResults.h"
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigWeightedMeanCalc::weightedMeanOverCells(const std::vector<double>* weights,
|
||||||
|
const std::vector<double>* values,
|
||||||
|
const cvf::UByteArray* cellVisibilities,
|
||||||
|
const RigActiveCellInfo* actCellInfo,
|
||||||
|
bool isUsingActiveIndex,
|
||||||
|
double *result)
|
||||||
|
{
|
||||||
|
if (!(weights && values && cellVisibilities && actCellInfo && result)) return;
|
||||||
|
|
||||||
|
if (weights->empty() || values->empty()) return;
|
||||||
|
if (weights->size() != values->size()) return;
|
||||||
|
|
||||||
|
double weightedSum = 0.0;
|
||||||
|
double weightSum = 0.0;
|
||||||
|
|
||||||
|
for (size_t cIdx = 0; cIdx < cellVisibilities->size(); ++cIdx)
|
||||||
|
{
|
||||||
|
if (!(*cellVisibilities)[cIdx]) continue;
|
||||||
|
|
||||||
|
size_t cellResultIndex = cIdx;
|
||||||
|
if (isUsingActiveIndex)
|
||||||
|
{
|
||||||
|
cellResultIndex = actCellInfo->cellResultIndex(cIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cellResultIndex == cvf::UNDEFINED_SIZE_T || cellResultIndex > values->size()) continue;
|
||||||
|
|
||||||
|
double weight = (*weights)[cellResultIndex];
|
||||||
|
double value = (*values)[cellResultIndex];
|
||||||
|
|
||||||
|
if (weight == HUGE_VAL || value == HUGE_VAL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
weightedSum += weight * value;
|
||||||
|
weightSum += weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (weightSum != 0)
|
||||||
|
{
|
||||||
|
*result = weightedSum / weightSum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*result = HUGE_VAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigWeightedMeanCalc::weightedMean(const std::vector<double>* weights, const std::vector<double>* values, double* result)
|
||||||
|
{
|
||||||
|
if (!weights || !values) return;
|
||||||
|
if (weights->size() != values->size()) return;
|
||||||
|
|
||||||
|
double weightedSum = 0;
|
||||||
|
double weightSum = 0;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < values->size(); i++)
|
||||||
|
{
|
||||||
|
double weight = weights->at(i);
|
||||||
|
double value = values->at(i);
|
||||||
|
|
||||||
|
if (weight == HUGE_VAL || value == HUGE_VAL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
weightedSum += weight * value;
|
||||||
|
weightSum += weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (weightSum != 0)
|
||||||
|
{
|
||||||
|
*result = weightedSum / weightSum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*result = HUGE_VAL;
|
||||||
|
}
|
||||||
|
}
|
38
ApplicationCode/ReservoirDataModel/RigWeightedMeanCalc.h
Normal file
38
ApplicationCode/ReservoirDataModel/RigWeightedMeanCalc.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2017- Statoil ASA
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "cvfArray.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class RigActiveCellInfo;
|
||||||
|
|
||||||
|
class RigWeightedMeanCalc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void weightedMeanOverCells(const std::vector<double>* weights,
|
||||||
|
const std::vector<double>* values,
|
||||||
|
const cvf::UByteArray* cellVisibilities,
|
||||||
|
const RigActiveCellInfo* actCellInfo,
|
||||||
|
bool isUsingActiveIndex,
|
||||||
|
double *result);
|
||||||
|
|
||||||
|
static void weightedMean(const std::vector<double>* weights, const std::vector<double>* values, double *result);
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user