AERO-F is a domain decomposition based, parallel, three-dimensional, compressible, Euler/Navier-Stokes solver based on finite volume and finite element type discretizations on unstructured meshes constructed with tetrahedra. It can model both single-phase and multi-phase flow problems where the fluid can be either a perfect gas (and possibly going through porous media), stiffened gas, barotropic liquid governed by Tait's equation of state (EOS), or a highly explosive system describable by the Jones-Wilkins-Lee (JWL) EOS. For this purpose, it is equipped with various numerical methods and the level set technique. It can also solve multi-fluid problems whether they involve multi-phase flows or not.
AERO-F can perform steady and unsteady, inviscid (Euler) and viscous (Navier-Stokes), laminar and turbulent flow simulations. For turbulent flow computations, it offers one- and two-equation turbulence models, static and dynamic LES and Variational Multi-Scale (VMS)-LES, as well as DES methods, with or without a wall function.
AERO-F operates on unstructured body-fitted meshes, or on fixed meshes that can embed discrete representations of surfaces of obstacles around and/or within which the flow is to be computed. The body-fitted meshes and the embedded discrete surfaces can be fixed, move and/or deform in a prescribed manner (for example, as in forced oscillations), or be driven via interaction with the structural code AERO-S. In the case of body-fitted meshes, the governing equations of fluid motion are formulated in the arbitrary Lagrangian Eulerian (ALE) framework. In this case, large mesh motions are handled by a corotational approach which separates the rigid and deformational components of the motion of the surface of the obstacle, and robust mesh motion algorithms that are based on structural analogies. In the case of embedded surfaces, which can have complex shapes and arbitrary thicknesses, the governing equations of fluid motion are formulated in the Eulerian framework and the wall boundary or transmission conditions are treated by an embedded boundary method.
In AERO-F, the spatial discretization combines a second-order accurate Roe, HLLE, or HLLC upwind scheme for the advective fluxes and a Galerkin centered approximation for the viscous fluxes. This semi-discretization can also achieve a fifth-order spatial dissipation error and a sixth-order spatial dispersion error — and therefore fifth-order spatial accuracy — and possibly a sixth-order spatial accuracy. Time-integration can be performed with first- and second-order implicit, and first, second, and fourth-order explicit algorithms which, when performing in the ALE setting, satisfy their discrete geometric conservation laws (DGCLs).
AERO-F embeds AERO-FL, a module for solving linearized fluid equations. This module shares with AERO-F the semi-discretization schemes outlined above. Currently, the AERO-FL module can be used to compute linearized inviscid flow perturbations around an equilibrium solution, construct a set of generalized aerodynamic and/or aerodynamic force matrices, predict linearized inviscid aeroelastic (fluid-structure) responses assuming a modalized structure, compute aeroelastic snapshots in either the time or frequency domains to construct a POD (proper orthogonal decomposition) basis, generate an aeroelastic ROM (reduced-order model) in the frequency domain, and compute aeroelastic ROM solutions in the time-domain assuming a modalized structure.
AERO-F can also be used to perform flow simulations past accelerating or decelerating obstacles, steady, inviscid or viscous sensitivity analyses with respect to a set of aerodynamic and/or shape parameters, and aeroacoustic or hydroacoustic computations using a combination of the discrete fast Fourier transform method, the solution of a time-harmonic wave propagation problem in an infinite domain, and Kirchhoff's integral method for computing the acoustic pressure and its far-field pattern. It is also equipped to communicate with a structural/thermal analyzer such as AERO-S to perform aeroelastic and aerothermal analyses using state-of-the-art fluid-structure and fluid-thermal staggered solution algorithms.
AERO-F is essentially a comprehensive external flow solver. As such, it is not yet equipped with all boundary condition treatments that are characteristic of internal flow problems. Nevertheless, it can handle a class of such problems.
The installation of AERO-F on a given computing system requires the availability on that system of the following tools:
C++ compiler g++ | Version 4.1.2 or higher.
|
Fortran compiler gfortran | Version 4.1.2 or higher.
|
Flex utility | Version 2.5 or higher. Flex is a lexical analyser required for building the parser of AERO-F's ASCII Input Command Data file.
|
Bison utility | Version 2.3 or higher. Bison is a parser generator required for building the parser of AERO-F's ASCII Input Command Data file.
|
CMake utility | Version 2.6 or higher. CMake is a cross-platform open-source build system.
It is comparable to the Unix Make program in that the build process is ultimately controlled
by configuration files (CMakeLists.txt). However unlike Make, it does not directly build the final
software but instead generates standard build files such as makefiles for Unix and projects/workspaces for Windows
Visual C++. The CMake version 2.6 utility can be obtained from http://www.cmake.org.
(Note: a “README.cmake” file discussing details on CMake options for code configuration and installation is
available).
|
and following libraries:
BLAS library | BLAS is a set of Basic Linear Algebra Subprograms required by various
operations performed in AERO-F.
|
MPI library openmpi | Version 1.2.6 or higher. Open MPI is a high-performance implementation of the Message Passing Interface (MPI) required
for performing interprocessor communication, among others. More specifically, AERO-F requires an
MPI-2 implementation such as the one provided by the Open MPI project.
|
OpenMP API | Open Multi-Processing is an Application Programming Interface (API) that
supports multi-platform shared memory multiprocessing programming in C, C++ and Fortran on many architectures, including Unix.
As an option, AERO-F can be compiled with OpenMP to enable multi-threaded execution.
|
In addition, the POD (Proper Orthogonal Decomposition) and ROM (Reduced-Order Modeling) capabilities of the linearized module AERO-FL of AERO-F require the availability on the host computing system of the following libraries:
LAPACK library | LAPACK is a high-performance Linear Algebra PACKage with advanced solvers.
|
ARPACK library | ARPACK is the Arnoldi PACKage for the solution of large-scale symmetric,
nonsymmetric, and generalized eigenproblems.
|
ScaLAPACK library | ScaLAPACK is also known as the Scalable LAPACK. This library includes a
subset of LAPACK routines redesigned for distributed memory MIMD parallel computers.
|
BLACS library | BLACS
(Basic Linear Algebra Communication Subprograms) is a linear algebra
oriented message passing interface designed for linear algebra.
|
Furthermore, the embedded computational framework of AERO-F requires the availability on the host computing system of the following libraries:
Boost library | The Boost C++ libraries are a collection of free libraries that extend the functionality of C++.
|
To install AERO-F, follow the procedure specified below:
cmake .” (without the “ ”).
Note the space and the “.” after the command cmake. The “.” specifies the current directory.
cmake command is:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- The Fortran compiler identification is GNU
-- Check for working Fortran compiler: /usr/bin/gfortran
-- Check for working Fortran compiler: /usr/bin/gfortran -- works
-- Detecting Fortran compiler ABI info
-- Detecting Fortran compiler ABI info - done
-- Checking whether /usr/bin/gfortran supports Fortran 90
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes
-- Looking for Fortran cblas_dgemm
-- Looking for Fortran cblas_dgemm - not found
-- Looking for Fortran sgemm
-- Looking for Fortran sgemm - found
-- Looking for include files CMAKE_HAVE_PTHREAD_H
-- Looking for include files CMAKE_HAVE_PTHREAD_H - found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- A library with BLAS API found.
-- Looking for Fortran cheev
-- Looking for Fortran cheev - found
-- A library with LAPACK API found.
-- Found MPI: /usr/lib/openmpi/lib/libmpi_cxx.so
-- Building for system type: Linux.
-- ARPACK library /usr/lib/libarpack.so found.
-- SCALAPACK library /usr/lib/libscalapack-openmpi.so found.
-- BLACS library /usr/lib/libblacs-openmpi.so,/usr/lib/libblacsF77init-openmpi.so found.
-- Boost version: 1.42.0
-- Will compile with MPI API /usr/lib/openmpi/include/usr/lib/openmpi/include/openmpi.
=================================================
Summary of build options
-------------------------------------------------
Distributed Execution: YES
Aeroelastic: YES
Embedded framework: YES
Modal capability: YES
Parallel SVD capability: YES
Build type: Release
Extra link flags:
=================================================
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pavery/Codes/Fluid
CMakeCache.txt file to include the file paths to all required and desired optional components
that were not automatically found by cmake. Typically, the compilers, the utilities Flex and Bison,
the libraries MPI, BLAS and LAPACK, and the API OpenMP will be automatically found.
However, it may be necessary to specify the paths for the libraries ARPACK, ScaLAPACK, BLACS and Boost.
make.
The successful completion of the procedure described above leads to the creation in the bin/ directory of AERO-F's executable aerof.
The structure of the text input data file follows closely the
internal structure of AERO-F. As a result, this file contains a list of
objects that define the problem to be solved and the numerical
techniques selected for its resolution.
Sample objects that are currently supported are:
Problem, Input, Output, Equations, Preconditioner, ReferenceState,
BoundaryConditions, MultiPhase, Space, Time, Aeroelastic,
Forced, Accelerated, MeshMotion, Linearized, and Newton. These objects
can depend themselves on other lower-level objects. All are defined in Objects.
Here are the rules followed in this document.
this.
"").
The definition of an object starts with the keyword under followed
by the name of the object. The members of an object are enclosed within curly
braces ({}). For example,
under Problem {
Type = Steady;
Mode = Dimensional;
}
is a valid syntax for the object Problem. Alternatively, it can
also be written as
Problem.Type = Steady;
Problem.Mode = Dimensional;
Notes:
;) is required after each assignment;
Both C and C++ style comments are supported and can be used in the input data file to comment out selected text regions:
/* and */ pairs is ignored;
// is ignored.
These commands do not have the described effects inside double quotes.
AERO-F can be used to perform:
This chapter describes each object that can be inserted in the AERO-F input file and its syntax.
The default value of each object member or parameter is given between square brackets ([]).
The list of currently available objects is given below.
| Object: Problem |
The Problem object sets the type, mode, and few other global parameters of the problem to be solved.
Its syntax is:
under Problem {
Type = type-id;
Mode = mode-id;
Prec = prec-id;
Framework = framework-id;
}
with
type-id [Steady]:
SteadyUnsteadyAcceleratedUnsteadySteadyAeroelasticQSTATICS of AERO-S, or one-way coupled steady-state aeroelastic
computation using the quasistatic command QSTATICS and algorithm B0 of AERO-S (local time-step). See Aeroelastic.
UnsteadyAeroelasticAcceleratedUnsteadyAeroelasticSteadyAeroThermalUnsteadyAeroThermalForcedUnsteadyLinearizedDimensional when using this option.
UnsteadyLinearizedAeroelasticDimensional.
PODConstructionPODInterpolationPODData (see Input). This file should also contain
the Mach number and angle of attack at which the interpolated POD basis is desired.
The size of the POD basis to be constructed must be specified in NumPOD (see Linearized).
Do not forget to output the computed POD basis using the PODData command in Postpro.
ROBInnerProduct
inputted to AERO-F in
Input.PODData. If Time.Form = Descriptor, the inner products are computed with respect to the matrix of cell volumes
as follows
Time.Form = NonDescriptor, the inner products are computed with respect to the identity matrix
as follows
are outputted in Output.ROBInnerProduct.
GAMConstructionDimensional.
EigenAeroelasticDimensional.
ROMPODData (see Input), or time-domain ROM fluid simulation
in which the flow is expressed in a POD basis specified in PODData (see Input). See Linearized.
ROMAeroelasticSteadySensitivityAnalysisSteadyAeroelasticSensitivityAnalysisSparseGridGeneration1DAeroacousticProbes.Pressure).
mode-id [NonDimensional]:
NonDimensional
where the subscript
designates a reference value.
AERO-F computes
internally as follows. For a perfect gas,
For a barotropic liquid,
and
For a highly explosive gas modeled by the JWL equation of state,
is the speed of sound.
are defined in LiquidModel .
(see ReferenceState).
Dimensionalprec-id [NonPreconditioned]:
NonPreconditionedLowMachImplicit.MatrixVectorProduct is set to Exact, it is automatically reset to Approximate. For
steady-state calculations, the inertia (or pseudo-time-derivative) terms can also be preconditioned (see Preconditioner)
if desired by making the request in the Time object (see Time).
framework-id [BodyFitted]:
BodyFittedEmbeddedEmbeddedALENotes:
Dimensional);
Embedded and EmbeddedALE frameworks are operational only if AERO-F was compiled and linked with the PhysBAM-Lite library.
| Object: Input |
The several input files that are required by AERO-F are specified
within the Input object. Its syntax is:
under Input {
Prefix = prefix-str;
Connectivity = connectivity-str;
Geometry = geometry-str;
Decomposition = decomposition-str;
CpuMap = cpumap-str;
Matcher = matcher-str;
EmbeddedSurface = embeddedsurface-str;
WallDistance = walldistance-str;
BodyFittedWallDistance = bodyfittedwalldistance-str;
GeometryPrefix = geometryprefix-str;
StrModes = strmodes-str;
InitialWallDisplacement = iniwalldisp-str;
PressureKirchhoff = pressurekirchhoff-str;
FilePackage = filepackage-str;
Solution = solution-str;
Levelset = levelset-str;
FluidID = fluidid-str;
Position = position-str;
EmbeddedPosition = embeddedposition-str;
EmbeddedVelocity = embeddedvelocity-str;
InletDisk = inletdisk-str;
ShapeDerivative = shapederivative-str;
InletDiskShapeDerivative = inletdiskshapederivative-str;
Cracking = cracking-str;
Perturbed = perturbsolution-str;
PODData = poddata-str;
RestartData = restartdata-str;
MeshData = meshdata-str;
TriangleSet = triangleset-str;
under 1DRestartData { ... }
}
with
prefix-str [""]:
"data/" and connectivity-str is set to "wing.con",
AERO-F looks for a connectivity file named "data/wing.con".
connectivity-str [""]:
geometry-str [""]:
Problem.Type = 1D,
this becomes the name of the ASCII file storing a one-dimensional grid in the following format:
number_of_nodes_in_the_grid
distance_of_node_1_to_the_center_of_the_sphere
distance_of_node_2_to_the_center_of_the_sphere
.
.
.
distance_of_last_node_to_the_center_of_the_sphere
decomposition-str [""]:
cpumap-str [""]:
matcher-str [""]:
embeddedsurface-str [""]:
walldistance-str [""]:
Specifically, when Problem.Framework = BodyFitted, the ASCII XPost version of this file is always produced when the software CD2TET
is used. The conversion into binary format can be performed with the SOWER software (see Hints_and_tips). When Problem.Framework = Embedded or EmbeddedALE,
this file is not needed, as the distance to an embedded viscous wall boundary is computed internally by AERO-F. In this case however, if the computational
fluid domain contains a body-fitted viscous wall, the distance from each grid point to such a wall must be inputted using bodyfittedwalldistance-str (see below).
bodyfittedwalldistance-str [ ]:
geometryprefix-str [""]:
strmodes-str [""]:
Postpro (see Postpro).
iniwalldisp-str [""]:
Input.Position and Input.InitialWallDisplacement are specified in this file,
then Input.InitialWallDisplacement member is ignored.
pressurekirchhoff-str [""]:
Problem.Type = Aeroacoustic).
filepackage-str [""]:
Solution, Position, LevelSet, FluidID, Cracking, and RestartData. Hence, when restarting a simulation that has created restart data
for Solution, Position, LevelSet, FluidID, Cracking, and RestartData, this file can be specified in this object
in lieu of all of the Solution, Position, LevelSet, FluidID, Cracking, and RestartData files.
solution-str [""]:
Restart.Solution).
levelset-str [""]:
fluidid-str [""]:
position-str [""]:
Restart.Position). If this file is not specified, AERO-F starts from the mesh position stored in geometry-str.
embeddedposition-str [""]:
Restart.EmbeddedPosition). If this file is not specified, AERO-F starts from the position of the embedded
discrete surface stored in embeddedsurface-str (see above).
embeddedvelocity-str [""]:
Restart.EmbeddedVelocity). This file is required only in the presence of adaptive mesh refinement using the
criterion
(for example, see AdaptiveMeshRefinement.RecomputeWallDistance, GapCriterion.MinimumEdgeLengthTreatment, WallProximityCriterion); or when
AERO-F is expected to subcycle during the first time-step after restarting a computation. If this file is not specified, AERO-F assumes a zero
velocity of the embedded discrete surface.
inletdisk-str [""]:
Problem.Framework.
shapederivative-str [""]:
Problem.Framework = BodyFitted), this member specifies
the name of the binary file containing
, the derivatives of the CFD mesh position
with respect to a number of
shape design variables
at the fluid/structure boundary
(see SensitivityAnalysis and Sensitivities). In this case, this information is generated as follows.
First, the following XPost-type ASCII file is created. This file starts with an XPost-like header (see below), followed by the total
number of grid points in the CFD mesh (and not the number of fluid grid points on the fluid/structure interface).
Next, the information
is specified in this ASCII file
for each shape design parameter
, one parameter at a time, in block form. First, the index
of
is
specified on a separate line starting from
(zero). Then, all grid points
of the CFD mesh are considered in the same ordering as that adopted in the corresponding XPost geometry file.
On each line corresponding to grid point
, the derivatives
,
, and
(where
,
, and
denote the coordinates of the grid point
) are provided. If the grid point
is an “interior”
point, these derivatives are set to zero. An example of the ASCII file described above is given below.
Vector <file name> under load for FluidNodes
<vector size = total number of grid points in the CFD mesh>
0
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_0 dy_i/ds_0 dz_i/ds_0
. . .
. . .
. . .
0.000000 0.000000 0.000000
1
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_1 dy_i/ds_1 dz_i/ds_1
. . .
. . .
. . .
0.000000 0.000000 0.000000
2
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_2 dy_i/ds_2 dz_i/ds_2
. . .
. . .
. . .
Finally, SOWER is applied to the ASCII file described above together with the mesh partition generated for the CFD mesh to obtain the binary distributed file shapederivative-str.
Problem.Framework = Embedded or EmbeddedALE), this member specifies the name of the ASCII file containing
, the derivatives of the embedded discrete surface position
with respect to a number of shape design variables
(see SensitivityAnalysis and Sensitivities).
This ASCII file starts with an XPost-like header (see below), followed by the number
of grid points defining the embedded discrete surface. Next, the information
is inputted in this ASCII file for each shape design parameter
, one parameter at a time, in block form.
First, the index
of
is specified on a separate line starting from
(zero). Then, all grid points defining the embedded discrete surface
are considered in the same ordering as that adopted in the
XPost geometry file of the embedded discrete surface. On each line corresponding to grid point
, the derivatives
,
, and
(where
,
, and
denote the coordinates of the grid point
) are provided.
Vector <file name> under load for EmbeddedSurfaceNodes
<vector size = total number of grid points on the embedded discrete surface>
0
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_0 dy_i/ds_0 dz_i/ds_0
. . .
. . .
. . .
0.000000 0.000000 0.000000
1
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_1 dy_i/ds_1 dz_i/ds_1
. . .
. . .
. . .
0.000000 0.000000 0.000000
2
0.000000 0.000000 0.000000
. . .
. . .
. . .
dx_i/ds_2 dy_i/ds_2 dz_i/ds_2
. . .
. . .
. . .
inletdiskshapederivative-str [""]:
, the derivatives of the inlet disk position
with respect to a number of shape design variables
(see SensitivityAnalysis and Sensitivities). The format of this ASCII file follows the same format as that of shapederivative-str.
cracking-str [""]:
Embedded or EmbeddedALE in Problem.Framework.
perturbsolution-str [""]:
Input.Solution (see Input).
If this file is not specified, the initial perturbation is set to 0.
poddata-str [""]:
Problem.Type = PODInterpolation or Problem.Type = ROBInnerProduct,
this is the name of the binary file containing a set of POD basis vectors
that could have been generated by AERO-FL (see Linearized) in a previous run where
the Problem.Type was set to PODConstruction. When Problem.Type = PODInterpolation,
poddata-str is the name of the text file specifying the
number of precomputed POD bases to be interpolated, the names of the
binary files containing each one of these bases,
their respective Mach numbers and angles of attack, and the Mach number
and angle of attack at which interpolation is desired.
The format of this text file is examplified below.
Example:
3
PODData.d/podVecs4.freq0.499.2_4.df5e3.30snap.100pod
PODData.d/podVecs4.freq0.520.2_6.df5e3.30snap.100pod
PODData.d/podVecs4.freq0.700.2_5.df5e3.30snap.100pod
0.499 0.520 0.700
0.550
2.4 2.6 2.5
2.45
The first line specifies the number of precomputed POD bases to
be interpolated. Each of the following three lines
specifies the path and name of the file containing a precomputed POD
basis to be interpolated. The following line specifies
the three Mach numbers at which the POD bases to be interpolated are
precomputed, in the order in which these bases are specified.
The next line specifies the interpolation Mach number. The following
line specifies the three angles of attack
at which the POD bases to be interpolated are precomputed, in the order
in which these bases are specified.
The last line specifies the interpolation angle of attack. When Problem.Type = ROBInnerProduct, poddata-str is the name of
the text file specifying the number of precomputed Reduced-Order Bases (ROBs) whose inner products are to be computed when Problem.Type = ROBInnerproduct,
the maximum number of these ROBs to be loaded into memory at a time, and
the names of the binary files containing each one of these ROBs.
The format of this text file is examplified below.
Example:
numFiles-int maxLoadFiles-int
ROB1File-str
ROB2File-str
...
where numFiles-int denotes the number of ROB files listed starting on the second line of the file poddata-str, maxLoadFiles-int denotes the maximum number of ROB files to be loaded in memory at a time, ROB1File-str is the (path and) name of the file containing the first ROB, ROB2File-str the (path and) name of the file containing the second ROB, etc.
restartdata-str [""]:
Restart.RestartData).
meshdata-str [" "]
triangleset-str [ ]:
NavierStokes.Flux = RotatedRiemann) and RotatedRiemann.UpwindingDirection is set to TriangleSet.
It specifies the name of the ASCII file containing a triangulated
surface to be used for determining the dominant upwinding direction
as described in the explanation of RotatedRiemann.UpwindingDirection = TriangleSet. The content of this file should be
written in the same XPost format as that of the file containing the embedded discrete surface and inputted in embeddedsurface-str (see above).
1DRestartData:
Notes:
Solution, Position, RestartData, or 1DRestartData starts by a slash (/), the variable Prefix
is not used for these files.
| Object: 1DRestartData |
The 1DRestartData object initializes a three-dimensional, dimensional flow computation locally with the results of a
spherically symmetric one-dimensional, unsteady, dimensional single-phase or two-phase flow explicit computation identified by a simulation
tag 1Dsimulation-id-int.
The syntax of this object is:
under 1DRestartData[1Dsimulation-id-int] {
File = file-str;
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
under FluidIDMap{ ... }
}
with
file-str [""]:
Restart.Solution. It is also subject to Restart.Prefix.
x0-real [0.0]:
y0-real [0.0]:
z0-real [0.0]:
FluidIDMap:
Note:
| Object: FluidIDMap |
FluidIDMap object can be used to map the fluid identification integers of a one-dimensional two-phase flow simulation identified by
its simulation tag 1Dsimulation-id-int to those of the three-dimensional flow computation locally initialized by the results of that one-dimensional simulation.
The syntax of this object is:
under FluidIDMap[FluidIDDonor-int] {
FluidIDReceptor = fluidIDreceptor-int;
}
with
fluidIDreceptor [—]:
| Object: 1DGrid |
1DGrid object allows the user to generate in AERO-F a uniform, one-dimensional grid for a spherically
or cylindrically symmetric, multi-phase, dimensional problem instead of inputting it in Input.Geometry, and specify
the coordinate system in which
to solve this problem. The first point of this grid is always located at the origin of the
coordinate system. Using 1DRestartData, the flow results obtained on this grid can be applied in a spherical region
of a three-dimensional domain centered at an arbitrary point.
The syntax of this object is:
under 1DGrid {
NumberOfPoints = numberofpoints-int;
Radius = radius-real;
Coordinates = coordinates-id;
}
with
numberofpoints [0]:
radius-real [0.0]:
coordinates-id [Spherical]:
SphericalCylindricalCartesian| Object: Output |
The Output object mainly defines the name of the files used for
post-processing (see the SOWER manual) and restart purposes.
The output information requested by the object Probes is typically generated
in an ASCII format. That requested by all other objects within the Output object is almost always generated
in a binary format; therefore, its exploitation requires post-processing by SOWER
(see SOWER's User's Reference Manual).
The syntax of this object is:
under Output {
under Postpro { ... }
under Probes { ... }
under Restart { ... }
}
Postpro:
Probes:
Restart:
| Object: Postpro |
The syntax of the Postpro object is:
under Postpro {
Prefix = prefix-str;
Frequency = frequency-int;
ForcesFrequency = forcesfrequency-int;
Width = width-int;
Precision = precision-int;
Density = density-str;
TavDensity = tavdensity-str;
Mach = mach-str;
TavMach = tavmach-str;
HWTMach = hwtmach-str;
Pressure = pressure-str;
TavPressure = tavpressure-str;
DeltaPressure = deltapressure-str;
HydroStaticPressure = hydrostaticpressure-str;
HydrodynamicPressure = hydrodynamicpressure-str;
Temperature = temperature-str;
TavTemperature = tavtemperature-str;
TemperatureNormalDerivative = tempnormder-str;
HeatFluxPerUnitSurface = heatfluxus-str;
HeatFlux = heatflux-str;
TotalPressure = totalpressure-str;
TavTotalPressure = tavtotalpressure-str;
LiftandDrag = liftanddrag-str;
TavLiftandDrag = tavliftanddrag-str;
InletDiskPressure = inletdiskpressure-str;
InletDiskPressureDistortion = inletdiskpressuredistortion-str;
InletDiskTotalPressureDistortion = inletdisktotalpressuredistortion-str;
Vorticity = vorticity-str;
TavVorticity = tavvorticity-str;
NuTilde = nutilde-str;
K = k-str;
Eps = eps-str;
EddyViscosity = eddyviscosity-str;
DeltaPlus = deltaplus-str;
CsDLES = csdles-str;
TavCsDLES = tavcsdles-str;
CsDVMS = csdvms-str;
TavCsDVMS = tavcsdvms-str;
MutOverMu = mutomu-str;
SkinFriction = skinfriction-str;
TavSkinFriction = tavskinfriction-str;
Velocity = velocity-str;
TavVelocity = tavvelocity-str;
VelocityMagnitude = velocitymagnitude-str;
HWTVelocityMagnitude = hwtvelocitymagnitude-str;
Displacement = displacement-str;
EmbeddedDisplacement = embeddeddisplacement-str;
GeneralizedDisplacement = generalizeddisplacement-str;
TavDisplacement = tavdisplacement-str;
FlightDisplacement = fldisplacement-str;
LocalFlightDisplacement = lfldisplacement-str;
Force = force-str;
GeneralizedForce = generalizedforce-str;
TavForce = tavforce-str;
HydroStaticForce = hydrostaticforce-str;
HydroDynamicForce = hydrodynamicforce-str;
Residual = residual-str;
TimeInterval = timeinterval-real;
Length = length-real;
Surface = surface-real;
XM = xm-real;
YM = ym-real;
ZM = zm-real;
PODData = poddata-str;
ROBInnerProduct = robinnerproduct-str;
AeroelasticEigenvalues = aeroelasticeigenvalues-str;
ROM = rom-str;
ROMInitialCondition = rominitialcondition-str;
Philevel = philevel-str;
FluidID = fluidID-str;
StateVectorSensitivity = statevectorsensitivity-str;
DensitySensitivity = densitysensitivity-str;
MachSensitivity = machsensitivity-str;
TemperatureSensitivity = temperatursensitivity-str;
PressureSensitivity = pressuresensitivity-str;
TotalPressureSensitivity = totalpressuresensitivity-str;
VelocitySensitivity = velocitysensitivity-str;
DisplacementSensitivity = displacementsensitivity-str;
ForceSensitivity = forcesensitivity-str;
LiftandDragSensitivity = liftanddragsensitivity-str;
InletDiskTotalPressureDistortionSensitivity = inletdisktotalpressuredistortionsensitivity-str;
GAMData = gamdata-str;
GAMFData = gamfdata-str;
SparseGrid = sparsegrid-str;
MaterialVolumes = matvols-str;
BubbleRadius = bubbleradius-str;
CPUTiming = cputiming-str;
PopulatedStateVector = populatedsatevector-str;
WallDistance = walldistance-str;
HessianMode = hessianmode-str;
DensityHessian = densityhessian-str;
PressureHessian = pressurehessian-str;
XVelocityHessian = xvelocityhessian-str;
YVelocityHessian = yvelocityhessian-str;
ZVelocityHessian = zvelocityhessian-str;
Gap = gap-str;
Postprocess = postprocess-str;
PostprocessSides = postprocesssides-int;
PostprocessLoftingFactor = postprocessloftingfactor-real;
PostprocessLoftingType = postprocessloftingtype-str;
EmbeddedSurfacePressureCoefficient = embeddedsurfacepressurecoefficient-str;
EmbeddedSurfaceSkinFriction = embeddedsurfaceskinfriction-str;
EmbeddedSurfaceTemperature = embeddedsurfacetemperature-str;
EmbeddedSurfaceMach = embeddedsurfacemach-str;
EmbeddedSurfaceHeatFlux = embeddedsurfaceheatflux-str;
EmbeddedSurfaceDeltaPlus = embeddedsurfacedeltaplus-str;
EmbeddedSurfaceDelta = embeddedsurfacedelta-str;
EmbeddedSurfaceFrictionVelocity = embeddedsurfacefrictionvelocity-str;
EmbeddedSurfaceDensity = embeddedsurfacedensity-str;
EmbeddedSurfaceDisplacement = embeddedsurfacedisplacement-str;
EmbeddedSurfaceVelocity = embeddedsurfacevelocity-str;
HybridStatus = hybridstatus-str;
HybridIndicatorFunction = hybridindicatorfunction-str;
}
with
prefix-str [""]:
frequency-int [0]:
forecesfrequency-int [1]:
width-int [11]:
precision-int [6]:
density-str [""]:
tavdensity-str [""]:
mach-str [""]:
hwtmach-str [""]:
tavmach-str [""]:
pressure-str [""]:
pressurecoefficient-str [""]:
tavpressure-str [""]:
hydrostaticpressure-str [""]:
) values.
hydrodynamicpressure-str [""]:
deltapressure-str [""]:
temperature-str [""]:
tavtemperature-str [""]:
tempnormder-str [""]:
) nodal values
for (moving) isothermal wall boundaries and zero elsewhere.
heatfluxus-str [""]:
) nodal values
for (moving) isothermal wall boundaries and zero elsewhere.
heatflux-str [""]:
).
totalpressure-str [""]:
tavtotalpressure-str [""]:
liftanddrag-str [""]:
tavliftanddrag-str [""]:
inletdiskpressure-str [""]:
inletdiskpressuredistortion-str [""]:
inletdisktotalpressuredistortion-str [""]:
vorticity-str [""]:
tavvorticity-str [""]:
nutilde-str [""]:
(field variable in the Spalart-Allmaras turbulence model) values.
k-str [""]:
Name of the binary file that contains the sequence of nodal
(turbulent kinetic energy in the
model) values.
eps-str [""]:
(turbulent kinetic energy dissipation rate in the
model) values.
eddyviscosity-str [""]:
deltaplus-str [""]:
csdles-str [""]:
computed during a dynamic LES simulation.
tavcsdles-str [""]:
computed during a dynamic LES simulation.
csdvms-str [""]:
computed during a dynamic VMS-LES simulation.
tavcsdvms-str [""]:
computed during a dynamic VMS-LES simulation.
mutomu-str [""]:
skinfriction-str [""]:
tavskinfriction-str [""]:
velocity-str [""]:
tavvelocity-str [""]:
velocitymagnitude-str [""]:
hwtvelocitymagnitude-str [""]:
displacement-str [""]:
embeddeddisplacement-str [""]:
Problem.Framework = Embedded or Problem.Framework = EmbeddedALE.
generalizeddisplacement-str [""]:
# TimeInstance ID_number Time AmplitudeMode1 AmplitudeMode2 AmplitudeMode3 AmplitudeMode4 ...
0 0.000000e+00 1.000000e-01 1.157598e-08 -1.222488e-08 4.114307e-08 ...
1 1.000000e-06 1.000000e-01 1.142372e-08 -1.224159e-08 4.118020e-08 ...
2 1.001000e-03 9.965673e-02 -1.487906e-04 -1.722218e-05 3.323083e-05 ...
3 2.001000e-03 9.862996e-02 -5.842830e-04 -6.802770e-05 1.211688e-04 ...
4 3.001000e-03 9.692134e-02 -1.276881e-03 -1.497932e-04 2.329922e-04 ...
5 4.001000e-03 9.453152e-02 -2.181306e-03 -2.576371e-04 3.288561e-04 ...
... ... ... ... ... ...
Hence, this file contains a number of columns equal to
, where
denotes the number of modes representing the structural subsystem.
tavdisplacement-str [""]:
fldisplacement-str [""]:
where
denotes time — that is, the displacement with respect to a frame moving at the free-stream velocity.
lfldisplacement-str [""]:
force-str [""]:
generalizedforce-str [""]:
Input (see Input) or with the forced oscillation mode (which is not necessarily
a natural structural mode) specified or implied under the object Forced (see Forced), in the following format:
Forced (see Forced),
a requested generalized
force computation is performed with respect to the forced oscillation
“mode” (which is not necessarily a natural structural mode), unless
a set of natural structural modes are specified in StrModes under the object Input (see Input), in which case the
generalized forces are computed with respect to these specified natural structural modes.
tavforce-str [""]:
hydrostaticforce-str [""]:
hydrodynamicforce-str [""]:
liftanddrag-str [""]:
residual-str [""]:
timeinterval-real [ ]:
which controls the frequency at which the output files are written
as follows. Let
be a positive integer set initially to 0, and incremented by 1
after each output time-iteration is reached. Then, output is performed at
each time-iteration
.
When timeinterval-real is specified to a strictly positive value, the output
files are always written at the last computed time-iteration. If both frequency-int
and timeinterval-real are specified, frequency-int is ignored.
length-real [1.0]:
surface-real [1.0]:
xm-real [0.0]:
ym-real [0.0]:
zm-real [0.0]:
poddata-str [""]:
robinnerproduct-str [""]:
Input.PODData when
Problem.Type = ROBInnerProduct. The format of this output file is examplified below.
Example:
ROB1Id-int ROB2Id-int
ROB1Id-1TimesROB2Id-1-real ROB1Id-1TimesROB2Id-2-real ...
ROB1Id-2TimesROB2Id-1-real ROB1Id-2TimesROB2Id-2-real ...
...
ROB2Id-int ROB3Id-int
ROB2Id-1TimesROB3Id-1-real ROB2Id-1TimesROB3Id-2-real ...
ROB2Id-2TimesROB3Id-1-real ROB2Id-2TimesROB3Id-2-real ...
...
where ROBiId-int and ROBjId-int identify the
-th and
-th ROBs in the file specified in Input.PODData, and
ROBiId-kTimesROBjId-l-real is the inner product
, where
is the matrix of cell volumes
if
Time.Form = Descriptor, and
is the identify matrix
if Time.Form = NonDescriptor.
aeroelasticeigenvalues-str [""]:
Example:
ModeIDnumber RealPartEigenValue ImaginaryPartEigenValue DampingRatio ConvergenceToSpecifiedPrecision (1 = yes, 0 = no)ModeId-1-int RealPartLambda-1-real ImaginaryPartLambda-1-real DampingRatio-1-real ConvergenceStatus-1-int ModeId-2-int RealPartLambda-2-real ImaginaryPartLambda-2-real DampingRatio-2-real ConvergenceStatus-2-int...
where ModeId-1-int identifies the first aeroelastic eigen mode, RealPartLambda-1-real and ImaginaryPartLambda-1-real are the real and imaginary parts
and
of the first aeroelastic eigenvalue, respectively, DampingRatio-1-real denotes the first aeroelastic damping ratio
defined as
rom-str [""]:
rominitialcondition-str [""]:
philevel-str [""]:
fluidID-str [""]:
statevectorsensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
densitysensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
machsensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
temperaturesensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
pressuresensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
totalpressuresensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
velocitysensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
displacementsensitivity-str [""]:
Problem.Framework = BodyFitted).
In this case, it specifies the name of the binary file that contains the
sequence of sensitivities of nodal displacement vectors with respect to
specified variables.
This output result is available only when the direct method is chosen
for performing the sensitivity analysis (SensitivityAnalysis.Method = Direct).
forcesensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
liftanddragsensitivity-str [""]:
SensitivityAnalysis.Method = Direct).
inletdisktotalpressuredistortionsensitivity-str [""]:
gamdata-str [""]:
gamfdata-str [""]:
and a generalized aerodynamic matrix). These are always
outputted in the format of the MSC Nastran OUTPUT4 command specified in the DMAP Programmer's Guide.
sparsegrid-str ["SparseGrid"]:
matvols-str [""]:
bubbleradius-str [""]:
Type = 1D).
cputime-str [""]:
populatedstatevector-str [""]:
Problem.Framework = Embedded
or Problem.Framework = EmbeddedALE.
In this case, it specifies the name of the binary file that contains
the sequence of nodal values of the fluid state vector in
conservation form. At the inactive (or ghost) nodes, the outputted
values are the values populated by the embedded boundary method for CFD.
walldistance-str [""]:
TurbulenceModel.Type = SpalartAllmaras) or DES (TurbulenceModel.Type = DES) turbulence model
and an embedded boundary method for CFD (Problem.Framework = Embedded or Problem.Framework = EmbeddedALE). In this case, it specifies the name of the binary file that contains the sequence
of nodal values of the distance to the nearest wall.
hessianmode-str [Dimensional]
Problem.Mode is set to Dimensional – setting this parameter to NonDimensional causes any Hessian output files specified using
this object (see below densityhessian-str, pressurehessian-str, etc.) to be outputted in non-dimensional form.
densityhessian-str [" "]]
pressurehessian-str [" "]]
xvelocityhessian-str [" "]]
-velocity Hessian matrices.
yvelocityhessian-str [" "]]
-velocity Hessian matrices.
zvelocityhessian-str [" "]]
-velocity Hessian matrices.
gap-str [" "]]
postprocess-str [On]:
Specifies the method to be used for computing aerodynamic forces and other post-processed quantities of interest on the embedded surface.
OffOnpostprocesssides-int [--]:
On.
It specifies the number of sides of the embedded surface to be treated
as "wetted" (i.e. exposed to a flow), for the purposes of evaluating on
the embedded
surface the flow-induced forces and other post-processed quantities of
interest. It can take only two values: 1, or 2. For one-sided surfaces,
the normals to the embedded surface facets must be pointing towards the
fluid.
For simulations with multiple embedded surfaces, the number of wetted
sides can be specified for each individual surface using SurfaceData.PostprocessSides.
postprocessloftingfactor-real [2.0]:
On
and the characteristic element offset – that is, the maximum normal
distance from a Gauss point on the embedded surface to a node of the
element containing it – whose specific computation depends on the
setting of postprocessloftingtype-str (see below).
postprocessloftingtype-str [Global]:
Specifies how the characteristic element offset is computed for
the purpose of determining the location of the shifted Gauss points,
when postprocess-str is set to On.
GlobalLocalembeddedsurfacepressurecoefficient-str [--]:
embeddedsurfaceskinfriction-str [--]:
embeddedsurfacetemperature-str [--]:
embeddedsurfacemach-str [--]:
embeddedsurfaceheatflux-str [--]:
embeddedsurfacedeltaplus-str [--]:
) on the embedded surface.
embeddedsurfacedelta-str [--]:
) on the embedded surface.
embeddedsurfacefrictionvelocity-str [--]:
embeddedsurfacedensity-str [--]:
embeddedsurfacedisplacement-str [--]:
embeddedsurfacevelocity-str [--]:
hybridstatus-str [--]:
EmbeddedFramework.DefinitionActiveInactive = ControlVolume.
hybridindicatorfunction-str [--]:
EmbeddedFramework.DefinitionActiveInactive = ControlVolume.
Notes:
Problem.Mode;
Input.ShapeDerivative (see Input); the sensitivities with respect to structural parameters are
outputted in the order in which these parameters are specified in the input file of AERO-S;
| Object: Probes |
The object Probes is used to request outputting, for every time-step of an AERO-F computation in the time-domain,
a specfified scalar or vector result, or for every sampled frequency of an AERO-F
computation in the frequency-domain,
a specified complex-valued scalar result. This result can be associated
with a specific node or location in the computational domain, in which
case it
is referred to here as the "probed" result, or can be independent from
any specific location in the computational domain. The current list of
scalar, vector,
and complex-valued scalar results supported by this object can be found
in the definition of its syntax given below. A spatial location where
the output is
desired is identified in an object such as Node1 within this object, whether this location coincides or not with a specific node of the CFD mesh.
The syntax of the object
Probes is:
under Probes {
Prefix = prefix-str;
Density = density-str;
Pressure = pressure-str;
Temperature = temperature-str;
Velocity = velocity-str;
Displacement = displacement-str;
FarfieldPattern = farfieldpattern-str;
under Node1{ ... }
}
with
prefix-str [""]:
density-str [""]:
Node1.
pressure-str [""]:
Problem.Type = Aeroacoustic, name of the ASCII file that contains for each sampled frequency the sequence of far-field acoustic pressure
complex values and moduli at the nodes identified in an object of the type Node1. Otherwise, name of the ASCII file that contains for each time-step the
sequence of pressure values at the nodes identified in an object of the type Node1.
Node1.
temperature-str [""]:
Node1.
velocity-str [""]:
Node1.
displacement-str [""]:
Node1.
farfieldpattern-str [""]:
denotes the position of a point in a given space,
the dimension of this space,
the wave number, and
the far-field pattern of
).
The format of this output result, which is not associated with any node
of the CFD mesh, is as follows (one line per sampled frequency):
[VECTOR_RESULT]
(1) identification number of a sampled frequency
(2) value of a sampled frequency
(3) Spherical angle alpha expressed in radians
(4) Spherical angle beta expressed in radians
(5) Real value of the far-field pattern of the acoustic pressure field
(6) Imaginary value of the far-field pattern of the acoustic pressure field
(7) Modulus of the far-field pattern of the acoustic pressure field
...
Each pair of spherical angles
(alpha) and
(beta) determines the direction
designates the transpose. The total number of output lines is equal
to the number of sampled frequencies, which is automatically set by AERO-F to
the number of snapshots of the traces on the user-defined internal "Kirchhoff" surface of the unsteady pressure field saved in Input.PressureKirchhoff plus one.
The total number of columns per outputted line is equal to ((AcousticPressure.Increment)/2+1)*(AcousticPressure.Increment).
Node1:
Notes:
Problem.Mode;
[SCALAR_RESULT]
(1) identification number of a time-step
(2) value of a physical time
(3) value of the specified scalar result at the node specified in Node1
(4) value of the specified scalar result at the node specified in Node2
...
[VECTOR_RESULT]
(1) identification number of a time-step or sampled frequency
(2) value of a physical time or a sampled frequency
(3) value of the x-component of the specified vector result or real value of the specified complex-valued scalar result at the node specified in Node1
(4) value of the y-component of the specified vector result or imaginary value of the specified complex-valued scalar result at the node specified in Node1
(5) value of the z-component of the specified vector result or modulus of the specified complex-valued scalar result at the node specified in Node1
(6) value of the x-component of the specified vector result or real value of the specified complex-valued scalar result at the node specified in Node2
(7) value of the y-component of the specified vector result or imaginary value of the specified complex-valued scalar result at the node specified in Node2
(8) value of the z-component of the specified vector result or modulus of the specified complex-valued scalar result at the node specified in Node2
...
| Object: Node |
The object Node (with an integer appended to the last letter of this word) is used to identify
a node of the mesh or a location in the computational domain where to output a probed computational result.
The syntax of the object Node (with an integer appended to the last letter of this word) is:
under node-obj {
ID = id-int;
LocationX = locationx-real;
LocationY = locationy-real;
LocationZ = locationz-real;
}
with
id-int [—]:
locationX-real [—]:
coordinate of a location in the computational domain at which a computational result is to be probed at each time-step of an AERO-F simulation.
locationY-real [—]:
coordinate of a location in the computational domain at which a computational result is to be probed at each time-step of an AERO-F simulation.
locationZ-real [—]:
coordinate of a location in the computational domain at which a computational result is to be probed at each time-step of an AERO-F simulation.
Note:
| Object: Restart |
The Restart object specifies the name of the files that are written
during (if the value of Output.Restart.Frequency is different from zero) and
at the end of the computation. These files are only needed if one wishes to
restart AERO-F (see Input).
The syntax of the Restart object is:
under Restart {
Prefix = prefix-str;
Frequency = frequency-int;
TimeInterval = timeinterval-real;
FilePackage = filepackage-str;
Solution = solution-str;
Position = position-str;
EmbeddedPosition = embeddedposition-str;
EmbeddedVelocity = embeddedvelocity-str;
LevelSet = levelset-str;
FluidID = fluidid-str;
Cracking = cracking-str;
PressureKirchhoff = pressurekirchhoff-str;
MeshData = meshdata-str;
RestartData = restartdata-str;
}
with
prefix-str [""]:
frequency-int [0]:
PressureKirchhoff, are
re-written (each save, except in the case of PressureKirchhoff, overwrites the previous one).
In the case of an aeroelastic or aerothermal simulation with the AERO-S code,
this value must be specified in the AERO-S input file.
timeinterval-real [ ]:
which controls the frequency at which the restart files are updated
as follows. Let
be a positive integer set initially to 0, and incremented by 1
after each update time-iteration is reached. Then, the update of the restart files is performed at
each time-iteration
.
When timeinterval-real is specified to a strictly positive value, the restart
files are always written at the last computed time-iteration. If both frequency-int
and timeinterval-real are specified, frequency-int is ignored. This option
is not recommended when performing a coupled-field simulation using also the AERO-S code.
filepackage-str ["DEFAULT.PKG"]:
Solution, Position, LevelSet, FluidID, Cracking, and RestartData.
Hence, when restarting a simulation that has created restart data for Solution, Position, LevelSet, FluidID, Cracking, and RestartData,
this file can be specified in Input.FilePackage in lieu of all of Input.Solution, Input.Position, Input.LevelSet, Input.FluidID,
Input.Cracking, and Input.RestartData.
solution-str ["DEFAULT.SOL"]:
position-str ["DEFAULT.POS"]:
embeddedposition-str ["DEFAULT.EMBPOS"]:
embeddedvelocity-str ["DEFAULT.EMBVEL"]:
criterion
(e.g., see AdaptiveMeshRefinement.RecomputeWallDistance, GapCriterion.MinimumEdgeLengthTreatment, WallProximityCriterion);
and/or when AERO-F is expected to subcycle during the first time-step after restarting a flow computation.
levelset-str ["DEFAULT.LS"]:
. This file can be specified
only for multi-phase flow simulations (see MultiPhase).
fluidid-str ["DEFAULT.FID"]:
cracking-str ["DEFAULT.CRK"]:
Problem.Framework = Embedded or EmbeddedALE.
pressurekirchhoff-str [""]:
Problem.Type = Aeroacoustic).
meshdata-str ["DEFAULT.MSH"]
restartdata-str ["DEFAULT.RST"]:
| Object: Surfaces |
Surfaces can be defined during the process of generating a CFD
mesh from a computer-aided design model, or inserted in a CFD mesh after
its has been generated.
In the first case, Problem.Framework can be set to BodyFitted, Embedded, or EmbeddedALE. In the second case,
Problem.Framework must be set to Embedded or EmbeddedALE. In either case, several surfaces can be defined and grouped according to a user-specified id number.
The Surfaces object specifies these surfaces in preparation for defining their attributes. Its syntax is:
under Surfaces {
under SurfaceData[surface-id-int] { ... }
...
}
with
surface-id-int [None]:
SurfaceData:
| Object: SurfaceData |
The SurfaceData object defines the attributes to be assigned to all boundary and internal (embedded) surfaces commonly
identified by the specified tag surface-id-int.
The syntax of this object is:
under SurfaceData[surface-id-int] {
BoundaryConditionID = boundarycondition-id-int;
Nx = Nx-real;
Ny = Ny-real;
Nz = Nz-real;
PostprocessSides = postprocesssides-int;
ComputeForces = computef-flag;
SeparateForces = separatef-flag;
ComputeHeatFlux = computehf-flag;
SeparateHeatFlux = separatehf-flag;
VelocityID = velocity-id-int;
ForcedVelocityID = forcedvelocity-id-int;
Type = type-id-;
Temperature = temp-real;
SlaveID = slave-id-int;
PostprocessSides = postprocesssides-int;
}
with
boundarycondition-id-int [None]:
Nx-real [0.0]:
Problem.Framework = BodyFitted;
and the simulation involves mesh motion, and/or
the computational fluid domain contains at least one symmetry plane
where a strong treatment of the symmetry boundary conditions is
requested
(Symmetry Treatment.Treatment = Strong).
If the target simulation involves mesh motion and at least one of the parameters Nx-real or Ny-real or Nz-real (see below)
is non-zero, the tagged surface (or group of surfaces) is declared a sliding plane and
Nx-real specifies the value of the x-component of the normal to this sliding plane.
In this case, the nodes in the declared sliding plane are constrained to move within this plane — that is,
the component of their displacement field along the specified normal to the sliding plane is constrained
to zero. If the declared sliding plane is also a symmetry plane
and type-id of the MeshMotion object is set to Corotational (see MeshMotion), the Symmetry object
must be specified within the MeshMotion object (see Symmetry).
Ny-real [0.0]:
Problem.Framework = BodyFitted;
and the simulation involves mesh motion, and/or
the computational fluid domain contains at least one symmetry plane
where a strong treatment of the symmetry boundary conditions is
requested
(Symmetry Treatment.Treatment = Strong).
If the target simulation involves mesh motion and at least one of the parameters Nx-real or Ny-real or Nz-real (see below)
is non zero, the tagged surface (or group of surfaces) is declared a sliding plane and
Ny-real specifies the value of the y-component of the normal to this sliding plane.
In this case, the nodes in the declared sliding plane are constrained to move within this plane — that is,
the component of their displacement field along the specified normal to the sliding plane is constrained
to zero. If the declared sliding plane is also a symmetry plane and type-id of the MeshMotion object is set to
Corotational (see MeshMotion), the Symmetry object must be specified within the MeshMotion object (see Symmetry).
Nz-real [0.0]:
Problem.Framework = BodyFitted;
and the simulation involves mesh motion, and/or
the computational fluid domain contains at least one symmetry plane
where a strong treatment of the symmetry boundary conditions is
requested
(Symmetry Treatment.Treatment = Strong).
If the target simulation involves mesh motion and at least one of the parameters Nx-real or Ny-real or Nz-real (see below)
is non zero, the tagged surface (or group of surfaces) is declared a sliding plane and
Nz-real specifies the value of the z-component of the normal to this sliding plane.
In this case, the nodes in the declared sliding plane are constrained to move within this plane — that is,
the component of their displacement field along the specified normal to the sliding plane is constrained
to zero. If the declared sliding plane is also a symmetry plane
and type-id of the MeshMotion object is set to Corotational (see MeshMotion),
the Symmetry object must be specified within the MeshMotion object (see Symmetry).
postprocesssides-int [--]:
Postpro.Postprocess is set to On. It specifies for all embedded surfaces commonly identified by the specified tag surface-id-int
the number of sides
to be treated as "wetted" (i.e. exposed to a flow), for the purposes of
evaluating on these embedded surfaces the flow-induced forces and other
post-processed quantities of interest. It can take only two values: 1,
or 2.
For one-sided surfaces, the normals to the embedded surface facets must
be pointing towards the fluid.
computef-flag [ ]:
TrueOutput.Postpro
object, AERO-F computes the total aerodynamic forces (lift, drag,
forces and moments, time-averaged counterparts, etc.) generated
by all "moving" wall boundary surfaces that are part of the
geometry, and all boundary surfaces that are embedded in the CFD mesh.
Setting this command to True adds to the total the contribution of the specified tagged
surface (or group of surfaces).
FalseOutput.Postpro
object, AERO-F computes the total aerodynamic forces (lift, drag,
forces and moments, time-averaged counterparts, etc.) generated
by all "moving" wall boundary surfaces that are part of the
geometry, and all boundary surfaces that are embedded in the CFD mesh.
Setting this command to False removes from the total the contribution of the specified
tagged surface (or group of surfaces).
separatef-flag [False]:
TrueOutput.Postpro object. The name of each output file
associated with the tagged surface (or group of surfaces) is set to the
filename of the corresponding
result specified under Output.Postpro with a postfix set to the surface id number.
Falsecomputehf-flag [ ]:
This member is relevant to all isothermal walls, whether they are part of the geometry or boundary surfaces that are embedded in the CFD mesh.
TrueOutput.Postpro object, AERO-F computes the
total heat flux through all “moving” isothermal wall boundary surfaces that are part of the geometry, and all isothermal boundary surfaces that are embedded in the CFD mesh.
Setting this command to True adds to the total the contribution of the specified tagged surface (or group of surfaces).
FalseOutput.Postpro object, AERO-F computes the
total heat flux through all “moving” isothermal wall boundary surfaces that are part of the geometry, and all isothermal boundary surfaces that are embedded in the CFD mesh.
Setting this command to False removes from the total the contribution of the specified tagged surface (or group of surfaces).
separatehf-flag [False]:
This member is relevant to all "moving" wall boundary surfaces that are part of the geometry, and all boundary surfaces that are embedded in the CFD mesh.
TrueOutput.Postpro
object.
The name of each output file associated with the tagged surface (or
group of surfaces) is set to the filename of the corresponding
result specified under Output.Postpro with a postfix set to the surface id number.
Falsevelocity-id-int [None]:
forcedvelocity-id-int [None]:
Problem.Framework = Embedded or EmbeddedALE.
type-id [ ]:
This member is relevant to:
Problem.Framework may be set to
BodyFitted, Embedded, or EmbeddedALE — but the boundary surfaces of relevance here are part of the computational fluid domain and therefore are non-immersed.
AdiabaticIsothermalSurfaceData.Temperature (see below).
PeriodicFor identified wall boundary surfaces, the default value of type-id is the value set in Wall.Type (see Wall).
temp-real [—]:
This member is relevant to isothermal wall boundary surfaces only, whether they are part of the geometry or embedded in the CFD mesh.
SurfaceData.Type (see above). Attention should be paid to
inputting this temperature, when desired, in the same system of units as that of the ideal gas constant R (see GasModel) and the remainder of the input file.
slave-id-int [—]:
This member is relevant to periodic boundary surfaces of the
computational domain where periodic boundary conditions are to be
applied. The computational domain may embed other surfaces — that is,
Problem.Framework may be set to BodyFitted, Embedded, or EmbeddedALE — but the boundary surfaces of relevance here are part of the computational fluid domain and
therefore are non-immersed.
Warning: the aforementioned second surface must be obtainable by a pure translation of the surface identified by surface-id-int.
postprocesssides-int [—]:
This parameter is relevant only if Postpro.Postprocess is set to On. It specifies the number of sides of the embedded surfaces identified by surface-id-int
to be treated as "wetted"
(i.e. exposed to a flow), for the purposes of evaluating on the embedded
surface the flow-induced forces and other post-processed quantities of
interest. It can take only two values: 1, or 2. For one-sided surfaces,
the normals to the embedded surface facets must be pointing towards the
fluid. If this parameter is not specified, its value is that specified
in Postpro.PostprocessSides.
Note:
| Object: Velocity |
Axes of rotation or translation are defined using this object to facilitate the prescription of:
The syntax of this object is:
under Velocity{
under RotationAxis[rotation-id-int] { ... } ...
}
with
RotationAxis:
rotation-id-int [None]:
| Object: RotationAxis |
The RotationAxis object defines the parameters of the specified rotation/translation data-set. Its syntax is:
under RotationAxis[rotation-id-int] {
Nx = Nx-real;
Ny = Ny-real;
Nz = Nz-real;
X0 = X0-real;
Y0 = Y0-real;
Z0 = Z0-real;
InfiniteRadius = infiniteradius-flag;
Omega = omega-real;
}
with
Nx-real [0.0]:
Ny-real [0.0]:
Nz-real [0.0]:
X0-real [0.0]:
Y0-real [0.0]:
Z0-real [0.0]:
infiniteradius-flag [False]:
FalseFalse, the vector specified above is interpreted as the normalized axis of rotation.
TrueTrue, the vector specified above is interpreted as the normalized direction of translation.
omega-real [0.0]:
False, omega-real is the angular velocity.
When infiniteradius-flag is set to True, omega-real becomes the magnitude of the translational velocity.
| Object: Volumes |
During the process of generating a fluid mesh from a computer-aided design model,
several volumes (sets of mesh elements) can be defined and grouped according to a user-specified id number.
The Volumes object specifies these volumes in preparation for defining their attributes. Its syntax is:
under Volumes{
under VolumeData[volume-id-int] { ... }
...
}
with
volume-id-int [None]:
VolumeData:
| Object: VolumeData |
The VolumeData object specifies the attributes of a
region of the computational domain (subset of the mesh elements)
identified by the integer volume-id-int.
It can also be used to set the initial conditions for a flow simulation,
whether it involves a single or multiple fluids or a single-phase or
multi-phase computation.
The syntax of this object is:
under VolumeData[volume-id-int] {
Type = type-str;
FluidID = fluid-id-int;
under PorousMedium { ... }
under InitialState { ... }
}
with
type-str [Fluid]:
FluidPorousPorousMedium object.
fluid-id-int [—]:
PorousMedium:
PorousMedium.
InitialState:
Fluid.
| Object: PorousMedium |
The PorousMedium object specifies the porosity
properties of a volume that is identified by its id number and declared
a porous medium. In this volume, the fluid flow is described by a
generalized momentum equation based on the Brinkman-Forchheimer-Extended
Darcy model.
Essentially, the following sink term
momentum equation.
The nonlinear component in the above term is called the Forchheimer term. The linear component is the usual Darcy term.
For turbulence runs, the turbulence kinetic energy
and dissipation rate
of the flow through the porous media are computed as follows:
and
are user-supplied coefficients representing the average turbulence intensity and length scale respectively, and
.
Using these values of
and
, the eddy viscosity
is computed.
The syntax of this object is:
under PorousMedium {
Ix = ix-real;
Iy = iy-real;
Iz = iz-real;
Jx = jx-real;
Jy = jy-real;
Jz = jz-real;
Kx = kx-real;
Ky = ky-real;
Kz = kz-real;
Alphax = alphax-real;
Alphay = alphay-real;
Alphaz = alphaz-real;
Betax = betax-real;
Betay = betay-real;
Betaz = betaz-real;
Idr = idr-real;
Ldr = ldr-real;
}
with
ix-real [1.0]:
iy-real [0.0]:
iz-real [0.0]:
jx-real [0.0]:
jy-real [1.0]:
jz-real [0.0]:
kx-real [0.0]:
ky-real [0.0]:
kz-real [1.0]:
alphax-real [0.0]:
.
alphay-real [0.0]:
.
alphaz-real [0.0]:
.
betax-real [0.0]:
/time.
betay-real [0.0]:
/time.
betaz-real [0.0]:
/time.
idr-real [0.01]:
ldr-real [0.1]:
.
Notes:
| Object: InitialState |
Whether in the context of a single-fluid or multi-fluid flow problem, this object can be used to specify the parameters of a uniform initial state in a region of the computational domain identified outside this object. Its syntax is:
under InitialState {
Mach = mach-real;
Velocity = velocity-real;
Alpha = alpha-real;
Beta = beta-real;
Density = density-real;
Pressure = pressure-real;
Temperature = temperature-real;
}
with
mach-real [—]:
velocity-real [—]:
alpha-real [—]:
beta-real [—]:
density-real [—]:
pressure-real [—]:
temperature-real [—]:
| Object: ReferenceState |
The ReferenceState object allows to specify some of the quantities used for
non-dimensionalizing the governing equations. Its syntax is:
under ReferenceState {
Density = density-real;
Temperature = temp-real;
Reynolds = reynolds-real;
Length = length-real;
Mach = mach-real;
}
with density-real [—];
InletFixed or InletMoving.
temp-real [—]:
reynolds-real [—]:
length-real [1.0]:
Mach-real [—]:
Inlet.Mach. Otherwise, the reference Mach number is automatically set to the non zero value of the free-stream Mach number
specified in Inlet.Mach. Hence, specifying the reference Mach number is useful primarily when the inlet Mach number is zero
as in a shock-tube problem.
Note:
| Object: Equations |
The Equations object defines the type of equations to be solved. Its syntax is:
under Equations {
Type = type-id;
GravityX = gravityx-real;
GravityY = gravityy-real;
GravityZ = gravityz-real;
under FluidModel[fluid-id-int] { ... }
under ViscosityModel { ... }
under ThermalConductivityModel { ... }
under TurbulenceClosure { ... }
}
with
type-id [Euler]:
EulerNavierStokesgravityx-real [0.0]:
gravityy-real [0.0]:
gravityz-real [0.0]:
FluidModel:
fluid-id-int[—]
ViscosityModel:
ThermalConductivityModel:
TurbulenceClosure:
| Object: FluidModel |
The object FluidModel[fluid-id-int], where fluid-id-int
is an integer identifying a fluid medium,
can be used to specify an equation of state (EOS) for this medium and
its parameters. The user can choose between the EOS of a
perfect gas, stiffened gas, Tait's EOS which typically models a
compressible barotropic liquid, and the Jones-Wilkins-Lee (JWL) EOS
which typically models a highly explosive gas.
The syntax of this object is:
under FluidModel[fluid-id-int] {
Fluid = fluidtype-id;
PressureCutOff = pressurecutoff-real;
DensityCutOff = densitycutoff-real;
NuTildeCutOff = nutildecutoff-real;
under GasModel { ... }
under LiquidModel { ... }
under JWLModel { ... }
}
with
fluid-id-int [ ]:
fluidtype-id [PerfectGas]:
PerfectGasStiffenedGasLiquidJWLpressurecutoff-real [—]:
densitycutoff-real [—]:
nutildecutoff-real [—]:
, the field variable of the one-equation Spalart-Allmaras turbulence
model. This threshold is relevant only for turbulent viscous flow
computations using the Spalart-Allmaras (TurbulenceModel.Type = SpalartAllmaras) or DES (TurbulenceModel.Type = DES) turbulence model.
If the computed value of
becomes lower than the specified threshold value, it is set to the
specified threshold value. It is recommended to set this threshold to a
large negative value (e.g. -1e9) when employing the negative form of the
SpalartAllmaras turbulence model (SpalartAllmaras.Form = SAneg);
and a small positive
value (e.g. 1e-14) otherwise (however, the specified value should be
consistent with the dimensional or nondimensional simulation mode set in
Problem.Mode).
GasModel:
LiquidModel:
JWLModel:
| Object: GasModel |
The object GasModel is currently restricted to the equation of state (EOS) of a stiffened gas which can be written as
where
,
,
,
and
denote the pressure, density, temperature, internal energy per unit mass and internal
enthalpy per unit mass, respectively, and
,
and
are the ratio of specific heats, a pressure constant,
and the specific heat at constant pressure, respectively. For example, in the case of water which can be modeled as a stiffened
gas,
represents the molecular attraction between water molecules.
The EOS of an ideal (perfect) gas is a particular case of the EOS of a stiffened gas obtained by setting
, which leads to
where
is the ideal gas constant.
The specific heats at constant volume and constant pressure are given by
respectively.
The syntax of this object is:
under GasModel {
SpecificHeatRatio = gamma-real;
IdealGasConstant = R-real;
PressureConstant = psg-real;
SpecificHeatAtConstantPressure = cp-real;
}
with
gamma-real [1.4]:
. It must be specified for both a stiffened gas and a perfect gas.
R-real [287.1]:
and therefore
should be used only when the units of this default value are consistent
with the system of units chosen for all other input data).
psg-real [0.0]:
expressed in pressure units consistent with the system of units used by all other input data.
For a perfect gas, this constant is zero (default value).
cp-real [---]:
Notes:
Problem.Mode = Dimensional);
| Object: LiquidModel |
The object LiquidModel is currently restricted to Tait's barotropic equation of
state (EOS)
where
,
,
, and
denote the pressure, density, temperature and internal enthalpy per unit mass, respectively,
,
and
are three constants,
is a reference state, and
is the specific heat at
constant pressure.
The Tait EOS also assumes that the bulk modulus K is anaffine function of the pressure
where
and
are two constants.
The constants
and
are determined from the knowledge of
and
as follows
and the constant
is determined from the knowledge of the reference state
as follows
The specific heat at constant pressure
of a fluid modeled by Tait's EOS must be specified by the user,
unless the problem definition includes a free-stream whose EOS is the same Tait's EOS of interest, in which case
AERO-F automatically sets
to
where
and
are the free-stream density and temperature, respectively,
specified or set by AERO-F as explained in Inlet.
An alternative expression of the first component of Tait's EOS is
where
. Hence, the user can specify either
or
.
The syntax of the object
LiquidModel is:
under LiquidModel {
k1 = k1-real;
k2 = k2-real;
B = B-real;
SpecificHeatAtConstantPressure = cp-real;
Pressure = referencepressure-real;
Density = referencedensity-real;
Burnable = burnable-id;
}
with
k1-real [2.07e9]:
and corresponds to water.
However, even for water, this default value should be used only when its
units are consistent with the system of units chosen for all other
input data.
If B-real is also specified, k1-real is ignored.
k2-real [7.15]:
and corresponds to water.
B-real [—]:
cp-real [—]:
referencepressure-real [—]:
referencedensity-real [—]:
burnable-flag [False];
TrueFalseNotes:
| Object: JWLModel |
This object can be used to specify the parameters of the Jones-Wilkins-Lee equation of state (EOS) which can be written as
denotes the pressure of the fluid medium,
its density,
its internal energy per unit mass,
is a non-dimensional constant,
and
are two constants with pressure units,
and
are
two non-dimensional constants, and
is a constant with a density unit.
The syntax of this object is:
under JWLModel {
Omega = omega-real;
A1 = a1-real;
R1 = r1-real;
A2 = a2-real;
R2 = r2-real;
ReferenceDensity = referencedensity-real;
}
with
omega-real[0.4]
.
a1-real[0.0]
r1-real[1.0]
.
a2-real[0.0]
r2-real[1.0]
.
referencedensity-real[1.0]
and therefore should be used only when the units of this default
value are consistent with the system of units chosen for all other input
data.
| Object: ViscosityModel |
The object ViscosityModel can be used to specify a viscosity model.
Its syntax is:
under ViscosityModel {
Type = type-id;
SutherlandConstant = cst-real;
SutherlandReferenceTemperature = temp-real;
DynamicViscosity = dynavisc-real;
BulkViscosity = bulkvisc-real;
ViscosityRatio = viscosityratio-real;
}
with
type-id [Sutherland]:
Sutherland
where Sutherland's constants
and
are specified below.
Constantcst-real [1.458e-6]:
. Its default value is
and corresponds to air.
However, even for air, this default value should be used only when its
units are consistent with the system of units chosen for all other input
data.
temp-real [110.6]:
. When performing a non-dimensional simulation, this temperature must
be specified in the same system of units as the reference temperature
ReferenceState.Temperature. Its default value is
and corresponds to air. However, even for air, this default value should be used only when its units
are consistent with the system of units chosen for all other input data.
dynavisc-real [---]:
bulkvisc-real [0]
viscosity-ratio [0]
Sutherland), specifying a constant viscosity ratio is not equivalent to specifying a constant
bulk viscosity using bulkvisc-real, due to the dependence of the dynamic viscosity on temperature. The default value of this setting is
.
Notes:
ReferenceState.Reynolds.
| Object: ThermalConductivityModel |
The object ThermalConductivityModel can be used to specify the behavior of the heat conductivity coefficient
of a fluid. If this fluid is barotropic — that is, governed by Tait's equation of state (EOS) — or if it is a stiffened
gas, it is assumed to be characterized by two constants: a constant dynamic viscosity
that is set
in ViscosityModel.DynamicViscosity, and a constant specific heat at constant pressure
that is set
in GasModel.SpecificHeatAtConstantPressure or implied by the constants set in LiquidModel.
If on the other hand it is a perfect gas, it is characterized at least by one constant, the ideal gas constant set in
GasModel.IdealGasConstant,
as its dynamic viscosity can be either a constant or governed by Sutherland's viscosity law (see ViscosityModel).
For any of the above discussed fluids,
,
and
are related by the Prandtl number
Hence, the heat conductivity coefficient
can be specified either directly, or via a constant Prandtl number (including
for dimensional simulations). If
is constant, it can be specified directly using ThermalConductivity.HeatConductivity.
If it is specified via a constant Prandtl number in ThermalConductivity.Prandtl, it is computed as
where the specific heat ratio at constant pressure
is that specified in GasModel.SpecificHeatAtConstantPressure
or implied by the parameters set in LiquidModel, and
is specified in ViscosityModel.
Hence, note that if
is constant, specifying a constant Prandtl number is equivalent to specifying a constant conductivity
coefficient.
The syntax of this object is:
under ThermalConductivityModel{
Type = type-id;
HeatConductivity = heatcond-real;
Prandtl = prandtl-real;
}
with
type-id [ConstantPrandtl]:
is inputted directly or via the Prandtl number (and the
specific heat at constant pressure and dynamic viscosity specified elsewhere, as indicated above).
ConstantConductivity
is inputted directly in heatcond-real (see below).
ConstantPrandtl
is inputted via the Prandtl number which is assumed to
be constant (see below).
heatcond-real [0.0]:
prandtl-real [0.72]:
| Object: TurbulenceClosure |
For viscous flow simulations, the type of turbulence closure is defined within
the TurbulenceClosure object. Its syntax is:
under TurbulenceClosure {
Type = type-id;
PrandtlTurbulent = coefficient-real;
under TurbulenceModel { ... }
under LESModel { ... }
under Tripping{ ... }
}
with
type-id [None]:
NoneTurbulenceModelLESModelcoefficient-real [0.9]:
TurbulenceModel:
LESModel:
Tripping:
| Object: TurbulenceModel |
For turbulent flow simulations based on the averaged Navier-Stokes equations
augmented by an eddy viscosity model, the type of the turbulence model
is defined within the TurbulenceModel object. Its syntax is:
under TurbulenceModel {
Type = type-id;
under SpalartAllmaras { ... }
under DES { ... }
under WallDistanceMethod { ... }
}
with
type-id [SpalartAllmaras]:
SpalartAllmarasDESKEpsilon
turbulence model.
SpalartAllmaras:
WallDistanceMethod:
Problem.Framework = Embedded or EmbeddedALE,
and when the Spalart-Allmaras or DES turbulence model is chosen (see
above). It specifies a method for computing in this case the distance of
each grid point of the CFD mesh to the wall.
| Object: SpalartAllmaras |
This object allows the user to specify one of four forms of the Spalart-Allmaras turbulence model. Its syntax is:
under SpalartAllmaras{
Form = form-id;
}
with
form-id [SAnoft2]:
SASAnoft2
term in the model in order to make zero a stable solution to the SA
equation with a small basin of
attraction (thus slightly delaying transition so that the trip term
could be activated appropriately). It is argued in the literature that
if the trip term is not used, then
is not necessary.
SAfv3
, because of its unusual transition behavior
in this flow regime.
SAnegProblem.Framework = Embedded or EmbeddedALE.
For more details, see S. R. Allmaras, F. T. Johnson and P. R.
Spalart, "Modifications and Clarifications for the Implementation of the
Spalart-Allmaras Turbulence Model," ICCFD7-1902, 7th International
Conference on Computational Fluid Dynamics, Big Island, Hawaii, 9-13
July 2012.
| Object: DES |
under DES{
Form = form-id;
}
with
form-id [Original]:
Fv3
, because of its unusual transition behavior
in this flow regime.
OriginalNegative| Object: WallDistanceMethod |
When Problem.Framework = Embedded or EmbeddedALE
— that is, when the computational framework is set to that of the
embedded boundary method for CFD,
and when the Spalart-Allmaras or DES turbulence model is chosen for
modeling turbulence, this object allows the user to specify the method
for computing the
distance between each grid point of the CFD mesh and the wall boundary.
Its syntax is:
under WallDistanceMethod{
Type = type-id;
MaxIts = maxits-int;
Eps = eps-real;
FrequencyControl = frequencycontrol-flag;
FrequenControlThreshold = frequencycontrolthreshold-real;
ComputeInactive = computeinactive-str;
}
with
type-id [NonIterative]:
IterativeNonIterativeClosestPointCGAL library.
maxits-int [10]:
eps-real [1e-4]:
frequencycontrol-flag [Off]:
This flag can be used to reduce the frequency at which the distance to the nearest wall boundary is updated in time. This reduction is strongly recommended for explicit-explicit fluid-structure interaction problems.
On
, due otherwise to
freezing in time the value of this distance, is larger than the threshold specified in frequencycontrolthreshold-real (see below).
Offfrequencycontrolthreshold-real [10]:
due to freezing in time the distance function.
computeinactive-str [No]:
No; in this case the wall distance is computed only
for active grid points. When the value of this parameter is set to Yes, the wall distance is computed at both active and inactive grid points: typically, this is not required unless
the wall distance gradient is used as a preferred direction for anisotropic mesh adaptation (see WallProximityCriterion.PreferredDirection).
| Object: LESModel |
For turbulent flow simulations based on the Navier-Stokes equations augmented
by a large eddy simulation model, the type of the LES model is defined within
the LESModel object. Its syntax is:
under LESModel {
Type = type-id;
Delta = delta-id;
under Smagorinsky { ... }
under Dynamic { ... }
under VMS { ... }
under DynamicVMS { ... }
under WALE { ... }
under Vreman { ... }
}
with
type-id [VMS]:
SmagorinskyDynamicVMSDynamicVMSWALEVremandelta-id [Volume]:
Volume
the filter width
used to compute the eddy viscosity is set to
Side
, the filter width
used to compute the eddy viscosity is set to the size of the largest side of this tetrahedron.
Smagorinsky:
Dynamic:
VMS:
DynamicVMS:
WALE:
Vreman:
| Object: Smagorinsky |
The Smagorinsky object specifies the parameters of the Smagorinsky LES model. Its syntax is:
under Smagorinsky{
Cs = coefficient-real;
}
with
coefficient-real [0.1]:
used in computing the eddy viscosity
| Object: Vreman |
The Vreman object specifies the parameters of Vreman's eddy-viscosity subgrid-scale model. Its syntax is:
under Vreman{
Cs = coefficient-real;
}
with
coefficient-real [0.025]:
for computing the eddy-viscosity. This constant is related to the Smagorinsky constant
through
. Its default value is 0.025.
| Object: WALE |
The WALE object specifies the parameters of the WALE LES model. Its syntax is:
under WALE{
Cw = coefficient-real;
}
with coefficient-real [0.325]:
used in computing the eddy viscosity
is the symmetric part of the square of the velocity gradient tensor and
is the deformation tensor of the resolved field.
| Object: Dynamic |
The Dynamic object specifies the parameters of Germano's dynamic LES model. Its syntax is:
under Dynamic{
under Clipping { ... }
}
with
Clipping
coefficient and upper and lower bounds for the turbulent Prandtl number
can be specified in this object.
| Object: Clipping |
The Clipping object specifies the upper bound for the
coefficient and the upper and lower bounds for the turbulent
Prandtl number
in Germano's dynamic LES model.
Its syntax is:
under Clipping{
CsMax = coefficient-real1;
PtMin = coefficient-real2;
PtMax = coefficient-real3;
}
with coefficient-real1 [0.4]:
Delta is used as a clipping upper bound for the dynamically evaluated
products.
.
.
| Object: VMS |
The VMS object specifies the parameters of the variational multiscale LES model. Its syntax is:
under VMS{
Csprime = coefficient-real;
AgglomerationLayer= layer-integer;
AgglomerationDepth = depth-integer;
}
with
coefficient-real [0.1]:
used in computing the eddy
viscosity
layer-integer [1]:
depth-integer [1]:
| Object: DynamicVMS |
The DynamicVMS object specifies the parameters of the dynamic variational multiscale LES model. Its syntax is:
under DynamicVMS{
Type = type-id;
Csprime = csprime-real;
AgglomerationLayer= layer-integer;
AgglomerationDepth1= depth-integer1;
AgglomerationDepth2= depth-integer2;
under Clipping { ... }
}
with
type-id [D1VMSLES]:
D1VMSLESD2VMSLEScsprime-real [0.1]:
layer-integer [1]:
depth-integer1 [1]:
depth-integer2 [depth-integer1 + 1]:
Clipping
coefficient and upper and lower bounds for the turbulent Prandtl number
can be specified in this object.
| Object: Clipping |
The Clipping object specifies the upper bound for the
coefficient and the upper and lower bounds for the turbulent
Prandtl number
in the dynamic VMS turbulence model.
Its syntax is:
under Clipping{
CsMax = coefficient-real1;
PtMin = coefficient-real2;
PtMax = coefficient-real3;
}
with coefficient-real1 [0.4]:
Delta is used as a clipping upper bound for the dynamically evaluated
products.
.
.
| Object: Tripping |
Turbulence can be tripped by specifying a domain outside which the turbulent eddy viscosity is set to zero to model a laminar flow. The syntax of this command is:
under Tripping {
under Box1 { ... }
}
Box1:
| Object: MultiPhase |
The MultiPhase object is used to define a multi-phase flow problem or problem component and choose a fluid-fluid flow solver.
The material interface is assumed to be well approximated by a free surface where one fluid can only apply a pressure
on the other fluid, and to be initially a closed contact surface. The available multi-phase flow solvers are based
either on the ghost fluid method, or on the finite volume method with exact, local, two-phase Riemann solvers.
The level set technique is used for capturing the material interface.
The syntax of this object is:
under MultiPhase{
LevelSetReinitializationFrequency = lsreinitfreq-int;
LevelSetMethod = lsmethod-str;
BandLevel = bandlevel-int;
Method = method-str;
Prec = prec-id;
TypeRiemannProblem = typeriemannproblem-str;
PhaseChange = phasechange-str;
ExtrapolationOrder = extrapolationorder-str;
InterfaceLimiter = interfacelimiter-flag;
RiemannComputation = riemanncomputation-str;
RiemannNormal = rnormal-id;
under SparseGrid{ ... }
under InitialConditions { ... }
}
with
lsreinitfreq-int [0]:
lsmethod-str [Conservative]:
Conservative
and
denote the density and velocity vector of the fluid at a given point, respectively, and
denotes the level set function at that point;
(b) it is solved by the same finite volume method specified for the solution of the flow problem.
Primitive
is the velocity vector of the fluid at a given point and
denotes the level set function at that point, and (b) it is solved by the same finite volume method specified
for the solution of the flow problem.
HJWENO
denotes the velocity of the fluid at a given point and
denotes the level set function at that point; (b) it is discretized
in space by a fifth-order WENO scheme, and discretized in time by the
same
scheme specified for the time-discretization of the flow problem.
Scalar
denotes the position of the material interface and
denotes the fluid velocity at that position, at a given time
; (b) this ordinary differential equation is solved by the
fourth-order time-accurate, four-stage, Runge-Kutta scheme. This is the
most accurate level set method among all three methods available for
one-dimensional computations.
bandlevel-int [5]:
5 is usually sufficient. However, for problems with complex material interfaces, higher values could be preferred.
method-str [GhostFluidForThePoor]:
GhostFluidForThePoorFiniteVolumeWithExactTwoPhaseRiemannprec-id [NonPreconditioned]:
This parameter is relevant only if method-str is set to Fiver, and Problem.Prec = LowMach.
NonPreconditionedLowMachLowMach.
typeriemannproblem-str [Surrogate]:
FiniteVolumeWithExactTwoPhaseRiemann. It specifies the type of the interface
where to construct and solve the fluid-fluid Riemann problem along an edge of the CFD mesh that intersects the zero level set in
order to enforce the appropriate fluid-fluid contact conditions, which determines the global rate of convergence of the FIVER
method.
Surrogate
, where
denotes the
typical mesh size, is introduced in the semi-discretization process. Consequently, even for second-order spatial approximations
away from the material interface (NavierStokes.Reconstruction = Linear), the FIVER method delivers a
first-order global rate of convergence.
RealNavierStokes.Reconstruction = Linear), the FIVER method delivers a second-order global rate of convergence.
Because it is a higher-fidelity option, this setting is available only for the case where
NavierStokes.Reconstruction = Linear). Otherwise, it is automatically reverted to the Surrogate setting.
phasechange-str[Extrapolation]:
FiniteVolumeWithExactTwoPhaseRiemann.
It specifies a method for treating fluid-fluid phase changes.
RiemannSolutionExtrapolationextrapolationorder-str [---]:
Extrapolation. It specifies the order of the extrapolation method.
FirstOrderSecondOrderThe default value of the parameter is FirstOrder if typeriemannproblem-str = Surrogate, and SecondOrder
if typeriemannproblem-str = Real.
interfacelimiter-flag [Off]:
Real (see above), phasechange-id
is set to Extrapolation (see above), and extrapolationorder-id is set to SecondOrder. It can take one of the
two following values:
OnOffriemanncomputation-str[SecondOrder]:
FirstOrderSecondOrderTabulationRiemannInvariantProblem.Type is set to anything but SparseGridGeneration (see Problem),
this
option, which is highly recommended in this case because of its
computational efficiency, requests the exploitation of a sparse grid
tabulation to interpolate the values
of the Riemann invariants of the relevant Riemann problem.
This tabulation is specified in SparseGrid. On the other hand when Problem.Type is set to SparseGridGeneration (see Problem),
this option specifies that the Riemann invariants are to be tabulated in a sparse grid
according to the parameters specified in the SparseGrid.
TabulationRiemannProblemProblem.Type is set to anything but SparseGridGeneration (see Problem),
this option requests the exploitation of a sparse grid tabulation to interpolate directly the solutions
of the relevant Riemann problems. This tabulation is inputted in SparseGrid.FileName.
On the other hand when Problem.Type is set to SparseGridGeneration (see Problem),
this option specifies that the solutions of the Riemann problems are to be tabulated in a sparse grid
according to the parameters specified in the SparseGrid.
rnormal-id [LevelSet]:
LevelSetFluidInitialConditions:
Note:
| Object: InitialConditions |
The level set function and the state of each fluid of a multi-phase flow computation are initialized using this object. The initialization of each level set function is performed by specifying the geometry of a surface that separates initially two fluids. Within the region it occupies, the state of each fluid is initialized to a uniform flow whose parameters are specified in this object.
The syntax of the InitialConditions object is:
under InitialConditions {
under Sphere[sphere-id-int] { ... }
...
under Plane[plane-id-int] { ... }
...
under Box[box-id-int] { ... }
}
with
sphere-id-int[—]
plane-id-int[—]
box-id-int[—]
Sphere:
Plane:
Box:
Notes:
VolumeData object and the present object.
InitialConditions object; finally, the states of all grid points
located inside each sphere specified in Box[sphere-id-int] are
initialized as requested in the corresponding InitialConditions object.
| Object: Sphere |
The Sphere object specifies the location and size of a spherical region, as well as the initial condition parameters
for the flow inside this region. Its syntax is:
under Sphere[sphere-id-int] {
FluidID = fluid-id-int;
Center_x = center_x-real;
Center_y = center_y-real;
Center_z = center_z-real;
Radius = radius-real;
under InitialState{ ... }
under ProgrammedBurn{ ... }
}
with sphere-id-int[—]
fluid-id-int [—]:
center_x-real [0.0]:
center_y-real [0.0]:
center_z-real [0.0]:
radius-real [—]:
InitialState:
ProgrammedBurn:
| Object: ProgrammedBurn |
The ProgrammedBurn object can be used to specify the parameters of the programmed burn of a highly explosive
material located within a region specified by a closed geometrical object of AERO-F such as a Box or a
Sphere defined under MultiPhase.InitialConditions, or designated by a Point defined under
EmbeddedFramework.InitialConditions. Before burning, this explosive material, which must be modeled in
FluidModel as a Liquid and declared in LiquidModel as burnable (LiquidModel.Burnable = True),
is attributed the fluid ID number FluidID specified in the aforementioned geometrical object or designation (for example,
see Sphere.FluidID). As this explosive material burns, the resulting product, which must be modeled in
FluidModel as a perfect gas or using the JWL Equation of State (EOS), is attributed the fluid ID number BurnedEOS
which should have been defined outside this object — for example, in FluidModel.
under ProgrammedBurn {
Ignite = ignite-flag;
IgnitionTime = ignition-time-real;
IgnitionX0 = ignition-x0-real;
IgnitionY0 = ignition-y0-real;
IgnitionZ0 = ignition-z0-real;
E0 = detonation-energy-real;
ChapmanJouguetDensity = cj-density-real;
ChapmanJouguetPressure = cj-pressure-real;
ChapmanJouguetDetonationVelocity = cj-detonation-speed-real;
LimitPeak = limitpeak-flag;
BurnedEOS = burned-fluidID-int;
}
with
ignite-flag [True]:
In general, AERO-F determines whether at a discrete time
an explosive material is to be ignited or not,
or whether it has already been ignited, by checking whether its ignition time specified in ignitiontime-real (see below) has
been reached or not, or exceeded, at time
. However, this flag is used to explicitly manage the ignition of an explosive
material, particularly during a restart simulation.
OnFluidID can be ignited during a programmed burn simulation.
FluidID is ignited even if the first time-stamp
of the restart simulation is greater than
ignitiontime-real. In the latter case, the explosive material ends up being re-ignited at the beginning of the restart
simulation.
OffFluidID can never be ignited during a programmed burn simulation.
FluidID can also never be ignited. However, if it was ignited during the simulation from which the
new simulation is to restart, AERO-F automatically figures this out and restarts and proceeds correctly.
Hence, during the restarting of a three-dimensional multi-phase simulation with a programmed burn, this flag should be set
to Off if the explosive material identified by FluidID has already been ignited, and to On otherwise.
ignitiontime-real [0.0]:
ignition-x0-real [0.0]:
ignition-y0-real [0.0]:
ignition-z0-real [0.0]:
detonation-energy-real [—]:
cj-density-real [-1.0]:
cj-pressure-real [-1.0]:
cj-detonation-speed-real [-1.0]:
limitpeak-flag [False]
True, AERO-F limits the maximum values of the density and pressure fields
behind the detonation wave to the Chapman-Jouguet density and Chapman Jouguet pressure values cjdensity-real
and cjpressure-real, respectively.
burned-fluidID-int [—]:
Notes:
FluidID, but all explosive products can share the same fluid integer ID BurnedEOS
if needed or desired.
| Object: Box |
The Box object specifies the location and size of a boxy region, as well as the initial condition parameters
for the flow inside this region. Its syntax is:
under Box[box-id-int] {
FluidID = fluid-id-int;
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
X1 = x1-real;
Y1 = y1-real;
Z1 = z1-real;
under InitialState{ ... }
under ProgrammedBurn{ ... }
}
with box-id-int[—]
fluid-id-int [—]:
x0-real [0.0]:
y0-real [0.0]:
z0-real [0.0]:
x1-real [0.0]:
y1-real [0.0]:
z1-real [0.0]:
InitialState:
ProgrammedBurn:
| Object: Plane |
The Plane object defines a plane by a point and a normal vector, and specifies the initial conditions in the region of
the computational domain toward which the normal vector points to. Its syntax is:
under Plane[plane-id-int] {
FluidID = fluid-id-int;
Point_x = point_x-real;
Point_y = point_y-real;
Point_z = point_z-real;
Normal_x = normal_x-real;
Normal_y = normal_y-real;
Normal_z = normal_z-real;
under InitialState{ ... }
}
with
plane-id-int[—]
fluid-id-int [—]:
point_x-real [0.0]:
point_y-real [0.0]:
point_z-real [0.0]:
normal_x-real [0.0]:
normal_y-real [0.0]:
normal_z-real [0.0]:
InitialState:
| Object: SparseGrid |
SparseGrid offers the possibility of tabulating some data in sparse grid format (see TAB),
or exploiting it when readily available.
This data can be either the Riemann invariants along a characteristic
curve, or the solutions of two-phase Riemann problems.
When using this object to tabulate the solutions of two-phase Riemann
problems, one fluid is assumed to be modeled by the JWL EOS and must be
specified in FluidModel[0], and the other is assumed to be a perfect or stiffened gas and must be specified in FluidModel[1].
The syntax of this object is:
under SparseGrid {
FileName = filename-str;
NumberOfFiles = numfiles-int;
Verbose = verbose-int;
NumberOfInputs = numinputs-int;
NumberOfOutputs = numoutputs-int;
Input1Minimum = in1min-real;
Input1Maximum = in1max-real;
NumberOfDomains1 = numdomains1-int;
...
Input6Minimum = in6min-real;
Input6Maximum = in6max-real;
NumberOfDomains6 = numdomains6-int;
MinimumNumberOfPoints = minnumpts-int;
MaximumNumberOfPoints = maxnumpts-int;
DegreeDimAdapt = degdimadapt-real;
RelativeAccuracy = relacc-real;
AbsoluteAccuracy = absacc-real;
}
with
filename-str [""]:
numfiles-int [0]:
verbose-int [0]:
numinputs-int [2]:
numoutputs-int [2]:
maxnumpts-int [100]:
degdimadapt-real [0.75]:
relacc-real [1.0e-3]:
absacc-real [1.0e-1]:
Notes:
-th input variable into an arbitrary number of subdomains parameterized above by
= numdomains
-int
for the purpose of parallel processing
can but is not guaranteed to accelerate the sparse grid tabulation
process; the reason is that the scope of the maximum number of points
specified in maxnumpts-int applies to each subdomain;
-th input variable is split into an arbitrary number of subdomains parameterized above by
= numdomains
-int case, the tabulation of the function of interest
is performed on a number of sparse grids equal to
, where
numinputs-int; in this case, this tabulation process is parallelized at the sparse grid level and therefore can use a maximum
number of processors equal to
processors;
| Object: BoundaryConditions |
This object can be used to specify default boundary conditions to be applied to all inlet, outlet, and wall boundary surfaces, and/or define specific sets of boundary conditions that can be attributed in SurfaceData to subsets of these bounday surfaces. In some cases, the default boundary conditions defined herein can be locally modified in the SurfaceData object which also offers a broader set of boundary conditions.
This object can also be used to complete the description of the far-field pressure for hydro computations. Its syntax is:
under BoundaryConditions {
under Inlet { ... }
under Outlet { ... }
under Wall { ... }
under Symmetry { ... }
under Hydro { ... }
under BoundaryData[boundaryconditions-id-int] { ... }
under Symmetry
}
with
boundaryconditions-id-int [None]:
Inlet:
Outlet:
Outlet object can be omitted if the inflow and outflow states are identical.
Wall:
Hydro:
BoundaryData:
Notes:
Problem.Mode is set to Dimensional, the inflow pressure
and density must be specified for an aerodynamic computation and the inflow
pressure and temperature for a hydro-computation;
Problem.Mode is set to Dimensional, the specified
default boundary conditions are applied “as-is” to the dimensional variables.
On the other hand, if Problem.Mode is set to NonDimensional,
the specified default boundary conditions are applied “as-is” to the non-dimensional
variables.
| Object: Inlet |
The Inlet object can be used to define either the default inlet boundary conditions for all boundary surfaces of the InletFixed
and InletMoving types, or the locally modified inlet boundary conditions (see BoundaryData.Inlet). These conditions are typically far-field inlet boundary conditions.
They can be locally modified, if desired, using the object BoundaryData.
The syntax of this object is:
under Inlet {
Type = type-id;
FluidID = fluid-id-int;
Mach = mach-real;
Velocity = velocity-real;
Alpha = alpha-real;
Beta = beta-real;
Density = density-real;
Pressure = pressure-real;
Temperature = temperature-real;
NuTilde = nutilde-real;
K = k-real;
Eps = eps-real;
}
with
type-id [External]:
ExternalInternal
First, it is noted that because the outlet boundary is subsonic, the true pressure at the inlet is not specified but propagated numerically from the outlet boundary to the inlet boundary during the solution procedure. Hence, the inlet pressure that can be specified in the input file should be considered only as a “knob”. In this case, it turns out that the free-stream Mach number is also a knob. Now, given the velocity vector to be specified at the inlet boundary, one can compute its modulus.
This modulus,
, is related to the pressure and Mach number via
where
,
,
, and
designate the Mach number, ratio of specific heats, pressure, and density, respectively.
Hence, (after specifying the legitimate density at the inlet
boundary) one begins by choosing the Mach number and the pressure at
the subsonic inlet boundary so that
is equal to the modulus of the desired velocity vector.
Then, the angles of attack alpha-real and beta-real are set to obtain the desired components of this velocity vector.
Clearly, there are many
combinations that lead to the same
.
Since in this case both
and
are only knobs, all combinations are in principle valid.
However, those combinations with a Mach number knob that is far away from a reasonable value associated with
can lead to numerical difficulties.
In this case, AERO-F considers the inlet density to be the reference density (which is to be considered as the inlet density to be specified), the modulus of the inlet velocity vector
to be the modulus of the reference velocity vector (which is to be considered as the modulus of the inlet velocity vector to be prescribed), the outlet pressure to be the reference pressure (which is to be considered the outlet pressure to be prescribed), and the artificial inlet pressure knob to be the reference pressure too (warning: in this context, the reference pressure is not to be confused with the non-dimensionalization pressure). It follows that AERO-F automatically sets
From a discussion similar to that of the dimensional case described above, it follows that in the non-dimensional case, the user needs to input only the reference Mach number and the angles of attack alpha-real and beta-real. Furthermore, from the above explanation, it also follows that the reference Mach number should be set to
Then, by default, the free-stream Mach number is set to the reference Mach number (see below).
For a barotropic fluid, the pressure and density are not independent variables. Hence, in this case, the primitive variables are the density (or pressure), velocity field, and temperature. The modulus of the inlet velocity vector is given by
where
are the “reference” pressure, “reference” density, and the two constants used for defining the barotropic equation of state of the fluid. Because the outlet boundary is subsonic, the pressure — and therefore the density — at the inlet is not specified but propagated numerically from the outlet boundary to the inlet boundary during the solution procedure. The free-stream Mach number is a knob. Given the velocity vector to be specified at the inlet boundary, one can compute its modulus.
From the above formula, it follows that, after specifying the pressure at the outlet boundary, one chooses the Mach number
so that
is equal to the modulus of the desired velocity vector. Then, one sets the angles of attack alpha-real and beta-real to obtain the desired components of this velocity vector. One also specifies the temperature at the inlet boundary.
In this case, AERO-F considers the outlet density to be the
reference density, and the modulus of the
inlet velocity vector to be the modulus of the reference velocity
vector. At the inlet, it computes the reference temperature using the
formula given in Problem. Thus AERO-F automatically sets
while the non-dimensionalized temperature is set by the user. Also, AERO-F automatically sets the artificial inlet density to
In addition, the user must specify the reference Mach number so that
where
In both dimensional and non-dimensional cases, for this class of flow problems, AERO-F enforces the true inlet and outlet boundary conditions in a weak sense unless it is compiled with the flag STRONG_INLET_BC set ON.
fluid-id-int [0]:
mach-real [—]:
velocity-real [—]:
alpha-real [—]:
beta-real [—]:
density-real [—]:
Problem.Mode is set to Dimensional,
and FluidModel.Fluid is set to PerfectGas, StiffenedGas, or JWL.
If the fluid is modeled as a barotropic liquid or gas (FluidModel.Fluid = Liquid) and
Problem.Mode is set to Dimensional, this parameter does not need to be specified because it is automatically
determined using the equation of state and the far-field pressure pressure-real (see below).
pressure-real [—]:
Problem.Mode is set to Dimensional and:
FluidModel.Fluid is set to PerfectGas, StiffenedGas, or JWL, or the object StructuralPreload
is used to preload a structure with a uniform but time-dependent, linearly increasing, pressure field.
Note that:
FluidModel.Fluid = Liquid),
Problem.Mode is set to Dimensional, and this parameter is not specified, it is automatically set
by AERO-F to the "reference" pressure specified in LiquidModel. In this case, the far-field density is
also automatically set by AERO-F to the "reference" density (see LiquidModel).
temperature-real [—]:
FluidModel.Fluid is set to Liquid), and
only in this case. If Problem.Mode is set to Dimensional, this temperature must be specified in Kelvin (in this case, the user
should verify that the ideal gas constant R (see GasModel) is specified in the same system of units as all other input data).
If Problem.Mode is set to NonDimensional, this specified temperature is interpreted as the value of the non-dimensionalized free-stream temperature.
nutilde-real [see below]:
, where
is the laminar kinematic viscosity of the fluid,
is its density, and
is its dynamic
viscosity (see ViscosityModel). These default values provide fully turbulent boundary and shear layers while avoiding numerical difficulties.
k-real [—]:
turbulence model (required if Problem.Mode is set to Dimensional).
eps-real [—]:
turbulence model (required if Problem.Mode is set to Dimensional).
Note:
Problem.Type = 1D), this object is ignored (and the presence
in the ASCII Input Command Data file of the object Outlet is required);
| Object: Outlet |
The Outlet object can be used to define either the default outlet boundary conditions for all boundary surfaces of the InletFixed
and InletMoving types, or the locally modified outlet boundary conditions (see BoundaryData.Inlet). These conditions are typically far-field outlet boundary conditions.
They can be locally modified, if desired, using the object BoundaryData.
under Outlet {
Type = type-id;
FluidID = fluid-id-int;
Mach = mach-real;
Velocity = velocity-real;
Alpha = alpha-real;
Beta = beta-real;
Density = density-real;
Pressure = pressure-real;
Temperature = temperature-real;
NuTilde = nutilde-real;
K = k-real;
Eps = eps-real;
}
with
type-id [External]:
ExternalInternal
First, it is noted that because the outlet boundary is subsonic, the true pressure at the inlet is not specified but propagated numerically from the outlet boundary to the inlet boundary during the solution procedure. Hence, the inlet pressure that can be specified in the input file should be considered only as a “knob”. In this case, it turns out that the free-stream Mach number is also a knob. Now, given the velocity vector to be specified at the inlet boundary, one can compute its modulus.
This modulus,
, is related to the pressure and Mach number via
where
,
,
, and
designate the Mach number, ratio of specific heats, pressure, and density, respectively.
Hence, (after specifying the legitimate density at the inlet
boundary) one begins by choosing the Mach number and the pressure at
the subsonic inlet boundary so that
is equal to the modulus of the desired velocity vector.
Then, the angles of attack alpha-real and beta-real are set to obtain the desired components of this velocity vector.
Clearly, there are many
combinations that lead to the same
.
Since in this case both
and
are only knobs, all combinations are in principle valid.
However, those combinations with a Mach number knob that is far away from a reasonable value associated with
can lead to numerical difficulties.
In this case, AERO-F considers the inlet density to be the reference density (which is to be considered as the inlet density to be specified), the modulus of the inlet velocity vector
to be the modulus of the reference velocity vector (which is to be considered as the modulus of the inlet velocity vector to be prescribed), the outlet pressure to be the reference pressure (which is to be considered the outlet pressure to be prescribed), and the artificial inlet pressure knob to be the reference pressure too (warning: in this context, the reference pressure is not to be confused with the non-dimensionalization pressure). It follows that AERO-F automatically sets
From a discussion similar to that of the dimensional case described above, it follows that in the non-dimensional case, the user needs to input only the reference Mach number and the angles of attack alpha-real and beta-real. Furthermore, from the above explanation, it also follows that the reference Mach number should be set to
Then, by default, the free-stream Mach number is set to the reference Mach number (see below).
For a barotropic fluid, the pressure and density are not independent variables. Hence, in this case, the primitive variables are the density (or pressure), velocity field, and temperature. The modulus of the inlet velocity vector is given by
where
are the “reference” pressure, “reference” density, and the two constants used for defining the barotropic equation of state of the fluid. Because the outlet boundary is subsonic, the pressure — and therefore the density — at the inlet is not specified but propagated numerically from the outlet boundary to the inlet boundary during the solution procedure. The free-stream Mach number is a knob. Given the velocity vector to be specified at the inlet boundary, one can compute its modulus.
From the above formula, it follows that, after specifying the pressure at the outlet boundary, one chooses the Mach number
so that
is equal to the modulus of the desired velocity vector. Then, one sets the angles of attack alpha-real and beta-real to obtain the desired components of this velocity vector. One also specifies the temperature at the inlet boundary.
In this case, AERO-F considers the outlet density to be the
reference density, and the modulus of the
inlet velocity vector to be the modulus of the reference velocity
vector. At the inlet, it computes the reference temperature using the
formula given in Problem. Thus AERO-F automatically sets
while the non-dimensionalized temperature is set by the user. Also, AERO-F automatically sets the artificial inlet density to
In addition, the user must specify the reference Mach number so that
where
In both dimensional and non-dimensional cases, for this class of flow problems, AERO-F enforces the true inlet and outlet boundary conditions in a weak sense unless it is compiled with the flag STRONG_INLET_BC set ON.
fluid-id-int [0]:
mach-real [—]:
velocity-real [—]:
alpha-real [—]:
beta-real [—]:
density-real [—]:
Problem.Mode is set to Dimensional and FluidModel.Fluid is set to Gas.
When running a Dimensional hydro-simulation (fluid modeled as a barotropic liquid or stiffened ga or stiffened gass),
the far-field density is not specified as it is set automatically using the equation of state
and the far-field pressure (see LiquidModel).
pressure-real [—]:
Problem.Mode is set to Dimensional and FluidModel.Fluid is set to Gas.
When running a Dimensional hydro-simulation (fluid modeled as a barotropic liquid or stiffened gas), if the far-field pressure is not specified,
it is set to the “reference” pressure specified in LiquidModel
(and then the far-field density is automatically set to the “reference” density) (see LiquidModel).
temperature-real [—]:
FluidModel.Fluid is set to Liquid), and
only in this case. If Problem.Mode is set to Dimensional, this temperature must be specified in Kelvin (in this case, the user
should verify that the ideal gas constant R (see GasModel) is specified in the same system of units as all other input data).
If Problem.Mode is set to NonDimensional, this specified temperature is interpreted as the value of the non-dimensionalized free-stream temperature.
nutilde-real [—]:
k-real [—]:
turbulence model (required if Problem.Mode is set to Dimensional).
eps-real [—]:
turbulence model (required if Problem.Mode is set to Dimensional).
Notes:
Problem.Type = 1D), this object is required (and the eventual
presence in the ASCII Input Command Data file of the object Inlet is ignored);
| Object: Wall |
For viscous simulations, the object Wall can be used to specify a default computational model for wall surfaces and set its parameters.
under Wall {
Type = type-id;
Integration = integration-id;
Delta = delta-real;
Temperature = temp-real;
Method = method-id;
under ExactRiemannProblem { ... }
}
with
type-id [Adiabatic]:
AdiabaticIsothermalWall.Temperature.
integration-id [ ]:
WallFunctionWall.Delta from
the wall. The region of the boundary layer that is not resolved by the
mesh is modeled by Reichardt's nonlinear wall function (available for
all Navier-Stokes simulations with or without turbulence models).
Full
turbulence model). In this case, it is strongly
recommended to have the first layer of elements above the wall located at
. For
a given Reynolds number
and given free-stream conditions designated here by the subscript
,
this can be achieved in two steps as follows. First, a good estimate of the “height” of the first layer of elements above
the wall for which
can be obtained by assuming that the flow is a turbulent flow over a
flat plate, and that the value of the density at the wall
is
equal to the free-stream density
. In this case,
leads to
is the kinematic viscosity,
is the friction velocity,
is the wall shear stress, and
is the skin friction coefficient. An initial mesh can be constructed
based on the obtained value of
. Next, this mesh should be validated a posteriori by using it to
perform the simulation of interest, post-processing the field
, verifying whether the first layer of elements
is located or not at
, and performing a (linear) correction in the design of this initial mesh if needed.
Full for Navier-Stokes
simulations without turbulence modeling and to WallFunction for Navier-Stokes simulations with turbulence modeling
(including LES).
delta-real [—]:
WallFunction for the following purpose.
For turbulent flow computations on a non body-fitted grid (Problem.Framework = Embedded or EmbeddedALE), AERO-F
computes a wall distance on-the-fly, and
this distance parameter serves as a minimum threshold in the following
sense: the distance to the wall of any given node is computed as the
maximum between the computed wall
distance and this distance parameter. For turbulent flow computations on
a body-fitted grid (Problem.Framework = BodyFitted),
this distance parameter is
added to the (pre-computed) wall distance. In all cases, this distance
parameter can be set and verified using the following guidelines:
of the corresponding solution
as explained below. Hence, one begins with a trial value of delta-real then
adjusts it after one or more additional runs.
to y, the non-dimensional friction velocity and the
non-dimensional dynamic viscosity becomes
denotes the Reynolds number and
denotes
after non-dimensionalization by the reference length (used for the definition of the Reynolds number).
Hence, a first trial value of delta-real can be chosen
so that
delta-real/ReferenceState.Length
produces a value of
that is within the acceptable limits of the wall function.
AERO-F uses Reichardt's law which is valid within all three zones of the boundary layer:
the viscous sublayer (
) where the non-dimensional velocity
is a linear function of
, the buffer layer where the relationship is log-linear, and the logarithmic layer
where the relationship is logarithmic. However, because of the reasons explained below,
the user is advised to verify that delta-real is chosen so that
(see below).
. In the commonly used applications of wall functions,
the meshing should be arranged so that the values of
at all the wall-adjacent
mesh points is only slightly above the recommended lower limit between 20 and 30.
The real reason is not that the form usually assumed for the wall functions is not valid much below these values
(given that Reichardt's law is valid), but the fact that if delta-real is positioned too low,
the CFD computation will start too close to the wall and its accuracy will depend on the specifics
of the chosen turbulence model.
If this model does not reproduce correctly the asymptotic behavior of the
solution near the wall (for example, the standard LES model or the standard
model), a flawed computation can be expected even though the connection with the wall function
is performed at a valid point.
On the other hand, the computation may be safe if the dynamic LES
model is used instead. In any case, the lower limit given above offers the best chances to
correctly resolve the turbulent portion of the boundary layer. It should be noted however
that this limit may be impossible to satisfy close to separation or reattachment zones unless
is based upon y*.
. In the case of moderate Reynolds numbers, where the boundary layer
only extends to
of 300 to 500, there is no chance of accurately resolving the boundary layer
if the first mesh point is placed at a location with the value of
of 100 or higher.
and
where
denotes the thickness of the boundary layer at the distance
from the leading edge of the plate, and
denotes the Reynolds number based on a length equal to
for this specific purpose.
Wall.Delta during the first few time
iterations, performing a run with this larger value, then restarting from the result
of this run and using the suitable value of Wall.Delta.
field as discussed above. This can be done by requesting
one restart iteration after setting Postpro.DeltaPlus to output the values of
.
temp-real [—]:
method-id [Standard]:
This parameter specifies the approach to be used for enforcing the inviscid component of the chosen wall boundary condition at the wall boundaries of the CFD mesh (independently of the computational framework set in Problem).
StandardExactRiemannProblemExactRiemannProblem:
ExactRiemannProblem.
| Object: ExactRiemannProblem |
The ExactRiemannProblem object can be used to specify the numerical flux to apply when the embedded boundary method for CFD is selected in
Wall.Method. Its syntax is:
under ExactRiemannProblem {
Flux = flux-id;
}
with
flux-id [Roe]:
Specifies a default approximate Riemann solver or numerical flux function for the purpose described above.
RoeHLLEHLLCRotatedRiemannRotatedRiemann.UpwindDirection.
| Object: Symmetry |
This object can be used to specify the treatment of the symmetry boundary conditions on all boundary surfaces of the type Symmetry. Its syntax is:
under Symmetry {
Treatment = treatment-id;
}
with
treatment-id [Weak]:
WeakStrongNote:
| Object: Hydro |
When performing a hydro-computation, a list of additional
parameters is needed for computing the far-field pressure and the
hydrostatic and hydrodynamic pressure and force fields.
This list is currently defined within the Hydro object. Its syntax is:
under Hydro{
Depth = depth-real;
}
with
depth-real [0.0]:
| Object: BoundaryData |
The purpose of this object is to define a set of boundary conditions which can be applied in SurfaceData to specific boundary surfaces (and override any default boundary condition that applies there), and identify them with the integer ID number boundaryconditions-id-int. Its syntax is:
under BoundaryData[boundaryconditions-id-int] {
Type = type-id;
InletVariableSet = inletvariableset-list;
OutletVariableSet = outletvariableset-list;
TotalPressure = totalpressure-real;
TotalTemperature = totaltemperature-real;
NuTilde = nutilde-real;
K = k-real;
Eps = eps-real;
Pressure = pressure-real;
Porosity = porosity-real;
PoreShape = poreshape-str;
Thickness = thickness-real;
WeavingLength = weavinglength-real;
MassFlow = massflow-real;
Temperature = temperature-real;
under Wall{ ... }
under Inlet{ ... }
under Outlet{ ... }
}
with
type-id [ ]:
DirectState, or PorousWall.
DirectStatePorousWallProblem.Framework = BodyFitted), a porous wall boundary condition can be attributed only to slip
wall boundary surfaces, when the fluid is modeled as a perfect gas.
In this case, the associated surfaces are treated as porous walls. This
boundary condition can be of two types: injection, or suction. A porous
wall boundary condition of the injection type requires specifying
the value of the porosity of a porous wall, that of the mass flow rate
per unit surface area across this wall, and that of its
temperature. A porous wall boundary condition of the suction type
requires specifying the value of the porosity of a porous wall
and that of the mass flow rate per unit surface area across this wall,
only. The type of a porous wall boundary condition is
automatically recognized as injection if the specified value for the
mass flow rate (see below) across a porous wall is negative.
It is recognized as suction if the specified value for the mass flow
rate (see below) is positive. In either case, a porous
wall boundary condition is implemented in AERO-F as described in
L.Y.M. Gicquel and T. Poinsot, "Wall Models for Multiperforated Walls," (2008).
In an embedded simulation (Problem.Framework = Embedded or Problem.Framework = EmbeddedALE),
a porous wall boundary condition can be attributed to slip and stick
wall boundary surfaces, when the fluid is modeled as a perfect gas.
Furthermore, there is no distinction in this case between injection and
suction.
The flux across a porous wall is computed based on the value of the
porosity specified for this wall (see below) only,
using an approach based on the finite volume method with exact, local,
two-phase Riemann solvers. Therefore in this case, the value
of the mass flow rate per unit surface area across this wall and that of
its temperature do not need to be specified.
WallInletBoundaryConditions.Inlet
but those defined under the Inlet object under this object.
OutletBoundaryConditions.Outlet
but those defined under Outlet object under this object.
Outflowinletvariableset-list [---]:
{P_T,T_T}{P_T, T_T, NuTilde }{P_T, T_T, K, Eps }outletvariableset-list [---]:
{P}totalpressure-real [---]:
DirectState: it specifies the value of the total pressure for an inlet boundary condition.
totaltemperature-real [---]:
DirectState: it specifies the value of the total temperature for an inlet boundary condition.
nutilde-real [---]:
DirectState: it specifies the value of the Spalart-Allmaras field variable for an inlet boundary condition.
k-real [---]:
DirectState: it specifies the value of the turbulent kinetic energy for an inlet boundary condition.
eps-real [---]:
DirectState: it specifies the value of the turbulent kinetic energy dissipation rate for an inlet boundary condition.
pressure-real [---]:
DirectState: it specifies the pressure value for an outlet boundary condition.
porosity-real [---]:
PorousWall (see above).
It specifies the porosity value of a porous wall — that is, the ratio of the total area of the holes in the wall and
the total area of the wall (hence the porosity value of a solid wall is by definition zero).
poreshape-str; [---]:
PorousWall
(see above). It triggers the homogenization-based subgrid scale
modeling of friction loss at a pore boundary based on the concept of an
"equivalent pore" —
that is, a single pore whose geometry and dimension are such that when
inserted at the center of a unit (homogenization) cell, the void
fraction of the cell matches that of the porous wall of interest
(see D. Huang, M. Long Wong, S. K. Lele and C. Farhat,
"Homogenized Flux-Body Force Approach for Modeling Porous Wall Boundary
Conditions in Compressible Viscous Flows," AIAA Journal,
https://doi.org/10.2514/1.J059945 (2021)).
Precisely, it can be used to specify one of the following one-parameter shapes of the equivalent pore: Gapped, Circle, or Square. The dimension of any of these shapes is determined
from the porosity ratio inputted in porosity-real (see above), the square of the length of periodicity inputted in weavinglength-real (see below) – and in the case of Gapped, the thickness of the wall
porous specified in thickness-real (see below). Not specifying this member amounts to ignoring friction loss at a pore boundary in the computational model.
thickness-real; [0]:
PorousWall and poreshape-str is specified (see above). It inputs the thickness of the porous wall.
weavinglength-real; [0]:
PorousWall and poreshape-str is specified (see above). It inputs the length of periodicity of the microstructure of the porous wall.
(The vocabulary used here is for a porous wall made of a woven fabric but this does not have to be the case).
massflow-real [---]:
temperature-real [---]:
Wall:
Inlet:
Outlet:
| Object: Preconditioner |
The Preconditioner object specifies the parameters
of the low-Mach Turkel preconditioner for the artificial
viscosity as well as inertia (or time-derivative, or temporal) terms of
the equations to be solved. The preconditioner is local, i.e. its value
changes at each node and during the simulation. Its key variable is
where
is the value of the local mach number.
The syntax of the Preconditioner object is:
under Preconditioner{
Mach = Mach-real;
k = k-real;
}
with
Mach-real [1.0]:
k-real [1.0]:
Notes:
becomes equal to 1 if the above parameters are reasonably well
chosen in which case the preconditioner becomes inactive and therefore does
not bother compressible flow computations even when turned on;
| Object: Space |
The finite I volume discretization of the governing equations is defined
within the Space object. Its syntax is:
under Space {
under NavierStokes { ... }
under TurbulenceModel { ... }
under LevelSet { ... }
under Boundaries { ... }
under Fixes { ... }
}
with
NavierStokes:
TurbulenceModel:
LevelSet:
Boundaries:
Fixes:
Note:
| Object: NavierStokes |
The NavierStokes object defines the finite volume discretization
of the governing Euler or Navier-Stokes equations. Its syntax is:
under NavierStokes {
Flux = flux-id;
Reconstruction = reconstruction-id;
AdvectiveOperator = advectiveoperator-id;
Limiter = limiter-id;
Gradient = gradient-id;
Dissipation = dissipation-id;
Beta = beta-real;
Gamma = gamma-real;
Eps = eps-real;
KspPrecJacobian = kspprecjacobian-str;
PreComputeLimiter = precomputelimiter-str;
PreComputeLimiterEps = precomputelimitereps-real;
under FluxMap { ... }
under RotatedRiemann { ... }
}
with
flux-id [Roe]:
Specifies a default flux scheme for the flow computation that can be overridden in FluxMap for each fluid model involved in the flow computation.
RoeHLLEHLLCRotatedRiemannreconstruction-id [Linear]:
ConstantLinearadvectiveoperator-id [FiniteVolume]:
FiniteVolumeLinear.
In this case, all components of the numerical flux function are computed
using the reconstructed values of the primitive variables.
GalerkinLinear.
In this case, the reconstructed values of the primitive variables may
occasionally be non-physical
due to the fact that they are computed by extrapolation. They may lead
to the appearance of a NaN when used for computing the numerical flux
function.
To avoid this pitfall and the expensive "if"-type of testing that can
prevent it, this option requests that the reconstructed values of the
primitive variables be used only in the (Wi - Wj)
term of the numerical flux function, and the constant values be used
instead in its centered component and upwinding matrix. This is
justified by the two following observations about the
upwinded flux: a) its centered term is by construction second-order
space-accurate and therefore does not need to be evaluated at the
reconstructed values of the primitive variables in order to be
second-order space-accurate,
and b) the evaluation of the term (Wi - Wj) does not incur the
computation of any quantity that can generate a NaN (such as for
example, the speed of sound which involves a square root).
limiter-id [None]:
NoneVanAlbadaBarthVenkatakrishnanPressureSensorgradient-id [LeastSquares]:
LeastSquaresGalerkinNonNodaldissipation-id [SecondOrder]:
SecondOrderSixthOrderbeta-real [1/3]:
SecondOrder. If beta-real is set to 0.333333333333 (1/3), gamma-real is set to zero and dissipation-id
is set to SecondOrder, then the scheme becomes fourth-order space-accurate for inviscid problems.
For turbulent flow problems and an insufficiently fine CFD mesh however, a very small value of beta-real — say beta-real = 1/100 — is recommended in order to minimize numerical dissipation which decreases when the product beta-real*gamma-real (see below) decreases.
gamma-real [1.0]:
HLLC) or HLLE (flux-id = HLLE) flux (see above).
A value of one recovers the original flux, while a value less than
one decreases the added numerical viscosity. For a fixed value of beta-real (see above),
this parameter controls the third-order spatial dissipation of the scheme.
When gamma-real is set to 0, the third-order spatial dissipation error is eliminated
and the leading spatial dissipation error becomes fifth-order. In this case, if dissipation-id is set to SecondOrder,
the scheme becomes fourth-order space-accurate at best for inviscid problems when beta-real is set to 1/3.
eps-real [0.1]:
kspprecjacobian-str [ ]:
H1) or exact (kspprecjacobian-str = H2) Jacobian. When the exact
matrix-vector product is specified (Implicit.MatrixVectorProduct = Exact), the default value of this parameter is H2. When the finite difference matrix-vector product is specified
(Implicit.MatrixVectorProduct = FiniteDifference), it is H2 for steady-state simulations and H1 for unsteady simulations. When the approximate matrix-vector product is specified
(Implicit.MatrixVectorProduct = Approximate), the H1 preconditioner is always used, regardless of the specified value of this parameter.
precomputelimiter-str [Off]:
values of the Barth and Venkatakrishan limiters during a steady-state flow simulation.
Off
values are always updated at each iteration (or pseudo-time-step) of a steady-state simulation.
On
values are pre-computed using the initial fluid state and
subsequently frozen. For a restarted simulation, the fluid state at the
point of restart is used for this purpose.
The limiter
values should be frozen only after the positions of any shocks have stabilized and should be used with Newton.FailSafe = AlwaysOn. The fail-safe method acts as a secondary
limiter if the shock moves into a region of the computational fluid domain where the limiter was not active upon freezing its
values.
Auto
values are pre-computed using the current fluid state, after the
relative residual has dropped below a threshold specified in precomputelimitereps-real (see below), and then subsequently frozen.
precomputelimitereps-real [0]:
values are pre-computed then frozen, when precomputelimiter-str (see above) is set to Auto.
FluxMap:
RotatedRiemann:
Note:
SecondOrder option of dissipation-id is currently supported.
| Object: FluxMap |
The FluxMap object allows to override the default flux scheme set in NavierStokes.Flux according to the fluid model prevailing at the location where this flux is used.
The syntax of this object is:
under FluxMap[flui-id-int] {
Flux = flux-id;
}
with
fluid-id-int [ ]:
flux-id [ ]:
RoeHLLERoe by AERO-F.
HLLCRoe by AERO-F.
| Object: RotatedRiemann |
The RotatedRiemann object can be used to configure a
rotated Riemann numerical flux in order to suppress shock instabilities
without introducing excessive dissipation – for example,
in hypersonic computations. The underlying theory can be found in:
The rotated Riemann numerical flux combines two or three (different) convective flux schemes based on Riemann solvers: one of these should be more dissipative than the other and is automatically oriented in a dominant upwinding direction that may be chosen to align with the normal to shocks (when they exist), in order to suppress shock instabilities. Hence, this object can be used to specify both convective flux schemes and set other related parameters. It syntax is:
under RotatedRiemann{
NFluxes = nfluxes-int;
Flux1 = flux1-id;
Flux2 = flux2-id;
Flux3 = flux3-id;
UpwindingDirection = upwindingdirection-id;
ReferenceDirection = referencedirection-id;
PreCompute = precompute-id;
PreComputeEps = precomputeeps-real;
Eps = eps-real;
Jacobian = jacobian-id;
under CustomDirection { ... }
}
with
nfluxes-int [2]:
flux1-id [Roe]:
Specifies a convective flux scheme for the dominant upwinding direction. Although the default is Roe's scheme, a more dissipative flux scheme is recommended for stabilizing hypersonic shocks.
RoeHLLEHLLCflux2-id [Roe]:
Specifies a flux scheme for the first minor upwinding direction.
RoeHLLEHLLCflux3-id [Roe]:
This member is relevant only when nfluxes-int is set to 3. It specifies a flux scheme for the second minor upwinding direction.
RoeHLLEHLLCupwinddirection-id [VelocityDifference]:
Specifies a method for identifying the dominant upwinding direction: the first and second minor upwinding directions should always be chosen to be orthogonal to the dominant one.
VelocityDifference
, which: is known to be normal to a shock or parallel to a shear, when they exist;
and is recommended when flux1-id is set to a more dissipative scheme.
VelocityAverage
.
TriangleSetInput.TriangleSet. In this case, precompute-id (see below) should be set to On. This choice is suitable for
stabilizing boundary/shear layers in the hypersonic flow regime, particularly when flux3-id and/or flux2-id are set to more dissipative schemes.
referencedirection-id [InletVelocity]:
InletVelocityCustomDirectionprecompute-id [Off]:
Specifies whether or not the dominant upwinding direction is to be precomputed using the initial fluid state and subsequently frozen, or updated each time the fluid state is updated.
OffOnAutoprecomputeeps-real [0]:
Auto of precompute-id (see above).
eps-real [1e-12]:
jacobian-id []:
Specifies whether or not to account for the partial derivatives of the upwinding direction vectors w.r.t. the fluid state when computing the Jacobian of the rotated Riemann flux.
ApproximateImplicit.MatrixVectorProduct.
ExactImplicit.MatrixVectorProduct.
CustomDirection:
| Object: CustomDirection |
This object is relevant only when RotatedRiemann.NFluxes is set to 3. It can be used to specify a reference direction for computing the first and second
minor upwinding directions of a three-term rotated Riemann numerical flux. Its syntax is:
under CustomDirection{
Nx = Nx-real;
Ny = Ny-real;
Nz = Nz-real;
}
with
Nx-real [0.0]:
Ny-real [0.0]:
Nz-real [0.0]:
| Object: TurbulenceModel |
The TurbulenceModel object defines the finite volume discretization of the turbulence model equations. Its syntax is:
under TurbulenceModel {
Reconstruction = reconstruction-id;
AdvectiveOperator = advectiveoperator-id;
Limiter = limiter-id;
Gradient = gradient-id;
Dissipation = dissipation-id;
Beta = beta-real;
Gamma = gamma-real;
}
with
reconstruction-id [Constant]:
ConstantLinearadvectiveoperator-id [FiniteVolume]:
FiniteVolumeLinear.
In this case, the flux function is computed using the reconstructed values of the primitive variables.
GalerkinLinear.
Because they are obtained by extrapolation, the reconstructed values of
the primitive variables may occasionally be non-physical. In such a
case, they may lead
to the appearance of a NaN when used for computing the flux function. To
avoid this pitfall and the expensive "if"-type of testing that can
prevent it, this option
requests that the reconstructed values of the primitive variables be
used only in the (Wi - Wj) term of the numerical flux function and that
the constant values be used
in the centered flux component of this flux function as well as in its
associated matrix. This is justified by the two following observations
about the upwinded flux: a) its centered flux
term is by construction second-order space-accurate and therefore does
not need to be evaluated at the reconstructed values of the primitive
variables in order to be second-order space-accurate,
and b) the evaluation of the (Wi - Wj) term does not incur the
computation of any quantity that can generate a NaN (such as for
example, the speed of
sound which involves a square root).
limiter-id [None]:
NoneVanAlbadagradient-id [LeastSquares]:
LeastSquaresGalerkinNonNodaldissipation-id [SecondOrder]:
SecondOrderSixthOrderbeta-real [1/3]:
SecondOrder.
If beta-real is set to 0.333333333333 (1/3), gamma-real is set to zero
and dissipation-id is set to SecondOrder, then the scheme becomes fourth-order space-accurate.
gamma-real [1.0]:
SecondOrder,
the scheme becomes fourth-order space-accurate at best when beta-real is set to 1/3.
Note:
SecondOrder option of dissipation-id is currently supported.
| Object: LevelSet |
The LevelSet object defines the finite volume discretization
of the level set equation(s). Its syntax is:
under LevelSet {
Reconstruction = reconstruction-id;
AdvectiveOperator = advectiveoperator-id;
Limiter = limiter-id;
Gradient = gradient-id;
Dissipation = dissipation-id;
Beta = beta-real;
Gamma = gamma-real;
Eps = eps-real;
}
with
reconstruction-id [Linear]:
Linearadvectiveoperator-id [FiniteVolume]:
FiniteVolumeLinear.
In this case, the flux function is computed using the reconstructed values of the primitive variables.
GalerkinLinear.
Because they are obtained by extrapolation, the reconstructed values of
the primitive variables may occasionally be non-physical. In such a
case, they may lead
to the appearance of a NaN when used for computing the flux function. To
avoid this pitfall and the expensive "if"-type of testing that can
prevent it, this option
requests that the reconstructed values of the primitive variables be
used only in the (Wi - Wj) term of the numerical flux function and that
the constant values be used
in the centered flux component of this flux function as well as in its
associated matrix. This is justified by the two following observations
about the upwinded flux: a) its centered flux
term is by construction second-order space-accurate and therefore does
not need to be evaluated at the reconstructed values of the primitive
variables in order to be second-order space-accurate,
and b) the evaluation of the (Wi - Wj) term does not incur the
computation of any quantity that can generate a NaN (such as for
example, the speed of
sound which involves a square root).
limiter-id [None]:
NoneVanAlbadaBarthVenkatakrishnanPressureSensorgradient-id [LeastSquares]:
LeastSquaresGalerkinNonNodaldissipation-id [SecondOrder]:
SecondOrderSixthOrderbeta-real [1/3]:
SecondOrder.
If beta-real is set to 0.333333333333 (1/3), gamma-real is set to zero
and dissipation-id is set to SecondOrder, then the scheme becomes fourth-order space-accurate.
gamma-real [1.0]:
SecondOrder,
the scheme becomes fourth-order space-accurate at best when beta-real is set to 1/3.
eps-real [0.1]:
Note:
SecondOrder option of dissipation-id is currently supported.
| Object: Boundaries |
The Boundaries object defines the options available for the numerical treatment of
the far-field boundary conditions. Its syntax is:
under Boundaries {
Type = type-id
}
with
type-id [StegerWarming];
StegerWarmingGhidagliaModifiedGhidaglia| Object: Fixes |
The Fixes object defines the few modifications that can be applied to the
spatial discretization of the governing equations in order to improve its robustness.
Its syntax is:
under Fixes {
under Sphere1 { ... }
under Box1 { ... }
under Cone1 { ... }
under Dihedral { ... }
Symmetry = symmetry-id;
}
with
Sphere1:
NavierStokes.Reconstruction is automatically set or reverted to Constant — that is, in which
first-order spatial discretization is automatically enforced.
Box1:
NavierStokes.Reconstruction is automatically set or reverted to Constant — that is, in which
first-order spatial discretization is automatically enforced.
Cone1:
NavierStokes.Reconstruction is automatically set or reverted to Constant — that is, in which
first-order spatial discretization is automatically enforced.
Dihedral:
NavierStokes.Reconstruction is to be reset to Constant.
symmetry-id [None]:
NoneXYZNote:
Sphere1 to Sphere10),
10 boxes (Box1 to Box10), and 10 cones (Cone1 to Cone10).
| Object: Sphere |
The syntax of the Sphere (with an integer appended to the last letter
of this word) object is:
under Sphere {
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
Radius = radius-real;
FailSafe = failsafe-str;
}
with
x0-real [0.0]:
y0-real [0.0]:
z0-real [0.0]:
radius-real [0.0]:
failsafe-str [AlwaysOn]:
On NAlwaysOnOff| Object: Box |
The syntax of the Box (with an integer appended to the last letter of this word) object is:
under Box {
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
X1 = x1-real;
Y1 = y1-real;
Z1 = z1-real;
FailSafe = failsafe-str;
}
with
x0-real [0.0]:
y0-real [0.0]:
z0-real [0.0]:
x1-real [0.0]:
y1-real [0.0]:
z1-real [0.0]:
failsafe-str [AlwaysOn]:
On NAlwaysOnOff| Object: Cone |
The syntax of the Cone (with an integer appended to the last letter of this word) object is:
under cone-obj {
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
Radius0 = radius0-real;
X1 = x1-real;
Y1 = y1-real;
Z1 = z1-real;
Radius1 = radius1-real;
FailSafe = failsafe-str;
}
with
x0-real [0.0]:
y0-real [0.0]:
z0-real [0.0]:
radius0-real [0.0]:
x1-real [0.0]:
y1-real [0.0]:
z1-real [0.0]:
radius1-real [0.0]:
failsafe-str [AlwaysOn]:
On NAlwaysOnOff| Object: Dihedral |
The Dihedral object can be used to automatically identify, in a pre-processing step, fixing zones around sharp edges of
the wall surface. Hence, it is relevant only for second-order space-accurate computations.
An edge of the wall surface is identified as a sharp edge if the dihedral angle between the adjacent wall boundary faces
defining it,
, is larger than a user-specified threshold. Specifically,
is defined by its cosine as follows:
where
and
are the unit normals to the adjacent wall boundary faces defining the angle
.
The syntax of this object is:
under Dihedral {
Angle = angle-real;
NumLayers = numlayers-int;
MaxDistance = maxdistance-real;
}
with
angle-real [-1.0]:
(in degrees) above which a dihedral angle between two adjacent wall boundary faces
identifies a sharp edge. For a well-resolved mesh,
is a good value for this parameter for identifying sharp edges.
For a coarse mesh,
is a more appropriate value for avoiding generating too many fixes.
numlayers-int [0]:
is recommended for this parameter to avoid
propagating fixes too far away from a sharp edge. For a viscous mesh, a larger value such as
is recommended to ensure that fixes are sufficiently
propagated in the viscous layers.
maxdistance-real [1.0]:
for a viscous mesh, the fixing zone would be typically
too large in the directions parallel to the wall boundaries. In this case, the parameter maxdistance-real
can be used to control this undesired effect
of mesh anisotropy by limiting the scope of a fixing zone around a
detected sharp edge to the set of nodes which are simultaneously: (1)
located at a graph distance
from the nodes of this sharp edge that is less or equal to numlayers-int + 1, and (2) located at a physical distance from the nodes of this sharp
edge that is less or equal to maxdistance-real. Hence, if to be used, this parameter should be set to a value that is small relative to the chord
of the wing (for example, less than
), to avoid propagating fixes too far in the directions parallel to
the wall boundaries. Most importantly, if to be used,
this parameter must be set to a positive value; otherwise, its effect is
ignored. For an inviscid mesh, specifying this parameter may not be
needed as in this case the maximum
distance limitation may not be necessary, for example, if the mesh is
isotropic in the fixing zone identified by the parameter numlayers-int.
| Object: ImplosionSetup |
This object is relevant only for an unsteady fluid-structure simulation using the tandem AERO-F/AERO-S (Problem.Type = UnsteadyAeroelastic).
It is particularly useful for implosion simulations.
It requests preloading the structural subsystem of the problem with a uniform external
pressure which is ramped up linearly from an initial value to a final
value, before
the two-way coupling between the fluid and structural subsystems is
triggered. The initial value of this pressure and ramp up rate are
specified in this object. The final value of this
uniform pressure field is that specified in Inlet.Pressure.
During the preloading described above, the fluid and structural subsystems are only one-way coupled: the fluid subsystem is maintained at a uniform but time-dependent pressure, but the structural subsystem is loaded using this pressure field and its dynamic state is time-advanced. When the final value of the pressure field is reached, the fluid and structural subsystems are two-way coupled and time-advanced.
under ImplosionSetup{
InitialPressure = initialpressure-real;
RampupRate = rampuprate-real;
}
initialpressure-real [---]:
rampupreal-real [0.0]:
Inlet.Pressure.
| Object: Time |
The Time object specifies how to time-integrate the governing semi-discrete equations. Its syntax is:
under Time {
Form = form-id;
Type = type-id;
Prec = prec-id;
MaxIts = maxits-int;
Eps = eps-real;
TimeStep = timestep-real;
CheckSolution = checksolution-flag;
CheckLinearSolver = checklinearsolver-flag;
CheckVelocity = checkvelocity-flag;
CheckPressure = checkpressure-flag;
CheckDensity = checkdensity-flag;
ThresholdDeltaPressure = thresholddeltapressure-real;
CardinalDeltaPressure = cardinaldeltapressure-int;
ThresholdDeltaDensity = thresholddeltadensity-real;
CardinalDeltaDensity = cardinaldeltadensity-int;
MaxTime = maxtime-real;
TimeStepAdaptation = timestepadaptation-id;
Cfl0 = cfl0-real;
CflMin = cflmin-real;
ErrorTolerance = errortolerance-real;
DualTimeStepping = dualtimestepping-str;
DualTimeCfl = dualtimecfl-real;
EmbeddedCfl = embeddedcfl-real;
ProgrammedBurnShockSensor = programmedburnshocksensor-real;
under Implicit { ... }
under Explicit { ... }
under CflLaw { ... }
}
with
form-id [ ];
Specifies the form of the governing semi-discrete fluid equations
to be solved. The chosen form affects the definition of a residual and
therefore the meaning of a convergence up to a tolerance
specified by Eps.
Descriptor
denotes the matrix of cell volumes,
denotes the fluid state vector,
denotes the postion of the fluid grid, and
denotes here the algebraic sum of the viscous and convective fluxes.
This is the default option for two cases: (1) linearized snapshot computations in the frequency or time domain — that is, when Problem.Type = PODConstruction,
and (2) unsteady linearized flow computations — that is, when Problem.Type = UnsteadyLinearized or Problem.Type = UnsteadyLinearizedAeroelastic. It is also the only option
currently available for both of these cases. Consequently if Problem.Type = PODConstruction, the computed Reduced-Order Basis is orthonormalized with respect to the matrix of cell volumes
.
NonDescriptor
Eps harder, but more meaningful, than in the Descriptor case. This option is the default option for all flow computations except
for linearized snapshot computations in the frequency or time domain, and unsteady linearized flow computations — that is, when Problem.Type = PODConstruction,
Problem.Type = UnsteadyLinearized, or Problem.Type = UnsteadyLinearizedAeroelastic — for which the default option is Descriptor. However, if
form-id is set to NonDescriptor and Problem.Type = PODConstruction, the linearized snapshots are computed using the descriptor form of the governing linearized
equations described under Descriptor,
but the computed Reduced-Order Basis is orthonormalized with respect to the identity matrix
.
Hybrid
type-id [Implicit];
ImplicitExplicitprec-id [NonPreconditioned]:
NonPreconditionedLowMachOn or Off. Note that this option is not available however when FluidModel.Fluid = JWL.
Note also that it can be combined with the low-Mach preconditioning of the dissipation terms of the convective fluxes of the
solution scheme than can be specified in Problem.
maxits-int [100]:
Problem.Type = SteadyAeroelastic or SteadyAeroThermal) as in these
cases, AERO-F always performs one step of fluid computations per coupled aeroelastic or aerothermal cycle,
and AERO-S controls the total number of coupled cycles to be performed.
eps-real [1.e-6]:
timestep-real [—]:
CheckSolution, CheckLinearSolver, CheckVelocity, CheckPressure,
CheckDensity, ThresholdDeltaPressure, CardinalDeltaPressure, ThresholdDeltaDensity, or
CardinalDeltaDensity.
checksolution-flag [On]:
This flag enables the control of the fixed time-step timestep-real, or the CFL number generated by the CFL law specified under CflLaw according to the exhibited nonlinear stability behavior of the computed flow solution.
OnCflLaw.Cfl0. The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
Offchecklinearsolver-flag [On]:
For steady-state implicit flow computations using a CflLaw strategy, and unsteady implicit flow computations using either a
fixed time-step specified in timestep-real or a CflLaw strategy, this flag enables the control of the CFL number — and
therefore the pseudo-time-step — or current time-step, as applies, according to the performance of the linear equation solver
chosen in LinearSolver. Its default setting is On for steady-state implicit computations, and Off for unsteady
simulations.
OnLinearSolver.MaxIts is reached during a (pseudo-) time-step, the current CFL number set
by the chosen CFL strategy is reduced by a factor two. Consecutive CFL number reductions can occur. However, AERO-F stops all computations if the current CFL number
is reduced to less than 1/1000 of the value specified in cfl0-real.
The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
Offcheckvelocity-flag [On]:
This flag enables the control of the fixed time-step timestep-real, or the CFL number generated by the CFL law specified under CflLaw according to the exhibited nonlinear stability behavior of the computed flow velocity.
On
, the fixed time-step specified in timestep-real,
or the CFL number generated by the CFL law specified under CflLaw is reduced by a factor two and the last performed
computational step is repeated. Consecutive fixed time-step or CFL number reductions can
occur. However, AERO-F stops all computations if the current time-step reaches a value equal to 1/1000 of its
user-specified value, or the CFL number generated by CflLaw reaches a value equal to 1/1000 of the user-specified value
of CflLaw.Cfl0. The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
Offcheckpressure-flag [On]:
When a pressure cutoff is specified in FluidModel.PressureCutOff, this flag enables the control of the fixed time-step timestep-real or
the CFL number generated by the CFL law specified under CflLaw, according to the exhibited nonlinear stability behavior of the computed flow pressure.
OnFluidModel.PressureCutOff, the fixed time-step specified
in timestep-real, or the CFL number generated by the CFL law specified under CflLaw is reduced by a factor two
and the last performed computational step is repeated.
Consecutive fixed time-step or CFL number reductions can occur. However, AERO-F stops all computations if the current time-step reaches a value equal
to 1/1000 of its user-specified value, or the CFL number generated by CflLaw reaches a value equal to 1/1000 of the user-specified value of CflLaw.Cfl0.
The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
Offcheckdensity-flag [On]:
When a density cutoff is specified in FluidModel.DensityCutOff, this flag enables the control of the fixed time-step timestep-real or
the CFL number generated by the CFL law specified under CflLaw, according to the exhibited nonlinear stability behavior of the computed flow density.
OnFluidModel.DensityCutOff, the fixed time-step specified
in timestep-real, or the CFL number generated by the CFL law specified under CflLaw is reduced by a factor two and
the last performed computational step is repeated.
Consecutive fixed time-step or CFL number reductions can occur. However, AERO-F stops all computations if the current time-step reaches a value equal
to 1/1000 of its user-specified value, or the CFL number generated by CflLaw reaches a value equal to 1/1000 of the user-specified value of CflLaw.Cfl0.
The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
Offthresholddeltapressure-real [0.2]:
cardinaldeltapressure-int [40]:
This flag enables the control of the fixed time-step timestep-real or the CFL number generated by the CFL law specified under CflLaw, according to the number of grid points where thresholddeltapressure-real is reached or exceeded.
AnyPositiveIntegerNumberCflLaw.Cfl0.
The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
0thresholddeltadensity-real [0.2]:
cardinaldeltadensity-int [40]:
This flag enables the control of the fixed time-step timestep-real or the CFL number generated by the CFL law specified under CflLaw, according to the number of grid points where thresholddeltadensity-real is reached or exceeded.
AnyPositiveIntegerNumberCflLaw.Cfl0.
The recovery of the fixed time-step or CFL number is automatically performed as follows:
CflLaw.Strategy is set to any option but Fixed, the recovery
of the CFL number is automatically performed according to the design of the specified CFL strategy.
CflLaw.Strategy = Fixed, then, after four consecutive and successful computational steps using
a reduced value of the time-step or CFL number, AERO-F attempts to increase timestep-real by a factor two until it restores its original user-specified value,
or the current CFL number by a factor of two until it restores the user-specified value of CflLaw.Cfl0.
0maxtime-real [1.e99]:
timestepadaptation-id [Cfl]:
CflErrorEstimationImplicit.Type is set to ThreePointBackwardDifference.
When this option is chosen, the size of the first time-step is computed using
=
(see definition below). Subsequently, the size of a time-step is
adapted using as error indicator the 2-norm of the
difference between the numerical solution predicted using the three
point backward difference scheme and that using one step of the forward
Euler scheme, as follows
designates the
-th computational time-step,
is a maximum (estimated) relative error tolerated within a time-step and specified in ErrorTol,
is computed using
and the forward Euler scheme,
is computed at the first time-step using
=
(see definition below), and the increase factor
and decrease factor
are given by
cfl0-real [5.0]:
ErrorEstimation time-step adaptation strategy (
) described above.
cflmin-real [1.0]:
in the ErrorEstimation time-step adaptation strategy (
) described above.
This parameter is relevant only when TimeStepAdaptation = ErrorEstimation.
errortolerance-real [1e-10]:
TimeStepAdaptation = ErrorEstimation.
dualtimestepping-str [Off]:
This option is relevant only for unsteady implicit analysis. Its default value is Off, except when prec-id is set to LowMach.
OnNewton.MaxIts dual time-steps are carried out. The size of each of these dual-time-steps is governed by the parameter dualtimecfl-real.
The nonlinear system of equations arising at each dual time-step is
solved by a single Newton iteration where the tangent operator is
modified by the dual time-step to become
more diagonally dominant. In other words, dual-time-stepping is
implemented in AERO-F in conjunction with Newton's
method. For some difficult problems, it can
slightly reduce the convergence rate of Newton's method but sufficiently
accelerate the iterative solution of the system of linearized equations
arising at Newton's iteration
to reduce the overall simulation time, particularly in the presence of a
low-Mach preconditioner.
OffOn internally, when performing implicit unsteady flow computations
with prec-id = LowMach (see the description of the parameter prec-id).
dualtimecfl-real [100.0]:
On.
embeddedcfl-real [1.0]:
EmbeddedFramework.FillScope and/or EmbeddedFramework.BoundingBoxSize are recommended.
programmedburnshocksensor-real [0.99]:
Problem.Type = 1D) associated with a ProgrammedBurn of a highly explosive material. It requests terminating the AERO-F
simulation when the shock wave generated by the programmed burn has
traveled a percentage of the size of the one-dimensional computational
domain equal to the value specified in programmedburnshocksensor-real.
Implicit:
Explicit:
CFLlaw:
Note:
Problem.Type = 1D), only explicit time-integration is currently available;
| Object: Implicit |
The Implicit object defines how the system of nonlinear equations
is solved at every time-step. Its syntax is:
under Implicit {
Type = type-id;
MatrixVectorProduct = mvp-id;
FiniteDifferenceOrder = fdorder-id;
TurbulenceModelCoupling = tmcoupling-id;
PeriodicBoundaryTreatment = periodicboundarytreatment-id;
under Newton { ... }
}
with
type-id [BackwardEuler]:
BackwardEulerProblem.Type = 1D),
or computations involving a ProgrammedBurn.
ThreePointBackwardDifferenceProblem.Type = 1D),
or computations involving a ProgrammedBurn.
RungeKutta2RungeKutta3mvp-id [Approximate]:
ApproximateExactLiquid (Tait) or JWL
(see FluidModel.Fluid). In this case, the matrix-vector products are performed using the approach
FiniteDifference with fdorder-id = FirstOrder.
Problem.Prec). In this case, the matrix-vector products are performed using the approach
FiniteDifference with fdorder-id = FirstOrder.
Roe is chosen for spatial discretization (see NavierStokes.Flux),
in which case this option reverts to the option FiniteDifference with fdorder-id = FirstOrder.
VanAlbada (see NavierStokes.Limiter) is introduced in the computation, in which
case this option reverts to the option FiniteDifference with fdorder-id = FirstOrder.
NavierStokes.Gradient is set to NonNodal to achieve second-order spatial accuracy. In this case, this
option reverts to the option FiniteDifference with fdorder-id = FirstOrder.
NavierStokes.Dissipation is set to SixthOrder to control numerical dissipation and achieve a
higher-order of spatial accuracy. In this case, this option reverts to the option FiniteDifference with
fdorder-id = FirstOrder.
Weak. In this case, the matrix-vector
products are computed using the exact Jacobian matrix of the implicit scheme for the Navier-Stokes equations, and a
finite-difference formula for the turbulence model equations.
FiniteDifference with fdorder-id = FirstOrder.
Approximate.
FiniteDifferencefdorder-id [FirstOrder]:
FirstOrderSecondOrdertmcoupling-id [Weak]:
WeakLinearSolver.NavierStokes, and the turbulence model equations using LinearSolver.TurbulenceModel (see LinearSolver).
StrongLinearSolver.NavierStokes only,
and any input to the object LinearSolver.TurbulenceModel is ignored by AERO-F (see LinearSolver).
periodicboundarytreatment-id [Implicit]:
SurfaceData[surface-id-int].Type to Periodic. The ID of the surface to be slaved to the master surface by the periodic
boundary conditions is set in SurfaceData[surface-id-int].SlaveID. AERO-F
enforces periodic boundary conditions on such a pair
of surfaces by projecting the nodes located on the "slave" surface onto
the master counterpart and populating the fluid states at the slaved
nodes by interpolating
the fluid states inside the dual cells attached to the relevant nodes of
the master surface.
ImplicitSemiImplicitNotes:
Ghidaglia or ModifiedGhidaglia method (see Boundaries) is always computed using the FiniteDifference
approach outlined above.
| Object: Explicit |
The Explicit object defines how the system of nonlinear equations
is advanced at every time-step using an explicit scheme.
Currently, explicit time-integration is not supported for usage
with the AERO-FL module. Hence,
the UnsteadyLinearized, UnsteadyLinearizedAeroelastic, PODConstruction,
PODInterpolation, ROM and ROMAeroelastic options in the Problem object cannot be
specified together with explicit time-integration.
The syntax of Explicit is:
under Explicit {
Type = type-id;
}
with
type-id [RungeKutta4];
RungeKutta4RungeKutta2ForwardEuler| Object: CflLaw |
under CflLaw {
Strategy = strategy-id;
Cfl0 = cfl0-real;
Cfl1 = cfl1-real;
Cfl2 = cfl2-real;
CflMax = cflmax-real;
Ser = ser-real;
AngleGrowth = anglegrowth-real;
AngleZero = anglezero-real;
DFTHistory = DFThistory-int;
FrequencyCutoff = frequencycutoff-int;
DFTGrowth = dftgrowth-real;
}
with
strategy-id [ ]:
This parameter sets the CFL strategy for adapting the pseudo-time-step or time-step, as applies. Six types, namely, Standard, Residual, Direction, DFT, Hybrid), and Fixed are available.
Standard
where
and
are defined below,
denotes the spatial residual at the
-th (pseudo-) time-step
,
and
denotes the reference residual.
where
, and
are defined below and illustrated in Figure 1.
Standard takes the maximum of the outputs of the two residual- and iteration-based strategies and bounds it by
from below,
and
form above to obtain
which can also be written as
Standard is a residual-iteration-based CFL strategy; it is graphically depicted by the red dashed-line in Figure 1.
Warning: This strategy does not support the adaptation of the CFL number according to the outcome of
Time.CheckSolution, Time.CheckLinearSolver, Time.CheckVelocity,
Time.CheckPressure, Time.CheckDensity, Time.ThresholdDeltaPressure,
Time.CardinalDeltaPressure, Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.

Figure 1: residual-iteration-based CFL strategy for adapting the (pseudo-) time-step (CFL strategy Standard)
Residual
-th iteration or time-step the CFL number according to the behavior of the residual, as follows:
Time.CheckSolution,
Time.CheckLinearSolver, Time.CheckVelocity, Time.CheckPressure,
Time.CheckDensity, Time.ThresholdDeltaPressure, Time.CardinalDeltaPressure,
Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.
Direction
is a growth factor specified in anglegrowth-real,
characterizes the angle between the two previous
consecutive solution increments and is computed by AERO-F, and
characterizes an angle offset
specified in anglezero-real. It supports all time-adaptations due to the outcome of Time.CheckSolution,
Time.CheckLinearSolver, Time.CheckVelocity, Time.CheckPressure,
Time.CheckDensity, Time.ThresholdDeltaPressure, Time.CardinalDeltaPressure,
Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.
DFT
is a growth factor specified in dftgrowth-real,
is an offset set by AERO-F, and
is the high-frequency energy computed by AERO-F in the portion of the (pseudo-) time-history of the
residual defined by the parameter dfthistory-int. It supports all time-adaptations due to the outcome of
Time.CheckSolution, Time.CheckLinearSolver, Time.CheckVelocity,
Time.CheckPressure,
Time.CheckDensity, Time.ThresholdDeltaPressure, Time.CardinalDeltaPressure,
Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.
HybridCheckSolution, CheckLinearSolver, and three of the CFL strategies outlined above in the following order
of priority: CheckSolution, CheckLinearSolver, DFT, Direction, and Residual. In general, it
is the most effective one. It supports all time-adaptations due to the outcome of Time.CheckSolution,
Time.CheckLinearSolver, Time.CheckVelocity, Time.CheckPressure,
Time.CheckDensity, Time.ThresholdDeltaPressure, Time.CardinalDeltaPressure,
Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.
FixedTime.CheckSolution,
Time.CheckLinearSolver, Time.CheckVelocity, Time.CheckPressure,
Time.CheckDensity, Time.ThresholdDeltaPressure, Time.CardinalDeltaPressure,
Time.ThresholdDeltaDensity, or Time.CardinalDeltaDensity.
cfl0-real [5.0]:
).
cfl1-real [0.0]:
). This lower bound is ignored however when either flag Time.CheckSolution or checklinearsolver-flag is turned on.
cfl2-real [0.0]:
).
cflmax-real [10000.0]:
).
ser-real [0.7]:
).
anglegrowth-real [2.0]:
for the CFL strategy Direction.
anglezero-real [0.2]:
for the CFL strategy Direction. This coefficient should be chosen in the interval
.
dfthistory-int [8]:
for the CFL strategy DFT.
frequencycutoff-int [3]:
for the CFL strategy DFT.
dftgrowth-real [1.4]:
for the CFL strategy DFT.
| Object: Newton |
The use of a Newton method to solve a system of nonlinear equations occurs in
the Implicit (see Implicit) and MeshMotion (see MeshMotion) objects.
The syntax of the Newton object is:
under Newton {
MaxIts = maxits-int;
FailSafe = failsafe-str;
EpsRelRes = epsrelres-real; (or Eps = eps-real;)
EpsAbsRes = epsabsres-real;
EpsAbsInc = epsabsinc-real;
under LineSearch { ... }
under LinearSolver { ... }
}
with
maxits-int [1]:
Time.DualTimeStepping = On),
a single
modified Newton iteration is performed at each dual time-step and this
parameter specifies instead the maximum number of dual time-steps per
physical time-step.
failsafe-str [Off]:
NavierStokes.Reconstruction is set to Linear — that is, for second-order
space discretization.
OnAlwaysOnAlwaysOn
and a negative pressure and/or density is encountered during a Newton
iteration,
the Newton iteration is repeated with the nodal gradients set to zero
at the points where the pressure and/or density are negative.
In this case, this treatment is maintained at these points in all
subsequent Newton iterations and all subsequent (pseudo-) time-steps.
Offepsrelres-real (or eps-real) [0.01]:
-th Newton iteration the convergence of the Eucledian norm of
the relative value of the nonlinear residual
. Convergence of the Newton process is declared whenever either
of the following criteria is satisfied
epsrelres-real
or
epsabsres-real
epsabsinc-real
where
is the initial value of the nonlinear residual,
and
are the iterate solution at the
-th Newton iteration
and its corresponding residual, respectively, and epsabsres-real
and epsabsinc-real are defined below.
epsabsres-real [MachinePrecision]:
-th Newton iteration the convergence of the Eucledian norm of
the (absolute) value of the nonlinear residual
. Convergence of the Newton process is declared whenever
either of the following criteria is satisfied
epsrelres-real
or
epsabsres-real
epsabsinc-real
where
is the initial nonlinear residual,
and
are the iterate solution at the
-th Newton iteration
and its corresponding residual, respectively, epsrelres-real is defined above,
and epsabsinc-real is defined below.
The default value for epsabsres-real is the machine precision for double precision arithmetics
(the difference between 1 and the smallest representable value that is greater than 1) which is typically
of the order of 1e-16. Hence, it is sufficiently small so that by default, the convergence criterion of the Newton process
is in principle based on the Eucledian norm of the relative value of the nonlinear residual
.
epsabsinc-real [MachinePrecision]:
-th Newton iteration the Eucledian norm of the incremental solution
of the nonlinear problem being solved. Convergence of the Newton process is declared whenever
either of the following criteria is satisfied
epsrelres-real
or
epsabsres-real
epsabsinc-real
where
is the initial nonlinear residual,
and
and
are the iterate solution at the
-th Newton iteration and its corresponding
residual, respectively, and epsrelres-real and epsabsres-real are defined above.
The default value of epsabsinc-real is the machine precision for double precision arithmetics
(the difference between 1 and the smallest representable value that is greater than 1) which is typically
of the order of 1e-16. Hence, it is sufficiently small so that by default, the convergence criterion of the Newton process
is in principle based on the Eucledian norm of the relative value of the nonlinear residual
.
LineSearch:
LinearSolver:
Note:
On or AlwaysOn and a negative pressure and/or density is encountered
during a Newton iteration, no information is recorded in the restart file about the whereabout of that negative pressure
and/or density. As a result, the first residual obtained after a restart operation may differ from the last residual
computed in the previous run;
Time.CheckSolution is set to On and failsafe-flag is set to On or AlwaysOn,
then Time.CheckSolution takes precedence.
| Object: LineSearch |
The object LineSearch can be used to combine Newton's method with a line search strategy and defining
the parameters of this strategy.
Given a nonlinear problem of the form
where
and
denote here the nonlinear residual and solution of interest, respectively, Newton's method
solves this problem by computing the iterates
where the increment
is the solution of the linearized problem
and
denotes the Jacobian of
with respect to
. For highly nonlinear problems, combining Newton's method
with a line search strategy can prove to be a more appropriate solution method as this combination searches for the solution
of the above nonlinear problem in the form of less agressive iterates as follows
where
is a step-length. In AERO-F, this step-length is computed
using a procedure known as "backtracking". For a given pair of
and
, the idea is to compute
as
to minimize the "merit" function
The backtracking procedure computes an approximate solution of the above minimization problem by searching iteratively
for the value of
that satisfies the following "sufficient decrease condition"
where
is the gradient of
with respect to
and satisfies
and
is a user-specified "sufficient decrease factor" chosen as
.
The above sufficient decrease condition can also be written as
In practice, the value of
that satisfies this condition is computed iteratively as follows.
The first trial value of
is set to
. Then, while the above sufficient decrease condition is not satisfied,
the current value of
is reduced by a user-specified "contraction factor"
— that is
— until the sufficient decrease condition is satisfied.
The syntax of the object
LineSearch is:
under LineSearch{
MaxIts = maxits-int;
SufficientDecreaseFactor = sufficientdecreasefactor-real;
ContractionFactor = contractionfactor-real;
}
with
maxits-int [0]:
sufficientdecreasefactor-real [0.25]:
. The chosen value must satisfy
.
contractionfactor-real [0.5]:
. The chosen value must satisfy
.
| Object: LinearSolver |
The object LinearSolver specifies how a linearized system of equations is solved at each Newton iteration,
or during a sensitivity analysis (see SensitivityAnalysis and Sensitivities).
It has two possible syntaxes. The first one is applicable when LinearSolver is used in the object Newton
where it can be embedded more than once for different purposes:
under LinearSolver {
under NavierStokes (or TurbulenceModel or LevelSet){
Type = type-id;
Output = output-str;
MaxIts = maxits-int;
KrylovVectors = krylov-int;
Eps = eps-real;
under Preconditioner { ... }
}
}
The second possible syntax is identical to the above one except for the absence of the statement
under NavierStokes (or TurbulenceModel or LevelSet){
and the corresponding closing brace
}
It is applicable when LinearSolver is used in MeshMotion or SensitivityAnalysis, where
it can be embedded only once.
In all cases, the members of this object are:
type-id [Gmres]:
GmresRichardsonCgGcroutput-str [""]:
"stdout" ("stderr") the linear residuals are printed on the standard
I/O stream stdout (stderr).
maxits-int [30]:
krylov-int [30]:
eps-real [0.01]:
Problem.Type = SteadyAeroelasticSensitivityAnalysis as in this case, convergence is monitored
using the counterpart parameter specified in the input file of AERO-S.
Preconditioner:
Notes:
Implicit.TurbulenceModelCoupling is set to Weak — that is, the contributions of the linearizations of the
mean flow and turbulence model equations to the Jacobian of the implicit problem are decoupled (see Implicit) — or
the “ghost fluid method of the poor” for which the level set and flow equations are also decoupled
is specified (see MultiPhase) for the solution of a multi-phase problem,
the parameters of the linear equation solver should be specified separately for each independent system of equations.
In such cases, the definition of the LinearSolver object within the Newton object (see Newton) becomes
under LinearSolver {
under NavierStokes { ... }
under TurbulenceModel { ... }
under LevelSet { ... }
}
with
NavierStokes:
TurbulenceModel:
LevelSet:
Implicit.TurbulenceModelCoupling is set to Strong — that is, the contributions of the linearizations of the
mean flow and turbulence model equations to the Jacobian of the implicit problem are coupled (see Implicit) —
the parameters of the linear equation solver should be specified for the NavierStokes
object only because a single
set of coupled equations is solved in terms of both the flow and
turbulence model variables. In this case, the definition of the object LinearSolver
within the object Newton (see Newton) becomes
under LinearSolver {
under NavierStokes { ... }
}
| Object: Preconditioner |
To increase the efficiency of the linear solver, it can be preconditioned. The
preconditioners currently available are described within the Preconditioner
object. Its syntax is:
under Preconditioner {
Type = type-id;
Fill = fill-int;
}
with
type-id [Ras]:
IdentityJacobiRasfill-int [0]:
| Object: Forced |
The Forced object enables the simulation of a flow past an obstacle set in prescribed motion, if the problem type (type-id) is set to Forced
(see Problem). This motion can be associated with
a prescribed heaving or pitching if the obstacle is rigid, or a
prescribed deformation if the obstacle is flexible.
Furthermore, the CFD mesh can be a dynamic ALE mesh which conforms to
the boundaries of the obstacle, or the obstacle can be embedded in a
fixed CFD mesh.
The syntax of the Forced object is:
under Forced {
Type = type-str;
Frequency = frequency-real;
TimeStep = timestep-real;
under Heaving{ ... }
under Pitching{ ... }
under Deforming{ ... }
under Velocity{ ... }
}
with
type-str [Deforming]:
Specifies a type of forced motion of an obstacle among the following list:
HeavingHeaving object.
PitchingPitching object.
DeformingDeforming object.
Velocityfrequency-int [—]:
timestep-real [—]:
Heaving:
Pitching:
Deforming:
Velocity:
| Object: Heaving |
This object can be used to specify the following heaving motion of a rigid obstacle
and move the CFD mesh accordingly
In the second equation above,
denotes the initial undeformed position vector of the CFD mesh (or its surfacic component),
the vector amplitude of the
displacement of the CFD mesh (or its surfacic component) associated with the vector amplitude
of the displacement of the obstacle,
the frequency of the harmonic oscillation specified in Forced.Frequency,
denotes time, and
denotes either the
instantaneous position vector of the entire CFD mesh or that of its
surfacic component. In the latter case, the motion of the remaining CFD
mesh nodes is computed
using a mesh updating algorithm that must be specified in MeshMotion.
The syntax of the Heaving object is:
under Heaving{
Domain = domain-id;
AX = ax-real;
AY = ay-real;
AZ = az-real;
}
with
domain-id [Volume];
This option is relevant only when Problem.Framework = BodyFitted.
VolumeSurfaceax-real [0.0]:
ay-real [0.0]:
az-real [0.0]:
| Object: Pitching |
This object can be used to prescribe a pitching motion of a rigid obstacle around two pitch axes, where: the position of the first pitch axis is fixed in time; the position of the second pitch axis is continuously updated by the pitching motion around the first pitch axis; the overall pitching motion is given by
Hence, for computations on dynamic meshes (Problem.Framework = BodyFitted), the CFD mesh is moved accordingly as follows:
In the above equations,
and
denote the position vectors of an arbitrary point on the first and second pitch axes, respectively,
(
) denotes the initial position vector of the rigid obstacle (CFD mesh, or its surfacic component),
and
denote two
rotation matrices around two specified pitch axes,
and
denote the instantaneous pitch angles around the first and second pitch axis, respectively,
denotes time,
denotes the identity matrix, and
(
) denotes the instantaneous position vector of the
obstacle (entire CFD mesh, or its surfacic component). In the case where only the motion of the surfacic component of the mesh
is prescribed, that of the remaining CFD mesh nodes is computed using a mesh updating algorithm that must be specified
in MeshMotion. The angles
and
are set to the oscillatory functions
and
denote the angles about which the instantaneous pitch angles
and
are to oscillate, respectively,
and
the two amplitudes of the oscillatory pitching motion
of the obstacle, and
its frequency which must be specified in Forced.Frequency.
The syntax of the Pitching object is:
under Pitching{
Domain = domain-id;
Alpha0 = alpha0-real;
AlphaMax = alphamax-real;
Beta0 = beta0-real;
BetaMax = alphamax-real;
X11 = x11-real;
Y11 = y11-real;
Z11 = z11-real;
X21 = x21-real;
Y21 = y21-real;
Z21 = z21-real;
X12 = x12-real;
Y12 = y12-real;
Z12 = z12-real;
X22 = x22-real;
Y22 = y22-real;
Z22 = z22-real;
}
with
domain-id [Volume];
This option is relevant only when Problem.Framework = BodyFitted.
VolumeSurfacealpha0-real [0.0]:
alphamax-real [0.0]:
beta0-real [0.0]:
betamax-real [0.0]:
x11-real [0.0]:
y11-real [-1.0]:
z11-real [0.0]:
x21-real [0.0]:
y21-real [1.0]:
z21-real [0.0]:
x12-real [-1.0]:
y12-real [0.0]:
z12-real [0.0]:
x22-real [1.0]:
y22-real [0.0]:
z22-real [0.0]:
| Object: Deforming |
This object can be used to prescribe the following harmonic deformational mesh motion
and
denote the initial and final position vectors of the CFD mesh (or their surfacic components),
respectively,
is a real amplification factor,
is the frequency of the harmonic oscillation and is specified in Forced.Frequency,
denotes time, and
denotes either the instantaneous position vector of the entire CFD
mesh or that of its surfacic component. In the latter case,
the motion of the remaining CFD mesh nodes is computed using a mesh
updating algorithm that must be specified in MeshMotion.
The syntax of this object is:
under Deforming {
Domain = domain-id;
Position = position-str;
Amplification = amplification-real;
}
with
domain-id [Volume];
This option is relevant only when Problem.Framework = BodyFitted.
VolumeSurfaceposition-str [""]:
amplification-real [1.0]:
Note:
is that of the mesh geometry specified in Input.Geometry;
however, if a filename is specified in the member Input.Position,
becomes the mesh position specified in that file.
| Object: Accelerated |
AERO-F can be used to compute a flow around a rigid or flexible obstacle set in accelerated motion.
In this case, the “hybrid wind tunnel” framework of computation (see Figure HWT) is adopted — that is, an increase of
the free-stream velocity associated with an acceleration of the obstacle is accounted for by accelerating accordingly
the ALE mesh. In other words, the motion of the obstacle, which is initially at the free-stream velocity then accelerated,
is represented in a frame moving at the free-stream velocity with respect to the ground.
The accelerated motion can be characterized either by a constant acceleration field,
or deduced from a piecewise linear velocity time-profile
that is specified in the TimeVelocity object. For an obstacle moving with a piecewise linear velocity,
a set of time-velocity pairs are specified. In this case, the velocity is linearly interpolated and
the acceleration is approximated by a corresponding piecewise constant field.
Figure HWT: the hybrid wind tunnel computational framework
The syntax of the Accelerated object is:
under Accelerated {
Tag = tag-id;
LawType = lawtype-id;
AccelerationX = acc-x-real;
AccelerationY = acc-y-real;
AccelerationZ = acc-z-real;
TimeStep = timestep-real;
under TimeVelocity1 { ... }
}
with
tag-id [Mach]:
MachVelocityTimelawtype-id [ConstantAcceleration]:
ConstantAccelerationAccelerationX, AccelerationY, and AccelerationZ. The sign convention
is that of the hybrid wind tunnel computational framework graphically depicted in
Figure HWT. For example, a positive acceleration in the x direction corresponds to a physical
deceleration.
VelocityLawTimeVelocity objects.
acc-x-real [0.0]:
acc-y-real [0.0]:
acc-z-real [0.0]:
timestep-real [—]:
TimeVelocity1:
TimeVelocity.
Note:
Figure Acceleration: example of the effect of acceleration on the angle of attack
| Object: TimeVelocity |
The TimeVelocity object specifies the velocity of an obstacle at a certain time.
under TimeVelocity1 {
Time = time-real;
VelocityX = v-x-real;
VelocityY = v-y-real;
VelocityZ = v-z-real;
}
with
time-real [—]
v-x-real [0.0]
v-y-real [0.0]
v-z-real [0.0]
Notes:
TimeVelocity object. It
is rather automatically generated using zero for the initial time and the free-stream flow conditions for the
initial velocity (Mach number and angles of attack).
It is also assumed that the TimeVelocity objects are ordered with increasing time;
TimeVelocity object, the
velocity is assumed to be constant and set to the value specified by the last TimeVelocity object.
| Object: Aeroelastic |
Aeroelastic parameters are specified within the Aeroelastic object. Its syntax is:
under Aeroelastic {
Force = force-id;
InternalPressure = pressure-real;
}
force-id [Last]:
This parameter is relevant only when Problem.Framework = BodyFitted.
LastAveragedpressure-real [inlet_pressure]:
Inlet.Pressure and referred to here as inlet_pressure).
The reader
should note that for an obstacle with a closed surface, this feature,
which is very convenient for aeroelastic computations, has no
effect on the values of the global generalized aerodynamic forces. It
affects however the resulting displacements and stresses of
the obstacle.
| Object: MeshMotion |
For a simulation on a moving grid (Problem.Framework = BodyFitted, or, Problem.Framework = EmbeddedALE and presence of symmetry plane),
the MeshMotion object constructs a strategy and specifies an algorithm for updating the position of the grid points of the CFD mesh.
Body-Fitted ALE Computational Framework
In this framework (Problem.Framework = BodyFitted), the motion of the interior grid points is driven in general by that of the points lying on boundary surfaces of the CFD mesh
(see the CD2TET user manual for the mesh motion attributes of the various types of surfaces recognized by AERO-F).
Therefore, the mesh motion conventions of three important types of surfaces are first discussed below.
The mesh motion of the nodes on a moving wall can be either prescribed (see Forced), or obtained via communication with AERO-S during a fluid-structure simulation.
The nodes in a sliding plane (see SurfaceData) slide in this plane — that is, the component of their displacement field along the specified normal to the sliding plane is constrained to zero.
The nodes in a symmetry plane are by default fully restrained —
that is, their motion is set to zero. However, there is one exception
to this rule.
If type-id = Corotational (see below), AERO-F does not necessarily fully restrain (set to zero) the motion of the nodes of a symmetry plane.
In other words, if for some reason type-id = Corotational is the desired setting but the computational domain includes a symmetry plane, additional settings
need to be chosen to preserve the integrity of the symmetry boundary conditions.
Specifically, if the computational domain contains a symmetry plane and type-id is set to Corotational — for example, to prevent mesh crossovers near a moving wall —
the nodes of the symmetry plane must be forced to slide in this plane. This is achieved by using the Symmetry
object within this object. Specifically, this allows the
nodes of the symmetry plane to slide “rigidly” in this plane. To allow
them to slide in this plane while simultaneously allowing the faces to
which they belong to to deform in this plane — which
can be beneficial for the mesh motion strategy and/or algorithm — in
addition to using the Symmetry object within this object,
the symmetry plane must be explicitly declared in SurfaceData to be a sliding plane.
Embedded ALE Computational Framework
By default — that is, independently from any setting specified in this object — the Embedded-ALE computational framework
(Problem.Framework = EmbeddedALE) applies at each time-step a rigid
corotational motion (defined with
respect to the wall boundary) to the entire embedding mesh. This rigid
motion is computed so that the updated embedding mesh tracks
the boundary layer and maintains it well-resolved. If the computational
fluid domain contains a symmetry plane or any other fixed surface, this
rigid body motion will cause in general the fluid grid points lying in
this surface to move outside of it.
To keep the grid points of the symmetry plane or fixed surface in this
surface, the user can use this object and set type-id (see below) to Corotational.
In this case, AERO-F applies next an inverse transformation to
the aforementioned grid points to bring them back to their original
positions in the surface they belong to,
while constraining those points in the neighborhood of the boundary
layer to remain where they have been displaced by the corotational
motion.
This causes the entire embedding mesh to deform. It may also produce
excessive deformations of the embedded mesh in the vicinity of the
symmetry plane or fixed surface and jeopardize
the integrity of the mesh motion strategy and/or algorithm. The latter
issue can be mitigated by declaring this plane/surface to be a sliding
plane/surface (see SurfaceData).
In this case, after the corotational step is performed, AERO-F returns the displaced nodes of the symmetry plane not necessarily to their original positions in this plane, but to a
more optimal position in this plane.
The syntax of the MeshMotion is:
under MeshMotion {
Type = type-id;
Element = element-id;
VolumeStiffness = stiffness-factor;
Mode = mode;
NumIncrements = numincrements;
under Symmetry { ... }
under Newton { ... }
}
with
type-id [Basic]:
BasicCorotationalelement-id [BallVertexSprings]:
LinearFiniteElementNonLinearFiniteElementTorsionalSpringsBallVertexSpringsNonLinearBallVertexstiffness-factor [0.0]:
LinearFiniteElement). When positive, it adds to the basic pseudo-stiffness of an element — which
is usually inversely proportional to its volume in order to prevent mesh crossovers — a positive term that is
proportional to its volume and multiplied by stiffness-factor, thereby preventing this element from becoming
increasingly flexible when stretched and causing a mesh instability. By default, the value of this parameter is zero,
which does not provide additional stiffening during stretching. The higher the value of this parameter is, the stiffer
the pseudo-structure becomes when stretched and the less likely to induce a mesh instability.
However, as the value of this parameter is increased, the conditioning of the corresponding
pseudo-stiffness matrix becomes worse, and more iterations may become necessary for updating the position of the mesh.
mode [NonRecursive]:
NonRecursiveNonRecursive (which is the default value), then the prescribed boundary displacement field is applied in
numincrements equal increments and the stiffness of the mesh is updated at each step.
RecursiveRecursive,
the prescribed boundary displacement field is recursively applied in
fractions
computed so that, in principle, the motion of the moving surface does
not exceed, for a given fraction (except possibly the last one),
the thickness of the first layer of elements above this surface. In this
case, the stiffness of the mesh is also
updated at each step and numincrements defines the maximum number of allowable increments.
numincrements [1]:
NonRecursive, or the maximum number of
allowable fractions of this displacement when mode is set to Recursive. The default value is 1.
Newton:
Symmetry:
Note:
Newton.LinearSolver.Type is Cg while the
default value for Newton.LinearSolver.Preconditioner.Type is Jacobi;
| Object: Symmetry |
This object is relevant only when Problem.Framework = BodyFitted, the simulation is performed on a moving grid, the computational domain contains a symmetry plane, and the type-id member
of the MeshMotion object is set to Corotational.
In this case, the nodes of the symmetry plane are not necessarily fully
restrained — that is, they can move outside the symmetry plane — which
results in a violation of the symmetry boundary conditions. In this
setting,
to prevent this issue from happening, this object must be used to force
the nodes of the symmetry plane to slide “rigidly” in this plane. To
have them slide while allowing the deformation of the faces to which
they belong
— which can be beneficial to the robustness of the mesh motion strategy
chosen in MeshMotion — the symmetry plane must also be explicitly declared in SurfaceData as a sliding plane.
The syntax of the Symmetry object is:
under Symmetry {
Nx = Nx-real;
Ny = Ny-real;
Nz = Nz-real;
}
with
Nx-real [0.0]:
Ny-real [0.0]:
Nz-real [0.0]:
Notes:
| Object: EmbeddedFramework |
The object EmbeddedFramework is primarily used to specify AERO-F's embedded boundary method for CFD and fluid-structure interaction problems.
This method is activated however only if Problem.Type is set to Embedded or EmbeddedALE (see Problem).
Its main parameters are: (a) the specific
definition of an active/inactive (or real/ghost) mesh node; (b) the type
of the location where to construct and solve the fluid-structure half
Riemann problem, namely,
the control volume-based surrogate fluid/structure interface or the real
fluid/structure interface; (c) in the latter case, the specific
location where to construct the half
Riemann problem on the real interface; (d) the normal to be used by the
underlying fluid-structure half Riemann solver; (e) the numerical
treatment of fluid-structure phase changes;
and (f) the surface on which to compute the flow-induced forces and
moments and enforce the equilibrium transmission condition in the case
of a fluid-structure simulation using an
appropriate energy-conserving algorithm.
In the case of a closed embedded discrete surface, the object EmbeddedFramework is also used to specifiy the initial state of
the fluid medium occupying the region of the computational domain enclosed by this surface.
The syntax of this object is:
under EmbeddedFramework {
Prec = prec-id;
InterfaceThickness = interfacethickness-real;
DefinitionActiveInactive = definitionactiveinactive-id;
Unwetted = unwetted-id;
TypeHalfRiemannProblem = typehalfriemannproblem-id;
LocationHalfRiemannProblem = locationhalfriemannproblem-id;
InterfaceLimiter = interfacelimiter-flag;
RiemannNormal = rnormal-id;
StructureNormal = structurenormal-id;
PhaseChange = phasechange-id;
GhostPointPopulation = ghostpointpopulation-id;
ExtrapolationOrder = extrapolationorder-id;
LoadsAlgorithm = loadsalgorithm-id;
QuadratureOrder = quadratureorder-int;
CrackingWithLevelSet = crackingwithlevelset-flag;
ViscousInterfaceOrder = viscousinterfaceorder-id;
ViscousBoundaryCondition = viscousboundarycondition-id;
RotatedRiemann = rotatedriemann-flag;
AveragedRiemann = averagedriemann-flag;
FirstLayerFix = firstlayerfix-flag;
BoundaryTreatmentTurbulenceVariables = boundarytreatmentturbulencevariables-id;
FindFarFieldNode = findfarfieldnode-id;
FillScope = fillscope-str;
BoundingBoxSize = boundingboxsize-int;
NewtonInitialGuess = newtoninitialguess-str;
under MovingLeastSquares { ... }
under InitialConditions { ... }
}
with
prec-id [NonPreconditioned]:
This parameter is relevant only if Problem.Prec = LowMach.
NonPreconditionedLowMachinterfacethickness-real [1e-8]:
FRG intersector is chosen instead, this parameter is ignored.
definitionactiveinactive-id [Node]:
NodeControlVolumeSurrogate (see below).
Mirroring, if Equations.Type = NavierStokes.
unwetted-id [No]:
ControlVolume and therefore affects only the smooth version of FIVER. It informs AERO-F
whether the embedded discrete surface
(or the union of all embedded discrete surfaces) contains (or not)
unwetted elements – as, for example, in the case of two intersecting
embedded discrete surfaces.
NoYestypehalfriemannproblem-id [Surrogate]:
Surrogate
, where
denotes the typical mesh size, is introduced in the semi-discretization process. Consequently, even for
second-order spatial approximations away from the material interface (NavierStokes.Reconstruction = Linear), the FIVER method delivers a first-order global rate of convergence.
Note that if definitionactiveinactive-id is set to ControlVolume, AERO-F automatically resets typehalfriemannproblem-id to this option.
RealLocationHalfRiemannProblem = Intersection.
LocationHalfRiemannProblem = ClosestPoint.
NavierStokes.Reconstruction = Linear), the FIVER method delivers a second-order global rate of convergence.
Because it is a higher-fidelity option, this setting is available only for the case where NavierStokes.Reconstruction = Linear). Otherwise, it is automatically reverted to the Surrogate setting.
locationhalfriemannproblem-id [Intersection]:
DefinitionActiveInactive = Node.
It specifies in this case the location on the real fluid-structure
interface — that is, the embedded discrete surface — where to construct
and
solve the fluid-structure half Riemann problem in order to enforce the
appropriate kinematic fluid-structure transmission condition. Two
choices are available:
IntersectionClosestPointinterfacelimiter-flag [Off]:
Real (see above), phasechange-id
is set to Extrapolation (see below), and extrapolationorder-id is set to SecondOrder. It can take one of the
two following values:
OnOffrnormal-id [Structure]:
DefinitionActiveInactive = Node and LocationHalfRiemannProblem = Intersection. In this case, it specifies the normal to be used in the solution of the
one-dimensional fluid-structure half Riemann problem along an edge of the fluid mesh which intersects the structure.
StructureFluidstructurenormal-id [ElementBased]:
Structure. It specifies a method for computing the normal to
an element of the embedded discrete surface.
ElementBasedNodeBasedElementBased normal is computed within each element and assigned to each node of this element. Next, all normals
assigned to a node are averaged. Finally, the normal at a point of an element of the embedded discrete surface is computed by
interpolating the averaged normals at the nodes of this element.
phasechange-id [Extrapolation]:
Extrapolationghostpointpopulation-id [Local]:
GlobalLocalMirroringextrapolationorder-id [---]:
Extrapolation (see above). It specifies the order of the
extrapolation method.
FirstOrderSecondOrderThe default value of the parameter is FirstOrder if typehalfriemannproblem-id = Surrogate, and SecondOrder
if typehalfriemannproblem-id = Real.
loadsalgorithm-id [Closest]:
ClosestMovingLeastSquaresquadratureorder-int [3]:
is the highest degree of the polynomial that can be integrated exactly using this quadrature. The available
range is
. For problems where the fluid mesh under-resolves in some areas the embedded discrete surface, the
setting
is recommended.
crackingwithlevelset-flag [Off]:
On when expecting the embedded discrete surface to crack, and to Off otherwise.
viscousinterfaceorder-id [FirstOrder]:
Specifies the order of accuracy of the numerical approximation of the viscous terms in the vicinity of the embedded discrete surface.
FirstOrderSecondOrderNavierStokes.Reconstruction = Constant).
Specifically, the fluid velocity at a ghost fluid point is populated in
this case using linear extrapolation and the true embedded discrete
surface.
viscousboundarycondition-id [Weak]:
This parameter is relevant only for viscous computations and when rnormal-id = Structure.
It specifies how to reconstruct the fluid velocity field after the
solution of a fluid-structure half Riemann problem,
independently from the choice of the normal for the solution of this
problem. Because both choices offered below become identical when a
fluid-structure half Riemann problem
is solved using the normal to the control volume face of the fluid mesh
associated with the edge intersecting the structure, this parameter is
irrelevant when rnormal-id = Fluid.
WeakStrongrotatedriemann-flag [Off]:
Specifies whether or not to activate the rotated Riemann flux scheme (see RotatedRiemann) at the edges intersecting the embedded discrete surface. This scheme is recommended for inviscid computations performed
using rnormal-id = Structure.
OffOnaveragedriemann-flag [Off]:
Specifies whether or not to activate at the edges intersecting
the embedded discrete surface the averaged Riemann flux scheme, which is
an alternative to the rotated Riemann flux scheme, to enforce the slip
wall boundary condition
in inviscid computations performed using rnormal-id = Structure.
OffOnfirstlayerfix-flag [On]:
NavierStokes.Reconstruction at any real node adjacent to the embedded discrete surface during the computation of the inviscid fluxes
associated with those edges attached to this node that are not intersected by the embedded discrete surface.
OnOffboundarytreatmentturbulencevariables-str [No]:
YesNofindfarfieldnode-id [On]:
Inlet.FluidID
– that is, the ID of the fluid medium on the inlet far-field boundary –
to initialize the ID of the fluid medium within the computational fluid
domain. Typically,
this is a technically sound approach if the embedded discrete surface
does not intersect the inlet far-field boundary.
OnOfffillscope-str [BoundingBox]:
BoundingBox updates the scope at each time-step using a method involving nodal bounding boxes (see boundingboxsize-int below). This method is suitable
for applications in which the embedded surface evolves gradually or when the time-step is restricted using Time.EmbeddedCfl. Alternatively, the choice Always
can be specified, in which case
the re-initialization of the scope is activated at each time-step. The
latter method is suitable for applications in which the embedded surface
evolves rapidly and the time-step is not restricted using Time.EmbeddedCfl.
boundingboxsize-int [1.0]:
BoundingBox.
It specifies the size of the nodal bounding boxes used to update the
scope. Specifically, when this parameter is set to 1.0 (which is the
default value),
the bounding box associated with each node encloses all of the edges
connecting the node to its neighbors. This default setting is only
appropriate when Time.EmbeddedCfl is
set to a value less than or equal to 1.0,
which restricts the traversal of the embedded surface to one cell per
time-step. In general, the value of this parameter should be greater
than or equal to that of Time.EmbeddedCfl in order to guarantee completeness of
the resulting intersections.
newtoninitialguess-str [Off]:
Off
(which is the default setting),
the fluid state is not explicitly initialized and hence the initial
state is set to the current state, i.e. the flow state at the previous
time-step. If set to On, the fluid state in the vicinity of
an evolving embedded
surface is initialized using the exact solution of the fluid-structure
half Riemann problem. The latter method enlargens the radius of
convergence of the Newton solver for rapidly evolving embedded surfaces
and consequently
enables larger computational time-steps.
MovingLeastSquares:
InitialConditions:
| Object: MovingLeastSquares |
This object can be used to specify a moving least squares approach for computing the flow-induced forces and moments on an embedded discrete surface and set its parameters. Specifically, the approach consists in applying a moving least squares algorithm based on radial basis functions to a stencil of real (active) fluid nodes to compute the ancillary quantities to load evaluation on an embedded discrete surface. This approach minimizes if not eliminates discrete events during load computations and therefore delivers smooth results when the embedded discrete surface evolves or is evolved.
The syntax of this object is:
under MovingLeastSquares{
SupportRadius = supportradius-real;
Dimension = dimension-int;
}
with
supportradius-real [3.0]
in
, where
is the radius of support of the moving least squares approximation
around a point on the embedded discrete surface where an ancillary
quantity to load evaluation is needed and
is the characteristic mesh size in the vicinity of the aforementioned
point. All active fluid nodes located within a disk/sphere (see below)
centered at the point of interest and of radius
form a stencil
from which the ancillary quantity is reconstructed.
dimension-int [3]
Specifies the dimension of the linear moving least squares approximation:
2
-
plane.
3| Object: InitialConditions |
This object provides a convenient way for initializing to a uniform condition the state of a fluid medium in a region of the computational fluid domain delimited by a closed embedded discrete surface. Because a closed surface can consist of multiple disconnected closed surfaces, the aforementioned region of interest is identified here by specifying a point it contains (this point does not need to be a CFD grid point). Because the initialization procedure depends on the EOS of the fluid medium of interest, the integer identification number of this fluid medium is also specified in Point. Finally, the initial state itself is specified in InitialState.
The syntax of this object is:
under InitialConditions {
under Point[point-id-int] { ... }
...
}
with
point-id-int[—]
Point:
| Object: Point |
This object specifies the coordinates of a point (which is not necessarily a CFD grid point) identified by point-id-int for the purpose of identifying the region of the computational fluid domain containing this point and delimited by an embedded, discrete, closed surface. It also identifies the fluid medium occupying this region by specifying its integer identification number, and initializes its state to that of a uniform condition specified in InitialState.
The syntax of this object is:
under Point {
FluidID = fluid-id-int;
X = x-real;
Y = y-real;
Z = z-real;
under InitialState{ ... }
under ProgrammedBurn{ ... }
}
with
fluid-id-int [—]:
x-real [0.0]:
y-real [0.0]:
z-real [0.0]:
InitialState:
ProgrammedBurn:
| Object: EmbeddedALEFramework |
The object EmbeddedALEFramework is used to specify the parameters of AERO-F's Arbitrary Lagrangian Eulerian (ALE) embedded boundary
method for CFD anf fluid-structure interaction problems, ALE-FIVER (FInite Volume method with Exact, local, fluid-structure
half-Riemann solvers). This method, which is documented in C. Farhat and V. Lakshminarayan, "An ALE Formulation of Embedded Boundary Methods for Tracking Boundary Layers in Turbulent
Fluid-Structure Interaction Problems," Journal of Computational Physics, Vol. 263, pp. 53-70 (2014) is activated only if Problem.Type is set to EmbeddedALE.
While the settings
pertaining to its ALE character should be specified in this object,
those pertaining to its embedded boundary method character should be
specified in EmbeddedFramework.
under EmbeddedALEFramework {
MasterSurfaceID = mastersurfaceid-int;
}
with
mastersurfaceid-int []:
| Object: Linearized |
AERO-F can also be used to solve a set of linearized flow equations around a given (equilibrium) configuration when the considered fluid is a perfect gas. The module within AERO-F that performs this task is referred to as AERO-FL. This module also offers a dimensional POD-based ROM capability trained for obstacle vibrations. Currently, AERO-FL supports only the linearized Euler equations, laminar Navier-Stokes equations, RANS equations (see TurbulenceModel) based on the Spalart-Allmaras (see SpalartAllmaras) or DES (see DES) model, and LES (see TurbulenceClosure and LESModel) equations; in descriptor form; and for a perfect gas. It can be used to perform (see Problem):
The linearized flow simulations are initialized by a perturbation of
the steady-state flow solution around which the
linearized flow was computed. This is performed by: a) perturbing a flow
parameter such as the angle of attack, Mach number,
altitude, or shape of the obstacle and computing a new steady-state
solution, then b) specifying the obtained perturbed flow solution
in Input.Perturbed (see Input). A
noteworthy initialization is that in which the perturbed flow
corresponds to a shape
perturbation induced by a modal displacement of the structure
(communicated to the fluid by a ping-pong step). In this case, and in
the event of a linearized aeroelastic computation, the structure can be
conveniently initialized by the same modal displacement
using Linearized.ExcMode as explained below.
Currently, a linearized aeroelastic simulation can be driven only by a modal source term associated with the structure. For this reason, such a simulation can be performed only in dimensional mode. See Problem.
The complex eigenvalue analysis of a linearized aeroelastic system is performed for a given set of flight conditions
(the inlet conditions) and a given modal representation of the underlying structure. Its convergence can be
controlled using the parameters ToleranceEigenAeroelastic and MaxItsEigenAeroelastic. The real and imaginary parts of the computed eigenvalues
and the aeroelastic damping ratios, which are extracted from them, are outputted in Postpro.AeroelasticEigenvalues.
The syntax of the Linearized object is:
under Linearized{
StrModes = strmodes-str;
NumStrModes = numberstructuralmodes-int;
ExcMode = idmodetobeexcited-int;
Domain = domain-id;
InitialCondition = ic-id;
Amplification = amplitude-real;
FreqStep = frequencystep-real;
Eps = finitedifferenceepsilon-real;
Tolerance = eigensolvertolerance-real;
NumPOD = numberPODmodes-int;
GAMReducedFrequency1 = gamreducedfrequency1-real;
...
GAMReducedFrequency20 = gamreducedfrequency20-real;
MaxItsEigenAeroelastic = eigenaeroelasticmaximumiterations-int;
ToleranceEigenAeroelastic = eigenaeroelasticsolvertolerance-real;
under Pade { ... }
}
with
strmodes-str [""]:
NumStrModes is set to a non-zero positive value.
numberstructuralmodes-int [0]:
StrModes.
If this parameter is set to 0, the StrMode file is not exploited even if specified.
idmodetobeexcited-int [1]:
StrModes file. Again, this parameter has no effect if NumStrModes is set to 0.
domain-id [Time]:
TimeProblem.Type is set to PODConstruction (see Problem).
Frequencyic-id [Displacement]:
DisplacementPODConstruction or to PODInterpolation. See Problem.
VelocityPODConstruction or to PODInterpolation. See Problem.
amplitude-real [1.0]:
ExcMode.
frequencystep-real [0]:
MaxIts of the Time object (see Time).
finitedifferenceepsilon-real [1e-4]:
eigensolvertolerance-real [1e-8]:
numberPODmodes-int [0]:
NumPOD must be smaller
than StrModes*(2*MaxIts + 1). In interpolation mode,
NumPOD must be smaller or equal to the common size of the two existing POD basis vectors input
in PODData (see Input). When constructing a ROM, this parameter specifies the first
so-many POD basis vectors to use among those specified in PODData (see Input).
gamreducedfrequency1-real [---]:
eigenaeroelasticmaximumiterations-int [10]:
eigenaeroelasticsolvertolerance-real [1e-4]:
Pade:
RungeKutta2 scheme. As far as time-stepping is concerned, only TimeStep and
MaxIts need be set in the Time object (see Time)
when running AERO-FL.
In this case, the first parameter specifies the time-step — which in
this case is held constant because the system is linear — and the second
one specifies the number of steps to be performed or half the
number of snapshots per modal impulse to be generated.
However, all other commands such as the Newton command which contains the LinearSolver
object (see Newton, see LinearSolver) must be specified by the user;
MaxIts to zero, and specify a filename in Postpro.ROM. In this case, the ROM is built but no
time-domain simulation is performed, and the ROM is outputted in the specified output file;
Postpro.StateVector (see Postpro);
Problem.Type = PODConstruction and Time.Form = Descriptor, the computed POD basis is orthonormal with respect to the matrix of cell volumes
(see Time);
Problem.Type = PODConstruction and Time.Form = NonDescriptor, the snapshot computations are performed using the descriptor form of the governing linearized fluid
equations (see Time), but the computed POD basis is orthonormal with respect to the identity matrix;
Problem.Type = ROM or Problem.Type = ROMAeroelastic, and Time.Form = Descriptor,
the descriptor form of the governing linearized fluid equations is
reduced by the specified POD basis, which leads to a ROM that does not
suffer from the potential ill-conditioning of the matrix of cell volumes
(see Time);
Problem.Type = ROM or Problem.Type = ROMAeroelastic, and Time.Form = NonDescriptor,
the non descriptor form of the governing linearized fluid equations is
reduced by the specified POD basis, which leads to a ROM that may suffer
from the potential ill-conditioning of the matrix of cell volumes
(see Time)
and become
unstable. Therefore, it is currently recommended to always use the
descriptor form of the equations to be reduced when constructing a POD
basis or a ROM.
| Object: Pade |
When constructing a POD basis in the frequency domain, snapshots
are computed by sweeping over a set of reduced frequencies
and solving for each one of them a system of equations with multiple
right-sides (one right-side per applied structural vibration mode).
These frequencies, which are determined by the parameters Linearized.FreqStep and Time.MaxIts,
are referred to here as the "fine reduced frequency points" by analogy
with a "fine grid".
The snapshot computation can be expedited by a reconstruction strategy
that can be described as follows.
The user can specify up to 11 coarse reduced frequency points referred
to here as the "coarse reduced frequency points", by analogy with a
"coarse grid".
Then, the snapshots and their successive reduced frequency derivatives
are computed at these coarse reduced frequency points only, for all
specified
structural vibration modes, and reconstructed on the fine reduced
frequency points using a multi-point Pade approximation scheme.
For each coarse reduced frequency point, the successive reduced
frequency derivatives of the snapshots can be obtained by solving the
same system of equations governing the snapshot itself but with a
different right-side. Hence, the reconstruction strategy described here
is most effective when the chosen iterative solver is tailored for
systems of equations with multiple right-sides. For this reason,
this Pade-based frequency sweep strategy can be activated only when the
linear, Krylov-based, iterative solver is Gcr (see LinearSolver).
Furthermore, the polynomial degrees L and M of the numerator and denominator of the Pade approximation, respectively, must be chosen so that L+M+1 is a multiple of the number of coarse reduced frequency points used at one-time, in order to have a constant number of right-sides per coarse reduced frequency point.
The syntax of the Pade object is :
under Pade {
Freq1 = freq1-real;
Freq2 = freq2-real;
Freq3 = freq3-real;
Freq4 = freq4-real;
.;
.;
.;
Freq11 = freq11-real;
L = numeratordegree-int;
M = denominatordegree-int;
NumPoints = nptspade-int;
}
with
freq1-real [-1]:
numeratordegree-int [3]:
denominatordegree-int [4]:
nptspade-int [0]:
| Object: SensitivityAnalysis |
When Problem.Type is set to SteadySensitivityAnalysis or SteadyAeroelasticSensitivityAnalysis, the user can request
in the object Postpro the computation and output of sensitivities (gradients) of aerodynamic-related
quantities
with respect to a speficied set of flow and/or shape parameters
, at a steady-state fluid or aeroelastic
solution specified in Input.Solution (see Sensitivities). The object SensitivityAnalysis
is used to set the parameters of the underlying sensitivity analysis.
The mostly aerodynamic quantities
for which AERO-F can evaluate sensitivities
at a specified steady-state flow or aeroelastic solution are (see Postpro):
Problem.Framework = BodyFitted, or the nodal displacement values of the embedded discrete surface if Problem.Framework = Embedded or
EmbeddedALE.
The parameters
with respect to which AERO-F can compute sensitivities
at
a specified steady-state flow or aeroelastic solution are:
Notes:
-
turbulence model (see TurbulenceModel)
is used for this purpose;
however for the first two turbulence models, the effect of the
parameter distance to the wall is not accounted for and therefore the
sensitivities may not be accurate when this effect is significant;
Problem.Type must be set to SteadySensitivityAnalysis or SteadyAeroelasticSensitivityAnalysis,
Problem.Mode must be set to Dimensional, FarField.Type
must be set to StegerWarming, and MeshMotion.Type must be set to Basic;
Implicit.MatrixVectorProduct
and Implicit.FiniteDifferenceOrder to FiniteDifference and 2, respectively, for the purpose of
sensitivity analysis;
Implicit.TurbulenceModelCoupling
to Strong and Implicit.MatrixVectorProduct to FiniteDifference for the purpose of sensitivity analysis;
Implicit.MatrixVectorProduct is set to Approximate, AERO-F automatically changes
this setting to FiniteDifference for the purpose of sensitivity analysis.
The syntax of the object
SensitivityAnalysis is:
under SensitivityAnalysis{
Method = method-id;
SparseApproach = sparseapproach-flag;
MatrixVectorProduct = mvp-id;
SensitivityComputation = sensitivitycomputation-id;
SensitivityMesh = sensitivitymesh-flag;
NumShapeParameters = numshapeparameters-int;
SensitivityMach = sensitivityMach-flag;
SensitivityAlpha = sensitivityalpha-falg;
SensitivityBeta = sensitivitybeta-flag;
SensitivityFSI = sensitivityfsi-flag;
AdaptiveEpsFSI = adaptiveepsfsi-flag;
EpsFD = epsfd-real;
under LinearSolver{ ... }
}
with
method-id [Direct]
DirectAdjointAnalytical).
sparseapproach-flag [Off]
OffOnmvp-id [Exact]:
ExactProblem.Prec). In this case, the Jacobian of the flux vector
with respect to the fluid state vector is computed using the FiniteDifference approach with fdorder-id = FirstOrder.
Roe is chosen for spatial discretization (see NavierStokes.Flux),
in which case this option reverts to the FiniteDifference option with fdorder-id = FirstOrder.
VanAlbada (see NavierStokes.Limiter) is introduced in the computation, in which
case this option reverts to the FiniteDifference option with fdorder-id = FirstOrder.
NavierStokes.Gradient is set to NonNodal to achieve second-order spatial accuracy. In this case, this
option reverts to the FiniteDifference option with fdorder-id = FirstOrder.
NavierStokes.Dissipation is set to SixthOrder to control numerical dissipation and achieve a
higher-order of spatial accuracy. In this case, this option reverts to the FiniteDifference option with
fdorder-id = FirstOrder.
FiniteDifferencesensitivitycomputation-id [Analytical]
AnalyticalSemiAnalyticalFiniteDifferencesensitivitymesh-flag [Off]
On
. The user does not need to specifiy these shape parameters directly. Instead, the user should specify
in this case the wall boundary components of the mesh shape gradients in the binary file inputted in
Input.ShapeDerivative (see Sensitivities). Failure to input this binary file results in
skipping the computation of the sensitivities requested in Postpro with respect to any shape parameter.
Offnumshapeparameters-int [0]
On.
sensitivityMach-flag [Off]
OnOffsensitivityalpha-flag [Off]
OnOffsensitivitybeta-flag [Off]
OnOffsensitivityfsi-flag [Off]
OnOffadaptiveepsfsi-flag [Off]
Problem.Type = SteadyAeroelasticSensitivityAnalysis).
OnLinearSolver.Eps is dynamically reset (internally) to the convergence tolerance achieved in AERO-S
by the residual of the structural sensitivities with respect to the
specified variables — in other words, the residual associated with the
solution of the algebraic system
of equations governing the computed sensitivities of the fluid state
vector is required to converge to the same precision attained at the
current coupled fluid-structure
iteration by the residual of the structural sensitivities.
OffLinearSolver.Eps is automatically set (internally) once for all to the convergence tolerance specified
in the input file of AERO-S for the residual of the structural sensitivities with respect to the specified variables.
epsfd-real [1e-5]
LinearSolver:
| Object: AcousticPressure |
In an aeroacoustic analysis (Problem.Type = Aeroacoustic), AERO-F
performs the frequency-domain computation using the Kirchhoff integral
method
of: (a) the complex-valued acoustic pressure in the far-field at
user-specified locations, and (b) the complex-valued far-field pattern
of the acoustic pressure field
(see Probes.Pressure). The parameters of such an aeroacoustic analysis are set in this object whose syntax is:
under AcousticPressure{
KirchhoffSurface = kirchhoffsurface-id;
NyquistMaximum = nyquistmaximum-int;
Increment = increment-int;
}
with
kirchhoffsurface-id [---]:
CylindricalSphericalnyquistmaximum-int [2]:
Spherical,
this parameter specifies the highest degree of the spherical harmonics
to be used for approximating the trace of the pressure field and its
normal
derivative on the "Kirchhoff" surface. In this case, each expansion in
spherical harmonics of these two quantities will contain a total of (nyquistmaximum-int + 1)
terms.
Otherwise, this parameter specifies the highest degree of the
trigonometric polynomials to be used for approximating the trace of the
pressure field and its normal
derivative on the "Kirchhoff" surface. In this other case, each
expansion in trigonometric polynomials will contain nyquistmaximum-int terms.
increment-int [10]:
Probes.FarfieldPattern).
In this case, ((increment-int/2)+1) latitudinal directions are also considered and therefore the far-field pattern is evaluated and outputted at
((increment-int/2)+1)*increment-int points uniformly distributed in spherical coordinates.
| Object: AdaptiveMeshRefinement |
The AdpativeMeshRefinement object can be used to
turn on mesh adaptation (refinement and optional coarsening) using the
compatible edge patch bisection method, and specify
the algorithmic parameters of this adaptation. Its syntax is:
under AdaptiveMeshRefinement {
Mode = mode-str;
Frequency = frequency-int;
Eps = eps-real;
UseUnsteadyStrategy = useunsteadystrategy-int;
MinimumElementVolume = minimumelementvolume-real;
MaximumAspectRatio = maximumaspectratio-real;
BalancingCriterion = balancingcriterion-str;
BalancingFrequency = balancingfrequency-int;
BalancingThreshold = balancingthreshold-real;
BalancingWeight = balancingweight-int;
ImbalanceTolerance = imbalancetolerance-real;
ItrFactor = itrfactor-real;
UniformityThreshold = uniformitythreshold-real;
PredictorCorrector = predictorcorrector-str;
NumCorrectorIts = numcorrectorits-int;
PredictorCorrectorCoarsening = predictorcorrectorcoarsening-str;
BisectionStrategy = bisectionstrategy-str;
CoarseningPolicy = coarseningpolicy-str;
InterpolationBasis = interpolationbasis-str;
InitialRefinementTagType = initialrefinementtagtype-int;
MaximumNumberOfElements = maximumnumberofelements-int;
MaximumRefinementIterations = maximumrefinementiterations-int;
MaximumCoarseningIterations = maximumcoarseningiterations-int;
TruncationThreshold = truncationthreshold-int;
RecomputeWallDistance = recomputewalldistance-int;
RecomputeDeltaPlus = recomputedeltaplus-int;
CoarseningDomainEps = coarseningdomaineps-real;
FindStatus = findstatus-str;
Refine3D = refine3D-int;
under SelectionCriterion [criterion-id]{ ... }
under RefinementDomain { ... }
}
with
mode-str [Dimensional]:
This parameter can be used to "overrule" the setting of Problem.Mode as far as the members of this object are concerned, as follows:
DimensionalProblem.Mode is set to Dimensional.
NonDimensionalProblem.Mode is set to Dimensional.
frequency-int [1]:
eps-real [1.0 e-6]:
useunsteadystrategy-int [0]:
minimumelementvolume-real [1.0 e-16]:
Isotropic however, the element volume is not
constrained. The default value of this parameter is machine precision (usually of the order of 1.0 e-16).
maximumaspectratio-real [-1.0]:
Isotropic, the aspect ratio is not constrained. Its default value is -1.
balancingcriterion-str [Regular]:
Turns on load balancing following mesh adaptation according to the specified criterion, which must be one of the following criteria:
RegularNodeMaxMinRatioElemMaxMinRatiobalancingfrequency-int [0]:
Regular (see above). This parameter must be greater than or equal to the mesh
adaptation frequency (see frequency-int above). Setting it to 0 or a negative value turns off load balancing. Its default value is 0.
balancingthreshold-real [2.0]:
NodeMaxMinRatio or ElemMaxMinRatio. Setting this parameter to 0 or a negative
value turns off load balancing. Its default value is 2.
balancingweight-int [0.0]:
imbalancetolerance-real [1.05]:
itrfactor-real [1.0 e3]:
uniformitythreshold-real [0.05]:
predictorcorrector-str [Off]:
This flag specifies whether to turn off or on the
predictor-corrector strategy for mesh adaptation during unsteady
simulations. This strategy allows each mesh/solution adaptation
performed in
the time-window
, where
= frequency-int, to be repeated one or several times, as specified in numcorrectorits-int
(see below). The first mesh/solution adaptation
performed in this time-window is referred to here as the “predictor
iteration”. All subsequent repeats of this adaptation are referred to as
the “corrector iterations”. When this strategy is turned
on, the entire state of the flow simulation (i.e., whatever would be
required to perform a simulation restart) at time
is stored before the predictor iteration is performed. At the end of
the
predictor iteration and all corrector iterations except the last one,
mesh adaptation is performed in the usual way, the stored state is
expanded onto the adapted mesh and the mesh/solution adaptation
process is repeated by restarting the flow computation from time
using the expanded flow state and the current adapted mesh. Currently, this strategy is not supported for any fluid-structure
simulation involving the coupling of AERO-F with AERO-F. Hence, the possible settings of this flag are:
OnOffnumcorrectorits-int [1]:
predictorcorrectorcoarsening-str [Off]:
Specifies turning on or off mesh coarsening at each predictor-corrector iteration (see predictorcorrector-str above):
OnOffbisectionstrategy-str [Arbitrary]:
Specifies turning on or off the isotropic bisection strategy for mesh refinement:
ArbitraryIsotropiccoarseningpolicy-str [Partial]:
Specifies the mesh coarsening policy:
PartialArbitrary (it has been observed that this is not the case
when bisectionstrategy-str is set to Isotropic). However, it is computationally fast. This is the default value of this option.
CompleteReferenceCell (see below).
interpolationbasis-str [CurrentEdge]:
Specifies the method to be used to populate the state at the new nodes created during a mesh refinement step:
CurrentEdgeReferenceCellinitialrefinementtagtype-int [0]:
Isotropic (see above).
When restarting from a previous simulation performed using mesh adaptation with the isotropic
refinement strategy, the refinement tag type (
) of each element of the initial mesh is read from the binary input files generated by AERO-F during that simulation. Otherwise,
this parameter can be used to specify a tag value in the range
, as follows (see also Note 3). If the initial mesh is post-processed using the PreRefine.py script, the
value of this parameter should be set to 2. If it is post-processed using the PreNum.py or Simplex.py script, it should be set to 0, which is the default value.
Alternatively, if this parameter is set to -1, the tag value
is set to 0 and the ordering of the vertices is sorted ascendingly with respect to the global node numbering.
maximumnumberofelements-int [1.0 e9 or 1.0 e12]:
maximumrefinementiterations-int []:
Isotropic,
whose parallel implementation is accomplished using an iterative
approach. In this case, it specifies the
maximum number of refinement iterations at each refinement level. There
is no default value for this parameter, i.e. by default, the refinement
iterations will continue until all selected edges have
been refined.
maximumcoarseningiterations-int []:
Isotropic.
In this case, it specifies the maximum number of coarsening iterations
at each coarsening level.
It has no default value, i.e. by default, the coarsening iterations will
continue until all selected vertices have been coarsened.
truncationthreshold-int [1.0 e7]:
recomputewalldistance-int [1]:
SelectionCriterion.PreRefine) and linearly interpolated subsequently. However, if this
parameter is set to 2, the distance to the wall is always recomputed using the algorithm specified in WallDistanceMethod.
recomputedeltaplus-int [0]:
) used in the boundary proximity criterion. If this parameter is set
to 0
(which is the default value), the aforementioned maximum edge length is
computed only at the start of each mesh adaptation step – that is,
before the first level of mesh adaptation is
performed within this step: this can significantly overestimate the edge
length when pre-refining a coarse mesh. If this parameter is set to 1,
the recomputation is performed before each mesh
adaptation level.
coarseningdomaineps-real [0]:
of the computational fluid domain of radius
, this parameter
can be used to allow mesh coarsening to be performed in the spherical
region of the computational fluid domain centered at the same point as
but of radius
+ coarseningdomaineps-real. Hence, this setting can be used
to avoid the occurrence of un-coarsened computational cells near the
boundary of the region where mesh refinement is performed when
the isotropic bisection strategy is activated.
findstatus-str [FloodFill]:
Specifies the method use to find the nodal statuses (i.e. active/real or inactive/ghost), following a mesh adaptation step:
FloodFillUpdaterefine3D-int [1]:
-component. This option can be used for refinement of quasi-two-dimensional "slice" meshes comprising
a single layer of elements in the
-direction. However, the results achieved in this case may be
unsatisfactory for two reasons. First, when used with the Arbitrary
bisection strategy, the resulting
mesh quality tends to be poor, particularly if the initial mesh is
coarse. Second, it applies only to the selection criteria specified
using SelectionCriterion. Hence, it does not apply to the
selection associated with the isotropic mesh refinement strategy, in which case refinement in the
-direction will invariably occur. When this parameter is set to 1, which is its default value, all
edges may be selected for refinement regardless of their
-component.
SelectionCriterion:
RefinementDomain:
Notes:
Problem.Framework = BodyFitted) either with or without mesh motion, the embedded framework
(Problem.Framework = Embedded), the embedded ALE framework (Problem.Framework = EmbeddedALE), and the following problem types:
Problem.Type = Steady, Problem.Type = Unsteady, Problem.Type = SteadyAeroelastic, Problem.Type = UnsteadyAeroelastic,
Problem.Type = Forced, Problem.Type = Accelerated, Problem.Type = AcceleratedUnsteady, Problem.Type = SteadyAeroThermal,
Problem.Type = UnsteadyAeroThermal, Problem.Type = SteadySensitivityAnalysis, and Problem.Type = SteadyAeroelasticSensitivityAnalysis;
Arbitrary bisection strategy, it is recommended that at least one of the parameters minimumelementvolume-real
or maximumaspectratio-real be appropriately specified; the parameter SelectionCriterion.minimumedgelength-real alone does not entirely eliminate the possibility of element degeneration
in the context of the Arbitrary bisection strategy;
Isotropic bisection strategy, the
initial (unrefined) mesh must satisfy a particular eligibility
criterion: an arbitrary unstructured tetrahedral mesh can be
pre-processed
to obtain a mesh which satisfies this criterion using the python script PreNum.py or PreRefine.py which are provided in the “scripts” directory of the source code repository;
an alternative python script Simplex.py is also provided
and can be used to obtain an eligible uniform tetrahedral mesh for a
rectangular prism volume; when a mesh is post-processed using the
PreRefine.py script, the value of initialrefinementtagtype-int should be set to 2; when PreNum.py or Simplex.py is used for this purpose, it is not necessary to specify
initialrefinementtagtype-int as the default value 0 is appropriate in these cases;
sower.sh and xp2exo.sh are provided in the
"scripts" directory of the source code repository to demonstrate how to post-process a series of binary output files using SOWER and xp2exo, respectively;
Problem.Mode = Dimensional), the parameters specified using the members of this object are treated as dimensional (when applicable),
unless mode-str is set to NonDimensional;
MaxNodePreAMR of the hidden object RestartParameters associated with Restart is specified to the highest node ID number of the mesh pre-refinement; the latter information can
be found at two possible locations: in the mesh data output file specified in the setting of Restart.MeshData (or its default value DEFAULT.MSH) for the steady-state simulation
and generated by AERO-F during that simulation; and/or in the file specified in the setting of Restart.RestartData (or its default value DEFAULT.MSH)
for the steady-state simulation and generated by AERO-F during that simulation;
| Object: SelectionCriterion |
The object SelectionCriterion should be used to
specify a mesh refinement (edge splitting) criterion among multiple
available criteria. Because these are independent of each other,
multiple criteria can be specified simultaneously by repeating this
object in the same ASCII Input Command Data file with a different
integer identifier criterionIDtag-int and different
parameters characterizing the criterion of interest. In this case, mesh
adaptation is performed if/wherever either of the selected criteria is
satisfied.
The syntax of this object is:
under SelectionCriterion [criterionIDtag-int] {
Type = type-str;
MinimumEdgeLength = minimumedgelength-real;
MaximumEdgeLength = maximumedgelength-real;
PreRefine = prerefine-str;
PreCoarsen = precoarsen-str;
NumLevels = numlevels-int;
NumCoarseningLevels = numcoarseninglevels-int;
CoarseningDomainEps = coarseningdomaineps-real;
under HessianCriterion { ... }
under FlowVariableCriterion { ... }
under WallProximityCriterion { ... }
under FixesCriterion { ... }
under GapCriterion { ... }
under APrioriCriterion { ... }
under RefinementDomain { ... }
}
with
type-str [None]:
Specifies the governing criterion for selecting the mesh edges to be refined:
NoneHessianFlowVariableWallProximityAPrioriFixesGapminimumedgelength-real [1.0 e-16]:
maximumedgelength-real [1.79769e+308]:
prerefine-str [Off]:
This parameter is potentially relevant for any setting of type-str (see above) – although for some settings such as type-str = Hessian
and a uniform flow initial condition
it is inconsequential. It requests an adaptive mesh pre-refinement –
that is, adaptive mesh refinement at the beginning of the simulation,
before any computation is performed. It can be set as follows:
OffOnprecoarsen-str [Off]:
Activates or de-activates coarsening during initial pre-refinement of the mesh at the commencement of the simulation (i.e.
):
OffOnWallProximityCriterion.PreferredDirection).
numlevels-int [1]:
numcoarseninglevels-int [-1]:
coarseningdomaineps-real [0]:
of the computational fluid domain of radius
, this parameter
can be used to allow mesh coarsening to be performed in the spherical
region of the computational fluid domain centered at the same point as
but of radius
+ SelectionCriterion[criterionIDtag-int].CoarseningDomainEps. Hence, this setting can be used to avoid the occurrence of un-coarsened computational cells near the boundary of the
region where mesh refinement is performed when the isotropic bisection strategy is activated.
HessianCriterion:
FlowVariableCriterion:
WallProximityCriterion:
FixesCriterion:
APrioriCriterion:
GapCriterion:
RefinementDomain:
| Object: HessianCriterion |
The object HessianCriterion can be used to specify the parameters of the Hessian-based criterion for performing mesh adaptation.
Its syntax is:
under HessianCriterion {
Threshold = threshold-real;
CoarseningThreshold = coarseningthreshold-real;
HessianConstruction = hessianconstruction-str;
SensorType = sensortype-str;
}
with
threshold-real [1.0]:
coarseningthreshold-real [0.0]:
hessianconstruction-str [LeastSquares]: Specifies the method to be used to construct the Hessian of the Hessian-based mesh adaptation criterion:
LeastSquaressensortype-str [Velocity]:
Specifies the scalar quantity of interest whose Hessian is to be used to formulate the Hessian-based mesh adaptation criterion:
VelocityPressureDensityVorticityNuTilde
of the one-equation Spalart-Allmaras turbulence model (see Appendix 3).
MachLevelSet| Object: FlowVariableCriterion |
The object FlowVariableCriterion can be used to specify the parameters of the flow-variable-based criterion for performing mesh adaptation.
Its syntax is:
under FlowVariableCriterion {
Threshold = threshold-real;
CoarseningThreshold = coarseningthreshold-real;
ThresholdType = thresholdtype-str;
SensorType = sensortype-str;
}
with
threshold-real [1.0]:
coarseningthreshold-real [0.0]:
thresholdtype-str [UpperBound]:
sensortype-str [Velocity]:
Specifies the scalar quantity of interest whose value is to be used to formulate the value-based mesh adaptation criterion:
VelocityPressureDensityVorticity| Object: WallProximityCriterion |
The object WallProximityCriterion is essential when using an embedded boundary method (Problem.Framework = Embedded or EmbeddedALE) for viscous CFD computations in order
to enable AERO-F to track the boundary layer in this case and
keep it at all times well resolved. It can also be used for inviscid CFD
computations and for flow computations
on body-fitted grids (Problem.Framework = BodyFitted).
Specifically, this object can be used to specify a mesh
adaptation criterion based on the distance to the wall. In this case, an
edge is selected for refinement when its length is less than a
refinement
threshold that is automatically determined based on: (a) the edge's
distance to the wall, (b) the parameters specified in this object and in
particular the maximum desired value of the dimensionless
distance of the first layer of grid points to the wall (
). An edge is selected for coarsening if its length is greater than a
coarsening threshold that is automatically determined in a
similar fashion to the refinement threshold. For further details on the
mesh adaptation strategy associated with this mesh adaptation criterion
and the nomenclature and notation used in the
description of this object, see R. Borker, S. Grimberg, P. Avery,
C. Farhat and J. Rabinovitch, “An Adaptive Mesh Refinement Concept for
Viscous Fluid-Structure Computations Using Eulerian
Vertex-Based Finite Volume Methods,” AIAA-2018-1072, AIAA SciTech 2018,
Kissimmee, Florida, January 8-12 (2018).
Note that this mesh adaptation criterion can be used with or without other selection criteria (see AdaptiveMeshRefinement and SelectionCriterion).
If used in the context of the body-fitted framework (Problem.Framework = BodyFitted), an input file containing the distance to the wall must be provided in the
same way as when using the Spalart-Allmaras turbulence model (see SpalartAllmaras) in the context of this framework.
The syntax of this object is:
under WallProximityCriterion {
OuterZone_d = outerzone_d-real;
OuterZone_H = outerzone_H-real;
InnerZone_D = innerzone_D-str;
InnerZone_H = innerzone_H-real;
DeltaPlus = deltaplus-real;
PreRefineInnerZone = prerefineinnerzone-str;
EdgeLengthMinMaxRatio = edgelengthminmaxratio-real;
OuterZoneMultiplier = outerzonemultiplier-real;
CoarseningZoneScaleFactor = coarseningzonescalefactor-real;
MinimumEdgeLengthTreatment = minimumedgelengthtreatment-str;
ActivateFirstLayer = activatefirstlayer-str;
FirstLayerActivationThreshold = firstlayeractivationthreshold-real;
PreferredDirection = preferreddirection-str;
OuterZone_r = outerzone_r-real;
InnerZone_R = innerzone_R-real;
}
with
outerzone_d-real [1.0]:
outerzone_H-real [1.0]:
innerzone_D-real [1.0]:
innerzone_H-real [1.0]:
Problem.Framework = BodyFitted).
Problem.Framework = Embedded or EmbeddedALE).
Problem.Framework = Embedded or EmbeddedALE), when deltaplus-real is not specified.
) in any viscous flow simulation using the embedded boundary framework (Problem.Framework = Embedded or EmbeddedALE), when deltaplus-real
is specified and prerefineinnerzone-str is set to EdgeLength.
deltaplus-real [-1.0]:
Problem.Framework = Embedded or EmbeddedALE), this parameter specifies the maximum value of the dimensionless distance of the first
layer of grid points to the wall, in the inner refinement zone (
). Its default value is -1. If the specified value is not positive, innerzone_H-real is used to determine the
maximum edge length in the inner refinement zone and therefore should be specified (see innerzone_H-real above).
prerefineinnerzone-str [Auto]:
Specifies how to compute the maximum edge length in the inner refinement zone during pre-refinement (i.e. refinement at time
) for viscous flow simulations using the embedded boundary framework
(Problem.Framework = Embedded or EmbeddedALE), when a positive value is specified for deltaplus-real:
Auto
is the Reynolds number.
EdgeLengthDeltaPlus
). Typically, this option is not appropriate for pre-refinement when
the initial fluid state is that of a uniform flow. Also, note that when
pre-refining from
a coarse mesh using this option, the setting recomputedeltaplus-int = 1 is recommended.
edgelengthminmaxratio-real [0.4]:
outerzonemultiplier-real [infinity]:
coarseningzonescalefactor-real [1.0]:
minimumedgelengthtreatment-str [Smoothed]:
When the minimum permissible size of an edge of the CFD mesh specified in SelectionCriterion.MinimumEdgeLength is greater than the edge length needed to keep the maximum value of the
dimensionless distance of the first layer of grid points to the wall (
) below the value specified in deltaplus-real (see above), two things happen: (1) a conflict arises between the
consequences of the settings of the parameters SelectionCriterion.MinimumEdgeLength and deltaplus-real, and (2) the mesh adaptation process that would have happened in the absence
of this conflict is disturbed. Regarding the first consequence, the user should note that the setting of SelectionCriterion.MinimumEdgeLength always takes precedence over that of
deltaplus-real. In other words, the maximum value of
will exceed in this case the maximum value specified in deltaplus-real. Regarding the second consequence, the user can use
this parameter to choose between two alternative treatments for adjusting the otherwise disturbed mesh adaptation process:
SmoothedSelectionCriterion.MinimumEdgeLength, the
value of innerzone_H-real is set to 2*SelectionCriterion.MinimumEdgeLength
and in each refinement zone the mesh adaptation thresholds are computed
using this value. The mesh adaptation
process delivers in this case a CFD mesh that differs everywhere from
that it would have delivered in the absence of the aforementioned
conflict of settings.
ClippedSelectionCriterion.MinimumEdgeLength, the refinement threshold is set to
2*SelectionCriterion.MinimumEdgeLength.
The mesh adaptation process delivers in this case a CFD mesh that
differs from that it would have delivered in the absence of the
aforementioned conflict of settings only in the region where the edge
sizes needed to meet the deltaplus-real criterion are smaller than the minimum size imposed by the setting chosen
for SelectionCriterion.MinimumEdgeLength.
Note that even for flow computations where deltaplus-real is irrelevant or not specified, a conflict may exist between the user-specified values of
SelectionCriterion.MinimumEdgeLength and innerzone_H-real. Although it is somewhat trivial for such conflicts to be resolved by the user,
the minimum edge length treatments described above can also be used for this purpose.
activatefirstlayer-str [On]:
This parameter can be used to control the refinement of the first layer of occluded (or inactive, ghost) edges adjacent to an embedded surface. Regardless of the setting of this parameter, all occluded layers other than the first layer are not refined. Refining the first occluded layer can be beneficial when the embedded wall is a moving wall; in this case, a longer refinement period (simulation time between two refinement steps) is feasible
OnWallDistanceGradient (see below),
WallDistanceMethod.ComputeInactive should be set to Yes.
Offfirstlayeractivationthreshold-real [infinity]:
On
(see above), an edge in the
first layer of the inactive zone is activated for the purpose of
refinement only if the distance to the wall from each of its vertices is
less than the specified value of this threshold parameter whose
default value is infinity (i.e. all first-layer occluded edges are
selected for refinement, regardless of their vertices' distances to the
wall).
preferreddirection-str [None]:
This parameter can be used to introduce some anisotropy into the mesh refinement process, by specifying a preferred direction and computing the length of an edge to be used in this criterion as that of the projection of the edge along this direction.
NoneWallDistanceGradientOn, WallDistanceMethod.ComputeInactive should be set to Yes.
outerzone_r-real [0.0]:
innerzone_R-real [0.0]:
| Object: FixesCriterion |
The object FixesCriterion can be used to specify the
parameters of the repair-based mesh adaptation criterion. This
criterion can be used as a light-weight alternative to the wall
proximity
criterion (see WallProximityCriterion)
for refining a region of the CFD mesh that is adjacent to a very
slender embedded obstacle such as a cable or a suspension line, as
described in
D. Huang, P. Avery and C. Farhat, "An Embedded Boundary Approach
for Resolving the Contribution of Cable Subsystems to Fully Coupled
Fluid-Structure Interaction,"
International Journal for Numerical Methods in Engineering, https://doi.org/10.1002/nme.6322.
The syntax of this object is:
under FixesCriterion {
DoublyIntersectedEdgeFix = doublyintersectededgefix-str;
DoublyIntersectedEdgeThreshold = doublyintersectededgethreshold-real;
FaceID = faceid-int;
}
with
doublyintersectededgefix-str [Off]:
This parameter can be used to activate the selection for refinement of all edges that are doubly or more intersected (i.e. intersected at least twice by the embedded surface).
OffOndoublyintersectededgethreshold-real [1.0e-4]:
On.
faceid-int [-1]:
| Object: APrioriCriterion |
The object APrioriCriterion can be used to:
SelectionCriterion.MinimumEdgeLength and
SelectionCriterion.NumLevels), and the potential restriction to a specific region of the computational fluid domain expressed in RefinementDomain.
Its syntax is:
under APrioriCriterion {
GradX = gradx-real;
GradY = grady-real;
GradZ = gradz-real;
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
}
with
gradx-real [0.0]:
-component of the gradient of the local minimum edge length function. This function is defined at a point
as:
minimumedgelength-real + | gradx-real*(
- x0-real) | + | grady-real*(
- y0-real) | + | gradz-real*(
- z0-real) |,
where minimumedgelength-real is the value specified in SelectionCriterion.MinimumEdgeLength. The default value is 0.0.
grady-real [0.0]:
-component of the gradient of the local minimum edge length function. The default value is 0.0.
gradz-real [0.0]:
-component of the gradient of the local minimum edge length function. The default value is 0.0.
x0-real [0.0]:
-component of the reference point used to compute the local minimum edge length function. The default value is 0.0.
y0-real [0.0]:
-component of the reference point used to compute the local minimum edge length function. The default value is 0.0.
z0-real [0.0]:
-component of the reference point used to compute the local minimum edge length function. The default value is 0.0.
| Object: GapCriterion |
The object GapCriterion can be used to specify a
refinement selection criterion based on the gap between two embedded
wall boundary surfaces. This criterion operates in a similar fashion to
the wall proximity criterion (see WallProximityCriterion) except that it utilizes the minimum gap – which is a sum of two distances to a wall – instead of the minimum wall distance.
Also, it does not currently support a capability such as that of WallProximityCriterion.DeltaPlus.
The syntax of this object is:
under GapCriterion {
OuterZone_d = outerzone_d-real;
OuterZone_H = outerzone_H-real;
InnerZone_D = innerzone_D-str;
InnerZone_H = innerzone_H-real;
EdgeLengthMinMaxRatio = edgelengthminmaxratio-real;
OuterZoneMultiplier = outerzonemultiplier-real;
MinimumEdgeLengthTreatment = minimumedgelengthtreatment-str;
ActivateFirstLayer = activatefirstlayer-str;
FirstLayerActivationThreshold = firstlayeractivationthreshold-real;
}
with
outerzone_d-real [1.0]:
outerzone_H-real [1.0]:
innerzone_D-real [1.0]:
innerzone_H-real [1.0]:
edgelengthminmaxratio-real [0.4]:
outerzonemultiplier-real [infinity]:
minimumedgelengthtreatment-str [Smoothed]:
When the minimum permissible size of an edge of the CFD mesh specified in SelectionCriterion.MinimumEdgeLength is greater than the edge length needed to keep the maximum value of the
dimensionless distance of the first layer of grid points to the wall (
) below the value specified in deltaplus-real (see above), two things happen: (1) a conflict arises between the
consequences of the settings of the parameters SelectionCriterion.MinimumEdgeLength and deltaplus-real, and (2) the mesh adaptation process that would have happened in the absence
of this conflict is disturbed. Regarding the first consequence, the user should note that the setting of SelectionCriterion.MinimumEdgeLength always takes precedence over that of
deltaplus-real. In other words, the maximum value of
will exceed in this case the maximum value specified in deltaplus-real. Regarding the second consequence, the user can use
this parameter to choose between two alternative treatments for adjusting the otherwise disturbed mesh adaptation process:
SmoothedSelectionCriterion.MinimumEdgeLength, the
value of innerzone_H-real is set to 2*SelectionCriterion.MinimumEdgeLength
and in each refinement zone the mesh adaptation thresholds are computed
using this value. The mesh adaptation
process delivers in this case a CFD mesh that differs everywhere from
that it would have delivered in the absence of the aforementioned
conflict of settings.
ClippedSelectionCriterion.MinimumEdgeLength, the refinement threshold is set to
2*SelectionCriterion.MinimumEdgeLength.
The mesh adaptation process delivers in this case a CFD mesh that
differs from that it would have delivered in the absence of the
aforementioned conflict of settings only in the region where the edge
sizes needed to meet the deltaplus-real criterion are smaller than the minimum size imposed by the setting chosen
for SelectionCriterion.MinimumEdgeLength.
activatefirstlayer-str [On]:
This parameter can be used to control the refinement of the first layer of occluded (or inactive, ghost) edges adjacent to an embedded surface. Regardless of the setting of this parameter, all occluded layers other than the first layer are not refined. Refining the first occluded layer can be beneficial when the embedded wall is a moving wall; in this case, a longer refinement period (simulation time between two refinement steps) is feasible
OnOfffirstlayeractivationthreshold-real [infinity]:
On
(see above), an edge in the
first layer of the inactive zone is activated for the purpose of
refinement only if the gap at each of its vertices is less than the
specified value of this threshold parameter whose
default value is infinity (i.e. all first-layer occluded edges are
selected for refinement, regardless of their vertices' gaps).
| Object: RefinementDomain |
The object RefinementDomain can be used to restrict
all or some forms of mesh adaptation to a specific region of the
computational fluid domain, as follows:
The syntax of this object is:
under RefinementDomain{
Type = type-str;
under Sphere { ... }
under Box { ... }
under Cylinder { ... }
under Capsule { ... }
under Cone { ... }
}
with
type-str [None]:
Restricts all forms of mesh adaptation or a specific form associated with a specific criterion (see SelectionCriterion) to a specific region of the computational fluid domain:
NoneSphereBoxCylinderCapsuleCone| Object: Sphere |
The object Sphere defines a spherical zone of the computational fluid domain to which all or some forms of mesh adaptation can be restricted.
Its syntax is:
under Sphere {
Center_x = center_x-real;
Center_y = center_y-real;
Center_z = center_z-real;
Radius = radius-real;
}
with
center_x-real [0.0]:
-coordinate of the center of the sphere.
center_y-real [0.0]:
-coordinate of the center of the sphere.
center_z-real [0.0]:
-coordinate of the center of the sphere.
radius-real [—]:
| Object: Box |
The object Box defines a boxy zone of the computational fluid domain to which all or some forms of mesh adaptation can be restricted.
Its syntax is:
under Box {
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
X1 = x1-real;
Y1 = y1-real;
Z1 = z1-real;
}
with
x0-real [0.0]:
-coordinate of the lower left corner of the box.
y0-real [0.0]:
-coordinate of the lower left corner of the box.
z0-real [0.0]:
-coordinate of the lower left corner of the box.
x1-real [0.0]:
-coordinate of the upper right corner of the box with x1-real > x0-real.
y1-real [0.0]:
-coordinate of the upper right corner of the box with y1-real > y0-real.
z1-real [0.0]:
-coordinate of the upper right corner of the box with z1-real > z0-real.
| Object: Cylinder |
The object Cylinder defines a cylindrical zone of the computational fluid domain to which all or some forms of mesh adaptation can be restricted.
Its syntax is:
under Cylinder {
Point_x = point_x-real;
Point_y = point_y-real;
Point_z = point_z-real;
Normal_x = normal_x_real;
Normal_y = normal_y_real;
Normal_z = normal_z_real;
Radius = radius_real;
Length = length-real;
}
with
point_x-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
point_y-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
point_z-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
normal_x-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
normal_y-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
normal_z-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
radius-real [—]:
length-real [—]:
| Object: Capsule |
The object Capsule defines a capsule-shaped zone –
that is, a three-dimensional zone delimited by a cylinder and two
hemispheres – of the computational fluid domain to which all or some
forms
of mesh adaptation can be restricted. Its syntax is:
under Capsule {
Point_x = point_x-real;
Point_y = point_y-real;
Point_z = point_z-real;
Normal_x = normal_x_real;
Normal_y = normal_y_real;
Normal_z = normal_z_real;
Radius = radius_real;
Length = length-real;
}
with
point_x-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
point_y-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
point_z-real [0.0]:
-coordinate of the center of the circle located at the first end of the cylinder.
normal_x-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
normal_y-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
normal_z-real [0.0]:
-component of the unit normal to the circle located at the first end
of the cylinder, pointing in the direction of the second end along the
axis of the cylinder.
radius-real [—]:
length-real [—]:
| Object: Cone |
The object Cone defines a conical zone of the
computational fluid domain to which all or some forms of mesh adaptation
can be restricted. Its syntax is:
under Cone {
X0 = x0-real;
Y0 = y0-real;
Z0 = z0-real;
Radius0 = radius0-real;
X1 = x1-real;
Y1 = y1-real;
Z1 = z1-real;
Radius1 = radius1-real;
}
with
x0-real [0.0]:
-coordinate of the center of the cone's base.
y0-real [0.0]:
-coordinate of the center of the cone's base.
z0-real [0.0]:
-coordinate of the center of the cone's base.
radius0-real [0.0]:
x1-real [0.0]:
-coordinate of the cone's vertex, or in the case of a truncated cone, of the center of the top circle.
y1-real [0.0]:
-coordinate of the cone's vertex, or in the case of a truncated cone, of the center of the top circle.
z1-real [0.0]:
-coordinate of the cone's vertex, or in the case of a truncated cone, of the center of the top circle.
radius1-real [0.0]:
First, the computation of a steady-state inviscid flow around a three-dimensional wing is examplified.
/* ----------------------------
File ``wing.steady''
---------------------------- */
under Problem {
Type = Steady;
Mode = NonDimensional;
}
under Input {
Prefix = "data/";
Connectivity = "wing.con";
Geometry = "wing.msh";
Decomposition = "wing.dec";
CpuMap = "wing.4cpu";
}
under Output {
under Postpro {
Prefix = "result/";
Residual = "wing.res";
Force = "wing.lift";
Mach = "wing.mach";
Frequency = 0;
}
under Restart {
Prefix = "result/";
Solution = "wing.sol";
RestartData = "wing.rst";
Frequency = 0;
}
}
Equations.Type = Euler;
under BoundaryConditions {
under Inlet {
Mach = 0.5;
Alpha = 0.0;
Beta = 0.0;
}
}
under Space {
under NavierStokes {
Reconstruction = Linear;
Gradient = Galerkin;
}
}
under Time {
MaxIts = 10;
Eps = 1.e-6;
Cfl0 = 10.0;
CflMax = 1.e99;
Ser = 1.0;
under Implicit {
MatrixVectorProduct = FiniteDifference;
under Newton {
MaxIts = 1;
under LinearSolver {
under NavierStokes {
Type = Gmres;
MaxIts = 30;
KrylovVectors = 30;
Eps = 0.05;
Preconditioner.Type = Ras;
}
}
}
}
}
Next, the aeroelastic computation of an inviscid flow around a three-dimensional wing is examplified.
/* ----------------------------
File ``wing.aero''
---------------------------- */
Problem.Type = UnsteadyAeroelastic;
under Input {
Prefix = "data/";
Connectivity = "wing.con";
Geometry = "wing.msh";
Decomposition = "wing.dec";
CpuMap = "wing.4cpu";
Matcher = "wing.match";
Solution = "pingpong/wing.sol";
Position = "pingpong/wing.pos";
}
under Output {
under Postpro {
Prefix = "result/";
Force = "wing.lift";
Mach = "wing.mach";
Displacement = "wing.disp";
Frequency = 10;
}
under Restart {
Prefix = "result/";
Solution = "wing.sol";
Position = "wing.pos";
RestartData = "wing.rst";
}
}
Equations.Type = Euler;
under BoundaryConditions {
under Inlet {
Mach = 0.901;
Alpha = 0.0;
Beta = 0.0;
Density = 1.117e-7;
Pressure = 11.0;
}
}
under Space {
under NavierStokes {
Reconstruction = Linear;
Limiter = VanAlbada;
Gradient = Galerkin;
Beta = 0.3333333;
}
}
under Time {
Cfl0 = 1.e5;
CflMax = 1.e5;
under Implicit {
Type = ThreePointBackwardDifference;
MatrixVectorProduct = Approximate;
under Newton {
MaxIts = 2;
Eps = 0.01;
under LinearSolver {
under NavierStokes {
Type = Gmres;
MaxIts = 30;
KrylovVectors = 30;
Eps = 0.01;
Preconditioner.Type = Ras;
}
}
}
}
}
under MeshMotion {
Type = Basic;
Element = TorsionalSprings;
under Newton {
MaxIts = 1;
under LinearSolver {
Type = Cg;
MaxIts = 50;
Eps = 0.001;
Preconditioner.Type = Jacobi;
}
}
}
Next, the full-order linearized aeroelastic computation of an inviscid flow around a three-dimensional wing is examplified.
/* ----------------------------
File ``wing.full''
---------------------------- */
under Problem {
Type = UnsteadyLinearized;
Mode = Dimensional;
}
under Input {
Prefix = "InputFiles.d/";
Connectivity = "pp.con";
Geometry = "pp.msh";
Decomposition = "pp.dec";
CpuMap = "pp.4cpu";
Perturbed = "agard.m0.678.deformed.lsq.steady.sol";
Solution = "agard.m0.678.nodisp.lsq.steady.sol";
Position = "agard.undisp.pp.pos";
}
under Output {
under Postpro {
Prefix = "";
Force = "liftfull4.m0.678.p34_5";
Frequency = 1;
}
}
under Linearized{
StrModes = "modes1.pp";
NumStrModes = 4;
ExcMode = 1;
Domain = Time;
Amplification = 0.1;
Eps = 1e-4;
}
under Equations {
Type = Euler;
}
under BoundaryConditions {
under Inlet {
Mach = 0.678;
Density = 2.338e-7;
Pressure = 34.5;
Alpha = 0.0;
Beta = 0.0;
}
}
under Space {
under NavierStokes {
Reconstruction = Linear;
Limiter = VanAlbada;
Gradient = LeastSquares;
Beta = 0.33333333;
}
}
under Time {
Type = Implicit;
TypeTimeStep = Global;
TimeStep = .001;
MaxIts = 200;
Eps = 1.e-8;
under Implicit {
MatrixVectorProduct = Exact;
under Newton {
MaxIts = 1;
Eps = 0.0001;
under LinearSolver {
under NavierStokes {
Type = Gmres;
MaxIts = 100;
KrylovVectors = 100;
Eps = 0.0001;
Output = "stdout";
under Preconditioner { Type = Ras; Fill = 0; }
}
}
}
}
}
Next, the construction of a POD basis in the frequency-domain for a three-dimensional wing operating at M = 0.901 is examplified.
/* ----------------------------
File ``wing.pod''
---------------------------- */
under Problem {
Type = PODConstruction;
Mode = Dimensional;
}
under Input {
Prefix = "InputFiles.d/";
Connectivity = "pp.con";
Geometry = "pp.msh";
Decomposition = "pp.dec";
CpuMap = "pp.4cpu";
Solution = "agard.m0.901.nodisp.lsq.steady.sol";
Position = "agard.undisp.pp.pos";
}
under Output {
under Postpro {
Prefix = "";
Frequency = 0;
PodData = "PodData.d/podVecs4.freq0.901.df5e3.150snap.400pod";
}
}
under Linearized{
StrModes = "modes1.pp";
NumStrModes = 4;
Domain = Frequency;
FreqStep = 0.005;
Eps = 1e-5;
NumPOD = 400;
}
under Equations {
Type = Euler;
}
under BoundaryConditions {
under Inlet {
Mach = 0.901;
Density = 1.117e-7;
Pressure = 5.0;
Alpha = 0.0;
Beta = 0.0;
}
}
under Space {
under NavierStokes {
Reconstruction = Linear;
Gradient = LeastSquares;
Beta = 0.33333333;
}
}
under Time {
Type = Implicit;
TypeTimeStep = Global;
TimeStep = 4.0e-5;
MaxIts = 151;
Eps = 1.e-8;
under Implicit {
MatrixVectorProduct = Exact;
under Newton {
MaxIts = 1;
Eps = 1e-8;
under LinearSolver {
under NavierStokes {
Type = Gmres;
MaxIts = 100;
KrylovVectors = 100;
Eps = 0.0001;
Output = "stdout";
under Preconditioner { Type = Ras; Fill = 0; }
}
}
}
}
}
Next, a ROM aeroelastic computation of a wing operating at M = 0.800 is examplified.
/* ----------------------------
File ``wing.rom''
---------------------------- */
under Problem {
Type = ROMAeroelastic;
Mode = Dimensional;
}
under Input {
Prefix = "InputFiles.d/";
Connectivity = "pp.con";
Geometry = "pp.msh";
Decomposition = "pp.dec";
CpuMap = "pp.4cpu";
Perturbed = "agard.m0.800.deformed.lsq.steady.sol";
Solution = "agard.m0.800.nodisp.lsq.steady.sol";
Position = "agard.undisp.pp.pos";
PodData = "../PodData.d/podVecs4.m0.800.dt4e5.225snap.300pod";
}
under Output {
under Postpro {
Prefix = "";
Force = "liftrom.freq800.30snap.50of100pod.p7";
Frequency = 1;
}
}
under Linearized{
StrModes = "modes1.pp";
NumStrModes = 4;
ExcMode = 1;
Amplification = 0.1;
Eps = 1e-4;
NumPOD = 300;
}
under Equations {
Type = Euler;
}
under BoundaryConditions {
under Inlet {
Mach = 0.800;
Density = 1.117e-7;
Pressure = 10.0;
Alpha = 0.0;
Beta = 0.0;
}
}
under Space {
under NavierStokes {
Flux = Roe;
Reconstruction = Linear;
Gradient = LeastSquares;
Beta = 0.33333333;
}
}
under Time {
Type = Implicit;
TypeTimeStep = Global;
TimeStep = .001;
MaxIts = 500;
Eps = 1.e-8;
under Implicit {
MatrixVectorProduct = Exact;
under Newton {
MaxIts = 1;
Eps = 1e-8;
under LinearSolver {
under NavierStokes {
Type = Gmres;
MaxIts = 100;
KrylovVectors = 100;
Eps = 0.0001;
under Preconditioner { Type = Ras; Fill = 0; }
}
}
}
}
}
AERO-F has no graphical interface. It is a command-line driven program that reads a problem definition file once at the beginning of the processing. This problem definition file is a regular ASCII text file (see Object oriented input).
Calls for simulations involving only AERO-F look like
mpirun [host_name] nb_cpus aerof filename
where host_name is the (optional) name of the computer on which the job is executed, number_cpus is the number of processes allocated for the job, and filename is the ASCII file containing the problem definition.
Aeroelastic and aerothermal simulations require the interaction of AERO-F with a structural code. If AERO-S or AERO-H is used for that purpose, aeroelastic and aerothermal calls look like
mpirun [fluid_host_name] fluid_nb_cpus aerof fluid_filename :
[struct_host_name] struct_nb_cpus aeros struct_filename
If the above syntax is not supported by your MPI implementation, the same simulation can be started with
mpirun [host_name] total_nb_cpus loader fluid_nb_cpus aerof.so fluid_filename ,
struct_nb_cpus aeros.so struct_filename
A steady-state flow computation is selected by setting Problem.Type = Steady. By default,
the computation starts from a uniform flowfield around the undeformed configuration. To modify
this behavior, Input.Solution and Input.Position must be set to some appropriate values.
The other critical variables to watch for are the total number of time-steps
(Time.MaxIts), the spatial residual relative decrease (Time.Eps),
and the inital and maximum CFL numbers (Time.Cfl0 and Time.CflMax).
As a first-order time-integrator is always selected for steady-state computations, only one Newton
iteration (Time.Implicit.Newton.MaxIts) should be performed at every time-step.
An unsteady flow computation is selected by setting Problem.Type = Unsteady. By default,
the computation starts from a uniform flowfield around the undeformed configuration. To modify
this behavior, Input.Solution and Input.Position must be set to some appropriate values.
The other critical variables to watch for are the time-step (Time.TimeStep)
or alternatively the CFL strategy, the maximum number of time-steps and the maximum time
(Time.MaxIts and Time.MaxTime), and the type of time-integrator
(Time.Implicit.Type). At least two Newton iterations
(Time.Implicit.Newton.MaxIts) should be performed at every time-step to preserve
the accuracy of the time-integrator.
A forced oscillations computation is selected by setting Problem.Type = Forced. In addition
to what applies to an unsteady flow computation (see ExampleUnsteadyFlowComputation), the
critical variables to watch for are the forced oscillations parameters (Forced)
and the mesh motion algorithm (MeshMotion). During such a flow computation, the shape
of the obstacle shape is varied between the final shape (Forced.Position) and its
symmetric position with respect to the original shape. Note that the computation starts
from the original shape. The latter that can be generated by a “ping-pong” step
(see ExampleUnsteadyAeroelasticComputation).
Aeroelastic computations using AERO-F require the additional usage of a structure solver that is equipped to communicate with this flow solver, and a fluid-structure preprocessor that is capable of generating the data structures necessary for exchanging aeroelastic data between the fluid and structural codes. If AERO-S and MATCHER are used for that purpose, an aeroelastic simulation is usually (but not necessarily) carried out in the following three steps:
MeshMotion)
and the position of the deformed obstacle (Output.Restart.Position) that will be
needed for the next two steps;
Problem.Type to UnsteadyAeroelastic.
The critical variables to watch for are the initial flow solution and node
position (Input.Solution and Input.Position) obtained from the
two previous steps, the time-step (Time.TimeStep) or alternatively
the CFL strategy, the type of time-integrator (Time.Implicit.Type),
and the mesh motion algorithm (MeshMotion). Note that to avoid subcycling
(i.e. performing several fluid time-steps during one structural time-step), the CFL number
(Time.Cfl0 and Time.CflMax) needs to be set to a large
value (e.g. 1.e5);
The linearized fluid code may be used for a variety of purposes including the following:
All of the above running modes require performing first one or several simulations aimed at generating
a reference equilibrium solution. Next, in order to perform any of the computations listed above,
the following parameters must be specified under Problem (see Problem) and
Linearized (see Linearized).
Type in Problem to
UnsteadyLinearized or UnsteadyLinearizedAeroelastic. In the latter case,
represent the structure by a set of modes (currently) by setting appropriately Linearized.StrModes
and Linearized.NumStrModes, and excite it by setting appropriately Linearized.ExcMode
and Linearized.Amplification. Do not forget to input the information needed for initializing
the flow perturbation by specifying Input.Perturbed.
Type in Problem to
PODConstruction. The construction process requires sources of excitation.
Currently, these sources are modal impulses of the structure. For this reason,
set appropriately Linearized.StrModes, Linearized.NumStrModes,
Linearized.Amplification, and Time.MaxIts. The latter parameter
specifies half the number of snapshots per modal impulse.
The POD basis may be constructed in either the time- or frequency-domain;
this is specified in Domain (see Linearized). To accelerate the construction
of a POD basis in the frequency-domain, consider the Pade reconstruction strategy defined
under the Pade object. Do not forget to specify
in NumPOD, the number of desired POD basis vectors.
To interpolate a POD basis, set Type in Problem to PODInterpolation. Use Input.PODData
to specify the two sets of POD basis vectors and their respective Mach numbers to
be used in the interpolation process (see Input); also, input the desired Mach interpolation
point. Specify the desired POD output file in Postpro.PODData.
Type in Problem to
ROM and Domain in Linearized to Time, and set Input.PODData and
Linearized.NumPOD appropriately. Set Time.MaxIts
to zero if you want AERO-FL to exit after constructing
the ROM, or to a non zero value if you desire a time-domain simulation
using this ROM. Do not forget to specify the desired output file in Postpro.ROM.
Type in Problem to
ROMAeroelastic and Domain in Linearized to Time, and
set Input.PODData and Linearized.NumPOD appropriately.
Represent the structure by a set of modes by specifying also appropriately Linearized.StrModes
and Linearized.NumStrModes.
Set Time.MaxIts to zero if you want AERO-FL to exit after constructing
the aeroelastic ROM, or to a non zero value if you desire a time-domain simulation using this aeroelastic ROM.
Do not forget to specify the desired output file in Postpro.ROM.
Type in Problem to
ROM. Also, specify the POD basis using Input.PODData and Linearized.NumPOD.
Do not forget to input the information needed for initializing
the flow perturbation by specifying Input.Perturbed.
Type in Problem to
ROMAeroelastic. Specify the POD basis using Input.PODData and Linearized.NumPOD.
Do not forget to input the information needed for initializing the flow perturbation by specifying Input.Perturbed.
Represent the structure by a set of modes (currently) by setting appropriately Linearized.StrModes
and Linearized.NumStrModes, and excite it by setting appropriately Linearized.ExcMode
and Linearized.Amplification.
For all flow simulations, AERO-F can restart from a previous run that was
successfully completed. AERO-F can also restart from a previous run that was for
some reason interrupted (i.e. computer crash) if the value of
Output.Restart.Frequency was different from zero.
In both cases, in order to restart AERO-F, the variables Input.Solution,
Input.Position (if applicable) and Input.RestartData need to
be set to their appropriate values (i.e. the ones used in the object Output.Restart
of the previously completed or interrupted run). For example, an initial input file used
for an aeroelastic simulation should contain
under Output {
under Restart {
Solution = "wing.sol";
Position = "wing.pos";
RestartData = "wing.rst";
}
}
To restart the aeroelastic simulation, the second input file should contain
under Input {
Solution = "wing.sol";
Position = "wing.pos";
RestartData = "wing.rst";
}
and can also contain in Output.Restart the information necessary to save
future restart data.
Notes:
Output.Postpro) since the
restart appends the data to the original (ASCII and binary) files;
Output.Postpro.Frequency
nor to change the name of the output files nor to add other output files (in Output.Postpro)
when restarting a simulation. This restriction does not exist if the variable
Input.RestartData is not set. In that case, the run restarts from a previous
solution Input.Solution and a previous position Input.Position
(if applicable) but the time-step number and the physical time are reset to zero;
Output.Restart.Frequency
must be specified in the AERO-S input file in the case of an aeroelastic or aerothermal
simulation with the AERO-S code;
Input.RestartData should not be used when starting
an aeroelastic simulation from a pre-computed steady-state of the flow-field
because it de-synchronizes in this case AERO-F and the structural
solver.
Currently, AERO-FL cannot run in restart mode.
kill -USR1 pid
where pid is the process identification number of one of the AERO-F processes. Once the kill signal is sent to AERO-F, it exits at the next time-iteration.
sower -fluid -split -con <connectivity file>
-mesh <mesh file prefix> -result <ASCII file> -ascii
-output <binary file prefix>
Problem object.
AERO-FL can output in ASCII format either a fluid ROM, or an aeroelastic ROM. This appendix characterizes the ROM in each case and describes the format of the corresponding output.
In this case, the outputted ROM matrix is an
POD-based, real, full matrix
whose exploitation
may require first its dimensionalization as follows
and
denote the free-stream pressure and density, respectively. In other words,
does not contain information about the altitude whereas
does.
The adjusted ROM matrix
governs the reduced perturbed equations of equilibrium
denotes the perturbation of the reduced-order fluid state vector about a steady-state operating point and
denotes a time-derivative.
Note that whether the descriptor or non descriptor form of the governing
higher-dimensional (“full order”) fluid equations have been reduced
(see Time and Linearized), the adjusted ROM matrix
governs in both cases the non descriptor form of the reduced order fluid equations.
The matrices
and
can be exploited at least in the following ways:
can be used for a time-domain simulation assuming that
an appropritate initial condition is specified.
However, providing an initial condition for the above equation is not an intuitive task (unlike a modal coordinate system
in the case of a structure). A straightforward approach for constructing a meaningful initial condition consists of
gaining access to the POD basis that was used for computing
and projecting a meaningful full order initial condition onto this reduced basis.
can be used to investigate the stability of the fluid system.
If all the real parts of its eigenvalues are positive, the fluid system is stable for all free-stream densities and pressures.
The output format of
is as follows:
0 (line 1)
(line 2)
(line 3)
of
(line
+ 1)
For example, the following MATLAB code can read in this case the ROM output file:
M=readRom('filename');
function [N] = readRom(fn)
line1 = dlmread(fn,' ',[0 0 0 1]);
N=dlmread(fn, ' ', [1 0 line1(1)+2*line1(2) line1(1)+2*line1(2)-1]);
In this case, the outputted ROM consists of the following
block, real matrix
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
which does not depend on the free-stream pressure and density — and therefore on altitude — and whose exploitation may first require its dimensionalization as follows
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
where
and
denote the free-stream pressure and density at the desired altitude, respectively,
and
is as in the previous case the
, real fluid ROM matrix
is the corresponding
, real, dimensional, adjusted fluid ROM matrix
and
are two
fluid/structure coupling matrices
is the matrix of natural mode shapes of the dry structure (in this case, without the rotational degrees of freedom),
is the vector of aerodynamic loads and
is the state vector of the fluid system
is an
load transfer matrix
is an
diagonal matrix storing the squares of the structural natural circular frequencies
is the
identity matrix
The adjusted ROM matrix
governs the non descriptor form of the perturbed dimensional equations of equilibrium
where
|
|
|
|
|
is the aeroelastic state vector consisting of the perturbation of the reduced-order fluid state vector about an operating point, the structural modal displacements, and structural modal velocities.
The blocks of
govern the following system of coupled, fluid/structure equations
represent both a derivative with respect to time.
The matrix
can be exploited at least in the following ways:
determines the stability of the aeroelastic system for the flight conditions
defined by
and
. Altitude sweeps are simply performed by changing appropriately the values of the free-stream
pressure and density in
.
may be used to form the above system of equations. The aeroelastic ROM can then be
used for time-domain simulations provided that initial conditions are specified for
and
(see related comment in section describing the fluid ROM output).
The output format of
is as follows:
(line 1)
(line 2)
(line 3)
of
(line
)
For example, the following MATLAB code can read in this case the ROM output file — that is,
the matrix
:
[N,nf,ns]=readRom('filename');
function [N,nf,ns] = readRom(fn)
line1 = dlmread(fn,' ',[0 0 0 1]);
endOfN = line1(1)+2*line1(2);
endCol = line1(1)+2*line1(2)-1;
N=dlmread(fn, ' ', [1 0 endOfN endCol]);
nf = line1(1);
ns = line1(2);
Furthermore, the following MATLAB code can read the ROM output file
and output the dimensionalized matrix
for specified values of
and
:
[N,nf,ns] = readRom('filename',p_inf,rho_inf)
function [N,nf,ns] = readRom(fn,p_inf,rho_inf)
line1 = dlmread(fn,' ',[0 0 0 1]);
endOfN = line1(1)+2*line1(2);
endCol = line1(1)+2*line1(2)-1;
Ntilde = dlmread(fn, ' ', [1 0 endOfN endCol]);
nf = line1(1);
ns = line1(2);
N(1:nf,1:nf) = sqrt(p_inf/rho_inf) ...
*Ntilde(1:nf,1:nf);
N(1:nf,nf+1:nf+ns) = Ntilde(1:nf,nf+1:nf+ns);
N(1:nf,nf+ns+1:nf+2*ns) = sqrt(p_inf/rho_inf) ...
*Ntilde(1:nf,nf+ns+1:nf+2*ns);
N(nf+1:nf+ns,1:nf) = p_inf*Ntilde(nf+1:nf+ns,1:nf);
N(nf+1:nf+ns,nf+1:nf+2*ns) = Ntilde(nf+1:nf+ns,nf+1:nf+2*ns);
N(nf+ns+1:nf+2*ns,:) = Ntilde(nf+ns+1:nf+2*ns,:);
Detached Eddy Simulation (DES) is a hybrid (zonal) turbulence model that employs a RANS type closure close to the wall (in the boundary-layer) and a LES type closure in the detached shear layer. This approach surmounts the expensive problem of having to resolve the thin boundary-layer by traditional LES means. Hence, DES aims at achieving best of both worlds, by making use of the reliability of the RANS model in predicting boundary-layer separation points and by resolving the effect of the separated shear layers using a subgrid scale LES model.

In AERO-F, a DES procedure based on the the Spalart-Allmaras (SA) one-equation model is implemented. DES uses a mesh dependent
length scale to switch between the RANS and LES domains. More specifically, the length scale (
)
of the DES model is computed in each tetrahedron
as
is the shortest distance to the wall from the centroid of tetrahedron
,
is the DES model constant and
is an edge of tetrahedron
. The value of the model constant
is set to
after calibration with homogeneous isotropic turbulence. If
then the RANS model is active and if
then the LES model is active.
Hence, when creating a mesh for DES simulations, one has to adhere to the following details:
) and spanwise (
)
lengths are of the order of the boundary-layer thickness so that
always switches
to
in the boundary-layer. For unstructured meshes, this
means that one has to choose a surface mesh size of at least the boundary-layer thickness. For the leading edge,
one has usually to choose a smaller mesh size to capture the geometry accurately but this size has to
be at least the boundary-layer thickness at the leading edge. Again, this would ensure that
in the leading edge boundary-layer. At the trailing edge, one again has to use smaller mesh sizes to correctly capture
the geometry,
but in this case one does not need to worry about the mesh requirements of DES.
This is because, once the flow has separated,
the RANS model does not help in modeling the physics of the detached boundary layer any longer.
Introduce (extrude) prism layers to fill up the boundary-layer thickness. The vertical spacing of each prism
layer can be based on any mesh growth scheme chosen by the user. This is because the vertical spacing
of each prism layer is always smaller than the boundary-layer thickness and hence the switch always selects
in the boundary-layer.
,
where, L is the integral length scale (usually the body length) and
is the Reynolds number based on L.
It is a good practice to use a mesh size of around
near the wall and gradually increase the
size to about
in the far-field.
Sparse grid tabulations are used in AERO-F to accelerate the solution of multi-phase
flow problems involving a medium modeled by a complex and computationally intensive Equation Of State (EOS),
such as the JWL EOS, using the FiniteVolumeWithExactTwoPhaseRiemann method which requires the computation
of the solutions of local, one-dimensional two-phase Riemann problems (see MultiPhase).
The tabulation of certain quantities related to this computation allows to bypass
some of the more costly computational steps. While such tabulations may not be readily available to the user,
they can be generated in a sparse grid format using AERO-F. This appendix provides
instructions to set up the input file needed by AERO-F to generate
these tabulations, as well as guidelines for how to choose their appropriate parameters.
General Settings
In order to tabulate some data in sparse grid format, the user must specify
Problem.Type = SparseGridGeneration;
as well as the name filename-str of the output file(s) that will contain the tabulated data
Output.PostPro.SparseGrid = filename-str;
Data to Tabulate
Currently, AERO-F can tabulate quantities related to the computation of the solution of
a one-dimensional two-phase Riemann problem between a JWL EOS and a perfect or stiffened gas EOS only.
These quantities are the Riemann invariants of the JWL EOS, and the solutions of one-dimensional, two-phase Riemann problems.
The first option (Riemann invariants) is recommended because it is fast, easy, and has demonstrated superior potential for
accelerating the computation of multi-phase flow problems involving the JWL EOS using the numerical method FiniteVolumeWithExactTwoPhaseRiemann.
In order to tabulate the Riemann invariants of the JWL EOS, the user must specify in the AERO-F ASCII input file:
under Equations {
under FluidModel[0] {
Fluid = JWL;
under JWLModel { ... }
}
}
under MultiPhase{
RiemannComputation = TabulationRiemannInvariant;
}
where JWLModel specifies the parameters of the considered JWL EOS.
In order to tabulate the solutions of one-dimensional two-phase Riemann problems between a JWL EOS and a perfect or stiffened gas EOS, the user must specify in the AERO-F ASCII input file:
under Equations {
under FluidModel[0] {
Fluid = StiffenedGas;
under GasModel { ... }
}
under FluidModel[1] {
Fluid = JWL;
under JWLModel { ... }
}
}
under MultiPhase{
RiemannComputation = TabulationRiemannProblem;
}
where GasModel and JWLModel specify the parameters of the two considered EOSs.
How to Tabulate Riemann Invariants of the JWL EOS
The Riemann invariant of the JWL EOS is the scalar quantity
which depends on two variables:
the density
, and the mathematical entropy
is pressure and the other parameters of the JWL EOS are user-specified in FluidModel[0].
Therefore, in this case the user must specify in the object SparseGrid: (a) that the sparse grid will have two input variables and one output variable, and (b) the lower and upper bounds of each input variable as follows:
NumberOfInputs = 2;
NumberOfOutputs = 1;
Input1Minimum = in1min-real;
Input1Maximum = in1max-real;
Input2Minimum = in2min-real;
Input2Maximum = in2max-real;
The first input variable is the density and the second one is the
entropy. Determining the optimal choices of the bounds of the input
variables requires predicting accurately
the ranges of these variables spanned during the exploitation of the
tabulation and therefore is a difficult task. For this reason, these
bounds can be only estimated.
The density of a highly explosive gas modeled by the
JWL EOS usually has a maximum value given by the initial conditions of
the application problems and a minimum value that is several orders
of magnitude lower. For example, in SI units, the density can easily
vary between 0 and 1630
.
Estimates of the bounds for entropy are not straightforward to obtain.
With pressure values varying in a typical application problem between an
initial value often of the order of several
s and a value that is several orders of magnitude lower than
that of the surrounding fluid, the computed entropies associated with
such density and pressure values can span several orders of magnitude.
Instead, it is easier to compute
the value of the entropy corresponding to the values of the density and
pressure of the JWL fluid associated with typical initial conditions of
application problems of interest and tabulate around this value.
This is generally sufficient as a highly explosive gas usually undergoes
an expansion during which the entropy
does not vary significantly.
The choice of the numerical parameters for the construction of a sparse grid depends on several factors such as the data to be tabulated, the user-desired accuracy, and the maximum size of the grid (which can determine how long it takes to generate and exploit a sparse grid). As such, several tabulation iterations may be needed to obtain the desired result.
AERO-F refines a sparse grid tabulation until one of three stopping criteria is reached: the desired relative accuracy is satisfied, the desired absolute accuracy is satisfied, or the maximum number of points in the tabulation is exceeded. For the tabulation of Riemann invariants of the JWL EOS, the user can start with
MaximumNumberOfPoints = 10000;
RelativeAccuracy = 1.0e-3;
AbsoluteAccuracy = 0.1;
The errors are estimated a posteriori at the last created points of the sparse grid. The relative errors are computed with respect to the difference between the largest and smallest computed values of the data to be tabulated. A minimum number of points for the tabulation can also be specified. For example,
MinimumNumberOfPoints = 100;
Since the data to be tabulated may not exhibit the same variations for different input variables, the user is given the possibility to refine the sparse grid along the input variable for which the errors decrease the most. This is done by specifying the degree of dimensional adaptivity which can take any real value between 0 and 1. A degree of 0 corresponds to a uniform refinement in each input variable, while a degree of 1 corresponds to a refinement based solely on the errors. For the tabulation of Riemann invariants of the JWL EOS, the user is advised to use values above 0.7 but below 1.0:
DegreeDimAdapt = 0.7;
To enable parallel processing during the tabulation and accelerate the exploitation of this tabulation during subsequent AERO-F computations, the user can request the tabulation of a single domain in several complementary sparse grids characterized by the same numerical parameters. For this purpose, the user can specify a uniform splitting of the domain of each input variable in a number of subdomains that depends directly on its range (the larger is the range, the more attractive it becomes to decompose it). For example, the user can specify:
NumberOfDomains1 = 3;
NumberOfDomains2 = 2;
which leads to six complementary sparse grids characterized by the same numerical parameters.
How to Tabulate Solutions of One-Dimensional Two-Thase JWL-Gas Riemann Problems
The solution of a one-dimensional, two-phase Riemann problem at the interface between two initial states depends on
the initial values of the density and pressure, and the jump in the initial velocities.
This solution can be reconstructed from the knowledge of the constant density states on both sides
of the material interface. Therefore, in this case the user must specify in the object SparseGrid: (a) that the sparse grid will have five input and two output variables
(which are the constant density states at the left and right of the material interface),
and (b) the lower and upper bounds of each input variable as follows:
NumberOfInputs = 5;
NumberOfOutputs = 2;
Input1Minimum = in1min-real;
Input1Maximum = in1max-real;
Input2Minimum = in2min-real;
Input2Maximum = in2max-real;
Input3Minimum = in3min-real;
Input3Maximum = in3max-real;
Input4Minimum = in4min-real;
Input4Maximum = in4max-real;
Input5Minimum = in5min-real;
Input5Maximum = in5max-real;
The first and second input variables are the density and pressure in the perfect or stiffened gas, the third and fourth are the density and pressure in the medium modeled by the JWL EOS, and the fifth input variable is the difference between the velocity of the perfect/stiffened gas and that of the JWL medium. Specifying the bounds of each input variable is not easy, especially since some initial states lead to vacuum state solutions. For this purpose, the user needs to estimate a priori these bounds. To this effect, it is useful to note that the velocity jump at the material interface can be either positive or negative, and that in general it is not very large unless the jump of the initial velocities is large, or a strong shock wave interacts with the material interface.
The choice of the numerical parameters characterizing the sparse grid are specified in the same manner as in the previous case. In particular, the same values as before can be used for the minimum number of points and desired accuracies:
MinimumNumberOfPoints = 100;
RelativeAccuracy = 1.0e-3;
AbsoluteAccuracy = 0.1;
It is recommended to choose a maximum number of points of at least 100,000 and a degree of dimensional adaptivity of 0.9. It is also particularly useful to consider splitting the domain of each input variable. It is strongly advised to split the domain of the velocity difference input variable so that a sparse grid avoids as much as possible tabulating both vacuum state and non-vacuum state solutions. Therefore, even if the values of the velocity difference do not span several orders of magnitude, it is still recommended to split the domain of this input variable.
The derivative at a fluid equilibrium point — that is, a steady-state fluid sate vector
—
of an aerodynamic-related quantity
with respect to a flow or shape parameter
can be written as
where:
can be computed analytically or by finite differencing, depending on the
complexity of the dependence of
on
.
can be determined from the stationarity at
of the equation
of dynamic equilibrium of the fluid
where
denotes the system of nonlinear equations governing the steady-state fluid sate vector
,
and
denotes the vector of nodal positions of the fluid mesh if Problem.Framework = BodyFitted,
or the nodal positions of the discrete embedded surface if Problem.Framework = Embedded or EmbeddedALE.
In either case, the differentiation of the above equation at
leads to the characterization of the gradient
as the solution of the linearized system of equations
where:
can be computed analytically or by finite differencing.
is non zero only when
is a shape parameter.
In the case of the body-fitted computational framework (Problem.Framework = BodyFitted),
is the “shape gradient” of the fluid mesh position
vector — or simply the mesh shape gradient — and can be divided into two components:
which is associated with the grid points of the
CFD mesh lying on the wall boundary
. This component is user-specified in Input.ShapeDerivative as it pertains directly to the shape of the obstacle
around/within which a flow is computed.
which is associated with the grid points located
in the interior
of the computational fluid domain. Using for the CFD mesh a deformation model based on a structural analogy (see MeshMotion),
this component is determined by solving the usual boundary-driven mesh deformation problem to obtain
where
is the pseudo stiffness matrix of the CFD mesh generated by the chosen of AERO-F mesh motion algorithm (see MeshMotion).
In the case of the embedded computational framework (Problem.Framework = Embedded or EmbeddedALE),
is
the shape gradient of the position vector of the embedded discrete
surface. For simplicity, it is also referred to here as the
wall-boundary shape derivative.
In summary, given a user-specified wall-boundary shape derivative
,
AERO-F computes the gradient at a fluid equilibrium point
of an aerodynamic-related quantity
with respect to a flow or shape parameter
as follows
where: