Line data Source code
1 : // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 : // SPDX-License-Identifier: Apache-2.0
3 :
4 : #ifndef PALACE_LINALG_STRUMPACK_HPP
5 : #define PALACE_LINALG_STRUMPACK_HPP
6 :
7 : #include <mfem.hpp>
8 :
9 : #if defined(MFEM_USE_STRUMPACK)
10 :
11 : #include "linalg/operator.hpp"
12 : #include "utils/iodata.hpp"
13 :
14 : namespace palace
15 : {
16 :
17 : //
18 : // A wrapper for the STRUMPACK direct solver package.
19 : //
20 : template <typename StrumpackSolverType>
21 : class StrumpackSolverBase : public StrumpackSolverType
22 : {
23 : private:
24 : MPI_Comm comm;
25 :
26 : public:
27 : StrumpackSolverBase(MPI_Comm comm, SymbolicFactorization reorder,
28 : SparseCompression compression, double lr_tol, int butterfly_l,
29 : int lossy_prec, int print);
30 :
31 0 : StrumpackSolverBase(const IoData &iodata, MPI_Comm comm, int print)
32 0 : : StrumpackSolverBase(comm, iodata.solver.linear.sym_factorization,
33 0 : iodata.solver.linear.strumpack_compression_type,
34 0 : iodata.solver.linear.strumpack_lr_tol,
35 0 : iodata.solver.linear.strumpack_butterfly_l,
36 0 : iodata.solver.linear.strumpack_lossy_precision, print)
37 : {
38 0 : }
39 :
40 : void SetOperator(const Operator &op) override;
41 : };
42 :
43 : using StrumpackSolver = StrumpackSolverBase<mfem::STRUMPACKSolver>;
44 :
45 : using StrumpackMixedPrecisionSolver =
46 : StrumpackSolverBase<mfem::STRUMPACKMixedPrecisionSolver>;
47 :
48 : } // namespace palace
49 :
50 : #endif
51 :
52 : #endif // PALACE_LINALG_STRUMPACK_HPP
|