GEOSX
HypreSolver.hpp
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------------------------------
3  * SPDX-License-Identifier: LGPL-2.1-only
4  *
5  * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
6  * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
7  * Copyright (c) 2018-2020 TotalEnergies
8  * Copyright (c) 2019- GEOSX Contributors
9  * All rights reserved
10  *
11  * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
12  * ------------------------------------------------------------------------------------------------------------
13  */
14 
19 #ifndef GEOS_LINEARALGEBRA_INTERFACES_HYPRESOLVER_HPP_
20 #define GEOS_LINEARALGEBRA_INTERFACES_HYPRESOLVER_HPP_
21 
25 
26 namespace geos
27 {
28 
29 class DofManager;
30 
32 struct HypreSolverWrapper;
33 
37 class HypreSolver final : public LinearSolverBase< HypreInterface >
38 {
39 public:
40 
43 
49 
53  virtual ~HypreSolver() override;
54 
58  virtual void setup( HypreMatrix const & mat ) override;
59 
63  virtual void apply( HypreVector const & src,
64  HypreVector & dst ) const override;
65 
69  virtual void solve( HypreVector const & rhs,
70  HypreVector & sol ) const override;
71 
75  virtual void clear() override;
76 
77 private:
78 
85  int doSolve( HypreVector const & rhs, HypreVector & sol ) const;
86 
87  using Base::m_params;
88  using Base::m_result;
89 
91  HyprePreconditioner m_precond;
92 
94  std::unique_ptr< HypreSolverWrapper > m_solver;
95 
97  real64 m_componentFilterTime;
98  real64 m_makeRestrictorTime;
99  real64 m_computeAuuTime;
100 };
101 
102 } // end geosx namespace
103 
104 #endif /* HYPRESOLVER_HPP_ */
Wrapper class for hypre's ParCSRMatrix.
Definition: HypreMatrix.hpp:55
Wrapper around hypre-based preconditioners.
This class creates and provides basic support for Hypre solvers.
Definition: HypreSolver.hpp:38
virtual ~HypreSolver() override
Destructor.
HypreSolver(LinearSolverParameters parameters)
Solver constructor, with parameter list reference.
virtual void solve(HypreVector const &rhs, HypreVector &sol) const override
Solve preconditioned system.
virtual void setup(HypreMatrix const &mat) override
Compute the preconditioner from a matrix.
virtual void clear() override
Clean up the preconditioner setup.
virtual void apply(HypreVector const &src, HypreVector &dst) const override
Apply operator to a vector, dst = this(src).
Wrapper class for hypre's ParVector.
Definition: HypreVector.hpp:50
Simple interface for linear solvers that allows to extract solution results.
LinearSolverResult m_result
Result of most recent solve (status, timings)
LinearSolverParameters m_params
Parameters for the solver.
LinearSolverParameters const & parameters() const
double real64
64-bit floating point type.
Definition: DataTypes.hpp:139
Set of parameters for a linear solver or preconditioner.