10 #ifndef AMESOS2_TACHO_DECL_HPP
11 #define AMESOS2_TACHO_DECL_HPP
13 #include <Kokkos_Core.hpp>
16 #include "Amesos2_SolverCore.hpp"
17 #include "Amesos2_Tacho_FunctionMap.hpp"
20 #include "Tacho_Solver.hpp"
31 template <
class Matrix,
47 typedef typename super_type::scalar_type scalar_type;
48 typedef typename super_type::local_ordinal_type local_ordinal_type;
49 typedef typename super_type::global_size_type global_size_type;
58 typedef typename type_map::type tacho_type;
59 typedef typename type_map::magnitude_type magnitude_type;
64 typedef Tacho::ordinal_type ordinal_type;
65 typedef Tacho::size_type size_type;
67 typedef Kokkos::DefaultExecutionSpace exec_space_type;
68 typedef Kokkos::DefaultHostExecutionSpace host_exec_space_type;
71 Tacho::UseThisDevice<exec_space_type>::device_type device_type;
73 Tacho::UseThisDevice<host_exec_space_type>::device_type host_device_type;
75 typedef Tacho::DummyTaskScheduler<exec_space_type> scheduler_type;
77 typedef Kokkos::View<size_type*, device_type> device_size_type_array;
78 typedef Kokkos::View<ordinal_type*, device_type> device_ordinal_type_array;
79 typedef Kokkos::View<tacho_type*, device_type> device_value_type_array;
83 typedef Kokkos::View<size_type*, host_device_type> host_size_type_array;
84 typedef Kokkos::View<ordinal_type*, host_device_type> host_ordinal_type_array;
96 Teuchos::RCP<Vector> X,
97 Teuchos::RCP<const Vector> B);
148 int
solve_impl(const Teuchos::Ptr<MultiVecAdapter<Vector> > X,
149 const Teuchos::Ptr<const MultiVecAdapter<Vector> > B) const;
160 void setParameters_impl(
161 const Teuchos::RCP<Teuchos::ParameterList> & parameterList );
190 mutable struct TACHOData {
191 typename Tacho::Solver<tacho_type, scheduler_type> solver;
196 int small_problem_threshold_size;
203 typedef typename Tacho::Solver<tacho_type, scheduler_type>::value_type_matrix
204 device_solve_array_t;
207 mutable device_solve_array_t workspace_;
210 mutable device_solve_array_t xValues_;
211 mutable device_solve_array_t bValues_;
214 device_value_type_array device_nzvals_view_;
217 host_size_type_array host_row_ptr_view_;
218 host_ordinal_type_array host_cols_view_;
224 struct solver_traits<TachoSolver> {
225 #ifdef HAVE_TEUCHOS_COMPLEX
226 typedef Meta::make_list6<float,
229 std::complex<double>,
230 Kokkos::complex<float>,
231 Kokkos::complex<double>
234 typedef Meta::make_list2<float,
240 template <
typename Scalar,
typename LocalOrdinal,
typename ExecutionSpace>
241 struct solver_supports_matrix<TachoSolver,
242 KokkosSparse::CrsMatrix<Scalar, LocalOrdinal, ExecutionSpace>> {
243 static const bool value =
true;
248 #endif // AMESOS2_TACHO_DECL_HPP
Amesos2::SolverCore: A templated interface for interaction with third-party direct sparse solvers...
Definition: Amesos2_SolverCore_decl.hpp:71
Amesos2 interface to the Tacho package.
Definition: Amesos2_Tacho_decl.hpp:33
int symbolicFactorization_impl()
Perform symbolic factorization of the matrix using Tacho.
Definition: Amesos2_Tacho_def.hpp:63
Map types to solver-specific data-types and enums.
Definition: Amesos2_TypeMap.hpp:48
bool matrixShapeOK_impl() const
Determines whether the shape of the matrix is OK for this solver.
Definition: Amesos2_Tacho_def.hpp:192
int numericFactorization_impl()
Tacho specific numeric factorization.
Definition: Amesos2_Tacho_def.hpp:94
int preOrdering_impl()
Performs pre-ordering on the matrix to increase efficiency.
Definition: Amesos2_Tacho_def.hpp:56
std::string name() const override
Return the name of this solver.
Definition: Amesos2_SolverCore_def.hpp:725
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters_impl() const
Definition: Amesos2_Tacho_def.hpp:234
std::string description() const override
Returns a short description of this Solver.
Definition: Amesos2_Tacho_def.hpp:47
Interface to Amesos2 solver objects.
Definition: Amesos2_Solver_decl.hpp:44
Passes functions to TPL functions based on type.
Definition: Amesos2_FunctionMap.hpp:42
int solve_impl(const Teuchos::Ptr< MultiVecAdapter< Vector > > X, const Teuchos::Ptr< const MultiVecAdapter< Vector > > B) const
Tacho specific solve.
Definition: Amesos2_Tacho_def.hpp:112
Provides access to interesting solver traits.
bool loadA_impl(EPhase current_phase)
Reads matrix data into internal structures.
Definition: Amesos2_Tacho_def.hpp:265
bool do_optimization() const
can we optimize size_type and ordinal_type for straight pass through
Definition: Amesos2_Tacho_def.hpp:259