![]() |
|
#include <assembly_handler.h>
Public Member Functions | |
BlockHopfLinearSolver (LinearSolver *const linear_solver_pt) | |
Constructor, inherits the original linear solver. More... | |
~BlockHopfLinearSolver () | |
Destructor: clean up the allocated memory. More... | |
void | solve_for_two_rhs (Problem *const &problem_pt, DoubleVector &result, const DoubleVector &rhs2, DoubleVector &result2) |
Solve for two right hand sides. More... | |
void | solve (Problem *const &problem_pt, DoubleVector &result) |
The solve function uses the block factorisation. More... | |
void | solve (DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &result) |
void | solve (DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result) |
void | resolve (const DoubleVector &rhs, DoubleVector &result) |
The resolve function also uses the block factorisation. More... | |
LinearSolver * | linear_solver_pt () const |
Access function to the original linear solver. More... | |
![]() | |
LinearSolver () | |
Empty constructor, initialise the member data. More... | |
LinearSolver (const LinearSolver &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const LinearSolver &)=delete |
Broken assignment operator. More... | |
virtual | ~LinearSolver () |
Empty virtual destructor. More... | |
void | enable_doc_time () |
Enable documentation of solve times. More... | |
void | disable_doc_time () |
Disable documentation of solve times. More... | |
bool | is_doc_time_enabled () const |
Is documentation of solve times enabled? More... | |
bool | is_resolve_enabled () const |
Boolean flag indicating if resolves are enabled. More... | |
virtual void | enable_resolve () |
virtual void | disable_resolve () |
virtual void | solve_transpose (Problem *const &problem_pt, DoubleVector &result) |
virtual void | solve_transpose (DoubleMatrixBase *const &matrix_pt, const DoubleVector &rhs, DoubleVector &result) |
virtual void | solve_transpose (DoubleMatrixBase *const &matrix_pt, const Vector< double > &rhs, Vector< double > &result) |
virtual void | resolve_transpose (const DoubleVector &rhs, DoubleVector &result) |
virtual void | clean_up_memory () |
virtual double | jacobian_setup_time () const |
virtual double | linear_solver_solution_time () const |
virtual void | enable_computation_of_gradient () |
void | disable_computation_of_gradient () |
void | reset_gradient () |
void | get_gradient (DoubleVector &gradient) |
function to access the gradient, provided it has been computed More... | |
![]() | |
DistributableLinearAlgebraObject () | |
Default constructor - create a distribution. More... | |
DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const DistributableLinearAlgebraObject &)=delete |
Broken assignment operator. More... | |
virtual | ~DistributableLinearAlgebraObject () |
Destructor. More... | |
LinearAlgebraDistribution * | distribution_pt () const |
access to the LinearAlgebraDistribution More... | |
unsigned | nrow () const |
access function to the number of global rows. More... | |
unsigned | nrow_local () const |
access function for the num of local rows on this processor. More... | |
unsigned | nrow_local (const unsigned &p) const |
access function for the num of local rows on this processor. More... | |
unsigned | first_row () const |
access function for the first row on this processor More... | |
unsigned | first_row (const unsigned &p) const |
access function for the first row on this processor More... | |
bool | distributed () const |
distribution is serial or distributed More... | |
bool | distribution_built () const |
void | build_distribution (const LinearAlgebraDistribution *const dist_pt) |
void | build_distribution (const LinearAlgebraDistribution &dist) |
Private Attributes | |
LinearSolver * | Linear_solver_pt |
Pointer to the original linear solver. More... | |
Problem * | Problem_pt |
Pointer to the problem, used in the resolve. More... | |
DoubleVector * | A_pt |
Pointer to the storage for the vector a. More... | |
DoubleVector * | E_pt |
Pointer to the storage for the vector e (0 to n-1) More... | |
DoubleVector * | G_pt |
Pointer to the storage for the vector g (0 to n-1) More... | |
Additional Inherited Members | |
![]() | |
void | clear_distribution () |
![]() | |
bool | Enable_resolve |
bool | Doc_time |
Boolean flag that indicates whether the time taken. More... | |
bool | Compute_gradient |
bool | Gradient_has_been_computed |
flag that indicates whether the gradient was computed or not More... | |
DoubleVector | Gradient_for_glob_conv_newton_solve |
A custom linear solver class that is used to solve a block-factorised version of the Hopf bifurcation detection problem.
|
inline |
Constructor, inherits the original linear solver.
oomph::BlockHopfLinearSolver::~BlockHopfLinearSolver | ( | ) |
Destructor: clean up the allocated memory.
Clean up the memory that may have been allocated by the solver.
|
inline |
Access function to the original linear solver.
References Linear_solver_pt.
Referenced by oomph::HopfHandler::~HopfHandler().
|
virtual |
The resolve function also uses the block factorisation.
Reimplemented from oomph::LinearSolver.
References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.
|
inlinevirtual |
The linear-algebra-type solver does not make sense. The interface is deliberately broken
Reimplemented from oomph::LinearSolver.
References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.
|
inlinevirtual |
The linear-algebra-type solver does not make sense. The interface is deliberately broken
Reimplemented from oomph::LinearSolver.
References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.
|
virtual |
The solve function uses the block factorisation.
Use a block factorisation to solve the augmented system associated with a Hopf bifurcation.
Implements oomph::LinearSolver.
References A_pt, oomph::Problem::actions_after_change_in_bifurcation_parameter(), alpha, oomph::Problem::assembly_handler_pt(), oomph::LinearAlgebraDistribution::build(), oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::DoubleVector::built(), oomph::HopfHandler::C, oomph::Problem::communicator_pt(), oomph::LinearSolver::disable_resolve(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::Problem::dof(), e(), E_pt, oomph::Mesh::element_pt(), oomph::LinearSolver::Enable_resolve, oomph::LinearSolver::enable_resolve(), oomph::GeneralisedElement::eqn_number(), boost::multiprecision::fabs(), oomph::BlackBoxFDNewtonSolver::FD_step, G_pt, oomph::GeneralisedElement::get_jacobian_and_mass_matrix(), oomph::Problem::get_residuals(), i, Linear_solver_pt, m, oomph::Problem::mesh_pt(), n, oomph::GeneralisedElement::ndof(), oomph::Problem::ndof(), oomph::Mesh::nelement(), Eigen::internal::omega(), oomph::HopfHandler::Omega, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::HopfHandler::Phi, Problem_pt, oomph::HopfHandler::Psi, oomph::LinearSolver::resolve(), oomph::Problem::sign_of_jacobian(), oomph::LinearSolver::solve(), oomph::HopfHandler::solve_complex_system(), oomph::HopfHandler::solve_full_system(), oomph::HopfHandler::solve_standard_system(), and y.
void oomph::BlockHopfLinearSolver::solve_for_two_rhs | ( | Problem *const & | problem_pt, |
DoubleVector & | result, | ||
const DoubleVector & | rhs2, | ||
DoubleVector & | result2 | ||
) |
Solve for two right hand sides.
Solve for two right hand sides, required for (efficient) continuation because otherwise we have to store the inverse of the jacobian and the complex equivalent ... nasty.
References A_pt, oomph::Problem::actions_after_change_in_bifurcation_parameter(), alpha, oomph::Problem::assembly_handler_pt(), oomph::DoubleVector::build(), oomph::LinearAlgebraDistribution::build(), oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::DoubleVector::built(), oomph::HopfHandler::C, oomph::Problem::communicator_pt(), oomph::LinearSolver::disable_resolve(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::Problem::dof(), e(), E_pt, oomph::Mesh::element_pt(), oomph::LinearSolver::Enable_resolve, oomph::LinearSolver::enable_resolve(), oomph::GeneralisedElement::eqn_number(), boost::multiprecision::fabs(), oomph::BlackBoxFDNewtonSolver::FD_step, G_pt, oomph::GeneralisedElement::get_jacobian_and_mass_matrix(), oomph::Problem::get_residuals(), i, Linear_solver_pt, m, oomph::Problem::mesh_pt(), n, oomph::GeneralisedElement::ndof(), oomph::Problem::ndof(), oomph::Mesh::nelement(), Eigen::internal::omega(), oomph::HopfHandler::Omega, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::HopfHandler::Phi, Problem_pt, oomph::HopfHandler::Psi, oomph::LinearSolver::resolve(), oomph::Problem::sign_of_jacobian(), oomph::LinearSolver::solve(), oomph::HopfHandler::solve_complex_system(), oomph::HopfHandler::solve_full_system(), oomph::HopfHandler::solve_standard_system(), and y.
|
private |
Pointer to the storage for the vector a.
Referenced by solve(), solve_for_two_rhs(), and ~BlockHopfLinearSolver().
|
private |
Pointer to the storage for the vector e (0 to n-1)
Referenced by solve(), solve_for_two_rhs(), and ~BlockHopfLinearSolver().
|
private |
Pointer to the storage for the vector g (0 to n-1)
Referenced by solve(), solve_for_two_rhs(), and ~BlockHopfLinearSolver().
|
private |
Pointer to the original linear solver.
Referenced by linear_solver_pt(), solve(), and solve_for_two_rhs().
|
private |
Pointer to the problem, used in the resolve.
Referenced by solve(), and solve_for_two_rhs().