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 |
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:
|
Integral |
Shock first method | CHARACTER: Method to be used in the middle region of the sensor (). Options are:
|
None |
Shock second method | CHARACTER: Method to be used in the top-most region of the sensor (). Options are:
|
None |
Shock viscous flux 1 | CHARACTER: Viscous flux to be applied in the elements where. Options are:
|
-- |
Shock viscous flux 2 | CHARACTER: Viscous flux to be applied in the elements where. Options are:
|
-- |
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 |
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 |
SVV filter type | CHARACTER()*: Options are:
|
High-pass |
Sensor variable | CHARACTER()*: Variable used by the sensor to detect shocks. Options are:
|
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:
|
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 |
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:
The extension to three dimensions allows the introduction of two types of kernels based on the one-dimensional ones:
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:
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,
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'' | -- |
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 | -- |
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 | -- |
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'' and
maximum 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
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. |
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 |