|
FEAT 3
Finite Element Analysis Toolbox
|
Front-end wrapper class for (parallel) third-party direct sparse solvers. More...
#include <direct_sparse_solver.hpp>
Public Types | |
| typedef ADPSolverBase< Matrix_, Filter_ > | BaseClass |
| our base class More... | |
| typedef MatrixType::DataType | DataType |
| our internal data type More... | |
| typedef BaseClass::FilterType | FilterType |
| our (global or local) system filter type More... | |
| typedef MatrixType::IndexType | IndexType |
| our internal index type More... | |
| typedef BaseClass::MatrixType | MatrixType |
| our (global or local) system matrix type More... | |
| typedef BaseClass::VectorType | VectorType |
| our (global or local) system vector type More... | |
Public Member Functions | |
| DirectSparseSolver (const MatrixType &matrix, const FilterType &filter) | |
| Creates a new DirectSparseSolver object for the given system. More... | |
| virtual | ~DirectSparseSolver () |
| virtual destructor More... | |
| virtual Status | apply (Vector_ &vec_cor, const Vector_ &vec_def)=0 |
| Solver application method. More... | |
| virtual Status | apply (VectorType &vec_cor, const VectorType &vec_def) override |
| Solves a linear system with the factorized system matrix. More... | |
| void | clear_allowed_backends () |
| Clears the deque of allowed backends. More... | |
| virtual void | done () |
| Finalization method. More... | |
| virtual void | done_numeric () override |
| Releases the numeric initialization data of the solver. More... | |
| virtual void | done_symbolic () override |
| Releases the symbolic factorization data and frees the backend. More... | |
| const std::deque< DSSBackend > | get_allowed_backends () const |
| Returns a reference to the deque of allowed backends. More... | |
| DSSBackend | get_selected_backend () const |
| Returns the selected backend. More... | |
| virtual void | init () |
| Initialization method. More... | |
| virtual void | init_numeric () override |
| Performs the numeric initialization of the solver. More... | |
| virtual void | init_symbolic () override |
| Performs the symbolic initialization of the solver. More... | |
| virtual String | name () const override |
| Returns the name of the solver. More... | |
| void | push_allowed_backend (const String &backend) |
| Pushes a combination of allowed backends into the backend queue. More... | |
| void | push_allowed_backend (DSSBackend backend) |
| Pushes a combination of allowed backends into the backend queue. More... | |
| void | push_allowed_backend_list (const std::deque< String > &backends) |
| Pushes a deque of allowed backends into the backend queue. More... | |
| void | push_allowed_backend_list (const String &backends) |
| Pushes a list of allowed backends into the backend queue. More... | |
Static Public Member Functions | |
| static bool | is_available (const MatrixType &matrix, const FilterType &filter) |
| Checks whether a suitable backend for the given matrix and filter. More... | |
Static Public Attributes | |
| static constexpr bool | have_backend_cudss = DSS::have_cudss |
| specifies whether the cuDSS solver backend is available More... | |
| static constexpr bool | have_backend_global = DSS::have_backend_global |
| specifies whether at least one backend for global systems is available More... | |
| static constexpr bool | have_backend_local = DSS::have_backend_local |
| specifies whether at least one backend for local systems is available More... | |
| static constexpr bool | have_backend_mkldss = DSS::have_mkldss |
| specifies whether the MKL-DSS solver backend is available More... | |
| static constexpr bool | have_backend_mumps = DSS::have_mumps |
| specifies whether the MUMPS solver backend is available More... | |
| static constexpr bool | have_backend_superlu = DSS::have_superlu |
| specifies whether the SuperLU solver backend is available More... | |
| static constexpr bool | have_backend_umfpack = DSS::have_umfpack |
| specifies whether the UMFPACK solver backend is available More... | |
Protected Member Functions | |
| template<typename DTV_ > | |
| void | _download_vector (LocalVectorType &vector, const DTV_ *val) |
| Downloads the ADP vector values from the given array. More... | |
| template<typename DTV_ > | |
| void | _download_vector (VectorType &vector, const DTV_ *val) |
| Downloads the ADP vector values from the given array. More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _filter_mat (DTV_ *, const RPT_ *, const CIT_ *, const Global::MeanFilter< DataType, IndexType > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _filter_mat (DTV_ *, const RPT_ *, const CIT_ *, const LAFEM::MeanFilter< DataType, IndexType > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _filter_mat (DTV_ *, const RPT_ *, const CIT_ *, const LAFEM::NoneFilter< DataType, IndexType > &) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ , typename First_ > | |
| void | _filter_mat (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx, const LAFEM::FilterChain< First_ > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ , typename First_ , typename... Rest_> | |
| void | _filter_mat (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx, const LAFEM::FilterChain< First_, Rest_... > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ , typename SubFilter_ > | |
| void | _filter_mat (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx, const LAFEM::FilterSequence< SubFilter_ > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _filter_mat (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx, const LAFEM::UnitFilter< DataType, IndexType > &filter) |
| auxiliary function: filters the local ADP matrix More... | |
| String | _get_adp_block_information () const |
| String | _get_adp_block_information () const |
| Index | _get_adp_matrix_num_cols () const |
| Index | _get_adp_matrix_num_cols () const |
| Index | _get_adp_matrix_num_nzes () const |
| Index | _get_adp_matrix_num_nzes () const |
| Index | _get_adp_matrix_num_rows () const |
| Index | _get_adp_matrix_num_rows () const |
| Index | _get_adp_vector_size () const |
| Index | _get_adp_vector_size () const |
| const Dist::Comm * | _get_comm () const |
| const Dist::Comm * | _get_comm () const |
| Index | _get_global_dof_offset () const |
| Index | _get_global_dof_offset () const |
| Index | _get_num_global_dofs () const |
| Index | _get_num_global_dofs () const |
| Index | _get_num_global_nonzeros () const |
| Index | _get_num_global_nonzeros () const |
| Index | _get_num_owned_dofs () const |
| Index | _get_num_owned_dofs () const |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _upload_numeric (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx) |
| Uploads the (filtered) ADP matrix values to the given array. More... | |
| template<typename DTV_ , typename RPT_ , typename CIT_ > | |
| void | _upload_numeric (DTV_ *val, const RPT_ *row_ptr, const CIT_ *col_idx) |
| Uploads the (filtered) ADP matrix values to the given array. More... | |
| template<typename RPT_ , typename CIT_ > | |
| void | _upload_symbolic (RPT_ *row_ptr, CIT_ *col_idx) |
| Uploads the ADP matrix structure to the given arrays. More... | |
| template<typename RPT_ , typename CIT_ > | |
| void | _upload_symbolic (RPT_ *row_ptr, CIT_ *col_idx) |
| Uploads the ADP matrix structure to the given arrays. More... | |
| template<typename DTV_ > | |
| void | _upload_vector (DTV_ *val, const LocalVectorType &vector) |
| Uploads the ADP vector values to the given array. More... | |
| template<typename DTV_ > | |
| void | _upload_vector (DTV_ *val, const VectorType &vector) |
| Uploads the ADP vector values to the given array. More... | |
Protected Attributes | |
| Dist::Comm | _comm_self |
| self-communicator object More... | |
| const FilterType & | _system_filter |
| the system filter More... | |
| const MatrixType & | _system_matrix |
| the system matrix More... | |
Private Member Functions | |
| bool | _create_core_cudss () |
| Tries to create a cuDSS backend core and returns true, if it succeeded. More... | |
| bool | _create_core_mkldss () |
| Tries to create a MKL-DSS backend core and returns true, if it succeeded. More... | |
| bool | _create_core_mumps () |
| Tries to create a MUMPS backend core and returns true, if it succeeded. More... | |
| bool | _create_core_superlu () |
| Tries to create a SuperLU backend core and returns true, if it succeeded. More... | |
| bool | _create_core_umfpack () |
| Tries to create an UMFPACK backend core and returns true, if it succeeded. More... | |
Private Attributes | |
| std::deque< DSSBackend > | _allowed_backends |
| backends that the user allowed us to use More... | |
| void * | _core_cudss |
| Nvidia cuDSS core. More... | |
| void * | _core_mkldss |
| Intel MKLDSS core. More... | |
| void * | _core_mumps |
| MUMPS core. More... | |
| void * | _core_superlu |
| SuperLU core. More... | |
| void * | _core_umfpack |
| UMFPACK core. More... | |
| PreferredBackend | _preferred_backend |
| preferred backend of runtime at time of object creation More... | |
Front-end wrapper class for (parallel) third-party direct sparse solvers.
This class acts as a unified front-end that enables the use of various direct sparse solvers implemented in third-party libraries. This class derives from the ADPSolverBase class and can therefore be applied to any type of system that is supported by the ADPSolverBase class.
In particular, this class currently offers the following backends:
CUDSS_COMM_LIB environment variable is set to the absolute path of cuDSS's libcudss_commlayer_openmpi.so library, because the code will otherwise crash with obscure illegal memory access errors when trying to run the solver with more than 1 MPI process! See https://docs.nvidia.com/cuda/cudss/advanced_features.html#multi-gpu-multi-node-mgmn-mode for more details.Backend Selection Process:
The actual backend selection process is performed during the execution of the init_symbolic() method and the selection process depends on three main factors:
Independently of all other factors, a backend can only be selected if its corresponding third-party library is available for obvious reasons. Then, there are two main scenarios:
Scenario A: If the user specified a list of allowed backend (combinations) by calling one of the push_allowed_backend_list() or push_allowed_backends() functions, then the algorithm will start with the first allowed backend (combination) from the list and it will check if any of the allowed backends in the combination is available and, if so, it will select that backend. If the backend combination contains more than a single allowed backend, the algorithm will check them in the following order:
If none of the backends in a given backend combination is available, the algorithm continues with the next combination in the list until it has either found a suitable backend or until it reaches the end of the list, in which case the init_symbolic() function throws an instance of the DSSBackendNotFoundException exception to indicate that it failed to find a suitable backend that meets the users list of allowed backends.
As a simple example, assume the user specified $"mkldss|superlu cudss umfpack" as a list of allowed backend combinations, then the algorithm will first try to create the MKL-DSS or the SuperLU backends and, if none of the two are available, it will then try to create the cuDSS backend and, if that isn't available either, it will finally try to create the UMFPACK backend.
Scenario B: If the user did not specify any allowed backend combinations, then the algorithm will check which PreferredBackend was selected at the time that the DirectSparseSolver object was constructed and it will perform the following steps in the following order
Note: If you want to skip the check of the preferred backend and you just want the algorithm to select any suitable backend, then you can simply push DSSBackend::all as the allowed backend.
Definition at line 448 of file direct_sparse_solver.hpp.
| typedef ADPSolverBase<Matrix_, Filter_> FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::BaseClass |
our base class
Definition at line 453 of file direct_sparse_solver.hpp.
|
inherited |
our internal data type
Definition at line 783 of file adp_solver_base.hpp.
| typedef BaseClass::FilterType FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::FilterType |
our (global or local) system filter type
Definition at line 459 of file direct_sparse_solver.hpp.
|
inherited |
our internal index type
Definition at line 785 of file adp_solver_base.hpp.
| typedef BaseClass::MatrixType FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::MatrixType |
our (global or local) system matrix type
Definition at line 455 of file direct_sparse_solver.hpp.
| typedef BaseClass::VectorType FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::VectorType |
our (global or local) system vector type
Definition at line 457 of file direct_sparse_solver.hpp.
|
inlineexplicit |
Creates a new DirectSparseSolver object for the given system.
| [in] | matrix | A resident reference to the system matrix. |
| [in] | filter | A resident reference to the system filter. |
Definition at line 506 of file direct_sparse_solver.hpp.
|
inlinevirtual |
virtual destructor
Definition at line 519 of file direct_sparse_solver.hpp.
|
inlineprivate |
Tries to create a cuDSS backend core and returns true, if it succeeded.
Definition at line 1063 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_global_dof_offset(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
inlineprivate |
Tries to create a MKL-DSS backend core and returns true, if it succeeded.
Definition at line 1090 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_global_dof_offset(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
inlineprivate |
Tries to create a MUMPS backend core and returns true, if it succeeded.
Definition at line 1117 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_global_dof_offset(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
inlineprivate |
Tries to create a SuperLU backend core and returns true, if it succeeded.
Definition at line 1144 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_global_dof_offset(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
inlineprivate |
Tries to create an UMFPACK backend core and returns true, if it succeeded.
Definition at line 1171 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_global_dof_offset(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
protectedinherited |
Downloads the ADP vector values from the given array.
| [in,out] | vector | A transient reference to the local vector that receives the downloaded ADP value array. It is assumed to be allocated to the correct size, but its contents on entry are ignored. |
| [in] | val | A transient pointer to an array of length _get_adp_vector_size() that contains the ADP values that are to be downloaded to the output vector given by vector. |
Referenced by FEAT::Solver::TpetraSolverBase< Matrix_, Filter_, SolverBase_ >::_download_cor(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::_download_cor(), and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::apply().
|
inlineprotectedinherited |
Downloads the ADP vector values from the given array.
| [in,out] | vector | A transient reference to the local vector that receives the downloaded ADP value array. It is assumed to be allocated to the correct size, but its contents on entry are ignored. |
| [in] | val | A transient pointer to an array of length _get_adp_vector_size() that contains the ADP values that are to be downloaded to the output vector given by vector. |
Definition at line 956 of file adp_solver_base.hpp.
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 994 of file adp_solver_base.hpp.
References XASSERTM.
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 986 of file adp_solver_base.hpp.
References XASSERTM.
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 963 of file adp_solver_base.hpp.
Referenced by FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_filter_mat(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_filter_mat(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_upload_numeric(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_numeric().
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 1020 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_filter_mat().
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 1011 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_filter_mat().
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 1002 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_filter_mat().
|
inlineprotectedinherited |
auxiliary function: filters the local ADP matrix
Definition at line 971 of file adp_solver_base.hpp.
|
protectedinherited |
|
inlineprotectedinherited |
Definition at line 873 of file adp_solver_base.hpp.
References XABORTM.
|
protectedinherited |
|
inlineprotectedinherited |
Definition at line 837 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Definition at line 843 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
|
inlineprotectedinherited |
Definition at line 831 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Referenced by FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_download_vector(), and FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_upload_vector().
|
inlineprotectedinherited |
Definition at line 825 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Definition at line 819 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_comm_self.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Definition at line 867 of file adp_solver_base.hpp.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_get_adp_matrix_num_cols(), FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_numeric(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Definition at line 855 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack().
|
inlineprotectedinherited |
Definition at line 849 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_get_adp_matrix_num_rows(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_get_adp_vector_size(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Definition at line 861 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Uploads the (filtered) ADP matrix values to the given array.
| [out] | val | A transient pointer to an array of length _get_adp_matrix_num_nzes() that receives the filtered matrix values of the local ADP matrix. |
| [in] | row_ptr | A transient pointer to the row-pointer array of the ADP matrix as returned by the _upload_symbolic() function. |
| [in] | col_idx | A transient pointer to the column-index array of the ADP matrix as returned by the _upload_symbolic() function. |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_numeric(), FEAT::Solver::TpetraSolverBase< Matrix_, Filter_, SolverBase_ >::init_numeric(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_numeric(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_numeric().
|
inlineprotectedinherited |
Uploads the (filtered) ADP matrix values to the given array.
| [out] | val | A transient pointer to an array of length _get_adp_matrix_num_nzes() that receives the filtered matrix values of the local ADP matrix. |
| [in] | row_ptr | A transient pointer to the row-pointer array of the ADP matrix as returned by the _upload_symbolic() function. |
| [in] | col_idx | A transient pointer to the column-index array of the ADP matrix as returned by the _upload_symbolic() function. |
Definition at line 917 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_filter_mat(), and FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Uploads the ADP matrix structure to the given arrays.
| [out] | row_ptr | A transient pointer to an array of length _get_adp_matrix_num_rows()+1 that receives the the row-pointer array of the local ADP matrix. |
| [out] | col_idx | A transient pointer to an array of length _get_adp_matrix_num_nzes() that receives the column index array of the local ADP matrix. |
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::FROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::StokesFROSchPreconditioner< Matrix_, Filter_ >::init_symbolic(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::init_symbolic(), and FEAT::Solver::SuperLU< Matrix_, Filter_ >::init_symbolic().
|
inlineprotectedinherited |
Uploads the ADP matrix structure to the given arrays.
| [out] | row_ptr | A transient pointer to an array of length _get_adp_matrix_num_rows()+1 that receives the the row-pointer array of the ADP matrix. |
| [out] | col_idx | A transient pointer to an array of length _get_adp_matrix_num_nzes() that receives the column index array of the ADP matrix. |
Definition at line 891 of file adp_solver_base.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_system_matrix.
|
protectedinherited |
Uploads the ADP vector values to the given array.
| [out] | val | A transient pointer to an array of length _get_adp_vector_size() that receives the local ADP values of the input vector given by vector. |
| [in] | vector | A transient reference to the local vector that is to be uploaded to the ADP value array. |
Referenced by FEAT::Solver::TpetraSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_def(), FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_def(), and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::apply().
|
inlineprotectedinherited |
Uploads the ADP vector values to the given array.
| [out] | val | A transient pointer to an array of length _get_adp_vector_size() that receives the local ADP values of the input vector given by vector. |
| [in] | vector | A transient reference to the local vector that is to be uploaded to the ADP value array. |
Definition at line 939 of file adp_solver_base.hpp.
|
pure virtualinherited |
Solver application method.
This method applies the solver represented by this object onto a given defect vector and returns the corresponding correction vector.
correct() method which corrects an initial solution instead of starting with the null vector.| [out] | vec_cor | The vector that shall receive the solution of the linear system. It is assumed to be allocated, but its numerical contents may be undefined upon calling this method. |
| [in] | vec_def | The vector that represents the right-hand-side of the linear system to be solved. |
Implemented in FEAT::Solver::SchwarzPrecond< Global::Vector< LocalVector_, Mirror_ >, Global::Filter< LocalFilter_, Mirror_ > >, FEAT::Solver::ScalePrecond< Vector_, Filter_ >, FEAT::Solver::DiagonalPrecond< Vector_, Filter_ >, FEAT::Solver::MultiGrid< SystemMatrix_, SystemFilter_, TransferOperator_ >, FEAT::Solver::NLOptPrecond< VectorType_, FilterType_ >, FEAT::Solver::AmaVanka< Matrix_, Filter_ >, FEAT::Solver::ConvertPrecond< VectorOuter_, VectorInner_ >, FEAT::Solver::ConvertPrecond< Global::Vector< LocalVectorOuter_, MirrorOuter_ >, Global::Vector< LocalVectorInner_, MirrorInner_ > >, and FEAT::Solver::BFBT< MatrixA_, MatrixB_, MatrixD_, FilterV_, FilterP_ >.
Referenced by FEAT::Solver::solve().
|
inlineoverridevirtual |
Solves a linear system with the factorized system matrix.
| [in,out] | vec_cor | A reference to the solution vector. The vector must be allocated to the correct length, but its initial contents are ignored. |
| [in] | vec_def | A reference to the right-hand-side of the linear system. |
Definition at line 921 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_download_vector(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_vector(), FEAT::Solver::aborted, and FEAT::Solver::success.
|
inline |
Clears the deque of allowed backends.
Definition at line 653 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_allowed_backends.
|
inlinevirtualinherited |
Finalization method.
This function performs both the symbolic and numeric finalization, i.e. it simply performs
this->done_numeric(); this->done_symbolic();
Definition at line 283 of file base.hpp.
References FEAT::Solver::SolverBase< Vector_ >::done_numeric(), and FEAT::Solver::SolverBase< Vector_ >::done_symbolic().
|
inlineoverridevirtual |
Releases the numeric initialization data of the solver.
Reimplemented from FEAT::Solver::SolverBase< Vector_ >.
Definition at line 894 of file direct_sparse_solver.hpp.
References FEAT::Solver::SolverBase< Vector_ >::done_numeric().
|
inlineoverridevirtual |
Releases the symbolic factorization data and frees the backend.
Reimplemented from FEAT::Solver::SolverBase< Vector_ >.
Definition at line 786 of file direct_sparse_solver.hpp.
References FEAT::Solver::SolverBase< Vector_ >::done_symbolic().
|
inline |
Returns a reference to the deque of allowed backends.
Definition at line 659 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_allowed_backends.
|
inline |
Returns the selected backend.
Note that the backend is selected during the execution of init_symbolic() and therefore this function only returns the actually selected backend after init_symbolic() was called. This function always returns DSSBackend::none before the call to init_symbolic() and after the call to done_symbolic().
Definition at line 672 of file direct_sparse_solver.hpp.
References FEAT::Solver::cudss, FEAT::Solver::mkldss, FEAT::Solver::mumps, FEAT::Solver::none, FEAT::Solver::superlu, and FEAT::Solver::umfpack.
|
inlinevirtualinherited |
Initialization method.
This function performs both the symbolic and numeric initialization, i.e. it simply performs
this->init_symbolic(); this->init_numeric();
Definition at line 268 of file base.hpp.
References FEAT::Solver::SolverBase< Vector_ >::init_numeric(), and FEAT::Solver::SolverBase< Vector_ >::init_symbolic().
|
inlineoverridevirtual |
Performs the numeric initialization of the solver.
This function may throw instances of DirectSparseSolver exceptions if anything goes wrong.
Reimplemented from FEAT::Solver::SolverBase< Vector_ >.
Definition at line 831 of file direct_sparse_solver.hpp.
References FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_numeric(), and FEAT::Solver::SolverBase< Vector_ >::init_numeric().
|
inlineoverridevirtual |
Performs the symbolic initialization of the solver.
This function selects the actual backend before starting the symbolic initialization. Please check the documentation of this class for details about how the backend selection process is performed.
This function may throw instances of DirectSparseSolver exceptions if anything goes wrong.
Reimplemented from FEAT::Solver::SolverBase< Vector_ >.
Definition at line 696 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_allowed_backends, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_cudss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mkldss(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_mumps(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_superlu(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_create_core_umfpack(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_preferred_backend, FEAT::cuda, FEAT::Solver::cudss, FEAT::Solver::SolverBase< Vector_ >::init_symbolic(), FEAT::mkl, FEAT::Solver::mkldss, FEAT::Dist::Comm::size(), FEAT::Solver::superlu, and FEAT::Solver::umfpack.
|
inlinestatic |
Checks whether a suitable backend for the given matrix and filter.
| [in] | matrix | A transient reference to the system matrix |
| [in] | filter | A transient reference to the system filter |
true if at least one direct sparse solver backend is available for this system, otherwise false Definition at line 552 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::have_backend_global, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::have_backend_local, FEAT::Dist::Comm::size(), and XABORTM.
Referenced by FEAT::Solver::have_direct_sparse_solver().
|
inlineoverridevirtual |
Returns the name of the solver.
Implements FEAT::Solver::SolverBase< Vector_ >.
Definition at line 524 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_core_cudss, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_core_mkldss, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_core_mumps, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_core_superlu, and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_core_umfpack.
|
inline |
Pushes a combination of allowed backends into the backend queue.
| [in] | backend | A combination of backends separated by a vertical line character | |
The following strings can be used to select the corresponding backends:
Definition at line 613 of file direct_sparse_solver.hpp.
References FEAT::Solver::all, FEAT::Solver::cudss, FEAT::Solver::mkldss, FEAT::Solver::mumps, FEAT::Solver::none, FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend(), FEAT::String::split_by_charset(), FEAT::Solver::superlu, and FEAT::Solver::umfpack.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend(), and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend_list().
|
inline |
Pushes a combination of allowed backends into the backend queue.
| [in] | backend | A combination of backends |
Definition at line 647 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::_allowed_backends.
|
inline |
Pushes a deque of allowed backends into the backend queue.
| [in] | backends | A transient reference to a deque of backend strings to push |
Definition at line 592 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend().
|
inline |
Pushes a list of allowed backends into the backend queue.
| [in] | backends | A string containing a list of backends combinations separated by whitespaces |
Definition at line 580 of file direct_sparse_solver.hpp.
References FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend_list(), and FEAT::String::split_by_whitespaces().
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend_list().
|
private |
backends that the user allowed us to use
Definition at line 478 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::clear_allowed_backends(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::get_allowed_backends(), FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic(), and FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::push_allowed_backend().
|
protectedinherited |
self-communicator object
Many third-party libraries always expect a MPI_Comm object even if we operate only on a single MPI process, therefore this class creates a custom self-communicator that can be passed on to the third-party libraries.
Definition at line 795 of file adp_solver_base.hpp.
Referenced by FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_comm().
|
private |
Nvidia cuDSS core.
Definition at line 482 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::name().
|
private |
Intel MKLDSS core.
Definition at line 484 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::name().
|
private |
MUMPS core.
Definition at line 486 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::name().
|
private |
SuperLU core.
Definition at line 488 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::name().
|
private |
UMFPACK core.
Definition at line 490 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::name().
|
private |
preferred backend of runtime at time of object creation
Definition at line 480 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::init_symbolic().
|
protectedinherited |
the system filter
Definition at line 799 of file adp_solver_base.hpp.
Referenced by FEAT::Solver::TpetraSolverBase< Matrix_, Filter_, SolverBase_ >::_download_cor(), and FEAT::Solver::HypreSolverBase< Matrix_, Filter_, SolverBase_ >::_download_cor().
|
protectedinherited |
the system matrix
Definition at line 797 of file adp_solver_base.hpp.
Referenced by FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_cols(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_nzes(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_matrix_num_rows(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_adp_vector_size(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_dofs(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_global_nonzeros(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_get_num_owned_dofs(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_upload_numeric(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_numeric(), FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::_upload_symbolic(), FEAT::Solver::ADPSolverBase< Matrix_, Filter_, SolverBase_ >::_upload_symbolic(), and FEAT::Solver::ADPSolverBase< Global::PMDCDSCMatrix< MatrixB_, MatrixD_ >, GlobalFilter_, SolverBase_ >::init_symbolic().
|
staticconstexpr |
specifies whether the cuDSS solver backend is available
Definition at line 462 of file direct_sparse_solver.hpp.
|
staticconstexpr |
specifies whether at least one backend for global systems is available
Definition at line 474 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::is_available().
|
staticconstexpr |
specifies whether at least one backend for local systems is available
Definition at line 472 of file direct_sparse_solver.hpp.
Referenced by FEAT::Solver::DirectSparseSolver< Matrix_, Filter_ >::is_available().
|
staticconstexpr |
specifies whether the MKL-DSS solver backend is available
Definition at line 464 of file direct_sparse_solver.hpp.
|
staticconstexpr |
specifies whether the MUMPS solver backend is available
Definition at line 466 of file direct_sparse_solver.hpp.
|
staticconstexpr |
specifies whether the SuperLU solver backend is available
Definition at line 468 of file direct_sparse_solver.hpp.
|
staticconstexpr |
specifies whether the UMFPACK solver backend is available
Definition at line 470 of file direct_sparse_solver.hpp.