INLA_DIST
Loading...
Searching...
No Matches
EigenSolver.h
1#ifndef EIGEN_CHOL_SOLVER_H
2#define EIGEN_SOLVER_H
3
4#include <stdio.h>
5#include <stdlib.h>
6#include <math.h>
7#include <iomanip>
8
9#include <fstream>
10#include <iostream>
11
12#include <Eigen/Core>
13#include <Eigen/Dense>
14#include <Eigen/SparseCore>
15#include <Eigen/SparseCholesky>
16#include <Eigen/CholmodSupport>
17
18#include "Solver.h"
19
20//#define PRINT_PAR
21//#define PRINT_OMP
22
23// get gflops manually from pardiso output
24//#define MEAS_GFLOPS
25
26typedef Eigen::VectorXd Vect;
27typedef Eigen::SparseMatrix<double> SpMat;
28
29using namespace Eigen;
30
36class EigenSolver : public Solver{
37
38private:
39
40
43 int init = 0;
44
45 /* matrix size */
46 int n;
47 long unsigned int nnz;
49 SpMat Q;
51 int* ia;
52 int* ja;
53 double* a;
55 double* b;
56 double* x;
58 SimplicialLLT<SpMat> solverEigenQ;
59
60
61public:
66
67
68 /* ======================================================================== */
76 void symbolic_factorization(SpMat& Q, int& init);
77
78
84 void factorize(SpMat& Q, double& log_det, double& t_priorLatChol);
85
86 void factorize_w_constr(SpMat& Q, const MatrixXd& D, double& log_det, MatrixXd& V);
87
95 void factorize_solve(SpMat& Q, Vect& rhs, Vect& sol, double &log_det, double& t_condLatChol, double& t_condLatSolve);
96
97 void factorize_solve_w_constr(SpMat& Q, Vect& rhs, const MatrixXd& Dxy, double &log_det, Vect& sol, MatrixXd& V);
98
104 void selected_inversion(SpMat& Q, Vect& inv_diag);
105
106 void selected_inversion_w_constr(SpMat& Q, const MatrixXd& D, Vect& inv_diag, MatrixXd& V);
107
108
115 void compute_full_inverse(MatrixXd& H, MatrixXd& C);
116
117
122
123}; // end class
124
125
126#endif
127
creates solver class using pardiso for factorising, solving and selectively inverting linear system.
Definition EigenSolver.h:36
EigenSolver(int &MPI_rank)
constructor. initialises parameters, check pardiso license.
Definition EigenSolver.cpp:4
double * a
Definition EigenSolver.h:53
SpMat Q
Definition EigenSolver.h:49
int n
Definition EigenSolver.h:46
void factorize_solve(SpMat &Q, Vect &rhs, Vect &sol, double &log_det, double &t_condLatChol, double &t_condLatSolve)
factorises and solves matrix in one call (to reuse pardiso objects)
void symbolic_factorization(SpMat &Q, int &init)
performs the symbolic factorisation.
int * ja
Definition EigenSolver.h:52
double * x
Definition EigenSolver.h:56
~EigenSolver()
class destructor. Frees memory allocated by pardiso.
void selected_inversion(SpMat &Q, Vect &inv_diag)
selected inversion of the diagonal elements of Q.
int * ia
Definition EigenSolver.h:51
long unsigned int nnz
Definition EigenSolver.h:47
void compute_full_inverse(MatrixXd &H, MatrixXd &C)
inversion of the entire matrix (only meant for small matrices) by means of using identity right-hand ...
void factorize(SpMat &Q, double &log_det, double &t_priorLatChol)
numerical factorisation.
Definition EigenSolver.cpp:22
int MPI_rank
Definition EigenSolver.h:41
double * b
Definition EigenSolver.h:55
abstract base solver class to enable to be able two switch between solvers (current options: PARDISO ...
Definition Solver.h:27
double log_det
Definition Solver.h:47
Vect rhs
Definition Solver.h:50
Vect sol
Definition Solver.h:51