mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
add MICPContainer, a container for MICP data output
start by moving data members into it
This commit is contained in:
parent
71a70c57eb
commit
012141b281
@ -108,6 +108,7 @@ list (APPEND MAIN_SOURCE_FILES
|
|||||||
opm/simulators/flow/Main.cpp
|
opm/simulators/flow/Main.cpp
|
||||||
opm/simulators/flow/MainDispatchDynamic.cpp
|
opm/simulators/flow/MainDispatchDynamic.cpp
|
||||||
opm/simulators/flow/MechContainer.cpp
|
opm/simulators/flow/MechContainer.cpp
|
||||||
|
opm/simulators/flow/MICPContainer.cpp
|
||||||
opm/simulators/flow/MixingRateControls.cpp
|
opm/simulators/flow/MixingRateControls.cpp
|
||||||
opm/simulators/flow/NonlinearSolver.cpp
|
opm/simulators/flow/NonlinearSolver.cpp
|
||||||
opm/simulators/flow/partitionCells.cpp
|
opm/simulators/flow/partitionCells.cpp
|
||||||
@ -858,6 +859,7 @@ list (APPEND PUBLIC_HEADER_FILES
|
|||||||
opm/simulators/flow/LogOutputHelper.hpp
|
opm/simulators/flow/LogOutputHelper.hpp
|
||||||
opm/simulators/flow/Main.hpp
|
opm/simulators/flow/Main.hpp
|
||||||
opm/simulators/flow/MechContainer.hpp
|
opm/simulators/flow/MechContainer.hpp
|
||||||
|
opm/simulators/flow/MICPContainer.hpp
|
||||||
opm/simulators/flow/MixingRateControls.hpp
|
opm/simulators/flow/MixingRateControls.hpp
|
||||||
opm/simulators/flow/NewTranFluxModule.hpp
|
opm/simulators/flow/NewTranFluxModule.hpp
|
||||||
opm/simulators/flow/NonlinearSolver.hpp
|
opm/simulators/flow/NonlinearSolver.hpp
|
||||||
|
@ -1180,11 +1180,11 @@ protected:
|
|||||||
if constexpr (enablePolymer)
|
if constexpr (enablePolymer)
|
||||||
this->polymer_.concentration[elemIdx] = this->eclWriter_->outputModule().getPolymerConcentration(elemIdx);
|
this->polymer_.concentration[elemIdx] = this->eclWriter_->outputModule().getPolymerConcentration(elemIdx);
|
||||||
if constexpr (enableMICP){
|
if constexpr (enableMICP){
|
||||||
this->micp_.microbialConcentration[elemIdx] = this->eclWriter_->outputModule().getMicrobialConcentration(elemIdx);
|
this->micp_.microbialConcentration[elemIdx] = this->eclWriter_->outputModule().getMICP().getMicrobialConcentration(elemIdx);
|
||||||
this->micp_.oxygenConcentration[elemIdx] = this->eclWriter_->outputModule().getOxygenConcentration(elemIdx);
|
this->micp_.oxygenConcentration[elemIdx] = this->eclWriter_->outputModule().getMICP().getOxygenConcentration(elemIdx);
|
||||||
this->micp_.ureaConcentration[elemIdx] = this->eclWriter_->outputModule().getUreaConcentration(elemIdx);
|
this->micp_.ureaConcentration[elemIdx] = this->eclWriter_->outputModule().getMICP().getUreaConcentration(elemIdx);
|
||||||
this->micp_.biofilmConcentration[elemIdx] = this->eclWriter_->outputModule().getBiofilmConcentration(elemIdx);
|
this->micp_.biofilmConcentration[elemIdx] = this->eclWriter_->outputModule().getMICP().getBiofilmConcentration(elemIdx);
|
||||||
this->micp_.calciteConcentration[elemIdx] = this->eclWriter_->outputModule().getCalciteConcentration(elemIdx);
|
this->micp_.calciteConcentration[elemIdx] = this->eclWriter_->outputModule().getMICP().getCalciteConcentration(elemIdx);
|
||||||
}
|
}
|
||||||
// if we need to restart for polymer molecular weight simulation, we need to add related here
|
// if we need to restart for polymer molecular weight simulation, we need to add related here
|
||||||
}
|
}
|
||||||
|
@ -514,11 +514,11 @@ assignToSolution(data::Solution& sol)
|
|||||||
addEntry(flowsSolutionVector, "FLRWATK-", UnitSystem::measure::rate, flores_[FaceDir::ToIntersectionIndex(Dir::ZMinus)][waterCompIdx], waterCompIdx);
|
addEntry(flowsSolutionVector, "FLRWATK-", UnitSystem::measure::rate, flores_[FaceDir::ToIntersectionIndex(Dir::ZMinus)][waterCompIdx], waterCompIdx);
|
||||||
|
|
||||||
auto extendedSolutionArrays = std::array {
|
auto extendedSolutionArrays = std::array {
|
||||||
DataEntry{"BIOFILM", UnitSystem::measure::identity, cBiofilm_},
|
DataEntry{"BIOFILM", UnitSystem::measure::identity, micpC_.cBiofilm_},
|
||||||
DataEntry{"CALCITE", UnitSystem::measure::identity, cCalcite_},
|
DataEntry{"CALCITE", UnitSystem::measure::identity, micpC_.cCalcite_},
|
||||||
DataEntry{"DRSDTCON", UnitSystem::measure::gas_oil_ratio_rate, drsdtcon_},
|
DataEntry{"DRSDTCON", UnitSystem::measure::gas_oil_ratio_rate, drsdtcon_},
|
||||||
DataEntry{"MICROBES", UnitSystem::measure::density, cMicrobes_},
|
DataEntry{"MICROBES", UnitSystem::measure::density, micpC_.cMicrobes_},
|
||||||
DataEntry{"OXYGEN", UnitSystem::measure::density, cOxygen_},
|
DataEntry{"OXYGEN", UnitSystem::measure::density, micpC_.cOxygen_},
|
||||||
DataEntry{"PERMFACT", UnitSystem::measure::identity, permFact_},
|
DataEntry{"PERMFACT", UnitSystem::measure::identity, permFact_},
|
||||||
DataEntry{"PORV_RC", UnitSystem::measure::identity, rockCompPorvMultiplier_},
|
DataEntry{"PORV_RC", UnitSystem::measure::identity, rockCompPorvMultiplier_},
|
||||||
DataEntry{"PRES_OVB", UnitSystem::measure::pressure, overburdenPressure_},
|
DataEntry{"PRES_OVB", UnitSystem::measure::pressure, overburdenPressure_},
|
||||||
@ -535,7 +535,7 @@ assignToSolution(data::Solution& sol)
|
|||||||
DataEntry{"STD_GAS", UnitSystem::measure::identity, mFracGas_},
|
DataEntry{"STD_GAS", UnitSystem::measure::identity, mFracGas_},
|
||||||
DataEntry{"STD_OIL", UnitSystem::measure::identity, mFracOil_},
|
DataEntry{"STD_OIL", UnitSystem::measure::identity, mFracOil_},
|
||||||
DataEntry{"TMULT_RC", UnitSystem::measure::identity, rockCompTransMultiplier_},
|
DataEntry{"TMULT_RC", UnitSystem::measure::identity, rockCompTransMultiplier_},
|
||||||
DataEntry{"UREA", UnitSystem::measure::density, cUrea_},
|
DataEntry{"UREA", UnitSystem::measure::density, micpC_.cUrea_},
|
||||||
};
|
};
|
||||||
|
|
||||||
// basically, for compositional, we can not use std::array for this. We need to generate the ZMF1, ZMF2, and so on
|
// basically, for compositional, we can not use std::array for this. We need to generate the ZMF1, ZMF2, and so on
|
||||||
@ -763,11 +763,11 @@ setRestart(const data::Solution& sol,
|
|||||||
};
|
};
|
||||||
|
|
||||||
const auto fields = std::array{
|
const auto fields = std::array{
|
||||||
std::pair{"BIOFILM", &cBiofilm_},
|
std::pair{"BIOFILM", &micpC_.cBiofilm_},
|
||||||
std::pair{"CALCITE", &cCalcite_},
|
std::pair{"CALCITE", &micpC_.cCalcite_},
|
||||||
std::pair{"FOAM", &cFoam_},
|
std::pair{"FOAM", &cFoam_},
|
||||||
std::pair{"MICROBES", &cMicrobes_},
|
std::pair{"MICROBES", &micpC_.cMicrobes_},
|
||||||
std::pair{"OXYGEN", &cOxygen_},
|
std::pair{"OXYGEN", &micpC_.cOxygen_},
|
||||||
std::pair{"PERMFACT", &permFact_},
|
std::pair{"PERMFACT", &permFact_},
|
||||||
std::pair{"POLYMER", &cPolymer_},
|
std::pair{"POLYMER", &cPolymer_},
|
||||||
std::pair{"PPCW", &ppcw_},
|
std::pair{"PPCW", &ppcw_},
|
||||||
@ -785,7 +785,7 @@ setRestart(const data::Solution& sol,
|
|||||||
std::pair{"SWHY1", &swmin_},
|
std::pair{"SWHY1", &swmin_},
|
||||||
std::pair{"SWMAX", &swMax_},
|
std::pair{"SWMAX", &swMax_},
|
||||||
std::pair{"TEMP", &temperature_},
|
std::pair{"TEMP", &temperature_},
|
||||||
std::pair{"UREA", &cUrea_},
|
std::pair{"UREA", &micpC_.cUrea_},
|
||||||
};
|
};
|
||||||
|
|
||||||
std::for_each(fields.begin(), fields.end(),
|
std::for_each(fields.begin(), fields.end(),
|
||||||
@ -1036,11 +1036,11 @@ doAllocBuffers(const unsigned bufferSize,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (enableMICP_) {
|
if (enableMICP_) {
|
||||||
cMicrobes_.resize(bufferSize, 0.0);
|
micpC_.cMicrobes_.resize(bufferSize, 0.0);
|
||||||
cOxygen_.resize(bufferSize, 0.0);
|
micpC_.cOxygen_.resize(bufferSize, 0.0);
|
||||||
cUrea_.resize(bufferSize, 0.0);
|
micpC_.cUrea_.resize(bufferSize, 0.0);
|
||||||
cBiofilm_.resize(bufferSize, 0.0);
|
micpC_.cBiofilm_.resize(bufferSize, 0.0);
|
||||||
cCalcite_.resize(bufferSize, 0.0);
|
micpC_.cCalcite_.resize(bufferSize, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vapparsActive) {
|
if (vapparsActive) {
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include <opm/simulators/flow/InterRegFlows.hpp>
|
#include <opm/simulators/flow/InterRegFlows.hpp>
|
||||||
#include <opm/simulators/flow/LogOutputHelper.hpp>
|
#include <opm/simulators/flow/LogOutputHelper.hpp>
|
||||||
#include <opm/simulators/flow/MechContainer.hpp>
|
#include <opm/simulators/flow/MechContainer.hpp>
|
||||||
|
#include <opm/simulators/flow/MICPContainer.hpp>
|
||||||
#include <opm/simulators/flow/RegionPhasePVAverage.hpp>
|
#include <opm/simulators/flow/RegionPhasePVAverage.hpp>
|
||||||
|
|
||||||
#include <opm/simulators/utils/ParallelCommunication.hpp>
|
#include <opm/simulators/utils/ParallelCommunication.hpp>
|
||||||
@ -198,45 +199,8 @@ public:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Scalar getMicrobialConcentration(unsigned elemIdx) const
|
const MICPContainer<Scalar>& getMICP() const
|
||||||
{
|
{ return this->micpC_; }
|
||||||
if (cMicrobes_.size() > elemIdx)
|
|
||||||
return cMicrobes_[elemIdx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Scalar getOxygenConcentration(unsigned elemIdx) const
|
|
||||||
{
|
|
||||||
if (cOxygen_.size() > elemIdx)
|
|
||||||
return cOxygen_[elemIdx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Scalar getUreaConcentration(unsigned elemIdx) const
|
|
||||||
{
|
|
||||||
if (cUrea_.size() > elemIdx)
|
|
||||||
return cUrea_[elemIdx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Scalar getBiofilmConcentration(unsigned elemIdx) const
|
|
||||||
{
|
|
||||||
if (cBiofilm_.size() > elemIdx)
|
|
||||||
return cBiofilm_[elemIdx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Scalar getCalciteConcentration(unsigned elemIdx) const
|
|
||||||
{
|
|
||||||
if (cCalcite_.size() > elemIdx)
|
|
||||||
return cCalcite_[elemIdx];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::array<FlowsData<double>, 3>& getFlowsn() const
|
const std::array<FlowsData<double>, 3>& getFlowsn() const
|
||||||
{
|
{
|
||||||
@ -494,11 +458,7 @@ protected:
|
|||||||
ScalarBuffer minimumOilPressure_;
|
ScalarBuffer minimumOilPressure_;
|
||||||
ScalarBuffer saturatedOilFormationVolumeFactor_;
|
ScalarBuffer saturatedOilFormationVolumeFactor_;
|
||||||
ScalarBuffer rockCompTransMultiplier_;
|
ScalarBuffer rockCompTransMultiplier_;
|
||||||
ScalarBuffer cMicrobes_;
|
MICPContainer<Scalar> micpC_;
|
||||||
ScalarBuffer cOxygen_;
|
|
||||||
ScalarBuffer cUrea_;
|
|
||||||
ScalarBuffer cBiofilm_;
|
|
||||||
ScalarBuffer cCalcite_;
|
|
||||||
ScalarBuffer pcgw_;
|
ScalarBuffer pcgw_;
|
||||||
ScalarBuffer pcow_;
|
ScalarBuffer pcow_;
|
||||||
ScalarBuffer pcog_;
|
ScalarBuffer pcog_;
|
||||||
|
34
opm/simulators/flow/MICPContainer.cpp
Normal file
34
opm/simulators/flow/MICPContainer.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||||
|
// vi: set et ts=4 sw=4 sts=4:
|
||||||
|
/*
|
||||||
|
This file is part of the Open Porous Media project (OPM).
|
||||||
|
|
||||||
|
OPM 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 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OPM 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
Consult the COPYING file in the top-level source directory of this
|
||||||
|
module for the precise wording of the license and the list of
|
||||||
|
copyright holders.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include <opm/simulators/flow/MICPContainer.hpp>
|
||||||
|
|
||||||
|
namespace Opm {
|
||||||
|
|
||||||
|
template class MICPContainer<double>;
|
||||||
|
|
||||||
|
#if FLOW_INSTANTIATE_FLOAT
|
||||||
|
template class MICPContainer<float>;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} // namespace Opm
|
88
opm/simulators/flow/MICPContainer.hpp
Normal file
88
opm/simulators/flow/MICPContainer.hpp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||||
|
// vi: set et ts=4 sw=4 sts=4:
|
||||||
|
/*
|
||||||
|
This file is part of the Open Porous Media project (OPM).
|
||||||
|
|
||||||
|
OPM 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 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OPM 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 for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
Consult the COPYING file in the top-level source directory of this
|
||||||
|
module for the precise wording of the license and the list of
|
||||||
|
copyright holders.
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
* \copydoc Opm::OutputBlackOilModule
|
||||||
|
*/
|
||||||
|
#ifndef OPM_MICP_CONTAINER_HPP
|
||||||
|
#define OPM_MICP_CONTAINER_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace Opm {
|
||||||
|
|
||||||
|
template<class Scalar>
|
||||||
|
class MICPContainer
|
||||||
|
{
|
||||||
|
using ScalarBuffer = std::vector<Scalar>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Scalar getMicrobialConcentration(unsigned elemIdx) const
|
||||||
|
{
|
||||||
|
if (cMicrobes_.size() > elemIdx)
|
||||||
|
return cMicrobes_[elemIdx];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar getOxygenConcentration(unsigned elemIdx) const
|
||||||
|
{
|
||||||
|
if (cOxygen_.size() > elemIdx)
|
||||||
|
return cOxygen_[elemIdx];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar getUreaConcentration(unsigned elemIdx) const
|
||||||
|
{
|
||||||
|
if (cUrea_.size() > elemIdx)
|
||||||
|
return cUrea_[elemIdx];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar getBiofilmConcentration(unsigned elemIdx) const
|
||||||
|
{
|
||||||
|
if (cBiofilm_.size() > elemIdx)
|
||||||
|
return cBiofilm_[elemIdx];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scalar getCalciteConcentration(unsigned elemIdx) const
|
||||||
|
{
|
||||||
|
if (cCalcite_.size() > elemIdx)
|
||||||
|
return cCalcite_[elemIdx];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScalarBuffer cMicrobes_;
|
||||||
|
ScalarBuffer cOxygen_;
|
||||||
|
ScalarBuffer cUrea_;
|
||||||
|
ScalarBuffer cBiofilm_;
|
||||||
|
ScalarBuffer cCalcite_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Opm
|
||||||
|
|
||||||
|
#endif // OPM_MICP_CONTAINER_HPP
|
@ -475,26 +475,26 @@ public:
|
|||||||
this->mFracCo2_[globalDofIdx] = stdVolCo2 * rhoCO2 / stdMassTotal;
|
this->mFracCo2_[globalDofIdx] = stdVolCo2 * rhoCO2 / stdMassTotal;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->cMicrobes_.empty()) {
|
if (!this->micpC_.cMicrobes_.empty()) {
|
||||||
this->cMicrobes_[globalDofIdx] = intQuants.microbialConcentration().value();
|
this->micpC_.cMicrobes_[globalDofIdx] = intQuants.microbialConcentration().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->cOxygen_.empty()) {
|
if (!this->micpC_.cOxygen_.empty()) {
|
||||||
this->cOxygen_[globalDofIdx] = intQuants.oxygenConcentration().value();
|
this->micpC_.cOxygen_[globalDofIdx] = intQuants.oxygenConcentration().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->cUrea_.empty()) {
|
if (!this->micpC_.cUrea_.empty()) {
|
||||||
this->cUrea_[globalDofIdx] = 10
|
this->micpC_.cUrea_[globalDofIdx] = 10
|
||||||
* intQuants.ureaConcentration()
|
* intQuants.ureaConcentration()
|
||||||
.value(); // Reescaling back the urea concentration (see WellInterface_impl.hpp)
|
.value(); // Reescaling back the urea concentration (see WellInterface_impl.hpp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->cBiofilm_.empty()) {
|
if (!this->micpC_.cBiofilm_.empty()) {
|
||||||
this->cBiofilm_[globalDofIdx] = intQuants.biofilmConcentration().value();
|
this->micpC_.cBiofilm_[globalDofIdx] = intQuants.biofilmConcentration().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->cCalcite_.empty()) {
|
if (!this->micpC_.cCalcite_.empty()) {
|
||||||
this->cCalcite_[globalDofIdx] = intQuants.calciteConcentration().value();
|
this->micpC_.cCalcite_[globalDofIdx] = intQuants.calciteConcentration().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->bubblePointPressure_.empty()) {
|
if (!this->bubblePointPressure_.empty()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user