電荷中性条件

最終更新日:2026年10月16日

Single-Valence Species

バージョン1.4.1からEA-vcにおいて,構造生成の際に電荷中性条件を課すことが可能になった. ランダム構造生成にも進化的操作による構造生成にも適用できる.

cryspy.inでそれぞれのatypeに対応する電荷をchargeとして入力する.

以下の例では,Li–Ca–Clのような電荷の組合せを想定し,Cu,Ag,Auにそれぞれ仮想的に+1,+2,-1の電荷を割り当てる. ASEのチュートリアルと同様に,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Ag–Auを代わりに使用する.

cryspy.inの例:

...
[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
...

例えばこの場合,(Cu, Ag, Au) = (4, 0, 4)や(Cu, Ag, Au) = (4, 2, 8)などの電荷中性条件を満たす構造のみ生成される.

下記のようにadd_maxやelim_maxが小さすぎると,原子を追加,削除する際に電荷中性条件を満たす原子数の組合せがゼロになって構造生成できなくなるので注意.

...
[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
...
...
[EA]
add_max = 1
elim_max = 1

例えば上記の場合,add_max = 1の場合,電荷中性条件を満たす原子数の組合せはゼロ.add_max = 2の場合,(Cu, Ag, Au) = (1, 0, 1),つまりCuとAuを1個ずつ追加する組合せは(+1) + (-1) = 0で電荷中性条件を満たす.add_max = 3であれば(Cu, Ag, Au) = (1, 0, 1), (0, 1, 2)の組合せがある.

add_max,elim_max,subs_maxのデフォルト値はそれぞれ5,5および3.

単価元素種を用いた3元系の例 単価元素種を用いた3元系の例

Multi-Valence Species

バージョン1.5.0からは複数の価数を取りうる元素に対応した. chargeで複数の価数を丸括弧または角括弧でまとめて指定できる.

単価の例と同様に,Fe–Oのような電荷の組合せを想定し,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Auを代わりに使用する. Cuには仮想的に+2または+3,Auには-2の電荷を割り当てる.

cryspy.inの例:

...
[structure]
atype = Cu Au
ll_nat = 0 0
ul_nat = 8 12
charge = (2 3) -2
...

例えば原子数が(Cu, Au) = (1, 1)では,Cuを2価とみなすことで電荷中性条件を満たす. (Cu, Au) = (2, 3)の場合は2個のCuをどちらも3価とみなすことで電荷中性条件を満たすことができる.

多価元素種を指定した場合でも,atypeとしては1つの元素種として扱われる. したがって,ll_natとul_natは各価数ごとの原子数ではなく,その元素種の合計原子数に対する下限・上限を指定する. また,生成される構造中でCu²⁺とCu³⁺のように価数ごとの原子種が区別されるわけではない.電荷中性条件の判定において,指定した価数の組合せのいずれかで中性化できるかを判定する.

多価元素種を用いた2元系の例 多価元素種を用いた2元系の例

原子数の組合せの列挙とサンプリング

v1.5.0以降では,ランダム構造生成で用いる電荷中性な原子数の組合せの決め方を,[structure]セクションのcn_modeで指定できる.chargeを指定した場合のみ有効.

cn_mode動作
autoデフォルト.総当たりで調べる組合せ数がmax_cn_grid_points以下ならenumerate,上限を超える場合はsampleを使用する.
enumerate電荷中性条件を満たす原子数の組合せを事前に列挙し,その中からランダムに選ぶ.総当たりで調べる組合せ数が上限を超える場合はエラーになる.
sample全組合せを事前に列挙せず,電荷中性条件を満たす原子数の組合せを必要に応じて生成する.

列挙では,電荷中性条件を使って原子数の変数を1つ消去し,残りの変数について取りうる整数値の組合せを総当たりで調べる.各組合せについて消去した変数の値を計算し,原子数が整数値であり,上下限の範囲内にあるかを確認する.max_cn_grid_pointsは,この総当たりで調べる組合せ数の上限で,デフォルトは200000000.

例えば,charge = 1 2 -1でCu,Ag,Auの原子数をそれぞれ0から10までとした場合,Agの原子数を表す変数を消去する.CuとAuの原子数をそれぞれ11通りずつ調べ,各組合せに対してAgの原子数を(Auの原子数 − Cuの原子数) / 2として計算する.総当たりで調べる組合せ数は11 × 11 = 121となる.多価の場合は,内部で価数ごとに分けた原子種について同様に数える.

原子種数や原子数の範囲が大きい場合,サンプリングによって列挙に必要な計算量とメモリ使用量を抑えられる.

[structure]
...
charge = 1 2 -1
cn_mode = auto
max_cn_grid_points = 200000000

enumerateでは列挙された原子数の組合せから等確率で選ぶ.sampleでは,各組合せが選ばれる確率は一様とは限らない.

組成制限との併用

バージョン1.5.0以降では,電荷中性条件に加えて,min_compとmax_compで探索する組成範囲を制限できる. ここではSingle-Valence Speciesの例と同じく,Cu,Ag,Auに仮想的に+1,+2,-1の電荷を割り当て,組成制限を追加する.

[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
min_comp = 0.0  0.1  0.4
max_comp = 0.3  0.4  0.7

この電荷の組合せでは,Cuの原子数 + 2 × Agの原子数 = Auの原子数となる構造が電荷中性条件を満たす. 組成制限を併用すると,この条件に加え,Cuの組成が0.0以上0.3以下,Agが0.1以上0.4以下,Auが0.4以上0.7以下である必要がある.

例えば,原子数が(Cu, Ag, Au) = (4, 0, 4)の構造は電荷中性条件を満たすが,Agの組成が0なので,上記の組成制限では生成されない. 一方,(Cu, Ag, Au) = (1, 2, 5)の構造は,電荷の合計が1 × (+1) + 2 × (+2) + 5 × (-1) = 0であり,組成(0.125, 0.25, 0.625)も許容範囲内にある.

左は組成制限による許容範囲,右は両方の条件を課した第3世代までの探索結果である.

電荷中性条件に組み合わせる組成の許容範囲 電荷中性条件に組み合わせる組成の許容範囲 電荷中性条件と組成制限を課した第3世代までの探索結果 電荷中性条件と組成制限を課した第3世代までの探索結果

青色の領域は組成制限のみを表す. この例では,電荷中性条件を満たす組成は三角形の組成図の直線上にあり,探索対象はその直線と青色の領域が重なる範囲内で,原子数の条件も満たすものに限られる. 組成制限の設定や許容範囲の図については,組成制限を参照.