30 #ifndef OOMPH_LINEAR_SOLVER_HEADER
31 #define OOMPH_LINEAR_SOLVER_HEADER
36 #include <oomph-lib-config.h>
161 "DoubleVector based solve function not implemented for this solver",
173 "Vector<double> based solve function not implemented for this solver",
185 std::ostringstream error_message_stream;
188 error_message_stream <<
"The function to solve the transposed system has "
189 <<
"not yet been\nimplemented for this solver."
205 "DoubleVector based solve function not implemented for this solver",
217 "Vector<double> based solve function not implemented for this solver",
228 "Resolve function not implemented for this linear solver",
240 std::ostringstream error_message_stream;
244 <<
"The function to resolve the transposed system has "
245 <<
"not yet been\nimplemented for this solver." << std::endl;
263 "jacobian_setup_time has not been implemented for this linear solver",
274 "linear_solver_solution_time() not implemented for this linear solver",
285 "enable_computation_of_gradient() not implemented for "
286 "this linear solver",
318 "The gradient has not been computed for this linear solver!",
510 Dist_use_global_solver =
false;
511 Dist_delete_matrix_data =
false;
512 Dist_allow_row_and_col_permutations =
true;
513 Dist_solver_data_pt = 0;
514 Dist_global_solve_data_allocated =
false;
515 Dist_distributed_solve_data_allocated =
false;
678 void enable_delete_matrix_data_in_superlu_dist()
680 Dist_delete_matrix_data =
true;
686 void disable_delete_matrix_data_in_superlu_dist()
688 Dist_delete_matrix_data =
false;
694 void enable_row_and_col_permutations_in_superlu_dist()
696 Dist_allow_row_and_col_permutations =
true;
701 void disable_row_and_col_permutations_in_superlu_dist()
703 Dist_allow_row_and_col_permutations =
false;
710 void use_global_solve_in_superlu_dist()
712 if (!Dist_use_global_solver)
715 Dist_use_global_solver =
true;
723 void use_distributed_solve_in_superlu_dist()
725 if (Dist_use_global_solver)
728 Dist_use_global_solver =
false;
747 void factorise_distributed(DoubleMatrixBase*
const& matrix_pt);
753 void backsub_transpose_distributed(
const DoubleVector& rhs,
811 static bool Suppress_incorrect_rhs_distribution_warning_in_resolve;
817 bool Dist_use_global_solver;
820 bool Dist_global_solve_data_allocated;
823 bool Dist_distributed_solve_data_allocated;
826 void* Dist_solver_data_pt;
841 bool Dist_allow_row_and_col_permutations;
849 bool Dist_delete_matrix_data;
852 double* Dist_value_pt;
Definition: matrices.h:1271
Definition: linear_solver.h:334
~DenseLU()
Destructor, clean up the stored LU factors.
Definition: linear_solver.h:358
double Jacobian_setup_time
Jacobian setup time.
Definition: linear_solver.h:408
double jacobian_setup_time() const
Definition: linear_solver.h:382
void backsub(const DoubleVector &rhs, DoubleVector &result)
Do the backsubstitution step to solve the system LU result = rhs.
Definition: linear_solver.cc:320
void clean_up_memory()
Clean up the stored LU factors.
Definition: linear_solver.cc:106
long * Index
Pointer to storage for the index of permutations in the LU solve.
Definition: linear_solver.h:419
DenseLU()
Constructor, initialise storage.
Definition: linear_solver.h:340
void factorise(DoubleMatrixBase *const &matrix_pt)
Perform the LU decomposition of the matrix.
Definition: linear_solver.cc:131
double * LU_factors
Pointer to storage for the LU decomposition.
Definition: linear_solver.h:422
void operator=(const DenseLU &)=delete
Broken assignment operator.
virtual double linear_solver_solution_time() const
Definition: linear_solver.h:389
double Solution_time
Solution time.
Definition: linear_solver.h:411
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: linear_solver.cc:51
DenseLU(const DenseLU &dummy)=delete
Broken copy constructor.
int Sign_of_determinant_of_matrix
Definition: linear_solver.h:415
Definition: linear_algebra_distribution.h:435
Definition: matrices.h:261
Definition: double_vector.h:58
void clear()
wipes the DoubleVector
Definition: double_vector.h:142
Definition: linear_solver.h:432
FD_LU()
Constructor: empty.
Definition: linear_solver.h:435
void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: linear_solver.h:461
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: linear_solver.cc:575
FD_LU(const FD_LU &dummy)=delete
Broken copy constructor.
void operator=(const FD_LU &)=delete
Broken assignment operator.
void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.h:450
Definition: linear_solver.h:68
void operator=(const LinearSolver &)=delete
Broken assignment operator.
virtual double jacobian_setup_time() const
Definition: linear_solver.h:260
virtual void solve(Problem *const &problem_pt, DoubleVector &result)=0
virtual void solve(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: linear_solver.h:168
virtual void enable_resolve()
Definition: linear_solver.h:135
virtual void enable_computation_of_gradient()
Definition: linear_solver.h:282
virtual void resolve(const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.h:225
virtual double linear_solver_solution_time() const
Definition: linear_solver.h:271
bool is_doc_time_enabled() const
Is documentation of solve times enabled?
Definition: linear_solver.h:122
virtual void solve_transpose(DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result)
Definition: linear_solver.h:212
bool Doc_time
Boolean flag that indicates whether the time taken.
Definition: linear_solver.h:77
virtual void solve(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.h:156
bool Enable_resolve
Definition: linear_solver.h:73
virtual void solve_transpose(DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.h:200
void get_gradient(DoubleVector &gradient)
function to access the gradient, provided it has been computed
Definition: linear_solver.h:306
LinearSolver(const LinearSolver &dummy)=delete
Broken copy constructor.
LinearSolver()
Empty constructor, initialise the member data.
Definition: linear_solver.h:92
void disable_computation_of_gradient()
Definition: linear_solver.h:293
virtual void solve_transpose(Problem *const &problem_pt, DoubleVector &result)
Definition: linear_solver.h:181
void disable_doc_time()
Disable documentation of solve times.
Definition: linear_solver.h:116
virtual ~LinearSolver()
Empty virtual destructor.
Definition: linear_solver.h:107
virtual void clean_up_memory()
Definition: linear_solver.h:256
bool Gradient_has_been_computed
flag that indicates whether the gradient was computed or not
Definition: linear_solver.h:84
void enable_doc_time()
Enable documentation of solve times.
Definition: linear_solver.h:110
void reset_gradient()
Definition: linear_solver.h:300
virtual void resolve_transpose(const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.h:236
DoubleVector Gradient_for_glob_conv_newton_solve
Definition: linear_solver.h:88
virtual void disable_resolve()
Definition: linear_solver.h:144
bool is_resolve_enabled() const
Boolean flag indicating if resolves are enabled.
Definition: linear_solver.h:128
bool Compute_gradient
Definition: linear_solver.h:81
Definition: oomph_definitions.h:222
Definition: problem.h:151
Definition: linear_solver.h:486
SuperLUSolver(const SuperLUSolver &dummy)=delete
Broken copy constructor.
bool Doc_stats
Set to true to output statistics (false by default).
Definition: linear_solver.h:770
void solve_transpose(Problem *const &problem_pt, DoubleVector &result)
Definition: linear_solver.cc:1293
Type Solver_type
the solver type. see SuperLU_solver_type for details.
Definition: linear_solver.h:773
void operator=(const SuperLUSolver &)=delete
Broken assignment operator.
virtual double linear_solver_solution_time() const
Definition: linear_solver.h:623
void backsub_serial(const DoubleVector &rhs, DoubleVector &result)
backsub method for SuperLU (serial)
Definition: linear_solver.cc:2503
void enable_doc_stats()
Enable documentation of solver statistics.
Definition: linear_solver.h:603
double Solution_time
Solution time.
Definition: linear_solver.h:764
bool Serial_compressed_row_flag
Use compressed row version?
Definition: linear_solver.h:794
Type
Definition: linear_solver.h:493
@ Distributed
Definition: linear_solver.h:496
@ Serial
Definition: linear_solver.h:495
@ Default
Definition: linear_solver.h:494
void solve(Problem *const &problem_pt, DoubleVector &result)
Definition: linear_solver.cc:814
void factorise(DoubleMatrixBase *const &matrix_pt)
Definition: linear_solver.cc:1820
void factorise_serial(DoubleMatrixBase *const &matrix_pt)
factorise method for SuperLU (serial)
Definition: linear_solver.cc:2161
bool Using_dist
boolean flag indicating whether superlu dist is being used
Definition: linear_solver.h:776
unsigned long Serial_n_dof
The number of unknowns in the linear system.
Definition: linear_solver.h:788
void set_solver_type(const Type &t)
Definition: linear_solver.h:646
void * Serial_f_factors
Storage for the LU factors as required by SuperLU.
Definition: linear_solver.h:782
void resolve_transpose(const DoubleVector &rhs, DoubleVector &result)
Resolve the (transposed) system for a given RHS.
Definition: linear_solver.cc:1793
SuperLUSolver()
Constructor. Set the defaults.
Definition: linear_solver.h:500
bool Suppress_solve
Suppress solve?
Definition: linear_solver.h:767
~SuperLUSolver()
Destructor, clean up the stored matrices.
Definition: linear_solver.h:534
double jacobian_setup_time() const
Definition: linear_solver.h:616
int Serial_sign_of_determinant_of_matrix
Sign of the determinant of the matrix.
Definition: linear_solver.h:791
double get_memory_usage_for_lu_factors()
How much memory do the LU factors take up? In bytes.
Definition: linear_solver.cc:758
void use_compressed_column_for_superlu_serial()
Use the compressed column format in superlu serial.
Definition: linear_solver.h:662
void disable_resolve()
Overload disable resolve so that it cleans up memory too.
Definition: linear_solver.h:549
double get_total_needed_memory()
How much memory was allocated by SuperLU? In bytes.
Definition: linear_solver.cc:786
double Jacobian_setup_time
Jacobian setup time.
Definition: linear_solver.h:761
void backsub_transpose_serial(const DoubleVector &rhs, DoubleVector &result)
backsub method for SuperLU (serial)
Definition: linear_solver.cc:2593
void resolve(const DoubleVector &rhs, DoubleVector &result)
Resolve the system for a given RHS.
Definition: linear_solver.cc:1769
void use_compressed_row_for_superlu_serial()
Use the compressed row format in superlu serial.
Definition: linear_solver.h:656
void disable_doc_stats()
Disable documentation of solver statistics.
Definition: linear_solver.h:609
void backsub(const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.cc:2292
void enable_computation_of_gradient()
function to enable the computation of the gradient
Definition: linear_solver.h:540
void clean_up_memory()
Clean up the memory allocated by the solver.
Definition: linear_solver.cc:2683
void backsub_transpose(const DoubleVector &rhs, DoubleVector &result)
Definition: linear_solver.cc:2312
int Serial_info
Info flag for the SuperLU solver.
Definition: linear_solver.h:785
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86