INLA_DIST
Loading...
Searching...
No Matches
PardisoSolver.h
1#ifndef PARDIDSO_SOLVER_H
2#define PARDIDSO_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
16#include "Solver.h"
17
18//#define PRINT_PAR
19//#define PRINT_OMP
20
21// get gflops manually from pardiso output
22//#define MEAS_GFLOPS
23
24typedef Eigen::VectorXd Vect;
25typedef Eigen::SparseMatrix<double> SpMat;
26
27using namespace Eigen;
28
29
30/* PARDISO prototype. */
31extern "C" void pardisoinit (void *, int *, int *, int *, double *, int *);
32extern "C" void pardiso (void *, int *, int *, int *, int *, int *,
33 double *, int *, int *, int *, int *, int *,
34 int *, double *, double *, int *, double *);
35extern "C" void pardiso_chkmatrix (int *, int *, double *, int *, int *, int *);
36extern "C" void pardiso_chkvec (int *, int *, double *, int *);
37extern "C" void pardiso_printstats (int *, int *, double *, int *, int *, int *,
38 double *, int *);
39
40
46class PardisoSolver : public Solver{
47
48private:
49
50
53 /* matrix size */
54 int n;
55 long unsigned int nnz;
57 SpMat Q;
59 int* ia;
60 int* ja;
61 double* a;
63 double* b;
64 double* x;
66 void *pt[64];
68 /* Pardiso control parameters. */
69 int iparm[64];
70 double dparm[64];
71 int maxfct, mnum, phase, error, msglvl, solver;
72
75 /* Auxiliary variables. */
76 int i;
77 int k;
78 long unsigned int l;
79
80 double ddum;
81 int idum;
83 int mtype;
84 int init;
88public:
93
94
95 /* ======================================================================== */
103 void symbolic_factorization(SpMat& Q, int& init);
104
105
111 void factorize(SpMat& Q, double& log_det, double& t_priorLatChol);
112
113 void factorize_w_constr(SpMat& Q, const MatrixXd& D, double& log_det, MatrixXd& V);
114
122 void factorize_solve(SpMat& Q, Vect& rhs, Vect& sol, double &log_det, double& t_condLatChol, double& t_condLatSolve);
123
124 void factorize_solve_w_constr(SpMat& Q, Vect& rhs, const MatrixXd& Dxy, double &log_det, Vect& sol, MatrixXd& V);
125
131 void selected_inversion(SpMat& Q, Vect& inv_diag);
132
133 void selected_inversion_w_constr(SpMat& Q, const MatrixXd& D, Vect& inv_diag, MatrixXd& V);
134
135
142 void compute_inverse_pardiso(MatrixXd& H, MatrixXd& C);
143
144
149
150}; // end class
151
152
153#endif
154
creates solver class using pardiso for factorising, solving and selectively inverting linear system.
Definition PardisoSolver.h:46
void compute_inverse_pardiso(MatrixXd &H, MatrixXd &C)
inversion of the entire matrix (only meant for small matrices) by means of using identity right-hand ...
Definition PardisoSolver.cpp:1088
int init
Definition PardisoSolver.h:84
long unsigned int nnz
Definition PardisoSolver.h:55
void * pt[64]
Definition PardisoSolver.h:66
~PardisoSolver()
class destructor. Frees memory allocated by pardiso.
Definition PardisoSolver.cpp:1246
int * ia
Definition PardisoSolver.h:59
int * ja
Definition PardisoSolver.h:60
double * x
Definition PardisoSolver.h:64
double * b
Definition PardisoSolver.h:63
void selected_inversion(SpMat &Q, Vect &inv_diag)
selected inversion of the diagonal elements of Q.
Definition PardisoSolver.cpp:799
int idum
Definition PardisoSolver.h:81
PardisoSolver(int &MPI_rank)
constructor. initialises parameters, check pardiso license.
Definition PardisoSolver.cpp:3
SpMat Q
Definition PardisoSolver.h:57
int MPI_rank
Definition PardisoSolver.h:51
void factorize(SpMat &Q, double &log_det, double &t_priorLatChol)
numerical factorisation.
Definition PardisoSolver.cpp:163
int mtype
Definition PardisoSolver.h:83
int num_procs
Definition PardisoSolver.h:73
double ddum
Definition PardisoSolver.h:80
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)
Definition PardisoSolver.cpp:434
int n
Definition PardisoSolver.h:54
double * a
Definition PardisoSolver.h:61
void symbolic_factorization(SpMat &Q, int &init)
performs the symbolic factorisation.
Definition PardisoSolver.cpp:64
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