G+Smo  25.01.0
Geometry + Simulation Modules
 
Loading...
Searching...
No Matches
gsINSSolver.h
Go to the documentation of this file.
1
12#pragma once
13
18
19#include <gsCore/gsDebug.h>
21#include <gsUtils/gsStopwatch.h>
22
23namespace gismo
24{
25
29template<class T, int MatOrder>
30class gsINSSolver: public gsFlowSolverBase<T, MatOrder>
31{
32
33public:
35
36
37protected: // *** Base class members ***
38
39 using Base::m_assemblerPtr;
40 using Base::m_solution;
41 using Base::m_iterationNumber;
42 using Base::m_outFile;
43 using Base::m_fileOutput;
44 using Base::m_dispOutput;
45
46
47public: // *** Constructor/destructor ***
48
51 Base(params)
52 { }
53
54 virtual ~gsINSSolver()
55 { }
56
57
58public: // *** Member functions ***
59
61 virtual void solveStokes();
62
63
64public: // *** Getters/setters ***
65
67 virtual std::string getName() { return "gsINSSolver"; }
68
71 { return dynamic_cast<gsINSAssembler<T, MatOrder>*>(m_assemblerPtr); }
72
73}; // gsINSSolver
74
75// ===================================================================================================================
76
80template<class T = real_t, int MatOrder = RowMajor>
81class gsINSSolverSteady : public gsINSSolver<T, MatOrder>
82{
83
84public:
86
87
88protected: // *** Base class members ***
89
90 using Base::m_params;
91 using Base::m_assemblerPtr;
92 using Base::m_solution;
93 using Base::m_iterationNumber;
94
95 // m_initAssembT, m_assembT, m_solsetupT, m_solveT;
96
97
98public: // *** Constructor/destructor ***
99
102 Base(params)
103 {
104 m_assemblerPtr = new gsINSAssemblerSteady<T, MatOrder>(m_params);
105
107 m_params.options().setSwitch("unsteady", false);
108 }
109
110
111public: // *** Member functions ***
112
114 virtual void nextIteration();
115
116
117public: // *** Getters/setters ***
118
121 {
122 return dynamic_cast<gsINSAssemblerSteady<T, MatOrder>*>(m_assemblerPtr);
123 }
124
126 virtual std::string getName() { return "gsINSSolverSteady"; }
127
128
129}; // gsINSSolverSteady
130
131// ===================================================================================================================
132
136template<class T = real_t, int MatOrder = RowMajor>
137class gsINSSolverUnsteady : public gsINSSolver<T, MatOrder>
138{
139
140public:
142
143
144protected: // *** Class members ***
145
146 T m_time, m_timeStepSize;
147 T m_innerIter, m_avgPicardIter;
148 T m_innerTol;
149
150protected: // *** Base class members ***
151
152 using Base::m_solution;
153 using Base::m_iterationNumber;
154 using Base::m_assemblerPtr;
155 using Base::m_params;
156 using Base::m_outFile;
157 using Base::m_fileOutput;
158 using Base::m_dispOutput;
159
160
161public: // *** Constructor/destructor ***
162
165 {
166 m_assemblerPtr = new gsINSAssemblerUnsteady<T, MatOrder>(m_params);
167
168 initMembers();
169 m_params.options().setSwitch("unsteady", true);
170 }
171
172
173protected: // *** Member functions ***
174
176 virtual void initMembers();
177
178 void plotCurrentTimeStep(std::ofstream& fileU, std::ofstream& fileP, std::string fileNameSuffix, unsigned plotPts);
179
180
181public: // *** Member functions ***
182
184 virtual void nextIteration();
185
186 void solveWithAnimation(const int totalIter, const int iterStep, std::string fileNameSuffix = "", const T epsilon = 1e-3, unsigned plotPts = 10000, const int minIterations = 1);
187
189 virtual void solveGeneralizedStokes(const int maxIterations, const T epsilon, const int minIterations = 1)
191
192
193public: // *** Getters/setters ***
194
197 {
198 return dynamic_cast<gsINSAssemblerUnsteady<T, MatOrder>*>(m_assemblerPtr);
199 }
200
201 // @brief Returns the elapsed simulation time.
202 T getSimulationTime() const { return m_time; }
203
205 T getAvgPicardIterations() const { return m_avgPicardIter / m_iterationNumber; }
206
208 virtual std::string getName() { return "gsINSSolverUnsteady"; }
209
210
211}; // gsINSSolverUnsteady
212
213} // namespace gismo
214
215#ifndef GISMO_BUILD_LIB
216#include GISMO_HPP_HEADER(gsINSSolver.hpp)
217#endif
A base class for all flow solvers in gsIncompressibleFlow.
Definition gsFlowSolverBase.h:27
virtual void initMembers()
Initialize all members.
Definition gsFlowSolverBase.hpp:20
A class that holds all parameters needed by the incompressible flow solver.
Definition gsFlowSolverParams.h:34
The steady incompressible Navier–Stokes assembler.
Definition gsINSAssembler.h:283
The unsteady incompressible Navier–Stokes assembler.
Definition gsINSAssembler.h:310
A base class for incompressible Navier-Stokes assemblers.
Definition gsINSAssembler.h:27
The steady incompressible Navier-Stokes solver.
Definition gsINSSolver.h:82
virtual void nextIteration()
Perform next iteration step.
Definition gsINSSolver.hpp:38
virtual gsINSAssemblerSteady< T, MatOrder > * getAssembler() const
Returns a pointer to the assembler.
Definition gsINSSolver.h:120
virtual std::string getName()
Retrurns the name of the class as a string.
Definition gsINSSolver.h:126
gsINSSolverSteady(gsFlowSolverParams< T > &params)
Constructor.
Definition gsINSSolver.h:101
The unsteady incompressible Navier-Stokes solver.
Definition gsINSSolver.h:138
virtual void nextIteration()
Perform next iteration step.
Definition gsINSSolver.hpp:95
virtual void solveGeneralizedStokes(const int maxIterations, const T epsilon, const int minIterations=1)
Solve the generalized Stokes problem.
Definition gsINSSolver.h:189
gsINSAssemblerUnsteady< T, MatOrder > * getAssembler() const
Returns a pointer to the assembler.
Definition gsINSSolver.h:196
gsINSSolverUnsteady(gsFlowSolverParams< T > &params)
Constructor.
Definition gsINSSolver.h:164
virtual std::string getName()
Retrurns the name of the class as a string.
Definition gsINSSolver.h:208
T getAvgPicardIterations() const
Returns the average number of Picard iterations per time step.
Definition gsINSSolver.h:205
virtual void initMembers()
Initialize all members.
Definition gsINSSolver.hpp:55
A base class for incompressible Navier-Stokes solvers.
Definition gsINSSolver.h:31
gsINSSolver(gsFlowSolverParams< T > &params)
Constructor.
Definition gsINSSolver.h:50
virtual std::string getName()
Retrurns the name of the class as a string.
Definition gsINSSolver.h:67
virtual gsINSAssembler< T, MatOrder > * getAssembler() const
Returns a pointer to the assembler.
Definition gsINSSolver.h:70
virtual void solveStokes()
Compute the Stokes problem and save the solution into m_solution.
Definition gsINSSolver.hpp:19
This file contains the debugging and messaging system of G+Smo.
#define GISMO_NO_IMPLEMENTATION
Definition gsDebug.h:129
A class that holds all parameters needed by the incompressible flow solver.
This is the main header file that collects wrappers of Eigen for linear algebra.
Timing functions.
The G+Smo namespace, containing all definitions for the library.