Source code for fastga_he.models.propulsion.components.source.battery.methodology.polarization_curve

# This file is part of FAST-OAD_CS23-HE : A framework for rapid Overall Aircraft Design of Hybrid
# Electric Aircraft.
# Copyright (C) 2022 ISAE-SUPAERO

import numpy as np

import plotly.graph_objects as go


[docs] def ocv(soc): dod = 100.0 - soc ocv = ( -9.65121262e-10 * dod**5.0 + 1.81419058e-07 * dod**4.0 - 1.11814100e-05 * dod**3.0 + 2.26114438e-04 * dod**2.0 - 8.54619953e-03 * dod + 4.12 ) return ocv
[docs] def r_int(soc): dod = 100.0 - soc internal_resistance = ( 2.62771800e-11 * dod**5.0 - 1.48987233e-08 * dod**4.0 + 2.03615618e-06 * dod**3.0 - 1.06451730e-04 * dod**2.0 + 2.13818712e-03 * dod + 3.90444549e-02 ) return internal_resistance
[docs] def v_out(soc, c_rate): current = c_rate * 3.35 return ocv(soc) - r_int(soc) * current
if __name__ == "__main__": soc_c_rate_1 = np.array( [ 100.0, 98.36777778, 96.73555556, 95.10333333, 93.47111111, 91.83888889, 90.20666667, 88.57444444, 86.94222222, 85.31, 83.67777778, 82.04555556, 80.41333333, 78.78111111, 77.14888889, 75.51666667, 73.88444444, 72.25222222, 70.62, 68.98777778, 67.35555556, 65.72333333, 64.09111111, 62.45888889, 60.82666667, 59.19444444, 57.56222222, 55.93, 54.29777778, 52.66555556, 51.03333333, 49.40111111, 47.76888889, 46.13666667, 44.50444444, 42.87222222, 41.24, 39.60777778, 37.97555556, 36.34333333, 34.71111111, 33.07888889, 31.44666667, 29.81444444, 28.18222222, 26.55, 24.91777778, 23.28555556, 21.65333333, 20.02111111, ] ) voltage_c_rate_1 = np.array( [ 3.97764127, 3.95477772, 3.93278881, 3.91165698, 3.89136407, 3.87189125, 3.85321906, 3.83532733, 3.81819518, 3.80180103, 3.78612253, 3.77113654, 3.75681914, 3.74314558, 3.73009025, 3.71762666, 3.70572741, 3.69436419, 3.68350768, 3.6731276, 3.66319263, 3.6536704, 3.64452743, 3.63572913, 3.62723975, 3.61902234, 3.61103872, 3.60324944, 3.59561374, 3.58808952, 3.58063328, 3.57320009, 3.56574356, 3.55821574, 3.55056718, 3.54274675, 3.53470171, 3.52637759, 3.51771815, 3.50866535, 3.49915928, 3.48913812, 3.47853803, 3.46729317, 3.4553356, 3.44259519, 3.42899961, 3.41447424, 3.3989421, 3.38232378, ] ) soc_c_rate_2 = np.array( [ 100.0, 98.36777778, 96.73555556, 95.10333333, 93.47111111, 91.83888889, 90.20666667, 88.57444444, 86.94222222, 85.31, 83.67777778, 82.04555556, 80.41333333, 78.78111111, 77.14888889, 75.51666667, 73.88444444, 72.25222222, 70.62, 68.98777778, 67.35555556, 65.72333333, 64.09111111, 62.45888889, 60.82666667, 59.19444444, 57.56222222, 55.93, 54.29777778, 52.66555556, 51.03333333, 49.40111111, 47.76888889, 46.13666667, 44.50444444, 42.87222222, 41.24, 39.60777778, 37.97555556, 36.34333333, 34.71111111, 33.07888889, 31.44666667, 29.81444444, 28.18222222, 26.55, 24.91777778, 23.28555556, 21.65333333, 20.02111111, ] ) voltage_c_rate_2 = np.array( [ 3.91834584, 3.89295064, 3.86855322, 3.84513305, 3.82266893, 3.80113906, 3.78052095, 3.76079143, 3.74192665, 3.723902, 3.70669212, 3.69027088, 3.67461137, 3.65968581, 3.6454656, 3.63192125, 3.61902236, 3.6067376, 3.59503467, 3.58388028, 3.5732401, 3.56307875, 3.55335977, 3.54404555, 3.53509735, 3.5264752, 3.51813794, 3.5100431, 3.50214692, 3.4944043, 3.48676873, 3.47919229, 3.47162557, 3.46401765, 3.45631603, 3.44846662, 3.44041366, 3.43209966, 3.42346541, 3.41444985, 3.40499007, 3.39502123, 3.38447652, 3.37328708, 3.36138196, 3.34868804, 3.33512998, 3.32063016, 3.30510859, 3.28848287, ] ) soc_c_rate_4 = np.array( [ 100.0, 98.36777778, 96.73555556, 95.10333333, 93.47111111, 91.83888889, 90.20666667, 88.57444444, 86.94222222, 85.31, 83.67777778, 82.04555556, 80.41333333, 78.78111111, 77.14888889, 75.51666667, 73.88444444, 72.25222222, 70.62, 68.98777778, 67.35555556, 65.72333333, 64.09111111, 62.45888889, 60.82666667, 59.19444444, 57.56222222, 55.93, 54.29777778, 52.66555556, 51.03333333, 49.40111111, 47.76888889, 46.13666667, 44.50444444, 42.87222222, 41.24, 39.60777778, 37.97555556, 36.34333333, 34.71111111, 33.07888889, 31.44666667, 29.81444444, 28.18222222, 26.55, 24.91777778, 23.28555556, 21.65333333, 20.02111111, ] ) voltage_c_rate_4 = np.array( [ 3.79975498, 3.76929647, 3.74008205, 3.71208517, 3.68527865, 3.65963466, 3.63512471, 3.61171965, 3.58938959, 3.56810392, 3.54783129, 3.52853957, 3.51019581, 3.49276626, 3.4762163, 3.46051044, 3.44561226, 3.43148444, 3.41808866, 3.40538564, 3.39333503, 3.38189546, 3.37102445, 3.3606784, 3.35081255, 3.34138094, 3.33233638, 3.32363041, 3.31521328, 3.30703385, 3.29903963, 3.29117669, 3.28338961, 3.27562146, 3.26781374, 3.25990636, 3.25183755, 3.24354381, 3.23495993, 3.22601885, 3.21665164, 3.20678746, 3.1963535, 3.18527489, 3.17347468, 3.16087373, 3.14739072, 3.132942, 3.11744158, 3.10080106, ] ) soc_c_rate_05 = np.array( [ 100.0, 98.36777778, 96.73555556, 95.10333333, 93.47111111, 91.83888889, 90.20666667, 88.57444444, 86.94222222, 85.31, 83.67777778, 82.04555556, 80.41333333, 78.78111111, 77.14888889, 75.51666667, 73.88444444, 72.25222222, 70.62, 68.98777778, 67.35555556, 65.72333333, 64.09111111, 62.45888889, 60.82666667, 59.19444444, 57.56222222, 55.93, 54.29777778, 52.66555556, 51.03333333, 49.40111111, 47.76888889, 46.13666667, 44.50444444, 42.87222222, 41.24, 39.60777778, 37.97555556, 36.34333333, 34.71111111, 33.07888889, 31.44666667, 29.81444444, 28.18222222, 26.55, 24.91777778, 23.28555556, 21.65333333, 20.02111111, ] ) voltage_c_rate_05 = np.array( [ 4.00728898, 3.98569126, 3.9649066, 3.94491895, 3.92571164, 3.90726735, 3.88956812, 3.87259527, 3.85632945, 3.84075055, 3.82583773, 3.81156937, 3.79792303, 3.78487547, 3.77240257, 3.76047936, 3.74907994, 3.73817748, 3.72774418, 3.71775126, 3.7081689, 3.69896622, 3.69011125, 3.68157091, 3.67331095, 3.6652959, 3.65748911, 3.64985261, 3.64234716, 3.63493214, 3.62756556, 3.620204, 3.61280255, 3.60531479, 3.59769275, 3.58988682, 3.58184574, 3.57351655, 3.56484452, 3.5557731, 3.54624389, 3.53619656, 3.52556878, 3.51429622, 3.50231242, 3.48954876, 3.47593443, 3.46139628, 3.44585885, 3.42924423, ] ) soc_c_rate_025 = np.array( [ 100.0, 98.36777778, 96.73555556, 95.10333333, 93.47111111, 91.83888889, 90.20666667, 88.57444444, 86.94222222, 85.31, 83.67777778, 82.04555556, 80.41333333, 78.78111111, 77.14888889, 75.51666667, 73.88444444, 72.25222222, 70.62, 68.98777778, 67.35555556, 65.72333333, 64.09111111, 62.45888889, 60.82666667, 59.19444444, 57.56222222, 55.93, 54.29777778, 52.66555556, 51.03333333, 49.40111111, 47.76888889, 46.13666667, 44.50444444, 42.87222222, 41.24, 39.60777778, 37.97555556, 36.34333333, 34.71111111, 33.07888889, 31.44666667, 29.81444444, 28.18222222, 26.55, 24.91777778, 23.28555556, 21.65333333, 20.02111111, ] ) voltage_c_rate_025 = np.array( [ 4.02211284, 4.00114803, 3.9809655, 3.96154994, 3.94288543, 3.9249554, 3.90774265, 3.89122924, 3.87539658, 3.86022531, 3.84569533, 3.83178578, 3.81847497, 3.80574041, 3.79355873, 3.78190571, 3.7707562, 3.76008412, 3.74986243, 3.74006309, 3.73065703, 3.72161413, 3.71290317, 3.70449181, 3.69634654, 3.68843269, 3.6807143, 3.6731542, 3.66571386, 3.65835344, 3.6510317, 3.64370595, 3.63633204, 3.62886432, 3.62125553, 3.61345685, 3.60541775, 3.59708603, 3.5884077, 3.57932698, 3.5697862, 3.55972578, 3.54908416, 3.53779774, 3.52580083, 3.51302555, 3.49940183, 3.4848573, 3.46931723, 3.45270446, ] ) fig = go.Figure() scatter_025 = go.Scatter( x=soc_c_rate_025, y=v_out(soc_c_rate_025, 0.25), mode="lines+markers", name="0.25 C", ) fig.add_trace(scatter_025) scatter_05 = go.Scatter( x=soc_c_rate_05, y=v_out(soc_c_rate_05, 0.5), mode="lines+markers", name="0.5 C", ) fig.add_trace(scatter_05) scatter_1 = go.Scatter( x=soc_c_rate_1, y=v_out(soc_c_rate_1, 1.0), mode="lines+markers", name="1 C", ) fig.add_trace(scatter_1) scatter_2 = go.Scatter( x=soc_c_rate_2, y=v_out(soc_c_rate_2, 2), mode="lines+markers", name="2 C", ) fig.add_trace(scatter_2) scatter_4 = go.Scatter( x=soc_c_rate_4, y=v_out(soc_c_rate_4, 4), mode="lines+markers", name="4 C", ) fig.add_trace(scatter_4) fig.update_layout( xaxis=dict(autorange="reversed"), title_text="Polarization curve of the reference cell", title_x=0.5, yaxis_title="Terminal voltage [V]", xaxis_title="SOC [%]", legend=dict(yanchor="top", y=0.99, xanchor="right", x=0.99), height=800, width=1600, ) fig.show() fig.write_image("polarization_curve.pdf")