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

refArea

1.0

[float] The reference area of the geometry

momentCenter

[0.0, 0.0, 0.0]

[3-array(float)] The x, y, z moment center of the geometry in grid units

momentLength

[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

Reynolds

Either Reynolds or muRef is REQUIRED

[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}\).

muRef

Either muRef or Reynolds is REQUIRED

[float] The freestream dynamic viscosity (nondimensional), = \(\frac{\mu_\infty}{\rho_\infty C_\infty L_{gridUnit}}\).

Mach

REQUIRED

[float] The Mach number, the ratio of freestream velocity to the speed of sound

MachRef

Mach, REQUIRED if Mach == 0.0

[float] The reference Mach number to compute nondimensional quantities, = \(U_{ref}/C_\infty\).

Temperature

REQUIRED

[float] The freestream temperature in Kelvin. -1 means globally constant viscosity.

alphaAngle

REQUIRED

[float] The angle of attack in degrees.

betaAngle

REQUIRED

[float] The side slip angle in degrees.

turbulentViscosityRatio

DEPENDS

[float] The ratio between the freestream turbulent viscosity and freestream laminar viscosity, used at freestream boundary and to set initial condition. The default depends on the turbulence model and if the transition model is enabled. For "SpalartAllmaras" = 0.210438, "kOmegaSST" = 0.01, and "AmplificationFactorTransport" = \(2.794\times10^{-7}\).

Example

"freestream" :
{
   "muRef" : 4.29279e-08,
   "Mach" : 1.46972e-02,
   "MachRef" : 0.70,
   "Temperature" : 288.15,
   "alphaAngle" : -90.0,
   "betaAngle" : 0.0
}

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 patch of the grid and is typically of the form “1” for .ugrid files and “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.

In resume, in the above json example, “boundary_name” is the name that boundary has in the mesh. This could be a name you have assigned it when creating the mesh or a simple number(see example below). By contrast the “name” parameter is an optional way of updating the “boundary_name” in the output files.

"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 boundary conditions knowledge base for more information.

Type

Additional Options

Description

SlipWall

None

[string] Slip wall condition. Also used for symmetry boundary.

NoSlipWall

[string] Sets no-slip wall condition

Velocity, default: [0.0, 0.0, 0.0]

[3-array(float or expression)] Optionally, a tangential velocity can be prescribed on the wall.

velocityType, default: “relative”

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.

IsothermalWall

[string] Isothermal wall boundary condition

Temperature (REQUIRED)

[float or expression] Wall temperature nondimensionalized with freestream temperature.

Velocity, default: [0.0, 0.0, 0.0]

[3-array(float or expression)] Optionally, a tangential velocity can be prescribed on the wall.

Freestream

[string] Freestream condition, set by parameters in freestream. The default values are set based on the alpha and beta angles.

Velocity, default: freestream

[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.

velocityType, default: “relative”

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.

SubsonicOutflowPressure

[string] Subsonic outflow, set through static pressure ratio

staticPressureRatio (REQUIRED)

[float] Static pressure ratio, \(\frac{p_{outflow}}{p_{\infty}}\)

SubsonicOutflowMach

[string] Subsonic outflow, set through Mach number

MachNumber (REQUIRED)

[float] Mach number, \(\frac{U_{outflow}}{C_{\infty}}\)

SubsonicInflow

[string] Subsonic inflow set through total pressure ratio and total temperature ratio for nozzle or tunnel plenum

totalPressureRatio (REQUIRED)

[float] Total pressure ratio, \(\frac{p_{t, inflow}}{p_{s, inflow}}\)

totalTemperatureRatio (REQUIRED)

[float] Total temperature ratio, \(\frac{T_{t, inflow}}{T_{s, inflow}}\)

rampSteps

[integer] Number of ramp steps during solution initialization

velocityDirection

[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.

MassOutflow

[string] Mass outflow

massFlowRate (REQUIRED)

[float] Mass flow rate at outlet (non-dimensional), \(=\frac{\dot{m}_{outflow}}{{\rho C_{\infty}} L_{gridUnit}^2}\)

MassInflow

[string] Mass inflow

massFlowRate (REQUIRED)

[float] Mass flow rate at inlet (non-dimensional), \(=\frac{\dot{m}_{inflow}}{{\rho C_{\infty}} L_{gridUnit}^2}\)

WallFunction

None

[string] This boundary type uses wall functions to estimate the velocity field close to the solid boundaries

TranslationallyPeriodic

[string] Translational periodic boundary condition

pairedPatchName

[string] Patch name of the matching pair of a TranslationallyPeriodic patch. Needs to be specified for one side of each of the periodic boundary pairs.

translationVector

[3-array (float)] For a translationally periodic patch with pairedPatchName specified, this is the vector that maps the patch to its pair. If not specified, translation vector is determined automatically from the volumetric mesh. Needs to be specified for one side of each of the periodic boundary pairs.

RotationallyPeriodic

[string] Rotational periodic boundary condition

pairedPatchName

[string] Patch name of the matching pair of a RotationallyPeriodic patch. Needs to be specified for one side of each of the periodic boundary pairs.

axisOfRotation

[3-array (float)] For a rotationally periodic patch with pairedPatchName specified, this is the axis of rotation that maps the patch to its pair. If not specified, axis of rotation is determined automatically from the volumetric mesh, but we recommend users to specify it as in some situations it is difficult to accurately compute it from the mesh. Needs to be specified for one side of each of the periodic boundary pairs.

thetaRadians

[float] For a rotationally periodic patch with pairedPatchName and axisOfRotation specified, this is the angle of rotation that maps the patch to its pair following the right hand rule. If not specified, theta is determined automatically from the volumetric mesh. Needs to be specified for one side of each of the periodic boundary pairs.

SolidIsothermalWall

[string] Isothermal wall boundary condition for a solid zone

Temperature (REQUIRED)

[float or expression], Wall temperature for a solid zone nondimensionalized with freestream temperature.

SolidAdiabaticWall

None

[string] Adiabatic wall boundary condition for a solid zone

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": 300
	},
	"boundary_name_D": {
        	"type": "Freestream"
	},
	"boundary_name_E": {
		"type": "SubsonicOutflowPressure",
		"staticPressureRatio": 1.0
	},
	"boundary_name_F": {
        	"type": "SubsonicOutflowMach",
        	"MachNumber": 0.2
	},
	"boundary_name_G": {
		"type": "SubsonicInflow",
        	"totalPressureRatio":  1.0,
		"totalTemperatureRatio": 1.0
	},
	"boundary_name_H": {
        	"type": "MassOutflow",
        	"massFlowRate":  0.2
	},
	"boundary_name_I": {
        	"type": "MassInflow",
        	"massFlowRate":  0.2
	},
	"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"
	}
}

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

modelType

"FluidDynamics"

[string] HeatTransfer for a solid zone or FluidDynamics for a fluid zone

thermalConductivity

REQUIRED for HeatTransfer zone

[float] Thermal conductivity of the material (non-dimensional), \(\frac{k_s T_{\infty}}{\rho_{\infty} C_{\infty}^3 L_{gridUnit}}\)

volumetricHeatSource

0

[float or expression] Volumetric heat source for a solid zone (non-dimensional), \(\frac{\dot{q}_s L_{gridUnit}}{\rho_{\infty} C_{\infty}^3}\)

heatCapacity

REQUIRED for HeatTransfer zone for unsteady simulations

[float] Heat capacity per volume of the material (non-dimensional), \(\frac{\rho_s c_s T_{\infty}}{\rho_{\infty}C_{\infty}^2}\)

initialCondition

REQUIRED for HeatTransfer zone for unsteady simulations

[dict] T entry specifies the initial temperature for the heat equation

referenceFrame

[dict] Rotation inputs for rotating volume zones. Only fluid zones are supported.

thetaRadians

DEPENDS

[math] Expression for rotation angle (in radians) as a function of time. Required if and none of: thetaDegrees, omegaRadians, omegaDegrees are specified.

thetaDegrees

DEPENDS

[math] Expression for rotation angle (in degrees) as a function of time. Required if none of: thetaRadians, omegaRadians, omegaDegrees are specified.

omegaRadians

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: thetaDegrees, thetaRadians, omegaDegrees are specified.

omegaDegrees

DEPENDS

[float] Nondimensional rotating speed, degrees/nondim-unit-time, = \(\text{omegaRadians}*180/PI\). Required if none of: thetaDegrees, thetaRadians, omegaRadians are specified.

centerOfRotation

REQUIRED

[3-array(float)] Origin of rotation

axisOfRotation

REQUIRED

[3-array(float)] Axis of Rotation

parentVolumeName

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

modelType

"SpalartAllmaras"

[string] "SpalartAllmaras", "kOmegaSST", or "None"

absoluteTolerance

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)

relativeTolerance

0.0

[float] Tolerance to the relative residual, below which the solver goes to the next physical step.

linearSolverConfig

Configuration for the linear solver. maxIterations controls the number of linear iteration. Default is 20.

updateJacobianFrequency

4

[int] Frequency at which the jacobian is updated

equationEvalFrequency

4

[int] Frequency at which to update the turbulence equation

reconstructionGradientLimiter

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.

rotationCorrection

FALSE

[boolean] Rotation correction for the turbulence model. Only supported for SpalartAllmaras

quadraticConstitutiveRelation

FALSE

[boolean] Quadratic constitutive relation for turbulence shear stress tensor instead of Boussinesq Approximation

orderOfAccuracy

2

[int] Order of accuracy in space

maxForceJacUpdatePhysicalSteps

0

[int] For physical steps less than the input value, the jacobian matrix is updated every pseudo-step overriding the updateJacobianFrequency value

DDES

FALSE

[boolean] "TRUE" enables Delayed Detached Eddy Simulation. Supported for all turbulence and transition models

gridSizeForLES

"maxEdgeLength"

[string] Specifies the length used for the computation of LES length scale. The allowed inputs are "maxEdgeLength" and "meanEdgeLength".

modelConstants

{}

[dict] A dictionary containing the DDES coefficients in the solver: SpalartAllmaras: "C_DES" (= 0.72), "C_d" (= 8.0), kOmegaSST: "C_DES1" (= 0.78), "C_DES2" (= 0.61), "C_d1" (= 20.0), "C_d2" (= 3.0), (values shown in the parentheses are the default values used in Flow360)

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

modelType

"None"

[string] "None" (disabled) or "AmplificationFactorTransport" (enabled)

absoluteTolerance

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)

relativeTolerance

0.0

[float] Tolerance to the relative residual, below which the solver goes to the next physical step.

linearSolverConfig

Configuration for the linear solver. maxIterations controls the number of linear iteration. Default is 20.

updateJacobianFrequency

4

[int] Frequency at which the jacobian is updated

equationEvalFrequency

4

[int] Frequency at which to update the transition equation

orderOfAccuracy

2

[int] Order of accuracy in space

Ncrit

8.15

[float] Critical Amplification Factor, Range from [1-11]. Only valid when turbulenceIntensityPercent is not specified.

turbulenceIntensityPercent

0.1

Turbulence Intensity, Range from [0.03-2.5]. Only valid when Ncrit is not specified.

maxForceJacUpdatePhysicalSteps

0

[int] For physical steps less than the input value, the jacobian matrix is updated every pseudo-step overriding the updateJacobianFrequency value

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

equationEvalFrequency

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

linearSolverConfig

maxIterations

50

[int] Maximum number of linear solver iterations

absoluteTolerance

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.

relativeTolerance

[float] The linear solver converges when the ratio of the final residual and the initial residual of the pseudo step is below this value.

absoluteTolerance

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

type

"freestream"

[string] "freestream" or "expression" with expression allowing to specify values for constants (constants) and each of the primitive variables (p, rho, u, v, w) using mathematical expressions.

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

physicalSteps

1

[int] Number of physical steps. "maxPhysicalSteps" is a supported alias for this entry.

timeStepSize

"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.

maxPseudoSteps

2000

[int] Maximum pseudo steps within one physical step

CFL

CFL settings within each physical step

type

"ramp"

When "ramp" is specified, CFL will ramp from initial to final over rampSteps number of pseudo steps. With "adaptive" specified, the CFL value is calculated internally based on the quality of solver convergence at each pseudo step.

initial

5

[int] Initial CFL for solving pseudo time step (applicable to "ramp")

final

200

[int] Final CFL for solving pseudo time step (applicable to "ramp")

rampSteps

40

[int] Number of pseudo steps before reaching CFL final within 1 physical step (applicable to "ramp")

min

0.1

The minimum allowable value for CFL (applicable to "adaptive")

max

Steady: 10000, Unsteady: 1000000

The maximum allowable value for CFL (applicable to "adaptive")

maxRelativeChange

1

The maximum allowable relative change of CFL (%) at each pseudo step (applicable to "adaptive"). In unsteady simulations, the value of maxRelativeChange is updated automatically depending on how well the solver converges in each physical step.

convergenceLimitingFactor

steady: 0.25, Unsteady: 1

This factor specifies the level of conservativeness when using adaptive CFL. Smaller values correspond to a more conservative limitation on the value of CFL.

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

center

REQUIRED

[3-array(float)] center of the actuator disk

axisThrust

REQUIRED

[3-array(float)] direction of thrust, it is a unit vector

thickness

REQUIRED

[float] thickness of the actuator disk

forcePerArea->radius

REQUIRED

[list(float)] radius of the sampled locations in grid unit

forcePerArea->thrust

REQUIRED

[list(float)] force per area in the axial direction, positive means the axial force follows the same direction as axisThrust. It is non-dimensional: \(\frac{\text{thrustPerArea}(SI=N/m^2)}{\rho_\infty C^2_\infty}\).

forcePerArea->circumferential

REQUIRED

[list(float)] force per area in the circumferential direction, positive means the circumferential force follows the same direction as axisThrust with the right hand rule. It is non-dimensional: \(\frac{\text{circumferentialForcePerArea}(SI=N/m^2)}{\rho_\infty C^2_\infty}\).

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

rotationDirectionRule

"rightHand"

[string] the rule for rotation direction and thrust direction, “rightHand” or “leftHand”.

centerOfRotation

REQUIRED

[3-array(float)] center of the Blade Element Theory (BET) disk

axisOfRotation

REQUIRED

[3-array(float)] rotational axis of the BET disk, i.e. (+) thrust axis

numberOfBlades

REQUIRED

[int] number of blades to model

radius

REQUIRED

[float] nondimensional radius of the rotor disk, = \(\text{Radius}_\text{dimensional}/L_{gridUnit}\)

omega

REQUIRED

[float] nondimensional rotating speed, radians/nondim-unit-time, = \(\frac{\Omega*L_{gridUnit}}{C_\infty}\), where the SI unit of \(\Omega\) is rad/s.

chordRef

REQUIRED

[float] nondimensional reference chord used to compute sectional blade loadings

nLoadingNodes

REQUIRED

[float] Number of nodes used to compute the sectional thrust and torque coefficients \(C_t\) and \(C_q\), defined in BET Loading Output

thickness

REQUIRED

[float] nondimensional thickness of the BET disk

bladeLineChord

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.

initialBladeDirection

Required if bladeLineChord is not = 0

[3-array(float)] Orientation of the first blade in the BET model. Must be specified if performing an unsteady BET Line simulation.

twists

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.

chords

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.

sectionalPolars

REQUIRED

[list(dict)] A list of dictionaries for every radial location specified in sectionalRadiuses. Each dict has two entries, “liftCoeffs” and “dragCoeffs”, both of which have the same data storage format: 3D arrays (implemented as nested lists). The first index of the array corresponds to the MachNumbers of the specified polar data. The second index of the array corresponds to the ReynoldsNumbers of the polar data. The third index corresponds to the alphas. The value specifies the lift or drag coefficient, respectively.

sectionalRadiuses

REQUIRED

[list(float)] A list of the radial locations in grid units at which \(C_l\) and \(C_d\) are specified in sectionalPolars

alphas

REQUIRED

[list(float)] alphas associated with airfoil polars provided in sectionalPolars in degrees

MachNumbers

REQUIRED

[list(float)] Mach numbers associated with airfoil polars provided in sectionalPolars

ReynoldsNumbers

REQUIRED

[list(float)] Reynolds numbers associated with the airfoil polars provided in sectionalPolars

tipGap

"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

DarcyCoefficient

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.

ForchheimerCoefficient

REQUIRED

[3-array(float)] Forchheimer coefficient of the porous media model which determines the scaling of the inertial loss term

volumeZone

REQUIRED

[dict] Dictionary defining the properties of the region of the grid where the porous media model is applied

zoneType

REQUIRED

[string] Type/Shape of volume zone. Possible values: “box”

center

REQUIRED

[3-array(float)] For “zoneType”: “box”, it is the center point of the box

axes

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.

lengths

REQUIRED

[3-array(float)] For “zoneType”: “box”, it is the length of the box in each of the x, y, z directions

windowingLengths

[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

dynamicsName

REQUIRED

[string] Name of the dynamics defined by the user

constants

Empty

[dict] A list constants that can be used in the expressions.

inputVars

REQUIRED

[list(string)] List of the inputs to define the user defined dynamics. Supported inputs are: "CL", "CD", "torque_bet_NUM", "thrust_bet_NUM", (NUM is the index of the BET disk starting from 0), "rotMomentX", "rotMomentY", "rotMomentZ" (X/Y/Z moments with respect to momentCenter), "forceX", "forceY", "forceZ"

inputBoundaryPatches

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 torque_bet_NUM) this entry does not have any effect.

outputVars

Empty

[dict] Name of the output variables and the expression for the output variables using input/state variables. Supported output variables are: "alphaAngle", "betaAngle", "omega_bet_NUM" (NUM is the index of the BET disk starting from 0), "theta", "omega" and "omegaDot" (rotation angle/velocity/acceleration in radius for sliding interface)

outputTargetName

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.

stateVarsInitialValue

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., "0.0") or expression with constants defined earlier or any input and output variable. (e.g., "2.0 * alphaAngle + someConstant"). The list entries correspond to the initial values for state[0], state[1], …, respectively.

updateLaw

Empty

[list(string)] List of expressions for updating state variables. The list entries correspond to the update laws for state[0], state[1], …, respectively.

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"
        ]
    }
]

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, point monitors, and aeroacoustics observers. 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:

Name

Description

Cp

Coefficient of pressure. \(C_p=(\frac{p-p_\infty}{\frac{1}{2}\rho_\infty{U_{ref}}^2})\)

gradW

Gradient of primitive solution

kOmega

k and omega when using the kOmegaSST model

Mach

Mach number

mut

Turbulent viscosity

mutRatio

Ratio between turbulent viscosity and freestream dynamic viscosity, \(\mu_t/{\mu_\infty}\)

nuHat

Spalart-Almaras variable, nuHat

primitiveVars

Outputs rho, u, v, w, p (density, 3 velocities and pressure)

qcriterion

Q criterion

residualNavierStokes

5 components of the N-S residual

residualTransition

Residual for the transition model

residualTurbulence

Residual for the turbulence model

s

Entropy

solutionNavierStokes

Solution for the N-S equation in conservative form

solutionTransition

Solution for the transition model

solutionTurbulence

Solution for the turbulence model

T

Temperature

vorticity

Vorticity

wallDistance

Wall distance

lowNumericalDissipationSensor

Sensor showing where the numericalDissipationFactor has been increased

residualHeatSolver

Residual for the heat equation solver

Additional nondimensional variables supported by volumeOutput and sliceOutput:

Name

Description

betMetrics

Outputs BET disk related metrics, including variables such as VelocityRelative, AlphaRadians, CfAxial, CfCircumferential, TipLossFactor, LocalSolidityIntegralWeight for all BETDisks with possible overlapping.

betMetricsPerDisk

Same as above but each BETdisk has its own betMetrics so overlapping is avoided.

Additional nondimensional variables supported by surfaceOutput:

Name

Description

CfVec

Viscous stress coefficient vector, = \(C_{f_{Vec}}[3]=\frac{\tau_{wall}[3]}{\frac{1}{2}\rho_\infty U_{ref}^2}\)

Cf

Magnitude of CfVec

CfNormal

Magnitude of CfVec normal to the wall

CfTangent

Magnitude of CfVec tangential to the wall

heatFlux

Heat flux computed from nondimensional quantities. Multiply by \(\rho_\infty C_\infty^3\) to find the dimensional values.

nodeNormals

Wall normal direction (may not be a unit vector). Note: This variable does not support time average.

nodeForcesPerUnitArea

\(\frac{\tau_{wall}[3]-(p-p_\infty)*normal[3]}{\rho_\infty C_\infty^2}\), where the \(normal[3]\) is the unit normal vector pointing from solid to fluid

VelocityRelative

Velocity in rotating frame

yPlus

non-dimensional wall distance, \(y^+\)

wallFunctionMetric

(beta feature) : This metric is a local indicator for quality of the wall model. A value less than 1.25 shows good estimation of wall shear stress. Between 1.25 and 10 is a region of less validity, 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.

4.16.1. volumeOutput#

OPTIONAL

Options

Default

Description

animationFrequency

-1

[int] Frequency (in number of physical time steps) at which volume output is saved. -1 is at end of simulation.

animationFrequencyOffset

0

[int] Offset (in number of physical time steps) at which volume output animation is started. 0 is at beginning of simulation.

computeTimeAverages

FALSE

[boolean] Enables computation of time-averaged quantities

animationFrequencyTimeAverage

-1

[int] Frequency (in number of physical time steps) at which time averaged volume output is saved. -1 is at end of simulation.

animationFrequencyTimeAverageOffset

0

[int] Offset (in number of physical time steps) at which time averaged volume output animation is started. 0 is at beginning of simulation.

startAverageIntegrationStep

0

[int] Physical time step to start calculating averaging

outputFields

[]

[list(string)] List of output variables. Including universal output variables, and variables specific to volumeOutput.

outputFormat

"paraview"

[string] "paraview", "tecplot" or "both"

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

animationFrequency

-1

[int] Frequency (in number of physical time steps) at which surface output is saved. -1 is at end of simulation.

animationFrequencyOffset

0

[int] Offset (in number of physical time steps) at which surface output animation is started. 0 is at beginning of simulation.

outputFormat

"paraview"

[string] "paraview" or "tecplot" or "both"

writeSingleFile

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.

computeTimeAverages

FALSE

[boolean] Enables computation of time-averaged quantities

animationFrequencyTimeAverage

-1

[int] Frequency (in number of physical time steps) at which time averaged surface output is saved. -1 is at end of simulation.

animationFrequencyTimeAverageOffset

0

[int] Offset (in number of physical time steps) at which time averaged surface output animation is started. 0 is at beginning of simulation.

startAverageIntegrationStep

0

[int] Physical time step to start calculating averaging

outputFields

[]

[list(string)] List of output variables. Including universal output variables and variables specific to surfaceOutput. outputFields specified under surfaceOutput will be added to all surfaces. See example below.

surfaces

{}

[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

animationFrequency

-1

[int] Frequency (in number of physical time steps) at which slice output is saved. -1 is at end of simulation.

animationFrequencyOffset

0

[int] Offset (in number of physical time steps) at which slice output animation is started. 0 is at beginning of simulation.

outputFormat

"paraview"

[string] "paraview" or "tecplot" or "both"

outputFields

[]

[list(string)] List of output variables. Including universal output variables and variables specific to sliceOutput. outputFields specified under sliceOutput will be added to all slices. See example below.

slices

{}

[dict] Dictionary of output slices. The name of the slice is used as the key. See example below.

sliceNormal

[]

[3-array(float)] Normal direction of the slice (within slices dictionary)

sliceOrigin

[]

[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

outputFormat

"paraview"

[string] "paraview", "tecplot" or "both"

isoSurfaces

{}

[dict] Dictionary of iso-surfaces. The key of the dictionary is the name of the iso-surface file to be written.

surfaceField

[string] Isosurface field variable to be written. One of p, rho, Mach, qcriterion, s, T, Cp, mut, nuHat.

surfaceFieldMagnitude

[float] The iso-value of surfaceField to compute

outputFields

[list(string)] List of output variables, see universal output variables

animationFrequency

-1

[int] Frequency (in number of physical time steps) at which volume output is saved. -1 is at end of simulation.

animationFrequencyOffset

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

monitors

{}

[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.

monitorLocations

[list(3-array(float))] A list of coordinates of the monitor points belonging to this monitor group

type

[string] The type of monitor. Currently only "probe" is supported.

outputFields

[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": {
        "Group1": {
            "type": "probe",
            "monitorLocations": [
                [ 0.12, 0.34, 0.262 ],
                [ 3.124e-1, 0.01, 0.03 ]
            ],
            "outputFields": [ "primitiveVars", "vorticity", "T", "s", "Cp", "mut" ]
        }
    }
}

4.16.6. aeroacousticOutput#

The aeroacoustic solver is activated by having the :code`aeroacousticOutput` section in the input JSON file.

OPTIONAL

Options

Additional Options

Default

Description

observers

[]

[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.

Example

"aeroacousticOutput": {
    "observers": [
        [0, 1, 0],
        [1, 0, 0]
    ]
}