mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Adds the influx coefficient multipler to the face area fraction calculation. Also removes more unnecessary variables and reordered initialization list to prevent ordering warnings in gcc compiler
This commit is contained in:
parent
8d3d7ccc2f
commit
2170a00b21
@ -50,10 +50,6 @@ namespace Opm
|
|||||||
public:
|
public:
|
||||||
typedef BlackoilModelParameters ModelParameters;
|
typedef BlackoilModelParameters ModelParameters;
|
||||||
|
|
||||||
static const int Water = BlackoilPhases::Aqua;
|
|
||||||
static const int Oil = BlackoilPhases::Liquid;
|
|
||||||
static const int Gas = BlackoilPhases::Vapour;
|
|
||||||
|
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, Grid) Grid;
|
typedef typename GET_PROP_TYPE(TypeTag, Grid) Grid;
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
|
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
|
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
|
||||||
@ -70,29 +66,31 @@ namespace Opm
|
|||||||
typedef DenseAd::Evaluation<double, /*size=*/numEq> Eval;
|
typedef DenseAd::Evaluation<double, /*size=*/numEq> Eval;
|
||||||
typedef Opm::BlackOilFluidState<Eval, FluidSystem> FluidState;
|
typedef Opm::BlackOilFluidState<Eval, FluidSystem> FluidState;
|
||||||
|
|
||||||
|
static const auto waterCompIdx = FluidSystem::waterCompIdx;
|
||||||
|
static const auto waterPhaseIdx = FluidSystem::waterPhaseIdx;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
explicit AquiferCarterTracy( const AquiferCT::AQUCT_data& params, const Aquancon::AquanconOutput& connection,
|
explicit AquiferCarterTracy( const AquiferCT::AQUCT_data& params, const Aquancon::AquanconOutput& connection,
|
||||||
const Scalar gravity, const Simulator& ebosSimulator )
|
const Scalar gravity, const Simulator& ebosSimulator )
|
||||||
: phi_aq_ (params.phi_aq), //
|
: ebos_simulator_ (ebosSimulator),
|
||||||
|
aquiferID_ (params.aquiferID),
|
||||||
|
inftableID_ (params.inftableID),
|
||||||
|
pvttableID_ (params.pvttableID),
|
||||||
|
phi_aq_ (params.phi_aq), //
|
||||||
|
d0_ (params.d0),
|
||||||
C_t_ (params.C_t), //
|
C_t_ (params.C_t), //
|
||||||
r_o_ (params.r_o), //
|
r_o_ (params.r_o), //
|
||||||
k_a_ (params.k_a), //
|
k_a_ (params.k_a), //
|
||||||
c1_ (params.c1),
|
c1_ (params.c1),
|
||||||
h_ (params.h), //
|
h_ (params.h), //
|
||||||
p0_defaulted_ (params.p0_defaulted),
|
|
||||||
pa0_ (params.p0),
|
|
||||||
theta_ (params.theta), //
|
theta_ (params.theta), //
|
||||||
c2_ (params.c2), //
|
c2_ (params.c2), //
|
||||||
d0_ (params.d0),
|
|
||||||
aqutab_td_ (params.td),
|
aqutab_td_ (params.td),
|
||||||
aqutab_pi_ (params.pi),
|
aqutab_pi_ (params.pi),
|
||||||
aquiferID_ (params.aquiferID),
|
pa0_ (params.p0),
|
||||||
inftableID_ (params.inftableID),
|
|
||||||
pvttableID_ (params.pvttableID),
|
|
||||||
gravity_ (gravity),
|
gravity_ (gravity),
|
||||||
ebos_simulator_ (ebosSimulator)
|
p0_defaulted_ (params.p0_defaulted)
|
||||||
{
|
{
|
||||||
init_quantities(connection);
|
init_quantities(connection);
|
||||||
}
|
}
|
||||||
@ -118,12 +116,12 @@ namespace Opm
|
|||||||
get_current_density_cell(rhow_,idx,intQuants);
|
get_current_density_cell(rhow_,idx,intQuants);
|
||||||
calculate_inflow_rate(idx, timer);
|
calculate_inflow_rate(idx, timer);
|
||||||
qinflow = Qai_.at(idx);
|
qinflow = Qai_.at(idx);
|
||||||
ebosResid[*cellID][(FluidSystem::waterCompIdx)] -= qinflow.value();
|
ebosResid[*cellID][waterCompIdx] -= qinflow.value();
|
||||||
|
|
||||||
for (int pvIdx = 0; pvIdx < numEq; ++pvIdx)
|
for (int pvIdx = 0; pvIdx < numEq; ++pvIdx)
|
||||||
{
|
{
|
||||||
// also need to consider the efficiency factor when manipulating the jacobians.
|
// also need to consider the efficiency factor when manipulating the jacobians.
|
||||||
ebosJac[*cellID][*cellID][(FluidSystem::waterCompIdx)][pvIdx] -= qinflow.derivative(pvIdx);
|
ebosJac[*cellID][*cellID][waterCompIdx][pvIdx] -= qinflow.derivative(pvIdx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,13 +228,13 @@ namespace Opm
|
|||||||
inline void get_current_Pressure_cell(std::vector<Eval>& pressure_water, const int idx, const IntensiveQuantities& intQuants)
|
inline void get_current_Pressure_cell(std::vector<Eval>& pressure_water, const int idx, const IntensiveQuantities& intQuants)
|
||||||
{
|
{
|
||||||
const auto& fs = intQuants.fluidState();
|
const auto& fs = intQuants.fluidState();
|
||||||
pressure_water.at(idx) = fs.pressure(FluidSystem::waterPhaseIdx);
|
pressure_water.at(idx) = fs.pressure(waterPhaseIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void get_current_density_cell(std::vector<Eval>& rho_water, const int idx, const IntensiveQuantities& intQuants)
|
inline void get_current_density_cell(std::vector<Eval>& rho_water, const int idx, const IntensiveQuantities& intQuants)
|
||||||
{
|
{
|
||||||
const auto& fs = intQuants.fluidState();
|
const auto& fs = intQuants.fluidState();
|
||||||
rho_water.at(idx) = fs.density(FluidSystem::waterPhaseIdx);
|
rho_water.at(idx) = fs.density(waterPhaseIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Scalar dpai(int idx)
|
inline Scalar dpai(int idx)
|
||||||
@ -303,6 +301,13 @@ namespace Opm
|
|||||||
auto cell2Faces = Opm::UgGridHelpers::cell2Faces(ugrid);
|
auto cell2Faces = Opm::UgGridHelpers::cell2Faces(ugrid);
|
||||||
auto faceCells = Opm::AutoDiffGrid::faceCells(ugrid);
|
auto faceCells = Opm::AutoDiffGrid::faceCells(ugrid);
|
||||||
|
|
||||||
|
for (auto influxCoeff: connection.influx_coeff){
|
||||||
|
std::cout << "influx_coeff = " << influxCoeff << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto influxMult: connection.influx_multiplier){
|
||||||
|
std::cout << "influx_multiplier = " << influxMult << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
// Translate the C face tag into the enum used by opm-parser's TransMult class
|
// Translate the C face tag into the enum used by opm-parser's TransMult class
|
||||||
Opm::FaceDir::DirEnum faceDirection;
|
Opm::FaceDir::DirEnum faceDirection;
|
||||||
@ -342,7 +347,7 @@ namespace Opm
|
|||||||
// face is within the reservoir/not connected to boundary. (We still have yet to check for inactive cell adjoining)
|
// face is within the reservoir/not connected to boundary. (We still have yet to check for inactive cell adjoining)
|
||||||
faceArea = (faceCells(faceIdx,0)*faceCells(faceIdx,1) > 0)? 0. : Opm::UgGridHelpers::faceArea(ugrid, faceIdx);
|
faceArea = (faceCells(faceIdx,0)*faceCells(faceIdx,1) > 0)? 0. : Opm::UgGridHelpers::faceArea(ugrid, faceIdx);
|
||||||
faceArea_connected_.at(idx) = faceArea;
|
faceArea_connected_.at(idx) = faceArea;
|
||||||
denom_face_areas += faceArea_connected_.at(idx);
|
denom_face_areas += ( connection.influx_multiplier.at(idx) * faceArea_connected_.at(idx) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto cellCenter = grid.getCellCenter(cell_idx_.at(idx));
|
auto cellCenter = grid.getCellCenter(cell_idx_.at(idx));
|
||||||
@ -351,7 +356,7 @@ namespace Opm
|
|||||||
|
|
||||||
for (size_t idx = 0; idx < cell_idx_.size(); ++idx)
|
for (size_t idx = 0; idx < cell_idx_.size(); ++idx)
|
||||||
{
|
{
|
||||||
alphai_.at(idx) = faceArea_connected_.at(idx)/denom_face_areas;
|
alphai_.at(idx) = ( connection.influx_multiplier.at(idx) * faceArea_connected_.at(idx) )/denom_face_areas;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,8 +399,8 @@ namespace Opm
|
|||||||
const auto& intQuants = *(ebos_simulator_.model().cachedIntensiveQuantities(cellIDx, /*timeIdx=*/ 0));
|
const auto& intQuants = *(ebos_simulator_.model().cachedIntensiveQuantities(cellIDx, /*timeIdx=*/ 0));
|
||||||
const auto& fs = intQuants.fluidState();
|
const auto& fs = intQuants.fluidState();
|
||||||
|
|
||||||
water_pressure_reservoir.push_back( fs.pressure(FluidSystem::waterPhaseIdx).value() );
|
water_pressure_reservoir.push_back( fs.pressure(waterPhaseIdx).value() );
|
||||||
rho_water_reservoir.at(idx) = fs.density(FluidSystem::waterPhaseIdx);
|
rho_water_reservoir.at(idx) = fs.density(waterPhaseIdx);
|
||||||
pw_aquifer.push_back( (water_pressure_reservoir.at(idx) - rho_water_reservoir.at(idx).value()*gravity_*(cell_depth_.at(idx) - d0_))*area_fraction(idx) );
|
pw_aquifer.push_back( (water_pressure_reservoir.at(idx) - rho_water_reservoir.at(idx).value()*gravity_*(cell_depth_.at(idx) - d0_))*area_fraction(idx) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,9 +78,6 @@ namespace Opm {
|
|||||||
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
|
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
|
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
|
||||||
|
|
||||||
static const int numEq = BlackoilIndices::numEq;
|
|
||||||
static const int solventSaturationIdx = BlackoilIndices::solventSaturationIdx;
|
|
||||||
|
|
||||||
typedef AquiferCarterTracy<TypeTag> Aquifer_object;
|
typedef AquiferCarterTracy<TypeTag> Aquifer_object;
|
||||||
|
|
||||||
BlackoilAquiferModel(Simulator& ebosSimulator,
|
BlackoilAquiferModel(Simulator& ebosSimulator,
|
||||||
@ -110,11 +107,7 @@ namespace Opm {
|
|||||||
const ModelParameters param_;
|
const ModelParameters param_;
|
||||||
bool terminal_output_;
|
bool terminal_output_;
|
||||||
|
|
||||||
size_t global_nc_;
|
|
||||||
// the number of the cells in the local grid
|
|
||||||
size_t number_of_cells_;
|
|
||||||
double gravity_;
|
double gravity_;
|
||||||
std::vector<double> depth_;
|
|
||||||
std::vector<Aquifer_object> aquifers_;
|
std::vector<Aquifer_object> aquifers_;
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,12 +10,10 @@ namespace Opm {
|
|||||||
, param_(param)
|
, param_(param)
|
||||||
, terminal_output_(terminal_output)
|
, terminal_output_(terminal_output)
|
||||||
{
|
{
|
||||||
const auto& eclState = ebosSimulator_.vanguard().eclState();
|
// const auto& gridView = ebosSimulator_.gridView();
|
||||||
|
|
||||||
const auto& gridView = ebosSimulator_.gridView();
|
// number_of_cells_ = gridView.size(/*codim=*/0);
|
||||||
|
// global_nc_ = gridView.comm().sum(number_of_cells_);
|
||||||
number_of_cells_ = gridView.size(/*codim=*/0);
|
|
||||||
global_nc_ = gridView.comm().sum(number_of_cells_);
|
|
||||||
gravity_ = ebosSimulator_.problem().gravity()[2];
|
gravity_ = ebosSimulator_.problem().gravity()[2];
|
||||||
init(ebosSimulator_, aquifers_);
|
init(ebosSimulator_, aquifers_);
|
||||||
}
|
}
|
||||||
@ -129,7 +127,7 @@ namespace Opm {
|
|||||||
assert( aquifersData.size() == aquifer_connect.size() );
|
assert( aquifersData.size() == aquifer_connect.size() );
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < aquifersData.size(); ++i)
|
for (size_t i = 0; i < aquifersData.size(); ++i)
|
||||||
{
|
{
|
||||||
aquifers.push_back(
|
aquifers.push_back(
|
||||||
AquiferCarterTracy<TypeTag> (aquifersData.at(i), aquifer_connection.at(i), gravity_, ebosSimulator_)
|
AquiferCarterTracy<TypeTag> (aquifersData.at(i), aquifer_connection.at(i), gravity_, ebosSimulator_)
|
||||||
|
Loading…
Reference in New Issue
Block a user