mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #2305 from akva2/fix_thermal
Parallel thermal simulations
This commit is contained in:
commit
645b07bf7f
@ -505,4 +505,11 @@ if(MPI_FOUND)
|
||||
SIMULATOR flow
|
||||
ABS_TOL ${abs_tol}
|
||||
REL_TOL ${rel_tol})
|
||||
|
||||
add_test_compare_parallel_simulation(CASENAME spe1_thermal
|
||||
FILENAME SPE1CASE2_THERMAL
|
||||
SIMULATOR flow
|
||||
ABS_TOL ${abs_tol_parallel}
|
||||
REL_TOL 1e-1
|
||||
DIR spe1)
|
||||
endif()
|
||||
|
@ -2387,7 +2387,6 @@ private:
|
||||
|
||||
const auto& simulator = this->simulator();
|
||||
const auto& vanguard = simulator.vanguard();
|
||||
const auto& deck = vanguard.deck();
|
||||
const auto& eclState = vanguard.eclState();
|
||||
|
||||
// fluid-matrix interactions (saturation functions; relperm/capillary pressure)
|
||||
@ -2397,7 +2396,7 @@ private:
|
||||
compressedToCartesianElemIdx[elemIdx] = vanguard.cartesianIndex(elemIdx);
|
||||
|
||||
thermalLawManager_ = std::make_shared<EclThermalLawManager>();
|
||||
thermalLawManager_->initFromDeck(deck, eclState, compressedToCartesianElemIdx);
|
||||
thermalLawManager_->initParamsForElements(eclState, compressedToCartesianElemIdx);
|
||||
}
|
||||
|
||||
void updateReferencePorosity_()
|
||||
@ -3023,7 +3022,7 @@ private:
|
||||
for (const auto& bcface : bcconfig) {
|
||||
const auto& type = bcface.bctype;
|
||||
if (type == BCType::RATE) {
|
||||
int compIdx;
|
||||
int compIdx = 0;
|
||||
|
||||
switch (bcface.component) {
|
||||
case BCComponent::OIL:
|
||||
|
@ -322,7 +322,7 @@ std::size_t packSize(const std::vector<T,A>& data, Dune::MPIHelper::MPICommunica
|
||||
std::size_t size = packSize(data.size(), comm);
|
||||
|
||||
for (const auto& entry: data)
|
||||
size+=packSize(entry, comm);
|
||||
size += packSize(entry, comm);
|
||||
|
||||
return size;
|
||||
}
|
||||
@ -1027,13 +1027,13 @@ std::size_t packSize(const OilPvtThermal<Scalar>& data,
|
||||
template std::size_t packSize(const OilPvtThermal<double>& data,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
std::size_t packSize(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
std::size_t packSize(const WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
Dune::MPIHelper::MPICommunicator comm)
|
||||
{
|
||||
std::size_t size = packSize(data.approach(), comm);
|
||||
const void* realWaterPvt = data.realWaterPvt();
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal>;
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>;
|
||||
if (data.approach() == PvtApproach::ConstantCompressibilityWaterPvt) {
|
||||
const auto& pvt = *static_cast<const ConstantCompressibilityWaterPvt<Scalar>*>(realWaterPvt);
|
||||
size += packSize(pvt, comm);
|
||||
@ -1045,9 +1045,9 @@ std::size_t packSize(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
return size;
|
||||
}
|
||||
|
||||
template std::size_t packSize(const WaterPvtMultiplexer<double,true>& data,
|
||||
template std::size_t packSize(const WaterPvtMultiplexer<double,true,true>& data,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
template std::size_t packSize(const WaterPvtMultiplexer<double,false>& data,
|
||||
template std::size_t packSize(const WaterPvtMultiplexer<double,false,true>& data,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar>
|
||||
@ -1084,9 +1084,13 @@ std::size_t packSize(const WaterPvtThermal<Scalar>& data,
|
||||
packSize(data.enableThermalViscosity(), comm) +
|
||||
packSize(data.enableInternalEnergy(), comm);
|
||||
size += packSize(bool(), comm);
|
||||
if (data.isoThermalPvt())
|
||||
size += packSize(data.isoThermalPvt()->approach(), comm);
|
||||
|
||||
using PvtApproach = WaterPvtThermal<Scalar>;
|
||||
if (data.isoThermalPvt()->approach() != PvtApproach::IsothermalPvt::NoWaterPvt)
|
||||
if (data.isoThermalPvt()->approach() != PvtApproach::IsothermalPvt::NoWaterPvt) {
|
||||
size += packSize(*data.isoThermalPvt(), comm);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
@ -2900,14 +2904,14 @@ template void pack(const OilPvtThermal<double>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
void pack(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
void pack(const WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm)
|
||||
{
|
||||
pack(data.approach(), buffer, position, comm);
|
||||
const void* realWaterPvt = data.realWaterPvt();
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal>;
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>;
|
||||
if (data.approach() == PvtApproach::ConstantCompressibilityWaterPvt) {
|
||||
const auto& pvt = *static_cast<const ConstantCompressibilityWaterPvt<Scalar>*>(realWaterPvt);
|
||||
pack(pvt, buffer, position, comm);
|
||||
@ -2917,10 +2921,10 @@ void pack(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
}
|
||||
}
|
||||
|
||||
template void pack(const WaterPvtMultiplexer<double,true>& data,
|
||||
template void pack(const WaterPvtMultiplexer<double,true,true>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
template void pack(const WaterPvtMultiplexer<double,false>& data,
|
||||
template void pack(const WaterPvtMultiplexer<double,false,true>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
@ -2963,8 +2967,11 @@ void pack(const WaterPvtThermal<Scalar>& data,
|
||||
pack(data.isoThermalPvt() != nullptr, buffer, position, comm);
|
||||
|
||||
using PvtApproach = WaterPvtThermal<Scalar>;
|
||||
if (data.isoThermalPvt()->approach() != PvtApproach::IsothermalPvt::NoWaterPvt)
|
||||
if (data.isoThermalPvt())
|
||||
pack(data.isoThermalPvt()->approach(), buffer, position, comm);
|
||||
if (data.isoThermalPvt()->approach() != PvtApproach::IsothermalPvt::NoWaterPvt) {
|
||||
pack(*data.isoThermalPvt(), buffer, position, comm);
|
||||
}
|
||||
}
|
||||
|
||||
template void pack(const WaterPvtThermal<double>& data,
|
||||
@ -4064,7 +4071,7 @@ template<class T, class A>
|
||||
void unpack(std::vector<T,A>& data, std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm)
|
||||
{
|
||||
std::size_t length=0;
|
||||
std::size_t length = 0;
|
||||
unpack(length, buffer, position, comm);
|
||||
data.resize(length);
|
||||
|
||||
@ -5160,14 +5167,14 @@ template void unpack(OilPvtThermal<double>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
void unpack(WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
void unpack(WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm)
|
||||
{
|
||||
typename WaterPvtMultiplexer<Scalar,enableThermal>::WaterPvtApproach approach;
|
||||
typename WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>::WaterPvtApproach approach;
|
||||
unpack(approach, buffer, position, comm);
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal>;
|
||||
using PvtApproach = WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>;
|
||||
void* pvt = nullptr;
|
||||
if (approach == PvtApproach::ConstantCompressibilityWaterPvt) {
|
||||
auto* realPvt = new ConstantCompressibilityWaterPvt<Scalar>;
|
||||
@ -5178,7 +5185,7 @@ void unpack(WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
unpack(*realPvt, buffer, position, comm);
|
||||
pvt = realPvt;
|
||||
}
|
||||
data = WaterPvtMultiplexer<Scalar,enableThermal>(approach, pvt);
|
||||
data = WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>(approach, pvt);
|
||||
}
|
||||
|
||||
template void unpack(WaterPvtMultiplexer<double,true>& data,
|
||||
@ -5246,7 +5253,9 @@ void unpack(WaterPvtThermal<Scalar>& data,
|
||||
if (isothermal) {
|
||||
pvt = new typename WaterPvtThermal<Scalar>::IsothermalPvt;
|
||||
using PvtApproach = WaterPvtThermal<Scalar>;
|
||||
if (pvt->approach() != PvtApproach::IsothermalPvt::NoWaterPvt)
|
||||
typename PvtApproach::IsothermalPvt::WaterPvtApproach approach;
|
||||
unpack(approach, buffer, position, comm);
|
||||
if (approach != PvtApproach::IsothermalPvt::NoWaterPvt)
|
||||
unpack(*pvt, buffer, position, comm);
|
||||
}
|
||||
data = WaterPvtThermal<Scalar>(pvt, viscrefPress, watdentRefTemp,
|
||||
|
@ -75,8 +75,6 @@ namespace Action {
|
||||
}
|
||||
|
||||
class Aqudims;
|
||||
class BCConfig;
|
||||
class BCConfig::BCFace;
|
||||
class BrineDensityTable;
|
||||
class ColumnSchema;
|
||||
class Connection;
|
||||
@ -293,8 +291,8 @@ std::size_t packSize(const LiveOilPvt<Scalar>& data,
|
||||
template<class Scalar>
|
||||
std::size_t packSize(const OilPvtThermal<Scalar>& data, Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
std::size_t packSize(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
std::size_t packSize(const WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar>
|
||||
@ -453,8 +451,8 @@ template<class Scalar>
|
||||
void pack(const OilPvtThermal<Scalar>& data, std::vector<char>& buffer,
|
||||
int& position, Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
void pack(const WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
void pack(const WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
const std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
@ -617,8 +615,8 @@ template<class Scalar>
|
||||
void unpack(OilPvtThermal<Scalar>& data, std::vector<char>& buffer,
|
||||
int& position, Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
template<class Scalar, bool enableThermal>
|
||||
void unpack(WaterPvtMultiplexer<Scalar,enableThermal>& data,
|
||||
template<class Scalar, bool enableThermal, bool enableBrine>
|
||||
void unpack(WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data,
|
||||
const std::vector<char>& buffer, int& position,
|
||||
Dune::MPIHelper::MPICommunicator comm);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user