27 #ifndef OOMPH_SPACETIME_NAVIER_STOKES_BLOCK_PRECONDITIONERS_HEADER
28 #define OOMPH_SPACETIME_NAVIER_STOKES_BLOCK_PRECONDITIONERS_HEADER
32 #include <oomph-lib-config.h>
39 #include "../../SpaceTimeBlockPreconditioner/spacetime_block_preconditioner.cc"
55 class SpaceTimeNavierStokesSubsidiaryPreconditioner
56 :
public BlockPreconditioner<CRDoubleMatrix>
176 std::ostringstream warning_message_stream;
179 warning_message_stream
180 <<
"The memory statistics have not been calculated "
181 <<
"so I'm returning\nthe value zero." << std::endl;
196 std::ostringstream warning_message_stream;
199 warning_message_stream
200 <<
"The preconditioner hasn't even been set up yet "
201 <<
"so I'm returning\nthe value zero." << std::endl;
251 class GMRESBlockPreconditioner
252 :
public IterativeLinearSolver,
253 public virtual BlockPreconditioner<CRDoubleMatrix>
377 std::ostringstream warning_message_stream;
380 warning_message_stream
381 <<
"The memory statistics have not been calculated "
382 <<
"so I'm returning\nthe value zero." << std::endl;
397 std::ostringstream warning_message_stream;
400 warning_message_stream
401 <<
"The preconditioner hasn't even been set up yet "
402 <<
"so I'm returning\nthe value zero." << std::endl;
438 for (
int i =
int(
k);
i >= 0;
i--)
444 for (
int j =
i - 1;
j >= 0;
j--)
452 unsigned n_x =
x.nrow();
464 for (
unsigned j = 0;
j <=
k;
j++)
467 const double* vj_pt =
v[
j].values_pt();
470 for (
unsigned i = 0;
i < n_x;
i++)
472 temp_pt[
i] += vj_pt[
i] *
y[
j];
499 temp_with_size_of_full_rhs, block_z_with_size_of_full_z);
543 double temp = dx / dy;
546 sn = 1.0 /
sqrt(1.0 + temp * temp);
556 double temp = dy / dx;
559 cs = 1.0 /
sqrt(1.0 + temp * temp);
572 double temp = cs * dx + sn * dy;
575 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: spacetime_navier_stokes_block_preconditioner.h:569
unsigned iterations() const
Handle to the number of iterations taken.
Definition: spacetime_navier_stokes_block_preconditioner.h:327
GMRESBlockPreconditioner(const GMRESBlockPreconditioner &)=delete
Broken copy constructor.
void disable_doc_memory_statistics()
Don't document the memory usage!
Definition: spacetime_navier_stokes_block_preconditioner.h:355
virtual void clean_up_memory()
Clean up the memory (empty for now...)
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:273
void enable_doc_memory_statistics()
Document the memory usage.
Definition: spacetime_navier_stokes_block_preconditioner.h:347
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.
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: spacetime_navier_stokes_block_preconditioner.h:417
void set_preconditioner_RHS()
Enable right preconditioning.
Definition: spacetime_navier_stokes_block_preconditioner.h:340
GMRESBlockPreconditioner()
Constructor (empty)
Definition: spacetime_navier_stokes_block_preconditioner.h:257
bool Preconditioner_LHS
Definition: general_purpose_space_time_subsidiary_block_preconditioner.h:598
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: spacetime_navier_stokes_block_preconditioner.h:318
double get_memory_usage_in_bytes()
Get the memory statistics.
Definition: spacetime_navier_stokes_block_preconditioner.h:363
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: spacetime_navier_stokes_block_preconditioner.h:334
void setup()
Setup the preconditioner.
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: spacetime_navier_stokes_block_preconditioner.h:427
void generate_plane_rotation(double &dx, double &dy, double &cs, double &sn)
Definition: spacetime_navier_stokes_block_preconditioner.h:524
virtual ~GMRESBlockPreconditioner()
Destructor.
Definition: spacetime_navier_stokes_block_preconditioner.h:273
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: spacetime_navier_stokes_block_preconditioner.h:91
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.
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: spacetime_navier_stokes_block_preconditioner.h:60
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.
void disable_doc_memory_usage()
Don't document the memory usage!
Definition: spacetime_navier_stokes_block_preconditioner.h:154
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: spacetime_navier_stokes_block_preconditioner.h:146
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: spacetime_navier_stokes_block_preconditioner.h:162
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