mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Fix seg-fault for cases without wells
This commit is contained in:
parent
49f3306abe
commit
cd749b3452
@ -114,6 +114,11 @@ namespace Opm {
|
|||||||
const std::vector<double>& depth_arg,
|
const std::vector<double>& depth_arg,
|
||||||
const std::vector<double>& pv_arg)
|
const std::vector<double>& pv_arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if ( ! localWellsActive() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fluid_ = fluid_arg;
|
fluid_ = fluid_arg;
|
||||||
active_ = active_arg;
|
active_ = active_arg;
|
||||||
vfp_properties_ = vfp_properties_arg;
|
vfp_properties_ = vfp_properties_arg;
|
||||||
@ -121,7 +126,6 @@ namespace Opm {
|
|||||||
cell_depths_ = extractPerfData(depth_arg);
|
cell_depths_ = extractPerfData(depth_arg);
|
||||||
pv_ = pv_arg;
|
pv_ = pv_arg;
|
||||||
|
|
||||||
|
|
||||||
// setup sparsity pattern for the matrices
|
// setup sparsity pattern for the matrices
|
||||||
//[A B^T [x = [ res
|
//[A B^T [x = [ res
|
||||||
// C D] x_well] res_well]
|
// C D] x_well] res_well]
|
||||||
@ -221,7 +225,7 @@ namespace Opm {
|
|||||||
|
|
||||||
const int cell_idx = wells().well_cells[perf];
|
const int cell_idx = wells().well_cells[perf];
|
||||||
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
||||||
std::vector<EvalWell> cq_s(np);
|
std::vector<EvalWell> cq_s(np,0.0);
|
||||||
computeWellFlux(w, wells().WI[perf], intQuants, wellPerforationPressureDiffs()[perf], cq_s);
|
computeWellFlux(w, wells().WI[perf], intQuants, wellPerforationPressureDiffs()[perf], cq_s);
|
||||||
|
|
||||||
for (int p1 = 0; p1 < np; ++p1) {
|
for (int p1 = 0; p1 < np; ++p1) {
|
||||||
@ -286,6 +290,10 @@ namespace Opm {
|
|||||||
|
|
||||||
// substract Binv(D)rw from r;
|
// substract Binv(D)rw from r;
|
||||||
void apply( BVector& r) const {
|
void apply( BVector& r) const {
|
||||||
|
if ( ! localWellsActive() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BVector invDrw(invDuneD_.N());
|
BVector invDrw(invDuneD_.N());
|
||||||
invDuneD_.mv(resWell_,invDrw);
|
invDuneD_.mv(resWell_,invDrw);
|
||||||
duneB_.mmtv(invDrw, r);
|
duneB_.mmtv(invDrw, r);
|
||||||
@ -293,6 +301,9 @@ namespace Opm {
|
|||||||
|
|
||||||
// subtract B*inv(D)*C * x from A*x
|
// subtract B*inv(D)*C * x from A*x
|
||||||
void apply(const BVector& x, BVector& Ax) {
|
void apply(const BVector& x, BVector& Ax) {
|
||||||
|
if ( ! localWellsActive() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
BVector Cx(duneC_.N());
|
BVector Cx(duneC_.N());
|
||||||
duneC_.mv(x, Cx);
|
duneC_.mv(x, Cx);
|
||||||
BVector invDCx(invDuneD_.N());
|
BVector invDCx(invDuneD_.N());
|
||||||
@ -302,6 +313,9 @@ namespace Opm {
|
|||||||
|
|
||||||
// xw = inv(D)*(rw - C*x)
|
// xw = inv(D)*(rw - C*x)
|
||||||
void recoverVariable(const BVector& x, BVector& xw) const {
|
void recoverVariable(const BVector& x, BVector& xw) const {
|
||||||
|
if ( ! localWellsActive() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
BVector resWell = resWell_;
|
BVector resWell = resWell_;
|
||||||
duneC_.mmv(x, resWell);
|
duneC_.mmv(x, resWell);
|
||||||
invDuneD_.mv(resWell, xw);
|
invDuneD_.mv(resWell, xw);
|
||||||
|
Loading…
Reference in New Issue
Block a user