mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
making matrix C and B same with the reference paper.
Really no good point to make C and B different from the paper formulation except introducing more confusion.
This commit is contained in:
@@ -343,7 +343,7 @@ enum WellVariablePositions {
|
|||||||
|
|
||||||
long int global_nc_;
|
long int global_nc_;
|
||||||
|
|
||||||
mutable BVector Cx_;
|
mutable BVector Bx_;
|
||||||
mutable BVector invDrw_;
|
mutable BVector invDrw_;
|
||||||
mutable BVector scaleAddRes_;
|
mutable BVector scaleAddRes_;
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ namespace Opm {
|
|||||||
if( wells_ )
|
if( wells_ )
|
||||||
{
|
{
|
||||||
invDuneD_.setBuildMode( Mat::row_wise );
|
invDuneD_.setBuildMode( Mat::row_wise );
|
||||||
duneC_.setBuildMode( Mat::row_wise );
|
|
||||||
duneB_.setBuildMode( Mat::row_wise );
|
duneB_.setBuildMode( Mat::row_wise );
|
||||||
|
duneC_.setBuildMode( Mat::row_wise );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,8 +69,8 @@ namespace Opm {
|
|||||||
calculateEfficiencyFactors();
|
calculateEfficiencyFactors();
|
||||||
|
|
||||||
// setup sparsity pattern for the matrices
|
// setup sparsity pattern for the matrices
|
||||||
//[A B^T [x = [ res
|
//[A C^T [x = [ res
|
||||||
// C D] x_well] res_well]
|
// B D] x_well] res_well]
|
||||||
|
|
||||||
const int nw = wells().number_of_wells;
|
const int nw = wells().number_of_wells;
|
||||||
const int nperf = wells().well_connpos[nw];
|
const int nperf = wells().well_connpos[nw];
|
||||||
@@ -88,18 +88,18 @@ namespace Opm {
|
|||||||
// set invDuneD
|
// set invDuneD
|
||||||
invDuneD_.setSize( nw, nw, nw );
|
invDuneD_.setSize( nw, nw, nw );
|
||||||
|
|
||||||
// set duneC
|
|
||||||
duneC_.setSize( nw, nc, nperf );
|
|
||||||
|
|
||||||
// set duneB
|
// set duneB
|
||||||
duneB_.setSize( nw, nc, nperf );
|
duneB_.setSize( nw, nc, nperf );
|
||||||
|
|
||||||
|
// set duneC
|
||||||
|
duneC_.setSize( nw, nc, nperf );
|
||||||
|
|
||||||
for (auto row=invDuneD_.createbegin(), end = invDuneD_.createend(); row!=end; ++row) {
|
for (auto row=invDuneD_.createbegin(), end = invDuneD_.createend(); row!=end; ++row) {
|
||||||
// Add nonzeros for diagonal
|
// Add nonzeros for diagonal
|
||||||
row.insert(row.index());
|
row.insert(row.index());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto row = duneC_.createbegin(), end = duneC_.createend(); row!=end; ++row) {
|
for (auto row = duneB_.createbegin(), end = duneB_.createend(); row!=end; ++row) {
|
||||||
// Add nonzeros for diagonal
|
// Add nonzeros for diagonal
|
||||||
for (int perf = wells().well_connpos[row.index()] ; perf < wells().well_connpos[row.index()+1]; ++perf) {
|
for (int perf = wells().well_connpos[row.index()] ; perf < wells().well_connpos[row.index()+1]; ++perf) {
|
||||||
const int cell_idx = wells().well_cells[perf];
|
const int cell_idx = wells().well_cells[perf];
|
||||||
@@ -107,8 +107,8 @@ namespace Opm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make the B^T matrix
|
// make the C^T matrix
|
||||||
for (auto row = duneB_.createbegin(), end = duneB_.createend(); row!=end; ++row) {
|
for (auto row = duneC_.createbegin(), end = duneC_.createend(); row!=end; ++row) {
|
||||||
for (int perf = wells().well_connpos[row.index()] ; perf < wells().well_connpos[row.index()+1]; ++perf) {
|
for (int perf = wells().well_connpos[row.index()] ; perf < wells().well_connpos[row.index()+1]; ++perf) {
|
||||||
const int cell_idx = wells().well_cells[perf];
|
const int cell_idx = wells().well_cells[perf];
|
||||||
row.insert(cell_idx);
|
row.insert(cell_idx);
|
||||||
@@ -118,7 +118,7 @@ namespace Opm {
|
|||||||
resWell_.resize( nw );
|
resWell_.resize( nw );
|
||||||
|
|
||||||
// resize temporary class variables
|
// resize temporary class variables
|
||||||
Cx_.resize( duneC_.N() );
|
Bx_.resize( duneB_.N() );
|
||||||
invDrw_.resize( invDuneD_.N() );
|
invDrw_.resize( invDuneD_.N() );
|
||||||
|
|
||||||
if (has_polymer_)
|
if (has_polymer_)
|
||||||
@@ -405,7 +405,7 @@ namespace Opm {
|
|||||||
assert( invDrw_.size() == invDuneD_.N() );
|
assert( invDrw_.size() == invDuneD_.N() );
|
||||||
|
|
||||||
invDuneD_.mv(resWell_,invDrw_);
|
invDuneD_.mv(resWell_,invDrw_);
|
||||||
duneB_.mmtv(invDrw_, r);
|
duneC_.mmtv(invDrw_, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -421,14 +421,14 @@ namespace Opm {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert( Cx_.size() == duneC_.N() );
|
assert( Bx_.size() == duneB_.N() );
|
||||||
|
|
||||||
BVector& invDCx = invDrw_;
|
BVector& invDBx = invDrw_;
|
||||||
assert( invDCx.size() == invDuneD_.N());
|
assert( invDBx.size() == invDuneD_.N());
|
||||||
|
|
||||||
duneC_.mv(x, Cx_);
|
duneB_.mv(x, Bx_);
|
||||||
invDuneD_.mv(Cx_, invDCx);
|
invDuneD_.mv(Bx_, invDBx);
|
||||||
duneB_.mmtv(invDCx,Ax);
|
duneC_.mmtv(invDBx,Ax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -466,7 +466,7 @@ namespace Opm {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BVector resWell = resWell_;
|
BVector resWell = resWell_;
|
||||||
duneC_.mmv(x, resWell);
|
duneB_.mmv(x, resWell);
|
||||||
invDuneD_.mv(resWell, xw);
|
invDuneD_.mv(resWell, xw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user