MFEM v4.7.0
Finite element discretization library
Loading...
Searching...
No Matches
cpardiso.hpp
Go to the documentation of this file.
1// Copyright (c) 2010-2024, Lawrence Livermore National Security, LLC. Produced
2// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
3// LICENSE and NOTICE for details. LLNL-CODE-806117.
4//
5// This file is part of the MFEM library. For more information and source code
6// availability visit https://mfem.org.
7//
8// MFEM is free software; you can redistribute it and/or modify it under the
9// terms of the BSD-3 license. We welcome feedback and contributions, see file
10// CONTRIBUTING.md for details.
11
12#ifndef MFEM_CPARDISO
13#define MFEM_CPARDISO
14
15#include "../config/config.hpp"
16
17#ifdef MFEM_USE_MPI
18#ifdef MFEM_USE_MKL_CPARDISO
19
20#include "mkl_cluster_sparse_solver.h"
21#include "operator.hpp"
22
23namespace mfem
24{
25/**
26 * @brief MKL Parallel Direct Sparse Solver for Clusters
27 *
28 * Interface to MKL CPardiso: the MPI-enabled Intel MKL version of Pardiso
29 */
30class CPardisoSolver : public Solver
31{
32public:
38
39 /**
40 * @brief Construct a new CPardisoSolver object
41 *
42 * @param comm MPI Communicator
43 */
44 CPardisoSolver(MPI_Comm comm);
45
46 /**
47 * @brief Set the Operator object and perform factorization
48 *
49 * @a op needs to be of type HypreParMatrix. The contents are copied and
50 * reordered in an internal CSR structure.
51 *
52 * @param op Operator to use in factorization and solve
53 */
54 void SetOperator(const Operator &op) override;
55
56 /**
57 * @brief Solve
58 *
59 * @param b RHS vector
60 * @param x Solution vector
61 */
62 void Mult(const Vector &b, Vector &x) const override;
63
64 /**
65 * @brief Set the print level for MKL CPardiso
66 *
67 * Prints statistics after the factorization and after each solve.
68 *
69 * @param print_lvl Print level
70 */
71 void SetPrintLevel(int print_lvl);
72
73 /**
74 * @brief Set the matrix type
75 *
76 * The matrix type supported is either real and symmetric or real and
77 * non-symmetric.
78 *
79 * @param mat_type Matrix type
80 */
81 void SetMatrixType(MatType mat_type);
82
84
85private:
86 MPI_Fint comm_;
87
88 // Global number of rows
89 int m;
90
91 // First row index of the global matrix on the local MPI rank
92 int first_row;
93
94 // Local number of nonzero entries
95 int nnz_loc;
96
97 // Local number of rows, obtained from a ParCSR matrix
98 int m_loc;
99
100 // CSR data structure for the copy data of the local CSR matrix
101 int *csr_rowptr = nullptr;
102 real_t *reordered_csr_nzval = nullptr;
103 int *reordered_csr_colind = nullptr;
104
105 // Internal solver memory pointer pt,
106 // 32-bit: int pt[64]
107 // 64-bit: long int pt[64] or void *pt[64] should be OK on both architectures
108 mutable void *pt[64] = {0};
109
110 // Solver control parameters, detailed description can be found in the
111 // constructor.
112 mutable int iparm[64] = {0};
113 mutable int maxfct, mnum, msglvl, phase, error;
114 int mtype;
115 int nrhs;
116
117 // Dummy variables
118 mutable int idum;
119 mutable real_t ddum;
120};
121} // namespace mfem
122
123#endif
124#endif // MFEM_USE_MKL_CPARDISO
125#endif // MFEM_USE_MPI
MKL Parallel Direct Sparse Solver for Clusters.
Definition cpardiso.hpp:31
void Mult(const Vector &b, Vector &x) const override
Solve.
Definition cpardiso.cpp:177
CPardisoSolver(MPI_Comm comm)
Construct a new CPardisoSolver object.
Definition cpardiso.cpp:23
void SetPrintLevel(int print_lvl)
Set the print level for MKL CPardiso.
Definition cpardiso.cpp:202
void SetOperator(const Operator &op) override
Set the Operator object and perform factorization.
Definition cpardiso.cpp:64
void SetMatrixType(MatType mat_type)
Set the matrix type.
Definition cpardiso.cpp:207
Abstract operator.
Definition operator.hpp:25
Base class for solvers.
Definition operator.hpp:683
Vector data type.
Definition vector.hpp:80
real_t b
Definition lissajous.cpp:42
float real_t
Definition config.hpp:43