結晶構造の単位格子と逆格子単位格子の描画

概要 (Abstract)

crystal_draw_cell.py は、指定された格子定数と原子サイト情報に基づき、実空間および逆空間の単位格子と原子配置を3Dで描画するPythonスクリプトです。格子定数から格子ベクトル、計量テンソル、単位格子の体積を計算し表示します。逆格子についても同様の計算と表示を行います。生成された原子サイトは、指定された描画範囲に基づいて重複を避けながらリストに追加されます。最終的に、matplotlib を用いて実空間の単位格子、逆空間の単位格子、および原子配置を3Dプロットとして可視化し、表示します。

プログラム名

crystal_draw_cell.py

依存ライブラリ (Required Libraries)

本プログラムの実行には、以下のライブラリが必要です。

  • 標準ライブラリ:

    • sys

    • os

    • copy

  • 非標準ライブラリ:

    • numpy (数値計算ライブラリ)

    • matplotlib.pyplot (3Dプロットの描画に利用されます。コード内では plt として直接使用されていますが、明示的な import matplotlib.pyplot as plt 文はありません。tkcrystalbase 内部でインポートされているか、または別途設定されている可能性があります。)

    • tkcrystalbase (結晶構造計算および描画のためのカスタムライブラリ)

使用方法 (Usage)

本スクリプトはコマンドライン引数を取らず、Pythonインタプリタで直接実行されます。

python crystal_draw_cell.py

スクリプトの動作をカスタマイズするには、ソースコード内のグローバル変数を編集してください。

グローバル変数 (Global Variables)

スクリプトの動作を設定するための主要なグローバル変数を以下に示します。

  • lattice_parameters

    • 説明: 単位格子の格子定数を定義するリストです。

    • 形式: [a, b, c, alpha, beta, gamma]

      • a, b, c: 格子の長さ(オングストローム、A

      • alpha, beta, gamma: 格子間の角度(度、degree

    • デフォルト値: [ 5.62, 5.62, 5.62, 60.0, 60.0, 60.0]

  • sites

    • 説明: 単位格子内の原子サイト情報を定義するリストです。各要素は原子1つの情報を含むリストです。

    • 形式: 各原子サイトは以下の要素を持つリストです。

      • 原子名 (str)

      • サイトラベル (str)

      • 原子番号 (int)

      • 原子質量 (float)

      • 電荷 (float)

      • 半径 (float)

      • 描画色 (str)

      • 単位格子内での相対座標 (numpy.array, [x, y, z])

    • デフォルト値: NaとClの原子サイトが複数定義されています。

  • kr

    • 説明: プロットにおける原子サイズを調整するための係数です。

    • 形式: float

    • デフォルト値: 100.0

  • rmin

    • 説明: 同一原子サイトと判断するための最小距離(オングストローム、A)です。

    • 形式: float

    • デフォルト値: 0.1

  • kRUC

    • 説明: 逆格子単位格子を実空間単位格子に対してプロットする際のスケール係数です。

    • 形式: float

    • デフォルト値: 0.8

  • nrange

    • 説明: 結晶構造を描画する単位格子の範囲を定義します。

    • 形式: [[min_x, max_x], [min_y, max_y], [min_z, max_z]]

    • デフォルト値: [[-0.1, 1.1], [-0.1, 1.1], [-0.1, 1.1]]

  • figsize

    • 説明: 生成される matplotlib の図のサイズ(幅、高さ)をインチ単位で指定します。

    • 形式: tuple ((width, height))

    • デフォルト値: (12, 12)

関数 (Functions)

main()

  • 概要: 結晶の単位格子と逆格子単位格子を計算し、3Dプロットで表示します。

  • 詳細説明: 本関数は、グローバル変数 lattice_parameterssites で定義された結晶情報を使用します。

    1. lattice_parameters を基に、tkcrystalbase からインポートされた cal_lattice_vectors() で格子ベクトルを、cal_metrics() で計量テンソルを、cal_volume() で単位格子の体積を計算し、その結果をコンソールに表示します。

    2. 計算された格子ベクトルから、cal_reciprocal_lattice_vectors() で逆格子ベクトルを、cal_reciprocal_lattice_parameters() で逆格子定数を、そして逆格子ベクトルを用いて逆格子計量テンソルと逆格子単位格子の体積を計算し、コンソールに表示します。

    3. グローバル変数 nrange で指定された範囲に基づいて、結晶内のすべての原子サイトを生成します。各原子サイトの相対座標は reduce01() で0-1範囲に正規化された後、add_site() を使用して重複を避けながら allsites リストに格納されます。

    4. matplotlib を用いて、実空間の単位格子、逆空間の単位格子、および原子配置を3Dで描画します。実空間および逆空間の単位格子の描画には draw_unitcell() が使用されます。逆格子単位格子は kRUC 係数でスケールされます。

    5. プロットのアスペクト比を調整しようとしますが、3Dプロットの set_aspect() は実装されていないため、代わりに xlim, ylim, zlim を調整して見た目の比率を均等に保ちます。

    6. 最終的なプロットを表示し、プログラムを終了します。

  • 引数: なし

  • 戻り値: なし

入出力 (Input/Output)

入力

  • コマンドライン引数: 本スクリプトはコマンドライン引数を受け付けません。

  • 設定値: スクリプトの動作は、ソースコード内で定義されている以下のグローバル変数によって制御されます。

    • lattice_parameters

    • sites

    • kr

    • rmin

    • kRUC

    • nrange

    • figsize

出力

  • 標準出力:

    • 設定された格子定数(lattice_parameters

    • 計算された実空間の格子ベクトル(ax, ay, az

    • 計算された実空間の計量テンソル(gij

    • 計算された実空間の単位格子の体積

    • 計算された逆空間の格子定数(Rlatt

    • 計算された逆空間の格子ベクトル(Rax, Ray, Raz

    • 計算された逆空間の計量テンソル(Rgij

    • 計算された逆空間の単位格子の体積

    • 描画対象となるすべての原子サイトのリスト(原子名、サイトラベル、座標、電荷)

  • グラフィカル出力:

    • matplotlib によって生成される3Dプロットウィンドウ。

    • このプロットには、以下の要素が含まれます。

      • 実空間の単位格子(黒線)

      • 逆空間の単位格子(赤線、kRUC 係数でスケール)

      • nrange で指定された範囲内の原子配置(sites で定義された色とサイズ)

その他 (Miscellaneous)

  • 本スクリプトは、tkcrystalbase ライブラリに依存しており、結晶構造計算に関する詳細な機能はそのライブラリによって提供されています。

  • コード内で exit() が使用されていますが、これはプログラムを終了させるためのものです。