Solver Configuration
Contents
4. Solver Configuration#
The Flow360.json file defines the solver settings used during the CFD solution. Most input quantities in the case configuration file (Flow360.json) are dimensionless. The conventions of nondimensional inputs in Flow360 are explained in detail at the nondimensional inputs knowledge base and the non-dimensionalization in Flow360 tutorial.
4.1. geometry
#
OPTIONAL
The geometry
section defines the geometric reference values. These parameters are used in the calculation of nondimensional loads reported (e.g., \(CL\), \(CMy\), etc.). Please refer to nondimensional inputs knowledge base and the non-dimensionalization in Flow360 tutorial for further information on how to define these.
Options |
Default |
Freestream |
---|---|---|
|
1.0 |
[float] The reference area of the geometry |
|
[0.0, 0.0, 0.0] |
[3-array(float)] The x, y, z moment center of the geometry in grid units |
|
[1.0, 1.0, 1.0] |
[3-array(float)] The x, y, z component-wise moment reference lengths |
Example
"geometry" : {
"refArea" : 45.604,
"momentCenter" : [0.0, 0.0, 0.0],
"momentLength" : [3.81, 3.81, 3.81]
}
4.2. freestream
#
REQUIRED
The freestream
section defines the flow conditions at the freestream. Please refer to nondimensional inputs knowledge base and the non-dimensionalization in Flow360 tutorial for further information on how to define these.
Options |
Default |
Description |
---|---|---|
|
Either |
[float] The Reynolds number, = \(\frac{\rho_\infty U_{ref} L_{gridUnit}}{\mu_\infty}\). Note that Flow360 differs from traditional calculations with the use of \(L_{gridUnit}\). |
|
Either |
[float] The freestream dynamic viscosity (nondimensional), = \(\frac{\mu_\infty}{\rho_\infty C_\infty L_{gridUnit}}\). |
|
REQUIRED |
[float] The Mach number, the ratio of freestream velocity to the speed of sound |
|
|
[float] The reference Mach number to compute nondimensional quantities, = \(U_{ref}/C_\infty\). |
|
REQUIRED |
[float] The freestream temperature in Kelvin. -1 means globally constant viscosity. |
|
REQUIRED |
[float] The angle of attack in degrees. |
|
REQUIRED |
[float] The side slip angle in degrees. |
|
DEPENDS |
[dict] Turbulence quantities used for initializing the flow field and specifying flow conditions at boundaries. See details below. |
User can specify turbulence conditions for the initial flow field and flow at boundaries via turbulenceQuantities
. The turbulence properties that can be specified are listed in the table below. All values are nondimensional. For valid specifications as well as the default values, please refer to knowledge base.
Note
Specifying turbulence quantities for the initial flow field and flow at boundaries is currently a beta feature and may be subject to change during the lifetime of the release.
Note
The turbulence properties below are also applicable to the inflow and outflow boundaries indicated in boundaries.
Options |
Range |
Description |
---|---|---|
|
>=0 |
The turbulent kinetic energy. Applicable to |
|
>=0 |
The turbulent specific dissipation rate. Applicable to |
|
>=0 |
The turbulent intensity is related to the turbulent kinetic energy by \(k = 1.5(U_{ref} * I)^2\) where \(k\) is the dimensional turbulent kinetic energy, \(U_{ref}\) is the reference velocity and \(I\) is the turbulent intensity. The value represents the actual magnitude of intensity instead of percentage. Applicable to |
|
>=0 |
The ratio between the turbulent viscosity and freestream laminar viscosity. Applicable to both |
|
>0 |
The turbulent length scale is an estimation of the size of the eddies that are modeled/not resolved. \(L_T = \sqrt{k}/({\beta_0^*}^{0.25}\omega)\) where \(L_T\) is dimensional turbulent length scale, \(k\) is dimensional turbulent kinetic energy, \(\beta_0^*\) is 0.09 and \(\omega\) is dimensional turbulent specific dissipation rate. The turbulent length scale should then be non-dimensionalized with \(L_{gridUnit}\). Applicable to |
|
>=0 |
The ratio between the modified turbulent viscosity (in SA model) and freestream laminar viscosity. Applicable to |
|
>=0 |
The modified turbulent viscosity, aka |
Example
"freestream" :
{
"muRef" : 4.29279e-08,
"Mach" : 1.46972e-02,
"MachRef" : 0.70,
"Temperature" : 288.15,
"alphaAngle" : -90.0,
"betaAngle" : 0.0,
"turbulenceQuantities":{
"turbulentIntensity": 0.05,
"turbulentViscosityRatio" : 0.2
}
}
4.3. boundaries
#
REQUIRED
The boundaries
section defines the boundary conditions. Each boundary condition is specified by associating the boundary type for each boundary name in the mesh file, as follows:
"boundary_name" :
{
"type" : "boundary_type"
}
The “boundary_name” is the name of each individual boundary of the mesh and is typically of the form “1” for UGRID files or “vol-1/wallName” for CGNS files. Additionally, an optional parameter “name” can be specified within each boundary dictionary to overwrite the “boundary_name” shown in the json file. This will update the output results files with the correct names. Hence it becomes possible to update the output name of a given boundary from run to run. For example, a given boundary could be called “BC_NoSlipWall” in one run and “BC_SlipWall” in another. The “name” option takes a string entry.
"boundaries" : {
"1": {
"type": "NoSlipWall",
"name": "your_chosen_name"
},
"2": {
"type": "SlipWall",
"name": "another_chosen_name"
}}
Note
For the TranslationallyPeriodic
and RotationallyPeriodic
boundary conditions, the pairedPatchName
boundary patch name shall be the name of that boundary in the mesh. As in NOT the name you have renamed it to in the json file.
Numerous boundary conditions require the specification of additional options, which are outlined in the table below. For a number of boundaries such as NoSlipWall
, IsothermalWall
and Freestream
, mathematical expressions can be used to define the inputs. Please refer to the user Defined Expressions for more information.
Type |
Additional Options |
Description |
---|---|---|
|
None |
[string] Slip wall condition. |
|
[string] Sets no-slip wall condition |
|
|
[3-array(float or expression)] Optionally, a tangential velocity can be prescribed on the wall. |
|
|
The frame of reference with respect to which velocity is defined. An alternative is “absolute” which is used when the velocity is defined with respect to the inertial frame of reference. |
|
|
[string] Isothermal wall boundary condition |
|
|
[float or expression] Wall temperature nondimensionalized with freestream temperature. |
|
|
[3-array(float or expression)] Optionally, a tangential velocity can be prescribed on the wall. |
|
|
[string] Heat flux wall boundary condition |
|
|
[float or expression] Nondimensional heat flux out of the fluid domain. |
|
|
[3-array(float or expression)] Optionally, a tangential velocity can be prescribed on the wall. |
|
|
[string] Freestream condition, set by parameters in freestream. The default values are set based on the alpha and beta angles. |
|
|
[3-array(float or expression)] The default values are set according to the freestream alpha and beta angles. Optionally, an expression for each of the velocity components can be specified. |
|
|
The frame of reference with respect to which velocity is defined. An alternative is “absolute” which is used when the velocity is defined with respect to the inertial frame of reference. “absolute” is typically used with Single Reference Frame (SRF) simulations. |
|
|
Turbulence quantities at this boundary. See turbulenceQuantities. |
|
|
[string] Subsonic outflow, set through static pressure ratio |
|
|
[float] Static pressure ratio, \(\frac{p_{outflow}}{p_{\infty}}\) |
|
|
Turbulence quantities on this boundary. See turbulenceQuantities |
|
|
[string] Subsonic outflow, set through Mach number |
|
|
[float] Mach number, \(\frac{U_{outflow}}{C_{\infty}}\) |
|
|
Turbulence quantities on this boundary. See turbulenceQuantities |
|
|
[string] Subsonic inflow set through total pressure ratio and total temperature ratio for nozzle or tunnel plenum |
|
|
[float] Total pressure ratio, \(\frac{p_{t, inflow}}{p_{s, inflow}}\) |
|
|
[float] Total temperature ratio, \(\frac{T_{t, inflow}}{T_{s, inflow}}\) |
|
|
[integer] Number of ramp steps during solution initialization |
|
|
[3-array(float or expression)] Direction of the incoming flow. Must be a unit vector pointing into the volume. If unspecified, the direction will be normal to the surface. |
|
|
Turbulence quantities on this boundary. See turbulenceQuantities |
|
|
[string] Mass outflow |
|
|
[float] Mass flow rate at outlet (non-dimensional), \(=\frac{\dot{m}_{outflow}}{{\rho C_{\infty}} L_{gridUnit}^2}\) |
|
|
Turbulence quantities on this boundary. See turbulenceQuantities |
|
|
[string] Mass inflow |
|
|
[float] Mass flow rate at inlet (non-dimensional), \(=\frac{\dot{m}_{inflow}}{{\rho C_{\infty}} L_{gridUnit}^2}\) |
|
|
[float] Total temperature ratio, \(\frac{T_{t, inflow}}{T_{s, inflow}}\) |
|
|
Turbulence quantities on this boundary. See turbulenceQuantities |
|
|
None |
[string] This boundary type uses wall functions to estimate the velocity field close to the solid boundaries |
|
[string] Translational periodic boundary condition |
|
|
[string] Patch name of the matching pair of a |
|
|
[3-array (float)] For a translationally periodic patch with |
|
|
[string] Rotational periodic boundary condition |
|
|
[string] Patch name of the matching pair of a |
|
|
[3-array (float)] For a rotationally periodic patch with |
|
|
[float] For a rotationally periodic patch with |
|
|
[string] Isothermal wall boundary condition for a solid zone |
|
|
[float or expression], Wall temperature for a solid zone nondimensionalized with freestream temperature. |
|
|
None |
[string] Adiabatic wall boundary condition for a solid zone |
|
None |
[string] This boundary condition is similar to |
Example
"boundaries": {
"boundary_name_A": {
"type": "SlipWall"
},
"boundary_name_B": {
"type": "NoSlipWall",
"Velocity": [ "0.0", "0.1*x+exp(y)+z^2", "cos(0.2*x*pi)+sqrt(z^2+1)" ]
},
"boundary_name_C": {
"type": "IsothermalWall",
"Temperature": 1.0
},
"boundary_name_D": {
"type": "Freestream",
"turbulenceQuantities": {
"turbulentViscosityRatio": 0.01
}
},
"boundary_name_E": {
"type": "SubsonicOutflowPressure",
"staticPressureRatio": 1.0
},
"boundary_name_F": {
"type": "SubsonicOutflowMach",
"MachNumber": 0.2
},
"boundary_name_G": {
"type": "SubsonicInflow",
"totalPressureRatio": 1.064,
"totalTemperatureRatio": 1.018
},
"boundary_name_H": {
"type": "MassOutflow",
"massFlowRate": 0.2
},
"boundary_name_I": {
"type": "MassInflow",
"massFlowRate": 0.2,
"turbulenceQuantities": {
"specificDissipationRate": 100,
"turbulentLengthScale": 0.001
}
},
"boundary_name_K": {
"type": "WallFunction"
},
"boundary_name_L": {
"type": "TranslationallyPeriodic",
"pairedPatchName": "boundary_name_M"
},
"boundary_name_M": {
"type": "TranslationallyPeriodic"
},
"boundary_name_N": {
"type": "RotationallyPeriodic",
"pairedPatchName": "boundary_name_O",
"axisOfRotation": [ 1, 0, 0 ]
},
"boundary_name_O": {
"type": "RotationallyPeriodic"
},
"boundary_name_R": {
"type": "SolidIsothermalWall",
"Temperature": 1.2
},
"boundary_name_S": {
"type": "SolidAdiabaticWall"
},
"boundary_name_T": {
"type": "HeatFluxWall",
"heatFlux": -0.001
}
}
4.4. volumeZones
#
OPTIONAL
This section defines the properties of volume zones. All volume zones are assumed to have modelType=FluidDynamics
unless specified otherwise. Each volume zone is specified with a structure as follows:
"volume_zone_name" :
{
"modelType" : "model_type"
}
The “volume_zone_name” needs to be consistent with the definitions in the mesh file.
The options thermalConductivity
, volumetricHeatSource
, heatCapacity
and initialCondition
are only valid for heat transfer zones.
Options |
Additional Options |
default |
Description |
---|---|---|---|
|
"FluidDynamics" |
[string] |
|
|
REQUIRED for |
[float] Thermal conductivity of the material (non-dimensional), \(\frac{k_s T_{\infty}}{\rho_{\infty} C_{\infty}^3 L_{gridUnit}}\) |
|
|
0 |
[float or expression] Volumetric heat source for a solid zone (non-dimensional), \(\frac{\dot{q}_s L_{gridUnit}}{\rho_{\infty} C_{\infty}^3}\) |
|
|
REQUIRED for |
[float] Heat capacity per volume of the material (non-dimensional), \(\frac{\rho_s c_s T_{\infty}}{\rho_{\infty}C_{\infty}^2}\) |
|
|
REQUIRED for |
[dict] |
|
|
[dict] Rotation inputs for rotating volume zones. Only fluid zones are supported. |
||
|
DEPENDS |
[math] Expression for rotation angle (in radians) as a function of time. Required if and none of: |
|
|
DEPENDS |
[math] Expression for rotation angle (in degrees) as a function of time. Required if none of: |
|
|
DEPENDS |
[float] Nondimensional rotating speed, radians/nondim-unit-time, = \(\frac{\Omega*L_{gridUnit}}{C_\infty}\), where the SI unit of \(\Omega\) is rad/s. Required if none of: |
|
|
DEPENDS |
[float] Nondimensional rotating speed, degrees/nondim-unit-time, = \(\text{omegaRadians}*180/PI\). Required if none of: |
|
|
REQUIRED |
[3-array(float)] Origin of rotation |
|
|
REQUIRED |
[3-array(float)] Axis of Rotation |
|
|
DEPENDS |
[string] Name of the volume zone that the rotating reference frame is contained in, used to compute the acceleration in the nested rotating reference frame. Required when using nested rotating interfaces. More information can be found at our knowledge base. |
Example 1
1"volumeZones": {
2 "SOLID": {
3 "modelType": "HeatTransfer",
4 "thermalConductivity": 0.003,
5 "volumetricHeatSource": "0.01*sin(pi*x)*sin(pi*y)"
6 }
7}
Example 2
1"volumeZones": {
2 "FLUID-OUTER-BLOCK": {
3 "modelType": "FluidDynamics"
4 },
5 "FLUID-MIDDLE-BLOCK": {
6 "modelType": "FluidDynamics",
7 "referenceFrame":{
8 "omegaRadians": 0.1,
9 "centerOfRotation": [1,2,3],
10 "axisOfRotation": [1,0,0]
11 }
12 },
13 "FLUID-INNER-BLOCK": {
14 "modelType": "FluidDynamics",
15 "referenceFrame":{
16 "omegaRadians": 0.2,
17 "centerOfRotation": [-4,5,-0.2],
18 "axisOfRotation": [0,0,-1],
19 "parentVolumeName": "FLUID-MIDDLE-BLOCK"
20 }
21 }
22}
Note
For simulations with rotational volume zones (non-zero omega), setting timeStepSize
to "inf"
is equivalent to running Mulitple Reference Frame (MRF) or Single Reference Frame (SRF) simulations. MRF is activated when multiple zones are present in the domain, whereas SRF is activated when only one volume zone is specified.
4.6. turbulenceModelSolver
#
OPTIONAL
This section of the configuration file defines the numerical parameters for the turbulence model solver. For more information on setting up these parameters refer to the turbulence model solver knowledge base.
Options |
Default |
Description |
---|---|---|
|
"SpalartAllmaras" |
[string] |
|
1.00E-08 |
[float] Tolerance for the turbulence model residual, below which the solver progresses to the next physical step (unsteady) or completes the simulation (steady) |
|
0.0 |
[float] Tolerance to the relative residual, below which the solver goes to the next physical step. |
|
Configuration for the linear solver. |
|
|
4 |
[int] Frequency at which the jacobian is updated |
|
4 |
[int] Frequency at which to update the turbulence equation |
|
1.0 |
[float] The strength of gradient limiter used in reconstruction of solution variables at the faces (specified in the range [0.0, 2.0]). 0.0 corresponds to setting the gradient equal to zero, and 2.0 means no limiting. |
|
FALSE |
[boolean] Rotation correction for the turbulence model. Only supported for |
|
FALSE |
[boolean] Quadratic constitutive relation for turbulence shear stress tensor instead of Boussinesq Approximation |
|
2 |
[int] Order of accuracy in space |
|
0 |
[int] For physical steps less than the input value, the jacobian matrix is updated every pseudo-step overriding the |
|
FALSE |
[boolean] |
|
"maxEdgeLength" |
[string] Specifies the length used for the computation of LES length scale. The allowed inputs are |
|
{} |
[dict] A dictionary containing the DDES coefficients in the solver: SpalartAllmaras: |
Example
"turbulenceModelSolver" : {
"modelType" : "SpalartAllmaras",
"absoluteTolerance" : 1e-8,
"relativeTolerance" : 1e-2,
"linearSolverConfig": {
"maxIterations": 25
},
"DDES" : true,
"orderOfAccuracy" : 2,
"updateJacobianFrequency" : 4,
"equationEvalFrequency" : 1,
"rotationCorrection" : true,
"modelConstants" : {
"C_DES": 0.85,
"C_d": 8.0
}
}
4.7. transitionModelSolver
#
OPTIONAL
This section of the configuration file defines the numerical parameters for the transition model solver. For more information on setting up these parameters refer to the transition model solver knowledge base.
Options |
Default |
Description |
---|---|---|
|
"None" |
[string] |
|
1.00E-07 |
[float] Tolerance for the transition model residual, below which the solver progresses to the next physical step (unsteady) or completes the simulation (steady) |
|
0.0 |
[float] Tolerance to the relative residual, below which the solver goes to the next physical step. |
|
Configuration for the linear solver. |
|
|
4 |
[int] Frequency at which the jacobian is updated |
|
4 |
[int] Frequency at which to update the transition equation |
|
2 |
[int] Order of accuracy in space |
|
8.15 |
[float] Critical Amplification Factor, Range from [1-11]. Only valid when |
|
0.1 |
Turbulence Intensity, Range from [0.03-2.5]. Only valid when |
|
0 |
[int] For physical steps less than the input value, the jacobian matrix is updated every pseudo-step overriding the |
Example
"transitionModelSolver": {
"modelType": "AmplificationFactorTransport",
"absoluteTolerance": 1e-10,
"linearSolverConfig": {
"maxIterations": 25
},
"orderOfAccuracy": 2,
"updateJacobianFrequency": 4,
"equationEvalFrequency": 4,
"Ncrit": 9
}
4.8. heatEquationSolver
#
OPTIONAL
This section specifies the numerical parameters of the heat equation solver for CHT applications.
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
10 for steady simulations. For unsteady cases this number is set to guarantee a maximum of 40 evaluations per time step. |
[int] Frequency at which to solve the heat equation in conjugate heat transfer simulations |
|
|
|
50 |
[int] Maximum number of linear solver iterations |
|
1.00E-10 |
[float] The linear solver converges when the final residual of the pseudo step is below this value. Either absolute tolerance or relative tolerance can be used to determine convergence. |
|
|
[float] The linear solver converges when the ratio of the final residual and the initial residual of the pseudo step is below this value. |
||
|
1.00E-9 |
[float] Absolute residual tolerance that determines the convergence of the heat equation in conjugate heat transfer. This value should be the same or higher than the absolute tolerance for the linear solver by a small margin. |
Example
"heatEquationSolver": {
"linearSolverConfig": {
"maxIterations": 50,
"absoluteTolerance": 1e-10
},
"equationEvalFrequency": 10
}
4.9. initialCondition
#
OPTIONAL
This section of the configuration file specifies the initial condition for the simulation.
Options |
Default |
Description |
---|---|---|
|
"freestream" |
[string] |
Example
"initialCondition": {
"type": "expression",
"constants": {
"gamma": "1.4"
},
"rho": "1.0",
"u": "0.0",
"v": "0.0",
"w": "0.0",
"p": "1/gamma"
}
4.10. timeStepping
#
OPTIONAL
This section of the configuration file defines the numerical parameters for time stepping. Please refer to the time stepping knowledge base for further guidance regarding these parameters.
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
1 |
[int] Number of physical steps. "maxPhysicalSteps" is a supported alias for this entry. |
|
|
"inf" |
[string or float] Nondimensional time step size in physical step marching, it is calculated as \(\frac{\Delta t_{physical} C_\infty}{L_{gridUnit}}\), where the \(\Delta t_{physical}\) is the physical time (in seconds) step size. “inf” means steady simulation. |
|
|
2000 |
[int] Maximum pseudo steps within one physical step |
|
|
CFL settings within each physical step |
||
|
"ramp" |
When |
|
|
5 |
[int] Initial CFL for solving pseudo time step (applicable to |
|
|
200 |
[int] Final CFL for solving pseudo time step (applicable to |
|
|
40 |
[int] Number of pseudo steps before reaching CFL |
|
|
0.1 |
The minimum allowable value for CFL (applicable to |
|
|
Steady: 10000, Unsteady: 1000000 |
The maximum allowable value for CFL (applicable to |
|
|
1 |
The maximum allowable relative change of CFL (%) at each pseudo step (applicable to |
|
|
steady: 0.25, Unsteady: 1 |
This factor specifies the level of conservativeness when using |
Note
The timeStepSize
is in solver units (nondimensional), where time-scale is mesh unit divided by freestream speed of sound. So a time of timeStepSize=1
means the time it takes for sound to travel 1 mesh unit at freestream.
Example
"timeStepping": {
"timeStepSize": "inf",
"maxPhysicalSteps": 1,
"maxPseudoSteps": 10000,
"CFL": {
"initial": 1,
"final": 100,
"rampSteps": 2000
}
}
4.11. slidingInterfaces
(list)#
Deprecated since version release-23.3.2.0: Use of slidingInterfaces is deprecated. We highly recommend using volumeZone->referenceFrame for specifying rotational volume zones. More details on switching from sliding interfaces to volume zones can be found here. The details of slidingInterfaces can be found in previous versions of the documentation.
4.12. actuatorDisks
(list)#
OPTIONAL
The actuator disk inputs are defined in this section. Please refer to the actuator disk knowledge base for further information.
Options |
Default |
Description |
---|---|---|
|
REQUIRED |
[3-array(float)] center of the actuator disk |
|
REQUIRED |
[3-array(float)] direction of thrust, it is a unit vector |
|
REQUIRED |
[float] thickness of the actuator disk |
|
REQUIRED |
[list(float)] radius of the sampled locations in grid unit |
|
REQUIRED |
[list(float)] force per area in the axial direction, positive means the axial force follows the same direction as |
|
REQUIRED |
[list(float)] force per area in the circumferential direction, positive means the circumferential force follows the same direction as |
Example
"actuatorDisks":
[
{
"center":[0.0, 0.0, 0.0],
"axisThrust":[0.0,0.0,1.0],
"thickness": 0.01,
"forcePerArea":{
"radius":[0.01, 0.05, 0.1],
"thrust":[0.001, 0.02, 0],
"circumferential":[-0.0001, -0.003, 0]
}
}
]
4.13. BETDisks
(list)#
OPTIONAL
In this section, the Blade Element Theory (BET) model inputs are defined. For detailed information on the parameters, please refer to the BET knowledge Base. To generate the sectional polars the BET translators can be used which are outlined here with best-practices for the sectional polars inputs available here. A case study of the XV-15 rotor using the steady BET Disk method is available in Case Studies. Because a transient BET Line simulation is simply a time-accurate version of a steady-state BET Disk simulation, most of the parameters below are applicable to both methods.
Options |
Default |
Description |
---|---|---|
|
"rightHand" |
[string] the rule for rotation direction and thrust direction, “rightHand” or “leftHand”. |
|
REQUIRED |
[3-array(float)] center of the Blade Element Theory (BET) disk |
|
REQUIRED |
[3-array(float)] rotational axis of the BET disk, i.e. (+) thrust axis |
|
REQUIRED |
[int] number of blades to model |
|
REQUIRED |
[float] nondimensional radius of the rotor disk, = \(\text{Radius}_\text{dimensional}/L_{gridUnit}\) |
|
REQUIRED |
[float] nondimensional rotating speed, radians/nondim-unit-time, = \(\frac{\Omega*L_{gridUnit}}{C_\infty}\), where the SI unit of \(\Omega\) is rad/s. |
|
REQUIRED |
[float] nondimensional reference chord used to compute sectional blade loadings |
|
REQUIRED |
[float] Number of nodes used to compute the sectional thrust and torque coefficients \(C_t\) and \(C_q\), defined in BET Loading Output |
|
REQUIRED |
[float] nondimensional thickness of the BET disk |
|
0.0 |
[float] nondimensional chord to use if performing an unsteady BET Line simulation. Default of 0.0 is an indication to run a steady BET Disk simulation. |
|
Required if |
[3-array(float)] Orientation of the first blade in the BET model. Must be specified if performing an unsteady BET Line simulation. |
|
REQUIRED |
[list(dict)] A list of dictionary entries specifying the twist in degrees as a function of radial location. Entries in the list must already be sorted by radius. |
|
REQUIRED |
[list(dict)] A list of dictionary entries specifying the blade chord as a function of the radial location. Entries in the list must already be sorted by radius. |
|
REQUIRED |
[list(dict)] A list of dictionaries for every radial location specified in |
|
REQUIRED |
[list(float)] A list of the radial locations in grid units at which \(C_l\) and \(C_d\) are specified in |
|
REQUIRED |
[list(float)] alphas associated with airfoil polars provided in |
|
REQUIRED |
[list(float)] Mach numbers associated with airfoil polars provided in |
|
REQUIRED |
[list(float)] Reynolds numbers associated with the airfoil polars provided in |
|
"inf" |
[float] Nondimensional distance between blade tip and solid bodies to define a tip loss factor. |
Example
"BETDisks": [
{
"rotationDirectionRule": "leftHand",
"centerOfRotation": [0, 0, 0],
"axisOfRotation": [0, 0, 1],
"numberOfBlades": 3,
"radius": 150,
"omega": 0.0046,
"chordRef": 14,
"thickness": 15,
"nLoadingNodes": 20,
"MachNumbers": [0],
"ReynoldsNumbers": [1000000],
"alphas": [
-180,
0,
180
],
"sectionalRadiuses": [
13.5,
120,
150
],
"twists": [
{
"radius": 13.5,
"twist": 40.29936539609504
},
{
"radius": 76.5,
"twist": 16.596477306554306
},
{
"radius": 150,
"twist": 3.97516
}
],
"chords": [
{
"radius": 13.4999999,
"chord": 0
},
{
"radius": 13.5,
"chord": 17.69622361
},
{
"radius": 150.0348189415042,
"chord": 14.004512929656503
}
],
"sectionalPolars": [
{
"liftCoeffs": [
[
[
8.998801703796744e-12,
0.019549999999999998,
-8.998801703796744e-12
]
]
],
"dragCoeffs": [
[
[
0.03000000000109987,
0.007595,
0.03000000000109987
]
]
]
},
{
"liftCoeffs": [
[
[
8.998801703796744e-12,
0.18164999999999998,
-8.998801703796744e-12
]
]
],
"dragCoeffs": [
[
[
0.03000000000109987,
0.0062699999999999995,
0.03000000000109987
]
]
]
},
{
"liftCoeffs": [
[
[
-8.998801703796744e-12,
0.0589,
-8.998801703796744e-12
]
]
],
"dragCoeffs": [
[
[
0.03000000000109987,
0.004765,
0.03000000000109987
]
]
]
}
],
"tipGap": "inf"
}
]
4.14. porousMedia
(list)#
OPTIONAL
This section defines the inputs for the porous media model. For further information please refer to the porous media knowledge base.
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
REQUIRED |
[3-array(float)] Darcy coefficient of the porous media model which determines the scaling of the viscous loss term. The 3 values define the coefficient for each of the 3 axes defined by the reference frame of the volume zone. |
|
|
REQUIRED |
[3-array(float)] Forchheimer coefficient of the porous media model which determines the scaling of the inertial loss term |
|
|
REQUIRED |
[dict] Dictionary defining the properties of the region of the grid where the porous media model is applied |
|
|
REQUIRED |
[string] Type/Shape of volume zone. Possible values: “box” |
|
|
REQUIRED |
[3-array(float)] For “zoneType”: “box”, it is the center point of the box |
|
|
REQUIRED |
[[3-array(float)], [3-array(float)]] For “zoneType”: “box”, it is 2 axes which define the x and y directions of the box. Also, used to define the reference frame of the volume zone. |
|
|
REQUIRED |
[3-array(float)] For “zoneType”: “box”, it is the length of the box in each of the x, y, z directions |
|
|
[0.02*lengths[0], 0.02*lengths[1], 0.02*lengths[2]] |
[3-array(float)] For “zoneType”: “box”, it is the total length of the box in x, y, z directions over which a window function is applied on the edges |
Example
"porousMedia": [
{
"DarcyCoefficient": [1000000, 0, 0],
"ForchheimerCoefficient": [1, 0, 0],
"volumeZone": {
"zoneType": "box",
"center": [0, 0, 0],
"lengths": [0.2, 0.2, 2],
"axes": [[0, 1, 0], [0, 0, 1]]
}
}
]
4.15. userDefinedDynamics
#
OPTIONAL
This section defines the user defined dynamics inputs. An example of how to use the userDefinedDynamics is available here.
Options |
Default |
Description |
---|---|---|
|
REQUIRED |
[string] Name of the dynamics defined by the user |
|
Empty |
[dict] A list of constants that can be used in the expressions. |
|
REQUIRED |
[list(string)] List of the inputs to define the user defined dynamics. For example |
|
Empty |
[list(string)] Names of boundaries to which the input variables belongs. If multiple boundaries are specified then the summation over the boundaries are used as the input. For input variables that already specified the source in the name (like bet_NUM_torque) this entry does not have any effect. |
|
Empty |
[dict] Name of the output variables and the expression for the output variables using state variables. For example |
|
Empty |
[list(string)] Name of the target to which the output variables belong to. For example this can be the rotating volume zone name. Only one output target is supported per user defined dynamics instance. |
|
Empty |
[list(string)] The initial value of state variables are specified here. The entries could be either values (in the form of strings, e.g., |
|
Empty |
[list(string)] List of expressions for updating state variables. The list entries correspond to the update laws for |
Example
"userDefinedDynamics": [
{
"dynamicsName": "alphaController",
"inputVars": [
"CL"
],
"constants": {
"CLTarget": 0.4,
"Kp": 0.2,
"Ki": 0.002
},
"outputVars": {
"alphaAngle": "if (pseudoStep > 500) state[0]; else alphaAngle;"
},
"stateVarsInitialValue": [
"alphaAngle",
"0.0"
],
"updateLaw": [
"if (pseudoStep > 500) state[0] + Kp * (CLTarget - CL) + Ki * state[1]; else state[0];",
"if (pseudoStep > 500) state[1] + (CLTarget - CL); else state[1];"
],
"inputBoundaryPatches": [
"1"
]
}
]
The configuration comes from the userDefinedDynamics tutorial.
4.16. Output
#
This section presents all the configuration file inputs regarding solution output. This includes, the surface and volume solutions, as well as slices, isosurfaces and probe/surface-integral monitors. For volumeZones
specified as HeatTransfer
, only output related to the heat equation, i.e. T
and residualHeatSolver
are valid. Universal nondimensional variables supported by all types of output are presented below: [note]
Note
Please note that each output type run parameter in the run configuration file: volumeOutput, surfaceOutput, sliceOutput, isosurfaceOutput etc. are independent, optional inputs which are totally independent. i.e. a sample run configuration file that requires surface and slice outputs but nothing more would contain:
...
"surfaceOutput": {
"outputFormat": "tecplot",
"outputFields": ["SEE_BELOW_FOR_METRICS"]
},
"sliceOutput": {
"outputFormat": "tecplot",
"outputFields": ["SEE_BELOW_FOR_METRICS"],
"slices": {
"x0": {
"sliceNormal": [ 1, 0, 0 ],
"sliceOrigin": [ 0, 0, 0 ],
"outputFields": [ "SEE_BELOW_FOR_METRICS" ]
},
"y1": {
"sliceNormal": [ 0, 1, 0 ],
"sliceOrigin": [ 2, 1, 0 ],
"outputFields": [ "SEE_BELOW_FOR_METRICS" ]
}
}
},...
Name |
Description |
---|---|
|
Coefficient of pressure. \(C_p=(\frac{p-p_\infty}{\frac{1}{2}\rho_\infty{U_{ref}}^2})\) |
|
Gradient of primitive solution |
|
k and omega when using the kOmegaSST model |
|
Mach number |
|
Turbulent viscosity |
|
Ratio between turbulent viscosity and freestream dynamic viscosity, \(\mu_t/{\mu_\infty}\) |
|
Spalart-Allmaras variable, nuHat |
|
Primitive solution, Outputs rho, u, v, w, p (density, 3 velocities and pressure) |
|
Q criterion |
|
5 components of the N-S residual |
|
Residual for the transition model |
|
Residual for the turbulence model |
|
Entropy |
|
Solution for the N-S equation in conservative form |
|
Solution for the transition model |
|
Solution for the turbulence model |
|
Temperature |
|
Vorticity |
|
Wall distance |
|
Sensor showing where the numericalDissipationFactor has been increased |
|
Residual for the heat equation solver |
Additional nondimensional variables supported by volumeOutput and sliceOutput:
Name |
Description |
---|---|
|
Outputs BET disk related metrics, including variables such as |
|
Same as above but each BETdisk has its own |
Additional nondimensional variables supported by surfaceOutput:
Name |
Description |
---|---|
|
skin friction coefficient vector, = \(C_{f_{Vec}}[3]=\frac{\tau_{wall}[3]}{\frac{1}{2}\rho_\infty U_{ref}^2}\) where \(\tau_{wall}[3]\) is the 3-D wall shear stress vector |
|
Magnitude of |
|
Heat flux computed from nondimensional quantities. Multiply by \(\rho_\infty C_\infty^3\) to find the dimensional values. |
|
Wall normal direction (may not be a unit vector). Note: This variable does not support time averaging. |
|
\(\frac{\tau_{viscous}[3]-(p-p_\infty)*normal[3]}{\rho_\infty C_\infty^2}\), where \(\tau_{viscous}[3]\) is the 3-D viscous stress vector and \(normal[3]\) is the 3-D unit normal vector pointing from solid to fluid |
|
Velocity in rotating frame |
|
Non-dimensional wall distance, \(y^+\) |
|
(beta feature) : This metric is a local indicator of the quality of the wall model. A value less than 1.25 indicates a good estimation of the wall shear stress. Between 1.25 and 10 indicates lower confidence, and values greater than 10 are not reliable for wall shear stress estimation. |
Note
Since release-23.1.1.0, previous syntax to specify output variables is being deprecated and not all variables are supported. Users are encouraged to use the new outputFields
syntax as described below.
Apart from pre-defined output variables listed above. User can also define custom output variables by specifying the mathematical expressions in userDefinedFields
section and list their names in outputFields
just like the above pre-defined output variables. Please see userDefinedFields.
4.16.1. volumeOutput
#
OPTIONAL
Options |
Default |
Description |
---|---|---|
|
-1 |
[int] Frequency (in number of physical time steps) at which volume output is saved. -1 is at end of simulation. |
|
0 |
[int] Offset (in number of physical time steps) at which volume output animation is started. 0 is at beginning of simulation. |
|
FALSE |
[boolean] Enables computation of time-averaged quantities |
|
-1 |
[int] Frequency (in number of physical time steps) at which time averaged volume output is saved. -1 is at end of simulation. |
|
0 |
[int] Offset (in number of physical time steps) at which time averaged volume output animation is started. 0 is at beginning of simulation. |
|
0 |
[int] Physical time step to start calculating averaging |
|
[] |
[list(string)] List of output variables. Including universal output variables, and variables specific to volumeOutput. |
|
"paraview" |
[string] |
Example
"volumeOutput": {
"outputFormat": "tecplot",
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"computeTimeAverages": false,
"startAverageIntegrationStep": 0,
"outputFields": ["primitiveVars", "betMetrics", "qcriterion"]
}
4.16.2. surfaceOutput
#
OPTIONAL
Options |
Default |
Description |
---|---|---|
|
-1 |
[int] Frequency (in number of physical time steps) at which surface output is saved. -1 is at end of simulation. |
|
0 |
[int] Offset (in number of physical time steps) at which surface output animation is started. 0 is at beginning of simulation. |
|
"paraview" |
[string] |
|
FALSE” |
[boolean] Enable writing all surface outputs into a single file instead of one file per surface. This option currently only supports Tecplot output format. |
|
FALSE |
[boolean] Enables computation of time-averaged quantities |
|
-1 |
[int] Frequency (in number of physical time steps) at which time averaged surface output is saved. -1 is at end of simulation. |
|
0 |
[int] Offset (in number of physical time steps) at which time averaged surface output animation is started. 0 is at beginning of simulation. |
|
0 |
[int] Physical time step to start calculating averaging |
|
[] |
[list(string)] List of output variables. Including universal output variables and variables specific to surfaceOutput. |
|
{} |
[dict] Dictionary of output surfaces. The name of the surface is used as the key. These surface names have to be the patch name in the grid file or the alias name specified in case JSON. See example below. |
Example
"surfaceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"animationFrequencyTimeAverage": -1,
"animationFrequencyTimeAverageOffset": 0,
"computeTimeAverages": false,
"outputFormat": "paraview",
"startAverageIntegrationStep": 0,
"writeSingleFile": false,
"outputFields": [ "yPlus" ],
"surfaces": {
"freestream": {
"outputFields": [ "Cp", "Mach" ]
# Will output "Cp", "Mach", "yPlus"
},
"symmetry": {
"outputFields": [ "T", "heatFlux" ]
# Will output "T", "heatFlux", "yPlus"
},
"wing": {
"outputFields": [ "CfVec" ]
# Will output "CfVec", "yPlus"
}
}
}
4.16.3. sliceOutput
#
OPTIONAL
Options |
Default |
Description |
---|---|---|
|
-1 |
[int] Frequency (in number of physical time steps) at which slice output is saved. -1 is at end of simulation. |
|
0 |
[int] Offset (in number of physical time steps) at which slice output animation is started. 0 is at beginning of simulation. |
|
"paraview" |
[string] |
|
[] |
[list(string)] List of output variables. Including universal output variables and variables specific to sliceOutput. |
|
{} |
[dict] Dictionary of output slices. The name of the slice is used as the key. See example below. |
|
[] |
[3-array(float)] Normal direction of the slice (within slices dictionary) |
|
[] |
[3-array(float)] Coordinates of a point on the slice (within slices dictionary) |
Example
"sliceOutput": {
"animationFrequency": -1,
"animationFrequencyOffset": 0,
"outputFormat": "tecplot",
"outputFields": [ "Cp" ],
"slices": {
"x0": {
"sliceNormal": [ 1, 0, 0 ],
"sliceOrigin": [ 0, 0, 0 ],
"outputFields": [ "Mach" ]
# Will output "Mach", "Cp"
},
"y1": {
"sliceNormal": [ 0, 1, 0 ],
"sliceOrigin": [ 2, 1, 0 ],
"outputFields": [ "T" ]
# Will output "T", "Cp"
}
}
}
4.16.4. isoSurfaceOutput
#
OPTIONAL
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
"paraview" |
[string] |
|
|
{} |
[dict] Dictionary of iso-surfaces. The key of the dictionary is the name of the iso-surface file to be written. |
|
|
[string] Isosurface field variable to be written. One of |
||
|
[float] The iso-value of |
||
|
[list(string)] List of output variables, see universal output variables |
||
|
-1 |
[int] Frequency (in number of physical time steps) at which volume output is saved. -1 is at end of simulation. |
|
|
0 |
[int] Offset (in number of physical time steps) at which volume output animation is started. 0 is at beginning of simulation. |
Example
"isoSurfaceOutput": {
"outputFormat": "tecplot",
"animationFrequency": 10,
"isoSurfaces": {
"q_1e-3": {
"surfaceField": "qcriterion",
"surfaceFieldMagnitude": 1e-3,
"outputFields": [ "Cp", "Mach" ]
}
}
},
4.16.5. monitorOutput
#
OPTIONAL
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
{} |
[dict] Dictionary of monitor groups. Data probed at the monitor points are printed to file every 10 pseudo step and at the end of each physical time step. The key of the dictionary is the name of the monitor group. |
|
|
[string] The type of monitor. Currently only |
||
|
[list(3-array(float))] For |
||
|
[list(string)] For |
||
|
[list(string)] List of output fields which will be added to all monitors within the monitor group, see universal output variables. |
Note
Please increase the precision of the input coordinates when probing near the grid boundaries to ensure that the probing location is within the mesh.
Example
"monitorOutput": {
"monitors": {
"MyProbe": {
"type": "probe",
"monitorLocations": [
[ 0.12, 0.34, 0.262 ],
[ 3.124e-1, 0.01, 0.03 ]
],
"outputFields": [ "primitiveVars", "vorticity", "T", "s", "Cp", "mut" ]
},
"MySurfaceIntegral": {
"type": "surfaceIntegral",
"surfaces": [
"NoSlipWall1",
"NoSlipWall2"
],
"outputFields": [ "Area" ]
##Computes combined surface area of NoSlipWall1 and NoSlipWall2
}
}
},
"userDefinedFields": [
{
"name": "Area",
"expression": "Area = magnitude(nodeNormals);",
"comment":"computes nodal surface area."
}
]
4.16.6. aeroacousticOutput
#
The aeroacoustic solver is activated by having the aeroacousticOutput
section in the input JSON file.
OPTIONAL
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
[] |
[list(3-array(float))] List of observer locations at which time history of acoustic pressure signal is stored in aeroacoustic output file. The observer locations can be outside the simulation domain, but cannot be on or inside the solid surfaces of the simulation domain. |
|
|
FALSE |
[Boolean] Enable writing of aeroacoustic results on a per-surface basis, in addition to results for all wall surfaces combined. |
Example
1"aeroacousticOutput": {
2 "observers": [
3 [0, 1, 0],
4 [1, 0, 0]
5 ]
6}
4.16.7. userDefinedFields
#
OPTIONAL
User can also define variables that can be used as output variables. For details like the availability of the variables and expression syntax, please refer to userDefinedFields.
Note
userDefinedFields
is currently a beta feature and may be subject to change during the lifetime of the release.
Options |
Additional Options |
Default |
Description |
---|---|---|---|
|
[string] The name of the custom variable. |
||
|
[string] The mathematical expression for this custom variable. The expression should follow syntax similar to C language. Please refer to UserDefinedFields guidance |
||
|
[string] Comments written by user to record details about the custom variable. |
Example
1"userDefinedFields": [
2 {
3 "name": "TotalPressureCoeff",
4 "expression": "double gamma = 1.40; double pow1 = gamma/(gamma-1); double pow2 = (gamma-1) / 2; double MachRefSq = MachRef * MachRef; double Mach = sqrt(primitiveVars[1] * primitiveVars[1] + primitiveVars[2] * primitiveVars[2] + primitiveVars[3] * primitiveVars[3]) / sqrt(gamma * primitiveVars[4] / primitiveVars[0]); double MachSq = Mach * Mach; TotalPressureCoeff[0] = (gamma*primitiveVars[4]*pow((1+pow2*MachSq),pow1)-pow((1+pow2*MachRefSq),pow1))/(gamma/2*MachRefSq);",
5 "comment":"Computes the total pressure coefficient."
6 },
7 {
8 "name": "PressureForce",
9 "expression": "double p = primitiveVars[4] - pressureFreestream; PressureForce[0] = p * rotationModel_nodeNormals[0]; PressureForce[1] = p * rotationModel_nodeNormals[1]; PressureForce[2] = p * rotationModel_nodeNormals[2];",
10 "comment":"Computes the nodal pressure force."
11 }
12],
In the above example two custom fields named TotalPressureCoeff
and PressureForce
are defined. These two custom fields come from examples in Custom Output Variable and Custom surface integral.
- note
Since release-23.1.1.0, previous syntax to specify output variables is being deprecated and not all variables are supported. Users are encouraged to use the new syntax as described in this documentation.