4 #include <boost/preprocessor/seq/for_each.hpp> 9 #include "reynolds_averaged_navier_stokes.h" 17 template <
int dim,
int nspecies,
int nstate,
typename real>
20 const double ref_length,
21 const double gamma_gas,
22 const double mach_inf,
23 const double angle_of_attack,
24 const double side_slip_angle,
25 const double prandtl_number,
26 const double reynolds_number_inf,
27 const bool use_constant_viscosity,
28 const double constant_viscosity,
29 const double turbulent_prandtl_number,
30 const double temperature_inf,
31 const double isothermal_wall_temperature,
35 :
ModelBase<dim,nspecies,nstate,real>(manufactured_solution_function)
36 , turbulent_prandtl_number(turbulent_prandtl_number)
37 , navier_stokes_physics(
std::make_unique <
NavierStokes<dim,nspecies,nstate_navier_stokes,real> > (
46 use_constant_viscosity,
49 isothermal_wall_temperature,
50 thermal_boundary_condition_type,
51 manufactured_solution_function,
52 two_point_num_flux_type))
54 static_assert(nstate>=dim+3,
"ModelBase::ReynoldsAveragedNavierStokesBase() should be created with nstate>=dim+3");
57 template <
int dim,
int nspecies,
int nstate,
typename real>
58 template<
typename real2>
61 const dealii::Tensor<1,3,real2> &vector)
const 63 real2 vector_magnitude_sqr;
64 if(std::is_same<real2,real>::value){
65 vector_magnitude_sqr = 0.0;
67 for (
int i=0; i<3; ++i) {
68 vector_magnitude_sqr += vector[i]*vector[i];
70 return vector_magnitude_sqr;
73 template <
int dim,
int nspecies,
int nstate,
typename real>
74 template<
typename real2>
77 const dealii::Tensor<2,dim,real2> &tensor)
const 79 real2 tensor_magnitude_sqr;
80 if(std::is_same<real2,real>::value){
81 tensor_magnitude_sqr = 0.0;
83 for (
int i=0; i<dim; ++i) {
84 for (
int j=0; j<dim; ++j) {
85 tensor_magnitude_sqr += tensor[i][j]*tensor[i][j];
88 return tensor_magnitude_sqr;
91 template <
int dim,
int nspecies,
int nstate,
typename real>
94 const std::array<real,nstate> &conservative_soln)
const 96 return convective_flux_templated<real>(conservative_soln);
99 template <
int dim,
int nspecies,
int nstate,
typename real>
100 template <
typename real2>
103 const std::array<real2,nstate> &conservative_soln)
const 106 const dealii::Tensor<1,dim,real2> vel = this->
navier_stokes_physics->template compute_velocities<real2>(conservative_soln_rans);
107 std::array<dealii::Tensor<1,dim,real2>,nstate> conv_flux;
110 conv_flux[flux_dim] = 0.0;
113 for (
int flux_dim=nstate_navier_stokes; flux_dim<nstate; ++flux_dim) {
114 for (
int velocity_dim=0; velocity_dim<dim; ++velocity_dim) {
115 conv_flux[flux_dim][velocity_dim] = conservative_soln[flux_dim]*vel[velocity_dim];
121 template <
int dim,
int nspecies,
int nstate,
typename real>
124 const std::array<real,nstate> &conservative_soln,
125 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
126 const dealii::types::global_dof_index cell_index)
const 128 return dissipative_flux_templated<real>(conservative_soln,solution_gradient,cell_index);
131 template <
int dim,
int nspecies,
int nstate,
typename real>
132 template <
typename real2>
135 const std::array<real2,nstate> &conservative_soln,
136 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
137 const dealii::types::global_dof_index )
const 144 const std::array<real2,nstate_navier_stokes> primitive_soln_rans = this->
navier_stokes_physics->convert_conservative_to_primitive_templated(conservative_soln_rans);
145 const std::array<dealii::Tensor<1,dim,real2>,
nstate_navier_stokes> primitive_soln_gradient_rans = this->
navier_stokes_physics->convert_conservative_gradient_to_primitive_gradient_templated(conservative_soln_rans, solution_gradient_rans);
150 const dealii::Tensor<1,dim,real2> vel = this->
navier_stokes_physics->extract_velocities_from_primitive(primitive_soln_rans);
152 dealii::Tensor<2,dim,real2> viscous_stress_tensor;
153 dealii::Tensor<1,dim,real2> heat_flux;
154 if constexpr(std::is_same<real2,real>::value){
158 else if constexpr(std::is_same<real2,FadType>::value){
163 std::cout <<
"ERROR in physics/reynolds_averaged_navier_stokes.cpp --> dissipative_flux_templated(): real2!=real || real2!=FadType)" << std::endl;
169 = this->
navier_stokes_physics->dissipative_flux_given_velocities_viscous_stress_tensor_and_heat_flux(vel,viscous_stress_tensor,heat_flux);
174 std::array<dealii::Tensor<1,dim,real2>,nstate> viscous_flux;
177 viscous_flux[flux_dim] = viscous_flux_rans[flux_dim];
179 for(
int flux_dim=nstate_navier_stokes; flux_dim<nstate; ++flux_dim)
187 template <
int dim,
int nspecies,
int nstate,
typename real>
190 const std::array<real,nstate> &solution,
191 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
192 const std::array<real,nstate> &,
193 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
195 const dealii::types::global_dof_index cell_index,
196 const dealii::Tensor<1,dim,real> &normal,
199 const std::array<dealii::Tensor<1,dim,real>,nstate>
dissipative_flux = dissipative_flux_templated<real>(solution,solution_gradient,cell_index);
202 dissipative_flux_dot_normal.fill(0.0);
204 for (
int s=0; s<nstate; s++) {
205 for (
int d=0; d<dim; ++d) {
206 dissipative_flux_dot_normal[s] += dissipative_flux[s][d] * normal[d];
213 template <
int dim,
int nspecies,
int nstate,
typename real>
214 template <
typename real2>
217 const std::array<real2,nstate> &conservative_soln)
const 219 std::array<real2,nstate_navier_stokes> conservative_soln_rans;
221 conservative_soln_rans[i] = conservative_soln[i];
224 return conservative_soln_rans;
227 template <
int dim,
int nspecies,
int nstate,
typename real>
228 template <
typename real2>
231 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient)
const 235 solution_gradient_rans[i] = solution_gradient[i];
238 return solution_gradient_rans;
241 template <
int dim,
int nspecies,
int nstate,
typename real>
242 template <
typename real2>
245 const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
246 const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model,
247 const std::array<dealii::Tensor<1,dim,real2>,
nstate_turbulence_model> &primitive_solution_gradient_turbulence_model)
const 249 std::array<real2,nstate_turbulence_model> effective_viscosity_turbulence_model;
251 if constexpr(std::is_same<real2,real>::value){
254 else if constexpr(std::is_same<real2,FadType>::value){
258 std::cout <<
"ERROR in physics/reynolds_averaged_navier_stokes.cpp --> dissipative_flux_turbulence_model(): real2!=real || real2!=FadType)" << std::endl;
265 for(
int j=0; j<dim; ++j){
266 viscous_flux_turbulence_model[i][j] = -effective_viscosity_turbulence_model[i]*primitive_solution_gradient_turbulence_model[i][j];
270 return viscous_flux_turbulence_model;
273 template <
int dim,
int nspecies,
int nstate,
typename real>
274 template <
typename real2>
277 const std::array<real2,nstate> &conservative_soln)
const 279 std::array<real2,nstate_turbulence_model> primitive_soln_turbulence_model;
281 primitive_soln_turbulence_model[i] = conservative_soln[
nstate_navier_stokes+i]/conservative_soln[0];
284 return primitive_soln_turbulence_model;
287 template <
int dim,
int nspecies,
int nstate,
typename real>
288 template <
typename real2>
291 const std::array<real2,nstate> &conservative_soln,
292 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient)
const 298 for(
int j=0; j<dim; ++j){
299 primitive_soln_gradient_turbulence_model[i][j] = (solution_gradient[
nstate_navier_stokes+i][j]-primitive_soln_turbulence_model[i]*solution_gradient[0][j])/conservative_soln[0];
303 return primitive_soln_gradient_turbulence_model;
306 template <
int dim,
int nspecies,
int nstate,
typename real>
309 const std::array<real,nstate> &conservative_soln2)
const 311 std::array<real,nstate_turbulence_model> mean_turbulence_property;
317 mean_turbulence_property[i] = (primitive_soln1_turbulence_model[i]+primitive_soln2_turbulence_model[i])/2.0;
320 return mean_turbulence_property;
323 template <
int dim,
int nspecies,
int nstate,
typename real>
326 const std::array<real,nstate> &conservative_soln,
327 const dealii::Tensor<1,dim,real> &normal)
const 330 std::array<real,nstate> eig;
331 const real vel_dot_n = this->
navier_stokes_physics->convective_eigenvalues(conservative_soln_rans,normal)[0];
335 for (
int i=nstate_navier_stokes; i<nstate; ++i) {
341 template <
int dim,
int nspecies,
int nstate,
typename real>
347 const dealii::Tensor<1,dim,real> vel = this->
navier_stokes_physics->template compute_velocities<real>(conservative_soln_rans);
351 const real max_eig = sqrt(vel2);
356 template <
int dim,
int nspecies,
int nstate,
typename real>
359 const std::array<real,nstate> &conservative_soln,
360 const dealii::Tensor<1,dim,real> &normal)
const 364 const dealii::Tensor<1,dim,real> vel = this->
navier_stokes_physics->template compute_velocities<real>(conservative_soln_rans);
366 real vel_dot_n = 0.0;
367 for (
int d=0;d<dim;++d) { vel_dot_n += vel[d]*normal[d]; };
368 const real max_normal_eig = sqrt(vel_dot_n*vel_dot_n);
370 return max_normal_eig;
373 template <
int dim,
int nspecies,
int nstate,
typename real>
376 const dealii::Point<dim,real> &pos,
377 const std::array<real,nstate> &conservative_soln,
378 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
379 const dealii::types::global_dof_index )
const 381 std::array<real,nstate> physical_source;
384 return physical_source;
387 template <
int dim,
int nspecies,
int nstate,
typename real>
390 const dealii::Point<dim,real> &pos,
391 const std::array<real,nstate> &,
393 const dealii::types::global_dof_index cell_index)
const 399 for (
int s=0; s<nstate; ++s)
401 source_term[s] = conv_source_term[s] + diss_source_term[s] - phys_source_source_term[s];
407 template <
int dim,
int nspecies,
int nstate,
typename real>
410 const dealii::Point<dim,real> &pos,
411 const std::array<real,nstate> &,
412 const dealii::types::global_dof_index cell_index)
const 417 for (
int s=0; s<nstate; ++s)
419 convective_dissipative_source_term[s] = conv_source_term[s] + diss_source_term[s];
425 template<
typename real>
426 double getValue(
const real &x) {
427 if constexpr(std::is_same<real,double>::value) {
430 else if constexpr(std::is_same<real,FadType>::value) {
433 else if constexpr(std::is_same<real,FadFadType>::value) {
434 return x.val().val();
436 else if constexpr(std::is_same<real,RadType>::value) {
439 else if(std::is_same<real,RadFadType>::value) {
440 return x.value().value();
444 template <
int dim,
int nspecies,
int nstate,
typename real>
447 const std::array<real,nstate> &conservative_soln,
448 const dealii::Tensor<1,dim,real> &normal)
const 453 std::array<adtype,nstate> AD_conservative_soln;
454 for (
int s=0; s<nstate; ++s) {
455 adtype ADvar(nstate, s, getValue<real>(conservative_soln[s]));
456 AD_conservative_soln[s] = ADvar;
460 std::array<dealii::Tensor<1,dim,adtype>,nstate> AD_convective_flux = convective_flux_templated<adtype>(AD_conservative_soln);
463 dealii::Tensor<2,nstate,real> jacobian;
464 for (
int sp=0; sp<nstate; ++sp) {
466 for (
int s=0; s<nstate; ++s) {
467 jacobian[s][sp] = 0.0;
468 for (
int d=0;d<dim;++d) {
470 jacobian[s][sp] += AD_convective_flux[s][d].dx(sp)*normal[d];
477 template <
int dim,
int nspecies,
int nstate,
typename real>
480 const std::array<real,nstate> &conservative_soln,
481 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
482 const dealii::Tensor<1,dim,real> &normal,
483 const dealii::types::global_dof_index cell_index)
const 488 std::array<adtype,nstate> AD_conservative_soln;
489 std::array<dealii::Tensor<1,dim,adtype>,nstate> AD_solution_gradient;
490 for (
int s=0; s<nstate; ++s) {
491 adtype ADvar(nstate, s, getValue<real>(conservative_soln[s]));
492 AD_conservative_soln[s] = ADvar;
493 for (
int d=0;d<dim;++d) {
494 AD_solution_gradient[s][d] = getValue<real>(solution_gradient[s][d]);
499 std::array<dealii::Tensor<1,dim,adtype>,nstate> AD_dissipative_flux = dissipative_flux_templated<adtype>(AD_conservative_soln, AD_solution_gradient, cell_index);
502 dealii::Tensor<2,nstate,real> jacobian;
503 for (
int sp=0; sp<nstate; ++sp) {
505 for (
int s=0; s<nstate; ++s) {
506 jacobian[s][sp] = 0.0;
507 for (
int d=0;d<dim;++d) {
509 jacobian[s][sp] += AD_dissipative_flux[s][d].dx(sp)*normal[d];
516 template <
int dim,
int nspecies,
int nstate,
typename real>
519 const std::array<real,nstate> &conservative_soln,
520 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
521 const dealii::Tensor<1,dim,real> &normal,
522 const int d_gradient,
523 const dealii::types::global_dof_index cell_index)
const 528 std::array<adtype,nstate> AD_conservative_soln;
529 std::array<dealii::Tensor<1,dim,adtype>,nstate> AD_solution_gradient;
530 for (
int s=0; s<nstate; ++s) {
531 AD_conservative_soln[s] = getValue<real>(conservative_soln[s]);
532 for (
int d=0;d<dim;++d) {
534 adtype ADvar(nstate, s, getValue<real>(solution_gradient[s][d]));
535 AD_solution_gradient[s][d] = ADvar;
538 AD_solution_gradient[s][d] = getValue<real>(solution_gradient[s][d]);
544 std::array<dealii::Tensor<1,dim,adtype>,nstate> AD_dissipative_flux = dissipative_flux_templated<adtype>(AD_conservative_soln, AD_solution_gradient, cell_index);
547 dealii::Tensor<2,nstate,real> jacobian;
548 for (
int sp=0; sp<nstate; ++sp) {
550 for (
int s=0; s<nstate; ++s) {
551 jacobian[s][sp] = 0.0;
552 for (
int d=0;d<dim;++d) {
554 jacobian[s][sp] += AD_dissipative_flux[s][d].dx(sp)*normal[d];
561 template <
int dim,
int nspecies,
int nstate,
typename real>
564 const dealii::Point<dim,real> &pos)
const 566 std::array<real,nstate> manufactured_solution;
567 for (
int s=0; s<nstate; ++s) {
570 assert(manufactured_solution[s] > 0);
573 return manufactured_solution;
576 template <
int dim,
int nspecies,
int nstate,
typename real>
579 const dealii::Point<dim,real> &pos)
const 581 std::vector<dealii::Tensor<1,dim,real>> manufactured_solution_gradient_dealii(nstate);
583 std::array<dealii::Tensor<1,dim,real>,nstate> manufactured_solution_gradient;
584 for (
int d=0;d<dim;++d) {
585 for (
int s=0; s<nstate; ++s) {
586 manufactured_solution_gradient[s][d] = manufactured_solution_gradient_dealii[s][d];
589 return manufactured_solution_gradient;
592 template <
int dim,
int nspecies,
int nstate,
typename real>
595 const dealii::Point<dim,real> &pos)
const 603 dealii::Tensor<1,nstate,real> convective_flux_divergence;
604 for (
int d=0;d<dim;++d) {
605 dealii::Tensor<1,dim,real> normal;
610 for (
int sr = 0; sr < nstate; ++sr) {
611 real jac_grad_row = 0.0;
612 for (
int sc = 0; sc < nstate; ++sc) {
613 jac_grad_row += jacobian[sr][sc]*manufactured_solution_gradient[sc][d];
615 convective_flux_divergence[sr] += jac_grad_row;
619 for (
int s=0; s<nstate; ++s) {
620 convective_source_term_computed_from_manufactured_solution[s] = convective_flux_divergence[s];
626 template <
int dim,
int nspecies,
int nstate,
typename real>
629 const dealii::Point<dim,real> &pos,
630 const dealii::types::global_dof_index cell_index)
const 643 std::array<dealii::SymmetricTensor<2,dim,real>,nstate> manufactured_solution_hessian;
644 for (
int s=0; s<nstate; ++s) {
646 for (
int dr=0;dr<dim;++dr) {
647 for (
int dc=0;dc<dim;++dc) {
648 manufactured_solution_hessian[s][dr][dc] = hessian[dr][dc];
655 dealii::Tensor<1,nstate,real> dissipative_flux_divergence;
656 for (
int d=0;d<dim;++d) {
657 dealii::Tensor<1,dim,real> normal;
662 std::array<dealii::Tensor<2,nstate,real>,dim> jacobian_wrt_gradient;
663 for (
int d_gradient=0;d_gradient<dim;++d_gradient) {
669 for (
int sr = 0; sr < nstate; ++sr) {
670 for (
int sc = 0; sc < nstate; ++sc) {
671 jacobian_wrt_gradient[d_gradient][sr][sc] = jacobian_wrt_gradient_component[sr][sc];
677 for (
int sr = 0; sr < nstate; ++sr) {
678 real jac_grad_row = 0.0;
679 for (
int sc = 0; sc < nstate; ++sc) {
680 jac_grad_row += jacobian[sr][sc]*manufactured_solution_gradient[sc][d];
683 for (
int d_gradient=0;d_gradient<dim;++d_gradient) {
684 jac_grad_row += jacobian_wrt_gradient[d_gradient][sr][sc]*manufactured_solution_hessian[sc][d_gradient][d];
687 dissipative_flux_divergence[sr] += jac_grad_row;
691 for (
int s=0; s<nstate; ++s) {
692 dissipative_source_term_computed_from_manufactured_solution[s] = dissipative_flux_divergence[s];
698 template <
int dim,
int nspecies,
int nstate,
typename real>
701 const dealii::Point<dim,real> &pos,
702 const dealii::types::global_dof_index cell_index)
const 710 std::array<real,nstate> physical_source_source_term_computed_from_manufactured_solution;
711 for (
int i=0;i<nstate;++i){
712 physical_source_source_term_computed_from_manufactured_solution =
physical_source_term(pos, manufactured_solution, manufactured_solution_gradient, cell_index);
715 return physical_source_source_term_computed_from_manufactured_solution;
718 template <
int dim,
int nspecies,
int nstate,
typename real>
721 const dealii::Point<dim, real> &pos,
722 const dealii::Tensor<1,dim,real> &,
723 const std::array<real,nstate> &,
724 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
725 std::array<real,nstate> &soln_bc,
726 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const 729 std::array<real,nstate> boundary_values;
730 std::array<dealii::Tensor<1,dim,real>,nstate> boundary_gradients;
731 for (
int i=0; i<nstate; ++i) {
736 soln_bc[istate] = boundary_values[istate];
737 soln_grad_bc[istate] = boundary_gradients[istate];
744 #if PHILIP_SPECIES==1 746 #define POSSIBLE_TYPES (double)(FadType)(RadType)(FadFadType)(RadFadType) 749 #define INSTANTIATE_TYPES(r, data, type) \ 750 template class ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >; \ 751 template type ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::get_tensor_magnitude_sqr< type >(const dealii::Tensor<2,PHILIP_DIM,type> &tensor) const; \ 752 template type ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::get_vector_magnitude_sqr< type >(const dealii::Tensor<1,3,type> &vector) const; \ 753 template std::array<type,PHILIP_DIM+2> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::extract_rans_conservative_solution< type >(const std::array<type,PHILIP_DIM+3> &conservative_soln) const; \ 754 template std::array<dealii::Tensor<1,PHILIP_DIM, type >,PHILIP_DIM+2> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::extract_rans_solution_gradient< type >(const std::array<dealii::Tensor<1,PHILIP_DIM, type >,PHILIP_DIM+3> &solution_gradient) const; \ 755 template std::array<type,1> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::convert_conservative_to_primitive_turbulence_model< type >(const std::array<type,PHILIP_DIM+3> &conservative_soln) const; \ 756 template std::array<dealii::Tensor<1,PHILIP_DIM, type>,1> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::convert_conservative_gradient_to_primitive_gradient_turbulence_model< type >(const std::array<type, PHILIP_DIM+3> &conservative_soln, const std::array<dealii::Tensor<1,PHILIP_DIM, type >,PHILIP_DIM+3> &solution_gradient) const; 757 BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_TYPES, _, POSSIBLE_TYPES)
760 #undef POSSIBLE_TYPES 761 #define POSSIBLE_TYPES (double)(RadType)(FadFadType)(RadFadType) 763 #define INSTANTIATE_FADTYPES(r, data, type) \ 764 template FadType ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::get_tensor_magnitude_sqr< FadType >(const dealii::Tensor<2,PHILIP_DIM, FadType> &tensor) const; \ 765 template FadType ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::get_vector_magnitude_sqr< FadType >(const dealii::Tensor<1,3,FadType> &vector) const; \ 766 template std::array<FadType, PHILIP_DIM+2> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::extract_rans_conservative_solution< FadType >(const std::array<FadType, PHILIP_DIM+3> &conservative_soln) const; \ 767 template std::array<dealii::Tensor<1,PHILIP_DIM, FadType>,PHILIP_DIM+2> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::extract_rans_solution_gradient< FadType >(const std::array<dealii::Tensor<1,PHILIP_DIM, FadType>,PHILIP_DIM+3> &solution_gradient) const; \ 768 template std::array<FadType, 1> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::convert_conservative_to_primitive_turbulence_model< FadType >(const std::array<FadType, PHILIP_DIM+3> &conservative_soln) const; \ 769 template std::array<dealii::Tensor<1,PHILIP_DIM, FadType>,1> ReynoldsAveragedNavierStokesBase < PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+3, type >::convert_conservative_gradient_to_primitive_gradient_turbulence_model< FadType >(const std::array<FadType, PHILIP_DIM+3> &conservative_soln, const std::array<dealii::Tensor<1,PHILIP_DIM, FadType>,PHILIP_DIM+3> &solution_gradient) const; 770 BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_FADTYPES, _, POSSIBLE_TYPES)
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
Convective eigenvalues of the additional models' PDEs.
virtual dealii::Tensor< 2, dim, real > compute_Reynolds_stress_tensor(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds stress tensor, (tau^reynolds)*.
virtual dealii::Tensor< 2, dim, FadType > compute_Reynolds_stress_tensor_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, FadType >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds stress tensor, (tau^reynolds)* (Automatic Differentiation Type: FadType) ...
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const real current_time, const dealii::types::global_dof_index cell_index) const
Source term for manufactured solution functions.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Additional convective flux of RANS + convective flux of turbulence model.
std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const override
Physical source term.
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
std::array< real, nstate > convective_dissipative_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const dealii::types::global_dof_index cell_index) const
Convective and dissipative source term for manufactured solution functions.
real2 get_tensor_magnitude_sqr(const dealii::Tensor< 2, dim, real2 > &tensor) const
Returns the square of the magnitude of the tensor (i.e. the double dot product of a tensor with itsel...
Manufactured solution used for grid studies to check convergence orders.
virtual std::array< real, nstate > compute_production_dissipation_cross_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient) const =0
Physical source term (production, dissipation source terms and source term with cross derivatives) in...
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
ReynoldsAveragedNavierStokesBase(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 turbulent_prandtl_number, 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)
Constructor.
std::array< real, nstate > physical_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::types::global_dof_index cell_index) const
static const int nstate_turbulence_model
Number of PDEs for RANS turbulence model.
Files for the baseline physics.
std::unique_ptr< NavierStokes< dim, nspecies, nstate_navier_stokes, real > > navier_stokes_physics
Pointer to Navier-Stokes physics object.
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 dealii::types::global_dof_index cell_index) const
Physics model additional terms and equations to the baseline physics.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > convective_flux_templated(const std::array< real2, nstate > &conservative_soln) const
Templated additional convective flux.
virtual std::array< real, nstate_turbulence_model > compute_effective_viscosity_turbulence_model(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized effective (total) viscosities for the turbulence model.
Main parameter class that contains the various other sub-parameter classes.
std::array< dealii::Tensor< 1, dim, real >, nstate > get_manufactured_solution_gradient(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
real2 get_vector_magnitude_sqr(const dealii::Tensor< 1, 3, real2 > &vector) const
Returns the square of the magnitude of the vector.
TwoPointNumericalFlux
Two point numerical flux type for split form.
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) const override
Additional viscous flux of RANS + viscous flux of turbulence model dot normal.
virtual dealii::Tensor< 1, dim, real > compute_Reynolds_heat_flux(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds heat flux, (q^reynolds)*.
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::array< dealii::Tensor< 1, dim, real2 >, nstate-(dim+2)> convert_conservative_gradient_to_primitive_gradient_turbulence_model(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient) const
Reynolds-Averaged Navier-Stokes (RANS) equations. Derived from Navier-Stokes for modifying the stress...
static const int nstate_navier_stokes
Number of PDEs for RANS equations.
std::array< real, nstate > convective_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos) const
real max_convective_normal_eigenvalue(const std::array< real, nstate > &soln, const dealii::Tensor< 1, dim, real > &normal) const
Maximum convective normal eigenvalue (used in Lax-Friedrichs) of the additional models' PDEs...
std::array< dealii::Tensor< 1, dim, real2 >, nstate-(dim+2)> dissipative_flux_turbulence_model(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model, const std::array< dealii::Tensor< 1, dim, real2 >, nstate_turbulence_model > &primitive_solution_gradient_turbulence_model) const
Templated Additional viscous flux of RANS + viscous flux of turbulence model.
std::array< real2, nstate-(dim+2)> convert_conservative_to_primitive_turbulence_model(const std::array< real2, nstate > &conservative_soln) const
virtual dealii::Tensor< 1, dim, FadType > compute_Reynolds_heat_flux_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, FadType >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds heat flux, (q^reynolds)* (Automatic Differentiation Type: FadType) ...
std::array< real, nstate > get_manufactured_solution_value(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
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 dealii::types::global_dof_index cell_index) const
Templated additional dissipative (i.e. viscous) flux.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue of the additional models' PDEs.
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 dealii::types::global_dof_index cell_index) const
Additional viscous flux of RANS + viscous flux of turbulence model.
virtual std::array< FadType, nstate_turbulence_model > compute_effective_viscosity_turbulence_model_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized effective (total) viscosities for the turbulence model (Automatic Differentiation ...
ThermalBoundaryCondition
Types of thermal boundary conditions available.
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 dealii::types::global_dof_index cell_index) const
std::array< dealii::Tensor< 1, dim, real2 >, dim+2 > extract_rans_solution_gradient(const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient) const
Returns the conservative solutions gradient of Reynolds-averaged Navier-Stokes equations (without add...
std::array< real, nstate > dissipative_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::types::global_dof_index cell_index) const
std::array< real2, dim+2 > extract_rans_conservative_solution(const std::array< real2, nstate > &conservative_soln) const
Returns the conservative solutions of Reynolds-averaged Navier-Stokes equations (without additional R...
Navier-Stokes equations. Derived from Euler for the convective terms, which is derived from PhysicsBa...
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
std::array< real, nstate-(dim+2)> compute_mean_turbulence_property(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
Mean turbulence properties given two sets of conservative solutions.