/usr/include/dolfin/la/CholmodCholeskySolver.h is in libdolfin1.0-dev 1.0.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | // Copyright (C) 2008 Dag Lindbo and Garth N. Wells
//
// This file is part of DOLFIN.
//
// DOLFIN is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DOLFIN is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
//
// Modified by Anders Logg 2011
//
// First added: 2008-08-15
// Last changed: 2011-11-11
#ifndef __CHOLMOD_CHOLESKY_SOLVER_H
#define __CHOLMOD_CHOLESKY_SOLVER_H
#include <boost/shared_ptr.hpp>
#include "GenericLinearSolver.h"
#ifdef HAS_CHOLMOD
extern "C"
{
#include <cholmod.h>
}
#endif
namespace dolfin
{
/// Forward declarations
class GenericVector;
class GenericMatrix;
/// This class implements the direct solution (Cholesky
/// factorization) of linear systems of the form Ax = b. Sparse
/// matrices are solved using CHOLMOD
/// http://www.cise.ufl.edu/research/sparse/cholmod/ if installed.
class CholmodCholeskySolver : public GenericLinearSolver
{
public:
/// Constructor
CholmodCholeskySolver();
/// Constructor
CholmodCholeskySolver(boost::shared_ptr<const GenericMatrix> A);
/// Destructor
~CholmodCholeskySolver();
/// Solve the operator (matrix)
void set_operator(const boost::shared_ptr<const GenericMatrix> A)
{
dolfin_error("CholmodCholeskySolver.h",
"set operator for CHOLMOD Cholesky solver",
"Not implemented");
}
/// Solve linear system Ax = b for a sparse matrix using CHOLMOD
virtual uint solve(const GenericMatrix& A, GenericVector& x, const GenericVector& b);
/// Cholesky-factor sparse matrix A if CHOLMOD is installed
virtual uint factorize(const GenericMatrix& A);
/// Solve factorized system (CHOLMOD).
virtual uint factorized_solve(GenericVector& x, const GenericVector& b);
/// Default parameter values
static Parameters default_parameters();
private:
// Operator (the matrix)
boost::shared_ptr<const GenericMatrix> _A;
#ifdef HAS_CHOLMOD
// Data for Cholesky factorization of sparse ublas matrix (cholmod only)
class Cholmod
{
public:
Cholmod();
~Cholmod();
/// Clear data
void clear();
/// Initialise with matrix
void init(long int* Ap, long int* Ai, double* Ax, uint M, uint nz);
/// Factorize
void factorize();
/// Factorized solve
void factorized_solve(double*x, const double* b);
uint N;
bool factorized;
private:
/// Compute residual: b-Ax
cholmod_dense* residual(cholmod_dense* x, cholmod_dense* b);
/// Compute residual norm
double residual_norm(cholmod_dense* r, cholmod_dense* x,
cholmod_dense* b);
/// Perform one refinement
void refine_once(cholmod_dense* x, cholmod_dense* r);
/// Check status flag returned by an CHOLMOD function
void check_status(std::string function);
// CHOLMOD data
cholmod_sparse* A_chol;
cholmod_factor* L_chol;
cholmod_common c;
};
Cholmod cholmod;
#endif
};
}
#endif
|