[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 #include "../real_gas.h" // for RealGasBase
10 #include "../navier_stokes.h" // for InitialConditionFunction_TurbulentChannelFlow
11 
12 namespace PHiLiP {
13 
15 template <int dim, int nspecies, int nstate, typename real>
16 class InitialConditionFunction : public dealii::Function<dim,real>
17 {
18 protected:
19  using dealii::Function<dim,real>::value;
20 
21 public:
24 
26  virtual real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const = 0;
27 
28 };
29 
31 template <int dim, int nspecies, int nstate, typename real>
32 class FreeStreamInitialConditions : public InitialConditionFunction<dim,nspecies,nstate,real>
33 {
34 protected:
35  using dealii::Function<dim,real>::value;
36 
37 public:
39  std::array<double,nstate> farfield_conservative;
40 
42 
45  : InitialConditionFunction<dim,nspecies,nstate,real>()
46  {
47  //const double density_bc = 2.33333*euler_physics.density_inf;
48  const double density_bc = euler_physics.density_inf;
49  const double pressure_bc = 1.0/(euler_physics.gam*euler_physics.mach_inf_sqr);
50  std::array<double,nstate> primitive_boundary_values;
51  primitive_boundary_values[0] = density_bc;
52  for (int d=0;d<dim;d++) { primitive_boundary_values[1+d] = euler_physics.velocities_inf[d]; }
53  primitive_boundary_values[nstate-1] = pressure_bc;
54  farfield_conservative = euler_physics.convert_primitive_to_conservative(primitive_boundary_values);
55  }
56 
58  double value (const dealii::Point<dim> &/*point*/, const unsigned int istate) const
59  {
60  return farfield_conservative[istate];
61  }
62 };
63 
65 template <int dim, int nspecies, int nstate, typename real>
67 {
68 protected:
69  using dealii::Function<dim,real>::value;
70 
71 public:
74  const Physics::NavierStokes<dim,nspecies,nstate,double> navier_stokes_physics_,
75  const double channel_friction_velocity_reynolds_number_,
76  const double domain_length_x_,
77  const double domain_length_y_,
78  const double domain_length_z_);
79 
82  const double domain_length_x;
83  const double domain_length_y;
84  const double domain_length_z;
85  const double channel_height;
86  const double half_channel_height;
87 
89  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
90 
91 protected:
93  real get_distance_from_wall(const dealii::Point<dim,real> &point) const;
95  virtual real x_velocity (const dealii::Point<dim,real> &point, const real density, const real temperature) const;
97  virtual real y_velocity (const dealii::Point<dim,real> &point) const;
98 };
99 
100 template <int dim, int nspecies, int nstate, typename real>
102 {
103 public:
105 
109  const Physics::NavierStokes<dim,nspecies,nstate,double> navier_stokes_physics_,
110  const double channel_friction_velocity_reynolds_number_,
111  const double domain_length_x_,
112  const double domain_length_y_,
113  const double domain_length_z_);
114 
115 protected:
117  real x_velocity (const dealii::Point<dim,real> &point, const real density, const real temperature) const override;
118 };
119 
120 template <int dim, int nspecies, int nstate, typename real>
122 {
123 public:
125 
128  const Physics::NavierStokes<dim,nspecies,nstate,double> navier_stokes_physics_,
129  const double channel_friction_velocity_reynolds_number_,
130  const double domain_length_x_,
131  const double domain_length_y_,
132  const double domain_length_z_);
133 
134 protected:
136  real y_velocity (const dealii::Point<dim,real> &point) const override;
137 };
138 
140 template <int dim, int nspecies, int nstate, typename real>
142 {
143 protected:
144  using dealii::Function<dim,real>::value;
145 
146 public:
149  Parameters::AllParameters const *const param);
150 
151  const double gamma_gas;
152  const double mach_inf;
153  const double mach_inf_sqr;
154 
156  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
157 
158 protected:
160  virtual real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const = 0;
161 
163  real convert_primitive_to_conversative_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
164 
165  // Euler physics pointer. Used to convert primitive to conservative.
166  std::shared_ptr < Physics::Euler<dim, nspecies, nstate, double > > euler_physics;
167 };
168 
170 template <int dim, int nspecies, int nstate, typename real>
171 class InitialConditionFunction_RealGasBase : public InitialConditionFunction<dim, nspecies, nstate, real>
172 {
173 protected:
174  using dealii::Function<dim, real>::value;
175 
176 public:
179  Parameters::AllParameters const* const param);
180 
182  real value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
183 
184 protected:
186  virtual real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const = 0;
187 
189  real convert_primitive_to_conversative_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const;
190 
191  // Real Gas physics pointer. Used to convert primitive to conservative.
192  std::shared_ptr < Physics::RealGas<dim, nspecies, nstate, double > > real_gas_physics;
193 };
194 
196 template <int dim, int nspecies, int nstate, typename real>
198 {
199 public:
201 
209  Parameters::AllParameters const *const param);
210 
211 protected:
213  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
214 
216  virtual real density(const dealii::Point<dim,real> &point) const;
217 };
218 
220 template <int dim, int nspecies, int nstate, typename real>
222  : public InitialConditionFunction_TaylorGreenVortex<dim,nspecies,nstate,real>
223 {
224 public:
226 
236  Parameters::AllParameters const *const param);
237 
238 protected:
240  real density(const dealii::Point<dim,real> &point) const override;
241 };
242 
244 template <int dim, int nspecies, int nstate, typename real>
246 {
247 public:
249 
259  Parameters::AllParameters const *const param,
260  const real extremum_vorticity_value_,
261  const real dipole_radius,
262  const real dipole_axis_angle_wrt_x_axis_in_degrees);
263 
264  const real extremum_vorticity_value; // Extremum vorticity value
265  const real r0; // dipole radius
266  const real x1; // x-coordinate of dipole 1
267  const real y1; // y-coordinate of dipole 1
268  const real x2; // x-coordinate of dipole 2
269  const real y2; // y-coordinate of dipole 2
270 
271 protected:
273  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
274 };
275 
277 template <int dim, int nspecies, int nstate, typename real>
279 {
280 public:
282 
292  Parameters::AllParameters const *const param);
293 };
294 
296 template <int dim, int nspecies, int nstate, typename real>
298 {
299 public:
301 
311  Parameters::AllParameters const *const param);
312 };
313 
315 template <int dim, int nspecies, int nstate, typename real>
317 {
318 protected:
319  using dealii::Function<dim,real>::value;
320 
321 public:
323 
325 
327  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
328 };
329 
331 template <int dim, int nspecies, int nstate, typename real>
333 {
334 protected:
335  using dealii::Function<dim,real>::value;
336 
337 public:
339 
341 
343  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
344 };
345 
347 template <int dim, int nspecies, int nstate, typename real>
349 {
350 protected:
351  using dealii::Function<dim,real>::value;
352 
353 public:
355 
357 
359  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
360 };
361 
363 template <int dim, int nspecies, int nstate, typename real>
365  : public InitialConditionFunction<dim,nspecies,nstate,real>
366 {
367 protected:
368  using dealii::Function<dim,real>::value;
369 
370 public:
372 
374 
376  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
377 };
378 
380 template <int dim, int nspecies, int nstate, typename real>
382  : public InitialConditionFunction<dim,nspecies,nstate,real>
383 {
384 protected:
385  using dealii::Function<dim,real>::value;
386 
387 public:
389 
391 
393  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
394 };
395 
397 template <int dim, int nspecies, int nstate, typename real>
399  : public InitialConditionFunction<dim,nspecies,nstate,real>
400 {
401 protected:
402  using dealii::Function<dim,real>::value;
403 
404 public:
406 
408 
410  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
411 };
412 
414 template <int dim, int nspecies, int nstate, typename real>
416  : public InitialConditionFunction<dim,nspecies,nstate,real>
417 {
418 protected:
419  using dealii::Function<dim,real>::value;
420 
421 public:
423 
425 
427  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
428 };
429 
431 template <int dim, int nspecies, int nstate, typename real>
433  : public InitialConditionFunction<dim,nspecies,nstate,real>
434 {
435 protected:
436  using dealii::Function<dim,real>::value;
437 
438 public:
440 
442 
444  real value (const dealii::Point<dim,real> &point, const unsigned int istate) const override;
445 };
446 
448 template <int dim, int nspecies, int nstate, typename real>
450  : public InitialConditionFunction<dim,nspecies,nstate,real>
451 {
452 protected:
453  using dealii::Function<dim,real>::value;
454 
455 public:
458 
460  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
461 };
462 
464 template <int dim, int nspecies, int nstate, typename real>
466  : public InitialConditionFunction<dim,nspecies,nstate,real>
467 {
468 protected:
469  using dealii::Function<dim,real>::value;
470 
471 public:
473 
480  Parameters::AllParameters const *const param);
481 
483  real value (const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
484 
485 protected:
486 
487  // Euler physics pointer. Used to convert primitive to conservative.
488  std::shared_ptr < Physics::Euler<dim, nspecies, nstate, double > > euler_physics;
489 
490 };
491 
492 
493 
495 
500 template <int dim, int nspecies, int nstate, typename real>
501 class InitialConditionFunction_KHI : public InitialConditionFunction<dim,nspecies,nstate,real>
502 {
503 protected:
504  using dealii::Function<dim,real>::value;
505 
506 public:
509  Parameters::AllParameters const *const param);
510 
512  real value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
513 
514 protected:
515 
517  const real atwood_number;
518 
519  // Euler physics pointer. Used to convert primitive to conservative.
520  std::shared_ptr < Physics::Euler<dim, nspecies, nstate, double > > euler_physics;
521 
522 };
523 
525 
529 template <int dim, int nspecies, int nstate, typename real>
531 {
532 protected:
534  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
535 
536 public:
538 
540  Parameters::AllParameters const* const param);
541 };
542 
543 
545 
549 template <int dim, int nspecies, int nstate, typename real>
551 {
552 protected:
554  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
555 
556 public:
558 
560  Parameters::AllParameters const* const param);
561 };
562 
564 
568 template <int dim, int nspecies, int nstate, typename real>
570 {
571 protected:
573  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
574 
575 public:
577 
579  Parameters::AllParameters const* const param);
580 };
581 
583 
587 template <int dim, int nspecies, int nstate, typename real>
589 {
590 protected:
592  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
593 
594 public:
596 
598  Parameters::AllParameters const* const param);
599 };
600 
602 
606 template <int dim, int nspecies, int nstate, typename real>
608 {
609 protected:
611  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
612 
613 public:
615 
617  Parameters::AllParameters const* const param);
618 };
619 
621 
625 template <int dim, int nspecies, int nstate, typename real>
627 {
628 protected:
630  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
631 
632 public:
634 
636  Parameters::AllParameters const* const param);
637 };
638 
639 
641 
645 template <int dim, int nspecies, int nstate, typename real>
647 {
648 protected:
650  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
651 
652 public:
654 
656  Parameters::AllParameters const* const param);
657 };
658 
659 
661 
665 template <int dim, int nspecies, int nstate, typename real>
667 {
668 protected:
670  real primitive_value(const dealii::Point<dim, real>& point, const unsigned int istate = 0) const override;
671 
672 public:
674 
676  Parameters::AllParameters const* const param);
677 };
678 
680 
684 template <int dim, int nspecies, int nstate, typename real>
686 {
687 public:
689  Parameters::AllParameters const *const param,
690  bool high_temperature);
691 protected:
693  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
694  bool use_high_temp_ic;
695 };
696 
698 
702 template <int dim, int nspecies, int nstate, typename real>
704 {
705 public:
707  Parameters::AllParameters const *const param);
708 protected:
710  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
711 };
712 
714 
719 template <int dim, int nspecies, int nstate, typename real>
721 {
722 public:
724  Parameters::AllParameters const *const param);
725 protected:
727  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
728 };
729 
731 template <int dim, int nspecies, int nstate, typename real>
733 {
734 protected:
735  using dealii::Function<dim,real>::value;
736 
737 public:
739  Parameters::AllParameters const *const param, const bool use_smooth_interface);
740 
741  const double gamma_gas;
742  const double mach_inf;
743  const double mach_inf_sqr;
744  const bool smooth_interface;
745 
746 protected:
748  real primitive_value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const;
749 
751  virtual real mass_fraction(const dealii::Point<dim,real> &point) const;
752 };
753 
755 template <int dim, int nspecies, int nstate, typename real>
756 class InitialConditionFunction_Zero : public InitialConditionFunction<dim,nspecies,nstate,real>
757 {
758 protected:
759  using dealii::Function<dim,real>::value;
760 
761 public:
764 
766  real value(const dealii::Point<dim,real> &point, const unsigned int istate = 0) const override;
767 };
768 
770 template <int dim, int nspecies, int nstate, typename real>
772 {
773 protected:
780 
781 public:
783  static std::shared_ptr<InitialConditionFunction<dim,nspecies,nstate,real>>
784  create_InitialConditionFunction(
785  Parameters::AllParameters const *const param);
786 };
787 
788 } // PHiLiP namespace
789 #endif
dealii::Tensor< 1, dim, double > velocities_inf
Non-dimensionalized Velocity vector at farfield.
Definition: euler.h:137
Initial Condition Function: Taylor Green Vortex (uniform density)
FlowCaseType
Selects the flow case to be simulated.
Initial Condition Function: Advection Energy.
Initial Condition Function: Taylor Green Vortex (isothermal density)
virtual real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const =0
Value of the initial condition.
FreeStreamInitialConditions(const Physics::Euler< dim, nspecies, nstate, double > euler_physics)
Constructor.
Function used to evaluate farfield conservative solution.
Initial Condition Function: Dipole Wall Collision Normal.
Initial Condition Function: Dipole Wall Collision.
Initial Condition Function: 1D Burgers Viscous.
2D Initial Condition Function: Multispecies_IsentropicVortex
Initial Condition Function: 1D Sod Shock Tube.
XVelocityInitialConditionType
For turbulent channel flow, selects the type of x-velocity initialization.
Initial Condition Function: 2D Low Density Euler.
const double domain_length_y
Domain length in y-direction.
Initial Condition Function: 2D Strong Vortex Shock Wave Interaction.
Files for the baseline physics.
Definition: ADTypes.hpp:10
Initial Condition Function: 1D Shu Osher Problem.
std::array< double, nstate > farfield_conservative
< dealii::Function we are templating on
Initial Condition Function: 2D Astrophysical Mach Jet.
double value(const dealii::Point< dim > &, const unsigned int istate) const
Returns the istate-th farfield conservative value.
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Definition: euler.cpp:206
Initial Condition Function: Convection Diffusion Orders of Accuracy.
Initial Condition Function: Isentropic vortex.
1D Initial Condition Function: Multispecies_VortexAdvection
Main parameter class that contains the various other sub-parameter classes.
1D Initial Condition Function: Multispecies_SodShockTube
const real atwood_number
Atwood number: quantifies density difference.
const double density_inf
Definition: euler.h:112
Initial Condition Function: Dipole Wall Collision Oblique.
Initial Condition Function: 1D Burgers Inviscid Energy.
Initial condition function factory.
const double gamma_gas
Constant heat capacity ratio of fluid.
Initial Condition Function: 1D Burgers Inviscid.
Initial condition function used to initialize a particular flow setup/case.
Initial Condition Function: 1D Burgers Rewienski.
Kelvin-Helmholtz Instability, parametrized by Atwood number.
Initial Condition Function: 2D Double Mach Reflection Problem.
const Physics::NavierStokes< dim, nspecies, nstate, double > navier_stokes_physics
Navier-Stokes physics object.
Function used to evaluate initial turbulent channel conservative solution.
Initial Condition Function: Euler Equations (primitive values)
const double domain_length_x
Domain length in x-direction.
Initial Condition Function: 1D Sine Function; used for temporal convergence.
const double channel_friction_velocity_reynolds_number
Channel Reynolds number based on wall friction velocity.
InitialConditionFunction()
< dealii::Function we are templating on
const double domain_length_z
Domain length in z-direction.
Initial Condition Function: 1D Burgers Inviscid.
Initial Condition Function: 1D Leblanc Shock Tube.
DensityInitialConditionType
For taylor green vortex, selects the type of density initialization.
const double gam
Constant heat capacity ratio of fluid.
Definition: euler.h:106
const double mach_inf_sqr
Definition: euler.h:115
Initial Condition Function: 2D Shock Diffraction Problem.
Initial Condition Function: Taylor Green Vortex (uniform density)
const double gamma_gas
Constant heat capacity ratio of fluid.
Initial Condition Function: Convection Diffusion Energy.
const double mach_inf_sqr
Farfield Mach number squared.
Initial Condition Function: NavierStokesBase.