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
cholesky.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#include <memory>
34
35
36#include <ginkgo/core/base/composition.hpp>
37#include <ginkgo/core/base/lin_op.hpp>
38#include <ginkgo/core/base/polymorphic_object.hpp>
39#include <ginkgo/core/factorization/factorization.hpp>
40#include <ginkgo/core/matrix/csr.hpp>
41#include <ginkgo/core/matrix/sparsity_csr.hpp>
42
43
44namespace gko {
45namespace experimental {
46namespace factorization {
47
48
59template <typename ValueType, typename IndexType>
61 : public EnablePolymorphicObject<Cholesky<ValueType, IndexType>,
62 LinOpFactory>,
63 public EnablePolymorphicAssignment<Cholesky<ValueType, IndexType>> {
64public:
65 struct parameters_type;
68
69 using value_type = ValueType;
70 using index_type = IndexType;
74
76 : public enable_parameters_type<parameters_type, Cholesky> {
83 std::shared_ptr<const sparsity_pattern_type>
85
97 };
98
104 const parameters_type& get_parameters() { return parameters_; }
105
113 std::unique_ptr<factorization_type> generate(
114 std::shared_ptr<const LinOp> system_matrix) const;
115
117 static parameters_type build() { return {}; }
118
119protected:
120 explicit Cholesky(std::shared_ptr<const Executor> exec,
121 const parameters_type& params = {});
122
123 std::unique_ptr<LinOp> generate_impl(
124 std::shared_ptr<const LinOp> system_matrix) const override;
125
126private:
127 parameters_type parameters_;
128};
129
130
131} // namespace factorization
132} // namespace experimental
133} // namespace gko
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 Cholesky factorization of a symmetric, positive-definite sparse matrix.
Definition cholesky.hpp:63
static parameters_type build()
Creates a new parameter_type to set up the factory.
Definition cholesky.hpp:117
const parameters_type & get_parameters()
Returns the parameters used to construct the factory.
Definition cholesky.hpp:104
std::unique_ptr< factorization_type > generate(std::shared_ptr< const LinOp > system_matrix) const
Represents a generic factorization consisting of two triangular factors (upper and lower) and an opti...
Definition factorization.hpp:104
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition csr.hpp:146
SparsityCsr is a matrix format which stores only the sparsity pattern of a sparse matrix by compressi...
Definition sparsity_csr.hpp:87
#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
std::shared_ptr< const sparsity_pattern_type > symbolic_factorization
The combined sparsity pattern L + L^H of the factors L and L^H.
Definition cholesky.hpp:84
bool skip_sorting
The system_matrix, which will be given to this factory, must be sorted (first by row,...
Definition cholesky.hpp:96