crystal_distance.py ドキュメント
本ドキュメントは、Pythonスクリプト crystal_distance.py の機能、利用方法、入出力、およびコード構造について説明します。
概要
crystal_distance.py は、結晶中の原子間距離を計算し、表示するためのPythonスクリプトです。与えられた格子定数と原子サイト情報に基づき、結晶中の原子間距離を計算します。また、実空間および逆空間の格子情報(格子ベクトル、メトリックテンソル、単位胞体積など)も計算し、標準出力に表示します。計算された原子間距離は、指定された距離範囲内でソートされて出力されます。
利用方法
スクリプトの実行
このスクリプトは、Pythonインタープリターを使用して直接実行できます。コマンドライン引数は不要です。
python crystal_distance.py
コマンドライン引数
crystal_distance.py は、コマンドライン引数を受け付けません。
設定方法
スクリプトの動作は、ソースコード内の以下のグローバル変数を直接編集することで設定できます。
lattice_parameters: 結晶の格子定数を定義します。[a, b, c, alpha, beta, gamma]の順で、長さはオングストローム (A)、角度は度 (degree) で指定します。# 例: 直方晶に近い設定 lattice_parameters = [ 5.62, 5.62, 5.62, 90.0, 90.0, 90.0]
sites: 結晶内の原子サイト情報を定義します。各原子サイトは以下の要素を持つリストとして記述されます。['原子名', 'サイトラベル', 原子番号, 原子質量, 電荷, 半径, '色', numpy.array([分数座標x, 分数座標y, 分数座標z])]# 例: NaとClのサイト情報 sites = [ ['Na', 'Na1', 11, 22.98997, +1.0, 0.7, 'red', np.array([0.0, 0.0, 0.0])] ,['Cl', 'Cl1', 17, 35.4527, -1.0, 1.4, 'blue', np.array([0.5, 0.0, 0.0])] ]
rmin: 原子間距離を計算する際の最小距離閾値(オングストローム)。これより小さい距離は無視されます。また、同一サイトの判断にも使用されます。rmin = 0.1 # angstrom. used to judge identical site
rmax: 原子間距離を計算する際の最大距離閾値(オングストローム)。これより大きい距離は無視されます。rmax = 4.5 # angstrom.
入出力
入力
スクリプトはファイルからの入力を受け付けません。必要な全ての情報は、スクリプト内のグローバル変数 lattice_parameters, sites, rmin, および rmax から直接読み込まれます。
出力
スクリプトは、計算結果を標準出力 (stdout) へテキスト形式で出力します。
出力される主な情報と形式は以下の通りです。
格子定数:
Lattice parameters: [5.62, 5.62, 5.62, 90.0, 90.0, 90.0]
格子ベクトル (実空間):
Lattice vectors: ax: ( 5.6200, 0.0000, 0.0000) A ay: ( 0.0000, 5.6200, 0.0000) A az: ( 0.0000, 0.0000, 5.6200) A
メトリックテンソル (実空間):
Metric tensor: gij: ( 31.5844, 0.0000, 0.0000) A ( 0.0000, 31.5844, 0.0000) A ( 0.0000, 0.0000, 31.5844) A
単位胞体積 (実空間):
Volume: 177.5616 A^3 Unit cell volume: 177.5616 A^3
逆格子定数、逆格子ベクトル、逆格子メトリックテンソル、逆格子単位胞体積: 同様に各情報が出力されます。
距離計算に使用する単位胞の最大オフセット (
nmax):nmax: 1 1 1
原子間距離:
rminとrmaxの範囲内の原子間距離が昇順にソートされて出力されます。各行には、2つのサイト情報(ラベル、分数座標)、単位胞のオフセット (ix, iy, iz)、および計算された距離が表示されます。Interatomic distances: Na1 ( 0.0000, 0.0000, 0.0000) - Cl1 ( 0.5000, 0.0000, 0.0000) + ( 0, 0, 0): dis = 2.8100 A Na1 ( 0.0000, 0.0000, 0.0000) - Cl3 ( 0.0000, 0.0000, 0.5000) + ( 0, 0, 0): dis = 2.8100 A ...
コード解説
主要な変数
lattice_parameters: 結晶の格子定数 (A, degree) を格納するリスト。sites: 結晶中の各原子サイトの情報を格納するリストのリスト。rmin: 原子間距離の最小閾値(オングストローム)。rmax: 原子間距離の最大閾値(オングストローム)。aij: 実空間の格子ベクトルを格納するnumpy配列。gij: 実空間のメトリックテンソルを格納するnumpy配列。volume: 実空間の単位胞体積(A^3)。Raij: 逆空間の格子ベクトルを格納するnumpy配列。Rlatt: 逆格子定数を格納するリスト。Rgij: 逆空間のメトリックテンソルを格納するnumpy配列。Rvolume: 逆空間の単位胞体積(A^-3)。nxmax,nymax,nzmax: 距離計算時に考慮する単位胞のオフセットの最大値。rmaxと格子定数から計算されます。rlist: 計算された原子間距離、関連するサイト情報、および単位胞のオフセットを格納するリスト。各要素は[距離, site0情報, site1情報, ix, iy, iz]の形式です。
主要な関数
main():スクリプトのエントリーポイントとなる関数です。
lattice_parametersとsitesグローバル変数で定義された情報に基づき、実空間および逆空間の格子情報(格子ベクトル、メトリックテンソル、単位胞体積)を計算し、標準出力に表示します。rminとrmaxで指定された範囲内で、全ての原子ペア間の原子間距離を計算します。この際、周囲の単位胞(nxmax,nymax,nzmaxの範囲)に存在する原子も考慮します。計算された原子間距離を昇順にソートし、各距離と関連するサイト情報、単位胞のオフセットを標準出力に表示します。
tkcrystalbase モジュールからインポートされた以下の関数が内部で使用されています。これらの関数は crystal_distance.py のソースコード内には定義されていません。
cal_lattice_vectors(lattice_parameters): 格子定数から実空間格子ベクトルを計算します。cal_metrics(lattice_parameters_or_vectors): 格子定数または格子ベクトルからメトリックテンソルと逆メトリックテンソルを計算します。cal_volume(lattice_vectors): 格子ベクトルから単位胞体積を計算します。cal_reciprocal_lattice_vectors(lattice_vectors): 実空間格子ベクトルから逆空間格子ベクトルを計算します。cal_reciprocal_lattice_parameters(reciprocal_lattice_vectors): 逆空間格子ベクトルから逆格子定数を計算します。distance(pos0, pos1_offset, gij): 2つの分数座標とメトリックテンソルgijを使用して実空間距離を計算します。
非標準ライブラリ
このスクリプトは、以下の非標準ライブラリを利用しています。
numpy(別名np): 高度な数値計算を効率的に行うためのライブラリです。配列操作、数学関数(sin,cos,tan,arcsin,arccos,arctan,exp,log,sqrtなど)、および線形代数(linalg)の機能を提供します。mpl_toolkits.mplot3d:matplotlibの一部で、3次元プロット機能を提供します。Axes3Dクラスがインポートされていますが、コード中では直接使用されていません。matplotlib.pyplot(別名plt): グラフや図の描画を行うためのライブラリです。コード中ではインポートされていますが、直接使用されていません。tkcrystalbase: 結晶学に関連する計算機能(格子情報、距離計算など)を提供するカスタムモジュールです。このモジュールはcrystal_distance.pyの配布物に含まれているか、Python環境にインストールされている必要があります。