[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
initial_condition_function.h
1 #ifndef __INITIAL_CONDITION_FUNCTION_H__
2 #define __INITIAL_CONDITION_FUNCTION_H__
3 
4 // for the initial condition function:
5 #include <deal.II/lac/vector.h>
6 #include <deal.II/base/function.h>
7 #include "parameters/all_parameters.h"
8 #include "../euler.h" // for FreeStreamInitialConditions
9 
10 namespace PHiLiP {
11 
13 template <int dim, int nstate, typename real>
14 class InitialConditionFunction : public dealii::Function<dim,real>
15 {
16 protected:
17  using dealii::Function<dim,real>::value;
18 
19 public:
22 
24  virtual real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const = 0;
25 
26 };
27 
29 template <int dim, int nstate, typename real>
31 {
32 protected:
33  using dealii::Function<dim,real>::value;
34 
35 public:
37  std::array<double,nstate> farfield_conservative;
38 
40 
43  : InitialConditionFunction<dim,nstate,real>()
44  {
45  //const double density_bc = 2.33333*euler_physics.density_inf;
46  const double density_bc = euler_physics.density_inf;
47  const double pressure_bc = 1.0/(euler_physics.gam*euler_physics.mach_inf_sqr);
48  std::array<double,nstate> primitive_boundary_values;
49  primitive_boundary_values[0] = density_bc;
50  for (int d=0;d<dim;d++) { primitive_boundary_values[1+d] = euler_physics.velocities_inf[d]; }
51  primitive_boundary_values[nstate-1] = pressure_bc;
52  farfield_conservative = euler_physics.convert_primitive_to_conservative(primitive_boundary_values);
53  }
54 
56  double value (const dealii::Point<dim> &/*point*/, const unsigned int istate) const
57  {
58  return farfield_conservative[istate];
59  }
60 };
61 
63 template <int dim, int nstate, typename real>
65 {
66 protected:
67  using dealii::Function<dim, real>::value;
68 
69 public:
72  Parameters::AllParameters const* const param);
73 
75  real value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
76 
77 protected:
79  virtual real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const = 0;
80 
82  real convert_primitive_to_conversative_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const;
83 
84 private:
85  // Euler physics pointer. Used to convert primitive to conservative.
86  std::shared_ptr < Physics::Euler<dim, nstate, double > > euler_physics;
87 };
88 
90 template <int dim, int nstate, typename real>
92 {
93 protected:
94  using dealii::Function<dim,real>::value;
95 
96 public:
98 
106  Parameters::AllParameters const *const param);
107 
108  const double gamma_gas;
109  const double mach_inf;
110  const double mach_inf_sqr;
111 
112 protected:
114  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
115 
117  virtual real density(const dealii::Point<dim,real> &point) const;
118 };
119 
121 template <int dim, int nstate, typename real>
123  : public InitialConditionFunction_TaylorGreenVortex<dim,nstate,real>
124 {
125 public:
127 
137  Parameters::AllParameters const *const param);
138 
139 protected:
141  real density(const dealii::Point<dim,real> &point) const override;
142 };
143 
145 template <int dim, int nstate, typename real>
147 {
148 protected:
149  using dealii::Function<dim,real>::value;
150 
151 public:
153 
155 
157  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
158 };
159 
161 template <int dim, int nstate, typename real>
163 {
164 protected:
165  using dealii::Function<dim,real>::value;
166 
167 public:
169 
171 
173  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
174 };
175 
177 template <int dim, int nstate, typename real>
179 {
180 protected:
181  using dealii::Function<dim,real>::value;
182 
183 public:
185 
187 
189  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
190 };
191 
193 template <int dim, int nstate, typename real>
195  : public InitialConditionFunction<dim,nstate,real>
196 {
197 protected:
198  using dealii::Function<dim,real>::value;
199 
200 public:
202 
204 
206  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
207 };
208 
210 template <int dim, int nstate, typename real>
212  : public InitialConditionFunction<dim,nstate,real>
213 {
214 protected:
215  using dealii::Function<dim,real>::value;
216 
217 public:
219 
221 
223  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
224 };
225 
227 template <int dim, int nstate, typename real>
229  : public InitialConditionFunction<dim,nstate,real>
230 {
231 protected:
232  using dealii::Function<dim,real>::value;
233 
234 public:
236 
238 
240  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
241 };
242 
244 template <int dim, int nstate, typename real>
246  : public InitialConditionFunction<dim,nstate,real>
247 {
248 protected:
249  using dealii::Function<dim,real>::value;
250 
251 public:
253 
255 
257  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
258 };
259 
261 template <int dim, int nstate, typename real>
263  : public InitialConditionFunction<dim,nstate,real>
264 {
265 protected:
266  using dealii::Function<dim,real>::value;
267 
268 public:
270 
272 
274  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
275 };
276 
278 template <int dim, int nstate, typename real>
280  : public InitialConditionFunction<dim,nstate,real>
281 {
282 protected:
283  using dealii::Function<dim,real>::value;
284 
285 public:
288 
290  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
291 };
292 
294 template <int dim, int nstate, typename real>
296  : public InitialConditionFunction<dim,nstate,real>
297 {
298 protected:
299  using dealii::Function<dim,real>::value;
300 
301 public:
303 
310  Parameters::AllParameters const *const param);
311 
313  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
314 
315 protected:
316 
317  // Euler physics pointer. Used to convert primitive to conservative.
318  std::shared_ptr < Physics::Euler<dim, nstate, double > > euler_physics;
319 
320 };
321 
322 
323 
325 
330 template <int dim, int nstate, typename real>
332 {
333 protected:
334  using dealii::Function<dim,real>::value;
335 
336 public:
339  Parameters::AllParameters const *const param);
340 
342  real value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
343 
344 protected:
345 
347  const real atwood_number;
348 
349  // Euler physics pointer. Used to convert primitive to conservative.
350  std::shared_ptr < Physics::Euler<dim, nstate, double > > euler_physics;
351 
352 };
353 
355 
359 template <int dim, int nstate, typename real>
361 {
362 protected:
364  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
365 
366 public:
368 
370  Parameters::AllParameters const* const param);
371 };
372 
374 
378 template <int dim, int nstate, typename real>
380 {
381 protected:
383  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
384 
385 public:
387 
389  Parameters::AllParameters const* const param);
390 };
391 
393 
397 template <int dim, int nstate, typename real>
399 {
400 protected:
402  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
403 
404 public:
406 
408  Parameters::AllParameters const* const param);
409 };
410 
412 
416 template <int dim, int nstate, typename real>
418 {
419 protected:
421  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
422 
423 public:
425 
427  Parameters::AllParameters const* const param);
428 };
429 
431 template <int dim, int nstate, typename real>
433 {
434 protected:
435  using dealii::Function<dim,real>::value;
436 
437 public:
440 
442  real value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
443 };
444 
446 template <int dim, int nstate, typename real>
448 {
449 protected:
454 
455 public:
457  static std::shared_ptr<InitialConditionFunction<dim,nstate,real>>
458  create_InitialConditionFunction(
459  Parameters::AllParameters const *const param);
460 };
461 
462 } // PHiLiP namespace
463 #endif
FlowCaseType
Selects the flow case to be simulated.
Initial Condition Function: Advection Energy.
Initial Condition Function: Taylor Green Vortex (isothermal density)
Function used to evaluate farfield conservative solution.
Initial Condition Function: 1D Burgers Viscous.
const double gam
Constant heat capacity ratio of fluid.
Definition: euler.h:105
const double density_inf
Definition: euler.h:111
Initial Condition Function: 1D Sod Shock Tube.
InitialConditionFunction()
< dealii::Function we are templating on
Files for the baseline physics.
Definition: ADTypes.hpp:10
FreeStreamInitialConditions(const Physics::Euler< dim, nstate, double > euler_physics)
Constructor.
Initial Condition Function: Euler Equations (primitive values)
Initial Condition Function: 1D Shu Osher Problem.
Initial Condition Function: Convection Diffusion Orders of Accuracy.
Initial Condition Function: Isentropic vortex.
const double gamma_gas
Constant heat capacity ratio of fluid.
const double mach_inf_sqr
Farfield Mach number squared.
Main parameter class that contains the various other sub-parameter classes.
Initial Condition Function: 1D Burgers Inviscid Energy.
Initial condition function factory.
double value(const dealii::Point< dim > &, const unsigned int istate) const
Returns the istate-th farfield conservative value.
virtual real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const =0
Value of the initial condition.
Initial Condition Function: 1D Burgers Inviscid.
Initial Condition Function: 2D Low Density Euler.
Initial condition function used to initialize a particular flow setup/case.
Initial Condition Function: 1D Burgers Rewienski.
Kelvin-Helmholtz Instability, parametrized by Atwood number.
const real atwood_number
Atwood number: quantifies density difference.
Initial Condition Function: 1D Sine Function; used for temporal convergence.
std::array< double, nstate > farfield_conservative
< dealii::Function we are templating on
Initial Condition Function: 1D Burgers Inviscid.
Initial Condition Function: 1D Leblanc Shock Tube.
DensityInitialConditionType
For taylor green vortex, selects the type of density initialization.
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Definition: euler.cpp:199
const double mach_inf_sqr
Definition: euler.h:114
Initial Condition Function: Taylor Green Vortex (uniform density)
dealii::Tensor< 1, dim, double > velocities_inf
Non-dimensionalized Velocity vector at farfield.
Definition: euler.h:136
Initial Condition Function: Convection Diffusion Energy.