Source code for RCAIDE.Library.Methods.Powertrain.Sources.Batteries.Common.compute_module_properties

# RCAIDE/Methods/Powertrain/Sources/Batteries/Common/compute_module_properties.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------

from RCAIDE.Framework.Core import Units 
import  numpy as  np

# ----------------------------------------------------------------------------------------------------------------------
#  METHOD
# ----------------------------------------------------------------------------------------------------------------------  
[docs] def compute_module_properties(battery_module): """ Calculates module level properties of battery module using cell properties and module configuration. Parameters ---------- battery_module : BatteryModule The battery module with the following attributes: - cell.nominal_capacity : float Nominal capacity of a single cell [Ah] - cell.maximum_voltage : float Maximum voltage of a single cell [V] - cell.mass : float Mass of a single cell [kg] - electrical_configuration.series : int Number of cells in series - electrical_configuration.parallel : int Number of cells in parallel - geometrtic_configuration : GeometricConfiguration Object containing geometric layout information - volume_packaging_factor : float Factor accounting for additional volume due to packaging - orientation_euler_angles : numpy.ndarray Euler angles for module orientation [rad] - BMS_additional_weight_factor : float Factor accounting for battery management system weight Returns ------- None This function modifies the battery_module object in-place, setting the following attributes: - length : float Length of the battery module [m] - width : float Width of the battery module [m] - height : float Height of the battery module [m] - mass_properties.mass : float Total mass of the battery module [kg] - specific_energy : float Specific energy of the battery module [Wh/kg] - maximum_energy : float Maximum energy capacity of the battery module [J] - specific_power : float Specific power of the battery module [W/kg] - maximum_power : float Maximum power output of the battery module [W] - maximum_voltage : float Maximum voltage of the battery module [V] - initial_maximum_energy : float Initial maximum energy capacity [J] - nominal_capacity : float Nominal capacity of the battery module [Ah] - voltage : float Voltage of the battery module [V] Notes ----- This function calculates the physical and electrical properties of a battery module based on the properties of its constituent cells and the module configuration. The physical dimensions are calculated based on the geometric layout of cells, including spacing between cells and a volume packaging factor. The module orientation can be adjusted using Euler angles. The electrical properties are calculated based on the series-parallel configuration of cells, with series connections increasing voltage and parallel connections increasing capacity. **Major Assumptions** * Total battery module pack mass can be modeled with a build-up factor for battery module casing, internal wires, thermal management system and battery module management system. References ---------- [1] Chin, J. C., Schnulo, S. L., Miller, T. B., Prokopius, K., and Gray, J., "Battery Performance Modeling on Maxwell X-57", AIAA Scitech, San Diego, CA, 2019. URL http://openmdao.org/pubs/chin_battery_performance_x57_2019.pdf. """ series_e = battery_module.electrical_configuration.series parallel_e = battery_module.electrical_configuration.parallel normal_count = battery_module.geometrtic_configuration.normal_count parallel_count = battery_module.geometrtic_configuration.parallel_count stacking_rows = battery_module.geometrtic_configuration.stacking_rows if int(parallel_e*series_e) != int(normal_count*parallel_count): pass #raise Exception('Number of cells in gemetric layout not equal to number of cells in electric circuit configuration ') normal_spacing = battery_module.geometrtic_configuration.normal_spacing parallel_spacing = battery_module.geometrtic_configuration.parallel_spacing volume_factor = battery_module.volume_packaging_factor cell_diameter = battery_module.cell.diameter cell_height = battery_module.cell.height euler_angles = battery_module.orientation_euler_angles weight_factor = battery_module.BMS_additional_weight_factor x1 = normal_count * (cell_diameter + normal_spacing) * volume_factor # distance in the module-level normal direction x2 = parallel_count * (cell_diameter + parallel_spacing) * volume_factor # distance in the module-level parallel direction x3 = cell_height * volume_factor # distance in the module-level height direction length = x1 / stacking_rows width = x2 height = x3 *stacking_rows if euler_angles[0] == (np.pi / 2): x1prime = x2 x2prime = -x1 x3prime = x3 if euler_angles[1] == (np.pi / 2): x1primeprime = -x3prime x2primeprime = x2prime x3primeprime = x1prime if euler_angles[2] == (np.pi / 2): length = x1primeprime width = x3primeprime height = -x2primeprime # store length, width and height battery_module.length = length battery_module.width = width battery_module.height = height amp_hour_rating = battery_module.cell.nominal_capacity total_battery_assemply_mass = battery_module.cell.mass * series_e * parallel_e battery_module.mass_properties.mass = total_battery_assemply_mass*weight_factor battery_module.specific_energy = (amp_hour_rating*battery_module.cell.maximum_voltage)/battery_module.cell.mass * Units.Wh/Units.kg battery_module.maximum_energy = total_battery_assemply_mass*battery_module.specific_energy battery_module.specific_power = battery_module.specific_energy/battery_module.cell.nominal_capacity battery_module.maximum_power = battery_module.specific_power*battery_module.mass_properties.mass battery_module.maximum_voltage = battery_module.cell.maximum_voltage * series_e battery_module.initial_maximum_energy = battery_module.maximum_energy battery_module.nominal_capacity = battery_module.cell.nominal_capacity* parallel_e battery_module.voltage = battery_module.maximum_voltage