julia
using BattMo, GLMakie
model_settings = load_model_settings(; from_default_set = "P2D")
model_settings["SEIModel"] = "Bolay"
cell_parameters = load_cell_parameters(; from_default_set = "Chen2020")
cycling_protocol = load_cycling_protocol(; from_default_set = "CCCV")
simulation_settings = load_simulation_settings(; from_default_set = "P2D")
model_setup = LithiumIonBattery(; model_settings)
cycling_protocol["TotalNumberOfCycles"] = 10
sim = Simulation(model_setup, cell_parameters, cycling_protocol);
output = solve(sim;)
print_output_overview(output)
time_series = get_output_time_series(output)
states = get_output_states(output)
metrics = get_output_metrics(output)
(DischargeCapacity = [3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036, 3.6764157469683036 … 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 3.60571544414199, 0.0], CycleNumber = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0 … 9, 9, 9, 9, 9, 9, 9, 9, 9, 10], RoundTripEfficiency = [77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107, 77.3622897093107 … 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, 87.09682463087034, NaN], ChargeEnergy = [59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256, 59720.469680114256 … 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 51953.52591462784, 0.0], DischargeEnergy = [45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285, 45308.71046400285 … 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 44357.379714917864, 0.0], ChargeCapacity = [-4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871, -4.293171612996871 … -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, -3.663400648471446, 0.0])
Plot a simple pre-defined dashboard
julia
plot_dashboard(output)
Plot a dashboard with line plots
julia
plot_dashboard(output; plot_type = "line")
Plot a dashboard with contour plots
julia
plot_dashboard(output; plot_type = "contour")
Some simple examples plotting time series quantities using the plot_output
function
julia
plot_output(output,
[
"Current vs Time",
"Voltage vs Time",
];
layout = (2, 1),
)
Some simple examples plotting state quantities using the plot_output
function
julia
plot_output(output,
[
["NeAmSurfaceConcentration vs Time at Position index 10", "NeAmSurfaceConcentration vs Time at Position index 1"],
"NeAmConcentration vs Time at Position index 10 and NeAmRadius index 5",
"NeAmSurfaceConcentration vs Position and Time",
"PeAmConcentration vs Time and Position at PeAmRadius index end",
"NeAmPotential vs Time at Position index 10",
];
layout = (4, 2),
)
Some simple examples plotting metrics using the plot_output
function
julia
plot_output(output,
[
"DischargeCapacity vs CycleNumber",
"CycleNumber vs Time",
"RoundTripEfficiency vs Time",
"RoundTripEfficiency vs DischargeCapacity",
];
layout = (4, 2),
)
Access state data and plot for a specific time step
julia
quantities = ["Time", "Position", "NeAmRadius", "NeAmConcentration",
"NeAmSurfaceConcentration", "PeAmRadius", "PeAmConcentration",
"PeAmSurfaceConcentration", "ElectrolyteConcentration"]
output_data = get_output_states(output, quantities = quantities);
t = 100 # time step to plot
d1 = output_data[:NeAmSurfaceConcentration][t, :]
d2 = output_data[:PeAmSurfaceConcentration][t, :]
d3 = output_data[:ElectrolyteConcentration][t, :]
f = Figure()
ax = Axis(f[1, 1], title = "Concentration at t = $(output_data[:Time][t]) s", xlabel = "Position [m]", ylabel = "Concentration")
l1 = lines!(ax, output_data[:Position], d1, color = :red, linewidth = 2, label = "NeAmSurfaceConcentration")
l2 = lines!(ax, output_data[:Position], d2, color = :blue, linewidth = 2, label = "PeAmSurfaceConcentration")
l3 = lines!(ax, output_data[:Position], d3, color = :green, linewidth = 2, label = "ElectrolyteConcentration")
axislegend(ax)
display(GLMakie.Screen(), f)
g = Figure()
ax2 = Axis(g[1, 1], title = "Active Material Concentration at t = $(output_data[:Time][t]) s", xlabel = "Position", ylabel = "Depth")
hm1 = contourf!(ax2, output_data[:Position], output_data[:NeAmRadius], output_data[:NeAmConcentration][t, :, :])
hm2 = contourf!(ax2, output_data[:Position], output_data[:PeAmRadius], output_data[:PeAmConcentration][t, :, :])
Colorbar(g[1, 2], hm1)
display(GLMakie.Screen(), g)
GLMakie.Screen(...)
Example on GitHub
If you would like to run this example yourself, it can be downloaded from the BattMo.jl GitHub repository as a script.
This page was generated using Literate.jl.