Ifpack2 Templated Preconditioning Package Version 1.0
Loading...
Searching...
No Matches
Ifpack2_BlockHelper_ETI.hpp
1// @HEADER
2// *****************************************************************************
3// Ifpack2: Templated Object-Oriented Algebraic Preconditioner Package
4//
5// Copyright 2009 NTESS and the Ifpack2 contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef IFPACK2_BLOCKHELPER_ETI_HPP
11#define IFPACK2_BLOCKHELPER_ETI_HPP
12
13#include <complex>
14
15namespace Ifpack2::BlockTriDiContainerDetails {
16
20
21// The BlockTriDiContainer implementation supports only the four
22// basic scalar types (those for which ImplTag<Scalar>::type == ImplSimdTag).
23//
24// BTDC and related classes have specializations with ImplSimdTag that actually
25// have the implementation, and specializations with ImplNotAvailTag where all
26// the methods do nothing. This way, ETI can be performed even when
27// ImplTag<Scalar>::type == ImplNotAvailTag to avoid needing special ETI logic in Stokhos.
28
30struct ImplSimdTag {};
31struct ImplSacadoTag {};
32
33template <typename T>
34struct ImplTag {
35 typedef ImplNotAvailTag type;
36};
37template <>
38struct ImplTag<float> {
39 typedef ImplSimdTag type;
40};
41template <>
42struct ImplTag<double> {
43 typedef ImplSimdTag type;
44};
45template <>
46struct ImplTag<std::complex<float> > {
47 typedef ImplSimdTag type;
48};
49template <>
50struct ImplTag<std::complex<double> > {
51 typedef ImplSimdTag type;
52};
53
55template <typename MatrixType>
56struct ImplObject;
57} // namespace Ifpack2::BlockTriDiContainerDetails
58
59#endif
Definition Ifpack2_BlockHelper_ETI.hpp:29