Simulation
に渡すキーワード引数(var_pts、submesh_types、spatial_methods、
solver)を モデル または
パラメータ化モデル に永続的に保存する
オプションの設定バッグです。モデルが実行されるたびに Ionworks がこれらを
自動的に再適用します。
モデルの方程式自体はメッシュやソルバーに依存しませんが、フィット済みの
パラメータセットが 必要とする 設定は依存する場合があります。例えば、
表面近傍で急峻な勾配を持つ固相拡散係数をフィットすると、粒子メッシュを
表面付近で細かくクラスタリングした細かいメッシュが必要になります。PyBaMM
の粗いデフォルトに戻ってしまうと電圧が正しく再現されません。シミュレーション
設定を使うと、こうした要件をモデルまたはパラメータセットに一度だけ紐付け、
下流のすべてのシミュレーションがそのグリッドとソルバーで実行されるように
できます。
使いどころ
以下のいずれかに該当する場合にシミュレーション設定を付与します:- パラメータが非デフォルトのメッシュ(例:
Chebyshev1DSubMeshを使った 細かい粒子メッシュ)でフィットされていて、そのメッシュを対応する パラメータ化モデルの実行時に必ず適用したい場合。 - 特定のモデル構成が数値的な安定性のために特定のソルバーやソルバー許容誤差 を必要とする場合。
simulation_settings を未設定(または None)のままに
しておけば、PyBaMM 側の default_var_pts / default_submesh_types /
default_spatial_methods / default_solver が使われます。
設定できる項目
すべてのフィールドはオプションで、省略した項目はモデルのデフォルトに フォールバックします。
保存されるブロックに含まれるクラス名は書き込み時に静的な許可リストと
照合されます。下記に挙げられていないクラスは保存されずに
BAD_REQUEST
として拒否されます。
var_pts で許可される空間変数: x_n、x_s、x_p、r_n、r_p、R_n、
R_p、y、z、および複合電極用の _prim / _sec バリアント。値は正の
整数でなければなりません。
許可されている submesh クラス: Uniform1DSubMesh、Exponential1DSubMesh、
Chebyshev1DSubMesh、UserSupplied1DSubMesh、SpectralVolume1DSubMesh、
SymbolicUniform1DSubMesh、SubMesh0D。
許可されている spatial method クラス: FiniteVolume、SpectralVolume、
ZeroDimensionalSpatialMethod。
許可されているソルバークラス: IDAKLUSolver、AlgebraicSolver、
NonlinearSolver。CasadiSolver と ScipySolver は PyBaMM で非推奨に
なっており、永続化できません。ionworkspipeline.Simulation の背後で使われる
高速なデフォルトソルバーについては
Ionworks DAE ソルバー を参照してください。
優先順位
シミュレーション時、Ionworks は次の固定された優先順位で永続化された設定を マージします。上位のレイヤーがキー単位で優先されます:- メッシュ系のキー(
var_pts、submesh_types、spatial_methods)は キー単位でマージされます。さらにモデル自身の PyBaMM デフォルトの上に キー単位で重ねられるため、Simulationに渡されるマップは常に完全な形に なります。したがってパラメータ化モデルはグリッド全体を再指定せずにr_nとr_pだけを細かくでき、実行時のsimulation_kwargsがr_pのみを 指定した場合も、永続化されたr_nが失われることはなくその 1 エントリだけ が上書きされます。 solverは最上位のレイヤーで丸ごと置き換えられます。部分的な solver は解釈が曖昧なためです。- 実行時に明示的に渡された
simulation_kwargsは常に優先されます。 1 回の実行をデバッグするために永続化された設定を書き換える必要は ありません。
パイプラインの design objective(設計目的関数) のみ例外です。ここでは
解決後の
var_pts と solver だけが適用されます。design objective は
design-optimization コンバータが組み込むシンボリックな submesh を必要とする
ため、永続化された submesh_types / spatial_methods は意図的に適用され
ません。プロトコルシミュレーションおよびモデル / パラメータ化モデルの
シミュレーション経路では 4 つのキーすべてが適用されます。API から設定を紐付ける
client.model と client.parameterized_model はどちらも create と update で
simulation_settings フィールドを受け付けます。サブクライアントの詳細は
Python API リファレンス を参照してください。
モデルに紐付ける
パラメータ化モデルに紐付ける
パラメータ固有の設定はベースモデルの設定より優先されるため、フィット済み パラメータのメッシュ細分化はここに置くのが一般的です:"simulation_settings": None を渡すとフィールドがクリアされ、ベースモデルの
設定(ベースモデルにも無い場合は PyBaMM のデフォルト)を継承します。
パイプラインから設定を紐付ける
ionworks_schema のモデルクラス
(GITTModel、MSMRFullCellModel、MSMRHalfCellModel、LumpedSPMR、
LumpedSPMeR、ECM など)は simulation_settings 引数を受け付け、
パイプライン投入時にモデル設定と一緒にシリアライズされます:
MeshGenerator / BaseSolver オブジェクトはパイプライン側で正規化
された JSON 形式に自動的にシリアライズされるので、同じ設定が API を経由
しても保持されます。
シリアライズされた形式
内部的にはシミュレーション設定はフラットな JSON dict として保存されます。 これはclient.model.get(...).simulation_settings が返す形式でもあり、
データベース列に保存されている形式でもあります。典型的なブロックは
次のようになります:
SimulationSettings スキーマ
クラスから to_config() を呼んで同じペイロードを生成させることもできます。