![]() |
|
#include <fsi_preconditioners.h>
Public Member Functions | |
SimpleFSIPreconditioner () | |
Constructor. More... | |
~SimpleFSIPreconditioner () | |
Destructor: Clean up. More... | |
SimpleFSIPreconditioner (const SimpleFSIPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | set_navier_stokes_mesh (Mesh *mesh_pt, const bool &allow_multiple_element_type_in_navier_stokes_mesh=false) |
Broken assignment operator. More... | |
void | set_wall_mesh (Mesh *mesh_pt, const bool &allow_multiple_element_type_in_wall_mesh=false) |
void | setup () |
Setup the preconditioner. More... | |
void | preconditioner_solve (const DoubleVector &r, DoubleVector &z) |
Apply preconditioner to r. More... | |
void | use_block_diagonal_version () |
Switch to block-diagonal preconditioner. More... | |
void | use_block_triangular_version_with_fluid_on_solid () |
void | use_block_triangular_version_with_solid_on_fluid () |
![]() | |
BlockPreconditioner () | |
Constructor. More... | |
virtual | ~BlockPreconditioner () |
Destructor. More... | |
BlockPreconditioner (const BlockPreconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const BlockPreconditioner &)=delete |
Broken assignment operator. More... | |
MATRIX * | matrix_pt () const |
void | turn_on_recursive_debug_flag () |
void | turn_off_recursive_debug_flag () |
void | turn_on_debug_flag () |
Toggles on the debug flag. More... | |
void | turn_off_debug_flag () |
Toggles off the debug flag. More... | |
void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< MATRIX > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse) |
void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< MATRIX > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse) |
virtual void | block_setup () |
void | block_setup (const Vector< unsigned > &dof_to_block_map) |
void | get_block (const unsigned &i, const unsigned &j, MATRIX &output_matrix, const bool &ignore_replacement_block=false) const |
MATRIX | get_block (const unsigned &i, const unsigned &j, const bool &ignore_replacement_block=false) const |
void | set_master_matrix_pt (MATRIX *in_matrix_pt) |
Set the matrix_pt in the upper-most master preconditioner. More... | |
void | get_block_other_matrix (const unsigned &i, const unsigned &j, MATRIX *in_matrix_pt, MATRIX &output_matrix) |
void | get_blocks (DenseMatrix< bool > &required_blocks, DenseMatrix< MATRIX * > &block_matrix_pt) const |
void | get_dof_level_block (const unsigned &i, const unsigned &j, MATRIX &output_block, const bool &ignore_replacement_block=false) const |
MATRIX | get_concatenated_block (const VectorMatrix< BlockSelector > &selected_block) |
void | get_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &v, DoubleVector &b) |
void | return_concatenated_block_vector (const Vector< unsigned > &block_vec_number, const DoubleVector &b, DoubleVector &v) const |
Takes concatenated block ordered vector, b, and copies its. More... | |
void | get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const |
void | get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const |
void | return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const |
void | return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const |
void | get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const |
void | return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const |
void | get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w) |
void | return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const |
unsigned | nblock_types () const |
Return the number of block types. More... | |
unsigned | ndof_types () const |
Return the total number of DOF types. More... | |
const Mesh * | mesh_pt (const unsigned &i) const |
unsigned | nmesh () const |
int | block_number (const unsigned &i_dof) const |
Return the block number corresponding to a global index i_dof. More... | |
int | index_in_block (const unsigned &i_dof) const |
const LinearAlgebraDistribution * | block_distribution_pt (const unsigned &b) const |
Access function to the block distributions (const version). More... | |
LinearAlgebraDistribution * | block_distribution_pt (const unsigned b) |
Access function to the block distributions (non-const version). More... | |
LinearAlgebraDistribution * | dof_block_distribution_pt (const unsigned &b) |
Access function to the dof-level block distributions. More... | |
const LinearAlgebraDistribution * | master_distribution_pt () const |
unsigned | ndof_types_in_mesh (const unsigned &i) const |
bool | is_subsidiary_block_preconditioner () const |
bool | is_master_block_preconditioner () const |
void | set_block_output_to_files (const std::string &basefilename) |
void | disable_block_output_to_files () |
Turn off output of blocks (by clearing the basefilename string). More... | |
bool | block_output_on () const |
Test if output of blocks is on or not. More... | |
void | output_blocks_to_files (const std::string &basefilename, const unsigned &precision=8) const |
void | post_block_matrix_assembly_partial_clear () |
BlockPreconditioner< MATRIX > * | master_block_preconditioner_pt () const |
Access function to the master block preconditioner pt. More... | |
void | clear_block_preconditioner_base () |
void | document () |
Vector< Vector< unsigned > > | doftype_coarsen_map_fine () const |
Vector< unsigned > | get_fine_grain_dof_types_in (const unsigned &i) const |
unsigned | nfine_grain_dof_types_in (const unsigned &i) const |
MapMatrix< unsigned, CRDoubleMatrix * > | replacement_dof_block_pt () const |
Access function to the replaced dof-level blocks. More... | |
void | setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const Vector< unsigned > &block_col_indices) |
void | setup_matrix_vector_product (MatrixVectorProduct *matvec_prod_pt, CRDoubleMatrix *block_pt, const unsigned &block_col_index) |
void | internal_get_block_ordered_preconditioner_vector (const DoubleVector &v, DoubleVector &w) const |
void | internal_return_block_ordered_preconditioner_vector (const DoubleVector &w, DoubleVector &v) const |
unsigned | internal_nblock_types () const |
unsigned | internal_ndof_types () const |
void | internal_return_block_vector (const unsigned &n, const DoubleVector &b, DoubleVector &v) const |
void | internal_get_block_vector (const unsigned &n, const DoubleVector &v, DoubleVector &b) const |
void | internal_get_block_vectors (const Vector< unsigned > &block_vec_number, const DoubleVector &v, Vector< DoubleVector > &s) const |
void | internal_get_block_vectors (const DoubleVector &v, Vector< DoubleVector > &s) const |
void | internal_return_block_vectors (const Vector< unsigned > &block_vec_number, const Vector< DoubleVector > &s, DoubleVector &v) const |
void | internal_return_block_vectors (const Vector< DoubleVector > &s, DoubleVector &v) const |
void | internal_get_block (const unsigned &i, const unsigned &j, MATRIX &output_block) const |
int | internal_block_number (const unsigned &i_dof) const |
int | internal_index_in_block (const unsigned &i_dof) const |
const LinearAlgebraDistribution * | internal_block_distribution_pt (const unsigned &b) const |
Access function to the internal block distributions. More... | |
void | insert_auxiliary_block_distribution (const Vector< unsigned > &block_vec_number, LinearAlgebraDistribution *dist_pt) |
void | block_matrix_test (const unsigned &i, const unsigned &j, const MATRIX *block_matrix_pt) const |
template<typename myType > | |
int | get_index_of_value (const Vector< myType > &vec, const myType val, const bool sorted=false) const |
void | internal_get_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block) const |
void | get_dof_level_block (const unsigned &block_i, const unsigned &block_j, CRDoubleMatrix &output_block, const bool &ignore_replacement_block) const |
![]() | |
Preconditioner () | |
Constructor. More... | |
Preconditioner (const Preconditioner &)=delete | |
Broken copy constructor. More... | |
void | operator= (const Preconditioner &)=delete |
Broken assignment operator. More... | |
virtual | ~Preconditioner () |
Destructor (empty) More... | |
virtual void | preconditioner_solve_transpose (const DoubleVector &r, DoubleVector &z) |
void | setup (DoubleMatrixBase *matrix_pt) |
void | setup (const Problem *problem_pt, DoubleMatrixBase *matrix_pt) |
void | enable_silent_preconditioner_setup () |
Set up the block preconditioner quietly! More... | |
void | disable_silent_preconditioner_setup () |
Be verbose in the block preconditioner setup. More... | |
virtual void | clean_up_memory () |
Clean up memory (empty). Generic interface function. More... | |
virtual void | set_matrix_pt (DoubleMatrixBase *matrix_pt) |
Set the matrix pointer. More... | |
virtual const OomphCommunicator * | comm_pt () const |
Get function for comm pointer. More... | |
virtual void | set_comm_pt (const OomphCommunicator *const comm_pt) |
Set the communicator pointer. More... | |
double | setup_time () const |
Returns the time to setup the preconditioner. More... | |
virtual void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse) |
virtual void | turn_into_subsidiary_block_preconditioner (BlockPreconditioner< CRDoubleMatrix > *master_block_prec_pt, const Vector< unsigned > &doftype_in_master_preconditioner_coarse, const Vector< Vector< unsigned >> &doftype_coarsen_map_coarse) |
![]() | |
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 Member Functions | |
virtual void | identify_required_blocks (DenseMatrix< bool > &required_blocks) |
Private Attributes | |
Preconditioner * | Preconditioner_pt |
Preconditioner (inexact solver) More... | |
bool | Retain_solid_onto_fluid_terms |
bool | Retain_fluid_onto_solid_terms |
Mesh * | Navier_stokes_mesh_pt |
Pointer to the navier stokes mesh. More... | |
Mesh * | Wall_mesh_pt |
pointer to the solid mesh More... | |
bool | Allow_multiple_element_type_in_navier_stokes_mesh |
Flag for multiple element types in the Navier-Stokes mesh. More... | |
bool | Allow_multiple_element_type_in_wall_mesh |
Flag for multiple element types in the Wall mesh. More... | |
//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// FSI preconditioner. This extracts upper/lower triangular blocks in the 3x3 overall block matrix structure arising from the monolithic discretisation of FSI problems with algebraic node updates. Dofs are decomposed into fluid velocity, pressure and solid unknowns. Blocks are then re-assembled into one global matrix and solved with a direct solver (SuperLU in its incarnation as an exact preconditioner). By default we retain the fluid on solid off diagonal blocks.
|
inline |
Constructor.
References oomph::SimpleFSIPreconditioner< MATRIX >::Allow_multiple_element_type_in_navier_stokes_mesh, oomph::SimpleFSIPreconditioner< MATRIX >::Allow_multiple_element_type_in_wall_mesh, oomph::SimpleFSIPreconditioner< MATRIX >::Navier_stokes_mesh_pt, oomph::SimpleFSIPreconditioner< MATRIX >::Preconditioner_pt, oomph::SimpleFSIPreconditioner< MATRIX >::Retain_fluid_onto_solid_terms, oomph::SimpleFSIPreconditioner< MATRIX >::Retain_solid_onto_fluid_terms, oomph::BlockPreconditioner< MATRIX >::set_nmesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::Wall_mesh_pt.
|
inline |
|
delete |
Broken copy constructor.
|
privatevirtual |
Identify the required blocks: Here we only need the momentum, gradient and divergence blocks of the 2x2 block-structured fluid matrix, the 1x1 solid block and the selected FSI-off diagonals.
///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// Identify the required blocks: Here we only need the momentum, gradient and divergence blocks of the 2x2 block-structured fluid matrix, the 1x1 solid block and the selected FSI-off diagonals.
References i, j, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.
|
virtual |
Apply preconditioner to r.
Apply preconditioner to Vector r.
Apply preconditioner.
Implements oomph::Preconditioner.
|
inline |
Broken assignment operator.
Setter function for the mesh containing the block-preconditionable Navier-Stokes elements.
References oomph::SimpleFSIPreconditioner< MATRIX >::Allow_multiple_element_type_in_navier_stokes_mesh, oomph::BlockPreconditioner< MATRIX >::mesh_pt(), and oomph::SimpleFSIPreconditioner< MATRIX >::Navier_stokes_mesh_pt.
Referenced by main(), and PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem().
|
inline |
Setter function for the mesh containing the block-preconditionable FSI solid elements.
References oomph::SimpleFSIPreconditioner< MATRIX >::Allow_multiple_element_type_in_wall_mesh, oomph::BlockPreconditioner< MATRIX >::mesh_pt(), and oomph::SimpleFSIPreconditioner< MATRIX >::Wall_mesh_pt.
Referenced by PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem().
|
virtual |
Setup the preconditioner.
/////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
Setup the preconditioner: Copy the upper/lower triangular block matrices back into a big matrix (with the entries re-ordered relative to the original Jacobian matrix).
Implements oomph::Preconditioner.
References i.
|
inline |
Switch to block-diagonal preconditioner.
References oomph::SimpleFSIPreconditioner< MATRIX >::Retain_fluid_onto_solid_terms, and oomph::SimpleFSIPreconditioner< MATRIX >::Retain_solid_onto_fluid_terms.
Referenced by PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem().
|
inline |
Switch to block-triangular preconditioner in which action of fluid dofs onto solid equations is retained
References oomph::SimpleFSIPreconditioner< MATRIX >::Retain_fluid_onto_solid_terms, and oomph::SimpleFSIPreconditioner< MATRIX >::Retain_solid_onto_fluid_terms.
Referenced by PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem().
|
inline |
Switch to block-triangular preconditioner in which action of solid dofs onto fluid equations is retained
References oomph::SimpleFSIPreconditioner< MATRIX >::Retain_fluid_onto_solid_terms, and oomph::SimpleFSIPreconditioner< MATRIX >::Retain_solid_onto_fluid_terms.
Referenced by PreconditionedFSICollapsibleChannelProblem< ELEMENT >::PreconditionedFSICollapsibleChannelProblem().
|
private |
Flag for multiple element types in the Navier-Stokes mesh.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::set_navier_stokes_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().
|
private |
Flag for multiple element types in the Wall mesh.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::set_wall_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().
|
private |
Pointer to the navier stokes mesh.
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::set_navier_stokes_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().
|
private |
Preconditioner (inexact solver)
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), and oomph::SimpleFSIPreconditioner< MATRIX >::~SimpleFSIPreconditioner().
|
private |
Boolean flag used to indicate that the fluid onto solid interaction terms are to be retained
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_diagonal_version(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_fluid_on_solid(), and oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_solid_on_fluid().
|
private |
Boolean flag used to indicate that the solid onto fluid interaction terms are to be retained
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_diagonal_version(), oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_fluid_on_solid(), and oomph::SimpleFSIPreconditioner< MATRIX >::use_block_triangular_version_with_solid_on_fluid().
|
private |
pointer to the solid mesh
Referenced by oomph::SimpleFSIPreconditioner< MATRIX >::set_wall_mesh(), and oomph::SimpleFSIPreconditioner< MATRIX >::SimpleFSIPreconditioner().