1 #include <deal.II/base/function.h> 2 #include "initial_condition_function.h" 4 #include "physics/physics_factory.h" 11 template <
int dim,
int nspecies,
int nstate,
typename real>
14 : dealii::Function<dim,real>(nstate)
22 template <
int dim,
int nspecies,
int nstate,
typename real>
26 const double channel_friction_velocity_reynolds_number_,
27 const double domain_length_x_,
28 const double domain_length_y_,
29 const double domain_length_z_)
31 , navier_stokes_physics(navier_stokes_physics_)
32 , channel_friction_velocity_reynolds_number(channel_friction_velocity_reynolds_number_)
33 , domain_length_x(domain_length_x_)
34 , domain_length_y(domain_length_y_)
35 , domain_length_z(domain_length_z_)
36 , channel_height(domain_length_y)
37 , half_channel_height(0.5*channel_height)
40 template <
int dim,
int nspecies,
int nstate,
typename real>
46 real dist_from_wall = half_channel_height;
52 return dist_from_wall;
55 template <
int dim,
int nspecies,
int nstate,
typename real>
57 ::x_velocity(
const dealii::Point<dim,real> &point,
const real ,
const real )
const 61 const real x_velocity = (15.0/8.0)*pow(1.0-pow(point[1]/half_channel_height,2.0),2.0);
65 template <
int dim,
int nspecies,
int nstate,
typename real>
71 const real x_loc = 0.0;
72 const real y_loc = 0.0;
73 const real pi_val = 3.141592653589793238;
74 const real beta = 4.0*pi_val;
75 const real x_scale = domain_length_x;
76 const real y_scale = domain_length_y;
77 const real z_scale = domain_length_z;
78 const real half_domain_length_z = 0.5*domain_length_z;
81 const real x = point[0];
82 const real y = point[1];
83 const real z = point[2];
88 const real F = C*exp(-pow((x-x_loc)/x_scale,2.0))*exp(-pow((y-y_loc)/y_scale,2.0))*cos(beta*(z+half_domain_length_z)/z_scale);
92 template <
int dim,
int nspecies,
int nstate,
typename real>
94 ::value(
const dealii::Point<dim,real> &point,
const unsigned int istate)
const 96 std::array<real,nstate> primitive_soln;
102 const real density = 1.0;
103 primitive_soln[0] = density;
109 const real temperature = navier_stokes_physics.isothermal_wall_temperature;
110 primitive_soln[1] = this->x_velocity(point,density,temperature);
115 primitive_soln[2] = y_velocity(point);
121 primitive_soln[3] = 0.0;
126 primitive_soln[4] = navier_stokes_physics.compute_pressure_from_density_temperature(density, temperature);
131 std::array<real,nstate> conservative_soln = navier_stokes_physics.convert_primitive_to_conservative(primitive_soln);
133 return conservative_soln[istate];
139 template <
int dim,
int nspecies,
int nstate,
typename real>
143 const double channel_friction_velocity_reynolds_number_,
144 const double domain_length_x_,
145 const double domain_length_y_,
146 const double domain_length_z_)
148 navier_stokes_physics_,
149 channel_friction_velocity_reynolds_number_,
155 template <
int dim,
int nspecies,
int nstate,
typename real>
157 ::x_velocity(
const dealii::Point<dim,real> &point,
const real density,
const real temperature)
const 161 const real dist_from_wall = this->get_distance_from_wall(point);
164 const real viscosity_coefficient = this->navier_stokes_physics.compute_viscosity_coefficient_from_temperature(temperature);
165 const real friction_velocity = viscosity_coefficient*this->channel_friction_velocity_reynolds_number/(density*this->half_channel_height*this->navier_stokes_physics.reynolds_number_inf);
175 const real kappa = 0.38;
177 const real y_plus = this->navier_stokes_physics.reynolds_number_inf*density*friction_velocity*dist_from_wall/viscosity_coefficient;
178 const real u_plus = (1.0/kappa)*log(1.0+kappa*y_plus) + (C - (1.0/kappa)*log(kappa))*(1.0 - exp(-y_plus/11.0) - (y_plus/11.0)*exp(-y_plus/3.0));
179 const real x_velocity = u_plus*friction_velocity;
186 template <
int dim,
int nspecies,
int nstate,
typename real>
190 const double channel_friction_velocity_reynolds_number_,
191 const double domain_length_x_,
192 const double domain_length_y_,
193 const double domain_length_z_)
195 navier_stokes_physics_,
196 channel_friction_velocity_reynolds_number_,
202 template <
int dim,
int nspecies,
int nstate,
typename real>
207 const real y_velocity = 0.0;
214 template <
int dim,
int nspecies,
int nstate,
typename real>
219 , gamma_gas(param->euler_param.gamma_gas)
220 , mach_inf(param->euler_param.mach_inf)
221 , mach_inf_sqr(mach_inf*mach_inf)
226 parameters_euler.
pde_type = Parameters::AllParameters::PartialDifferentialEquation::euler;
231 template <
int dim,
int nspecies,
int nstate,
typename real>
234 const dealii::Point<dim,real> &point,
const unsigned int istate)
const 238 std::array<real,nstate> soln_primitive;
239 for (
int i=0; i<nstate; ++i){
240 soln_primitive[i] = primitive_value(point,i);
242 const std::array<real,nstate> soln_conservative = this->euler_physics->convert_primitive_to_conservative(soln_primitive);
243 value = soln_conservative[istate];
248 template <
int dim,
int nspecies,
int nstate,
typename real>
250 ::value(
const dealii::Point<dim,real> &point,
const unsigned int istate)
const 253 value = convert_primitive_to_conversative_value(point,istate);
260 template <
int dim,
int nspecies,
int nstate,
typename real>
267 template <
int dim,
int nspecies,
int nstate,
typename real>
273 if constexpr(dim == 3) {
274 const real x = point[0], y = point[1], z = point[2];
278 value = this->density(point);
282 value = sin(x)*cos(y)*cos(z);
286 value = -cos(x)*sin(y)*cos(z);
294 value = 1.0/(this->gamma_gas*this->mach_inf_sqr) + (1.0/16.0)*(cos(2.0*x)+cos(2.0*y))*(cos(2.0*z)+2.0);
300 template <
int dim,
int nspecies,
int nstate,
typename real>
314 template <
int dim,
int nspecies,
int nstate,
typename real>
321 template <
int dim,
int nspecies,
int nstate,
typename real>
328 value = this->primitive_value(point, 4);
329 value *= this->gamma_gas*this->mach_inf_sqr;
336 template <
int dim,
int nspecies,
int nstate,
typename real>
340 const real extremum_vorticity_value_,
341 const real dipole_radius,
342 const real dipole_axis_angle_wrt_x_axis_in_degrees)
344 , extremum_vorticity_value(extremum_vorticity_value_)
346 , x1(dipole_radius*cos(dipole_axis_angle_wrt_x_axis_in_degrees*(3.141592653589793238/180.0)))
347 , y1(dipole_radius*sin(dipole_axis_angle_wrt_x_axis_in_degrees*(3.141592653589793238/180.0)))
348 , x2(-dipole_radius*cos(dipole_axis_angle_wrt_x_axis_in_degrees*(3.141592653589793238/180.0)))
349 , y2(-dipole_radius*sin(dipole_axis_angle_wrt_x_axis_in_degrees*(3.141592653589793238/180.0)))
352 template <
int dim,
int nspecies,
int nstate,
typename real>
358 if constexpr(dim == 2) {
359 const real x = point[0], y = point[1];
361 const real r1 = sqrt((x-this->x1)*(x-this->x1) + (y-this->y1)*(y-this->y1));
362 const real r2 = sqrt((x-this->x2)*(x-this->x2) + (y-this->y2)*(y-this->y2));
370 value = -0.5*abs(extremum_vorticity_value)*(y-this->y1)*exp(-(r1/this->r0)*(r1/this->r0))
371 +0.5*abs(extremum_vorticity_value)*(y-this->y2)*exp(-(r2/this->r0)*(r2/this->r0));
375 value = 0.5*abs(extremum_vorticity_value)*(x-this->x1)*exp(-(r1/this->r0)*(r1/this->r0))
376 -0.5*abs(extremum_vorticity_value)*(x-this->x2)*exp(-(r2/this->r0)*(r2/this->r0));
380 value = 1.0/(this->gamma_gas*this->mach_inf_sqr)
381 - (1.0/16.0)*pow(this->extremum_vorticity_value*this->r0,2.0)*(exp(-2.0*(r1/this->r0)*(r1/this->r0))+exp(-2.0*(r2/this->r0)*(r2/this->r0)));
390 template <
int dim,
int nspecies,
int nstate,
typename real>
404 template <
int dim,
int nspecies,
int nstate,
typename real>
418 template <
int dim,
int nspecies,
int nstate,
typename real>
426 template <
int dim,
int nspecies,
int nstate,
typename real>
428 ::value(
const dealii::Point<dim,real> &,
const unsigned int )
const 437 template <
int dim,
int nspecies,
int nstate,
typename real>
445 template <
int dim,
int nspecies,
int nstate,
typename real>
447 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 450 if(point[0] >= 0 && point[0] <= 0.25){
451 value = sin(4*dealii::numbers::PI*point[0]);
460 template <
int dim,
int nspecies,
int nstate,
typename real>
468 template <
int dim,
int nspecies,
int nstate,
typename real>
470 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 473 if constexpr(dim >= 1)
474 value *= cos(dealii::numbers::PI*point[0]);
475 if constexpr(dim >= 2)
476 value *= cos(dealii::numbers::PI*point[1]);
477 if constexpr(dim == 3)
478 value *= cos(dealii::numbers::PI*point[2]);
486 template <
int dim,
int nspecies,
int nstate,
typename real>
494 template <
int dim,
int nspecies,
int nstate,
typename real>
496 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 499 if constexpr(dim >= 1)
500 value *= sin(dealii::numbers::PI*point[0]);
501 if constexpr(dim >= 2)
502 value *= sin(dealii::numbers::PI*point[1]);
503 if constexpr(dim == 3)
504 value *= sin(dealii::numbers::PI*point[2]);
513 template <
int dim,
int nspecies,
int nstate,
typename real>
521 template <
int dim,
int nspecies,
int nstate,
typename real>
523 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 526 if constexpr(dim >= 1)
527 value *= exp(-20.0*point[0]*point[0]);
528 if constexpr(dim >= 2)
529 value *= exp(-20.0*point[1]*point[1]);
530 if constexpr(dim == 3)
531 value *= exp(-20.0*point[2]*point[2]);
539 template <
int dim,
int nspecies,
int nstate,
typename real>
547 template <
int dim,
int nspecies,
int nstate,
typename real>
549 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 552 if constexpr(dim >= 1)
553 value *= sin(2.0*dealii::numbers::PI*point[0]);
554 if constexpr(dim >= 2)
555 value *= sin(2.0*dealii::numbers::PI*point[1]);
556 if constexpr(dim == 3)
557 value *= sin(2.0*dealii::numbers::PI*point[2]);
565 template <
int dim,
int nspecies,
int nstate,
typename real>
573 template <
int dim,
int nspecies,
int nstate,
typename real>
575 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 578 if constexpr(dim >= 1)
579 value *= sin(dealii::numbers::PI*point[0]);
580 if constexpr(dim >= 2)
581 value *= sin(dealii::numbers::PI*point[1]);
582 if constexpr(dim == 3)
583 value *= sin(dealii::numbers::PI*point[2]);
591 template <
int dim,
int nspecies,
int nstate,
typename real>
599 template <
int dim,
int nspecies,
int nstate,
typename real>
601 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 604 if constexpr(dim >= 1)
605 value *= sin(dealii::numbers::PI*point[0]);
606 if constexpr(dim >= 2)
607 value *= sin(dealii::numbers::PI*point[1]);
608 if constexpr(dim == 3)
609 value *= sin(dealii::numbers::PI*point[2]);
619 template <
int dim,
int nspecies,
int nstate,
typename real>
627 template <
int dim,
int nspecies,
int nstate,
typename real>
629 ::value(
const dealii::Point<dim,real> &point,
const unsigned int )
const 632 real pi = dealii::numbers::PI;
633 if(point[0] >= 0.0 && point[0] <= 2.0){
634 value = sin(2*pi*point[0]/2.0);
642 template <
int dim,
int nspecies,
int nstate,
typename real>
654 template <
int dim,
int nspecies,
int nstate,
typename real>
656 ::value(
const dealii::Point<dim,real> &point,
const unsigned int istate)
const 659 const double pi = dealii::numbers::PI;
660 const double gam = 1.4;
661 const double M_infty = sqrt(2/gam);
663 const double sigma = 1;
664 const double beta = M_infty * 5 * sqrt(2.0)/4.0/pi * exp(1.0/2.0);
665 const double alpha = pi/4;
668 const double x0 = 0.0;
669 const double y0 = 0.0;
670 const double x = point[0] - x0;
671 const double y = point[1] - y0;
673 const double Omega = beta * exp(-0.5/sigma/sigma* (x/R * x/R + y/R * y/R));
674 const double delta_Ux = -y/R * Omega;
675 const double delta_Uy = x/R * Omega;
676 const double delta_T = -(gam-1.0)/2.0 * Omega * Omega;
679 std::array<real,nstate> soln_primitive;
680 soln_primitive[0] = pow((1 + delta_T), 1.0/(gam-1.0));
681 soln_primitive[1] = M_infty * cos(alpha) + delta_Ux;
682 soln_primitive[2] = M_infty * sin(alpha) + delta_Uy;
684 soln_primitive[3] = 0;
686 soln_primitive[nstate-1] = 1.0/gam*pow(1+delta_T, gam/(gam-1.0));
688 const std::array<real,nstate> soln_conservative = this->euler_physics->convert_primitive_to_conservative(soln_primitive);
689 return soln_conservative[istate];
699 template <
int dim,
int nspecies,
int nstate,
typename real>
704 , atwood_number(param->flow_solver_param.atwood_number)
712 template <
int dim,
int nspecies,
int nstate,
typename real>
714 ::value(
const dealii::Point<dim,real> &point,
const unsigned int istate)
const 716 const double pi = dealii::numbers::PI;
718 const double B = 0.5 * (tanh(15*point[1] + 7.5) - tanh(15*point[1] - 7.5));
720 const double rho1 = 0.5;
721 const double rho2 = rho1 * (1 + atwood_number) / (1 - atwood_number);
723 std::array<real,nstate> soln_primitive;
724 soln_primitive[0] = rho1 + B * (rho2-rho1);
725 soln_primitive[nstate-1] = 1;
726 soln_primitive[1] = B - 0.5;
727 soln_primitive[2] = 0.1 * sin(2 * pi * point[0]);
729 const std::array<real,nstate> soln_conservative = this->euler_physics->convert_primitive_to_conservative(soln_primitive);
730 return soln_conservative[istate];
736 template <
int dim,
int nspecies,
int nstate,
typename real>
744 parameters_real_gas.
pde_type = Parameters::AllParameters::PartialDifferentialEquation::real_gas;
749 template <
int dim,
int nspecies,
int nstate,
typename real>
752 const dealii::Point<dim, real>& point,
const unsigned int istate)
const 755 std::array<real, nstate> soln_primitive;
757 for(
int istate = 0; istate < nstate; ++istate) {
758 soln_primitive[istate] = primitive_value(point, istate);
761 const std::array<real, nstate> soln_conservative = this->real_gas_physics->convert_primitive_to_conservative(soln_primitive);
762 value = soln_conservative[istate];
767 template <
int dim,
int nspecies,
int nstate,
typename real>
769 ::value(
const dealii::Point<dim, real>& point,
const unsigned int istate)
const 772 value = convert_primitive_to_conversative_value(point, istate);
781 template <
int dim,
int nspecies,
int nstate,
typename real>
788 template <
int dim,
int nspecies,
int nstate,
typename real>
793 if constexpr (dim == 1 && nstate == (dim+2)) {
794 const real x = point[0];
800 if (istate == nstate - 1) {
809 if (istate == nstate - 1) {
823 template <
int dim,
int nspecies,
int nstate,
typename real>
830 template <
int dim,
int nspecies,
int nstate,
typename real>
835 if constexpr (dim == 1 && nstate == (dim + 2)) {
836 const real x = point[0];
848 value = pow(10.0, 9.0);
873 template <
int dim,
int nspecies,
int nstate,
typename real>
880 template <
int dim,
int nspecies,
int nstate,
typename real>
885 if constexpr (dim == 1 && nstate == (dim + 2)) {
886 const real x = point[0];
892 else if (istate == 1) {
896 else if (istate == 2) {
904 value = 1 + 0.2 * sin(5 * x);
906 else if (istate == 1) {
910 else if (istate == 2) {
923 template <
int dim,
int nspecies,
int nstate,
typename real>
930 template <
int dim,
int nspecies,
int nstate,
typename real>
935 if constexpr (dim == 1 && nstate == (dim + 2)) {
936 const real x = point[0];
939 value = 0.01 + exp(-500.0*pow(x,2.0));
946 if constexpr (dim == 2 && nstate == (dim + 2)) {
947 const real x = point[0];
948 const real y = point[1];
952 value = 0.01 + exp(-500.0*(pow(x, 2.0)+pow(y, 2.0)));
966 template <
int dim,
int nspecies,
int nstate,
typename real>
973 template <
int dim,
int nspecies,
int nstate,
typename real>
978 if constexpr (dim == 2 && nstate == (dim + 2)) {
979 const real x = point[0];
980 const real y = point[1];
981 if (y > sqrt(3)*(x - (1.0/6.0))) {
986 else if (istate == 1) {
988 value = 33.0*sqrt(3.0)/8.0;
990 else if (istate == 2) {
994 else if (istate == 3) {
1004 else if (istate == 1) {
1008 else if (istate == 2) {
1012 else if (istate == 3) {
1025 template <
int dim,
int nspecies,
int nstate,
typename real>
1032 template <
int dim,
int nspecies,
int nstate,
typename real>
1037 const real x = point[0];
1039 if constexpr (dim == 2 && nstate == (dim + 2)) {
1043 value = 7.041132906907898;
1045 else if (istate == 1) {
1047 value = 4.07794695481336;
1049 else if (istate == 2) {
1053 else if (istate == 3) {
1063 else if (istate == 1) {
1067 else if (istate == 2) {
1071 else if (istate == 3) {
1085 template <
int dim,
int nspecies,
int nstate,
typename real>
1092 template <
int dim,
int nspecies,
int nstate,
typename real>
1097 if constexpr (dim == 2 && nstate == (dim + 2)) {
1103 else if (istate == 1) {
1107 else if (istate == 2) {
1111 else if (istate == 3) {
1125 template <
int dim,
int nspecies,
int nstate,
typename real>
1132 template <
int dim,
int nspecies,
int nstate,
typename real>
1137 const real x = point[0];
1138 const real y = point[1];
1140 if constexpr (dim == 2 && nstate == (dim + 2)) {
1142 const real gamma = 1.4;
1146 const real rho_u = 1.0;
1147 const real u_u = 1.5*sqrt(1.4);
1148 const real v_u = 0.0;
1149 const real p_u = 1.0;
1150 const real t_u = p_u/(rho_u*R);
1155 const real M_s = 1.5;
1158 const real rho_d = (rho_u * (gamma + 1.0) * M_s * M_s) / (2.0 + (gamma - 1.0) * M_s * M_s);
1159 const real u_d = (u_u * (2.0 + ((gamma - 1.0) * M_s * M_s)))/((gamma + 1.0) * M_s * M_s);
1160 const real v_d = 0.0;
1161 const real p_d = p_u * (1.0 + (2.0 * gamma / (gamma + 1.0)) * (M_s * M_s - 1.0));
1168 else if (istate == 1) {
1172 else if (istate == 2) {
1176 else if (istate == 3) {
1185 else if (istate == 1) {
1189 else if (istate == 2) {
1193 else if (istate == 3) {
1201 const real x_c = 0.25;
const real y_c = 0.5;
1204 const real a = 0.075;
const real b = 0.175;
1207 const real M_v = 0.9;
const real v_m = M_v * sqrt(gamma);
1210 const real dx = x - x_c;
1211 const real dy = y - y_c;
1212 const real r = sqrt((dx*dx) + (dy*dy));
1214 real temperature = 0.0;
1218 const double sin_theta = dy/r;
1219 const double cos_theta = dx/r;
1222 const real mag = v_m * r / a;
1224 value = u_u - mag*sin_theta;
1225 else if(istate == 2)
1226 value = v_u + mag*cos_theta;
1229 real radial_term = -2.0 * b * b * log(b) - (0.5 * a * a) + (2.0 * b * b * log(a)) + (0.5 * b * b * b * b / (a * a));
1230 const real t_a = t_u - (gamma - 1.0) * pow(v_m * a / (a * a - b * b), 2.0) * radial_term / (R * gamma);
1231 radial_term = 0.5 * (1.0 - r * r / (a * a));
1232 temperature = t_a - (gamma - 1.0) * v_m * v_m * radial_term / (R * gamma);
1235 const real mag = v_m * a * (r - b * b / r)/(a * a - b * b);
1237 value = u_u - mag * sin_theta;
1238 else if (istate == 2)
1239 value = v_u + mag * cos_theta;
1241 const real radial_term = -2.0 * b * b * log(b) - (0.5 * r * r) + (2.0 * b * b * log(r)) + (0.5 * b * b * b * b / (r * r));
1242 temperature = t_u - (gamma - 1.0) * pow(v_m * a/(a * a - b * b), 2.0) * radial_term / (R * gamma);
1247 value = rho_u * pow(temperature/t_u, 1.0/(gamma - 1.0));
1248 else if (istate == 3)
1249 value = p_u * pow(temperature/t_u, gamma/(gamma - 1.0));
1259 template <
int dim,
int nspecies,
int nstate,
typename real>
1264 , use_high_temp_ic(high_temperature)
1267 template <
int dim,
int nspecies,
int nstate,
typename real>
1273 const real x = point[0];
1274 const real x_0 = 5.0;
1275 real y = 0.0; real y_0 = 0.0; real z = 0.0; real z_0 = 0.0;
1284 const real r = sqrt(pow(x-x_0,2.0) + pow(y-y_0,2.0) + pow(z-z_0,2.0));
1285 const real T_0 = 300.0;
1286 const real big_gamma = 50.0;
1287 const real gamma_0 = 1.4;
1288 const real y_H2_0 = 0.01277;
1289 const real a_1 = 0.005;
1290 const real pi = dealii::numbers::PI;
1292 real pressure = 101325;
1293 if(this->use_high_temp_ic) pressure *= 5.0;
1295 const real velocity = 100.0;
1296 const real exp = std::exp(0.50*(1-r*r));
1297 const real coeff = 2*pi/(gamma_0*big_gamma);
1299 real temperature = T_0 - (gamma_0-1.0)*big_gamma*big_gamma/(8.0*gamma_0*pi)*exp;
1300 if(this->use_high_temp_ic) temperature *= 5.0;
1302 const real y_H2 = (y_H2_0 - a_1*coeff*exp);
1304 const std::array<real,nspecies> Rs = this->real_gas_physics->compute_Rs(this->real_gas_physics->Ru);
1308 if constexpr(nspecies==2 && nstate==dim+nspecies+1) {
1310 R_mixture = (y_H2*Rs[0] + y_O2*Rs[1])*this->real_gas_physics->R_ref;
1313 if constexpr(nspecies==3 && nstate==dim+nspecies+1) {
1314 const real y_O2_0 = 0.101;
1315 const real a_2 = 0.03;
1316 y_O2 = (y_O2_0 - a_2*coeff*exp);
1317 const real y_N2 = 1.0 - y_H2 - y_O2;
1318 R_mixture = (y_H2*Rs[0] + y_O2*Rs[1] + y_N2*Rs[2])*this->real_gas_physics->R_ref;
1320 const real density = pressure/(R_mixture*temperature);
1325 value = density / this->real_gas_physics->density_ref;
1329 value = velocity / this->real_gas_physics->u_ref;
1331 if(dim==2 && istate==2) {
1333 value = velocity / this->real_gas_physics->u_ref;
1335 if(dim==3 && istate==3) {
1337 value = velocity / this->real_gas_physics->u_ref;
1341 value = pressure / (this->real_gas_physics->density_ref*this->real_gas_physics->u_ref_sqr);
1347 if(nspecies==3 && istate==dim+3){
1360 template <
int dim,
int nspecies,
int nstate,
typename real>
1367 template <
int dim,
int nspecies,
int nstate,
typename real>
1373 if constexpr(dim==1) {
1374 const real x = point[0];
1381 else if (istate == 1) {
1385 else if (istate == 2) {
1389 else if (istate == 3) {
1400 else if (istate == 1) {
1404 else if (istate == 2) {
1408 else if (istate == 3) {
1422 template <
int dim,
int nspecies,
int nstate,
typename real>
1429 template <
int dim,
int nspecies,
int nstate,
typename real>
1435 if constexpr(dim == 2) {
1436 const real x = point[0];
1437 const real y = point[1];
1440 const real x_0 = 0.0;
1441 const real y_0 = 0.0;
1442 const real beta = 13.5;
1443 const real radius = 1.5;
1444 const real U_0 = 0.0;
1445 const real V_0 = 1.0;
1446 const real M = 0.40;
1447 const real pi = dealii::numbers::PI;
1448 const real L = 10.0;
1449 const real alpha_N2 = 0.50*sin(pi/L*(x-x_0))+0.50;
1450 const real alpha_O2 = 1.0 - alpha_N2;
1451 const real mixture_gamma = 1.4;
1453 const real f = (1.0 - (x-x_0)*(x-x_0) - (y-y_0)*(y-y_0)) / (2.0*radius*radius);
1454 const real density_N2 = alpha_N2*pow( (1.0 - ((mixture_gamma-1.0)*beta*beta*M*M/(8.0*pi*pi))*exp(2.0*f)), 1.0/(mixture_gamma-1.0) );
1455 const real density_O2 = alpha_O2*pow( (1.0 - ((mixture_gamma-1.0)*beta*beta*M*M/(8.0*pi*pi))*exp(2.0*f)), 1.0/(mixture_gamma-1.0) );
1456 const real mixture_density = density_N2 + density_O2;
1457 const real u = U_0 + beta*y/(2.0*pi*radius)*exp(f);
1458 const real v = V_0 - beta*x/(2.0*pi*radius)*exp(f);
1460 const real mixture_pressure = 1.0/(mixture_gamma*M*M)*pow(mixture_density,mixture_gamma);
1465 value = mixture_density;
1477 value = mixture_pressure;
1481 value = density_N2/mixture_density;
1490 template <
int dim,
int nspecies,
int nstate,
typename real>
1495 , gamma_gas(param->euler_param.gamma_gas)
1496 , mach_inf(param->euler_param.mach_inf)
1497 , mach_inf_sqr(mach_inf*mach_inf)
1498 , smooth_interface(use_smooth_interface)
1500 template <
int dim,
int nspecies,
int nstate,
typename real>
1506 if constexpr(dim == 3) {
1507 const real x = point[0], y = point[1], z = point[2];
1515 value = sin(x)*cos(y)*cos(z);
1519 value = -cos(x)*sin(y)*cos(z);
1527 value = 1.0/(this->gamma_gas*this->mach_inf_sqr) + (1.0/16.0)*(cos(2.0*x)+cos(2.0*y))*(cos(2.0*z)+2.0);
1531 value = this->mass_fraction(point);
1537 template <
int dim,
int nspecies,
int nstate,
typename real>
1543 real pi = dealii::numbers::PI;
1544 const real x = point[0], y = point[1], z = point[2];
1547 if(this->smooth_interface)
1548 value = 0.5 + (1.0/16.0)*(cos(x)+1)*(cos(y)+1)*(cos(z)+1);
1550 value = 0.5 + (1.0/4.0)*tanh(1000.0*(x-pi))*tanh(1000.0*(y-pi))*tanh(1000.0*(z-pi));
1558 template <
int dim,
int nspecies,
int nstate,
typename real>
1566 template <
int dim,
int nspecies,
int nstate,
typename real>
1568 ::value(
const dealii::Point<dim,real> &,
const unsigned int )
const 1576 template <
int dim,
int nspecies,
int nstate,
typename real>
1577 std::shared_ptr<InitialConditionFunction<dim, nspecies, nstate, real>>
1583 if (flow_type == FlowCaseEnum::taylor_green_vortex) {
1584 if constexpr (dim==3 && nstate==dim+2){
1587 if(density_initial_condition_type == DensityInitialConditionEnum::uniform) {
1588 return std::make_shared<InitialConditionFunction_TaylorGreenVortex<dim,nspecies,nstate,real> >(
1590 }
else if (density_initial_condition_type == DensityInitialConditionEnum::isothermal) {
1591 return std::make_shared<InitialConditionFunction_TaylorGreenVortex_Isothermal<dim,nspecies,nstate,real> >(
1595 }
else if (flow_type == FlowCaseEnum::dipole_wall_collision_normal) {
1596 if constexpr (dim==2 && nstate==dim+2){
1597 return std::make_shared<InitialConditionFunction_DipoleWallCollision_Normal<dim,nspecies,nstate,real> >(
1600 }
else if (flow_type == FlowCaseEnum::dipole_wall_collision_oblique) {
1601 if constexpr (dim==2 && nstate==dim+2){
1602 return std::make_shared<InitialConditionFunction_DipoleWallCollision_Oblique<dim,nspecies,nstate,real> >(
1605 }
else if (flow_type == FlowCaseEnum::decaying_homogeneous_isotropic_turbulence) {
1606 if constexpr (dim==3 && nstate==dim+2)
return nullptr;
1607 }
else if (flow_type == FlowCaseEnum::burgers_rewienski_snapshot) {
1608 if constexpr (dim==1 && nstate==1)
return std::make_shared<InitialConditionFunction_BurgersRewienski<dim,nspecies,nstate,real> > ();
1609 }
else if (flow_type == FlowCaseEnum::burgers_viscous_snapshot) {
1610 if constexpr (dim==1 && nstate==1)
return std::make_shared<InitialConditionFunction_BurgersViscous<dim,nspecies,nstate,real> > ();
1611 }
else if (flow_type == FlowCaseEnum::naca0012 || flow_type == FlowCaseEnum::gaussian_bump || flow_type == FlowCaseEnum::turbulent_airfoil_3D) {
1612 if constexpr ((dim==2 || dim==3) && nstate==dim+2) {
1616 param->euler_param.gamma_gas,
1620 return std::make_shared<FreeStreamInitialConditions<dim,nspecies,nstate,real>>(euler_physics_double);
1622 }
else if (flow_type == FlowCaseEnum::burgers_inviscid && param->
use_energy==
false) {
1623 if constexpr (nstate==dim && dim<3)
return std::make_shared<InitialConditionFunction_BurgersInviscid<dim, nspecies, nstate, real> >();
1624 }
else if (flow_type == FlowCaseEnum::burgers_inviscid && param->
use_energy==
true) {
1625 if constexpr (dim==1 && nstate==1)
return std::make_shared<InitialConditionFunction_BurgersInviscidEnergy<dim,nspecies,nstate,real> > ();
1626 }
else if (flow_type == FlowCaseEnum::advection && param->
use_energy==
true) {
1627 if constexpr (nstate==1)
return std::make_shared<InitialConditionFunction_AdvectionEnergy<dim,nspecies,nstate,real> > ();
1628 }
else if (flow_type == FlowCaseEnum::advection && param->
use_energy==
false) {
1629 if constexpr (nstate==1)
return std::make_shared<InitialConditionFunction_Advection<dim,nspecies,nstate,real> > ();
1630 }
else if (flow_type == FlowCaseEnum::convection_diffusion && !param->
use_energy) {
1631 if constexpr (nstate==1)
return std::make_shared<InitialConditionFunction_ConvDiff<dim,nspecies,nstate,real> > ();
1632 }
else if (flow_type == FlowCaseEnum::convection_diffusion && param->
use_energy) {
1633 return std::make_shared<InitialConditionFunction_ConvDiffEnergy<dim,nspecies,nstate,real> > ();
1634 }
else if (flow_type == FlowCaseEnum::periodic_1D_unsteady) {
1635 if constexpr (dim==1 && nstate==1)
return std::make_shared<InitialConditionFunction_1DSine<dim,nspecies,nstate,real> > ();
1636 }
else if (flow_type == FlowCaseEnum::isentropic_vortex) {
1637 if constexpr (dim>1 && nstate==dim+2)
return std::make_shared<InitialConditionFunction_IsentropicVortex<dim,nspecies,nstate,real> > (param);
1638 }
else if (flow_type == FlowCaseEnum::kelvin_helmholtz_instability) {
1639 if constexpr (dim>1 && nstate==dim+2)
return std::make_shared<InitialConditionFunction_KHI<dim,nspecies,nstate,real> > (param);
1640 }
else if (flow_type == FlowCaseEnum::non_periodic_cube_flow) {
1641 if constexpr (dim==2 && nstate==1)
return std::make_shared<InitialConditionFunction_Zero<dim,nspecies,nstate,real> > ();
1642 }
else if (flow_type == FlowCaseEnum::channel_flow) {
1643 if constexpr (dim==3 && nstate==dim+2) {
1647 param->euler_param.gamma_gas,
1654 param->navier_stokes_param.nondimensionalized_constant_viscosity,
1656 param->navier_stokes_param.nondimensionalized_isothermal_wall_temperature,
1662 if(xvelocity_initial_condition_type == XVelocityInitialConditionEnum::laminar) {
1663 return std::make_shared<InitialConditionFunction_TurbulentChannelFlow<dim,nspecies,nstate,real>>(
1664 navier_stokes_physics_double,
1665 param->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number,
1666 param->flow_solver_param.turbulent_channel_domain_length_x_direction,
1667 param->flow_solver_param.turbulent_channel_domain_length_y_direction,
1668 param->flow_solver_param.turbulent_channel_domain_length_z_direction);
1669 }
else if(xvelocity_initial_condition_type == XVelocityInitialConditionEnum::turbulent) {
1670 return std::make_shared<InitialConditionFunction_TurbulentChannelFlow_Turbulent<dim,nspecies,nstate,real>>(
1671 navier_stokes_physics_double,
1672 param->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number,
1673 param->flow_solver_param.turbulent_channel_domain_length_x_direction,
1674 param->flow_solver_param.turbulent_channel_domain_length_y_direction,
1675 param->flow_solver_param.turbulent_channel_domain_length_z_direction);
1676 }
else if(xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured) {
1677 return std::make_shared<InitialConditionFunction_TurbulentChannelFlow_Manufactured<dim,nspecies,nstate,real>>(
1678 navier_stokes_physics_double,
1679 param->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number,
1680 param->flow_solver_param.turbulent_channel_domain_length_x_direction,
1681 param->flow_solver_param.turbulent_channel_domain_length_y_direction,
1682 param->flow_solver_param.turbulent_channel_domain_length_z_direction);
1685 }
else if (flow_type == FlowCaseEnum::sod_shock_tube) {
1686 if constexpr (dim == 1 && nstate == dim+2)
return std::make_shared<InitialConditionFunction_SodShockTube<dim,nspecies,nstate,real> > (param);
1687 }
else if (flow_type == FlowCaseEnum::low_density) {
1688 if constexpr (dim < 3 && nstate == dim+2)
return std::make_shared<InitialConditionFunction_LowDensity<dim,nspecies,nstate,real> > (param);
1689 }
else if (flow_type == FlowCaseEnum::leblanc_shock_tube) {
1690 if constexpr (dim == 1 && nstate == dim+2)
return std::make_shared<InitialConditionFunction_LeblancShockTube<dim,nspecies,nstate,real> > (param);
1691 }
else if (flow_type == FlowCaseEnum::shu_osher_problem) {
1692 if constexpr (dim == 1 && nstate == dim + 2)
return std::make_shared<InitialConditionFunction_ShuOsherProblem<dim, nspecies, nstate, real> >(param);
1693 }
else if (flow_type == FlowCaseEnum::double_mach_reflection) {
1694 if constexpr (dim == 2 && nstate == dim + 2)
return std::make_shared<InitialConditionFunction_DoubleMachReflection<dim, nspecies, nstate, real> >(param);
1695 }
else if (flow_type == FlowCaseEnum::shock_diffraction) {
1696 if constexpr (dim == 2 && nstate == dim + 2)
return std::make_shared<InitialConditionFunction_ShockDiffraction<dim, nspecies, nstate, real> >(param);
1697 }
else if (flow_type == FlowCaseEnum::astrophysical_jet) {
1698 if constexpr (dim == 2 && nstate == dim + 2)
return std::make_shared<InitialConditionFunction_AstrophysicalJet<dim, nspecies, nstate, real> >(param);
1699 }
else if (flow_type == FlowCaseEnum::strong_vortex_shock_wave) {
1700 if constexpr (dim == 2 && nstate == dim + 2)
return std::make_shared<InitialConditionFunction_SVSW<dim, nspecies, nstate, real> >(param);
1701 }
else if (flow_type == FlowCaseEnum::advection_limiter) {
1702 if constexpr (dim < 3 && nstate == 1)
return std::make_shared<InitialConditionFunction_Advection<dim, nspecies, nstate, real> >();
1703 }
else if (flow_type == FlowCaseEnum::burgers_limiter) {
1704 if constexpr (nstate==dim && dim<3)
return std::make_shared<InitialConditionFunction_BurgersInviscid<dim, nspecies, nstate, real> >();
1705 }
else if (flow_type == FlowCaseEnum::multi_species_vortex_advection) {
1706 if constexpr ((nspecies==2||nspecies==3) && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_VortexAdvection<dim,nspecies,nstate,real> >(param,
false);
1707 }
else if (flow_type == FlowCaseEnum::multi_species_vortex_advection_high_temp) {
1708 if constexpr ((nspecies==2||nspecies==3) && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_VortexAdvection<dim,nspecies,nstate,real> >(param,
true);
1709 }
else if (flow_type == FlowCaseEnum::multi_species_sod_shock_tube) {
1710 if constexpr (dim==1 && nspecies==2 && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_SodShockTube<dim,nspecies,nstate,real> >(param);
1711 }
else if (flow_type == FlowCaseEnum::multi_species_isentropic_vortex) {
1712 if constexpr (dim==2 && nspecies==2 && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_IsentropicVortex<dim,nspecies,nstate,real> >(param);
1713 }
else if (flow_type == FlowCaseEnum::multi_species_taylor_green_vortex_smooth) {
1714 if constexpr (dim==3 && nspecies==2 && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_TaylorGreenVortex<dim,nspecies,nstate,real> >(param,
true);
1715 }
else if (flow_type == FlowCaseEnum::multi_species_taylor_green_vortex_sharp) {
1716 if constexpr (dim==3 && nspecies==2 && nstate==dim+nspecies+1)
return std::make_shared<InitialConditionFunction_Multispecies_TaylorGreenVortex<dim,nspecies,nstate,real> >(param,
false);
1718 std::cout <<
"Invalid Flow Case Type. You probably forgot to add it to the list of flow cases in initial_condition_function.cpp" << std::endl;
1720 return std::make_shared<InitialConditionFunction_Zero<dim, nspecies, nstate, real> >();
1725 #if PHILIP_SPECIES==1 Initial Condition Function: Taylor Green Vortex (uniform density)
FlowCaseType
Selects the flow case to be simulated.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
const thermal_boundary_condition_enum thermal_boundary_condition_type
Thermal boundary condition type (adiabatic or isothermal)
Initial Condition Function: Advection Energy.
Initial Condition Function: Taylor Green Vortex (isothermal density)
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
FlowCaseType flow_case_type
Selected FlowCaseType from the input file.
virtual real mass_fraction(const dealii::Point< dim, real > &point) const
Value of initial condition for density.
const double angle_of_attack
Angle of attack.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of conservative variables.
RealGas equations. Derived from PhysicsBase.
InitialConditionFunction_ConvDiffEnergy()
< dealii::Function we are templating on
InitialConditionFunction_DipoleWallCollision(Parameters::AllParameters const *const param, const real extremum_vorticity_value_, const real dipole_radius, const real dipole_axis_angle_wrt_x_axis_in_degrees)
Constructor.
InitialConditionFunction_TaylorGreenVortex_Isothermal(Parameters::AllParameters const *const param)
Constructor for TaylorGreenVortex_InitialCondition with isothermal density.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
Initial Condition Function: Dipole Wall Collision Normal.
Initial Condition Function: Dipole Wall Collision.
InitialConditionFunction_LeblancShockTube(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_SodShockTube.
const double mach_inf
Farfield Mach number.
real y_velocity(const dealii::Point< dim, real > &point) const override
y-velocity
virtual real density(const dealii::Point< dim, real > &point) const
Value of initial condition for density.
const two_point_num_flux_enum two_point_num_flux_type
Two point numerical flux type (for split form)
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Value of initial condition expressed in terms of primitive variables.
Initial Condition Function: 1D Burgers Viscous.
virtual real y_velocity(const dealii::Point< dim, real > &point) const
y-velocity
2D Initial Condition Function: Multispecies_IsentropicVortex
InitialConditionFunction_AdvectionEnergy()
< dealii::Function we are templating on
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
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.
bool use_energy
Flag to use an energy monotonicity test.
virtual real x_velocity(const dealii::Point< dim, real > &point, const real density, const real temperature) const
x-velocity
Initial Condition Function: 2D Strong Vortex Shock Wave Interaction.
Files for the baseline physics.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
InitialConditionFunction_BurgersInviscidEnergy()
< dealii::Function we are templating on
Initial Condition Function: 1D Shu Osher Problem.
Initial Condition Function: 2D Astrophysical Mach Jet.
real x_velocity(const dealii::Point< dim, real > &point, const real density, const real temperature) const override
x-velocity
Initial Condition Function: Convection Diffusion Orders of Accuracy.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of conservative variables.
InitialConditionFunction_Multispecies_TaylorGreenVortex(Parameters::AllParameters const *const param, const bool use_smooth_interface)
< dealii::Function we are templating on
InitialConditionFunction_NavierStokesBase(Parameters::AllParameters const *const param)
< dealii::Function we are templating on
Initial Condition Function: Isentropic vortex.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
1D Initial Condition Function: Multispecies_VortexAdvection
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
real value(const dealii::Point< dim, real > &point, const unsigned int istate) const override
Value of initial condition.
InitialConditionFunction_TurbulentChannelFlow(const Physics::NavierStokes< dim, nspecies, nstate, double > navier_stokes_physics_, const double channel_friction_velocity_reynolds_number_, const double domain_length_x_, const double domain_length_y_, const double domain_length_z_)
< dealii::Function we are templating on
InitialConditionFunction_SVSW(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_AstrophysicalJet.
InitialConditionFunction_LowDensity(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_SodShockTube.
InitialConditionFunction_DipoleWallCollision_Normal(Parameters::AllParameters const *const param)
Constructor.
Main parameter class that contains the various other sub-parameter classes.
InitialConditionFunction_TaylorGreenVortex(Parameters::AllParameters const *const param)
Constructor for TaylorGreenVortex_InitialCondition with uniform density.
1D Initial Condition Function: Multispecies_SodShockTube
InitialConditionFunction_Advection()
< dealii::Function we are templating on
real convert_primitive_to_conversative_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Converts value from: primitive to conservative.
InitialConditionFunction_DipoleWallCollision_Oblique(Parameters::AllParameters const *const param)
Constructor.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Returns zero.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
Initial Condition Function: Dipole Wall Collision Oblique.
const double side_slip_angle
Sideslip angle.
Initial Condition Function: 1D Burgers Inviscid Energy.
InitialConditionFunction_Zero()
< dealii::Function we are templating on
Initial condition function factory.
real get_distance_from_wall(const dealii::Point< dim, real > &point) const
distance from closest wall
InitialConditionFunction_ConvDiff()
< dealii::Function we are templating on
real value(const dealii::Point< dim, real > &point, const unsigned int istate) const override
Value of initial condition.
InitialConditionFunction_KHI(Parameters::AllParameters const *const param)
< dealii::Function we are templating on
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
Euler equations. Derived from PhysicsBase.
InitialConditionFunction_RealGasBase(Parameters::AllParameters const *const param)
< dealii::Function we are templating on
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.
double temperature_inf
Non-dimensionalized temperature* at infinity. Should equal 1/density*(inf)
Initial Condition Function: 2D Double Mach Reflection Problem.
const double reynolds_number_inf
Farfield (free stream) Reynolds number.
real value(const dealii::Point< dim, real > &point, const unsigned int istate) const override
Value of initial condition.
real density(const dealii::Point< dim, real > &point) const override
Value of initial condition for density.
Function used to evaluate initial turbulent channel conservative solution.
InitialConditionFunction_1DSine()
< dealii::Function we are templating on
Initial Condition Function: Euler Equations (primitive values)
real value(const dealii::Point< dim, real > &point, const unsigned int istate) const override
Value of initial condition.
real value(const dealii::Point< dim, real > &point, const unsigned int istate) const override
Value of initial condition.
InitialConditionFunction_DoubleMachReflection(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_DoubleMachReflection.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
InitialConditionFunction_SodShockTube(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_SodShockTube.
const bool use_constant_viscosity
Flag to use constant viscosity instead of Sutherland's law of viscosity.
const double ref_length
Reference length.
const double prandtl_number
Prandtl number.
InitialConditionFunction()
< dealii::Function we are templating on
InitialConditionFunction_TurbulentChannelFlow_Manufactured(const Physics::NavierStokes< dim, nspecies, nstate, double > navier_stokes_physics_, const double channel_friction_velocity_reynolds_number_, const double domain_length_x_, const double domain_length_y_, const double domain_length_z_)
Constructor.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
real convert_primitive_to_conversative_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Converts value from: primitive to conservative.
static std::shared_ptr< PhysicsBase< dim, nspecies, nstate, real > > create_Physics(const Parameters::AllParameters *const parameters_input, std::shared_ptr< ModelBase< dim, nspecies, nstate, real > > model_input=nullptr)
Factory to return the correct physics given input file.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
InitialConditionFunction_AstrophysicalJet(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_AstrophysicalJet.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
InitialConditionFunction_BurgersInviscid()
< dealii::Function we are templating on
static std::shared_ptr< InitialConditionFunction< dim, nspecies, nstate, real > > create_InitialConditionFunction(Parameters::AllParameters const *const param)
Construct InitialConditionFunction object from global parameter file.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Value of initial condition expressed in terms of primitive variables.
InitialConditionFunction_TurbulentChannelFlow_Turbulent(const Physics::NavierStokes< dim, nspecies, nstate, double > navier_stokes_physics_, const double channel_friction_velocity_reynolds_number_, const double domain_length_x_, const double domain_length_y_, const double domain_length_z_)
Constructor.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition.
Initial Condition Function: 1D Burgers Inviscid.
InitialConditionFunction_BurgersRewienski()
< dealii::Function we are templating on
Initial Condition Function: 1D Leblanc Shock Tube.
DensityInitialConditionType
For taylor green vortex, selects the type of density initialization.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Value of initial condition expressed in terms of primitive variables.
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const
Value of initial condition expressed in terms of primitive variables.
InitialConditionFunction_BurgersViscous()
< dealii::Function we are templating on
InitialConditionFunction_ShuOsherProblem(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_SodShockTube.
Initial Condition Function: 2D Shock Diffraction Problem.
Initial Condition Function: Taylor Green Vortex (uniform density)
real primitive_value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of primitive variables.
InitialConditionFunction_IsentropicVortex(Parameters::AllParameters const *const param)
< dealii::Function we are templating on
Initial Condition Function: Convection Diffusion Energy.
Initial Condition Function: NavierStokesBase.
DensityInitialConditionType density_initial_condition_type
Selected DensityInitialConditionType from the input file.
InitialConditionFunction_ShockDiffraction(Parameters::AllParameters const *const param)
Constructor for InitialConditionFunction_SodShockTube.
real value(const dealii::Point< dim, real > &point, const unsigned int istate=0) const override
Value of initial condition expressed in terms of conservative variables.