Physics related keywords

Compressible flow

Keyword Description Default value
Mach number REAL: Mandatory keyword
Reynolds number REAL: Mandatory keyword
Prandtl number REAL: 0.72
Turbulent Prandtl number REAL: Equal to Prandtl
AOA theta REAL: Angle of attack (degrees), based on the spherical coordinates polar angle () definition 0.0
AOA phi REAL: Angle of attack (degrees), based on the spherical coordinates azimuthal angle () definition 0.0
LES model CHARACTER(*): Options are: Vreman, Wale, Smagorinsky, None None
Wall model CHARACTER: linear

Shock capturing

The shock-capturing module helps stabilize cases with discontinuous solutions, and may also improve the results of under-resolved turbulent cases. It is built on top of a Sensors module that detects problematic flow regions, classifying them according to the value of the sensor, , mapped into the interval ,

The values of and depend on the sensor thresholds and.

At the moment, flow regions where are considered smooth and no stabilization algorithm can be imposed there. In the central region of the sensor, with , the methods shown in the next table can be used and even scaled with the sensor value, so that their intensity increases in elements with more instabilities. Finally, the higher part of the sensor range can implement a different method from the table; however, the intensity is set to the maximum this time.

All the methods implemented introduce artificial dissipation into the equations, which can be filtered with an SVV kernel to reduce the negative impact on the accuracy of the solution. Its intensity is controlled with the parameters (similar to the viscosity of the Navier-Stokes equations) and (scaling of the density-regularization term of the Guermond-Popov flux), which can be set as constants or coupled to the value of the sensor or to a Smagorinsky formulation.

Keyword Description Default value
Enable shock-capturing LOGICAL: Switch on/off the shock-capturing stabilization .FALSE.
Shock sensor CHARACTER: Type of sensor to be used to detect discontinuous regions Options are:
  • Zeros: always return 0
  • Ones: always return 1
  • Integral: integral of the sensor variable inside each element
  • Integral with sqrt: square root of the Integral sensor
  • Modal: based on the relative weight of the higher order modes
  • Truncation error: estimate the truncation error of the approximation
  • Aliasing error: estimate the aliasing error of the approximation
  • GMM: clustering sensor based on the divergence of the velocity and the gradient of the pressure
Integral
Shock first method CHARACTER: Method to be used in the middle region of the sensor (). Options are:
  • None: Do not apply any smoothing
  • Non-filtered: Apply the selected viscous flux without SVV filtering
  • SVV: Apply an entropy-stable, SVV-filtered viscous flux
None
Shock second method CHARACTER: Method to be used in the top-most region of the sensor (). Options are:
  • None: Do not apply any smoothing
  • Non-filtered: Apply the selected viscous flux without SVV filtering
  • SVV: Apply an entropy-stable, SVV-filtered viscous flux
None
Shock viscous flux 1 CHARACTER: Viscous flux to be applied in the elements where. Options are:
  • Physical
  • Guermond-Popov (only with entropy variables gradients)
--
Shock viscous flux 2 CHARACTER: Viscous flux to be applied in the elements where. Options are:
  • Physical
  • Guermond-Popov (only with entropy variables gradients)
--
Shock update strategy CHARACTER: Method to compute the variable parameter of the specified shock-capturing approach in the middle region of the sensor. Options are:
  • Constant
  • Sensor
  • Smagorinsky: only for non-filtered and SVV
Constant
Shock mu 1 REAL/CHARACTER()*: Viscosity parameter, or in the case of LES coupling 0.0
Shock alpha 1 REAL: Viscosity parameter 0.0
Shock mu 2 REAL: Viscosity parameter
Shock alpha 2 REAL: Viscosity parameter
Shock alpha/mu REAL: Ratio between and . It can be specified instead of itself to make it dependent on the corresponding values of, and it is compulsory when using LES coupling --
SVV filter cutoff REAL/CHARACTER()*: Cutoff of the filter kernel,. If "automatic", its value is adjusted automatically "automatic"
SVV filter shape CHARACTER()*: Options are:
  • Power
  • Sharp
  • Exponential
Power
SVV filter type CHARACTER()*: Options are:
  • Low-pass
  • High-pass
High-pass
Sensor variable CHARACTER()*: Variable used by the sensor to detect shocks. Options are:
  • rho
  • rhou
  • rhov
  • rhow
  • u
  • v
  • w
  • p
  • rhop
  • grad rho
  • div v
rhop
Sensor lower limit REAL: Lower threshold of the central sensor region, Mandatory keyword (except GMM)
Sensor higher limit REAL: Upper threshold of the central sensor region,
Sensor TE min N INTEGER: Minimum polynomial order of the coarse mesh used for the truncation error estimation 1
Sensor TE delta N Polynomial order difference between the solution mesh and its coarser representation 1
Sensor TE derivative CHARACTER: Whether the face terms must be considered in the estimation of the truncation error or not. Options are:
  • Non-isolated
  • Isolated
Isolated
Sensor number of clusters INTEGER: Maximum number of clusters to use with the GMM sensor 2
Sensor min. steps INTEGER: Minimum number of time steps that an element will remain detected. The last positive value will be used if the sensor "undetects" an element too early 1

Spectral vanishing viscosity

The introduction of an SVV-filtered artificial flux helps dissipate high-frequency oscillations. The baseline viscous flux can be chosen as the Navier-Stokes viscous flux or the flux developed by Guermond and Popov. In any case, this flux is expressed in a modal base where it is filtered by any of the following three filter kernels:

  • power: ,
  • sharp: if , elsewhere,
  • exponential: if , elsewhere.

The extension to three dimensions allows the introduction of two types of kernels based on the one-dimensional ones:

  • high-pass: ,
  • low-pass: ,

being the low-pass one more dissipative and, thus, more suited to supersonic cases. The high-pass filter, on the other hand, works better as part of the SVV-LES framework for turbulent cases.

The cutoff parameter can be set as "automatic", which uses a sensor to differentiate troubled elements from smooth regions. The stabilisation strategy then depends on the region:

  • smooth regions: , , ,
  • shocks: , , .

In addition to this, the viscosity can be set to "Smagorinsky" to use the implemented SVV-LES approach. In this case, the viscosity is computed following a Smagorinsky formulation with and the viscosity parameters do not depend on the region anymore,

Acoustic

The Ffowcs Williams and Hawkings (FWH) acoustic analogy is implemented as a complement to the compressible NS solver. It can run both during the execution of the NS (in-time) or as at a post-process step. The version implemented includes both the solid and permeable surface variations, but both of them for a static body subjected to a constant external flow, i.e. a wind tunnel case scenario. The specifications for the FWH are divided in two parts: the general definitions (including the surfaces) and the observers definitions. The former is detailed in the table below, while the latter are defined in a block section, similar to the monitors (see monitors):

#define acoustic observer 1
   name     = SomeName
   position = [0.d0, 0.d0, 0.d0]
#end
# end

To run the in-time computation, the observers must be defined in the control file. Beware that adding an additional observer will require to run the simulation again. To use the post-process computation, the solution on the surface must be saved at a regular time. Beware that it will need more storage. To run the post-process calculation the horses.tools binary is used, with a control file similar to the one use for the NS simulation (without monitors), and adding the keywords ''tool type'' and ''acoustic files pattern'', as explained in the table below:

Keyword Description Default value
acoustic analogy CHARACTER()*: This is the main keyword for activating the acoustic analogy. The only options is: ''FWH''. --
acoustic analogy permeable LOGICAL: Defines if uses a permeable or solid approach. .FALSE.
acoustic solid surface CHARACTER()*: Array containing the name of each boundary to be used as a surface for integration. In the form: '[bc1,bc2,bc3]'. Mandatory for using the solid surface variant. --
acoustic surface file CHARACTER()*: Path to a fictitious surface that will be used for integration. It must be tailor-made for the mesh. Mandatory for using the permeable surface variant. --
observers flush interval INTEGER: Iteration interval to flush the observers information to the files. 100
acoustic solution save LOGICAL: Defines whether it saves the NS solution on the surface. Mandatory for post-process computation. .FALSE.
acoustic save timestep REAL: Controls the time or iteration at which the FWH will be calculated (and saved if specified). If the key is missing it will be done at each timestep. --
acoustic files pattern CHARACTER()*: Pattern to the path of all the saved solutions on the surface (To be used in horses.tools for the post-process calculation). --
tool type CHARACTER()*: Necessary for post-process calculation. Defines the type of post-process of horses.tools. For the FWH analogy the value must be ''fwh post'' --

Incopressible navier-Stokes

Among the various incompressible Navier-Stokes models, HORSES3D uses an artificial compressibility formulation, which converts the elliptic problem into a hyperbolic system of equations, at the expense of a non divergence–free velocity field. However, it allows one to avoid constructing an approximation that satisfies the inf–sup condition. This methodology is well suited for use as a fluid flow engine for interface–tracking multiphase flow models, as it allows the density to vary spatially.

The artificial compressibility system of equations is:

The factor is computed as .

This solver is run with the binary horses3d.ins.

Keyword Description Default value
reference velocity (m/s) REAL: Reference value for velocity --
number of fluids (1/2) INTEGER: Number of fluids present in the simulation 1
maximum density (kg/m^3) REAL: Maximum value used in the limiter of the density Huge(1.0)
minimum density (kg/m^3) REAL: Minimum value used in the limiter of the density -Huge(1.0)
artificial compressibility factor REAL: Artificial compressibility factor --
gravity acceleration (m/s^2) REAL: Value of gravity acceleration --
gravity direction REAL: Array containing direction of gravity. Eg. --

The incompressible Navier Stokes solver has two modes: with 1 fluid and with 2 fluids. The required keywords are listed below.

Table 1: Keywords for incompressible Navier-Stokes solver. Mode with 1 fluid

Keyword Description Default value
density (kg/m^3) REAL: Density of the fluid --
viscosity (pa.s) REAL: Viscosity of the fluid --

Table 2: Keywords for incompressible Navier-Stokes solver. Mode with 2 fluids

Keyword Description Default value
fluid 1 density (kg/m^3) REAL: Density of the fluid 1 --
fluid 1 viscosity (pa.s) REAL: Viscosity of the fluid 1 --
fluid 2 density (kg/m^3) REAL: Density of the fluid 2 --
fluid 2 viscosity (pa.s) REAL: Viscosity of the fluid 2 --

Multiphase

The multiphase flow solver implemented in HORSES3D is constructed by a combination of the diffuse interface model of Cahn–Hilliard with the incompressible Navier–Stokes equations with variable density and artificial compressibility. This model is entropy stable and guarantees phase conservation with an accurate representation of surface tension effects. The modified entropy-stable version approximates:

% % % where is the phase field parameter, is the mobility, is the chemical potential, is the viscosity and is the artificial speed of sound. The factor is computed as . Mobility is computed from the control file parameters chemical characteristic time , interface width and interface tension with the formula .

The term can be implicity integrated to reduce the stiffnes of the problem with the keyword time integration = IMEX. This is only recomended if the value of is very high so that the time step of the explicit scheme is very small.

This solver is run with the binary horses3d.mu.

Keyword Description Default value
fluid 1 density (kg/m^3) REAL: Density of fluid 1 --
fluid 1 viscosity (pa.s) REAL: Viscosity of fluid 1 --
fluid 2 density (kg/m^3) REAL: Density of fluid 2 --
fluid 2 viscosity (pa.s) REAL: Viscosity of fluid 2 --
reference velocity (m/s) REAL: Reference value for velocity --
maximum density (kg/m^3) REAL: Maximum value used in the limiter of the density Huge(1.0)
minimum density (kg/m^3) REAL: Minimum value used in the limiter of the density -Huge(1.0)
artificial compressibility factor REAL: Artificial compressibility factor --
gravity acceleration (m/s^2) REAL: Value of gravity acceleration --
gravity direction REAL: Array containing direction of gravity. Eg. --
velocity direction REAL: Array containing direction of velocity used for the outflow BC. Eg. --
chemical characteristic time (s) REAL: controls the speed of the phase separation --
interface width (m) REAL: controls the interface width between the phases --
interface tension (N/m) REAL: controls the interface tension between the phases --

Particles

Horses3d includes a two-way coupled Lagrangian solver. Particles are tracked along their trajectories, according to the simplified particle equation of motion, where only contributions from Stokes drag and gravity are retained, where and are the \emph{ith} components of velocity and position of the particle, respectively. Furthermore, accounts for the continuous velocity of the fluid at the position of the particle. We consider spherical Stokesian particles, so their mass and aerodynamic response time are and , respectively, being the particle density and the particle diameter.

Each particle is considered to be subject to a radiative heat flux . The carrier phase is transparent to radiation, whereas the incident radiative flux on each particle is completely absorbed. Because we focus on relatively small volume fractions, the fluid-particle medium is considered to be optically thin. Under these hypotheses, the direction of the radiation is inconsequential, and each particle receives the same radiative heat flux, and its temperature is governed by where is the specific heat of the particle, which is assumed to be constant with respect to temperature. is the particle temperature and is the convective heat transfer coefficient, which for a Stokesian particle can be calculated from the Nusselt number .

In practical simulations, integrating the trajectory of every particle is too expensive. Therefore, particles are agglomerated into parcels, each of them accounting for many particles with the same physical properties, position, velocity, and temperature. The evolution of the parcels is tracked with the same set of equations presented for the particles.

The two-way coupling means that fluid flow is modified because of the presence of particles. Therefore, the Navier-Stokes equations are enriched with the following source terms: % % where is the Dirac delta function, is the number of parcels, is the number of particles per parcel and , , are the velocity, spatial coordinates, and temperature of the parcel \emph{nth}. The dimensionless form of the Navier Stokes equations can be seen in the appendix at the end of this document.

Particles are solved in a box domain inside the flow domain. The box is defined with the keywords minimum box'' andmaximum box''. The boundary conditions for the particles are defined with the keyword ``bc box''. Possible options are inflow/outflow, periodic and wall (with perfect rebound).

Keyword Description Default value
lagrangian particles LOGICAL: If .true. activates particles .false.
stokes number REAL: Stokes number which for Stokesian particles is --
Gamma REAL: Ratio between specific heat of particles and fluid --
phi_m REAL: Ratio between total mass of particles and fluid --
Radiation source REAL: Non-dimensional radiation source intensity --
Froude number REAL: Froude number --
high order particles source term LOGICAL: Source term with high order Dirac delta or averaged in the whole element .false.
number of particles INTEGER: Total number of parcels in the simulation --
particles per parcel REAL: particles per parcel --
Gravity direction INTEGER: Array with direction of gravity. Only required if Fr number is specified. [0,0,-1] --
particles file CHARACTER(*): Path to file with initial position of the particles. --
vel and temp from file LOGICAL: If .true. Initial velocity and temperature of particles read from file. --
injection LOGICAL: If .true. injection of particles through a face of the box. --
particles injection INTEGER: Array with a vector indicating the direction of the injection. Eg., [0,1,0] --
particles per step INTEGER: Number of particles injected per time step. --
particles iter period INTEGER: Iteration period for particles injection. Set to 1 to inject particles every time step. --
particles injection velocity REAL: Array with particles injection non-dimensional velocity. Eg., [0.d0,1.d0,0.d0] --
particles injection temperature REAL: Particles injection non-dimensional temperature --
minimum box REAL: Array with minimum x,y,z coordinates of box with particles. Eg., [0.d0,0.d0,0.d0] --
maximum box REAL: Array with maximum x,y,z coordinates of box with particles. Eg., [4.d-2,1.6d-1,4.d-2] --
bc box INTEGER: Array with boundary conditions for particles box in the form [yz,xz,xy]. --

Warning

  • Lagrangian particles are only implemented for the compressible Navier Stokes
  • Lagrangian particles do not support MPI

Complementary Modes

Wall functions

The wall function overwrites the viscous flux on the specified boundaries based on an specific law using a Newman condition. It must be used as a complement of no slip boundary condition. The table below shows the parameters that can be set in the control file. The frictional velocity is calculated using the instantaneous values of the first node (either Gauss or Gauss-Lobatto) of the element neighbour of the face element (at the opposite side of the boundary face). Currently is only supported for the compressible Navier-Stokes solver.

The standard wall function uses the Reichardt law, solving the algebraic non-linear equation using the newton method to obtain the frictional velocity. The ABL function uses the logarithmic atmospheric boundary layer law, using the aerodynamic roughness; the frictional velocity is without using any numerical method.

Keyword Description Default value
Wall Function CHARACTER(*): This is the main keyword for activating the wall function. Identifies the wall law to be used. Options are:
- Standard: uses the Reichardt law.
- ABL: uses the atmospheric boundary layer law. --
Wall Function Boundaries CHARACTER(*): Array containing the name of each boundary to be used. In the form: '[bc1,bc2,bc3]'. Mandatory for using the wall function. --
Wall Function kappa REAL: von Karman constant 0.38
Wall Function C REAL: Log law 'C' constant 4.1
Wall Function Seed REAL: Initial value for the newton method 1.0
Wall Function Damp REAL: Initial value damp for the newton method 1.0
Wall Function Tolerance REAL: Tolerance for the newton method
Wall Function max iter INTEGER: Maximum number of iterations for the newton method 100
Wall Roughness REAL: Aerodynamic roughness for the ABL wall function. Mandatory value for the ABL law. --
Wall Plane Displacement REAL: Plane displacement due to roughness for the ABL wall function 0.0
Wall Function Use Average LOGICAL: Use the time average of the velocity in the wall function, each time step the time average is recalculated. .FALSE.

Tripping

A numerical source term is added to the momentum equations to replicate the effect of a tripping mechanism used commonly in explerimental tests. The forcing is described via the product of two independent functions: one that depends streamwise and vertical directions (space only) and the other one describing the spanwise direction and time (space and time). It can be used for the compressible NS, both LES and RANS. The keywords for the trip options are:

Keyword Description Default value
use trip LOGICAL: This is the main keyword for activating the trip .FALSE.
trip time scale REAL: Time interval between the change of the time dependent part of the trip. Mandatory
trip number of modes INTEGER: Number of Fourier modes in the spanwise direction of the trip. Mandatory
trip z points INTEGER: Number of points to create the Fourier Transformation of the spanwise direction, it must be greater than the number of modes and should be ideally equal to the number of discretization points of the mesh in the same direction. Mandatory
trip attenuation REAL ARRAY(2): Length scale of the gaussian attenuation of the trip, the first position is the streamwise direction and the second is the wall-normal direction. Mandatory
trip zone CHARACTER(*) ARRAY(:): Boundary condition name that constrains at least one surface where the trip center is located. It can be either one or two boundary conditions, the latter used to generate a trip in two different positions (i.e. pressure and suction sides of an airfoil). Mandatory
trip center REAL: Position of the origin of the trip in the streamwise direction. Mandatory
trip center 2 REAL: Position of the origin of the second trip, if used, in the streamwise direction. --
trip amplitude REAL: Maximum time varying amplitude of the trip. 1.0
trip amplitude steady REAL: Maximum steady amplitude of the trip. 0.0
random seed 1 INTEGER: Number used to initialize the random number generator of the trip. It can vary in different simulations but must remain constant for a restart. 930187532
random seed 2 INTEGER: Number used to initialize the random number generator of the trip. It can vary in different simulations but must remain constant for a restart. 597734650