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:
Kai Bao
2015-09-25 14:57:29 +02:00
parent 2e155c70de
commit 9ccba2b0eb
2 changed files with 12 additions and 0 deletions

View File

@@ -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 {

View File

@@ -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;