GEOSX
HyprePreconditioner.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_HYPREPRECONDITIONER_HPP_
20 #define GEOS_LINEARALGEBRA_INTERFACES_HYPREPRECONDITIONER_HPP_
21 
22 #include "common/PreconditionerBase.hpp"
25 
26 #include <memory>
27 
28 namespace geos
29 {
30 
32 struct HyprePrecWrapper;
33 
35 struct HypreMGRData;
36 
38 struct HypreNullSpace;
39 
43 class HyprePreconditioner final : public PreconditionerBase< HypreInterface >
44 {
45 public:
46 
49 
51  using Base::setup;
52 
58 
65  arrayView1d< HypreVector > const & nearNullKernel );
66 
70  virtual ~HyprePreconditioner() override;
71 
76  virtual void setup( Matrix const & mat ) override;
77 
85  virtual void apply( Vector const & src, Vector & dst ) const override;
86 
87  virtual void clear() override;
88 
95  HyprePrecWrapper const & unwrapped() const;
96 
101  {
102  return m_componentFilterTime;
103  }
104 
107  {
108  return m_makeRestrictorTime;
109  }
110 
113  {
114  return m_computeAuuTime;
115  }
116 
117 private:
118 
123  void create( DofManager const * const dofManager );
124 
130  HypreMatrix const & setupPreconditioningMatrix( HypreMatrix const & mat );
131 
133  LinearSolverParameters m_params;
134 
136  HypreMatrix m_precondMatrix;
137 
139  std::unique_ptr< HyprePrecWrapper > m_precond;
140 
142  std::unique_ptr< HypreMGRData > m_mgrData;
143 
145  std::unique_ptr< HypreNullSpace > m_nullSpace;
146 
148  real64 m_componentFilterTime = 0.0;
149 
151  real64 m_makeRestrictorTime = 0.0;
152 
154  real64 m_computeAuuTime = 0.0;
155 };
156 
157 }
158 
159 #endif //GEOS_LINEARALGEBRA_INTERFACES_HYPREPRECONDITIONER_HPP_
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
Definition: DofManager.hpp:43
Wrapper class for hypre's ParCSRMatrix.
Definition: HypreMatrix.hpp:55
Wrapper around hypre-based preconditioners.
virtual ~HyprePreconditioner() override
Destructor.
virtual void clear() override
Clean up the preconditioner setup.
HyprePrecWrapper const & unwrapped() const
Access the underlying implementation.
HyprePreconditioner(LinearSolverParameters params)
Constructor.
HyprePreconditioner(LinearSolverParameters params, arrayView1d< HypreVector > const &nearNullKernel)
Constructor.
virtual void apply(Vector const &src, Vector &dst) const override
Apply operator to a vector.
virtual void setup(Matrix const &mat) override
Compute the preconditioner from a matrix.
LAI::ParallelVector Vector
Alias for template parameter.
Common interface for preconditioning operators.
virtual void setup(Matrix const &mat)
Compute the preconditioner from a matrix.
typename LAI::ParallelMatrix Matrix
Alias for matrix type.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:220
double real64
64-bit floating point type.
Definition: DataTypes.hpp:139
Container for hypre preconditioner function pointers.
Definition: HypreUtils.hpp:53
Set of parameters for a linear solver or preconditioner.