Setup for turbulent inflow

Starting from version 3.5 PALM includes a so-called turbulence recycling method which allows a turbulent inflow with non-cyclic horizontal boundary conditions. The method follows the one described by Lund et al. (1998), modified by Kataoka and Mizuno (2002). The method is switched on by setting the initial parameter turbulent_inflow = .TRUE..

The turbulent signal A'(y,z) to be imposed at the left inflow boundary is taken from the same simulation at a fixed distance xr from the inflow (given by parameter recycling_width): A'(y,z) = A(xr,y,z) - A(xr,z), where A(xr,z) is the line average along y. The turbulent quantity A'(y,z) is then added to a mean inflow profile a(z) which is the horizontal (and temporal) average as calculated from a precursor run. This is done after each timestep.

In order to avoid a continous growth of the turbulent layer with time, the height up to which turbulence is recycled is limited by parameter inflow_damping_height. By default, this height is equal to the the height of the boundary layer z_i calculated by the precursor run. In the case of a strictly neutral flow you have to set the parameter inflow_damping_height because the value of z_i calculated by the precursor run is zero.

So far, a turbulent inflow is realized from the left (west) side only (2019/06/17)!

The following tries to give a short recipe about how to create a proper setup for using the turbulence recycling method:

  • Carry out a precursor run with cyclic horizontal boundary conditions, restart data output and profile output at the end of the simulation.

A precursor run with cyclic horizontal boundary conditions has to be carried out in order to create a (quasi-) stationary state. Since the horizontal average from this precursor run is used as the mean inflow profile for the main run, the wall-normal velocity component must point into the domain at every grid point and its magnitude should be large enough in order to guarantee an inflow even if a turbulence signal is added.

The main run must be initialized using initializing_actions = 'cyclic_fill' . Therefore, restart (binary) data of the precursor run must be saved.

The main run requires the mean profiles from the precursor run to be used at the inflow. For this, the horizontally and temporally averaged mean profiles as provided with the standard PALM output are used. The user has to set parameters dt_dopr, averaging_interval, etc. for the precursor run appropriately, so that an output is done at the end of the precursor run. The profile information is then contained in the restart (binary) file created at the end of the precursor run and can be used by the main run. It is very important that the mean profiles at the end of the precursor run are in a stationary or quasi-stationary state, because otherwise it may not be justified to use them as constant profiles at the inflow. Also, turbulence at the end of the precursor run should be fully developed. Otherwise, the main run would need an additional spinup-time at the beginning to get the turbulence to its final stage.

  • The restart data of the precursor run must be made available for the main run. The user has to copy/link/rename the restart data of the precursor run manually as they would be restart data of the main run, so that PALM can find the restart data during the main run. Usually, this is done by creating your restart input directory BININ (named <name_of_main_run>_d3d/RESTART) and copy/link the directory, where the restart data of the precursor run are saved (this directory is named via fast_io_catalog in .palm.config.<configuration identifier> to <name_of_precursor_run>_d3d/RESTART, see also BINOUT).
  • Set options for turbulent inflow in the parameter file of the main run

For initialization set initializing_actions = 'cyclic_fill' . Note that the initial flow field has a perfectly regular structure with a periodicity of the precursor run. This regularity can persist for a very long time. To break up this regularity, use a domain width that is not an integer multiple of the precursor run domain width. The occurring flow field discontinuity at the lateral domain boundary initiates a fast break up of the regularity.

Horizontal boundary conditions have to be set to bc_lr = 'dirichlet/radiation' . The radiation boundary condition at the outflow requires that the wall-normal velocity component at the outflow must point out of the domain at every grid point and at every timestep. Special care has to be taken in case of obstacles near the outflow, because their recirculations may violate this condition.

Because of the Dirichlet condition at the inflow, the flow does not require any further driving force in general. An external pressure gradient or a geostrophic wind can be used, but should have the same value as for the precursor run. Otherwise, the horizontally diverging wind field will induce vertically descending or ascending motions. An application of volume flow conservation (conserve_volume_flow = .TRUE.) should be done with care, because it may have the same effects.

The main run allows to use a larger domain along x and y than in the precursor run. Along z, however, the main run and the precursor run must be exactly the same.

Set turbulent_inflow = .T. .

Define the position of the recycling plane via recycling_width. The distance between the inflow and the recycling plane should be large enough to cover at least one lifetime (Lagrangian time scale) of the largest eddies. Otherwise, the turbulent structures do not have enough time to change before they are recycled, resulting in regular patterns in the flow field and distorted statistics. For estimating the Lagrangian time scale refer to Anfossi et al. (2006). Typically, the recycling width will be about the same size as the domain size of the precursor run. It is, however, recommended that both sizes do not exactly match to prevent the development of fixed-sized structures.

A damping layer for the turbulence signal can be set at top of the domain via inflow_damping_height and inflow_damping_width. Inside the damping layer the turbulence signal is linearly damped to 0%. For inflow_damping_height the boundary layer height from the precursor run should be used.

The recycled turbulence, which is mapped from the recycling plane to the inflow boundary, can be shifted in y direction. This y-shift reduces persistent streaks that may occur within the recycling domain. To use the y-shift set y_shift to a non-zero value. The distance of the y-shift is given in number of processors (PE) and should be roughly equal to the boundary layer height. For an effective reduction of streaks it is important that the flow passes the domain many times until it is shifted to its initial y-position. The number of flowthroughs is given by the least common multiple of y_shift and npey divided by y_shift. Note that this is only true for a perfectly x-aligned flow. For further details refer to Munters (2016; ​http://www.dx.doi.org/10.1063/1.4941912).

If surface heating/cooling or a surface waterflux is applied, a horizontal temperature (humidity) gradient inside the boundary layer will develop, because the temperature/humidity profiles at the inflow are constant. The resulting horizontal differences in buoyancy can trigger an undesired circulation inside the entire domain and instabilities at the inflow boundary (see pt_damping_factor). These effects can be avoided by setting recycling_method_for_thermodynamic_quantities = 'absolute_value'. In this case, the absolute instantaneous values of theta (and q if humidity = .TRUE.) are recycled, so that the potential temperature (humidity) values at the inflow boundary and the recycling plane are identical. With this method there is no horizontal temperature (humidity) gradient and thus the circulation and the instabilities at the inflow boundary will not occur. The mean inflow profile of the potential temperature (humidity) will now change in time (growing boundary layer), in contrast to the inflow profile of all other quantities (e.g. u,v,w) that are constant. In order to avoid this mismatch, the boundary layer height should be kept constant by applying a large_scale_subsidence to scalar quantities. Note that pt_damping_factor has no effect if recycling_method_for_thermodynamic_quantities = 'absolute_value'.

  • When starting the main run, palmrun must be told to provide the binary data of the restart run which is done by adding 'cyclic' to the activation-string list of the palmrun command (option -a, see job control with palmrun).
  • You can find an example run for turbulent inflow here. With this setup, the flow around a single building is simulated. You will need an additional input file for the topography (see INPUT folder) besides your _p3d file to run this simulation successfully. The corresponding precursor run has to be performed in advance.

References

  • Lund, T. S., X. Wu and K. D. Squires, 1998: Generation of turbulent inflow data for spatially-developing boundary layer simulations. J. Comput. Phys., 140, 233-258.
  • Kataoka, H. and M. Mizuno, 2002: Numerical flow computation around aeroelastic 3D square cylinder using inflow turbulence. Wind Struct., 5, 379-392.
  • Anfossi, D., U. Rizza, C. Mangia, G.A. Degrazia and E. Pereira Marques Filho, 2006: Estimation of the ratio between the Lagrangian and Eulerian time scales in an atmospheric boundary layer generated by large eddy simulation. Atmospheric Environment, 40, 326-337.
Last modified 3 years ago Last modified on Feb 24, 2021 3:16:28 PM