mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
storing the wellbore diameters for model and simulators.
Will be used in the shear rate calculation.
This commit is contained in:
@@ -84,6 +84,7 @@ namespace Opm {
|
|||||||
const bool has_shrate,
|
const bool has_shrate,
|
||||||
const std::vector<double>& wells_rep_radius,
|
const std::vector<double>& wells_rep_radius,
|
||||||
const std::vector<double>& wells_perf_length,
|
const std::vector<double>& wells_perf_length,
|
||||||
|
const std::vector<double>& wells_bore_diameter,
|
||||||
const bool terminal_output);
|
const bool terminal_output);
|
||||||
|
|
||||||
/// Called once before each time step.
|
/// Called once before each time step.
|
||||||
@@ -146,6 +147,8 @@ namespace Opm {
|
|||||||
// to be used in shear-thinning computation.
|
// to be used in shear-thinning computation.
|
||||||
std::vector<double> wells_rep_radius_;
|
std::vector<double> wells_rep_radius_;
|
||||||
std::vector<double> wells_perf_length_;
|
std::vector<double> wells_perf_length_;
|
||||||
|
// wellbore diameters
|
||||||
|
std::vector<double> wells_bore_diameter_;
|
||||||
|
|
||||||
// shear-thinning factor for cell faces
|
// shear-thinning factor for cell faces
|
||||||
std::vector<double> shear_mult_faces_;
|
std::vector<double> shear_mult_faces_;
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ namespace Opm {
|
|||||||
const bool has_shrate,
|
const bool has_shrate,
|
||||||
const std::vector<double>& wells_rep_radius,
|
const std::vector<double>& wells_rep_radius,
|
||||||
const std::vector<double>& wells_perf_length,
|
const std::vector<double>& wells_perf_length,
|
||||||
|
const std::vector<double>& wells_bore_diameter,
|
||||||
const bool terminal_output)
|
const bool terminal_output)
|
||||||
: Base(param, grid, fluid, geo, rock_comp_props, wells, linsolver,
|
: Base(param, grid, fluid, geo, rock_comp_props, wells, linsolver,
|
||||||
has_disgas, has_vapoil, terminal_output),
|
has_disgas, has_vapoil, terminal_output),
|
||||||
@@ -98,7 +99,8 @@ namespace Opm {
|
|||||||
has_shrate_(has_shrate),
|
has_shrate_(has_shrate),
|
||||||
poly_pos_(detail::polymerPos(fluid.phaseUsage())),
|
poly_pos_(detail::polymerPos(fluid.phaseUsage())),
|
||||||
wells_rep_radius_(wells_rep_radius),
|
wells_rep_radius_(wells_rep_radius),
|
||||||
wells_perf_length_(wells_perf_length)
|
wells_perf_length_(wells_perf_length),
|
||||||
|
wells_bore_diameter_(wells_bore_diameter)
|
||||||
{
|
{
|
||||||
if (has_polymer_) {
|
if (has_polymer_) {
|
||||||
if (!active_[Water]) {
|
if (!active_[Water]) {
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ namespace Opm
|
|||||||
|
|
||||||
std::vector<double> wells_rep_radius_;
|
std::vector<double> wells_rep_radius_;
|
||||||
std::vector<double> wells_perf_length_;
|
std::vector<double> wells_perf_length_;
|
||||||
|
std::vector<double> wells_bore_diameter_;
|
||||||
|
|
||||||
// generate the mapping from Cartesian grid cells to global compressed cells,
|
// generate the mapping from Cartesian grid cells to global compressed cells,
|
||||||
// copied from opm-core, to be used in function computeRepRadiusPerfLength()
|
// copied from opm-core, to be used in function computeRepRadiusPerfLength()
|
||||||
@@ -150,13 +151,15 @@ namespace Opm
|
|||||||
setupCompressedToCartesian(const int* global_cell, int number_of_cells, std::map<int,int>& cartesian_to_compressed);
|
setupCompressedToCartesian(const int* global_cell, int number_of_cells, std::map<int,int>& cartesian_to_compressed);
|
||||||
|
|
||||||
// calculate the representative radius and length for for well peforations
|
// calculate the representative radius and length for for well peforations
|
||||||
|
// and store the wellbore diameters
|
||||||
// it will be used in the shear-thinning calcluation only.
|
// it will be used in the shear-thinning calcluation only.
|
||||||
void
|
void
|
||||||
computeRepRadiusPerfLength(const Opm::EclipseStateConstPtr eclipseState,
|
computeRepRadiusPerfLength(const Opm::EclipseStateConstPtr eclipseState,
|
||||||
const size_t timeStep,
|
const size_t timeStep,
|
||||||
const GridT& grid,
|
const GridT& grid,
|
||||||
std::vector<double>& wells_rep_radius,
|
std::vector<double>& wells_rep_radius,
|
||||||
std::vector<double>& wells_perf_length);
|
std::vector<double>& wells_perf_length,
|
||||||
|
std::vector<double>& wells_bore_diameter);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ namespace Opm
|
|||||||
has_shrate_,
|
has_shrate_,
|
||||||
wells_rep_radius_,
|
wells_rep_radius_,
|
||||||
wells_perf_length_,
|
wells_perf_length_,
|
||||||
|
wells_bore_diameter_,
|
||||||
BaseType::terminal_output_));
|
BaseType::terminal_output_));
|
||||||
|
|
||||||
if (!BaseType::threshold_pressures_by_face_.empty()) {
|
if (!BaseType::threshold_pressures_by_face_.empty()) {
|
||||||
@@ -125,7 +126,7 @@ namespace Opm
|
|||||||
polymer_inflow_c);
|
polymer_inflow_c);
|
||||||
well_state.polymerInflow() = polymer_inflow_c;
|
well_state.polymerInflow() = polymer_inflow_c;
|
||||||
|
|
||||||
computeRepRadiusPerfLength(BaseType::eclipse_state_, timer.currentStepNum(), BaseType::grid_, wells_rep_radius_, wells_perf_length_);
|
computeRepRadiusPerfLength(BaseType::eclipse_state_, timer.currentStepNum(), BaseType::grid_, wells_rep_radius_, wells_perf_length_, wells_bore_diameter_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -154,7 +155,8 @@ namespace Opm
|
|||||||
const size_t timeStep,
|
const size_t timeStep,
|
||||||
const GridT& grid,
|
const GridT& grid,
|
||||||
std::vector<double>& wells_rep_radius,
|
std::vector<double>& wells_rep_radius,
|
||||||
std::vector<double>& wells_perf_length)
|
std::vector<double>& wells_perf_length,
|
||||||
|
std::vector<double>& wells_bore_diameter)
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO, the function does not work for parallel running
|
// TODO, the function does not work for parallel running
|
||||||
@@ -175,9 +177,11 @@ namespace Opm
|
|||||||
|
|
||||||
wells_rep_radius.clear();
|
wells_rep_radius.clear();
|
||||||
wells_perf_length.clear();
|
wells_perf_length.clear();
|
||||||
|
wells_bore_diameter.clear();
|
||||||
|
|
||||||
wells_rep_radius.reserve(n_perf);
|
wells_rep_radius.reserve(n_perf);
|
||||||
wells_perf_length.reserve(n_perf);
|
wells_perf_length.reserve(n_perf);
|
||||||
|
wells_bore_diameter.reserve(n_perf);
|
||||||
|
|
||||||
std::map<int,int> cartesian_to_compressed;
|
std::map<int,int> cartesian_to_compressed;
|
||||||
|
|
||||||
@@ -248,6 +252,7 @@ namespace Opm
|
|||||||
double repR = std::sqrt(re * radius);
|
double repR = std::sqrt(re * radius);
|
||||||
wells_rep_radius.push_back(repR);
|
wells_rep_radius.push_back(repR);
|
||||||
wells_perf_length.push_back(perf_length);
|
wells_perf_length.push_back(perf_length);
|
||||||
|
wells_bore_diameter.push_back(2. * radius);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (completion->getState() != WellCompletion::SHUT) {
|
if (completion->getState() != WellCompletion::SHUT) {
|
||||||
|
|||||||
Reference in New Issue
Block a user