ITK  4.12.0
Insight Segmentation and Registration Toolkit
itkFEMSolverHyperbolic.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Insight Segmentation & Registration Toolkit
4  Module: $RCSfile: itkFEMSolverHyperbolic.h,v $
5  Language: C++
6  Date: $Date: 2009-01-30 21:53:03 $
7  Version: $Revision: 1.4 $
8 
9  Copyright (c) Insight Software Consortium. All rights reserved.
10  See ITKCopyright.txt or https://www.itk.org/HTML/Copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 
18 #ifndef itkFEMSolverHyperbolic_h
19 #define itkFEMSolverHyperbolic_h
20 
21 #include "itkFEMSolver.h"
22 
23 namespace itk {
24 namespace fem {
25 
34 template <unsigned int TDimension = 3>
35 class ITK_TEMPLATE_EXPORT SolverHyperbolic : public Solver<TDimension>
36 {
37 public:
42 
44  itkNewMacro(Self);
45 
48 
49  typedef Element::Float Float;
50 
52  itkSetMacro(Gamma, Float);
53  itkGetMacro(Gamma, Float);
55 
57  itkSetMacro(Beta, Float);
58  itkGetMacro(Beta, Float);
60 
62  itkSetMacro(NumberOfIterations, unsigned int);
63  itkGetMacro(NumberOfIterations, unsigned int);
65 
67  virtual Float GetTimeStep(void) const ITK_OVERRIDE
68  {
69  return this->m_TimeStep;
70  }
71 
77  virtual void SetTimeStep(Float dt) ITK_OVERRIDE
78  {
79  this->m_TimeStep = dt;
80  }
81 
82 protected:
84  virtual ~SolverHyperbolic() { }
85  void PrintSelf(std::ostream& os, Indent indent) const ITK_OVERRIDE;
86 
88  virtual void InitializeLinearSystemWrapper(void) ITK_OVERRIDE;
89 
94  virtual void AssembleElementMatrix(Element::Pointer e) ITK_OVERRIDE;
95 
97  virtual void InitializeMatrixForAssembly(unsigned int N) ITK_OVERRIDE;
98 
103  virtual void FinalizeMatrixAfterAssembly( void ) ITK_OVERRIDE;
104 
105 
107  void GenerateData() ITK_OVERRIDE;
108 
111  virtual void RunSolver(void) ITK_OVERRIDE;
112 
114  void Solve();
115 
117  enum { matrix_K=1, matrix_M=2, matrix_C=3, matrix_tmp=4 };
118 
120  enum { solution_d=0, solution_v=1, solution_a=2};
121  enum { vector_dhat=2, vector_vhat=3, vector_ahat=4, vector_tmp=5 };
122 
126  unsigned int m_NumberOfIterations;
127 
128 private:
129  ITK_DISALLOW_COPY_AND_ASSIGN(SolverHyperbolic);
130 };
131 
132 } // end namespace fem
133 } // end namespace itk
134 
135 #ifndef ITK_MANUAL_INSTANTIATION
136 #include "itkFEMSolverHyperbolic.hxx"
137 #endif
138 
139 
140 #endif // #ifndef itkFEMSolverHyperbolic_h
virtual void PrintSelf(std::ostream &os, Indent indent) const override
Light weight base class for most itk classes.
SmartPointer< const Self > ConstPointer
FEM solver used to generate a solution for a FE formulation.
Definition: itkFEMSolver.h:73
Abstract base element class.
Control indentation during Print() invocation.
Definition: itkIndent.h:49
virtual Float GetTimeStep(void) const override
Solver class suitable for hyperbolic problems.M*ddu + C*du + K*u=F.
virtual void SetTimeStep(Float dt) override
static ITK_CONSTEXPR_VAR double e
The base of the natural logarithm or Euler&#39;s number
Definition: itkMath.h:56