changing the strategy of the updateWellState in MultisegmentWell

only applying relaxation during the inner iteration.
This commit is contained in:
Kai Bao 2017-10-12 16:46:25 +02:00
parent 86269e0de2
commit 7a29c5098f
2 changed files with 8 additions and 4 deletions

View File

@ -262,6 +262,7 @@ namespace Opm
// updating the well_state based on well solution dwells // updating the well_state based on well solution dwells
void updateWellState(const BVectorWell& dwells, void updateWellState(const BVectorWell& dwells,
const BlackoilModelParameters& param, const BlackoilModelParameters& param,
const bool inner_iteration,
WellState& well_state) const; WellState& well_state) const;
// initialize the segment rates with well rates // initialize the segment rates with well rates

View File

@ -525,7 +525,7 @@ namespace Opm
{ {
BVectorWell xw(1); BVectorWell xw(1);
recoverSolutionWell(x, xw); recoverSolutionWell(x, xw);
updateWellState(xw, param, well_state); updateWellState(xw, param, false, well_state);
} }
@ -646,7 +646,7 @@ namespace Opm
// which is why we do not put the assembleWellEq here. // which is why we do not put the assembleWellEq here.
const BVectorWell dx_well = mswellhelpers::invDX(duneD_, resWell_); const BVectorWell dx_well = mswellhelpers::invDX(duneD_, resWell_);
updateWellState(dx_well, param, well_state); updateWellState(dx_well, param, false, well_state);
} }
@ -731,13 +731,14 @@ namespace Opm
MultisegmentWell<TypeTag>:: MultisegmentWell<TypeTag>::
updateWellState(const BVectorWell& dwells, updateWellState(const BVectorWell& dwells,
const BlackoilModelParameters& param, const BlackoilModelParameters& param,
const bool inner_iteration,
WellState& well_state) const WellState& well_state) const
{ {
// TODO: we should probably distinguish the inner iteration or the final update // TODO: we should probably distinguish the inner iteration or the final update
const bool use_inner_iterations = param.use_inner_iterations_ms_wells_; const bool use_inner_iterations = param.use_inner_iterations_ms_wells_;
const double relaxation_factor = use_inner_iterations ? 0.2 : 1.0; const double relaxation_factor = (use_inner_iterations && inner_iteration) ? 0.2 : 1.0;
// I guess the following can also be applied to the segmnet pressure // I guess the following can also be applied to the segmnet pressure
// maybe better to give it a different name // maybe better to give it a different name
@ -1797,6 +1798,7 @@ namespace Opm
// in this stage, but, should we? // in this stage, but, should we?
// We should try to avoid hard-code values in the code. // We should try to avoid hard-code values in the code.
// If we want to use the real one, we need to find a way to get them. // If we want to use the real one, we need to find a way to get them.
// const std::vector<double> B {0.8, 0.8, 0.008};
const std::vector<double> B {0.5, 0.5, 0.005}; const std::vector<double> B {0.5, 0.5, 0.005};
const ConvergenceReport report = getWellConvergence(ebosSimulator, B, param); const ConvergenceReport report = getWellConvergence(ebosSimulator, B, param);
@ -1806,10 +1808,11 @@ namespace Opm
break; break;
} }
updateWellState(dx_well, param, well_state); updateWellState(dx_well, param, true, well_state);
initPrimaryVariablesEvaluation(); initPrimaryVariablesEvaluation();
} }
// TODO: maybe we should not use these values if they are not converged.
} }