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}RigTransmissibilityEquations.h
|
||||
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.h
|
||||
|
||||
${CEE_CURRENT_LIST_DIR}RigWeightedMeanCalc.h
|
||||
)
|
||||
|
||||
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}RigTransmissibilityEquations.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RigNumberOfFloodedPoreVolumesCalculator.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RigWeightedMeanCalc.cpp
|
||||
)
|
||||
|
||||
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