29 #ifndef OOMPH_ITERATIVE_LINEAR_SOLVER_HEADER
30 #define OOMPH_ITERATIVE_LINEAR_SOLVER_HEADER
35 #include <oomph-lib-config.h>
282 template<
typename MATRIX>
330 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
408 template<
typename MATRIX>
455 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
572 template<
typename MATRIX>
576 const double& n_dof);
597 template<
typename MATRIX>
640 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
678 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
710 throw OomphLibError(
"No matrix was stored -- cannot re-solve",
727 "Gauss Seidel is not a preconditionable iterative solver",
839 setup_helper(matrix_pt);
881 Index_of_diagonal_entries =
dynamic_cast<CRDoubleMatrix*
>(matrix_pt)
882 ->get_index_of_diagonal_entries();
915 throw OomphLibError(
"No matrix was stored -- cannot re-solve",
932 std::string error_output_string =
"Gauss Seidel is not a ";
933 error_output_string +=
"preconditionable iterative solver";
1000 template<
typename MATRIX>
1047 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
1071 std::ostringstream error_message_stream;
1074 error_message_stream <<
"Damped Jacobi can only cater to real-valued "
1075 <<
"matrices. If you require a complex-valued "
1076 <<
"version, please write this yourself. "
1077 <<
"It is likely that the only difference will be "
1078 <<
"the use of complex vectors.";
1092 for (
unsigned i = 0;
i < n_row;
i++)
1103 for (
unsigned i = 0;
i < n_dof;
i++)
1147 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
1168 throw OomphLibError(
"No matrix was stored -- cannot re-solve",
1225 template<
typename MATRIX>
1283 Matrix_pt =
dynamic_cast<MATRIX*
>(matrix_pt);
1378 for (
int i =
int(
k);
i >= 0;
i--)
1384 for (
int j =
i - 1;
j >= 0;
j--)
1392 unsigned n_x =
x.nrow();
1404 for (
unsigned j = 0;
j <=
k;
j++)
1407 const double* vj_pt =
v[
j].values_pt();
1410 for (
unsigned i = 0;
i < n_x;
i++)
1412 temp_pt[
i] += vj_pt[
i] *
y[
j];
1472 double temp = dx / dy;
1475 sn = 1.0 /
sqrt(1.0 + temp * temp);
1485 double temp = dy / dx;
1488 cs = 1.0 /
sqrt(1.0 + temp * temp);
1501 double temp = cs * dx + sn * dy;
1504 dy = -sn * dx + cs * dy;
1604 if (cr_matrix_pt == 0)
1607 throw OomphLibError(
"Can't upcast input matrix to a CRDoubleMatrix!",
1702 unsigned n_dof = matrix_pt->
nrow();
1708 for (
unsigned i = 0;
i < n_dof;
i++)
1718 matrix_pt->
multiply(x_small, a_prod_xsmall);
1721 double y =
x[n_dof];
1724 for (
unsigned i = 0;
i < n_dof;
i++)
1727 soln[
i] = a_prod_xsmall[
i] +
y * (*B_pt)[
i];
1731 soln[n_dof] =
C_pt->
dot(x_small);
1747 bool use_block_diagonal_preconditioner =
false;
1756 for (
unsigned i = 0;
i < n_dof;
i++)
1759 if (use_block_diagonal_preconditioner)
1762 rhs_small[
i] = rhs[
i];
1768 rhs_small[
i] = rhs[
i] - soln[n_dof] * (*B_pt)[
i];
1776 for (
unsigned i = 0;
i < n_dof;
i++)
1779 soln[
i] = r_small[
i];
1800 for (
int i =
int(
k);
i >= 0;
i--)
1806 for (
int j =
i - 1;
j >= 0;
j--)
1814 unsigned n_x =
x.nrow();
1826 for (
unsigned j = 0;
j <=
k;
j++)
1829 const double* vj_pt =
v[
j].values_pt();
1832 for (
unsigned i = 0;
i < n_x;
i++)
1834 temp_pt[
i] += vj_pt[
i] *
y[
j];
1887 double temp = dx / dy;
1890 sn = 1.0 /
sqrt(1.0 + temp * temp);
1900 double temp = dy / dx;
1903 cs = 1.0 /
sqrt(1.0 + temp * temp);
1916 double temp = cs * dx + sn * dy;
1919 dy = -sn * dx + cs * dy;
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
MatrixXf H
Definition: HessenbergDecomposition_matrixH.cpp:4
Definition: flowRule_restart.cpp:8
The GMRES method.
Definition: iterative_linear_solver.h:1549
AugmentedProblemGMRES(DoubleVector *b_pt, DoubleVector *c_pt, double *x_pt, double *rhs_pt)
Constructor.
Definition: iterative_linear_solver.h:1552
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:1647
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:1596
void apply_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: iterative_linear_solver.h:1913
bool Resolving
Definition: iterative_linear_solver.h:1955
DoubleVector * C_pt
Pointer to the row vector in the bordered system.
Definition: iterative_linear_solver.h:1942
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
General interface to solve function.
Definition: iterative_linear_solver.cc:2862
void update(const unsigned &k, const Vector< Vector< double >> &H, const Vector< double > &s, const Vector< DoubleVector > &v, DoubleVector &x)
Definition: iterative_linear_solver.h:1790
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.cc:2831
CRDoubleMatrix * Matrix_pt
Pointer to matrix.
Definition: iterative_linear_solver.h:1936
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:1583
bool Iteration_restart
boolean indicating if iteration restarting is used
Definition: iterative_linear_solver.h:1933
unsigned Restart
Definition: iterative_linear_solver.h:1930
void disable_iteration_restart()
Switches off iteration restart.
Definition: iterative_linear_solver.h:1668
AugmentedProblemGMRES(const AugmentedProblemGMRES &)=delete
Broken copy constructor.
bool iteration_restart() const
access function indicating whether restarted GMRES is used
Definition: iterative_linear_solver.h:1653
double * Rhs_pt
Pointer to the last entry of the RHS vector in the bordered system.
Definition: iterative_linear_solver.h:1948
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: iterative_linear_solver.h:1634
void apply_schur_complement_preconditioner(const DoubleVector &rhs, DoubleVector &soln)
Definition: iterative_linear_solver.h:1736
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:2746
void generate_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: iterative_linear_solver.h:1868
void enable_iteration_restart(const unsigned &restart)
Definition: iterative_linear_solver.h:1661
double Schur_complement_scalar
The scalar component of the Schur complement preconditioner.
Definition: iterative_linear_solver.h:1951
double * X_pt
Pointer to the last entry of the LHS vector in the bordered system.
Definition: iterative_linear_solver.h:1945
void augmented_matrix_multiply(CRDoubleMatrix *matrix_pt, const DoubleVector &x, DoubleVector &soln)
Multiply the vector x by the augmented system matrix.
Definition: iterative_linear_solver.h:1697
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:1926
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:1959
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:1687
void operator=(const AugmentedProblemGMRES &)=delete
Broken assignment operator.
DoubleVector * B_pt
Pointer to the column vector in the bordered system.
Definition: iterative_linear_solver.h:1939
virtual ~AugmentedProblemGMRES()
Destructor: Clean up storage.
Definition: iterative_linear_solver.h:1571
bool Preconditioner_LHS
Definition: iterative_linear_solver.h:1963
void set_preconditioner_RHS()
Enable right preconditioning.
Definition: iterative_linear_solver.h:1680
void set_preconditioner_LHS()
Set left preconditioning (the default)
Definition: iterative_linear_solver.h:1674
The conjugate gradient method.
Definition: iterative_linear_solver.h:410
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:499
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.cc:63
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:533
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:90
MATRIX * Matrix_pt
Pointer to matrix.
Definition: iterative_linear_solver.h:525
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:512
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
General interface to solve function.
Definition: iterative_linear_solver.cc:171
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:522
virtual ~BiCGStab()
Destructor (cleanup storage)
Definition: iterative_linear_solver.h:423
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:435
void operator=(const BiCGStab &)=delete
Broken assignment operator.
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: iterative_linear_solver.h:484
bool Resolving
Definition: iterative_linear_solver.h:529
BiCGStab(const BiCGStab &)=delete
Broken copy constructor.
BiCGStab()
Constructor.
Definition: iterative_linear_solver.h:413
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:448
A class for compressed column matrices that store doubles.
Definition: matrices.h:2791
The conjugate gradient method.
Definition: iterative_linear_solver.h:284
CG()
Constructor.
Definition: iterative_linear_solver.h:287
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:309
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:361
CG(const CG &)=delete
Broken copy constructor.
virtual ~CG()
Destructor (cleanup storage)
Definition: iterative_linear_solver.h:297
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:950
void operator=(const CG &)=delete
Broken assignment operator.
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:323
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:385
MATRIX * Matrix_pt
Pointer to matrix.
Definition: iterative_linear_solver.h:388
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.cc:922
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:396
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:375
bool Resolving
Definition: iterative_linear_solver.h:392
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
General interface to solve function.
Definition: iterative_linear_solver.cc:605
Definition: matrices.h:888
void multiply(const DoubleVector &x, DoubleVector &soln) const
Multiply the matrix by the vector x: soln=Ax.
Definition: matrices.cc:1782
unsigned long nrow() const
Return the number of rows of the matrix.
Definition: matrices.h:1002
Definition: iterative_linear_solver.h:1002
DampedJacobi(const DampedJacobi &)=delete
Broken copy constructor.
bool Resolving
Definition: iterative_linear_solver.h:1203
~DampedJacobi()
Empty destructor.
Definition: iterative_linear_solver.h:1012
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:1207
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:1210
void operator=(const DampedJacobi &)=delete
Broken assignment operator.
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.h:1160
void extract_diagonal_entries(DoubleMatrixBase *matrix_pt)
Function to extract the diagonal entries from the matrix.
Definition: iterative_linear_solver.h:1054
double Omega
Damping factor.
Definition: iterative_linear_solver.h:1213
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.cc:1922
void smoother_setup(DoubleMatrixBase *matrix_pt)
Setup: Pass pointer to the matrix and store in cast form.
Definition: iterative_linear_solver.h:1040
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:1025
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:1182
DampedJacobi(const double &omega=2.0/3.0)
Empty constructor.
Definition: iterative_linear_solver.h:1005
Vector< double > Matrix_diagonal
Vector containing the diagonal entries of A.
Definition: iterative_linear_solver.h:1199
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:1858
MATRIX * Matrix_pt
Pointer to the matrix.
Definition: iterative_linear_solver.h:1196
void smoother_solve(const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:1113
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:1130
Definition: linear_algebra_distribution.h:435
LinearAlgebraDistribution * distribution_pt() const
access to the LinearAlgebraDistribution
Definition: linear_algebra_distribution.h:457
void build_distribution(const LinearAlgebraDistribution *const dist_pt)
Definition: linear_algebra_distribution.h:507
Definition: matrices.h:261
Definition: double_vector.h:58
double * values_pt()
access function to the underlying values
Definition: double_vector.h:254
double dot(const DoubleVector &vec) const
compute the dot product of this vector with the vector vec.
Definition: double_vector.cc:805
The GMRES method.
Definition: iterative_linear_solver.h:1227
bool Resolving
Definition: iterative_linear_solver.h:1525
void enable_computation_of_gradient()
function to enable the computation of the gradient
Definition: iterative_linear_solver.h:1261
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.cc:2133
bool Preconditioner_LHS
Definition: iterative_linear_solver.h:1533
double Preconditioner_application_time
Storage for the time spent applying the preconditioner.
Definition: iterative_linear_solver.h:1536
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
General interface to solve function.
Definition: iterative_linear_solver.cc:2250
MATRIX * Matrix_pt
Pointer to matrix.
Definition: iterative_linear_solver.h:1521
void set_preconditioner_RHS()
Enable right preconditioning.
Definition: iterative_linear_solver.h:1345
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:1529
GMRES(const GMRES &)=delete
Broken copy constructor.
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:1254
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:1357
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:1511
GMRES()
Constructor.
Definition: iterative_linear_solver.h:1230
void operator=(const GMRES &)=delete
Broken assignment operator.
void update(const unsigned &k, const Vector< Vector< double >> &H, const Vector< double > &s, const Vector< DoubleVector > &v, DoubleVector &x)
Definition: iterative_linear_solver.h:1368
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:1312
void enable_iteration_restart(const unsigned &restart)
Definition: iterative_linear_solver.h:1326
virtual ~GMRES()
Destructor (cleanup storage)
Definition: iterative_linear_solver.h:1242
unsigned Restart
Definition: iterative_linear_solver.h:1515
void apply_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: iterative_linear_solver.h:1498
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: iterative_linear_solver.h:1299
void set_preconditioner_LHS()
Set left preconditioning (the default)
Definition: iterative_linear_solver.h:1339
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:1273
void generate_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: iterative_linear_solver.h:1453
void disable_iteration_restart()
switches off iteration restart
Definition: iterative_linear_solver.h:1333
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:2161
bool iteration_restart() const
access function indicating whether restarted GMRES is used
Definition: iterative_linear_solver.h:1318
bool Iteration_restart
boolean indicating if iteration restarting is used
Definition: iterative_linear_solver.h:1518
void smoother_solve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.h:812
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:945
GS(const GS &)=delete
Broken copy constructor.
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:976
GS()
Constructor.
Definition: iterative_linear_solver.h:788
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:853
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:822
void operator=(const GS &)=delete
Broken assignment operator.
void clean_up_memory()
Clean up data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:958
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:984
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: iterative_linear_solver.h:896
CRDoubleMatrix * Matrix_pt
System matrix pointer in the format specified by the template argument.
Definition: iterative_linear_solver.h:973
void smoother_setup(DoubleMatrixBase *matrix_pt)
Set up the smoother for the matrix specified by the pointer.
Definition: iterative_linear_solver.h:829
Vector< int > Index_of_diagonal_entries
Definition: iterative_linear_solver.h:988
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.h:906
double preconditioner_setup_time() const
Returns the time taken to set up the preconditioner.
Definition: iterative_linear_solver.h:929
virtual ~GS()
Destructor (cleanup storage)
Definition: iterative_linear_solver.h:797
bool Resolving
Definition: iterative_linear_solver.h:980
The Gauss Seidel method.
Definition: iterative_linear_solver.h:599
virtual ~GS()
Destructor (cleanup storage)
Definition: iterative_linear_solver.h:611
unsigned Iterations
Number of iterations taken.
Definition: iterative_linear_solver.h:764
double preconditioner_setup_time() const
Returns the time taken to set up the preconditioner.
Definition: iterative_linear_solver.h:724
bool Matrix_can_be_deleted
Definition: iterative_linear_solver.h:772
void solve_helper(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
General interface to solve function.
Definition: iterative_linear_solver.cc:1164
void clean_up_memory()
Cleanup data that's stored for resolve (if any has been stored)
Definition: iterative_linear_solver.h:746
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: iterative_linear_solver.h:692
bool Resolving
Definition: iterative_linear_solver.h:768
void smoother_solve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.h:647
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution)
Definition: iterative_linear_solver.h:663
void smoother_setup(DoubleMatrixBase *matrix_pt)
Set up the smoother for the matrix specified by the pointer.
Definition: iterative_linear_solver.h:630
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: iterative_linear_solver.h:623
MATRIX * Matrix_pt
System matrix pointer in the format specified by the template argument.
Definition: iterative_linear_solver.h:761
void operator=(const GS &)=delete
Broken assignment operator.
GS()
Constructor.
Definition: iterative_linear_solver.h:602
unsigned iterations() const
Number of iterations taken.
Definition: iterative_linear_solver.h:734
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: iterative_linear_solver.cc:1104
GS(const GS &)=delete
Broken copy constructor.
void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: iterative_linear_solver.h:702
The Identity Preconditioner.
Definition: preconditioner.h:252
Definition: iterative_linear_solver.h:54
bool Use_iterative_solver_as_preconditioner
Use the iterative solver as preconditioner.
Definition: iterative_linear_solver.h:265
bool First_time_solve_when_used_as_preconditioner
Definition: iterative_linear_solver.h:270
void open_convergence_history_file_stream(const std::string &file_name, const std::string &zone_title="")
Definition: iterative_linear_solver.h:138
void close_convergence_history_file_stream()
Close convergence history output stream.
Definition: iterative_linear_solver.h:161
Preconditioner *const & preconditioner_pt() const
Access function to preconditioner (const version)
Definition: iterative_linear_solver.h:101
void enable_setup_preconditioner_before_solve()
Setup the preconditioner before the solve.
Definition: iterative_linear_solver.h:186
double Tolerance
Convergence tolerance.
Definition: iterative_linear_solver.h:239
void disable_error_after_max_iter()
Don't throw an error if we don't converge within max_iter (default).
Definition: iterative_linear_solver.h:204
Preconditioner * Preconditioner_pt
Pointer to the preconditioner.
Definition: iterative_linear_solver.h:245
void enable_doc_convergence_history()
Enable documentation of the convergence history.
Definition: iterative_linear_solver.h:122
void enable_iterative_solver_as_preconditioner()
Definition: iterative_linear_solver.h:212
virtual unsigned iterations() const =0
Number of iterations taken.
double linear_solver_solution_time() const
return the time taken to solve the linear system
Definition: iterative_linear_solver.h:174
virtual ~IterativeLinearSolver()
Destructor (empty)
Definition: iterative_linear_solver.h:92
void enable_error_after_max_iter()
Throw an error if we don't converge within max_iter.
Definition: iterative_linear_solver.h:198
bool Throw_error_after_max_iter
Definition: iterative_linear_solver.h:262
IterativeLinearSolver()
Definition: iterative_linear_solver.h:58
void disable_doc_convergence_history()
Disable documentation of the convergence history.
Definition: iterative_linear_solver.h:128
Preconditioner *& preconditioner_pt()
Access function to preconditioner.
Definition: iterative_linear_solver.h:95
double Preconditioner_setup_time
Preconditioner setup time.
Definition: iterative_linear_solver.h:254
double Jacobian_setup_time
Jacobian setup time.
Definition: iterative_linear_solver.h:248
static IdentityPreconditioner Default_preconditioner
Definition: iterative_linear_solver.h:236
virtual double preconditioner_setup_time() const
returns the the time taken to setup the preconditioner
Definition: iterative_linear_solver.h:180
void disable_iterative_solver_as_preconditioner()
Definition: iterative_linear_solver.h:220
unsigned Max_iter
Maximum number of iterations.
Definition: iterative_linear_solver.h:242
double & tolerance()
Access to convergence tolerance.
Definition: iterative_linear_solver.h:107
double Solution_time
linear solver solution time
Definition: iterative_linear_solver.h:251
void operator=(const IterativeLinearSolver &)=delete
Broken assignment operator.
IterativeLinearSolver(const IterativeLinearSolver &)=delete
Broken copy constructor.
std::ofstream Output_file_stream
Output file stream for convergence history.
Definition: iterative_linear_solver.h:231
void disable_setup_preconditioner_before_solve()
Don't set up the preconditioner before the solve.
Definition: iterative_linear_solver.h:192
unsigned & max_iter()
Access to max. number of iterations.
Definition: iterative_linear_solver.h:113
bool Doc_convergence_history
Definition: iterative_linear_solver.h:228
double jacobian_setup_time() const
Definition: iterative_linear_solver.h:168
bool Setup_preconditioner_before_solve
Definition: iterative_linear_solver.h:258
unsigned nrow() const
access function to the number of global rows.
Definition: linear_algebra_distribution.h:186
Definition: linear_solver.h:68
virtual void solve(Problem *const &problem_pt, DoubleVector &result)=0
bool Enable_resolve
Definition: linear_solver.h:73
virtual void disable_resolve()
Definition: linear_solver.h:144
bool Compute_gradient
Definition: linear_solver.h:81
Definition: oomph_definitions.h:222
Definition: preconditioner.h:54
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)=0
Definition: problem.h:151
Definition: iterative_linear_solver.h:550
virtual ~Smoother()
Virtual empty destructor.
Definition: iterative_linear_solver.h:556
void check_validity_of_solve_helper_inputs(MATRIX *const &matrix_pt, const DoubleVector &rhs, DoubleVector &solution, const double &n_dof)
Definition: iterative_linear_solver.cc:1029
virtual void smoother_setup(DoubleMatrixBase *matrix_pt)=0
Set up the smoother for the matrix specified by the pointer.
virtual void smoother_solve(const DoubleVector &rhs, DoubleVector &result)=0
bool Use_as_smoother
Definition: iterative_linear_solver.h:585
Smoother()
Empty constructor.
Definition: iterative_linear_solver.h:553
Definition: restart2.cpp:8
Scalar * y
Definition: level1_cplx_impl.h:128
RealScalar s
Definition: level1_cplx_impl.h:130
char char char int int * k
Definition: level2_impl.h:374
void solution(const Vector< double > &x, Vector< double > &u)
Definition: two_d_biharmonic.cc:113
Vector::Scalar omega(const Vector &t, const Vector &s, RealScalar angle)
Definition: IDRS.h:36
string file_name
Definition: Particles2023AnalysisHung.py:321
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
double timer()
returns the time in seconds after some point in past
Definition: oomph_utilities.cc:1295
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2