PyBaMM入门篇(一):编程流程及基础代码
PyBaMM(Python电池数学建模)是一个开源Python库,旨在开发、模拟和分析电池数学模型。它是研究人员、工程师和科学家用来深入研究电池老化、衰退、热效应和电化学行为的强大而灵活的工具,也支持电池管理系统 (BMS) 先进控制策略的开发。 一、PyBaMM的主要特点:
PyBaMM库里面包含几种常见的电池模型,如单粒子模型 (SPM)、电解质单粒子模型(SPMe) 和完整的 Doyle-Fuller-Newman (DFN) 模型。用户可以根据自己的需要在这些模型之间轻松切换。
PyBaMM允许用户针对特定应用、不同的化学体系或实验设置定制模型,也支持添加用户自定义的模型、方程和参数。
PyBaMM针对用来描述电池内部电化学反应、物质传递、发热等物理化学过程的一系列复杂的耦合微分方程进行了优化,并提供时域仿真和稳态仿真的求解器。
PyBaMM是用Python 构建的,与Matplotlib、NumPy 和 Pandas 等数据分析和可视化工具无缝集成,为参数扫描、场景分析和数据拟合提供了友好的用户友好界面。 二、PyBaMM的建模流程及基础代码:
1) 通过pip安装:pip install pybamm2) 通过conda安装:conda install -c conda-forgepybammimportpybamm # 在python中导入电池电化学模拟代码库 1) model = pybamm.lithium_ion.DFN( )#调用Doyle-Fuller-Newman (DFN) 锂离子电池模型2)model = pybamm.lithium_ion.SPM( ) #调用Single particle锂离子电池模型3)model = pybamm.lithium_ion.SPMe( )#调用Single particle with electrolyte锂离子电池模型PyBaMM提供了多种内置参数集,可以通过pybamm.parameter_sets模块选择或自定义参数集。 parameter_values = pybamm.ParameterValues ("Chen2020")# 输入Pybamm内置的一套参数集 parameter_values["Current function[A]"] = 10 # 更改某一指定参数的值,比如放电电流“Current function [A]”的数值改成10#同时更改几个参数,比如负极片厚度"Negative electrode thickness [m]",正极片厚度"Positive electrode thickness [m]"以及放电电流 "Current function [A]": parameter_values = pybamm.ParameterValues("Negativeelectrode thickness [m]": 1e-4,
"Positive electrode thickness [m]": 1.2e-4,
"Currentfunction [A]": 10,
#定义特定的充放电实验条件,例如恒流放电、恒流恒压充电等: experiment = pybamm.Experiment("Discharge atC/10 for 10 hours or until 3.3 V",
"Rest for 1hour",
"Charge at 1A until 4.1 V",
"Hold at 4.1V until 50 mA",
"Rest for 1hour",
#定义按照特定的充放电实验条件循环一定的圈数,例如三圈: experiment = pybamm.Experiment("Discharge at C/10 for 10 hours or until 3.3 V",
"Rest for1 hour",
"Chargeat 1 A until 4.1 V",
"Hold at4.1 V until 50 mA",
"Rest for1 hour",
sim = pybamm.Simulation(model,parameter_values=parameter_values) # 输入指定参数建立模拟研究 sim = pybamm.Simulation(model, experiment=experiment) #按特定的充放电实验条件建立模拟研究 sim.solve([0, 3600]) #设置求解时间(3600 s)求解 t_eval = np.arange(0, 121, 1)output_variables = ["Electrolyte concentration[mol.m-3]", "Voltage [V]"]sim.plot(output_variables=output_variables)sim.plot(["Current [A]", "Voltage [V]"]) #分别绘制电流和电压随时间变化的曲线: #将电极电流密度和电解液电流密度随时间变化的曲线绘制在一张图,把电压随时间变化的曲线绘制在另一张图: ["Electrodecurrent density [A.m-2]", "Electrolyte current density[A.m-2]"], "Voltage [V]"