27 #ifndef OOMPH_GENERAL_PURPOSE_SPACE_TIME_SUBSIDIARY_BLOCK_PRECONDITIONER_HEADER
28 #define OOMPH_GENERAL_PURPOSE_SPACE_TIME_SUBSIDIARY_BLOCK_PRECONDITIONER_HEADER
32 #include <oomph-lib-config.h>
169 std::ostringstream warning_message_stream;
172 warning_message_stream
173 <<
"The memory statistics have not been calculated "
174 <<
"so I'm returning\nthe value zero." << std::endl;
189 std::ostringstream warning_message_stream;
192 warning_message_stream
193 <<
"The preconditioner hasn't even been set up yet "
194 <<
"so I'm returning\nthe value zero." << std::endl;
370 std::ostringstream warning_message_stream;
373 warning_message_stream
374 <<
"The memory statistics have not been calculated "
375 <<
"so I'm returning\nthe value zero." << std::endl;
390 std::ostringstream warning_message_stream;
393 warning_message_stream
394 <<
"The preconditioner hasn't even been set up yet "
395 <<
"so I'm returning\nthe value zero." << std::endl;
431 for (
int i =
int(
k);
i >= 0;
i--)
437 for (
int j =
i - 1;
j >= 0;
j--)
445 unsigned n_x =
x.nrow();
457 for (
unsigned j = 0;
j <=
k;
j++)
460 const double* vj_pt =
v[
j].values_pt();
463 for (
unsigned i = 0;
i < n_x;
i++)
465 temp_pt[
i] += vj_pt[
i] *
y[
j];
492 temp_with_size_of_full_rhs, block_z_with_size_of_full_z);
536 double temp = dx / dy;
539 sn = 1.0 /
sqrt(1.0 + temp * temp);
549 double temp = dy / dx;
552 cs = 1.0 /
sqrt(1.0 + temp * temp);
565 double temp = cs * dx + sn * dy;
568 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: block_preconditioner.h:422
void return_block_vector(const unsigned &n, const DoubleVector &b, DoubleVector &v) const
Definition: block_preconditioner.cc:4489
void get_block_vector(const unsigned &n, const DoubleVector &v, DoubleVector &b) const
Definition: block_preconditioner.cc:4186
Definition: matrices.h:888
LinearAlgebraDistribution * distribution_pt() const
access to the LinearAlgebraDistribution
Definition: linear_algebra_distribution.h:457
Definition: double_vector.h:58
double * values_pt()
access function to the underlying values
Definition: double_vector.h:254
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:247
void operator=(const GMRESBlockPreconditioner &)=delete
Broken assignment operator.
double Memory_usage_in_bytes
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:590
void apply_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:562
void disable_doc_memory_usage()
Don't document the memory usage!
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:348
unsigned iterations() const
Handle to the number of iterations taken.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:320
GMRESBlockPreconditioner(const GMRESBlockPreconditioner &)=delete
Broken copy constructor.
void enable_doc_memory_usage()
Document the memory usage.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:340
virtual void clean_up_memory()
Clean up the memory (empty for now...)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:273
SpaceTimeNavierStokesSubsidiaryPreconditioner * Navier_stokes_subsidiary_preconditioner_pt
Pointer to the preconditioner for the block matrix.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:579
bool Compute_memory_statistics
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:586
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply preconditioner to r.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.cc:729
bool Preconditioner_has_been_setup
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:594
unsigned Iterations
Number of iterations taken.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:582
SpaceTimeNavierStokesSubsidiaryPreconditioner * navier_stokes_subsidiary_preconditioner_pt() const
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:410
void set_preconditioner_RHS()
Enable right preconditioning.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:333
GMRESBlockPreconditioner()
Constructor (empty)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:250
bool Preconditioner_LHS
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:598
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:311
double get_memory_usage_in_bytes()
Get the memory statistics.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:356
CRDoubleMatrix * Matrix_pt
Pointer to matrix.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:575
void set_preconditioner_LHS()
Set left preconditioning (the default)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:327
void setup()
Setup the preconditioner.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.cc:575
void update(const unsigned &k, const Vector< Vector< double >> &H, const Vector< double > &s, const Vector< DoubleVector > &v, const DoubleVector &block_x_with_size_of_full_x, DoubleVector &x)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:420
void generate_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:517
virtual ~GMRESBlockPreconditioner()
Destructor.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:266
Definition: iterative_linear_solver.h:54
Definition: matrix_vector_product.h:51
Definition: oomph_definitions.h:222
Definition: oomph_definitions.h:267
Definition: preconditioner.h:54
Definition: problem.h:151
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:56
virtual ~SpaceTimeNavierStokesSubsidiaryPreconditioner()
Destructor - delete the preconditioner matrices.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:90
Preconditioner * P_preconditioner_pt
Pointer to the 'preconditioner' for the pressure matrix.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:211
double Memory_usage_in_bytes
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:229
void setup()
Setup the preconditioner.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.cc:61
bool Preconditioner_has_been_setup
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:221
bool Compute_memory_statistics
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:225
MatrixVectorProduct * G_mat_vec_pt
MatrixVectorProduct operator for G.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:235
void operator=(const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete
Broken assignment operator.
SpaceTimeNavierStokesSubsidiaryPreconditioner()
Constructor. (By default this preconditioner is upper triangular).
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:59
MatrixVectorProduct * F_mat_vec_pt
MatrixVectorProduct operator for F.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:232
void preconditioner_solve(const DoubleVector &r, DoubleVector &z)
Apply preconditioner to r.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.cc:482
void disable_doc_memory_usage()
Don't document the memory usage!
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:147
bool Using_default_f_preconditioner
Flag indicating whether the default F preconditioner is used.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:214
virtual void clean_up_memory()
Clean up the memory.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:97
void enable_doc_memory_usage()
Document the memory usage.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:139
bool Using_default_p_preconditioner
Flag indicating whether the default P preconditioner is used.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:217
double get_memory_usage_in_bytes()
Get the memory statistics.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:155
Preconditioner * F_preconditioner_pt
Pointer to the 'preconditioner' for the F matrix.
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:208
SpaceTimeNavierStokesSubsidiaryPreconditioner(const SpaceTimeNavierStokesSubsidiaryPreconditioner &)=delete
Broken copy constructor.
Definition: oomph-lib/src/generic/Vector.h:58
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
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
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