Jet  v1.3.3
fdm_mgpcg_solver2.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_SOLVER2_H_
8 #define INCLUDE_JET_FDM_MGPCG_SOLVER2_H_
9 
10 #include <jet/fdm_mg_solver2.h>
11 
12 namespace jet {
13 
23 class FdmMgpcgSolver2 final : public FdmMgSolver2 {
24  public:
35  FdmMgpcgSolver2(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(FdmMgLinearSystem2* 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  FdmMgLinearSystem2* system;
61  MgParameters<FdmBlas2> mgParams;
62 
63  void build(FdmMgLinearSystem2* system, MgParameters<FdmBlas2> mgParams);
64 
65  void solve(const FdmVector2& b, FdmVector2* x);
66  };
67 
68  unsigned int _maxNumberOfIterations;
69  unsigned int _lastNumberOfIterations;
70  double _tolerance;
71  double _lastResidualNorm;
72 
73  FdmVector2 _r;
74  FdmVector2 _d;
75  FdmVector2 _q;
76  FdmVector2 _s;
77  Preconditioner _precond;
78 };
79 
81 typedef std::shared_ptr<FdmMgpcgSolver2> FdmMgpcgSolver2Ptr;
82 
83 } // namespace jet
84 
85 #endif // INCLUDE_JET_FDM_MGPCG_SOLVER2_H_
jet::FdmMgSolver2::useRedBlackOrdering
bool useRedBlackOrdering() const
Returns true if red-black ordering is enabled.
jet::FdmMgLinearSystem2
Multigrid-syle 2-D linear system.
Definition: fdm_mg_linear_system2.h:23
jet::FdmMgpcgSolver2::maxNumberOfIterations
unsigned int maxNumberOfIterations() const
Returns the max number of Jacobi iterations.
jet::FdmMgpcgSolver2::lastNumberOfIterations
unsigned int lastNumberOfIterations() const
Returns the last number of Jacobi iterations the solver made.
fdm_mg_solver2.h
jet::FdmMgpcgSolver2::FdmMgpcgSolver2
FdmMgpcgSolver2(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)
jet::Array< T, 2 >
2-D array class.
Definition: array2.h:42
jet
Definition: advection_solver2.h:18
jet::FdmMgpcgSolver2Ptr
std::shared_ptr< FdmMgpcgSolver2 > FdmMgpcgSolver2Ptr
Shared pointer type for the FdmMgpcgSolver2.
Definition: fdm_mgpcg_solver2.h:81
jet::FdmMgSolver2::sorFactor
double sorFactor() const
Returns the SOR (Successive Over Relaxation) factor.
jet::FdmMgSolver2
2-D finite difference-type linear system solver using Multigrid.
Definition: fdm_mg_solver2.h:17
jet::MgParameters
Multigrid input parameter set.
Definition: mg.h:59
jet::FdmMgpcgSolver2::lastResidual
double lastResidual() const
Returns the last residual after the Jacobi iterations.
jet::FdmMgpcgSolver2::solve
bool solve(FdmMgLinearSystem2 *system) override
Solves the given linear system.
jet::FdmMgpcgSolver2
2-D finite difference-type linear system solver using Multigrid Preconditioned conjugate gradient (MG...
Definition: fdm_mgpcg_solver2.h:23
jet::FdmMgpcgSolver2::tolerance
double tolerance() const
Returns the max residual tolerance for the Jacobi method.