Jet  v1.3.3
fdm_mgpcg_solver3.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_FDM_MGPCG_SOLVER3_H_
8 #define INCLUDE_JET_FDM_MGPCG_SOLVER3_H_
9 
10 #include <jet/fdm_mg_solver3.h>
11 
12 namespace jet {
13 
23 class FdmMgpcgSolver3 final : public FdmMgSolver3 {
24  public:
35  FdmMgpcgSolver3(unsigned int numberOfCgIter, size_t maxNumberOfLevels,
36  unsigned int numberOfRestrictionIter = 5,
37  unsigned int numberOfCorrectionIter = 5,
38  unsigned int numberOfCoarsestIter = 20,
39  unsigned int numberOfFinalIter = 20,
40  double maxTolerance = 1e-9, double sorFactor = 1.5,
41  bool useRedBlackOrdering = false);
42 
44  bool solve(FdmMgLinearSystem3* system) override;
45 
47  unsigned int maxNumberOfIterations() const;
48 
50  unsigned int lastNumberOfIterations() const;
51 
53  double tolerance() const;
54 
56  double lastResidual() const;
57 
58  private:
59  struct Preconditioner final {
60  FdmMgLinearSystem3* system;
61  MgParameters<FdmBlas3> mgParams;
62 
63  void build(FdmMgLinearSystem3* system, MgParameters<FdmBlas3> mgParams);
64 
65  void solve(const FdmVector3& b, FdmVector3* x);
66  };
67 
68  unsigned int _maxNumberOfIterations;
69  unsigned int _lastNumberOfIterations;
70  double _tolerance;
71  double _lastResidualNorm;
72 
73  FdmVector3 _r;
74  FdmVector3 _d;
75  FdmVector3 _q;
76  FdmVector3 _s;
77  Preconditioner _precond;
78 };
79 
81 typedef std::shared_ptr<FdmMgpcgSolver3> FdmMgpcgSolver3Ptr;
82 
83 } // namespace jet
84 
85 #endif // INCLUDE_JET_FDM_MGPCG_SOLVER3_H_
jet::FdmMgLinearSystem3
Multigrid-syle 3-D linear system.
Definition: fdm_mg_linear_system3.h:23
jet::FdmMgSolver3::useRedBlackOrdering
bool useRedBlackOrdering() const
Returns true if red-black ordering is enabled.
jet::FdmMgSolver3::sorFactor
double sorFactor() const
Returns the SOR (Successive Over Relaxation) factor.
jet
Definition: advection_solver2.h:18
jet::FdmMgpcgSolver3::tolerance
double tolerance() const
Returns the max residual tolerance for the Jacobi method.
fdm_mg_solver3.h
jet::FdmMgpcgSolver3::lastResidual
double lastResidual() const
Returns the last residual after the Jacobi iterations.
jet::FdmMgSolver3
3-D finite difference-type linear system solver using Multigrid.
Definition: fdm_mg_solver3.h:17
jet::FdmMgpcgSolver3::maxNumberOfIterations
unsigned int maxNumberOfIterations() const
Returns the max number of Jacobi iterations.
jet::FdmMgpcgSolver3
3-D finite difference-type linear system solver using Multigrid Preconditioned conjugate gradient (MG...
Definition: fdm_mgpcg_solver3.h:23
jet::FdmMgpcgSolver3::lastNumberOfIterations
unsigned int lastNumberOfIterations() const
Returns the last number of Jacobi iterations the solver made.
jet::FdmMgpcgSolver3::solve
bool solve(FdmMgLinearSystem3 *system) override
Solves the given linear system.
jet::MgParameters
Multigrid input parameter set.
Definition: mg.h:59
jet::FdmMgpcgSolver3Ptr
std::shared_ptr< FdmMgpcgSolver3 > FdmMgpcgSolver3Ptr
Shared pointer type for the FdmMgpcgSolver3.
Definition: fdm_mgpcg_solver3.h:81
jet::Array< T, 3 >
3-D array class.
Definition: array3.h:43
jet::FdmMgpcgSolver3::FdmMgpcgSolver3
FdmMgpcgSolver3(unsigned int numberOfCgIter, size_t maxNumberOfLevels, unsigned int numberOfRestrictionIter=5, unsigned int numberOfCorrectionIter=5, unsigned int numberOfCoarsestIter=20, unsigned int numberOfFinalIter=20, double maxTolerance=1e-9, double sorFactor=1.5, bool useRedBlackOrdering=false)