mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
removing a few variables related to matrix opertaion
This commit is contained in:
parent
fc06923c50
commit
20c21a6cb2
@ -232,10 +232,6 @@ namespace Opm
|
|||||||
// TODO: if we decided not to invert it, we better change the name of it
|
// TODO: if we decided not to invert it, we better change the name of it
|
||||||
mutable DiagMatWell duneD_;
|
mutable DiagMatWell duneD_;
|
||||||
|
|
||||||
// several vector used in the matrix calculation
|
|
||||||
mutable BVectorWell Bx_;
|
|
||||||
mutable BVector scaleAddRes_;
|
|
||||||
|
|
||||||
// residuals of the well equations
|
// residuals of the well equations
|
||||||
mutable BVectorWell resWell_;
|
mutable BVectorWell resWell_;
|
||||||
|
|
||||||
@ -343,9 +339,9 @@ namespace Opm
|
|||||||
// obtain y = D^-1 * x
|
// obtain y = D^-1 * x
|
||||||
template<typename MatrixType, typename VectorType>
|
template<typename MatrixType, typename VectorType>
|
||||||
VectorType
|
VectorType
|
||||||
invDX(MatrixType D, VectorType x)
|
invDX(const MatrixType& D, VectorType x)
|
||||||
{
|
{
|
||||||
// TODO: checking the problem related to use reference parameter
|
// the function will change the value of x, so we should not use reference of x here.
|
||||||
|
|
||||||
// TODO: store some of the following information to avoid to call it again and again for
|
// TODO: store some of the following information to avoid to call it again and again for
|
||||||
// efficiency improvement.
|
// efficiency improvement.
|
||||||
@ -353,6 +349,7 @@ namespace Opm
|
|||||||
|
|
||||||
VectorType y(x.size());
|
VectorType y(x.size());
|
||||||
y = 0.;
|
y = 0.;
|
||||||
|
|
||||||
Dune::MatrixAdapter<MatrixType, VectorType, VectorType> linearOperator(D);
|
Dune::MatrixAdapter<MatrixType, VectorType, VectorType> linearOperator(D);
|
||||||
|
|
||||||
// Sequential incomplete LU decomposition as the preconditioner
|
// Sequential incomplete LU decomposition as the preconditioner
|
||||||
|
@ -179,9 +179,6 @@ namespace Opm
|
|||||||
|
|
||||||
resWell_.resize( numberOfSegments() );
|
resWell_.resize( numberOfSegments() );
|
||||||
|
|
||||||
// resize temporary class variables
|
|
||||||
Bx_.resize( duneC_.N() );
|
|
||||||
|
|
||||||
// TODO: maybe this function need a different name for better meaning
|
// TODO: maybe this function need a different name for better meaning
|
||||||
primary_variables_.resize(numberOfSegments());
|
primary_variables_.resize(numberOfSegments());
|
||||||
primary_variables_evaluation_.resize(numberOfSegments());
|
primary_variables_evaluation_.resize(numberOfSegments());
|
||||||
@ -572,12 +569,12 @@ namespace Opm
|
|||||||
MultisegmentWell<TypeTag>::
|
MultisegmentWell<TypeTag>::
|
||||||
apply(const BVector& x, BVector& Ax) const
|
apply(const BVector& x, BVector& Ax) const
|
||||||
{
|
{
|
||||||
assert( Bx_.size() == duneB_.N() );
|
BVectorWell Bx(duneB_.N());
|
||||||
|
|
||||||
|
duneB_.mv(x, Bx);
|
||||||
|
|
||||||
// Bx_ = duneB_ * x
|
|
||||||
duneB_.mv(x, Bx_);
|
|
||||||
// invDBx = duneD^-1 * Bx_
|
// invDBx = duneD^-1 * Bx_
|
||||||
BVectorWell invDBx = invDX(duneD_, Bx_);
|
BVectorWell invDBx = invDX(duneD_, Bx);
|
||||||
|
|
||||||
// Ax = Ax - duneC_^T * invDBx
|
// Ax = Ax - duneC_^T * invDBx
|
||||||
duneC_.mmtv(invDBx,Ax);
|
duneC_.mmtv(invDBx,Ax);
|
||||||
@ -1628,24 +1625,6 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert the fractions to be Q_p / G_total to calculate the phase rates
|
|
||||||
if (well_controls_get_current_type(well_controls_) == RESERVOIR_RATE) {
|
|
||||||
const double* distr = well_controls_get_current_distr(well_controls_);
|
|
||||||
for (int p = 0; p < number_of_phases_; ++p) {
|
|
||||||
if (distr[p] > 0.) { // for injection wells, thre is only one non-zero distr value
|
|
||||||
fractions[p] /= distr[p];
|
|
||||||
} else {
|
|
||||||
// this only happens to injection well so far
|
|
||||||
fractions[p] = 0.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const std::vector<double> g = {1., 1., 0.01};
|
|
||||||
for (int p = 0; p < number_of_phases_; ++p) {
|
|
||||||
fractions[p] /= g[p];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate the phase rates based on the primary variables
|
// calculate the phase rates based on the primary variables
|
||||||
const double g_total = primary_variables_[seg][GTotal];
|
const double g_total = primary_variables_[seg][GTotal];
|
||||||
const int top_segment_location = well_state.topSegmentLocation(index_of_well_);
|
const int top_segment_location = well_state.topSegmentLocation(index_of_well_);
|
||||||
|
Loading…
Reference in New Issue
Block a user