PyBaMM で遊ぶ

PyBaMM というPython パッケージがある。

公式のドキュメントから引用すると:

PyBaMM(Python Battery Mathematical Modelling)は、Pythonで書かれたオープンソースのバッテリーシミュレーションパッケージです。

バッテリーの電気化学モデルは、かつてはdual-foilくらいしかなかった。その状況がだいぶ様変りして喜ばしい限りだ。

インストール

基本的には

pip install pybamm

でインストールできるのだが、いわゆるStable扱いのバージョンになる。

一方で、Tutorialでは開発版の機能を使っているので、Tutorialを試すのであれば開発版をインストールするほうが良いかも知れない。

開発版のインストール方法については、Installationのページにあるリンクが死んでいるようなので、メモとしてリンクを貼っておく: Install from source (GNU Linux and macOS) — PyBaMM v24.5rc2 Manual

git レポのクローン

自分はLinuxにインストールしている。

適当なディレクトリで

git clone https://github.com/pybamm-team/PyBaMM.git

とやってgit レポをクローンする。

ビルドに必要なツールの準備

諸々ビルドするため、必要なツールをインストールシしておく。この辺りは上記のリンクの通りに実行すれば良い。

公式のドキュメントにはUbuntuを想定して

sudo apt install python3.X python3.X-dev libopenblas-dev gcc gfortran graphviz cmake pandoc

とあるが、必要に応じてパッケージ名を適切に直す。

SuiteSparse のインストール

noxを使うことが推奨されているが、自分はマニュアルでインストールした。

python scripts/install_KLU_Sundials.py

PyBaMMのインストール

git レポをクローンしたディレクトリに移動してpip install .で良い

cd PyBaMM
pip install .

Tutorial 5の抄訳

Tutorial 5の一部だけを訳しておく。

任意の充放電パターンを生成できる。その命令に関する部分を。

文字列ベースの命令

バッテリーをどのように循環させるかという一連の命令からなる実験を定義し始める。 これらの命令は2つの異なる方法で定義できるが、最も簡単なのは文字列を使うことである。 指示は、"(Dis)charge at x A/C/W""Rest"、または "Hold at x V "という形式にすることができる。 指示には、各ステップの実行時間も含めることができる。 例えば、"for 10 seconds""for 3 minutes""for 1 hour"などである。終了条件を指定することもできる。 この場合、その条件が満たされたときにステップが停止する。 これらの条件は繰り返し状態でなければならず、"until 1 A""until C/50""until 3 V"など、"until"という言葉で導入される。 継続時間と終了条件は、”or “を使って組み合わせることができ、条件が満たされるか、指定された継続時間の後(どちらか早い方)にステップが終了する。

実験指示の例をいくつか挙げよう:

"Discharge at 1C for 0.5 hours",
"Discharge at C/20 for 0.5 hours",
"Charge at 0.5 C for 45 minutes",
"Discharge at 1 A for 90 seconds",
"Charge at 200mA for 45 minutes",
"Discharge at 1 W for 0.5 hours",
"Charge at 200 mW for 45 minutes",
"Rest for 10 minutes",
"Hold at 1 V for 20 seconds",
"Charge at 1 C until 4.1V",
"Hold at 4.1 V until 50 mA",
"Hold at 3V until C/50",

これらのステップはリストに連結することができ、順次実行される。実験を作成するには、このリストをExperimentオブジェクトの作成時に渡す:

experiment = pybamm.Experiment(
    [
        "Discharge at C/10 for 10 hours or until 3.3 V",
        "Rest for 1 hour",
        "Charge at 1 A until 4.1 V",
        "Hold at 4.1 V until 50 mA",
        "Rest for 1 hour",
    ]
)

実際のサイクリング条件を再現するために、多くの場合、実験はいくつかの “サイクル “から構成される。 PyBaMMでは、サイクルをステップのタプルとして定義することができる。 この機能の詳細については長い実験ノートブックを参照のこと。 また、リストの加算演算子や乗算演算子を活用して、サイクルを組み合わせたり繰り返したりすることもできる。 例えば、定電流C/10放電、1時間の休止、定電流(1A)定電圧(4.1V)、さらに1時間の休止を3サイクル行い、その後1C放電を1サイクル行いたい場合、次のように書くことができる:

experiment = pybamm.Experiment(
    [
        (
            "Discharge at C/10 for 10 hours or until 3.3 V",
            "Rest for 1 hour",
            "Charge at 1 A until 4.1 V",
            "Hold at 4.1 V until 50 mA",
            "Rest for 1 hour",
        )
    ]
    * 3
    + [
        "Discharge at 1C until 3.3 V",
    ]
)

サイクルが1つのステップのみで構成されている場合(1C放電のような)、タプルとして定義する必要はないことに注意してほしい。 サイクルとステップの重要な違いの1つは、PyBaMMではステップをスキップすることができるが(例えば、完全に充電されたバッテリーを充電しようとした場合)、サイクルはスキップできないということだ。

次に、モデルを選択し、キーワード引数を使って実験を渡し、シミュレーションを作成する。

model = pybamm.lithium_ion.DFN()
sim = pybamm.Simulation(model, experiment=experiment)

Adsense広告