BlackoilModel.hpp
Go to the documentation of this file.
248 OPM_THROW(std::runtime_error, "The --nonlinear-solver=nldd option can only be used with --matrix-add-well-contributions=true");
429 this->initialLinearization(report, iteration, nonlinear_solver.minIter(), nonlinear_solver.maxIter(), timer);
478 nonlinear_solver.detectOscillations(residual_norms_history_, residual_norms_history_.size() - 1, isOscillate, isStagnate);
855 const double pvValue = problem.referencePorosity(cell_idx, /*timeIdx=*/0) * model.dofTotalVolume(cell_idx);
881 OpmLog::debug(fmt::format("Setting BlackoilModel mass balance limit (XXXMBE) to {:.2e}", tuning.XXXMBE));
900 const auto [ pvSumLocal, numAquiferPvSumLocal] = localConvergenceData(R_sum, maxCoeff, B_avg, maxCoeffCell);
913 // To disable the usage of relaxed tolerances, you can set the relaxed tolerances as the strict tolerances.
915 // If min_strict_mb_iter = -1 (default) we use a relaxed tolerance for the mass balance for the last iterations
917 const bool relax_final_iteration_mb = (param_.min_strict_mb_iter_ < 0) && (iteration == maxIter);
918 const bool use_relaxed_mb = relax_final_iteration_mb || (param_.min_strict_mb_iter_ >= 0 && iteration >= param_.min_strict_mb_iter_);
923 // We also use relaxed tolerances for cells with total poro volume less than relaxed_max_pv_fraction_
925 const bool relax_final_iteration_cnv = (param_.min_strict_cnv_iter_ < 0) && (iteration == maxIter);
926 const bool relax_iter_cnv = param_.min_strict_mb_iter_ >= 0 && iteration >= param_.min_strict_mb_iter_;
928 const bool use_relaxed_cnv = relax_final_iteration_cnv || relax_pv_fraction_cnv || relax_iter_cnv;
932 std::string message = "Number of newton iterations reached its maximum try to continue with relaxed tolerances:";
1191 const unsigned compIdx = Indices::canonicalToActiveComponentIndex(FluidSystem::solventComponentIndex(phaseIdx));
1244 // the residual of the polymer molecular equation is scaled down by a 100, since molecular weight
1245 // can be much bigger than 1, and this equation shares the same tolerance with other mass balance equations
1254 B_avg[contiEnergyEqIdx] += 1.0 / (4.182e1); // converting J -> RM3 (entalpy / (cp * deltaK * rho) assuming change of 1e-5K of water
#define OPM_END_PARALLEL_TRY_CATCH(prefix, comm) Catch exception and throw in a parallel try-catch clause. Definition: DeferredLoggingErrorHelpers.hpp:172 #define OPM_BEGIN_PARALLEL_TRY_CATCH() Macro to setup the try of a parallel try-catch. Definition: DeferredLoggingErrorHelpers.hpp:138 Class for handling the blackoil aquifer model. Definition: BlackoilAquiferModel.hpp:50 Definition: BlackoilModel.hpp:164 static constexpr int contiEnergyEqIdx Definition: BlackoilModel.hpp:186 SimulatorReportSingle failureReport_ Definition: BlackoilModel.hpp:1135 BlackoilModel(Simulator &simulator, const ModelParameters ¶m, BlackoilWellModel< TypeTag > &well_model, const bool terminal_output) Definition: BlackoilModel.hpp:227 int linearIterationsLastSolve() const Number of linear iterations used in last call to solveJacobianSystem(). Definition: BlackoilModel.hpp:614 SimulatorReportSingle nonlinearIteration(const int iteration, const SimulatorTimerInterface &timer, NonlinearSolverType &nonlinear_solver) Definition: BlackoilModel.hpp:389 SimulatorReportSingle assembleReservoir(const SimulatorTimerInterface &, const int iterationIdx) Assemble the residual and Jacobian of the nonlinear system. Definition: BlackoilModel.hpp:518 GetPropType< TypeTag, Properties::SparseMatrixAdapter > SparseMatrixAdapter Definition: BlackoilModel.hpp:173 ConvergenceReport getReservoirConvergence(const double reportTime, const double dt, const int iteration, const int maxIter, std::vector< Scalar > &B_avg, std::vector< Scalar > &residual_norms) Definition: BlackoilModel.hpp:886 GetPropType< TypeTag, Properties::IntensiveQuantities > IntensiveQuantities Definition: BlackoilModel.hpp:172 ConvergenceReport getConvergence(const SimulatorTimerInterface &timer, const int iteration, const int maxIter, std::vector< double > &residual_norms) Definition: BlackoilModel.hpp:1027 static constexpr int foamConcentrationIdx Definition: BlackoilModel.hpp:200 GetPropType< TypeTag, Properties::FluidSystem > FluidSystem Definition: BlackoilModel.hpp:176 std::vector< std::vector< double > > computeFluidInPlace(const T &, const std::vector< int > &fipnum) const Wrapper required due to not following generic API. Definition: BlackoilModel.hpp:1055 static constexpr int microbialConcentrationIdx Definition: BlackoilModel.hpp:202 std::pair< double, double > localConvergenceData(std::vector< Scalar > &R_sum, std::vector< Scalar > &maxCoeff, std::vector< Scalar > &B_avg, std::vector< int > &maxCoeffCell) Get reservoir quantities on this process needed for convergence calculations. Definition: BlackoilModel.hpp:780 static constexpr bool has_polymermw_ Definition: BlackoilModel.hpp:1128 static constexpr int biofilmConcentrationIdx Definition: BlackoilModel.hpp:205 static constexpr int contiFoamEqIdx Definition: BlackoilModel.hpp:188 static constexpr int polymerMoleWeightIdx Definition: BlackoilModel.hpp:198 static constexpr int contiCalciteEqIdx Definition: BlackoilModel.hpp:194 const std::vector< std::vector< int > > & getConvCells() const Definition: BlackoilModel.hpp:1116 GetPropType< TypeTag, Properties::ElementContext > ElementContext Definition: BlackoilModel.hpp:171 const std::vector< StepReport > & stepReports() const Definition: BlackoilModel.hpp:1088 double computeCnvErrorPv(const std::vector< Scalar > &B_avg, double dt) Compute the total pore volume of cells violating CNV that are not part of a numerical aquifer. Definition: BlackoilModel.hpp:833 std::vector< StepReport > convergence_reports_ Definition: BlackoilModel.hpp:1151 static constexpr int contiMicrobialEqIdx Definition: BlackoilModel.hpp:190 bool terminalOutputEnabled() const Return true if output to cout is wanted. Definition: BlackoilModel.hpp:712 double & linearSolveSetupTime() Definition: BlackoilModel.hpp:621 int numPhases() const The number of active fluid phases in the model. Definition: BlackoilModel.hpp:1047 SimulatorReportSingle afterStep(const SimulatorTimerInterface &) Definition: BlackoilModel.hpp:506 static constexpr int contiBiofilmEqIdx Definition: BlackoilModel.hpp:193 std::tuple< double, double > convergenceReduction(Parallel::Communication comm, const double pvSumLocal, const double numAquiferPvSumLocal, std::vector< Scalar > &R_sum, std::vector< Scalar > &maxCoeff, std::vector< Scalar > &B_avg) Definition: BlackoilModel.hpp:717 static constexpr int contiUreaEqIdx Definition: BlackoilModel.hpp:192 static constexpr int calciteConcentrationIdx Definition: BlackoilModel.hpp:206 static constexpr int temperatureIdx Definition: BlackoilModel.hpp:199 GetPropType< TypeTag, Properties::SolutionVector > SolutionVector Definition: BlackoilModel.hpp:174 const ComponentName & compNames() const Returns const reference to component names. Definition: BlackoilModel.hpp:1297 GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables Definition: BlackoilModel.hpp:175 void initialLinearization(SimulatorReportSingle &report, const int iteration, const int minIter, const int maxIter, const SimulatorTimerInterface &timer) Definition: BlackoilModel.hpp:334 void updateSolution(const BVector &dx) Apply an update to the primary variables. Definition: BlackoilModel.hpp:690 long int global_nc_ The number of cells of the global grid. Definition: BlackoilModel.hpp:1145 GetPropType< TypeTag, Properties::Indices > Indices Definition: BlackoilModel.hpp:177 void updateTUNING(const Tuning &tuning) Definition: BlackoilModel.hpp:878 typename SparseMatrixAdapter::MatrixBlock MatrixBlockType Definition: BlackoilModel.hpp:209 const ModelParameters & param() const Returns const reference to model parameters. Definition: BlackoilModel.hpp:1291 static constexpr int contiOxygenEqIdx Definition: BlackoilModel.hpp:191 void getMaxCoeff(const unsigned cell_idx, const IntensiveQuantities &intQuants, const FluidState &fs, const Residual &modelResid, const Scalar pvValue, std::vector< Scalar > &B_avg, std::vector< Scalar > &R_sum, std::vector< Scalar > &maxCoeff, std::vector< int > &maxCoeffCell) Definition: BlackoilModel.hpp:1175 std::unique_ptr< BlackoilModelNldd< TypeTag > > nlddSolver_ Non-linear DD solver. Definition: BlackoilModel.hpp:1154 SimulatorReportSingle nonlinearIterationNewton(const int iteration, const SimulatorTimerInterface &timer, NonlinearSolverType &nonlinear_solver) Definition: BlackoilModel.hpp:420 void writePartitions(const std::filesystem::path &odir) const Definition: BlackoilModel.hpp:1093 static constexpr int solventSaturationIdx Definition: BlackoilModel.hpp:195 std::vector< std::vector< double > > computeFluidInPlace(const std::vector< int > &) const Should not be called. Definition: BlackoilModel.hpp:1062 static constexpr int polymerConcentrationIdx Definition: BlackoilModel.hpp:197 GetPropType< TypeTag, Properties::Simulator > Simulator Definition: BlackoilModel.hpp:169 const SimulatorReportSingle & failureReport() const return the statistics if the nonlinearIteration() method failed Definition: BlackoilModel.hpp:1078 GetPropType< TypeTag, Properties::MaterialLaw > MaterialLaw Definition: BlackoilModel.hpp:178 static constexpr int contiPolymerMWEqIdx Definition: BlackoilModel.hpp:187 BlackoilWellModel< TypeTag > & well_model_ Definition: BlackoilModel.hpp:1138 BlackoilWellModel< TypeTag > & wellModel() return the StandardWells object Definition: BlackoilModel.hpp:1159 typename SparseMatrixAdapter::IstlMatrix Mat Definition: BlackoilModel.hpp:210 Dune::FieldVector< Scalar, numEq > VectorBlockType Definition: BlackoilModel.hpp:208 static constexpr bool has_solvent_ Definition: BlackoilModel.hpp:1125 const BlackoilWellModel< TypeTag > & wellModel() const Definition: BlackoilModel.hpp:1162 SimulatorReportSingle localAccumulatedReports() const return the statistics if the nonlinearIteration() method failed Definition: BlackoilModel.hpp:1082 static constexpr bool has_polymer_ Definition: BlackoilModel.hpp:1127 void solveJacobianSystem(BVector &x) Definition: BlackoilModel.hpp:629 static constexpr int oxygenConcentrationIdx Definition: BlackoilModel.hpp:203 SimulatorReportSingle prepareStep(const SimulatorTimerInterface &timer) Definition: BlackoilModel.hpp:274 RSTConv rst_conv_ Helper class for RPTRST CONV. Definition: BlackoilModel.hpp:1140 static constexpr int ureaConcentrationIdx Definition: BlackoilModel.hpp:204 GetPropType< TypeTag, Properties::Grid > Grid Definition: BlackoilModel.hpp:170 Dune::BlockVector< VectorBlockType > BVector Definition: BlackoilModel.hpp:211 GetPropType< TypeTag, Properties::Scalar > Scalar Definition: BlackoilModel.hpp:180 static constexpr int saltConcentrationIdx Definition: BlackoilModel.hpp:201 static constexpr int contiBrineEqIdx Definition: BlackoilModel.hpp:189 static constexpr int contiZfracEqIdx Definition: BlackoilModel.hpp:184 static constexpr int contiSolventEqIdx Definition: BlackoilModel.hpp:183 std::vector< std::vector< double > > residual_norms_history_ Definition: BlackoilModel.hpp:1147 GetPropType< TypeTag, Properties::MaterialLawParams > MaterialLawParams Definition: BlackoilModel.hpp:179 static constexpr int contiPolymerEqIdx Definition: BlackoilModel.hpp:185 bool terminal_output_ Whether we print something to std::cout. Definition: BlackoilModel.hpp:1143 Class for handling the blackoil well model. Definition: BlackoilWellModel.hpp:101 Definition: ComponentName.hpp:34 const std::string & name(const int compIdx) const Definition: ComponentName.hpp:38 Definition: ConvergenceReport.hpp:38 @ NotANumber void setReservoirFailed(const ReservoirFailure &rf) Definition: ConvergenceReport.hpp:124 This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato... Definition: FlowProblem.hpp:112 const std::vector< std::vector< int > > & getData() const Obtain a const-ref to the accumulated data. Definition: RSTConv.hpp:58 void update(const ResidualVector &resid) Adds the CONV output for given residual vector. void init(const std::size_t numCells, const RSTConfig &rst_config, const std::array< int, 6 > &compIdx) Init state at beginning of step. Interface class for SimulatorTimer objects, to be improved. Definition: SimulatorTimerInterface.hpp:34 virtual int reportStepNum() const Current report step number. This might differ from currentStepNum in case of sub stepping. Definition: SimulatorTimerInterface.hpp:50 virtual bool lastStepFailed() const =0 Return true if last time step failed. virtual double currentStepLength() const =0 virtual double simulationTimeElapsed() const =0 virtual int currentStepNum() const =0 Dune::Communication< MPIComm > Communication Definition: ParallelCommunication.hpp:30 Definition: AluGridVanguard.hpp:57 std::size_t countGlobalCells(const Grid &grid) Get the number of cells of a global grid. Definition: countGlobalCells.hpp:82 Definition: BlackoilPhases.hpp:27 PhaseUsage phaseUsageFromDeck(const EclipseState &eclipseState) std::string to_string(const ConvergenceReport::ReservoirFailure::Type t) Solver parameters for the BlackoilModel. Definition: BlackoilModelParameters.hpp:484 double relaxed_max_pv_fraction_ Definition: BlackoilModelParameters.hpp:497 bool update_equations_scaling_ Update scaling factors for mass balance equations. Definition: BlackoilModelParameters.hpp:560 double tolerance_cnv_relaxed_ Relaxed local convergence tolerance (can be used when iter >= min_strict_cnv_iter_ && cnvViolatedPV <... Definition: BlackoilModelParameters.hpp:505 double max_residual_allowed_ Absolute max limit for residuals. Definition: BlackoilModelParameters.hpp:494 int min_strict_mb_iter_ Minimum number of Newton iterations before we can use relaxed MB convergence criterion. Definition: BlackoilModelParameters.hpp:554 double tolerance_cnv_ Local convergence tolerance (max of local saturation errors). Definition: BlackoilModelParameters.hpp:503 bool matrix_add_well_contributions_ Whether to add influences of wells between cells to the matrix and preconditioner matrix. Definition: BlackoilModelParameters.hpp:576 int nldd_num_initial_newton_iter_ Definition: BlackoilModelParameters.hpp:611 bool use_update_stabilization_ Try to detect oscillation or stagnation. Definition: BlackoilModelParameters.hpp:563 std::string nonlinear_solver_ Nonlinear solver type: newton or nldd. Definition: BlackoilModelParameters.hpp:602 double tolerance_mb_relaxed_ Relaxed mass balance tolerance (can be used when iter >= min_strict_mb_iter_). Definition: BlackoilModelParameters.hpp:501 int min_strict_cnv_iter_ Minimum number of Newton iterations before we can use relaxed CNV convergence criterion. Definition: BlackoilModelParameters.hpp:551 double tolerance_mb_ Relative mass balance tolerance (total mass balance error). Definition: BlackoilModelParameters.hpp:499 Definition: AquiferGridUtils.hpp:35 Definition: BlackoilPhases.hpp:46 Definition: FlowProblemProperties.hpp:118 Definition: FlowProblemProperties.hpp:98 Definition: FlowProblemProperties.hpp:63 Definition: ISTLSolver.hpp:62 Definition: BlackoilModelParameters.hpp:37 Definition: NonlinearSolver.hpp:41 Definition: BlackoilModel.hpp:76 std::tuple< FlowTimeSteppingParameters, FlowModelParameters, FlowNonLinearSolver, FlowBaseProblem, BlackOilModel > InheritsFrom Definition: BlackoilModel.hpp:78 Definition: AdaptiveTimeStepping.hpp:53 Definition: FlowProblemProperties.hpp:70 A struct for returning timing data from a simulator to its caller. Definition: SimulatorReport.hpp:34 double linear_solve_time Definition: SimulatorReport.hpp:43 double linear_solve_setup_time Definition: SimulatorReport.hpp:42 unsigned int total_newton_iterations Definition: SimulatorReport.hpp:49 unsigned int total_linearizations Definition: SimulatorReport.hpp:48 unsigned int total_linear_iterations Definition: SimulatorReport.hpp:50 |