# 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: Operating temperature should be absolute temperature.
- discrete_ordinate
- The Discrete Ordinates or DO model. Used with
temperature =
advective_diffusive.Note: 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.
- edem_coupling (boolean) [=off]
- Flag specifying whether to conduct AcuSolve-EDEM one-way or two-way coupling. When set to on, multi_field should be set to either algebraic_eulerian for one-way coupling or should be set to eulerian_eulerian for two-way coupling.
- 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. This option is also required for AcuSolve-EDEM one-way transient coupling.
- eulerian _eulerian
- Use the Eulerian Eulerian method to model multiple dispersed fields with one carrier field. Requires fields. This option is also required for AcuSolve-EDEM two-way transient coupling.
- 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, together, or EDEM coupling (one-way and two-way), 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.
- ale_ogden
- Enhanced arbitrary mesh movement useful for extreme mesh deformation cases.
- specified or enforced
- Specified mesh movement.

- optimization (boolean) [=off]
- Flag to turn on optimization. This requires an OPTIMIZATION command and either one or more DESIGN_VARIABLE commands, or a single DESIGN_VARIABLES_FIELD command for topology optimization. If the design variables control change in geometry, mesh has to be set to specified or arbitrary_lagrangian_eulerian.
- topology_flow or topoflow (enumerated) [= none]
- Topology flow equation type.
- none
- No adjoint linearized Navier-Stokes equations are solved.
- adjoint_topology_flow
- Adjoint linearized Navier-Stokes equations.

- design_topology_filter or topofilt (enumerated) [= none]
- Design topology filtering method. Valid only when
toplogy_flow =
adjoint_topology_flow.
- none
- No design topology filtering.
- laplacian_topology
- Design topology filtering. Requires min_filter_radius in the DESIGN_VARIABLE_FIELD command.

- 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: gravitational_acceleration and gravity under GRAVITY, as a part of BODY_FORCE, are cumulative.
- porous_media_velocity_type (enumerated) [=superficial]
- Porous media velocity type. Requires the porosity model. Type of the
porosity model is set to constant.
- superficial
- Superficial velocity porous approach.
- physical
- Physical velocity porous approach.

When porous_media_velocity_type=superficial, velocity is calculated based on volumetric flow rate and the cross section. When porous_media_velocity_type=physical, a more accurate representation of velocity inside the porous media can be obtained by solving the continuity and the momentum equation using the intrinsic/physical averaging method.

- electric_potential (enumerated) [=none]
- Electric potential equation type.
- none
- No charge field.
- Joule_heating
- Solution of charge conservation equation coupled to the energy equation.
- battery_msmd
- Solution of charge conservation equation coupled to the energy with batteries modeled using a multi-scale multi-dimensional approach.
- battery_joule_heating
- Solution of charge conservation equation coupled to the energy with batteries modeled using an equivalent circuit model.

Enables the solution of the charge conservation equation on the assumption of electrostatics. If electric_potential = joule_heating the charge conservation equation is coupled to the energy equation via a source term based on Joule’s first law.

Battery modeling is enabled using battery_msmd or battery_joule_heating. The former uses a multi-scale approach where there is a cell scale and a sub-domain electrochemical scale. In this model two potential fields are resolved at the cell scale, which represent the potentials of the negative and positive current collectors. The sub-domain model, currently only supporting ECM models, represents the voltage-current response of the battery derived from the solution of an ODE system. Inter-domain coupling between the sub-domain and cell scale is achieved via averaging source terms, to eliminate any spatial dependence, in the dual electric potential and energy equations. Cell scale to sub-domain coupling is achieved using spatially resolved variables directly in the sub-domain equations. The battery_joule_heating model also uses ECM models but applies them as source terms in the energy equation and boundary conditions based on current and terminal voltage for the electric potential in the connected components of the batteries, for example, terminals/tabs and busbars. Both battery approaches use joule heating in the terminals/tabs and busbars.

## Description

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

The basic continuity, momentum, energy, and species equations are:

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. When modeling compressible flow the use of absolute_pressure_offset and absolute_temperature_offset is not recommended. Instead, you should define boundary and initial conditions in terms of absolute values.

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

```
EQUATION {
flow = navier_stokes
topology_flow = adjoint_topology_flow
optimization = on
}
```

```
EQUATION {
flow = navier_stokes
topology_flow = adjoint_topology_flow
optimization = on
turbulence = spalart_allmaras
}
```

If running_average is set to on, then a running average field will be created for every equation field in the problem. A running average field is defined by

_{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

## Multi-Scale Battery Modeling Approach

For pouch batteries the thermal-electric response can be modeled using a multi-scale approach which bridges the scale between the cell domain and the electrode scale. To achieve this, a multi-scale multi-domain approach (electric_potential = battery_msmd) is utilized. In this approach, the electric potential fields are modeled in a cell composite, or more specifically the current collector, together with the thermal field. This is then coupled using a multi-scale approach down to the subscale, where the electrochemical phenomena, that is, the inner workings of the battery, are modeled.

Cell scale

At the cell scale the temperature and a pair of electric potentials are solved. More specifically, the 3D battery geometry is treated as a homogenized medium with orthotropic electrical and thermal conductivities. Positive and negative electric potential is computed in the battery from charge conservation at the current collectors of the cell composite. For the negative current collector the governing equation is:

Equivalently at the positive current collector the governing equation is:

where $j$ is the transfer current density source term and is modeled through an electrochemical sub-model. The above comes with associated boundary conditions such as current, for example, constant current discharge, or voltage.

The energy equation in AcuSolve is modified by an additional source term that couples both sources of ohmic (or joule) heating from the current collectors and electrochemical reaction heat. The source term is given by:

where the first two terms are ohmic heating and the last is electrochemical heating (from the electrochemical sub-model). Currently, AcuSolve supports a single type of electrochemical sub-model: an equivalent circuit type model. This model supports first and second order ECM models.

## Battery ECM with Joule Heating Modeling Approach

In this approach the same ECM model as the MSMD model is used, however the electric potential fields are not modeled explicitly in the cell; they are modeled in only in the electrical connected components, for example, tabs/terminals and busbars. The ECM model calculates the voltage drop and current through the homogenized part of the battery cell and applies the associated boundary/interface conditions automatically. This approach is enabled using the following command electric potential = battery_joule_heating in the EQUATION section.