g2o
Loading...
Searching...
No Matches
cholmod_wrapper.h
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above copyright
12// notice, this list of conditions and the following disclaimer in the
13// documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef G2O_CHOLMOD_WRAPPER_H
28#define G2O_CHOLMOD_WRAPPER_H
29
30#include <cstddef>
31#include <memory>
32
33namespace g2o {
34namespace cholmod {
35
36class Cholmod {
37 public:
38 Cholmod();
40
42 struct SparseView {
43 size_t& nrow;
44 size_t& ncol;
45 size_t& nzmax;
46 int*& p;
47 int*& i;
48 double*& x;
50 SparseView(size_t& nrow, size_t& ncol, size_t& nzmax, int*& p, int*& i,
51 double*& x, size_t& columnsAllocated)
52 : nrow(nrow),
53 ncol(ncol),
54 nzmax(nzmax),
55 p(p),
56 i(i),
57 x(x),
59 };
60
62 struct FactorView {
63 size_t& n;
64 int*& p;
65 int*& i;
66 double*& x;
67 int*& perm;
68 FactorView(size_t& n, int*& p, int*& i, double*& x, int*& perm)
69 : n(n), p(p), i(i), x(x), perm(perm) {}
70 };
71
72 bool factorize();
73 bool hasFactor() const;
74 void freeFactor();
75 bool simplifyFactor();
76
78 bool amd(SparseView& sparseView, int* result);
79
80 int choleskyNz() const;
81
82 void solve(double* x, double* b) const;
83
84 bool analyze();
85 bool analyze_p(int* permutation);
86
87 SparseView sparseView();
88 FactorView factor();
89
90 private:
91 class Impl;
92 std::unique_ptr<Impl> pImpl;
93};
94
95} // namespace cholmod
96} // namespace g2o
97#endif
bool amd(SparseView &sparseView, int *result)
compute AMD ordering on the given SparseView, store into result
bool analyze_p(int *permutation)
void solve(double *x, double *b) const
std::unique_ptr< Impl > pImpl
View onto the cholesky factor.
FactorView(size_t &n, int *&p, int *&i, double *&x, int *&perm)
View onto the sparse matrix structure of Cholmod using CCS storage.
SparseView(size_t &nrow, size_t &ncol, size_t &nzmax, int *&p, int *&i, double *&x, size_t &columnsAllocated)