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
]:
Steady
Unsteady
AcceleratedUnsteady
SteadyAeroelastic
QSTATICS
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.
UnsteadyAeroelastic
AcceleratedUnsteadyAeroelastic
SteadyAeroThermal
UnsteadyAeroThermal
Forced
UnsteadyLinearized
Dimensional
when using this option.
UnsteadyLinearizedAeroelastic
Dimensional
.
PODConstruction
PODInterpolation
PODData
(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
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
Output.ROBInnerProduct
.
GAMConstruction
Dimensional
.
EigenAeroelastic
Dimensional
.
ROM
PODData
(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.
ROMAeroelastic
SteadySensitivityAnalysis
SteadyAeroelasticSensitivityAnalysis
SparseGridGeneration
1D
Aeroacoustic
Probes.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,
For a highly explosive gas modeled by the JWL equation of state,
are defined in LiquidModel .
(see ReferenceState).
Dimensional
prec-id [NonPreconditioned
]:
NonPreconditioned
LowMach
Implicit.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
]:
BodyFitted
Embedded
EmbeddedALE
Notes:
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 [""
]:
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
]:
Spherical
Cylindrical
Cartesian
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 [""
]:
hydrodynamicpressure-str [""
]:
deltapressure-str [""
]:
temperature-str [""
]:
tavtemperature-str [""
]:
tempnormder-str [""
]:
heatfluxus-str [""
]:
heatflux-str [""
]:
totalpressure-str [""
]:
tavtotalpressure-str [""
]:
liftanddrag-str [""
]:
tavliftanddrag-str [""
]:
inletdiskpressure-str [""
]:
inletdiskpressuredistortion-str [""
]:
inletdisktotalpressuredistortion-str [""
]:
vorticity-str [""
]:
tavvorticity-str [""
]:
nutilde-str [""
]:
k-str [""
]:
Name of the binary file that contains the sequence of nodal (turbulent kinetic energy in the model) values.
eps-str [""
]:
eddyviscosity-str [""
]:
deltaplus-str [""
]:
csdles-str [""
]:
tavcsdles-str [""
]:
csdvms-str [""
]:
tavcsdvms-str [""
]:
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 [""
]:
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 [ ]:
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 [""
]:
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 [" "
]]
yvelocityhessian-str [" "
]]
zvelocityhessian-str [" "
]]
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.
Off
On
postprocesssides-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
.
Global
Local
embeddedsurfacepressurecoefficient-str [--
]:
embeddedsurfaceskinfriction-str [--
]:
embeddedsurfacetemperature-str [--
]:
embeddedsurfacemach-str [--
]:
embeddedsurfaceheatflux-str [--
]:
embeddedsurfacedeltaplus-str [--
]:
embeddedsurfacedelta-str [--
]:
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 [""
]:
[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
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 [—]:
locationY-real [—]:
locationZ-real [—]:
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 [ ]:
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"
]:
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"
]:
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 [ ]:
True
Output.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).
False
Output.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
]:
True
Output.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.
False
computehf-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.
True
Output.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).
False
Output.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.
True
Output.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.
False
velocity-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.
Adiabatic
Isothermal
SurfaceData.Temperature
(see below).
Periodic
For 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
]:
False
False
, the vector specified above is interpreted as the normalized axis of rotation.
True
True
, 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
]:
Fluid
Porous
PorousMedium
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
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:
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
]:
betay-real [0.0
]:
betaz-real [0.0
]:
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
]:
Euler
NavierStokes
gravityx-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
]:
PerfectGas
StiffenedGas
Liquid
JWL
pressurecutoff-real [—]:
densitycutoff-real [—]:
nutildecutoff-real [—]:
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
]:
R-real [287.1
]:
psg-real [0.0
]:
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
]:
k2-real [7.15
]:
B-real [—]:
cp-real [—]:
referencepressure-real [—]:
referencedensity-real [—]:
burnable-flag [False];
True
False
Notes:
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
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]
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.
Constant
cst-real [1.458e-6
]:
temp-real [110.6
]:
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
]:
ConstantConductivity
ConstantPrandtl
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
]:
None
TurbulenceModel
LESModel
coefficient-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
]:
SpalartAllmaras
DES
KEpsilon
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
]:
SA
SAnoft2
SAfv3
SAneg
Problem.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
Original
Negative
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
]:
Iterative
NonIterative
ClosestPoint
CGAL
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
Off
frequencycontrolthreshold-real [10
]:
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
]:
Smagorinsky
Dynamic
VMS
DynamicVMS
WALE
Vreman
delta-id [Volume
]:
Volume
Side
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]:
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]:
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]:
Object: Dynamic |
The Dynamic
object specifies the parameters of Germano's dynamic LES model. Its syntax is:
under Dynamic{ under Clipping { ... } }
with
Clipping
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]:
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
]:
D1VMSLES
D2VMSLES
csprime-real [0.1]:
layer-integer [1]:
depth-integer1 [1]:
depth-integer2 [depth-integer1 + 1]:
Clipping
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
Primitive
HJWENO
Scalar
bandlevel-int [5
]:
5
is usually sufficient. However, for problems with complex material interfaces, higher values could be preferred.
method-str [GhostFluidForThePoor
]:
GhostFluidForThePoor
FiniteVolumeWithExactTwoPhaseRiemann
prec-id [NonPreconditioned
]:
This parameter is relevant only if method-str is set to Fiver
, and Problem.Prec
= LowMach
.
NonPreconditioned
LowMach
LowMach
.
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
NavierStokes.Reconstruction
= Linear
), the FIVER method delivers a
first-order global rate of convergence.
Real
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.
phasechange-str[Extrapolation
]:
FiniteVolumeWithExactTwoPhaseRiemann
.
It specifies a method for treating fluid-fluid phase changes.
RiemannSolution
Extrapolation
extrapolationorder-str [---
]:
Extrapolation
. It specifies the order of the extrapolation method.
FirstOrder
SecondOrder
The 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:
On
Off
riemanncomputation-str[SecondOrder
]:
FirstOrder
SecondOrder
TabulationRiemannInvariant
Problem.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.
TabulationRiemannProblem
Problem.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
]:
LevelSet
Fluid
InitialConditions
:
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.
On
FluidID
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.
Off
FluidID
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:
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
]:
External
Internal
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]:
k-real [—]:
Problem.Mode
is set to Dimensional
).
eps-real [—]:
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
]:
External
Internal
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 [—]:
Problem.Mode
is set to Dimensional
).
eps-real [—]:
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
]:
Adiabatic
Isothermal
Wall.Temperature
.
integration-id [ ]:
WallFunction
Wall.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
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:
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).
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
.
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).
Standard
ExactRiemannProblem
ExactRiemannProblem
:
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.
Roe
HLLE
HLLC
RotatedRiemann
RotatedRiemann.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
]:
Weak
Strong
Note:
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
.
DirectState
PorousWall
Problem.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.
Wall
Inlet
BoundaryConditions.Inlet
but those defined under the Inlet object under this object.
Outlet
BoundaryConditions.Outlet
but those defined under Outlet object under this object.
Outflow
inletvariableset-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:
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.
Roe
HLLE
HLLC
RotatedRiemann
reconstruction-id [Linear
]:
Constant
Linear
advectiveoperator-id [FiniteVolume
]:
FiniteVolume
Linear
.
In this case, all components of the numerical flux function are computed
using the reconstructed values of the primitive variables.
Galerkin
Linear
.
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
]:
None
VanAlbada
Barth
Venkatakrishnan
PressureSensor
gradient-id [LeastSquares
]:
LeastSquares
Galerkin
NonNodal
dissipation-id [SecondOrder
]:
SecondOrder
SixthOrder
beta-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]
:
Off
On
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
precomputelimitereps-real [0
]:
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 [ ]:
Roe
HLLE
Roe
by AERO-F.
HLLC
Roe
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.
Roe
HLLE
HLLC
flux2-id [Roe
]:
Specifies a flux scheme for the first minor upwinding direction.
Roe
HLLE
HLLC
flux3-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.
Roe
HLLE
HLLC
upwinddirection-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
VelocityAverage
TriangleSet
Input.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
]:
InletVelocity
CustomDirection
precompute-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.
Off
On
Auto
precomputeeps-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.
Approximate
Implicit.MatrixVectorProduct
.
Exact
Implicit.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
]:
Constant
Linear
advectiveoperator-id [FiniteVolume
]:
FiniteVolume
Linear
.
In this case, the flux function is computed using the reconstructed values of the primitive variables.
Galerkin
Linear
.
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
]:
None
VanAlbada
gradient-id [LeastSquares
]:
LeastSquares
Galerkin
NonNodal
dissipation-id [SecondOrder
]:
SecondOrder
SixthOrder
beta-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
]:
Linear
advectiveoperator-id [FiniteVolume
]:
FiniteVolume
Linear
.
In this case, the flux function is computed using the reconstructed values of the primitive variables.
Galerkin
Linear
.
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
]:
None
VanAlbada
Barth
Venkatakrishnan
PressureSensor
gradient-id [LeastSquares
]:
LeastSquares
Galerkin
NonNodal
dissipation-id [SecondOrder
]:
SecondOrder
SixthOrder
beta-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
];
StegerWarming
Ghidaglia
ModifiedGhidaglia
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
]:
None
X
Y
Z
Note:
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
NAlwaysOn
Off
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
NAlwaysOn
Off
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
NAlwaysOn
Off
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
]:
numlayers-int [0
]:
maxdistance-real [1.0
]:
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
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
];
Implicit
Explicit
prec-id [NonPreconditioned
]:
NonPreconditioned
LowMach
On
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.
On
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
.
Off
checklinearsolver-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.
On
LinearSolver.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
.
Off
checkvelocity-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
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
.
Off
checkpressure-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.
On
FluidModel.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
.
Off
checkdensity-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.
On
FluidModel.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
.
Off
thresholddeltapressure-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.
AnyPositiveIntegerNumber
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
.
0
thresholddeltadensity-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.
AnyPositiveIntegerNumber
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
.
0
maxtime-real [1.e99
]:
timestepadaptation-id [Cfl
]:
Cfl
ErrorEstimation
Implicit.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
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
]:
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
.
On
Newton.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.
Off
On
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
]:
BackwardEuler
Problem.Type
= 1D
),
or computations involving a ProgrammedBurn.
ThreePointBackwardDifference
Problem.Type
= 1D
),
or computations involving a ProgrammedBurn.
RungeKutta2
RungeKutta3
mvp-id [Approximate
]:
Approximate
Exact
Liquid
(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
.
FiniteDifference
fdorder-id [FirstOrder
]:
FirstOrder
SecondOrder
tmcoupling-id [Weak
]:
Weak
LinearSolver.NavierStokes
, and the turbulence model equations using LinearSolver.TurbulenceModel
(see LinearSolver).
Strong
LinearSolver.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.
Implicit
SemiImplicit
Notes:
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
];
RungeKutta4
RungeKutta2
ForwardEuler
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
Time.CheckSolution
,
Time.CheckLinearSolver
, Time.CheckVelocity
, Time.CheckPressure
,
Time.CheckDensity
, Time.ThresholdDeltaPressure
, Time.CardinalDeltaPressure
,
Time.ThresholdDeltaDensity
, or Time.CardinalDeltaDensity
.
Direction
Time.CheckSolution
,
Time.CheckLinearSolver
, Time.CheckVelocity
, Time.CheckPressure
,
Time.CheckDensity
, Time.ThresholdDeltaPressure
, Time.CardinalDeltaPressure
,
Time.ThresholdDeltaDensity
, or Time.CardinalDeltaDensity
.
DFT
Time.CheckSolution
, Time.CheckLinearSolver
, Time.CheckVelocity
,
Time.CheckPressure
,
Time.CheckDensity
, Time.ThresholdDeltaPressure
, Time.CardinalDeltaPressure
,
Time.ThresholdDeltaDensity
, or Time.CardinalDeltaDensity
.
Hybrid
CheckSolution
, 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
.
Fixed
Time.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
]:
Time.CheckSolution
or checklinearsolver-flag is turned on.
cfl2-real [0.0
]:
cflmax-real [10000.0
]:
ser-real [0.7
]:
anglegrowth-real [2.0
]:
Direction
.
anglezero-real [0.2
]:
Direction
. This coefficient should be chosen in the interval .
dfthistory-int [8
]:
DFT
.
frequencycutoff-int [3
]:
DFT
.
dftgrowth-real [1.4
]:
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.
On
AlwaysOn
AlwaysOn
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.
Off
epsrelres-real (or eps-real) [0.01
]:
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
]:
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
]:
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
]:
contractionfactor-real [0.5
]:
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
]:
Gmres
Richardson
Cg
Gcr
output-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
]:
Identity
Jacobi
Ras
fill-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:
Heaving
Heaving
object.
Pitching
Pitching
object.
Deforming
Deforming
object.
Velocity
frequency-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
.
Volume
Surface
ax-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
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
.
Volume
Surface
alpha0-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
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
.
Volume
Surface
position-str [""
]:
amplification-real [1.0
]:
Note:
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
]:
Mach
Velocity
Time
lawtype-id [ConstantAcceleration
]:
ConstantAcceleration
AccelerationX
, 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.
VelocityLaw
TimeVelocity
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
.
Last
Averaged
pressure-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
]:
Basic
Corotational
element-id [BallVertexSprings
]:
LinearFiniteElement
NonLinearFiniteElement
TorsionalSprings
BallVertexSprings
NonLinearBallVertex
stiffness-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
]:
NonRecursive
NonRecursive
(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.
Recursive
Recursive
,
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
.
NonPreconditioned
LowMach
interfacethickness-real [1e-8
]:
FRG
intersector is chosen instead, this parameter is ignored.
definitionactiveinactive-id [Node
]:
Node
ControlVolume
Surrogate
(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.
No
Yes
typehalfriemannproblem-id [Surrogate
]:
Surrogate
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.
Real
LocationHalfRiemannProblem
= 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:
Intersection
ClosestPoint
interfacelimiter-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:
On
Off
rnormal-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.
Structure
Fluid
structurenormal-id [ElementBased
]:
Structure
. It specifies a method for computing the normal to
an element of the embedded discrete surface.
ElementBased
NodeBased
ElementBased
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
]:
Extrapolation
ghostpointpopulation-id [Local
]:
Global
Local
Mirroring
extrapolationorder-id [---
]:
Extrapolation
(see above). It specifies the order of the
extrapolation method.
FirstOrder
SecondOrder
The default value of the parameter is FirstOrder
if typehalfriemannproblem-id = Surrogate
, and SecondOrder
if typehalfriemannproblem-id = Real
.
loadsalgorithm-id [Closest
]:
Closest
MovingLeastSquares
quadratureorder-int [3
]:
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.
FirstOrder
SecondOrder
NavierStokes.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
.
Weak
Strong
rotatedriemann-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
.
Off
On
averagedriemann-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
.
Off
On
firstlayerfix-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.
On
Off
boundarytreatmentturbulencevariables-str [No
]:
Yes
No
findfarfieldnode-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.
On
Off
fillscope-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]
dimension-int [3]
Specifies the dimension of the linear moving least squares approximation:
2
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
]:
Time
Problem.Type
is set to PODConstruction
(see Problem).
Frequency
ic-id [Displacement
]:
Displacement
PODConstruction
or to PODInterpolation
. See Problem.
Velocity
PODConstruction
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:
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
]
Direct
Adjoint
Analytical
).
sparseapproach-flag [Off
]
Off
On
mvp-id [Exact
]:
Exact
Problem.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
.
FiniteDifference
sensitivitycomputation-id [Analytical
]
Analytical
SemiAnalytical
FiniteDifference
sensitivitymesh-flag [Off
]
On
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.
Off
numshapeparameters-int [0
]
On
.
sensitivityMach-flag [Off
]
On
Off
sensitivityalpha-flag [Off
]
On
Off
sensitivitybeta-flag [Off
]
On
Off
sensitivityfsi-flag [Off
]
On
Off
adaptiveepsfsi-flag [Off
]
Problem.Type
= SteadyAeroelasticSensitivityAnalysis
).
On
LinearSolver.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.
Off
LinearSolver.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 [---
]:
Cylindrical
Spherical
nyquistmaximum-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:
Dimensional
Problem.Mode
is set to Dimensional
.
NonDimensional
Problem.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:
Regular
NodeMaxMinRatio
ElemMaxMinRatio
balancingfrequency-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:
On
Off
numcorrectorits-int [1]:
predictorcorrectorcoarsening-str [Off
]:
Specifies turning on or off mesh coarsening at each predictor-corrector iteration (see predictorcorrector-str above):
On
Off
bisectionstrategy-str [Arbitrary
]:
Specifies turning on or off the isotropic bisection strategy for mesh refinement:
Arbitrary
Isotropic
coarseningpolicy-str [Partial
]:
Specifies the mesh coarsening policy:
Partial
Arbitrary
(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.
Complete
ReferenceCell
(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:
CurrentEdge
ReferenceCell
initialrefinementtagtype-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]:
coarseningdomaineps-real [0]:
findstatus-str [FloodFill]:
Specifies the method use to find the nodal statuses (i.e. active/real or inactive/ghost), following a mesh adaptation step:
FloodFill
Update
refine3D-int [1]:
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:
None
Hessian
FlowVariable
WallProximity
APriori
Fixes
Gap
minimumedgelength-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:
Off
On
precoarsen-str [Off]:
Activates or de-activates coarsening during initial pre-refinement of the mesh at the commencement of the simulation (i.e. ):
Off
On
WallProximityCriterion.PreferredDirection
).
numlevels-int [1]:
numcoarseninglevels-int [-1]:
coarseningdomaineps-real [0]:
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:
LeastSquares
sensortype-str [Velocity]:
Specifies the scalar quantity of interest whose Hessian is to be used to formulate the Hessian-based mesh adaptation criterion:
Velocity
Pressure
Density
Vorticity
NuTilde
Mach
LevelSet
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:
Velocity
Pressure
Density
Vorticity
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.
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
EdgeLength
DeltaPlus
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:
Smoothed
SelectionCriterion.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.
Clipped
SelectionCriterion.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
On
WallDistanceGradient
(see below),
WallDistanceMethod.ComputeInactive
should be set to Yes
.
Off
firstlayeractivationthreshold-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.
None
WallDistanceGradient
On
, 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).
Off
On
doublyintersectededgethreshold-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]:
SelectionCriterion.MinimumEdgeLength
. The default value is 0.0.
grady-real [0.0]:
gradz-real [0.0]:
x0-real [0.0]:
y0-real [0.0]:
z0-real [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:
Smoothed
SelectionCriterion.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.
Clipped
SelectionCriterion.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
On
Off
firstlayeractivationthreshold-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:
None
Sphere
Box
Cylinder
Capsule
Cone
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]:
center_y-real [0.0]:
center_z-real [0.0]:
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
]:
y0-real [0.0
]:
z0-real [0.0
]:
x1-real [0.0
]:
y1-real [0.0
]:
z1-real [0.0
]:
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]:
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]:
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]:
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]:
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
]:
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
]:
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
The adjusted ROM matrix governs the reduced perturbed equations of equilibrium
The matrices and can be exploited at least in the following ways:
The output format of is as follows:
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
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
The matrix can be exploited at least in the following ways:
The output format of is as follows:
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
Hence, when creating a mesh for DES simulations, one has to adhere to the following details:
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.
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
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:
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:
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:
Input.ShapeDerivative
as it pertains directly to the shape of the obstacle
around/within which a flow is computed.
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: