[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
turbulent_channel_flow_skin_friction_check.cpp
1 #include "turbulent_channel_flow_skin_friction_check.h"
2 #include "flow_solver/flow_solver_factory.h"
3 #include "flow_solver/flow_solver_cases/channel_flow.h"
4 #include "physics/physics_factory.h"
5 
6 namespace PHiLiP {
7 namespace Tests {
8 
9 template <int dim, int nspecies, int nstate>
11  const PHiLiP::Parameters::AllParameters *const parameters_input,
12  const dealii::ParameterHandler &parameter_handler_input)
13  : TestsBase::TestsBase(parameters_input)
14  , parameter_handler(parameter_handler_input)
15  , half_channel_height(parameters_input->flow_solver_param.turbulent_channel_domain_length_y_direction/2.0)
16  , xvelocity_initial_condition_type(parameters_input->flow_solver_param.xvelocity_initial_condition_type)
17  , y_top_wall(1.0)
18  , y_bottom_wall(-1.0)
19  , normal_vector_top_wall(-1.0)
20  , normal_vector_bottom_wall(1.0)
21 {
22  // NavierStokes_ChannelFlowConstantSourceTerm_WallModel object; create using dynamic_pointer_cast and the create_Physics factory
24  PHiLiP::Parameters::AllParameters parameters_navier_stokes_channel_flow_constant_source_term_wall_model = *this->all_parameters;
25  parameters_navier_stokes_channel_flow_constant_source_term_wall_model.pde_type = PDE_enum::navier_stokes_channel_flow_constant_source_term_wall_model;
28  Physics::PhysicsFactory<dim,nspecies,dim+2,double>::create_Physics(&parameters_navier_stokes_channel_flow_constant_source_term_wall_model));
29  // Set check wall model flag if uniform grid
30  using turbulent_channel_mesh_stretching_function_enum = Parameters::FlowSolverParam::TurbulentChannelMeshStretchingFunctionType;
31  const turbulent_channel_mesh_stretching_function_enum turbulent_channel_mesh_stretching_function_type = this->all_parameters->flow_solver_param.turbulent_channel_mesh_stretching_function_type;
32  if(turbulent_channel_mesh_stretching_function_type == turbulent_channel_mesh_stretching_function_enum::uniform_mesh_no_stretching) this->check_wall_model = true;
33  else this->check_wall_model = false;
34 }
35 
36 template <int dim, int nspecies, int nstate>
38 {
39  double x_velocity = 0.0;
40  if(this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::laminar)
41  {
42  x_velocity = (15.0/8.0)*pow(1.0-pow(y/this->half_channel_height,2.0),2.0);
43  }
44  else if((this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::turbulent) ||
45  (this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured))
46  {
47  // Turbulent velocity profile using Reichart's law of the wall
48  // -- apply initial condition symmetrically w.r.t. the top/bottom walls of the channel
49  double dist_from_wall = this->half_channel_height; // represents distance normal to top/bottom wall (which ever is closer); y-domain bounds are [-half_channel_height, half_channel_height]
50  if(y > 0.0){
51  dist_from_wall -= y; // distance from top wall
52  } else if(y < 0.0) {
53  dist_from_wall += y; // distance from bottom wall
54  } // note: dist_from_wall is non-dimensional
55 
56  // Reichardt law of the wall (provides a smoothing between the linear and the log regions)
57  // References:
58  /* Frere, Carton de Wiart, Hillewaert, Chatelain, and Winckelmans
59  "Application of wall-models to discontinuous Galerkin LES", Phys. Fluids 29, 2017
60 
61  (Original paper) J. M. Osterlund, A. V. Johansson, H. M. Nagib, and M. H. Hites, “A note
62  on the overlap region in turbulent boundary layers,” Phys. Fluids 12, 1–4, (2000).
63  */
64  const double kappa = 0.38; // von Karman's constant
65  const double C = 4.1;
66 
67  // STEP 1
68  const double reynolds_number_inf = this->all_parameters->navier_stokes_param.reynolds_number_inf;
69  const double density = 1.0; // non-dimensional
70  const double viscosity_coefficient = this->all_parameters->navier_stokes_param.nondimensionalized_constant_viscosity; // non-dimensional
71  const double reynolds_number_based_on_friction_velocity = this->all_parameters->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number;
72  const double friction_velocity = reynolds_number_based_on_friction_velocity/reynolds_number_inf; // non-dimensional
73  const double y_plus = reynolds_number_inf*density*friction_velocity*dist_from_wall/viscosity_coefficient; // dimensional
74  const double 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)); // dimensional
75  x_velocity = u_plus*friction_velocity; // non-dimensional
76  }
77  return x_velocity;
78 }
79 
80 
81 template <int dim, int nspecies, int nstate>
83 {
84  double x_velocity_gradient = 0.0;
85  if(this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::laminar)
86  {
87  // Turbulent velocity profile using Reichart's law of the wall
88  // -- apply initial condition symmetrically w.r.t. the top/bottom walls of the channel
89  double dist_from_wall = this->half_channel_height; // represents distance normal to top/bottom wall (which ever is closer); y-domain bounds are [-half_channel_height, half_channel_height]
90  if(y > 0.0){
91  dist_from_wall -= y; // distance from top wall
92  } else if(y < 0.0) {
93  dist_from_wall += y; // distance from bottom wall
94  } // note: dist_from_wall is non-dimensional
95  x_velocity_gradient = (15.0/2.0)*y*(y*y - this->half_channel_height*this->half_channel_height)/pow(this->half_channel_height,4.0);
96  }
97  // else if(this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured)
98  // {
99  // x_velocity_gradient = (15.0/2.0)*y*y*y/pow(this->half_channel_height,4.0);
100  // }
101  else if((this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::turbulent) ||
102  (this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured))
103  {
104  // Turbulent velocity profile using Reichart's law of the wall
105  // -- apply initial condition symmetrically w.r.t. the top/bottom walls of the channel
106  double dist_from_wall = this->half_channel_height; // represents distance normal to top/bottom wall (which ever is closer); y-domain bounds are [-half_channel_height, half_channel_height]
107  if(y > 0.0){
108  dist_from_wall -= y; // distance from top wall
109  } else if(y < 0.0) {
110  dist_from_wall += y; // distance from bottom wall
111  } // note: dist_from_wall is non-dimensional
112 
113  // Reichardt law of the wall (provides a smoothing between the linear and the log regions)
114  // References:
115  /* Frere, Carton de Wiart, Hillewaert, Chatelain, and Winckelmans
116  "Application of wall-models to discontinuous Galerkin LES", Phys. Fluids 29, 2017
117 
118  (Original paper) J. M. Osterlund, A. V. Johansson, H. M. Nagib, and M. H. Hites, “A note
119  on the overlap region in turbulent boundary layers,” Phys. Fluids 12, 1–4, (2000).
120  */
121  const double kappa = 0.38; // von Karman's constant
122  const double C = 4.1;
123 
124  // STEP 1
125  const double reynolds_number_inf = this->all_parameters->navier_stokes_param.reynolds_number_inf;
126  const double density = 1.0; // non-dimensional
127  const double viscosity_coefficient = this->all_parameters->navier_stokes_param.nondimensionalized_constant_viscosity; // non-dimensional
128  const double reynolds_number_based_on_friction_velocity = this->all_parameters->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number;
129  const double friction_velocity = reynolds_number_based_on_friction_velocity/reynolds_number_inf; // non-dimensional
130  const double y_plus = reynolds_number_inf*density*friction_velocity*dist_from_wall/viscosity_coefficient; // dimensional
131  // dimensional
132  const double duplus_dyplus = (1.0/kappa)*(kappa/(1.0+kappa*y_plus)) + (C - (1.0/kappa)*log(kappa))*((1.0/11.0)*exp(-y_plus/11.0)+((y_plus-3.0)/33.0)*exp(-y_plus/3.0));
133 
134  // STEP 2
135  const double du_duplus = friction_velocity; // pulled out non-dim factor for step 3
136  const double dyplus_dy = reynolds_number_inf*friction_velocity*density/viscosity_coefficient; // pulled out non-dim factor for step 3
137 
138  // STEP 3
139  x_velocity_gradient = du_duplus*duplus_dyplus*dyplus_dy; // non-dimensional
140  }
141  return x_velocity_gradient;
142 }
143 
144 template <int dim, int nspecies, int nstate>
146 {
147  // for constant viscosity we can write:
148  const double nondimensionalized_constant_viscosity = this->all_parameters->navier_stokes_param.nondimensionalized_constant_viscosity;
149  const double scaled_nondim_viscosity = nondimensionalized_constant_viscosity/this->all_parameters->navier_stokes_param.reynolds_number_inf;
150  const double wall_shear_stress_top_wall = scaled_nondim_viscosity*get_x_velocity_gradient(this->y_top_wall)*this->normal_vector_bottom_wall;//this->normal_vector_top_wall;
151  const double wall_shear_stress_bottom_wall = scaled_nondim_viscosity*get_x_velocity_gradient(this->y_bottom_wall)*this->normal_vector_bottom_wall;
152  const double average_wall_shear_stress = 0.5*(wall_shear_stress_top_wall + wall_shear_stress_bottom_wall);
153  return average_wall_shear_stress;
154 }
155 
156 template <int dim, int nspecies, int nstate>
158 {
159  double value = 0.0;
160  if((this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::turbulent) ||
161  (this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured))
162  {
163  // Turbulent velocity profile using Reichart's law of the wall
164 
165  // Reichardt law of the wall (provides a smoothing between the linear and the log regions)
166  // References:
167  /* Frere, Carton de Wiart, Hillewaert, Chatelain, and Winckelmans
168  "Application of wall-models to discontinuous Galerkin LES", Phys. Fluids 29, 2017
169 
170  (Original paper) J. M. Osterlund, A. V. Johansson, H. M. Nagib, and M. H. Hites, “A note
171  on the overlap region in turbulent boundary layers,” Phys. Fluids 12, 1–4, (2000).
172  */
173  const double kappa = 0.38; // von Karman's constant
174  const double C = 4.1;
175 
176  // Analytical integral expression
177  // dimensional
178  value = ((1.0/kappa + y_plus)*log(1.0+kappa*y_plus) - y_plus)/kappa;
179  value += (C - (1.0/kappa)*log(kappa))*(y_plus + 11.0*exp(-y_plus/11.0) + (3.0/11.0)*(y_plus+3.0)*exp(-y_plus/3.0));
180  }
181  return value;
182 }
183 
184 template <int dim, int nspecies, int nstate>
186 {
187  double bulk_velocity = 0.0;
188  if(this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::laminar)
189  {
190  bulk_velocity = 1.0;
191  }
192  else if((this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::turbulent) ||
193  (this->xvelocity_initial_condition_type == XVelocityInitialConditionEnum::manufactured))
194  {
195  // Turbulent velocity profile using Reichart's law of the wall
196  const double reynolds_number_inf = this->all_parameters->navier_stokes_param.reynolds_number_inf;
197  const double density = 1.0; // non-dimensional
198  const double viscosity_coefficient = this->all_parameters->navier_stokes_param.nondimensionalized_constant_viscosity; // non-dimensional
199  const double reynolds_number_based_on_friction_velocity = this->all_parameters->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number;
200  const double friction_velocity = reynolds_number_based_on_friction_velocity/reynolds_number_inf; // non-dimensional
201  const double y_plus_max = reynolds_number_inf*density*friction_velocity*1.0/viscosity_coefficient; // dimensional
202  const double y_plus_min = 0.0; // dimensional
203  const double integrand_wrt_yplus = 2.0*(get_integral_of_x_velocity(y_plus_max) - get_integral_of_x_velocity(y_plus_min)); // dimensional; symmetry applied
204  const double dyplus_dy = reynolds_number_inf*friction_velocity*density/viscosity_coefficient; // dimensional; ref_length=1 so its okay without it here
205  const double integrand_wrt_y = integrand_wrt_yplus/dyplus_dy;
206 
207  // domain
208  const double domain_length_x = this->all_parameters->flow_solver_param.turbulent_channel_domain_length_x_direction; // non-dimensional
209  const double domain_length_y = this->all_parameters->flow_solver_param.turbulent_channel_domain_length_y_direction; // non-dimensional
210  const double domain_length_z = this->all_parameters->flow_solver_param.turbulent_channel_domain_length_z_direction; // non-dimensional
211  const double domain_volume = domain_length_x*domain_length_y*domain_length_z; // non-dimensional
212 
213  const double volume_integral = integrand_wrt_y*domain_length_x*domain_length_z; // dimensional
214 
215  bulk_velocity = friction_velocity*volume_integral/domain_volume; // non-dimensional
216  // note ref_length = 1.0 anyways so no need to worry about the dim integrand_wrt_y
217  }
218 
219  return bulk_velocity;
220 }
221 
222 template <int dim, int nspecies, int nstate>
224 {
225  // Reference: Equation 34 of Lodato G, Castonguay P, Jameson A. Discrete filter operators for large-eddy simulation using high-order spectral difference methods. International Journal for Numerical Methods in Fluids2013;72(2):231–258.
226  const double avg_wall_shear_stress = this->get_wall_shear_stress();
227  const double bulk_density = 1.0; // based on initial condition
228  const double bulk_velocity = this->get_bulk_velocity();
229  const double skin_friction_coefficient = 2.0*avg_wall_shear_stress/(bulk_density*bulk_velocity*bulk_velocity);
230  return skin_friction_coefficient;
231 }
232 
233 template <int dim, int nspecies, int nstate>
235 {
236  const double reynolds_number_inf = this->all_parameters->navier_stokes_param.reynolds_number_inf;
237  const double density = 1.0; // non-dimensional
238  const double delta = 1.0; // non-dimensional
239  const double viscosity_coefficient = this->all_parameters->navier_stokes_param.nondimensionalized_constant_viscosity; // non-dimensional
240  const double reynolds_number_based_on_friction_velocity = this->all_parameters->flow_solver_param.turbulent_channel_friction_velocity_reynolds_number;
241  // non-dimensional wall shear stress value based on friction Reynolds number
242  const double wall_shear_stress = density*pow((reynolds_number_based_on_friction_velocity*viscosity_coefficient/(reynolds_number_inf*density*delta)),2.0);
243  return wall_shear_stress;
244 }
245 
246 template <int dim, int nspecies, int nstate>
248 {
249  const double distance_from_wall_for_wall_model_input_velocity = this->navier_stokes_channel_flow_constant_source_term_wall_model_physics->distance_from_wall_for_wall_model_input_velocity; // non-dimensional -- delta x on uniform grid
250  pcout << " - distance_from_wall_for_wall_model_input_velocity = " << distance_from_wall_for_wall_model_input_velocity << std::endl;
251  const double y_position_for_wall_model_input_velocity = -this->half_channel_height + distance_from_wall_for_wall_model_input_velocity; // y-coordinate above lower wall
252  const double wall_parallel_velocity = get_x_velocity(y_position_for_wall_model_input_velocity); //non-dimensional
253  const double density = 1.0; // non-dimensional
254  const double viscosity_coefficient = this->navier_stokes_channel_flow_constant_source_term_wall_model_physics->constant_viscosity; // non-dimensional
255  const double reynolds_number_inf = this->navier_stokes_channel_flow_constant_source_term_wall_model_physics->reynolds_number_inf;
256  const double wall_shear_stress = this->navier_stokes_channel_flow_constant_source_term_wall_model_physics->wall_model_look_up_table->
257  get_wall_shear_stress_magnitude(wall_parallel_velocity,
258  distance_from_wall_for_wall_model_input_velocity,
259  viscosity_coefficient,
260  density,
261  reynolds_number_inf); // non-dimensional
262  return wall_shear_stress;
263 }
264 
265 template <int dim, int nspecies, int nstate>
267 {
268  // Integrate to final time
269  std::unique_ptr<FlowSolver::FlowSolver<dim,nspecies,nstate>> flow_solver = FlowSolver::FlowSolverFactory<dim,nspecies,nstate>::select_flow_case(this->all_parameters, parameter_handler);
270  static_cast<void>(flow_solver->run());
271 
272  // (1) Compute wall shear stress
273  std::unique_ptr<FlowSolver::ChannelFlow<dim, nspecies, nstate>> flow_solver_case = std::make_unique<FlowSolver::ChannelFlow<dim,nspecies,nstate>>(this->all_parameters);
274  double computed_wall_shear_stress = 0.0;
275  if(this->all_parameters->using_wall_model) computed_wall_shear_stress = flow_solver_case->get_average_wall_shear_stress_from_wall_model(*(flow_solver->dg));
276  else computed_wall_shear_stress = flow_solver_case->get_average_wall_shear_stress(*(flow_solver->dg));
277  const double expected_wall_shear_stress = this->get_wall_shear_stress();
278  const double relative_error_wall_shear_stress = abs(computed_wall_shear_stress - expected_wall_shear_stress);
279  pcout << "computed wall shear stress is " << computed_wall_shear_stress << std::endl;
280  pcout << "expected wall shear stress is " << expected_wall_shear_stress <<
281  " (from friction Reynolds number value is: " << this->get_wall_shear_stress_from_friction_reynolds_number() << ")" << std::endl;
282  pcout << "error is " << relative_error_wall_shear_stress << std::endl;
283  pcout << std::endl;
284  // (2-3) bulk velocity and skin friction coefficient
285  flow_solver_case->set_bulk_flow_quantities(*(flow_solver->dg));
286  const double computed_bulk_velocity = flow_solver_case->get_bulk_velocity();
287  const double computed_skin_friction_coefficient = flow_solver_case->get_skin_friction_coefficient_from_average_wall_shear_stress(computed_wall_shear_stress);
288  const double expected_bulk_velocity = this->get_bulk_velocity();
289  const double expected_skin_friction_coefficient = this->get_skin_friction_coefficient();
290  const double relative_error_bulk_velocity = abs(computed_bulk_velocity - expected_bulk_velocity);
291  const double relative_error_skin_friction_coefficient = abs(computed_skin_friction_coefficient - expected_skin_friction_coefficient);
292  pcout << "computed bulk velocity is " << computed_bulk_velocity << std::endl;
293  pcout << "expected bulk velocity is " << expected_bulk_velocity << std::endl;
294  pcout << "error is " << relative_error_bulk_velocity << std::endl;
295  pcout << std::endl;
296 
297  // (4) Compare to empiral equation by Dean 1978
298  const double emperical_estimate_for_skin_friction_coefficient = 0.073*pow(2.0*this->all_parameters->navier_stokes_param.reynolds_number_inf,(-1.0/4.0)); // Dean's 1978 paper
299  pcout << "computed skin friction coefficient is " << computed_skin_friction_coefficient << std::endl;
300  pcout << "expected skin friction coefficient is " << expected_skin_friction_coefficient << std::endl;
301  pcout << "error is " << relative_error_skin_friction_coefficient << std::endl;
302  pcout << "emperical estimate for skin friction coefficient is " << emperical_estimate_for_skin_friction_coefficient << std::endl;
303  const double percent_emperical_estimate_error = 100.0*abs(computed_skin_friction_coefficient - emperical_estimate_for_skin_friction_coefficient)/emperical_estimate_for_skin_friction_coefficient;
304  pcout << "percent error with computed is " << percent_emperical_estimate_error << " %" << std::endl;
305  if(percent_emperical_estimate_error > 30.0) {
306  pcout << "Warning: considerable difference with empirical estimate for skin friction coefficient value." << std::endl;
307  }
308  pcout << std::endl;
309 
310  // (5) Check the wall model metrics
311  if(this->check_wall_model) {
312  pcout << "Wall model checks: " << std::endl;
313  const double computed_wall_shear_stress_wall_model = get_wall_shear_stress_from_wall_model();
314  pcout << " - manually computed wall shear stress from wall model: " << computed_wall_shear_stress_wall_model << std::endl;
315  pcout << " - expected wall shear stress is " << expected_wall_shear_stress <<
316  " (from friction Reynolds number value is: " << this->get_wall_shear_stress_from_friction_reynolds_number() << ")" << std::endl;
317  const double percent_error_wall_shear_stress_wall_model = 100.0*abs(computed_wall_shear_stress_wall_model - expected_wall_shear_stress)/expected_wall_shear_stress;
318  pcout << " - percent error is " << percent_error_wall_shear_stress_wall_model << " %" << std::endl;
319  const double percent_error_wall_shear_stress_wall_model_vs_manual = 100.0*abs(computed_wall_shear_stress - computed_wall_shear_stress_wall_model)/computed_wall_shear_stress_wall_model;
320  pcout << " - percent error between computed and manually computed wall shear stress from wall model is " << percent_error_wall_shear_stress_wall_model_vs_manual << " %" << std::endl;
321  pcout << " - NOTE: computed wall shear stress without using wall model yields: " << flow_solver_case->get_average_wall_shear_stress(*(flow_solver->dg)) << std::endl;
322  if(percent_error_wall_shear_stress_wall_model > 5.0) {
323  pcout << "Error: considerable difference between wall model shear stress and expected value." << std::endl;
324  return 1;
325  } else {
326  pcout << " Test passed, wall model metrics are within specified tolerance." << std::endl;
327  }
328  }
329 
330  // Exit conditions
331  if(!this->check_wall_model){
332  if (relative_error_wall_shear_stress > 1.0e-9) {
333  pcout << "Computed wall shear stress is not within specified tolerance with respect to expected value." << std::endl;
334  pcout << "Error is : " << relative_error_wall_shear_stress << std::endl;
335  return 1;
336  } else if (relative_error_bulk_velocity > 1.0e-9) {
337  pcout << "Computed bulk velocity is not within specified tolerance with respect to expected value." << std::endl;
338  pcout << "Error is : " << relative_error_bulk_velocity << std::endl;
339  return 1;
340  } else if (relative_error_skin_friction_coefficient > 1.0e-9) {
341  pcout << "Computed skin friction coefficient is not within specified tolerance with respect to expected value." << std::endl;
342  pcout << "Error is : " << relative_error_skin_friction_coefficient << std::endl;
343  return 1;
344  }
345  pcout << " Test passed, computed wall shear stress, skin friction coefficient, and bulk velocity are within specified tolerance." << std::endl;
346  }
347 
348  return 0;
349 }
350 
351 #if PHILIP_DIM==3
353 #endif
354 } // Tests namespace
355 } // PHiLiP namespace
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
double turbulent_channel_domain_length_y_direction
For channel flow, domain length in y-direction.
TurbulentChannelMeshStretchingFunctionType
For turbulent channel flow, selects the type of mesh stretching function.
double get_skin_friction_coefficient() const
returns skin friction coefficient
double turbulent_channel_friction_velocity_reynolds_number
For channel flow, channel Reynolds number based on wall friction velocity.
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
Files for the baseline physics.
Definition: ADTypes.hpp:10
double nondimensionalized_constant_viscosity
Flag for using constant viscosity.
TurbulentChannelFlowSkinFrictionCheck(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler &parameter_handler_input)
Constructor.
double reynolds_number_inf
Farfield Reynolds number.
double get_x_velocity_gradient(const double y) const
returns x-velocity gradient
static std::unique_ptr< FlowSolver< dim, nspecies, nstate > > select_flow_case(const Parameters::AllParameters *const parameters_input, const dealii::ParameterHandler &parameter_handler_input)
Factory to return the correct flow solver given input file.
double get_wall_shear_stress_from_wall_model() const
returns wall shear stress from wall model
std::shared_ptr< Physics::NavierStokes_ChannelFlowConstantSourceTerm_WallModel< dim, nspecies, dim+2, double > > navier_stokes_channel_flow_constant_source_term_wall_model_physics
Pointer to Navier-Stokes physics object for computing things on the fly.
Main parameter class that contains the various other sub-parameter classes.
const dealii::ParameterHandler & parameter_handler
Parameter handler for storing the .prm file being ran.
const Parameters::AllParameters *const all_parameters
Pointer to all parameters.
Definition: tests.h:20
NavierStokesParam navier_stokes_param
Contains parameters for the Navier-Stokes equations non-dimensionalization.
double turbulent_channel_domain_length_z_direction
For channel flow, domain length in z-direction.
double turbulent_channel_domain_length_x_direction
For channel flow, domain length in x-direction.
bool check_wall_model
Flag for checking wall model (true if uniform grid)
double get_wall_shear_stress_from_friction_reynolds_number() const
returns wall shear stress from friction Reynolds number
TurbulentChannelMeshStretchingFunctionType turbulent_channel_mesh_stretching_function_type
Selected DensityInitialConditionType from the input file.
Navier-Stokes equations with constant physical source term for the turbulent channel flow case and wa...
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.
const XVelocityInitialConditionEnum xvelocity_initial_condition_type
Turbulent channel x-velocity initial condition type.
dealii::ConditionalOStream pcout
ConditionalOStream.
Definition: tests.h:45
double get_integral_of_x_velocity(const double y_plus) const
returns integral of x-velocity
Base class of all the tests.
Definition: tests.h:17
bool using_wall_model
Flag for using wall model (initialized as false)