[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
navier_stokes.h
1 #ifndef __NAVIER_STOKES__
2 #define __NAVIER_STOKES__
3 
4 #include "euler.h"
5 #include "parameters/parameters_navier_stokes.h"
6 
7 namespace PHiLiP {
8 namespace Physics {
9 
11 template <int dim, int nspecies, int nstate, typename real>
12 class NavierStokes : public Euler <dim, nspecies, nstate, real>
13 {
14 protected:
15  // For overloading the virtual functions defined in PhysicsBase
25 public:
29  NavierStokes(
30  const Parameters::AllParameters *const parameters_input,
31  const double ref_length,
32  const double gamma_gas,
33  const double mach_inf,
34  const double angle_of_attack,
35  const double side_slip_angle,
36  const double prandtl_number,
37  const double reynolds_number_inf,
38  const bool use_constant_viscosity,
39  const double constant_viscosity,
40  const double temperature_inf = 273.15,
41  const double isothermal_wall_temperature = 1.0,
42  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
44  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG,
45  const bool has_nonzero_physical_source = false);
46 
52  const double constant_viscosity;
54  const double prandtl_number;
56  const double reynolds_number_inf;
61 
62 protected:
64 
68  const double sutherlands_temperature;
69  const double freestream_temperature;
70  const double temperature_ratio;
71 
72 
73 public:
74 
76  template<typename real2>
77  dealii::Tensor<1,dim,real2> compute_temperature_gradient (
78  const std::array<real2,nstate> &primitive_soln,
79  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
80 
82  template<typename real2>
83  dealii::Tensor<1,dim,real2> compute_velocities_parallel_to_wall(
84  const std::array<real2,nstate> &conservative_soln,
85  const dealii::Tensor<1,dim,real2> &normal_vector) const;
86 
88  template<typename real2>
89  dealii::Tensor<1,dim,real2> compute_wall_tangent_vector(
90  const std::array<real2,nstate> &conservative_soln,
91  const dealii::Tensor<1,dim,real2> &normal_vector) const;
92 
94  template<typename real2>
96  const dealii::Tensor<1,dim,real2> &velocities_parallel_to_wall) const;
97 
99  template<typename real2>
101  const std::array<real2,nstate> &conservative_soln,
102  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient,
103  const dealii::Tensor<1,dim,real2> &normal_vector) const;
104 
110  template<typename real2>
111  real2 compute_viscosity_coefficient (const std::array<real2,nstate> &primitive_soln) const;
112 
118  template<typename real2>
119  real2 compute_viscosity_coefficient_from_temperature (const real2 temperature) const;
120 
128  template<typename real2>
129  real2 compute_viscosity_coefficient_sutherlands_law (const std::array<real2,nstate> &primitive_soln) const;
130 
138  template<typename real2>
139  real2 compute_viscosity_coefficient_sutherlands_law_from_temperature (const real2 temperature) const;
140 
144  template<typename real2>
145  real2 scale_viscosity_coefficient (const real2 viscosity_coefficient) const;
146 
150  template<typename real2>
151  real2 compute_scaled_viscosity_coefficient (const std::array<real2,nstate> &primitive_soln) const;
152 
156  template<typename real2>
158  const real2 scaled_viscosity_coefficient,
159  const double prandtl_number_input) const;
160 
164  template<typename real2>
165  real2 compute_scaled_heat_conductivity (const std::array<real2,nstate> &primitive_soln) const;
166 
170  template<typename real2>
171  dealii::Tensor<1,dim,real2> compute_heat_flux (
172  const std::array<real2,nstate> &primitive_soln,
173  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
174 
178  template<typename real2>
180  const real2 scaled_heat_conductivity,
181  const dealii::Tensor<1,dim,real2> &temperature_gradient) const;
182 
184  template<typename real2>
185  dealii::Tensor<1,3,real2> compute_vorticity (
186  const std::array<real2,nstate> &conservative_soln,
187  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient) const;
188 
191  const std::array<real,nstate> &conservative_soln,
192  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
193 
196  const std::array<real,nstate> &conservative_soln,
197  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
198 
204  const std::array<real,nstate> &conservative_soln,
205  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
206 
208  real compute_enstrophy (
209  const std::array<real,nstate> &conservative_soln,
210  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
211 
214  const std::array<real,nstate> &conservative_soln,
215  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
216 
219  const std::array<real,nstate> &conservative_soln,
220  const std::array<dealii::Tensor<1,dim,real>,3> &vorticity_gradient) const;
221 
230  const real integrated_enstrophy) const;
231 
238  const std::array<real,nstate> &conservative_soln,
239  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
240 
243  real compute_dilatation (
244  const std::array<real,nstate> &conservative_soln,
245  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
246 
250  const std::array<real,nstate> &conservative_soln,
251  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
252 
256  dealii::Tensor<2,dim,real> compute_deviatoric_strain_rate_tensor (
257  const std::array<real,nstate> &conservative_soln,
258  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
259 
263  dealii::Tensor<2,dim,real> compute_strain_rate_tensor_from_conservative (
264  const std::array<real,nstate> &conservative_soln,
265  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
266 
270  template<typename real2>
271  dealii::Tensor<2,dim,real2> compute_strain_rate_tensor_from_conservative_templated (
272  const std::array<real2,nstate> &conservative_soln,
273  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient) const;
274 
277  const std::array<real,nstate> &conservative_soln,
278  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
279 
288  const real integrated_viscosity_times_deviatoric_strain_rate_tensor_magnitude_sqr) const;
289 
291  template<typename real2>
292  dealii::Tensor<2,dim,real2>
294  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
295 
299  template<typename real2>
300  dealii::Tensor<2,dim,real2>
302  const dealii::Tensor<2,dim,real2> &vel_gradient) const;
303 
306  const std::array<real,nstate> &conservative_soln,
307  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
308 
316  const real integrated_viscosity_times_strain_rate_tensor_magnitude_sqr) const;
317 
321  template<typename real2>
322  dealii::Tensor<2,dim,real2>
324  const real2 scaled_viscosity_coefficient,
325  const dealii::Tensor<2,dim,real2> &strain_rate_tensor) const;
326 
330  dealii::Tensor<2,dim,real> compute_viscous_stress_tensor_from_conservative (
331  const std::array<real,nstate> &conservative_soln,
332  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
333 
334  template<typename real2>
335  dealii::Tensor<2,dim,real2>
336  compute_viscous_stress_tensor_from_conservative_templated (
337  const std::array<real2,nstate> &conservative_soln,
338  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient) const;
339 
343  template<typename real2>
344  dealii::Tensor<2,dim,real2>
346  const std::array<real2,nstate> &primitive_soln,
347  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
348 
351  const dealii::Tensor<2,dim,real> &tensor1,
352  const dealii::Tensor<2,dim,real> &tensor2) const;
353 
357  dealii::Tensor<2,dim,real> compute_germano_idendity_matrix_L_component (
358  const std::array<real,nstate> &conservative_soln) const;
359 
363  dealii::Tensor<2,dim,real> compute_germano_identity_matrix_M_component (
364  const std::array<real,nstate> &conservative_soln,
365  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
366 
373  std::array<real,nstate> dissipative_flux_dot_normal (
374  const std::array<real,nstate> &solution,
375  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
376  const std::array<real,nstate> &filtered_solution,
377  const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
378  const bool on_boundary,
379  const dealii::types::global_dof_index cell_index,
380  const dealii::Tensor<1,dim,real> &normal,
381  const int boundary_type) override;
382 
390  virtual std::array<real,nstate> dissipative_flux_dot_normal_on_adiabatic_boundary (
391  const std::array<real,nstate> &solution,
392  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
393  const std::array<real,nstate> &filtered_solution,
394  const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
395  const dealii::types::global_dof_index cell_index,
396  const dealii::Tensor<1,dim,real> &normal);
397 
401  std::array<dealii::Tensor<1,dim,real>,nstate>
403  const std::array<real,nstate> &conservative_soln,
404  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const override;
405 
409  dealii::Tensor<1,dim,real> compute_scaled_viscosity_gradient (
410  const std::array<real,nstate> &primitive_soln,
411  const dealii::Tensor<1,dim,real> &temperature_gradient) const;
412 
417  dealii::Tensor<2,nstate,real> dissipative_flux_directional_jacobian (
418  const std::array<real,nstate> &conservative_soln,
419  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
420  const dealii::Tensor<1,dim,real> &normal) const;
421 
427  const std::array<real,nstate> &conservative_soln,
428  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
429  const dealii::Tensor<1,dim,real> &normal,
430  const int d_gradient) const;
431 
433  std::array<real,nstate> dissipative_source_term (
434  const dealii::Point<dim,real> &pos) const;
435 
437  std::array<real,nstate> source_term (
438  const dealii::Point<dim,real> &pos,
439  const std::array<real,nstate> &conservative_soln,
440  const real current_time) const override;
441 
444  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian_via_dfad (
445  std::array<real,nstate> &conservative_soln,
446  const dealii::Tensor<1,dim,real> &normal) const;
447 
451  std::array<real,nstate> &conservative_soln) const;
452 
457  template<typename real2>
458  std::array<dealii::Tensor<1,dim,real2>,nstate>
460  const dealii::Tensor<1,dim,real2> &vel,
461  const dealii::Tensor<2,dim,real2> &viscous_stress_tensor,
462  const dealii::Tensor<1,dim,real2> &heat_flux) const;
463 
464 protected:
465 
469  template <typename real2>
470  std::array<dealii::Tensor<1,dim,real2>,nstate>
472  const std::array<real2,nstate> &conservative_soln,
473  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
474 
476  virtual void boundary_face_values_viscous_flux (
477  const int boundary_type,
478  const dealii::Point<dim, real> &pos,
479  const dealii::Tensor<1,dim,real> &normal,
480  const std::array<real,nstate> &soln_int,
481  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
482  const std::array<real,nstate> &/*filtered_soln_int*/,
483  const std::array<dealii::Tensor<1,dim,real>,nstate> &/*filtered_soln_grad_int*/,
484  std::array<real,nstate> &soln_bc,
485  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
486 
492  const dealii::Tensor<1,dim,real> &normal_int,
493  const std::array<real,nstate> &soln_int,
494  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
495  std::array<real,nstate> &soln_bc,
496  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const;
497 
500  const dealii::Point<dim, real> &pos,
501  const dealii::Tensor<1,dim,real> &normal_int,
502  const std::array<real,nstate> &soln_int,
503  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
504  std::array<real,nstate> &soln_bc,
505  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
506 
507 public:
509  dealii::Vector<double> post_compute_derived_quantities_vector (
510  const dealii::Vector<double> &uh,
511  const std::vector<dealii::Tensor<1,dim> > &duh,
512  const std::vector<dealii::Tensor<2,dim> > &dduh,
513  const dealii::Tensor<1,dim> &normals,
514  const dealii::Point<dim> &evaluation_points) const override;
515 
517  std::vector<std::string> post_get_names () const override;
518 
520  std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation> post_get_data_component_interpretation () const override;
521 
523  dealii::UpdateFlags post_get_needed_update_flags () const override;
524 
525 public:
527  real get_tensor_magnitude_sqr (const dealii::Tensor<2,dim,real> &tensor) const;
528 
530  real get_tensor_magnitude (const dealii::Tensor<2,dim,real> &tensor) const;
531 
532 };
533 
535 template <int dim, int nspecies, int nstate, typename real>
536 class NavierStokes_ChannelFlowConstantSourceTerm : public NavierStokes <dim, nspecies, nstate, real>
537 {
538 public:
543  const Parameters::AllParameters *const parameters_input,
544  const double ref_length,
545  const double gamma_gas,
546  const double mach_inf,
547  const double angle_of_attack,
548  const double side_slip_angle,
549  const double prandtl_number,
550  const double reynolds_number_inf,
551  const bool use_constant_viscosity,
552  const double constant_viscosity,
553  const double reynolds_number_based_on_friction_velocity,
554  const double half_channel_height,
555  const double temperature_inf = 273.15,
556  const double isothermal_wall_temperature = 1.0,
557  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
559  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG);
560 
563 
566 
568  std::array<real,nstate> physical_source_term (
569  const dealii::Point<dim,real> &pos,
570  const std::array<real,nstate> &solution,
571  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
572  const dealii::types::global_dof_index cell_index) const override;
573 };
574 
576 template <typename real>
578 {
583  static const int NUMBER_OF_SAMPLE_POINTS = 38;
585  static constexpr std::array<double,NUMBER_OF_SAMPLE_POINTS> yData =
586  {{0.0, 3.0, 5.0, 8.0, 10.0, 20.0, 35.0, 50.0, 75.0, 100.0, 125.0, 150.0,
587  200.0, 250.0, 300.0, 350.0, 400.0, 500.0, 575.0, 650.0, 725.0, 800.0,
588  900.0, 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, 1500.0, 1600.0, 1800.0,
589  2000.0, 2500.0, 3000.0, 3500.0, 4000.0, 4500.0, 5000.0}};
590  static constexpr std::array<double,NUMBER_OF_SAMPLE_POINTS> xData =
591  {{0.0000000000000e+00, 8.7652737082527e+00, 2.3294562921324e+01, 5.4184774233564e+01,
592  7.8809463502726e+01, 2.2429199943857e+02, 4.6798107411288e+02, 7.2296127461536e+02,
593  1.1658971129082e+03, 1.6286476514445e+03, 2.1076047703808e+03, 2.5997463219921e+03,
594  3.6154681137081e+03, 4.6644290903876e+03, 5.7398811747011e+03, 6.8373640504590e+03,
595  7.9537073133201e+03, 1.0234022966195e+04, 1.1979574602097e+04, 1.3750942900204e+04,
596  1.5545134905888e+04, 1.7359780637619e+04, 1.9807850068644e+04, 2.2285219477338e+04,
597  2.4788948528427e+04, 2.7316633948913e+04, 2.9866274540736e+04, 3.2436177975259e+04,
598  3.5024894352307e+04, 3.7631167553565e+04, 4.2892118831955e+04, 4.8211670442755e+04,
599  6.1730908478994e+04, 7.5515087179925e+04, 8.9519590674471e+04, 1.0371270861601e+05,
600  1.1807073118603e+05, 1.3257525485198e+05}};
601 public:
603 
604  ~WallModelLookUpTable(){};
605 
606 private:
607  real interpolate(const real x, const bool extrapolate ) const;
608 
609 public:
611  real get_wall_shear_stress_magnitude(
612  const real wall_parallel_velocity,
613  const real distance,
614  const real viscosity_coefficient,
615  const real density,
616  const double reynolds_number_inf) const;
617 };
618 
620 template <int dim, int nspecies, int nstate, typename real>
622 {
623 public:
628  const Parameters::AllParameters *const parameters_input,
629  const double ref_length,
630  const double gamma_gas,
631  const double mach_inf,
632  const double angle_of_attack,
633  const double side_slip_angle,
634  const double prandtl_number,
635  const double reynolds_number_inf,
636  const bool use_constant_viscosity,
637  const double constant_viscosity,
638  const double reynolds_number_based_on_friction_velocity,
639  const double half_channel_height,
640  const double distance_from_wall_for_wall_model_input_velocity,
641  const double temperature_inf = 273.15,
642  const double isothermal_wall_temperature = 1.0,
643  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
645  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG);
646 
649 
651  const double distance_from_wall_for_wall_model_input_velocity;
652 
654  std::unique_ptr < WallModelLookUpTable<real> > wall_model_look_up_table;
655 
663  std::array<real,nstate> dissipative_flux_dot_normal_on_adiabatic_boundary (
664  const std::array<real,nstate> &solution,
665  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
666  const std::array<real,nstate> &filtered_solution,
667  const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
668  const dealii::types::global_dof_index cell_index,
669  const dealii::Tensor<1,dim,real> &normal) override;
670 
672  real get_velocity_component_parallel_to_wall_from_solution_and_normal_vector (
673  const std::array<real,nstate> &conservative_soln,
674  const dealii::Tensor<1,dim,real> &normal_vector) const;
675 };
676 
677 } // Physics namespace
678 } // PHiLiP namespace
679 
680 #endif
real compute_vorticity_magnitude(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate vorticity magnitude from conservative variables and gradient of conservative variables...
const double sutherlands_temperature
Sutherland&#39;s temperature. Units: [K].
Definition: navier_stokes.h:68
std::array< real, nstate > dissipative_flux_dot_normal(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const bool on_boundary, const dealii::types::global_dof_index cell_index, const dealii::Tensor< 1, dim, real > &normal, const int boundary_type) override
const thermal_boundary_condition_enum thermal_boundary_condition_type
Thermal boundary condition type (adiabatic or isothermal)
Definition: navier_stokes.h:60
virtual std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Physical source term that does require differentiation.
Definition: physics.cpp:252
const double angle_of_attack
Angle of attack.
Definition: euler.h:119
real2 scale_viscosity_coefficient(const real2 viscosity_coefficient) const
const double constant_viscosity
Nondimensionalized constant viscosity.
Definition: navier_stokes.h:52
real get_tensor_magnitude(const dealii::Tensor< 2, dim, real > &tensor) const
Returns the the magnitude of the tensor (i.e. the double dot product of a tensor with itself) ...
real compute_second_invariant(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
const double mach_inf
Farfield Mach number.
Definition: euler.h:114
dealii::Tensor< 2, dim, real2 > compute_strain_rate_tensor_from_conservative_templated(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
dealii::Tensor< 1, dim, real2 > compute_wall_tangent_vector_from_velocities_parallel_to_wall(const dealii::Tensor< 1, dim, real2 > &velocities_parallel_to_wall) const
const two_point_num_flux_enum two_point_num_flux_type
Two point numerical flux type (for split form)
Definition: euler.h:129
real2 compute_viscosity_coefficient(const std::array< real2, nstate > &primitive_soln) const
dealii::Tensor< 2, nstate, real > dissipative_flux_directional_jacobian_wrt_gradient_component(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::Tensor< 1, dim, real > &normal, const int d_gradient) const
Manufactured solution used for grid studies to check convergence orders.
dealii::Tensor< 1, dim, real2 > compute_heat_flux_given_scaled_heat_conductivity_and_temperature_gradient(const real2 scaled_heat_conductivity, const dealii::Tensor< 1, dim, real2 > &temperature_gradient) const
real compute_density_gradient_magnitude(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
real compute_incompressible_enstrophy(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate incompressible enstrophy from conservative variables and gradient of conservative variables...
real get_tensor_product_magnitude_sqr(const dealii::Tensor< 2, dim, real > &tensor1, const dealii::Tensor< 2, dim, real > &tensor2) const
Tensor product magnitude squared.
dealii::Tensor< 2, dim, real2 > compute_strain_rate_tensor(const dealii::Tensor< 2, dim, real2 > &vel_gradient) const
real2 compute_scaled_heat_conductivity_given_scaled_viscosity_coefficient_and_prandtl_number(const real2 scaled_viscosity_coefficient, const double prandtl_number_input) const
real compute_enstrophy(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate enstrophy from conservative variables and gradient of conservative variables.
Files for the baseline physics.
Definition: ADTypes.hpp:10
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
Definition: physics.h:62
Wall Model Look up table.
real2 compute_scaled_viscosity_coefficient(const std::array< real2, nstate > &primitive_soln) const
real2 compute_viscosity_coefficient_sutherlands_law(const std::array< real2, nstate > &primitive_soln) const
dealii::Tensor< 2, dim, real > compute_germano_identity_matrix_M_component(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
dealii::Tensor< 2, dim, real > compute_strain_rate_tensor_from_conservative(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Definition: physics.h:71
std::array< dealii::Tensor< 1, dim, real2 >, nstate > dissipative_flux_given_velocities_viscous_stress_tensor_and_heat_flux(const dealii::Tensor< 1, dim, real2 > &vel, const dealii::Tensor< 2, dim, real2 > &viscous_stress_tensor, const dealii::Tensor< 1, dim, real2 > &heat_flux) const
real compute_scaled_viscosity_coefficient_derivative_wrt_temperature_via_dfad(std::array< real, nstate > &conservative_soln) const
Main parameter class that contains the various other sub-parameter classes.
std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient) const override
dealii::Tensor< 2, dim, real > compute_deviatoric_strain_rate_tensor(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
real compute_strain_rate_tensor_based_dissipation_rate_from_integrated_viscosity_times_strain_rate_tensor_magnitude_sqr(const real integrated_viscosity_times_strain_rate_tensor_magnitude_sqr) const
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_soln, const real current_time) const override
Source term is zero or depends on manufactured solution.
real compute_vorticity_based_dissipation_rate_from_integrated_enstrophy(const real integrated_enstrophy) const
dealii::Tensor< 1, dim, real > compute_scaled_viscosity_gradient(const std::array< real, nstate > &primitive_soln, const dealii::Tensor< 1, dim, real > &temperature_gradient) const
NavierStokes(const Parameters::AllParameters *const parameters_input, const double ref_length, const double gamma_gas, const double mach_inf, const double angle_of_attack, const double side_slip_angle, const double prandtl_number, const double reynolds_number_inf, const bool use_constant_viscosity, const double constant_viscosity, const double temperature_inf=273.15, const double isothermal_wall_temperature=1.0, const thermal_boundary_condition_enum thermal_boundary_condition_type=thermal_boundary_condition_enum::adiabatic, std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function=nullptr, const two_point_num_flux_enum two_point_num_flux_type=two_point_num_flux_enum::KG, const bool has_nonzero_physical_source=false)
Constructor.
TwoPointNumericalFlux
Two point numerical flux type for split form.
void boundary_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const override
Evaluate the manufactured solution boundary conditions.
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const override
For post processing purposes, sets the interpretation of each computed quantity as either scalar or v...
real2 compute_viscosity_coefficient_sutherlands_law_from_temperature(const real2 temperature) const
const double isothermal_wall_temperature
Nondimensionalized isothermal wall temperature.
Definition: navier_stokes.h:58
const double side_slip_angle
Sideslip angle.
Definition: euler.h:123
real compute_pressure_dilatation(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
std::vector< std::string > post_get_names() const override
For post processing purposes, sets the base names (with no prefix or suffix) of the computed quantiti...
Euler equations. Derived from PhysicsBase.
Definition: euler.h:78
const double x_momentum_constant_source_term
Nondimensional constant source term for x-momentum.
real compute_deviatoric_strain_rate_tensor_based_dissipation_rate_from_integrated_viscosity_times_deviatoric_strain_rate_tensor_magnitude_sqr(const real integrated_viscosity_times_deviatoric_strain_rate_tensor_magnitude_sqr) const
dealii::Tensor< 1, dim, real2 > compute_velocities_parallel_to_wall(const std::array< real2, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real2 > &normal_vector) const
double temperature_inf
Non-dimensionalized temperature* at infinity. Should equal 1/density*(inf)
Definition: euler.h:130
real2 compute_wall_shear_stress(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient, const dealii::Tensor< 1, dim, real2 > &normal_vector) const
const double reynolds_number_inf
Farfield (free stream) Reynolds number.
Definition: navier_stokes.h:56
dealii::Tensor< 2, dim, real > compute_germano_idendity_matrix_L_component(const std::array< real, nstate > &conservative_soln) const
real compute_vorticity_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate vorticity magnitude squared from conservative variables and gradient of conservative variabl...
const double freestream_temperature
Freestream temperature. Units: [K].
Definition: navier_stokes.h:69
void boundary_wall_viscous_flux(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
dealii::Tensor< 1, dim, real2 > compute_temperature_gradient(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
const bool use_constant_viscosity
Flag to use constant viscosity instead of Sutherland&#39;s law of viscosity.
Definition: navier_stokes.h:50
dealii::Tensor< 1, dim, real2 > compute_wall_tangent_vector(const std::array< real2, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real2 > &normal_vector) const
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian_via_dfad(std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
const double ref_length
Reference length.
Definition: euler.h:105
const double prandtl_number
Prandtl number.
Definition: navier_stokes.h:54
virtual void boundary_face_values_viscous_flux(const int boundary_type, const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const override
Boundary face values for viscous fluxes.
dealii::Tensor< 2, dim, real2 > compute_viscous_stress_tensor(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
dealii::Vector< double > post_compute_derived_quantities_vector(const dealii::Vector< double > &uh, const std::vector< dealii::Tensor< 1, dim > > &duh, const std::vector< dealii::Tensor< 2, dim > > &dduh, const dealii::Tensor< 1, dim > &normals, const dealii::Point< dim > &evaluation_points) const override
For post processing purposes, computes all the quantities we write to the VTK files.
dealii::Tensor< 2, nstate, real > dissipative_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::Tensor< 1, dim, real > &normal) const
Navier-Stokes equations with constant physical source term for the turbulent channel flow case and wa...
dealii::Tensor< 1, 3, real2 > compute_vorticity(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
Evaluate vorticity from conservative variables and gradient of conservative variables.
dealii::Tensor< 1, dim, real2 > compute_heat_flux(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
real compute_incompressible_palinstrophy(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, 3 > &vorticity_gradient) const
Evaluate incompressible palinstrophy from conservative variables and gradient of vorticity.
real2 compute_viscosity_coefficient_from_temperature(const real2 temperature) const
dealii::UpdateFlags post_get_needed_update_flags() const override
For post processing purposes, updates the required flags for dealii.
real compute_dilatation(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
dealii::Tensor< 2, dim, real > compute_viscous_stress_tensor_from_conservative(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
real get_tensor_magnitude_sqr(const dealii::Tensor< 2, dim, real > &tensor) const
Returns the square of the magnitude of the tensor (i.e. the double dot product of a tensor with itsel...
ThermalBoundaryCondition
Types of thermal boundary conditions available.
real compute_viscosity_times_deviatoric_strain_rate_tensor_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate the square of the deviatoric strain-rate tensor magnitude (i.e. double dot product) from con...
dealii::Tensor< 2, dim, real2 > compute_viscous_stress_tensor_via_scaled_viscosity_and_strain_rate_tensor(const real2 scaled_viscosity_coefficient, const dealii::Tensor< 2, dim, real2 > &strain_rate_tensor) const
real compute_viscosity_times_strain_rate_tensor_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate the square of the strain-rate tensor magnitude (i.e. double dot product) from conservative v...
virtual std::array< real, nstate > dissipative_flux_dot_normal_on_adiabatic_boundary(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const dealii::types::global_dof_index cell_index, const dealii::Tensor< 1, dim, real > &normal)
std::unique_ptr< WallModelLookUpTable< real > > wall_model_look_up_table
Pointer to wall model look-up table object.
Navier-Stokes equations. Derived from Euler for the convective terms, which is derived from PhysicsBa...
Definition: navier_stokes.h:12
real2 compute_scaled_heat_conductivity(const std::array< real2, nstate > &primitive_soln) const
const double temperature_ratio
Ratio of Sutherland&#39;s temperature to freestream temperature.
Definition: navier_stokes.h:70
dealii::Tensor< 2, dim, real2 > extract_velocities_gradient_from_primitive_solution_gradient(const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
std::array< dealii::Tensor< 1, dim, real2 >, nstate > dissipative_flux_templated(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient) const
const double viscosity_coefficient_inf
Nondimensionalized viscosity coefficient at infinity.
Definition: navier_stokes.h:48
std::array< real, nstate > dissipative_source_term(const dealii::Point< dim, real > &pos) const
Dissipative flux contribution to the source term.
Navier-Stokes equations with constant physical source term for the turbulent channel flow case...