mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
adding a mapping from segments to their outlet segments
All the mapping related to the WellMultiSegment remained to be verfied.
This commit is contained in:
@@ -248,6 +248,7 @@ namespace Opm
|
|||||||
m_wops_.s2p = M(m_number_of_perforations_, m_number_of_segments_);
|
m_wops_.s2p = M(m_number_of_perforations_, m_number_of_segments_);
|
||||||
m_wops_.p2s = M(m_number_of_segments_, m_number_of_perforations_);
|
m_wops_.p2s = M(m_number_of_segments_, m_number_of_perforations_);
|
||||||
|
|
||||||
|
|
||||||
typedef Eigen::Triplet<double> Tri;
|
typedef Eigen::Triplet<double> Tri;
|
||||||
|
|
||||||
std::vector<Tri> s2p;
|
std::vector<Tri> s2p;
|
||||||
@@ -273,11 +274,18 @@ namespace Opm
|
|||||||
std::vector<Tri> s2s_gather;
|
std::vector<Tri> s2s_gather;
|
||||||
|
|
||||||
s2s_gather.reserve(m_number_of_segments_ * m_number_of_segments_);
|
s2s_gather.reserve(m_number_of_segments_ * m_number_of_segments_);
|
||||||
|
|
||||||
|
std::vector<Tri> s2s_outlet;
|
||||||
|
s2s_outlet.reserve(m_number_of_segments_);
|
||||||
// a brutal way first
|
// a brutal way first
|
||||||
// will generate matrix with entries bigger than 1.0
|
// will generate matrix with entries bigger than 1.0
|
||||||
// Then we need to normalize all the values.
|
// Then we need to normalize all the values.
|
||||||
for (int s = 0; s < (int)m_number_of_segments_; ++s) {
|
for (int s = 0; s < (int)m_number_of_segments_; ++s) {
|
||||||
s2s_gather.push_back(Tri(s, s, 1.0));
|
s2s_gather.push_back(Tri(s, s, 1.0));
|
||||||
|
int s_outlet = m_outlet_segment_[s];
|
||||||
|
if (s_outlet >=0) {
|
||||||
|
s2s_outlet.push_back(Tri(s_outlet, s, 1.0));
|
||||||
|
}
|
||||||
int temp_s = s;
|
int temp_s = s;
|
||||||
while (m_outlet_segment_[temp_s] >=0) {
|
while (m_outlet_segment_[temp_s] >=0) {
|
||||||
s2s_gather.push_back(Tri(m_outlet_segment_[temp_s], temp_s, 1.0));
|
s2s_gather.push_back(Tri(m_outlet_segment_[temp_s], temp_s, 1.0));
|
||||||
@@ -299,6 +307,9 @@ namespace Opm
|
|||||||
|
|
||||||
// s2s_gather
|
// s2s_gather
|
||||||
|
|
||||||
|
// s2outlet
|
||||||
|
m_wops_.s2s_outlet = M(m_number_of_segments_, m_number_of_segments_);
|
||||||
|
m_wops_.s2s_outlet.setFromTriplets(s2s_outlet.begin(), s2s_outlet.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& WellMultiSegment::name() const {
|
const std::string& WellMultiSegment::name() const {
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ namespace Opm
|
|||||||
// means the outlet segments will gather all the contribution
|
// means the outlet segments will gather all the contribution
|
||||||
// from all the inlet segments in a recurisive way
|
// from all the inlet segments in a recurisive way
|
||||||
M p2s_gather; // perforation -> segment (in an accumative way)
|
M p2s_gather; // perforation -> segment (in an accumative way)
|
||||||
|
M s2s_outlet; // segment -> their outlet segments
|
||||||
};
|
};
|
||||||
|
|
||||||
const WellOps& wellOps() const;
|
const WellOps& wellOps() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user