# BATTERY_MODEL

Specifies a battery model and its parameters.

## Type

AcuSolve Command

## Syntax

BATTERY_MODEL("name") {parameters...}

## Parameters

- battery_model_type (enumerated) [=first_order]
- Type of battery model.
- first_order_ecm
- Equivalent circuit model with a single ohmic resistance in series with one parallel RC pair to represent the dynamic voltage transients (or diffusion voltages).
- second_order_ecm
- Equivalent circuit model with a single ohmic resistance in series with two parallel RC pairs to represent the dynamic voltage transients (or diffusion voltages).

- ohmic_resistance_type (enumerated) [=constant]
- Ohmic resistance in first or second order ECM model.
- constant or const
- Constant ohmic resistance. Requires ohmic_resistance.
- piecewise_linear or linear
- Piecewise linear curve fit ohmic resistance profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit ohmic resistance profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit electrical current profile. Requires curve_fit_values and curve_fit_variable.

- ohmic_resistance (real) [=0.0]
- Constant value of ohmic resistance. Used when ohmic_resistance_type = constant.
- ohmic_resistance_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/isotropic ohmic resistance data values. The independent variable is either state of charge or time. Used with ohmic_resistance_type = piecewise_linear or ohmic_resistance_type = cubic_spline.
- ohmic_resistance_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for ohmic resistance. Used with
ohmic_resistance_type =
piecewise_linear or
ohmic_resistance_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- ohmic_resistance_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for ohmic resistance. Used with ohmic_resistance_type = piecewise_bilinear.
- ohmic_resistance_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for ohmic resistance. Used with
ohmic_resistance_type =
piecewise_bilinear.
- soc
- state_of_charge

- ohmic_resistance_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for ohmic resistance. Used with
ohmic_resistance_type =
piecewise_bilinear.
- temp
- temperature

- polarization_resistance1_type (enumerated) [=constant]
- Polarization resistance for the first RC pair in first or second order ECM
model.
- constant or const
- Constant polarization resistance. Requires polarization_resistance1.
- piecewise_linear or linear
- Piecewise linear curve fit polarization resistance 1 profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit polarization resistance 1 profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit polarization resistance 1 profile. Requires curve_fit_values and curve_fit_variable.

- polarization_resistance1 (real) [=0.0]
- Constant value of polarization resistance 1. When polarization_resistance1_type = constant.
- polarization_resistance1_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/isotropic polarization resistance 1 data values. The independent variable is either state of charge or time. Used with polarization_resistance1_type = piecewise_linear or polarization_resistance1_type = cubic_spline.
- polarization_resistance1_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for polarization resistance 1. Used
with polarization_resistance1_type =
piecewise_linear or
polarization_resistance1_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- polarization_resistance1_soc_temperature_values (2D array) [={0,0;0,0}]
- Independent variable of the curve fit for polarization resistance 1. Used with polarization_resistance1_type = piecewise_bilinear.
- polarization_resistance1_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for polarization resistance 1.
Used with polarization_resistance1_type =
piecewise_bilinear.
- soc
- state_of_charge

- polarization_resistance1_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for polarization resistance 1.
Used with polarization_resistance1_type =
piecewise_bilinear.
- temp
- temperature

- polarization_resistance2_type (enumerated) [=constant]
- Polarization resistance for the second RC in second order ECM model.
- constant or const
- Constant polarization resistance. Requires polarization_resistance2.
- piecewise_linear or linear
- Piecewise linear curve fit polarization resistance 2 profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit polarization resistance 2 profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit polarization resistance 2 profile. Requires curve_fit_values and curve_fit_variable.

- polarization_resistance2 (real) [=0.0]
- Constant value of polarization resistance 2. When polarization_resistance2_type = constant.
- polarization_resistance2_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/isotropic polarization resistance 2 data values. The independent variable is either state of charge or time. Used with polarization_resistance2_type = piecewise_linear or polarization_resistance2_type = cubic_spline.
- polarization_resistance2_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for polarization resistance 2. Used
with polarization_resistance2_type =
piecewise_linear or
polarization_resistance2_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- polarization_resistance2_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for polarization resistance 2. Used with polarization_resistance2_type = piecewise_bilinear.
- polarization_resistance2_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for polarization resistance 2.
Used with polarization_resistance2_type =
piecewise_bilinear.
- soc
- state_of_charge

- polarization_resistance2_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for polarization resistance 2.
Used with polarization_resistance2_type =
piecewise_bilinear.
- temp
- temperature

- polarization_capacitance1_type (enumerated) [=constant]
- Polarization capacitance for the first RC pair in first or second order ECM
model.
- constant or const
- Constant polarization capacitance. Requires polarization_capacitance1.
- piecewise_linear or linear
- Piecewise linear curve fit polarization capacitance 1 profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit polarization capacitance 1 profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit polarization capacitance 1 profile. Requires curve_fit_values and curve_fit_variable.

- polarization_capacitance1 (real) [=0.0]
- Constant value of polarization capacitance 1. When polarization_capacitance1_type = constant.
- polarization_capacitance1_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/isotropic polarization capacitance 1 data values. The independent variable is either state of charge or time. Used with polarization_capacitance1_type = piecewise_linear or polarization_capacitance1_type = cubic_spline.
- polarization_capacitance1_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for polarization capacitance 1. Used
with polarization_capacitance1_type =
piecewise_linear or
polarization_capacitance1_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- polarization_capacitance1_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for polarization capacitance 1. Used with polarization_capacitance1_type = piecewise_bilinear.
- polarization_capacitance1_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for polarization capacitance 1.
Used with polarization_capacitance1_type =
piecewise_bilinear.
- soc
- state_of_charge

- polarization_capacitance1_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for polarization capacitance 1.
Used with polarization_capacitance1_type =
piecewise_bilinear.
- temp
- temperature

- polarization_capacitance2_type (enumerated) [=constant]
- Polarization capacitance for the second RC pair in second order ECM
model.
- constant or const
- Constant polarization capacitance. Requires polarization_capacitance2.
- piecewise_linear or linear
- Piecewise linear curve fit polarization capacitance 2 profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit polarization capacitance 2 profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit polarization capacitance 2 profile. Requires curve_fit_values and curve_fit_variable.

- polarization_capacitance2 (real) [=0.0]
- Constant value of polarization capacitance 2. When polarization_capacitance2_type = constant.
- polarization_capacitance2_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable/isotropic polarization capacitance 2 data values. The independent variable is either state of charge or time. Used with polarization_capacitance2_type = piecewise_linear or polarization_capacitance2_type = cubic_spline.
- polarization_capacitance2_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for polarization capacitance 2. Used
with polarization_capacitance2_type =
piecewise_linear or
polarization_capacitance2_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- polarization_capacitance2_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for polarization capacitance 2. Used with polarization_capacitance2_type = piecewise_bilinear.
- battery_capacity (real) [=5.0]
- The capacity of a battery cell measured in Ah (Amp-hr).
- polarization_capacitance2_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for polarization capacitance 2.
Used with polarization_capacitance2_type =
piecewise_bilinear.
- soc
- state_of_charge

- polarization_capacitance2_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for polarization capacitance 2.
Used with polarization_capacitance2_type =
piecewise_bilinear.
- temp
- temperature

- open_circuit_voltage_type (enumerated) [=constant]
- Open circuit potential is the potential established between positive and
negative electrode terminals when current is zero.
- constant or const
- Constant open circuit potential. Requires open_circuit_voltage.
- piecewise_linear or linear
- Piecewise linear curve fit open circuit potential profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit open circuit potential profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit open circuit potential profile. Requires curve_fit_values and curve_fit_variable.

- open_circuit_voltage (real) [=0.0]
- Constant value of open circuit potential. When open_circuit_voltage_type = constant.
- open_circuit_voltage_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable open circuit potential data values. The independent variable is either state of charge or time. Used with open_circuit_voltage = piecewise_linear or open_circuit_voltage_type = cubic_spline.
- open_circuit_voltage_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for open circuit potential. Used with
open_circuit_voltage =
piecewise_linear or
open_circuit_voltage_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- open_circuit_voltage_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for open circuit potential. Used with open_circuit_voltage_type = piecewise_bilinear.
- open_circuit_voltage_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for open circuit potential. Used
with open_circuit_voltage_type =
piecewise_bilinear.
- soc
- state_of_charge

- open_circuit_voltage_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for open circuit potential.
Used with open_circuit_voltage_type =
piecewise_bilinear.
- temp
- temperature

- entropic_heat_coefficient_type (enumerated) [=constant]
- Entropic heat coefficient is the derivative of open circuit potential with
respect to temperature. It represents reversible heat generation in the
battery cell.
- constant or const
- Constant entropic heat coefficient. Requires entropic_heat_coefficient.
- piecewise_linear or linear
- Piecewise linear curve fit entropic heat coefficient profile. Requires curve_fit_values and curve_fit_variable.
- piecewise_bilinear or bilinear
- Piecewise bilinear curve fit entropic heat coefficient profile. Requires curve_fit_values and curve_fit_variable.
- cubic_spline or spline
- Cubic spline curve fit entropic heat coefficient profile. Requires curve_fit_values and curve_fit_variable.

- entropic_heat_coefficient (real) [=0.0]
- Constant value of entropic heat coefficient. When entropic_heat_coefficient_type = constant.
- entropic_heat_coefficient_curve_fit_values (array) [={0,0}]
- A two-column array of independent-variable entropic heat coefficient data values. The independent variable is either state of charge or time. Used with entropic_heat_coefficient_type = piecewise_linear or entropic_heat_coefficient_type = cubic_spline.
- entropic_heat_curve_fit_variable (enumerated) [=soc]
- Independent variable of the curve fit for entropic heat coefficient. Used
with entropic_heat_coefficient_type =
piecewise_linear or
entropic_heat_coefficient_type =
cubic_spline.
- soc
- state_of_charge
- time
- time

- entropic_heat_soc_temperature_values (2D array) [={0,0;0,1}]
- Independent variable of the curve fit for entropic heat coefficient. Used with entropic_heat_coefficient_type = piecewise_bilinear.
- entropic_heat_bilinear_curve_fit_row_variable [=soc]
- Independent row variable of the curve fit for entropic heat coefficient.
Used with entropic_heat_coefficient_type =
piecewise_bilinear.
- soc
- state_of_charge

- entropic_heat_bilinear_curve_fit_column_variable [=temperature]
- Independent column variable of the curve fit for entropic heat coefficient.
Used with entropic_heat_coefficient_type =
piecewise_bilinear.
- temp
- temperature

## Description

In an ECM model the electric behavior, for example, the voltage-current response, is modeled using a phenomenological electric circuit approach. For example, in a second order ECM (see above figure), that is, two RC pairs, the governing set of ODEs are given by:

where
${U}_{T}$
is the terminal voltage,
${V}_{o\text{\hspace{0.17em}}c}$
is the open circuit voltage,
${R}_{o}$
is the ohmic resistance,
${R}_{1}$
is the polarization resistance of the first RC pair,
${R}_{2}$
is the polarization resistance of the second RC
pair,
${C}_{1}$
is the polarization capacitance of the first RC
pair,
$C$
_{2} is the polarization capacitance of the
second RC pair, and
$i(t)$
is the input current. The output terminal voltage is
therefore dependent on the input current and the ECM parameters (
${R}_{o}$
,
${R}_{1}$
,
${R}_{2}$
,
${C}_{1}$
) which can be both state of charge and temperature
dependent.

The battery state of charge (soc) is updated using coulomb counting:

The equivalent circuit models are enabled using the BATTERY_MODEL command with battery_model_type = first_order_ecm or battery_model_type = second_order_ecm.

```
BATTERY_MODEL( "ecm" ) {
battery_model_type = second_order_ecm
ohmic_resistance_type = constant
ohmic_resistance = 0.011
polarization_resistance1_type = constant
polarization_resistance1 = 0.0063
polarization_resistance2_type = constant
polarization_resistance2 = 0.0043
polarization_capacitance1_type = constant
polarization_capacitance1 = 657.42
polarization_capacitance2_type = constant
polarization_capacitance2 = 6574.23
open_circuit_voltage_type = piecewise_linear
open_circuit_voltage_curve_fit_values = Read( "open_circuit_voltage.fit" )
entropic_heat_coefficient_type = constant
entropic_heat_coefficient = 0.0
battery_capacity = 18000
}
```

`open_circuit_voltage.fit`

” defines the file
with the ocp versus soc relationship, for example:```
1.0 4.2828
0.99 4.2681
0.98 4.2538
…
```

For ohmic resistance, polarization resistance 1 and 2, polarization capacitance 1 and 2, open circuit voltage, and entropic heat coefficient, you can also have them as a variable for both soc and temperature. Two example inputs are given below:

```
BATTERY_MODEL( "ecm" ) {
...
ohmic_resistance_type = piecewise_bilinear
ohmic_resistance_soc_temperature_values = {
0, 0.2, 0.4, 0.6, 0.8, 1.0 ;
298, 0.011, 0.0111, 0.0112, 0.0113, 0.0114 ;
333, 0.0115, 0.0116, 0.0117, 0.0118, 0.0119 ; }
...
}
```

```
BATTERY_MODEL( "ecm" ) {
…
open_circuit_voltage_type = piecewise_bilinear
open_circuit_voltage_soc_temperature_values = {
0, 0.2, 0.4, 0.6, 0.8, 1.0 ;
298, 3.783, 3.896, 3.968, 4.039, 4.147 ;
333, 3.782, 3.903, 3.976, 4.056, 4.150 ;
…
}
```

Bernardi’s heat generation equation

In this approach, a source term that represents the irreversible and reversible heat generation is included in the energy equation, given by:

The first term of the RHS represents the cell overpotential and includes irreversibilities, such as ohmic losses and mass transport limitations, while the second term represents entropic heat generation. The last two terms represent ohmic heat generation and are only enabled when electric_potential = battery_msmd. Bernardi’s heat generation equation is automatically included in the energy equation as a source term for all battery models. The entropic heat is included in the BATTERY_MODEL and can be both temperature and state_of_charge dependent.