# EQUATION

Specifies equation systems present in the problem.

## Type

AcuSolve Command

## Syntax

EQUATION {parameters}

## Qualifier

This command has no qualifier.

## Parameters

- flow (enumerated) [=navier_stokes]
- Flow equation type.
- navier_stokes
- Navier-Stokes equations.
- stokes
- Time dependent Stokes equations.
- compressible_navier_stokes (cns)
- Compressible Navier-Stokes equations.
- compressible_euler
- Compressible Euler equations.

- absolute_pressure_offset (real) >=0 [=0]
- Offset to convert to absolute pressure units. Used with ideal_gas and isentropic types in DENSITY_MODEL.
- temperature or temp (enumerated) [=none]
- Energy equation type.
- none
- No energy equation solved.
- advective_diffusive
- Energy equation solved.

- absolute_temperature_offset (real) >=0 [=0]
- Offset to convert to absolute temperature units. When temperature = advective_diffusive is used with any of the following conditions: ideal_gas type in DENSITY_MODEL, any radiation model, or radiation_heat_flux variable in ELEMENT_BOUNDARY_CONDITION.
- radiation or rad (enumerated) [=none]
- Radiation type.
- none
- No radiation solved.
- enclosure
- The enclosure radiation model.
- p1_model
- The p1 radiation model. Used with temperature = advective_diffusive. Note that operating temperature should be absolute temperature.
- discrete_ordinate
- The Discrete Ordinates or DO model. Used with temperature = advective_diffusive. Note that the operating temperature should be absolute temperature.

- radiation_quadrature [=S4]
- Specifies the order of the Sn angular quadrature set used with the discrete ordinates method. Essentially these represent the directions, or ordinates, along which the radiative transfer equation is solved. The available quadrature orders are: S2, S4, S6, S8 and S10, representing a discrete number of directions: 8, 24, 48, 80 and 120 directions, respectively. The default value is S4, which gives a good balance between computational efficiency and accuracy.
- radiation_solve_frequency (int) [=1]
- Defines the frequency of the radiation solve relative to other transport equations. For example, the default value of one means the radiative transport is solved every timestep. radiation_solve_frequency is only valid if radiation = discrete_ordinate.
- species_transport or spec (enumerated) [=none]
- Multi-species transport equation type.
- none
- No species field.
- advective_diffusive or ad
- Advective diffusive equation for multiple species transport. Requires num_species.

- humid_air_model (boolean) [=off]
- Flag specifying whether to use the humid_air_model. When set to on, the field is assigned to the humid air. To activate the humid air model, temperature = advective_diffusive should be set first. Requires multi_field. When the humid air model is switched on, humidity_film_thickness calculation will be performed in transient simulation only. For steady-state simulation, it will be ignored.
- multi_field (enumerated) [=none]
- Type of multi-field model to use.
- none or off
- No multi-field model is used.
- levelset
- Use the level set method to capture the interface between immiscible fluids. Requires fields.
- levelset_bfecc
- Use the level set method with the Back and Forth Error Compensation and Correction (BFECC) advection scheme. Requires fields.
- algebraic_eulerian
- Use the Algebraic Eulerian method to model multiple dispersed fields with one carrier field. Requires fields.
- advective_diffusive
- Use the advective diffusive method to model the transport of gas mixture. Requires fields.

- fields (list) [no default]
- List of fields to solve in the case of multi-field analyses. When using multi_field= levelset, solutions are limited to two immiscible fields. An unlimited number of dispersed fields can be modeled with one carrier field using multi_field=algebraic_eulerian. When using humid_air_model and multi_field=advective_diffusive, the number of fields are limited to two.
- num_species (integer) >0 <=9 [=1]
- Number of species present in the problem. Used with advective_diffusive species transport type.
- species_names (array) [no default]
- Array of user-defined species names to associate a name string with each species via a species_names. Used with num_species.
- turbulence or turb (enumerated) [=none]
- Turbulence model.
- none
- Laminar flow.
- spalart_allmaras or spalart
- Spalart-Allmaras one-equation RANS model.
- shear_stress_transport or sst
- Shear Stress Transport 2-equation RANS model.
- k_epsilon or keps
- K-epsilon 2-equation RANS model.
- realizable_k_epsilon or realkeps
- Realizable k-epsilon 2-equation RANS model.
- rng_k_epsilon or rngkeps
- RNG k-epsilon 2-equation RANS model.
- k_omega
- K-omega two-equation RANS model.
- bsl_k_omega
- BSL k-omega two-equation RANS model.
- detached_eddy_simulation or des
- Spalart-Allmaras based detached eddy simulation model.
- shear_stress_transport_detached_eddy_simulation or sst_des
- Shear stress transport based detached eddy simulation model.
- large_eddy_simulation or les
- Classical (Smagorinsky) LES model.
- dynamic_model or dynamic
- Dynamic subgrid LES model.

- turbulence_transition_model or trans (enumerated) [=none]
- Turbulence transition model. Valid only when
turbulence=spalart_allmaras,
shear_stress_transport,
detached_eddy_simulation, or
shear_stress_transport_detached_eddy_simulation.
- none
- Do not include the impact of transition physics into turbulent simulations.
- intermittency_momentum_thickness_reynolds_number or gamma_re_theta
- $\gamma $ -Re $\theta $ two-equation transition model.
- intermittency or gamma
- $\gamma $ one-equation transition model.

- viscoelastic or vest (enumerated) [=none]
- Viscoelastic material model type.
- none
- No viscoelastic material model equation.
- upper_convected_maxwell or ucm
- Upper convected Maxwell model used to incorporate viscoelastic material effects.
- upper_convected_maxwell_log_model or ucm_log
- Log formulation of the upper convected Maxwell model used to incorporate viscoelastic material effects.

- mesh
- Mesh type.
- eulerian or fixed
- Fixed mesh.
- arbitrary_lagrangian_eulerian or ale
- Arbitrary mesh movement.
- specified or enforced
- Specified mesh movement.

- optimization (boolean) [=off]
- Flag to turn on optimization. This requires an OPTIMIZATION command and one or more DESIGN_VARIABLE commands. If the design variables control change in geometry, mesh has to be set to specified or arbitrary_lagrangian_eulerian.
- external_code (boolean) [=off]
- Flag specifying whether an external solid/structural code is coupled with AcuSolve to solve a Direct Coupling Fluid Structure Interaction (DC-FSI) problem.
- particle_trace [=off]
- Flag specifying whether to permit coupling with AcuTrace.
- running_average [=off]
- Flag specifying whether to create running average solution fields. If this option is set to on, the effectiveness of the non-reflecting boundary condition will be improved when flow = navier_stokes and non_reflecting_bc_running_average_field (nrbcraf) = true.
- running_average_steps (integer) >=1 [=100]
- Maximum number of time steps to average solution fields. Used with running_average=on.
- gravitational_acceleration (array) [={0,0,0}]
- The constant value of the gravity force. This array must have exactly three components in the global xyz coordinate system. Note that gravitational_acceleration and gravity under GRAVITY, as a part of BODY_FORCE, are cumulative.

## Description

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
}
```

where ρ is the density, given by the DENSITY_MODEL command; u is the velocity vector, p is the pressure, $\tau =\left[{\tau}_{ij}\right]$ is the viscous stress tensor, given by VISCOSITY_MODEL; b is the momentum source vector, given by GRAVITY and other commands; h is the enthalpy, given by SPECIFIC_HEAT_MODEL; q is the heat flux vector, given by CONDUCTIVITY_MODEL; s is the heat source per unit mass, given by MASS_HEAT_SOURCE; ${\phi}_{i},i=1,\mathrm{...}$ , num_species, are the scalar species; ${\Psi}_{i}$ is the diffusion flux vector for species ${\phi}_{i}$ , given by DIFFUSIVITY_MODEL; and ${\sigma}_{i}$ is the species source per unit mass for species ${\phi}_{i}$ , given by MASS_SPECIES_SOURCE. Other terms are added by several commands; the full equations are given in the descriptions of these commands.

The only change for stokes flow is the removal of the $\rho u\text{\hspace{0.17em}}\xb7\text{\hspace{0.17em}}\nabla $ (convective) terms. These equations may be also modified by various body forces, references frames, material models, and so on. See the corresponding commands for the specific modifications.

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
absolute_temperature_offset = 273.14
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
absolute_temperature_offset = 273.14
species_transport = advective_diffusive
num_species = 2
species_names = {“honey”, “dust”}
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
absolute_temperature_offset = 273.14
species_transport = advective_diffusive
num_species = 2
species_names = {“honey”, “dust”}
turbulence = spalart_allmaras
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
absolute_temperature_offset = 273.14
species_transport = advective_diffusive
num_species = 2
species_names = {“honey”, “dust”}
turbulence = spalart_allmaras
mesh = arbitrary_lagrangian_eulerian
viscoelastic = upper_convected_maxwell
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
absolute_temperature_offset = 273.14
species_transport = advective_diffusive
num_species = 2
species_names = {“honey”, “dust”}
turbulence = spalart_allmaras
mesh = arbitrary_lagrangian_eulerian
viscoelastic = upper_convected_maxwell
external_code = on
}
```

An arbitrary_lagrangian_eulerian mesh is typically active when an external code is used. See the EXTERNAL_CODE command for more details on setting up DC-FSI problems.

```
EQUATION {
flow = navier_stokes
turbulence = spalart_allmaras
}
TIME_SEQUENCE {
staggers = { "flow", "turb" }
...
}
STAGGER( "flow" ) {
equation = flow
...
}
STAGGER( "turb" ) {
equation = turbulence
...
}
```

```
EQUATION {
flow = navier_stokes
particle = on
}
TIME_SEQUENCE {
staggers = { "flow", "particle" }
...
}
STAGGER( "flow" ) {
equation = flow
...
}
STAGGER( "particle" ) {
equation = particle
...
}
```

To solve for a flow field that has multiple immiscible fluid phases in contact with each other, it is necessary to employ a multi-field modeling approach. When setting multifield = levelset, AcuSolve tracks the interface between the two immiscible fluids using the requested interface tracking scheme. This type of technology is useful for tracking the interface between fluids for applications such as fuel sloshing in a fuel tank, waves on the surface of the ocean, or a liquid being poured into a container. Two options are available for immiscible multiphase simulations, levelset and levelset_bfecc. Both level set approaches rely on two additional staggers to track the interface. In the standard levelset method, the first stagger governs the transport of the interface, and the second stagger controls the sharpness of the interface. The levelset_bfecc method includes extra stagger iterations to reduce the amount of diffusion in the solution field. The levelset_bfecc method captures multiphase interfaces more sharply than the standard levelset method. Because more calculations are performed, more computing time is needed when compared to the standard levelset method.

```
EQUATION {
flow = navier_stokes
multi_field = levelset
fields = {"water","air";}
}
TIME_SEQUENCE {
staggers = { "flow_levelset", "redistancing" }
...
}
STAGGER( "flow" ) {
equation = flow
...
}
STAGGER( "levelset" ) {
equation = levelset
...
}
STAGGER( "redistancing" ) {
equation = levelset_redistancing
...
}
STAGGER( "flow_levelset" ) {
equation = none
...
staggers = { "flow","levelset"}
}
```

```
EQUATION {
flow = navier_stokes
multi_field = algebraic_eulerian
fields = {"Air", "Water"}
}
TIME_SEQUENCE {
staggers = {"flow_fields"}
}
STAGGER("flow_fields" ) {
staggers = {"flow", "field: Air", "field: Water"}
}
STAGGER( "flow" ) {
equation = flow
}
STAGGER( "field: Air" ) {
equation = field
field = "Air"
}
STAGGER( "field: Water" ) {
equation = field
field = "Water"
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
humid_air_model = on
multi_field = advective_diffusive
fields = { "Humid_Air", "Air" }
}
TIME_SEQUENCE {
staggers = { "flow_temp_fields" }
}
STAGGER( "flow_temp_fields" ) {
staggers = { "flow", “temperature”, "field: Humid_Air", "field: Air", }
}
STAGGER( "flow" ) {
equation = flow
}
STAGGER( "temperature" ) {
equation = flow
}
STAGGER( "field: Humid_Air" ) {
equation = field
field = "Air"
}
STAGGER( "field: Air" ) {
equation = field
field = "Air"
}
```

```
EQUATION {
flow = navier_stokes
radiation = p1_model
temperature = advective_diffusive
}
RADIATION {
view_factor_type = hemicube
num_hemicube_bins = 200
max_surface_subdivision = 1
smoothing_type = least_squares
stefan_boltzman_constant = 5.67e-008 # W/m2-K4
num_symmetry_planes = 0
symmetry_center = { 0, 0, 0; } ;
symmetry_direction_1 = { 1, 0, 0; } ;
symmetry_direction_2 = { 0, 1, 0; } ;
symmetry_direction_3 = { 0, 0, 1; } ;
}
```

```
EQUATION {
radiation = discrete_ordinate
radiation_quadrature = S4
temperature = advective_diffusive
}
Alternatively,
EQUATION {
radiation = DO
radiation_quadrature = S4
temperature = advective_diffusive
}
```

When using the k_omega, sst or k_epsilon based turbulence models, two staggers are needed for the turbulence closure; one corresponding to the kinetic energy and one corresponding to the auxiliary equation, eddy frequency for the k-omega and SST based models and dissipation rate for the k-epsilon based models. These equations are solved segregated from each other, necessitating individual staggers for each one. The eddy frequency stagger represents a special case in which the transport quantity used by the stagger deviates from the standard equation for eddy frequency. Instead of solving directly for $\omega $ , AcuSolve constructs the transport equation in terms of 1/sqrt( $\omega $ ). This change of variables does not change the solution produced by the SST and k-omega turbulence models. However, the change of variables does lead to significant improvements in stability. The actual transport quantity (1/sqrt( $\omega $ )) is written as sqrt_eddy_period in the nodal field outputs. The eddy_frequency variable that appears in the nodal outputs is computed based on the solution for sqrt_eddy_period.

There are a few special cases when a differential equation is not solved for each setting that is specified in the EQUATION command. Therefore, some of the turbulence models and mesh equations require no staggers. For the turbulence models large_eddy_simulation and dynamic_model, the turbulence eddy viscosity is automatically computed at the beginning of every stagger based on an algebraic relation. The eulerian mesh equation does not require a stagger since there is no mesh motion at all. There is mesh motion for the specified mesh equation, but since the motion is fully specified at the beginning of each time step no equation needs to be solved and therefore no stagger needs to be given.

The detached_eddy_simulation turbulence equation is a hybrid model combining the accuracy and economy of the Spalart-Allmaras (SA) model for attached boundary layers with the accuracy of the Smagorinsky LES model for separated eddies. Boundary and initial conditions are the same as for the SA model, but a time accurate transient strategy is used as for the LES models. Typically, a static solution using the Spalart-Allmaras model is used as an initial condition. The shear_stress_transport_detached_eddy_simulation model provides another detached eddy simulation option. This model relies on the Shear Stress Transport model (SST) in RANS regions as opposed to Spalart-Allmaras.

The physics of the boundary layer transition process can be included into turbulent simulations by activating one of the two turbulent transition models. These models work in conjunction with the underlying turbulence model (spalart_allmaras, shear_stress_transport, detached_eddy_simulation, and shear_stress_transport_detached_eddy_simulation) to evaluate whether the local boundary layer should be modeled as laminar, transitional, or fully turbulent. Both of the available transition models (intermittency_momentum_thickness_reynolds_number and intermittency) are tuned for external aerodynamic applications. Either model may be applied to internal flows, however, recalibration of the models may be required to establish accuracy for these applications.

```
EQUATION {
flow = navier_stokes
turbulence = shear_stress_transport
transition = intermittency_momentum_thickness_reynolds_number
}
```

The combination of the shear_stress_transport and the intermittency_momentum_thickness_reynolds_number options model the most complete set of turbulent transition physics. This combination is capable of predicting natural transition of the boundary layer as well as by-pass transition.

```
EQUATION {
flow = navier_stokes
turbulence = spalart_allmaras
transition = intermittency
}
```

This combination of settings provides accurate results for natural transition of external flows, for example, flow over airfoils and wings, using a reduced set of equations. This approach produces faster run times and reduced memory use in comparison to the use of the two-equation turbulence and transition models.

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
radiation = enclosure
}
TIME_SEQUENCE {
staggers = { "tflow", "radiation" }
...
}
STAGGER( "tflow" ) {
equation = temperature_flow
...
}
STAGGER( "radiation" ) {
equation = radiation
...
}
```

Solving the temperature and flow equations simultaneously in one stagger can greatly increase the robustness and performance of some simulations, especially ones dominated by free convection. However, this robustness comes at the cost of storing a significantly larger left-hand side matrix. See the STAGGER command for details. Similarly, when simulating viscoelastic materials, all six components of the viscoelastic stress tensor are solved using a single stagger.

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
absolute_temperature_offset = 0.0
absolute_pressure_offset = 0.0
}
DENSITY_MODEL("ideal gas density"){
type = ideal_gas
}
NODAL_INITIAL_CONDITION("absolute pressure"){
variable = pressure
type = constant
constant_value = 101325.0
}
NODAL_INITIAL_CONDITION("absolute temperature"){
variable = temperature
type = constant
constant_value = 293.15
}
SIMPLE_BOUNDARY_CONDITION("constant temperature inflow"){
...
type = inflow
inflow_type = velocity
x_velocity = 32.0
y_velocity = 0.0
z_velocity = 0.0
temperature = 293.15
}
SIMPLE_BOUNDARY_CONDITION("average pressure outflow"){
...
type = outflow
pressure = 101325.0
}
```

```
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
absolute_pressure_offset = 101325.0
absolute_temperature_offset = 273.15
}
DENSITY_MODEL("ideal gas density"){
type = ideal_gas
}
NODAL_INITIAL_CONDITION("gauge pressure"){
variable = pressure
type = constant
constant_value = 0.0
}
NODAL_INITIAL_CONDITION("relative temperature"){
variable = temperature
type = constant
constant_value = 20.0
}
SIMPLE_BOUNDARY_CONDITION("constant temperature inflow"){
...
type = inflow
inflow_type = velocity
x_velocity = 32.0
y_velocity = 0.0
z_velocity = 0.0
temperature = 20.0
}
SIMPLE_BOUNDARY_CONDITION("gauge pressure outflow"){
...
type = outflow
pressure = 0.0
}
```

In the above example, all results will be written in terms of gauge pressure and the relative temperature scale. However, internally, AcuSolve will use the absolute_pressure_offset and absolute_temperature_offset values to convert to absolute scales when calculating the density based on the ideal gas law.

```
EQUATION {
flow = navier_stokes
}
TIME_SEQUENCE {
staggers = { "flow" }
...
}
STAGGER( "flow" ) {
equation = flow
...
}
```

```
RESTART {
}
EQUATION {
flow = navier_stokes
temperature = advective_diffusive
}
TIME_SEQUENCE {
staggers = { "temp" }
...
}
STAGGER( "temp" ) {
equation = temperature
...
}
```

The restarted problem contains both the flow and temperature fields. However, the restarted problem does not solve for the flow field. It is simply carried forward from time step to time step. This flow field is used for the solution of the temperature field.

In the original problem, the temperature equation type could have been set to advective_diffusive. If this had been the case, the initial conditions of the temperature field would have simply been carried forward from time step to time step.

Flow, species, turbulence, and radiation equations apply only to fluid or multifield element sets, while the temperature and mesh equations apply to fluid, multifield, solid and shell element sets. See the medium parameter of the ELEMENT_SET command for more details. The solid or structural equations solved by an external code do not apply to any element sets within AcuSolve. The external code uses a completely separate mesh.

_{max}) is the number of steps used for averaging; and N

_{max}is the maximum number of steps used for averaging, given by running_average_steps. The creation of running average fields does not itself have any effect on the solution. This command only makes such fields available to the following commands:

- NODAL_INITIAL_CONDITION
- SIMPLE_BOUNDARY_CONDITION
- TURBULENCE_WALL
- RUNNING_AVERAGE_OUTPUT