16 #ifndef dealii_solver_bicgstab_h 17 #define dealii_solver_bicgstab_h 123 template <
typename VectorType = Vector<
double>>
147 const double breakdown = 1.
e-10)
148 : exact_residual(exact_residual)
149 , breakdown(breakdown)
183 template <
typename MatrixType,
typename PreconditionerType>
185 solve(
const MatrixType &
A,
188 const PreconditionerType &preconditioner);
239 template <
typename MatrixType>
249 print_vectors(
const unsigned int step,
263 template <
typename MatrixType>
265 start(
const MatrixType &
A);
280 const unsigned int last_step,
281 const double last_residual);
288 template <
typename MatrixType,
typename PreconditionerType>
290 iterate(
const MatrixType &
A,
const PreconditionerType &preconditioner);
299 template <
typename VectorType>
301 const bool breakdown,
303 const unsigned int last_step,
304 const double last_residual)
305 : breakdown(breakdown)
307 , last_step(last_step)
308 , last_residual(last_residual)
313 template <
typename VectorType>
325 template <
typename VectorType>
336 template <
typename VectorType>
337 template <
typename MatrixType>
352 template <
typename VectorType>
353 template <
typename MatrixType>
358 Vr->sadd(-1., 1., *
Vb);
366 template <
typename VectorType>
376 template <
typename VectorType>
377 template <
typename MatrixType,
typename PreconditionerType>
380 const PreconditionerType &preconditioner)
416 preconditioner.vmult(y, p);
427 res = std::sqrt(r.add_and_dot(-
alpha, v, r));
442 preconditioner.vmult(z, r);
454 res = std::sqrt(r.add_and_dot(-
omega, t, r));
464 template <
typename VectorType>
465 template <
typename MatrixType,
typename PreconditionerType>
470 const PreconditionerType &preconditioner)
482 Vrbar->reinit(x,
true);
506 state =
iterate(A, preconditioner);
509 while (state.breakdown ==
true);
514 state.last_residual));
Stop iteration, goal not reached.
SolverBicgstab(SolverControl &cn, VectorMemory< VectorType > &mem, const AdditionalData &data=AdditionalData())
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
VectorMemory< VectorType >::Pointer Vrbar
boost::signals2::signal< SolverControl::State(const unsigned int iteration, const double check_value, const VectorType ¤t_iterate), StateCombiner > iteration_status
#define AssertThrow(cond, exc)
VectorMemory< VectorType >::Pointer Vv
VectorMemory< VectorType >::Pointer Vp
VectorMemory< VectorType >::Pointer Vr
Stop iteration, goal reached.
AdditionalData additional_data
#define DEAL_II_NAMESPACE_CLOSE
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
Expression fabs(const Expression &x)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
VectorMemory< VectorType >::Pointer Vt
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
AdditionalData(const bool exact_residual=true, const double breakdown=1.e-10)
virtual void print_vectors(const unsigned int step, const VectorType &x, const VectorType &r, const VectorType &d) const
#define DEAL_II_NAMESPACE_OPEN
IterationResult iterate(const MatrixType &A, const PreconditionerType &preconditioner)
VectorMemory< VectorType >::Pointer Vy
VectorMemory< VectorType >::Pointer Vz
SolverControl::State start(const MatrixType &A)
SolverControl::State state
VectorMemory< VectorType > & memory
double criterion(const MatrixType &A, const VectorType &x, const VectorType &b)
IterationResult(const bool breakdown, const SolverControl::State state, const unsigned int last_step, const double last_residual)