mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
calculating the viscosity of the fluid in segments
This commit is contained in:
@@ -208,6 +208,11 @@ namespace Opm {
|
|||||||
// the mass flow rate in the segments
|
// the mass flow rate in the segments
|
||||||
ADB segment_mass_flow_rates_;
|
ADB segment_mass_flow_rates_;
|
||||||
|
|
||||||
|
// the viscosity of the fluid mixture in the segments
|
||||||
|
// TODO: it is only used to calculate the Reynolds number as we know
|
||||||
|
// maybe it is better just to store the Reynolds number here?
|
||||||
|
ADB segment_viscosities_;
|
||||||
|
|
||||||
const std::vector<WellMultiSegmentConstPtr> wells_multisegment_;
|
const std::vector<WellMultiSegmentConstPtr> wells_multisegment_;
|
||||||
|
|
||||||
std::vector<int> top_well_segments_;
|
std::vector<int> top_well_segments_;
|
||||||
|
@@ -87,6 +87,7 @@ namespace Opm {
|
|||||||
, segment_comp_surf_volume_initial_(fluid.numPhases())
|
, segment_comp_surf_volume_initial_(fluid.numPhases())
|
||||||
, segment_comp_surf_volume_current_(fluid.numPhases(), ADB::null())
|
, segment_comp_surf_volume_current_(fluid.numPhases(), ADB::null())
|
||||||
, segment_mass_flow_rates_(ADB::null())
|
, segment_mass_flow_rates_(ADB::null())
|
||||||
|
, segment_viscosities_(ADB::null())
|
||||||
, wells_multisegment_(wells_multisegment)
|
, wells_multisegment_(wells_multisegment)
|
||||||
{
|
{
|
||||||
// Modify the wops_.well_cell member, since the
|
// Modify the wops_.well_cell member, since the
|
||||||
@@ -1703,11 +1704,14 @@ namespace Opm {
|
|||||||
segment_cond[s] = pc[segment_cells[s]];
|
segment_cond[s] = pc[segment_cells[s]];
|
||||||
}
|
}
|
||||||
std::vector<ADB> b_seg(np, ADB::null());
|
std::vector<ADB> b_seg(np, ADB::null());
|
||||||
|
// Viscosities for different phases
|
||||||
|
std::vector<ADB> mu_seg(np, ADB::null());
|
||||||
ADB rsmax_seg = ADB::null();
|
ADB rsmax_seg = ADB::null();
|
||||||
ADB rvmax_seg = ADB::null();
|
ADB rvmax_seg = ADB::null();
|
||||||
const PhaseUsage& pu = fluid_.phaseUsage();
|
const PhaseUsage& pu = fluid_.phaseUsage();
|
||||||
if (pu.phase_used[Water]) {
|
if (pu.phase_used[Water]) {
|
||||||
b_seg[pu.phase_pos[Water]] = fluid_.bWat(segment_press, segment_temp, segment_cells);
|
b_seg[pu.phase_pos[Water]] = fluid_.bWat(segment_press, segment_temp, segment_cells);
|
||||||
|
mu_seg[pu.phase_pos[Water]] = fluid_.muWat(segment_press, segment_temp, segment_cells);
|
||||||
}
|
}
|
||||||
assert(active_[Oil]);
|
assert(active_[Oil]);
|
||||||
const ADB segment_so = subset(state.saturation[pu.phase_pos[Oil]], segment_cells);
|
const ADB segment_so = subset(state.saturation[pu.phase_pos[Oil]], segment_cells);
|
||||||
@@ -1716,6 +1720,8 @@ namespace Opm {
|
|||||||
b_seg[pu.phase_pos[Oil]] = fluid_.bOil(segment_press, segment_temp, segment_rs,
|
b_seg[pu.phase_pos[Oil]] = fluid_.bOil(segment_press, segment_temp, segment_rs,
|
||||||
segment_cond, segment_cells);
|
segment_cond, segment_cells);
|
||||||
rsmax_seg = fluidRsSat(segment_press, segment_so, segment_cells);
|
rsmax_seg = fluidRsSat(segment_press, segment_so, segment_cells);
|
||||||
|
mu_seg[pu.phase_pos[Oil]] = fluid_.muOil(segment_press, segment_temp, segment_rs,
|
||||||
|
segment_cond, segment_cells);
|
||||||
}
|
}
|
||||||
assert(active_[Gas]);
|
assert(active_[Gas]);
|
||||||
if (pu.phase_used[Gas]) {
|
if (pu.phase_used[Gas]) {
|
||||||
@@ -1723,6 +1729,8 @@ namespace Opm {
|
|||||||
b_seg[pu.phase_pos[Gas]] = fluid_.bGas(segment_press, segment_temp, segment_rv,
|
b_seg[pu.phase_pos[Gas]] = fluid_.bGas(segment_press, segment_temp, segment_rv,
|
||||||
segment_cond, segment_cells);
|
segment_cond, segment_cells);
|
||||||
rvmax_seg = fluidRvSat(segment_press, segment_so, segment_cells);
|
rvmax_seg = fluidRvSat(segment_press, segment_so, segment_cells);
|
||||||
|
mu_seg[pu.phase_pos[Gas]] = fluid_.muGas(segment_press, segment_temp, segment_rv,
|
||||||
|
segment_cond, segment_cells);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
std::cout << " segment_press " << std::endl;
|
std::cout << " segment_press " << std::endl;
|
||||||
@@ -1861,6 +1869,11 @@ namespace Opm {
|
|||||||
segment_mass_flow_rates_ += surf_dens[pu.phase_pos[phase]] * segqs[phase];
|
segment_mass_flow_rates_ += surf_dens[pu.phase_pos[phase]] * segqs[phase];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Viscosity of the fluid mixture in the segments
|
||||||
|
segment_viscosities_ = ADB::constant(V::Zero(nseg_total));
|
||||||
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
|
segment_viscosities_ += x[phase] * mu_seg[phase];
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
std::cout << " output the well_segment_densities_ " << std::endl;
|
std::cout << " output the well_segment_densities_ " << std::endl;
|
||||||
std::cout << well_segment_densities_.value() << std::endl;
|
std::cout << well_segment_densities_.value() << std::endl;
|
||||||
|
Reference in New Issue
Block a user