|
27 | 27 | w = 0.207 / factor
|
28 | 28 | A = h * w
|
29 | 29 | l_s = 2.5e-5
|
30 |
| - l1d = (l_n + l_p + l_s) |
| 30 | + l1d = l_n + l_p + l_s |
31 | 31 | vol = h * w * l1d
|
32 | 32 | vol_cm3 = vol * 1e6
|
33 | 33 | tot_cap = 0.0
|
34 | 34 | tot_time = 0.0
|
35 | 35 | fig, axes = plt.subplots(1, 2, sharey=True)
|
36 | 36 | I_mag = 1.01 / factor
|
37 |
| - print('*' * 30) |
| 37 | + print("*" * 30) |
38 | 38 | for enum, I_app in enumerate([-1.0, 1.0]):
|
39 | 39 | I_app *= I_mag
|
40 | 40 | # load model
|
|
44 | 44 | # load parameter values and process model and geometry
|
45 | 45 | param = model.default_parameter_values
|
46 | 46 | param.update(
|
47 |
| - {"Electrode height [m]": h, |
48 |
| - "Electrode width [m]": w, |
49 |
| - "Negative electrode thickness [m]": l_n, |
50 |
| - "Positive electrode thickness [m]": l_p, |
51 |
| - "Separator thickness [m]": l_s, |
52 |
| - "Lower voltage cut-off [V]": 2.8, |
53 |
| - "Upper voltage cut-off [V]": 4.7, |
54 |
| - "Maximum concentration in negative electrode [mol.m-3]": 25000, |
55 |
| - "Maximum concentration in positive electrode [mol.m-3]": 50000, |
56 |
| - "Initial concentration in negative electrode [mol.m-3]": 12500, |
57 |
| - "Initial concentration in positive electrode [mol.m-3]": 25000, |
58 |
| - "Negative electrode surface area density [m-1]": 180000.0, |
59 |
| - "Positive electrode surface area density [m-1]": 150000.0, |
60 |
| - "Current function [A]": I_app, |
61 |
| - } |
| 47 | + { |
| 48 | + "Electrode height [m]": h, |
| 49 | + "Electrode width [m]": w, |
| 50 | + "Negative electrode thickness [m]": l_n, |
| 51 | + "Positive electrode thickness [m]": l_p, |
| 52 | + "Separator thickness [m]": l_s, |
| 53 | + "Lower voltage cut-off [V]": 2.8, |
| 54 | + "Upper voltage cut-off [V]": 4.7, |
| 55 | + "Maximum concentration in negative electrode [mol.m-3]": 25000, |
| 56 | + "Maximum concentration in positive electrode [mol.m-3]": 50000, |
| 57 | + "Initial concentration in negative electrode [mol.m-3]": 12500, |
| 58 | + "Initial concentration in positive electrode [mol.m-3]": 25000, |
| 59 | + "Negative electrode surface area density [m-1]": 180000.0, |
| 60 | + "Positive electrode surface area density [m-1]": 150000.0, |
| 61 | + "Current function [A]": I_app, |
| 62 | + } |
62 | 63 | )
|
63 | 64 | param.process_model(model)
|
64 | 65 | param.process_geometry(geometry)
|
65 | 66 | s_var = pybamm.standard_spatial_vars
|
66 |
| - var_pts = {s_var.x_n: 5, s_var.x_s: 5, s_var.x_p: 5, |
67 |
| - s_var.r_n: 5, s_var.r_p: 10} |
| 67 | + var_pts = { |
| 68 | + s_var.x_n: 5, |
| 69 | + s_var.x_s: 5, |
| 70 | + s_var.x_p: 5, |
| 71 | + s_var.r_n: 5, |
| 72 | + s_var.r_p: 10, |
| 73 | + } |
68 | 74 | # set mesh
|
69 | 75 | mesh = pybamm.Mesh(geometry, model.default_submesh_types, var_pts)
|
70 | 76 | # discretise model
|
|
74 | 80 | t_eval = np.linspace(0, 0.2, 100)
|
75 | 81 | sol = model.default_solver.solve(model, t_eval)
|
76 | 82 | var = "Positive electrode average extent of lithiation"
|
77 |
| - xpext = pybamm.ProcessedVariable(model.variables[var], |
78 |
| - sol.t, sol.y, mesh=mesh) |
| 83 | + xpext = pybamm.ProcessedVariable(model.variables[var], sol.t, sol.y, mesh=mesh) |
79 | 84 | var = "Negative electrode average extent of lithiation"
|
80 |
| - xnext = pybamm.ProcessedVariable(model.variables[var], |
81 |
| - sol.t, sol.y, mesh=mesh) |
| 85 | + xnext = pybamm.ProcessedVariable(model.variables[var], sol.t, sol.y, mesh=mesh) |
82 | 86 | var = "X-averaged positive particle surface concentration"
|
83 |
| - xpsurf = pybamm.ProcessedVariable(model.variables[var], |
84 |
| - sol.t, sol.y, mesh=mesh) |
| 87 | + xpsurf = pybamm.ProcessedVariable(model.variables[var], sol.t, sol.y, mesh=mesh) |
85 | 88 | var = "X-averaged negative particle surface concentration"
|
86 |
| - xnsurf = pybamm.ProcessedVariable(model.variables[var], |
87 |
| - sol.t, sol.y, mesh=mesh) |
88 |
| - time = pybamm.ProcessedVariable(model.variables["Time [h]"], |
89 |
| - sol.t, sol.y, mesh=mesh) |
| 89 | + xnsurf = pybamm.ProcessedVariable(model.variables[var], sol.t, sol.y, mesh=mesh) |
| 90 | + time = pybamm.ProcessedVariable( |
| 91 | + model.variables["Time [h]"], sol.t, sol.y, mesh=mesh |
| 92 | + ) |
90 | 93 | # Coulomb counting
|
91 | 94 | time_hours = time(sol.t)
|
92 | 95 | dc_time = np.around(time_hours[-1], 3)
|
93 | 96 | # Capacity mAh
|
94 | 97 | cap = np.absolute(I_app * 1000 * dc_time)
|
95 | 98 | cap_time = np.absolute(I_app * 1000 * time_hours)
|
96 |
| - axes[enum].plot(cap_time, |
97 |
| - xnext(sol.t), 'r-', label='Average Neg') |
98 |
| - axes[enum].plot(cap_time, |
99 |
| - xpext(sol.t), 'b-', label='Average Pos') |
100 |
| - axes[enum].plot(cap_time, |
101 |
| - xnsurf(sol.t), 'r--', label='Surface Neg') |
102 |
| - axes[enum].plot(cap_time, |
103 |
| - xpsurf(sol.t), 'b--', label='Surface Pos') |
104 |
| - axes[enum].set_xlabel('Capacity [mAh]') |
| 99 | + axes[enum].plot(cap_time, xnext(sol.t), "r-", label="Average Neg") |
| 100 | + axes[enum].plot(cap_time, xpext(sol.t), "b-", label="Average Pos") |
| 101 | + axes[enum].plot(cap_time, xnsurf(sol.t), "r--", label="Surface Neg") |
| 102 | + axes[enum].plot(cap_time, xpsurf(sol.t), "b--", label="Surface Pos") |
| 103 | + axes[enum].set_xlabel("Capacity [mAh]") |
105 | 104 | handles, labels = axes[enum].get_legend_handles_labels()
|
106 | 105 | axes[enum].legend(handles, labels)
|
107 | 106 | if I_app < 0.0:
|
108 |
| - axes[enum].set_ylabel('Extent of Lithiation, Elecrode Ratio: ' |
109 |
| - + str(e_ratio)) |
110 |
| - axes[enum].title.set_text('Charge') |
| 107 | + axes[enum].set_ylabel( |
| 108 | + "Extent of Lithiation, Elecrode Ratio: " + str(e_ratio) |
| 109 | + ) |
| 110 | + axes[enum].title.set_text("Charge") |
111 | 111 | else:
|
112 |
| - axes[enum].title.set_text('Discharge') |
113 |
| - print('Applied Current', I_app, 'A', 'Time', |
114 |
| - dc_time, 'hrs', 'Capacity', cap, 'mAh') |
| 112 | + axes[enum].title.set_text("Discharge") |
| 113 | + print( |
| 114 | + "Applied Current", |
| 115 | + I_app, |
| 116 | + "A", |
| 117 | + "Time", |
| 118 | + dc_time, |
| 119 | + "hrs", |
| 120 | + "Capacity", |
| 121 | + cap, |
| 122 | + "mAh", |
| 123 | + ) |
115 | 124 | tot_cap += cap
|
116 | 125 | tot_time += dc_time
|
117 | 126 |
|
118 |
| - print('Anode : Cathode thickness', e_ratio) |
119 |
| - print('Total Charge/Discharge Time', tot_time, 'hrs') |
120 |
| - print('Total Capacity', np.around(tot_cap, 3), 'mAh') |
| 127 | + print("Anode : Cathode thickness", e_ratio) |
| 128 | + print("Total Charge/Discharge Time", tot_time, "hrs") |
| 129 | + print("Total Capacity", np.around(tot_cap, 3), "mAh") |
121 | 130 | specific_cap = np.around(tot_cap, 3) / vol_cm3
|
122 |
| - print('Total Capacity', specific_cap, 'mAh.cm-3') |
| 131 | + print("Total Capacity", specific_cap, "mAh.cm-3") |
123 | 132 | capacities.append(tot_cap)
|
124 | 133 | specific_capacities.append(specific_cap)
|
125 | 134 |
|
126 | 135 | fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
|
127 | 136 | ax1.plot(thicknesses / l_p, capacities)
|
128 | 137 | ax2.plot(thicknesses / l_p, specific_capacities)
|
129 |
| -ax1.set_ylabel('Capacity [mAh]') |
130 |
| -ax2.set_ylabel('Specific Capacity [mAh.cm-3]') |
131 |
| -ax2.set_xlabel('Anode : Cathode thickness') |
| 138 | +ax1.set_ylabel("Capacity [mAh]") |
| 139 | +ax2.set_ylabel("Specific Capacity [mAh.cm-3]") |
| 140 | +ax2.set_xlabel("Anode : Cathode thickness") |
0 commit comments