24 #ifndef _GMRES_LINEAR_SOLVER_H_
25 #define _GMRES_LINEAR_SOLVER_H_
27 #include <lac/vector.h>
28 #include <lac/block_sparsity_pattern.h>
29 #include <lac/block_sparse_matrix.h>
30 #include <lac/compressed_simple_sparsity_pattern.h>
31 #include <lac/solver_gmres.h>
32 #include <lac/precondition.h>
33 #include <lac/full_matrix.h>
35 #include <dofs/dof_tools.h>
37 #include <numerics/vector_tools.h>
56 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
69 template<
typename PROBLEM>
90 template<
typename PROBLEM,
typename INTEGRATOR>
91 void Solve(PROBLEM& pde,INTEGRATOR& integr, VECTOR &rhs, VECTOR &solution,
bool force_matrix_build=
false);
96 SPARSITYPATTERN _sparsity_pattern;
99 double _linear_global_tol, _linear_tol;
100 int _linear_maxiter, _no_tmp_vectors;
105 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
109 param_reader.
declare_entry(
"linear_global_tol",
"1.e-10",Patterns::Double(0),
"global tolerance for the gmres iteration");
110 param_reader.
declare_entry(
"linear_maxiter",
"1000",Patterns::Integer(0),
"maximal number of gmres steps");
111 param_reader.
declare_entry(
"no_tmp_vectors",
"100",Patterns::Integer(0),
"Number of temporary vectors");
115 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
120 _linear_global_tol = param_reader.
get_double (
"linear_global_tol");
121 _linear_maxiter = param_reader.
get_integer (
"linear_maxiter");
122 _no_tmp_vectors = param_reader.
get_integer (
"no_tmp_vectors");
128 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
135 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
136 template<
typename PROBLEM>
140 pde.ComputeSparsityPattern(_sparsity_pattern);
141 _matrix.reinit(_sparsity_pattern);
146 template <
typename PRECONDITIONER,
typename SPARSITYPATTERN,
typename MATRIX,
typename VECTOR>
147 template<
typename PROBLEM,
typename INTEGRATOR>
152 bool force_matrix_build)
154 if(force_matrix_build)
156 integr.ComputeMatrix (pde,_matrix);
159 integr.ApplyNewtonBoundaryValues(pde,_matrix,rhs,solution);
161 dealii::SolverControl solver_control (_linear_maxiter, _linear_global_tol,
false,
false);
164 dealii::GrowingVectorMemory<VECTOR> vector_memory;
165 typename dealii::SolverGMRES<VECTOR>::AdditionalData gmres_data;
166 gmres_data.max_n_tmp_vectors = _no_tmp_vectors;
169 dealii::SolverGMRES<VECTOR> gmres (solver_control, vector_memory, gmres_data);
170 PRECONDITIONER precondition;
171 precondition.initialize(_matrix);
172 gmres.solve (_matrix, solution, rhs,
175 pde.GetDoFConstraints().distribute(solution);
~GMRESLinearSolverWithMatrix()
Definition: gmreslinearsolver.h:129
double get_double(const std::string &entry_name)
Definition: parameterreader.h:115
Definition: parameterreader.h:36
void Solve(PROBLEM &pde, INTEGRATOR &integr, VECTOR &rhs, VECTOR &solution, bool force_matrix_build=false)
Definition: gmreslinearsolver.h:148
void declare_entry(const std::string &entry, const std::string &default_value, const Patterns::PatternBase &pattern=Patterns::Anything(), const std::string &documentation=std::string())
Definition: parameterreader.h:98
GMRESLinearSolverWithMatrix(ParameterReader ¶m_reader)
Definition: gmreslinearsolver.h:117
static void declare_params(ParameterReader ¶m_reader)
Definition: gmreslinearsolver.h:106
int get_integer(const std::string &entry_name)
Definition: parameterreader.h:126
void SetSubsection(const std::string subsection)
Definition: parameterreader.h:93
Definition: gmreslinearsolver.h:57
void ReInit(PROBLEM &pde)
Definition: gmreslinearsolver.h:137