Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions battmo/api/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ def SimulationSettings(*arg, **kwargs):
return jl.SimulationSettings(*arg, **kwargs)


def FullSimulationInput(*arg, **kwargs):
return jl.SimulationSettings(*arg, **kwargs)


def expose_to_battmo(func):
name = func.__name__
setattr(jl_main, name, func) # register Python function in Main
Expand Down
8 changes: 3 additions & 5 deletions battmo/api/plotting.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,18 @@ def make_interactive():
def plot_dashboard(output, plot_type="simple"):
if activate_plotting():
fig = jl.plot_dashboard(output, plot_type=plot_type)
make_interactive()

if plot_type == "line":
jl.seval(
"""
display(current_figure())
println("Press Ctrl+C to stop plotting interactivity")
while true
sleep(0.1)
end
"""
)
else:
jl.seval("display(current_figure())")

make_interactive()

return fig

Expand All @@ -64,7 +63,6 @@ def plot_interactive_3d(*arg, **kwargs):
make_interactive()
jl.seval(
"""
display(current_figure())
println("Press Ctrl+C to stop plotting interactivity")
while true
sleep(0.1)
Expand Down
4 changes: 0 additions & 4 deletions battmo/api/solve.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,5 @@ def free_calibration_parameter(cal, parameter_path, **kwargs):
return julia_func(cal, parameter_path_jl, **kwargs)


def print_calibration_overview(*arg, **kwargs):
return jl.print_calibration_overview(*arg, **kwargs)


def run_simulation(*arg, **kwargs):
return jl.run_simulation(*arg, **kwargs)
28 changes: 8 additions & 20 deletions battmo/api/tools.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,16 @@
from ..julia_import import jl


def print_submodels_info(*arg, **kwargs):
return jl.print_submodels_info(*arg, **kwargs)
def print_submodels(*arg, **kwargs):
return jl.print_submodels(*arg, **kwargs)


def print_default_input_sets_info(*arg, **kwargs):
return jl.print_default_input_sets_info(*arg, **kwargs)
def print_default_input_sets(*arg, **kwargs):
return jl.print_default_input_sets(*arg, **kwargs)


def print_parameter_info(*arg, **kwargs):
return jl.print_parameter_info(*arg, **kwargs)


def print_setting_info(*arg, **kwargs):
return jl.print_setting_info(*arg, **kwargs)


def print_output_variable_info(*arg, **kwargs):
return jl.print_output_variable_info(*arg, **kwargs)


def print_output_overview(*arg, **kwargs):
return jl.print_output_overview(*arg, **kwargs)
def print_info(*arg, **kwargs):
return jl.print_info(*arg, **kwargs)


def generate_default_parameter_files(*arg, **kwargs):
Expand All @@ -33,8 +21,8 @@ def write_to_json_file(*arg, **kwargs):
return jl.write_to_json_file(*arg, **kwargs)


def print_cell_info(*arg, **kwargs):
return jl.print_cell_info(*arg, **kwargs)
def quick_cell_check(*arg, **kwargs):
return jl.quick_cell_check(*arg, **kwargs)


def plot_cell_curves(*arg, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions battmo/julia_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
)

except Exception as e:

jl.seval(
"""
import Pkg
Expand All @@ -57,6 +58,7 @@

using BattMo
using Jutul:Jutul,get_1d_interpolator
using WGLMakie
"""
)

Expand Down
2 changes: 1 addition & 1 deletion battmo/juliapkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"packages": {
"BattMo": {
"uuid": "6f0c0536-3c2c-4762-a987-c605a8a6f898",
"version": "0.2.1"
"version": "0.2.3"
},

"Jutul": {
Expand Down
8 changes: 4 additions & 4 deletions examples/1d_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@
import numpy as np

# Load parameter sets
cell_parameters = load_cell_parameters(from_default_set="Chen2020")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")

# Have a quick look into what kind of cell we're dealing with
print_cell_info(cell_parameters)
quick_cell_check(cell_parameters)

# Setup model and simulation
model = LithiumIonBattery()
sim = Simulation(model, cell_parameters, cycling_protocol)
output = solve(sim)

# Have a look into which output quantities are available
print_output_overview(output)
print_info(output)

# Plot voltage curve
time_series = output.time_series
Expand Down
16 changes: 9 additions & 7 deletions examples/3d_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@
import plotly.express as px

# Load parameter sets
cell_parameters = load_cell_parameters(from_default_set="Chen2020")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
model_settings = load_model_settings(from_default_set="P4D_cylindrical")
simulation_settings = load_simulation_settings(from_default_set="P4D_cylindrical")
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")
model_settings = load_model_settings(from_default_set="p4d_cylindrical")
simulation_settings = load_simulation_settings(from_default_set="p4d_cylindrical")

cell_parameters["Cell"]["OuterRadius"] = 0.004
cell_parameters["NegativeElectrode"]["CurrentCollector"]["TabWidth"] = 0.002
cell_parameters["PositiveElectrode"]["CurrentCollector"]["TabWidth"] = 0.002
simulation_settings["AngularGridPoints"] = 8

# Setup model and simulation
model = LithiumIonBattery(model_settings=model_settings)
sim = Simulation(model, cell_parameters, cycling_protocol, simulation_settings=simulation_settings)
output = solve(sim)

# Plot voltage curve
plot_dashboard(output)

# Plot interative 3D results
plot_interactive_3d(output)
10 changes: 5 additions & 5 deletions examples/calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@

# Load experimental data
battmo_base = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
exdata = os.path.join(battmo_base, "examples", "example_data")
exdata = os.path.join("examples", "input", "data")

df_05 = pd.read_csv(os.path.join(exdata, "Xu_2015_voltageCurve_05C.csv"), names=["Time", "Voltage"])

# ## Load cell parameters and cycling protocol
cell_parameters = load_cell_parameters(from_default_set="Xu2015")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
cell_parameters = load_cell_parameters(from_default_set="xu_2015")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")

cycling_protocol["LowerVoltageLimit"] = 2.25

Expand Down Expand Up @@ -84,14 +84,14 @@
)

# print an overview of the calibration object
print_calibration_overview(cal)
print_info(cal)

# Solve the calibration problem
solve(cal)

# Retrieve the calibrated parameters and print an overview of the calibration
cell_parameters_calibrated = cal.calibrated_cell_parameters
print_calibration_overview(cal)
print_info(cal)

# Run a simulation using the calibrated cell parameters
sim_calibrated = Simulation(model, cell_parameters_calibrated, cycling_protocol)
Expand Down
2 changes: 1 addition & 1 deletion examples/headless_simulation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from battmo import *

simulation_input = load_full_simulation_input(from_default_set="Chen2020")
simulation_input = load_full_simulation_input(from_default_set="chen_2020")

output = run_simulation(simulation_input)

Expand Down
6 changes: 3 additions & 3 deletions examples/user_defined_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
# Import chayambuka input functions
from input.chayambuka_functions import *

cell_parameters = load_cell_parameters(from_default_set="Chayambuka2022")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
model_settings = load_model_settings(from_default_set="P2D")
cell_parameters = load_cell_parameters(from_default_set="chayambuka_2022")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")
model_settings = load_model_settings(from_default_set="p2d")
model_settings["ButlerVolmer"] = "Chayambuka"

model_setup = SodiumIonBattery(model_settings=model_settings)
Expand Down
62 changes: 39 additions & 23 deletions tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,24 @@

def test_loading():

cell_parameters = load_cell_parameters(from_default_set="Chen2020")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
model_settings = load_model_settings(from_default_set="P2D")
simulation_settings = load_simulation_settings(from_default_set="P2D")
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")
model_settings = load_model_settings(from_default_set="p2d")
simulation_settings = load_simulation_settings(from_default_set="p2d")
solver_settings = load_solver_settings(from_default_set="direct")
full = load_full_simulation_input(from_default_set="chen_2020")


def test_simulation():
cell_parameters = load_cell_parameters(from_default_set="Chen2020")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")

model_setup = LithiumIonBattery()
sim = Simulation(model_setup, cell_parameters, cycling_protocol)
output = solve(sim)

cell_parameters = load_cell_parameters(from_default_set="Chayambuka2022")
model_settings = load_model_settings(from_default_set="P2D")
cell_parameters = load_cell_parameters(from_default_set="chayambuka_2022")
model_settings = load_model_settings(from_default_set="p2d")
model_settings["ButlerVolmer"] = "Chayambuka"

model_setup = SodiumIonBattery(model_settings=model_settings)
Expand All @@ -36,16 +37,16 @@ def test_simulation():


def test_output_handling():
cell_parameters = load_cell_parameters(from_default_set="Chen2020")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")
model_setup = LithiumIonBattery()
sim = Simulation(model_setup, cell_parameters, cycling_protocol)
output = solve(sim)

ts = output.time_series
states = output.states
metrics = output.metrics
print_output_overview(output)
print_info(output)


# def test_plotting():
Expand All @@ -58,14 +59,14 @@ def test_output_handling():


def test_utils():
print_submodels_info()
print_default_input_sets_info()
print_parameter_info("Electrode")
print_setting_info("Grid")
print_output_variable_info("Concentration")
print_submodels()
print_default_input_sets()
print_info("Electrode")
print_info("Grid")
print_info("Concentration", view="OutputVariable")

cell_parameters = load_cell_parameters(from_default_set="Chen2020")
print_cell_info(cell_parameters)
cell_parameters = load_cell_parameters(from_default_set="chen_2020")
quick_cell_check(cell_parameters)

# plot_cell_curves(cell_parameters)

Expand All @@ -80,8 +81,8 @@ def test_calibration():
names=["Time", "Voltage"],
)

cell_parameters = load_cell_parameters(from_default_set="Xu2015")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
cell_parameters = load_cell_parameters(from_default_set="xu_2015")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")

cycling_protocol["LowerVoltageLimit"] = 2.25
cycling_protocol["DRate"] = 0.5
Expand Down Expand Up @@ -148,9 +149,24 @@ def test_calibration():

def test_user_defined_function():

cell_parameters = load_cell_parameters(from_default_set="Chayambuka2022")
cycling_protocol = load_cycling_protocol(from_default_set="CCDischarge")
model_settings = load_model_settings(from_default_set="P2D")
import os
import sys

# Get the directory of the current file
root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Define the relative path you want to add
relative_path = os.path.join(root_dir, 'examples')

# Add it to the system path
sys.path.append(relative_path)

# Import chayambuka input functions
import input.chayambuka_functions

cell_parameters = load_cell_parameters(from_default_set="chayambuka_2022")
cycling_protocol = load_cycling_protocol(from_default_set="cc_discharge")
model_settings = load_model_settings(from_default_set="p2d")
model_settings["ButlerVolmer"] = "Chayambuka"

model_setup = SodiumIonBattery(model_settings=model_settings)
Expand Down
Loading