40 std::vector<GlobalVector*>
const& x,
41 std::vector<GlobalVector*>
const& x_prev,
int const process_id) = 0;
54 std::vector<GlobalVector*>& x,
55 std::vector<GlobalVector*>
const& x_prev,
56 std::function<
void(
int,
bool, std::vector<GlobalVector*>
const&)>
const&
57 postIterationCallback,
58 int const process_id) = 0;
70template <NonlinearSolverTag NLTag>
94 int const recompute_jacobian = 1,
95 double const damping = 1.0)
96 : _linear_solver(linear_solver),
98 _recompute_jacobian(recompute_jacobian),
109 _equation_system = &eq;
110 _convergence_criterion = &conv_crit;
113 void calculateNonEquilibriumInitialResiduum(
114 std::vector<GlobalVector*>
const& x,
115 std::vector<GlobalVector*>
const& x_prev,
116 int const process_id)
override;
119 std::vector<GlobalVector*>& x,
120 std::vector<GlobalVector*>
const& x_prev,
121 std::function<
void(
int,
bool, std::vector<GlobalVector*>
const&)>
const&
122 postIterationCallback,
123 int const process_id)
override;
127 _compensate_non_equilibrium_initial_residuum = value;
138 int const _recompute_jacobian = 1;
147 std::size_t _res_id = 0u;
148 std::size_t _J_id = 0u;
149 std::size_t _minus_delta_x_id = 0u;
150 std::size_t _x_new_id =
152 std::size_t _r_neq_id = 0u;
160 bool _compensate_non_equilibrium_initial_residuum =
false;
183 : _linear_solver(linear_solver), _maxiter(maxiter)
193 _equation_system = &eq;
194 _convergence_criterion = &conv_crit;
197 void calculateNonEquilibriumInitialResiduum(
198 std::vector<GlobalVector*>
const& x,
199 std::vector<GlobalVector*>
const& x_prev,
200 int const process_id)
override;
203 std::vector<GlobalVector*>& x,
204 std::vector<GlobalVector*>
const& x_prev,
205 std::function<
void(
int,
bool, std::vector<GlobalVector*>
const&)>
const&
206 postIterationCallback,
207 int const process_id)
override;
211 _compensate_non_equilibrium_initial_residuum = value;
223 std::size_t _A_id = 0u;
224 std::size_t _rhs_id = 0u;
225 std::size_t _x_new_id = 0u;
227 std::size_t _r_neq_id = 0u;
232 bool _compensate_non_equilibrium_initial_residuum =
false;
Global vector based on Eigen vector.
virtual ~NonlinearSolverBase()=default
virtual NonlinearSolverStatus solve(std::vector< GlobalVector * > &x, std::vector< GlobalVector * > const &x_prev, std::function< void(int, bool, std::vector< GlobalVector * > const &)> const &postIterationCallback, int const process_id)=0
virtual void calculateNonEquilibriumInitialResiduum(std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id)=0
GlobalLinearSolver & _linear_solver
void compensateNonEquilibriumInitialResiduum(bool const value)
void setEquationSystem(System &eq, ConvergenceCriterion &conv_crit)
int const _maxiter
maximum number of iterations
NonlinearSolver(GlobalLinearSolver &linear_solver, int const maxiter, int const recompute_jacobian=1, double const damping=1.0)
const int _maxiter
maximum number of iterations
void compensateNonEquilibriumInitialResiduum(bool const value)
GlobalLinearSolver & _linear_solver
NonlinearSolver(GlobalLinearSolver &linear_solver, const int maxiter)
void setEquationSystem(System &eq, ConvergenceCriterion &conv_crit)
NonlinearSolverTag
Tag used to specify which nonlinear solver will be used.
std::pair< std::unique_ptr< NonlinearSolverBase >, NonlinearSolverTag > createNonlinearSolver(GlobalLinearSolver &linear_solver, BaseLib::ConfigTree const &config)
Status of the non-linear solver.