28 #ifndef OOMPH_SIMPLE_BLOCK_PRECONDITIONERS
29 #define OOMPH_SIMPLE_BLOCK_PRECONDITIONERS
34 #include <oomph-lib-config.h>
51 template<
typename MATRIX>
68 for (
unsigned i = 0 ;
i < n_block;
i++)
100 std::ostringstream err_msg;
101 err_msg <<
"The mesh_pt is null, please point it to a mesh.\n";
129 template<
typename MATRIX>
136 if(this->is_master_block_preconditioner())
138 const unsigned my_nmesh = My_mesh_pt.size();
143 std::ostringstream err_msg;
144 err_msg <<
"There are no meshes set.\n"
145 <<
"Please set at least one mesh with push_back_mesh(...)";
152 this->set_nmesh(my_nmesh);
155 for (
unsigned mesh_i = 0; mesh_i < my_nmesh; mesh_i++)
157 this->set_mesh(mesh_i,My_mesh_pt[mesh_i]);
165 unsigned nblock_types = this->nblock_types();
168 Diagonal_block_preconditioner_pt.resize(nblock_types);
171 for (
unsigned i=0;
i<nblock_types;
i++)
178 for (
unsigned i=0;
i<nblock_types;
i++)
185 Diagonal_block_preconditioner_pt[
i]->setup(&
block);
196 template<
typename MATRIX>
202 unsigned n_block = this->nblock_types();
207 this->get_block_vectors(
r,block_r);
211 for (
unsigned i = 0;
i < n_block;
i++)
213 Diagonal_block_preconditioner_pt[
i]->preconditioner_solve(block_r[
i],
218 this->return_block_vectors(block_z,z);
int i
Definition: BiCGSTAB_step_by_step.cpp:9
m m block(1, 0, 2, 2)<< 4
Definition: block_preconditioner.h:422
const Mesh * mesh_pt(const unsigned &i) const
Definition: block_preconditioner.h:1782
Definition: matrices.h:888
Definition: double_vector.h:58
Definition: oomph_definitions.h:222
Definition: simple_block_preconditioners.h:53
void operator=(const SimpleBlockDiagonalPreconditioner &)
Broken assignment operator.
Definition: simple_block_preconditioners.h:82
~SimpleBlockDiagonalPreconditioner()
Destructor - delete the diagonal solvers.
Definition: simple_block_preconditioners.h:64
Vector< const Mesh * > My_mesh_pt
Definition: simple_block_preconditioners.h:121
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply preconditioner to r.
Definition: simple_block_preconditioners.h:198
SimpleBlockDiagonalPreconditioner()
Constructor for SimpleBlockDiagonalPreconditioner.
Definition: simple_block_preconditioners.h:58
void add_mesh(const Mesh *const mesh_pt)
Add a mesh.
Definition: simple_block_preconditioners.h:94
Vector< Preconditioner * > Diagonal_block_preconditioner_pt
Definition: simple_block_preconditioners.h:116
SimpleBlockDiagonalPreconditioner(const SimpleBlockDiagonalPreconditioner &)
Broken copy constructor.
Definition: simple_block_preconditioners.h:76
virtual void setup()
Setup the preconditioner.
Definition: simple_block_preconditioners.h:130
An interface to allow SuperLU to be used as an (exact) Preconditioner.
Definition: SuperLU_preconditioner.h:40
Definition: oomph-lib/src/generic/Vector.h:58
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:195
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:212
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