tkcrystalbase.py ライブラリ技術ドキュメント

ライブラリの機能や目的

tkcrystalbase.py は、結晶構造に関する基本的な幾何学的計算および物理定数を扱うためのPythonライブラリです。主に、格子定数、格子ベクトル、単位胞の体積、原子間距離、結合角、逆格子空間の計算など、結晶学における基礎的な演算機能を提供します。また、様々な物理定数が定義されており、物性物理学や材料科学のシミュレーション、データ解析における基盤ツールとして利用されることを目的としています。

importする方法

このライブラリは、Pythonプログラムから以下の方法でimportできます。

import tkcrystalbase

または、特定の変数や関数のみをimportすることも可能です。

from tkcrystalbase import pi, cal_lattice_vectors

必要な非標準ライブラリとインストール方法

このライブラリは以下の非標準ライブラリに依存しています。

  • numpy: 数値計算(配列操作、線形代数、三角関数など)のために必要です。

インストール方法: numpypip コマンドを使用してインストールできます。

pip install numpy

pprint はPythonの標準ライブラリの一部であるため、追加のインストールは不要です。

importできる変数と関数

変数

このライブラリからは以下の定数と初期データがimport可能です。

数学定数

  • pi (float): 円周率 \(\pi\) の近似値。3.141592653589793

  • pi2 (float): \(2\pi\) の近似値。6.283185307179586

  • torad (float): 度からラジアンへの変換係数。0.01745329251944 (rad/deg)

  • todeg (float): ラジアンから度への変換係数。57.29577951472 (deg/rad)

  • basee (float): 自然対数の底 \(e\) の近似値。2.71828183

物理定数

  • h (float): プランク定数 \(h\)6.6260755e-34 (Js)

  • h_bar (float): ディラック定数 \(\hbar\) (\(= h / 2\pi\))。1.05459e-34 (Js)

  • hbar (float): h_bar と同じ値。1.05459e-34 (Js)

  • c (float): 真空中の光速 \(c\)2.99792458e8 (m/s)

  • e (float): 素電荷 \(e\)1.60218e-19 (C)

  • me (float): 電子の質量 \(m_e\)9.1093897e-31 (kg)

  • mp (float): 陽子の質量 \(m_p\)1.6726231e-27 (kg)

  • mn (float): 中性子の質量 \(m_n\)1.67495e-27 (kg)

  • u0 (float): 真空の透磁率 \(\mu_0\)4.0 * 3.14 * 1e-7 (Ns\(^2\)C\(^{-2}\))

  • e0 (float): 真空の誘電率 \(\epsilon_0\)8.854418782e-12 (C\(^2\)N\(^{-1}\)m\(^{-2}\))

  • e2_4pie0 (float): \(e^2 / (4\pi\epsilon_0)\)2.30711e-28 (Nm\(^2\))

  • a0 (float): ボーア半径 \(a_0\)5.29177e-11 (m)

  • kB (float): ボルツマン定数 \(k_B\)1.380658e-23 (JK\(^{-1}\))

  • NA (float): アボガドロ定数 \(N_A\)6.0221367e23 (mol\(^{-1}\))

  • R (float): 気体定数 \(R\)8.31451 (J/K/mol)

  • F (float): ファラデー定数 \(F\)96485.3 (C/mol)

  • g (float): 標準重力加速度 \(g\)9.81 (m/s\(^2\))

初期データ

  • lattice_parameters (list): 格子定数 [a, b, c, alpha, beta, gamma] をÅと度で指定するリスト。初期値は [5.62, 5.62, 5.62, 90.0, 90.0, 90.0]

  • sites (list of lists): 結晶サイトの原子情報。各要素は [原子名, サイトラベル, 原子番号, 原子質量, 電荷, 半径, 色, numpy.array([x, y, z])] の形式で、最後の要素は分数座標です。初期値はNaCl型構造のものです。

関数

reduce01(x)

数値を0.0から1.0の範囲に正規化します。実質的に小数部分を返します。

  • 引数:

    • x (float): 正規化したい数値。

  • 戻り値:

    • (float): x の小数部分。例えば 2.7 を入力すると 0.7 を返します。

round01(x)

数値を特定の閾値に基づいて 0.0 または 1.0 に丸めるか、小数部分を調整します。

  • 引数:

    • x (float): 丸めたい数値。

  • 戻り値:

    • (float):

      • x1.0 に非常に近い(差が 0.0002 未満)場合、1.0 を返します。

      • x0.0 に非常に近い(差が 0.0002 未満)場合、0.0 を返します。

      • 上記以外で x > 1.0 の場合、x の小数部分 (x - int(x)) を返します。

      • 上記以外で x < 1.0 の場合、x の小数部分に 1.0 を加えた値 (x - int(x) + 1.0) を返します。

round_parameter(x, tol)

指定された許容誤差 tol を用いて、数値を丸めます。

  • 引数:

    • x (float): 丸めたい数値。

    • tol (float): 丸めの許容誤差。

  • 戻り値:

    • (float): tol の倍数に丸められた値。

cal_lattice_vectors(latt)

格子定数から実空間の格子ベクトル行列を計算します。 格子ベクトルは以下のように設定されます。 $\( \mathbf{a}_0 = (a, 0, 0) \\ \mathbf{a}_1 = (b \cos \gamma, b \sin \gamma, 0) \\ \mathbf{a}_2 = (c \cos \beta, c \frac{\cos \alpha - \cos \beta \cos \gamma}{\sin \gamma}, c \frac{\sqrt{1 - \cos^2 \alpha - \cos^2 \beta - \cos^2 \gamma + 2 \cos \alpha \cos \beta \cos \gamma}}{\sin \gamma}) \)\( ここで \)a, b, c\( は格子定数、\)\alpha, \beta, \gamma$ は格子角です。

  • 引数:

    • latt (list): 格子定数 [a, b, c, alpha, beta, gamma] を度数法で含むリスト。

  • 戻り値:

    • (numpy.ndarray): 3x3の行列で、各行が実空間の格子ベクトル \(\mathbf{a}_0, \mathbf{a}_1, \mathbf{a}_2\) を表します。

cal_metrics(latt)

格子定数から実空間の格子ベクトル行列と計量テンソルを計算します。

  • 引数:

    • latt (list): 格子定数 [a, b, c, alpha, beta, gamma] を度数法で含むリスト。

  • 戻り値:

    • (dict): 以下のキーを持つ辞書。

      • 'aij': (numpy.ndarray) 実空間の格子ベクトル行列。

      • 'gij': (numpy.ndarray) 計量テンソル \(\mathbf{G}\)。要素 \(g_{ij}\) は格子ベクトル \(\mathbf{a}_i\)\(\mathbf{a}_j\) の内積 \(\mathbf{a}_i \cdot \mathbf{a}_j\) で計算されます。 $\( G = \begin{pmatrix} \mathbf{a}_0 \cdot \mathbf{a}_0 & \mathbf{a}_0 \cdot \mathbf{a}_1 & \mathbf{a}_0 \cdot \mathbf{a}_2 \\ \mathbf{a}_1 \cdot \mathbf{a}_0 & \mathbf{a}_1 \cdot \mathbf{a}_1 & \mathbf{a}_1 \cdot \mathbf{a}_2 \\ \mathbf{a}_2 \cdot \mathbf{a}_0 & \mathbf{a}_2 \cdot \mathbf{a}_1 & \mathbf{a}_2 \cdot \mathbf{a}_2 \end{pmatrix} \)$

cal_volume(aij)

実空間の格子ベクトル行列から単位胞の体積を計算します。

  • 引数:

    • aij (numpy.ndarray): 実空間の格子ベクトル行列。

  • 戻り値:

    • (float): 単位胞の体積 \(V = |\mathbf{a}_0 \cdot (\mathbf{a}_1 \times \mathbf{a}_2)|\)

cal_reciprocal_lattice_vectors(aij)

実空間の格子ベクトルから逆格子ベクトルを計算します。

  • 引数:

    • aij (numpy.ndarray): 実空間の格子ベクトル行列。

  • 戻り値:

    • (list): 3つの逆格子ベクトル \(\mathbf{R}_a, \mathbf{R}_b, \mathbf{R}_c\) を含むリスト。 $\( \mathbf{R}_a = \frac{\mathbf{a}_1 \times \mathbf{a}_2}{V} \\ \mathbf{R}_b = \frac{\mathbf{a}_2 \times \mathbf{a}_0}{V} \\ \mathbf{R}_c = \frac{\mathbf{a}_0 \times \mathbf{a}_1}{V} \)\( ここで \)V$ は単位胞の体積です。

cal_reciprocal_lattice_parameters(Raij)

逆格子ベクトルから逆格子定数と角度を計算します。

  • 引数:

    • Raij (list): 逆格子ベクトル \(\mathbf{R}_a, \mathbf{R}_b, \mathbf{R}_c\) を含むリスト。

  • 戻り値:

    • (list): 逆格子定数 [Ra, Rb, Rc, Ralpha, Rbeta, Rgamma] を含むリスト。

fractional_to_cartesian(pos, aij)

分数座標をデカルト座標に変換します。

  • 引数:

    • pos (numpy.ndarray): 原子位置の分数座標 [x, y, z]

    • aij (numpy.ndarray): 実空間の格子ベクトル行列。

  • 戻り値:

    • (tuple): デカルト座標 (X, Y, Z)。 $\( \mathbf{r} = x \mathbf{a}_0 + y \mathbf{a}_1 + z \mathbf{a}_2 \)$

distance2(pos0, pos1, gij)

結晶の分数座標系において、2つの点間の距離の2乗を計算します。

  • 引数:

    • pos0 (numpy.ndarray): 1点目の分数座標 [x0, y0, z0]

    • pos1 (numpy.ndarray): 2点目の分数座標 [x1, y1, z1]

    • gij (numpy.ndarray): 計量テンソル。

  • 戻り値:

    • (float): 2点間の距離の2乗 \(r^2\)。 $\( \Delta \mathbf{x} = \mathbf{pos1} - \mathbf{pos0} \\ r^2 = \sum_{i=0}^2 \sum_{j=0}^2 g_{ij} \Delta x_i \Delta x_j = \Delta \mathbf{x}^T \mathbf{G} \Delta \mathbf{x} \)$

distance(pos0, pos1, gij)

結晶の分数座標系において、2つの点間の距離を計算します。

  • 引数:

    • pos0 (numpy.ndarray): 1点目の分数座標 [x0, y0, z0]

    • pos1 (numpy.ndarray): 2点目の分数座標 [x1, y1, z1]

    • gij (numpy.ndarray): 計量テンソル。

  • 戻り値:

    • (float): 2点間の距離 \(r = \sqrt{r^2}\)

angle(pos0, pos1, pos2, gij)

結晶の分数座標系において、3つの点 pos1-pos0-pos2 で形成される結合角を計算します。

  • 引数:

    • pos0 (numpy.ndarray): 角度の頂点となる点の分数座標。

    • pos1 (numpy.ndarray): 1つ目の結合先点の分数座標。

    • pos2 (numpy.ndarray): 2つ目の結合先点の分数座標。

    • gij (numpy.ndarray): 計量テンソル。

  • 戻り値:

    • (float): 結合角を度数法で返します。 $\( \mathbf{d}_{01} = \mathbf{pos1} - \mathbf{pos0} \\ \mathbf{d}_{02} = \mathbf{pos2} - \mathbf{pos0} \\ \cos \theta = \frac{\mathbf{d}_{01}^T \mathbf{G} \mathbf{d}_{02}}{|\mathbf{d}_{01}| \cdot |\mathbf{d}_{02}|} \)$

main scriptとして実行したときの動作

tkcrystalbase.py を直接Pythonスクリプトとして実行した場合 (python tkcrystalbase.py)、main() 関数が呼び出されます。この関数は、あらかじめ定義されている lattice_parameters を使用して、以下の結晶学的な情報を標準出力に出力します。

  1. 初期の格子定数。

  2. 計算された実空間の格子ベクトル \(\mathbf{a}_x, \mathbf{a}_y, \mathbf{a}_z\) (Å単位)。

  3. 計算された計量テンソル \(g_{ij}\) (Å単位)。

  4. 単位胞の体積 (Å\(^3\)単位)。

  5. 計算された逆格子定数。

  6. 計算された逆格子ベクトル \(\mathbf{R}_x, \mathbf{R}_y, \mathbf{R}_z\)\(^{-1}\)単位)。

  7. 計算された逆格子空間の計量テンソル \(R_{gij}\)\(^{-1}\)単位)。

  8. 逆格子単位胞の体積 (Å\(^{-3}\)単位)。

  9. 分数座標 [0,0,0][1,1,1] 間の距離の例。

  10. 分数座標 [0,0,0], [1,1,1], [1,0,0] によって形成される角度の例。

  11. 分数座標 [0,0,0], [1,0,0], [0,1,0] によって形成される角度の例。

実行後、プログラムは exit() を呼び出して終了します。これは、ライブラリの機能のデモンストレーションと、主要な計算結果の確認を目的としています。