Ginkgo Generated from branch based on master. Ginkgo version 1.7.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
amd.hpp
1/*******************************<GINKGO LICENSE>******************************
2Copyright (c) 2017-2023, the Ginkgo authors
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions
7are met:
8
91. Redistributions of source code must retain the above copyright
10notice, this list of conditions and the following disclaimer.
11
122. Redistributions in binary form must reproduce the above copyright
13notice, this list of conditions and the following disclaimer in the
14documentation and/or other materials provided with the distribution.
15
163. Neither the name of the copyright holder nor the names of its
17contributors may be used to endorse or promote products derived from
18this software without specific prior written permission.
19
20THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31******************************<GINKGO LICENSE>*******************************/
32
33#ifndef GKO_PUBLIC_CORE_REORDER_AMD_HPP_
34#define GKO_PUBLIC_CORE_REORDER_AMD_HPP_
35
36
37#include <memory>
38
39
40#include <ginkgo/core/base/abstract_factory.hpp>
41#include <ginkgo/core/base/lin_op.hpp>
42#include <ginkgo/core/base/polymorphic_object.hpp>
43#include <ginkgo/core/base/types.hpp>
44#include <ginkgo/core/matrix/permutation.hpp>
45
46
47namespace gko {
48namespace experimental {
54namespace reorder {
55
56
64template <typename IndexType = int32>
65class Amd : public EnablePolymorphicObject<Amd<IndexType>, LinOpFactory>,
66 public EnablePolymorphicAssignment<Amd<IndexType>> {
67public:
68 struct parameters_type;
69 friend class EnablePolymorphicObject<Amd<IndexType>, LinOpFactory>;
70 friend class enable_parameters_type<parameters_type, Amd<IndexType>>;
71
72 using index_type = IndexType;
74
76 : public enable_parameters_type<parameters_type, Amd<IndexType>> {
82
89 };
90
96 const parameters_type& get_parameters() { return parameters_; }
97
105 std::unique_ptr<permutation_type> generate(
106 std::shared_ptr<const LinOp> system_matrix) const;
107
109 static parameters_type build() { return {}; }
110
111protected:
112 explicit Amd(std::shared_ptr<const Executor> exec,
113 const parameters_type& params = {});
114
115 std::unique_ptr<LinOp> generate_impl(
116 std::shared_ptr<const LinOp> system_matrix) const override;
117
118 parameters_type parameters_;
119};
120
121
122} // namespace reorder
123} // namespace experimental
124} // namespace gko
125
126
127#endif // GKO_PUBLIC_CORE_REORDER_AMD_HPP_
This mixin is used to enable a default PolymorphicObject::copy_from() implementation for objects that...
Definition polymorphic_object.hpp:752
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition polymorphic_object.hpp:691
A LinOpFactory represents a higher order mapping which transforms one linear operator into another.
Definition lin_op.hpp:414
The enable_parameters_type mixin is used to create a base implementation of the factory parameters st...
Definition abstract_factory.hpp:239
Computes a Approximate Minimum Degree (AMD) reordering of an input matrix.
Definition amd.hpp:66
static parameters_type build()
Creates a new parameter_type to set up the factory.
Definition amd.hpp:109
std::unique_ptr< permutation_type > generate(std::shared_ptr< const LinOp > system_matrix) const
const parameters_type & get_parameters()
Returns the parameters used to construct the factory.
Definition amd.hpp:96
Permutation is a matrix format that represents a permutation matrix, i.e.
Definition permutation.hpp:142
#define GKO_FACTORY_PARAMETER_SCALAR(_name, _default)
Creates a scalar factory parameter in the factory parameters structure.
Definition abstract_factory.hpp:473
The Ginkgo namespace.
Definition abstract_factory.hpp:48
constexpr T one()
Returns the multiplicative identity for T.
Definition math.hpp:803
bool skip_sorting
If set to false, sorts the input matrix before computing the AMD reordering.
Definition amd.hpp:88
bool skip_symmetrize
If set to false, computes the AMD reordering on A + A^T, otherwise assumes that A is symmetric and us...
Definition amd.hpp:81