27 #ifndef OOMPH_PRECONDITION_HEADER
28 #define OOMPH_PRECONDITION_HEADER
33 #include <oomph-lib-config.h>
42 template<
typename MATRIX>
43 class BlockPreconditioner;
86 throw OomphLibError(
"This function hasn't been implemented yet!",
102 if (dist_obj_pt != 0)
114 Setup_time = setup_time_finish - setup_time_start;
155 std::ostringstream error_msg;
156 error_msg <<
"Matrix pointer is null.";
178 std::ostringstream error_msg;
179 error_msg <<
"Tried to access a null communicator pointer. This might "
181 <<
"trying to use it in a non-parallel case. Or it might "
183 <<
"set it properly.";
274 if (dist_matrix_pt != 0)
295 if (*
r.distribution_pt() != *this->distribution_pt())
297 std::ostringstream error_message_stream;
299 <<
"The r vector must have the same distribution as the "
301 <<
"(this is the same as the matrix passed to setup())";
310 std::ostringstream error_message_stream;
312 <<
"The z vector distribution has been setup; it must have the "
313 <<
"same distribution as the r vector (and preconditioner).";
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
virtual unsigned long nrow() const =0
Return the number of rows of the matrix.
Definition: double_vector.h:58
bool built() const
Definition: double_vector.h:154
The Identity Preconditioner.
Definition: preconditioner.h:252
void preconditioner_solve_transpose(const DoubleVector &r, DoubleVector &z)
Definition: preconditioner.h:328
IdentityPreconditioner(const IdentityPreconditioner &)=delete
Broken copy constructor.
virtual ~IdentityPreconditioner()
Destructor (empty)
Definition: preconditioner.h:264
void operator=(const IdentityPreconditioner &)=delete
Broken assignment operator.
IdentityPreconditioner()
Definition: preconditioner.h:255
virtual void setup()
setup method - just sets the distribution
Definition: preconditioner.h:267
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Definition: preconditioner.h:292
Definition: linear_algebra_distribution.h:64
OomphCommunicator * communicator_pt() const
const access to the communicator pointer
Definition: linear_algebra_distribution.h:335
Definition: communicator.h:54
Definition: oomph_definitions.h:222
Definition: preconditioner.h:54
double Setup_time
The time it takes to set up this preconditioner.
Definition: preconditioner.h:243
DoubleMatrixBase * Matrix_pt
Storage for a pointer to the matrix.
Definition: preconditioner.h:236
void setup(DoubleMatrixBase *matrix_pt)
Definition: preconditioner.h:94
virtual void turn_into_subsidiary_block_preconditioner(BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse)
Definition: preconditioner.h:210
virtual void preconditioner_solve_transpose(const DoubleVector &r, DoubleVector &z)
Definition: preconditioner.h:82
void disable_silent_preconditioner_setup()
Be verbose in the block preconditioner setup.
Definition: preconditioner.h:135
std::ostream * Stream_pt
Pointer to the output stream – defaults to std::cout.
Definition: preconditioner.h:232
virtual void set_comm_pt(const OomphCommunicator *const comm_pt)
Set the communicator pointer.
Definition: preconditioner.h:193
virtual void clean_up_memory()
Clean up memory (empty). Generic interface function.
Definition: preconditioner.h:147
void operator=(const Preconditioner &)=delete
Broken assignment operator.
virtual DoubleMatrixBase * matrix_pt() const
Get function for matrix pointer.
Definition: preconditioner.h:150
void setup(const Problem *problem_pt, DoubleMatrixBase *matrix_pt)
Definition: preconditioner.h:120
Preconditioner()
Constructor.
Definition: preconditioner.h:57
double setup_time() const
Returns the time to setup the preconditioner.
Definition: preconditioner.h:199
const OomphCommunicator * Comm_pt
Definition: preconditioner.h:240
void enable_silent_preconditioner_setup()
Set up the block preconditioner quietly!
Definition: preconditioner.h:127
virtual ~Preconditioner()
Destructor (empty)
Definition: preconditioner.h:71
Preconditioner(const Preconditioner &)=delete
Broken copy constructor.
virtual void preconditioner_solve(const DoubleVector &r, DoubleVector &z)=0
bool Silent_preconditioner_setup
Boolean to indicate whether or not the build should be done silently.
Definition: preconditioner.h:229
virtual void turn_into_subsidiary_block_preconditioner(BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse)
Definition: preconditioner.h:220
virtual const OomphCommunicator * comm_pt() const
Get function for comm pointer.
Definition: preconditioner.h:171
virtual void set_matrix_pt(DoubleMatrixBase *matrix_pt)
Set the matrix pointer.
Definition: preconditioner.h:165
Definition: problem.h:151
void obsolete()
Output warning message.
Definition: oomph_utilities.cc:1102
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
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86