以下は、Python プログラム ewaldfP_BM.py の解析結果を、用途別に整理したドキュメントです。

# 1) プログラムの動作概要

- 機能
  - CIF ファイルをもとに格子パラメータとサイト情報を取得し、Ewald のリアル空間項・ Reciprocal 空間項・自己項を計算してサイトごとのエネルギーと力を算出する。
  - SX-1 データベースを用いた短距離反発項（Born–Mayer）を per-site で評価し、サイトごとのエネルギーと力を合成して全体のエネルギーと力を算出する。
  - オプションとして格子のスケーリング（等方スケールまたは各軸のスケール）や、α の自動決定、カットオフ半径、半空間選択（halfspace=true/false）などを設定可能。
  - 内部的には Ewald のポテンシャル・力と Born–Mayer の反発を分離して計算し、それらを組み合わせて総エネルギー・総力を出力する。

- 出力の要点
  - 各サイトごとのエネルギーと力（Ewald 分、Born–Mayer 分、総エネルギー、総力）を表示。
  - セル全体のエネルギー（Ewald tot、Born–Mayer tot、総エネルギー）と力の和の検算値を表示。
  - オプションで lattice のスケールを適用前後の情報を表示（--print-lattice が指定された場合）。
  - 0 K の応力算出には、Virial 定理の実装箇所はコメントアウトされており、代替として有限差分による応力計算を実行するコード（compute_stress_by_strain_fd）を実行可能。
  - 応力は Pa/GPa/GPa 単位で表示。

- 入力データの種類
  - CIF ファイル（原子種・分散・格子情報を含むもの）を pymatgen の Structure で読み込む。
  - SX-1 データベース（短距離 Born–Mayer パラメータ）ファイル（タブ区切り）を読み込み、 element 間の aij, bij, charge などを計算に使用。
  - 任意の charge-map で元素ごとの電荷をオーバライド可能。

- 実行の流れ（主な処理順序）
  1. CIF の読み込みとサイトリストの作成
  2. ラティスのスケーリング設定の適用
  3. Ewald のパラメータ設定（alpha、prec、nrmax/hgmax など）と自動 α のオプション
  4. SX-1 データの読込
  5. 全サイトに対して Ewald のポテンシャル・力を計算
  6. Born–Mayer の短距離ポテンシャルと力を一括計算
  7. 各サイトについてエネルギーと力を表示（オプションの全サイト表示）
  8. セル全体エネルギー・力の合計、応力の計算
  9. 最後に全体のエネルギー・力・応力を表示

# 2) 必要な非標準ライブラリとインストール方法

このスクリプトは以下の外部ライブラリを前提として動作します。

- pymatgen
  - 説明: CIF の読み込みと結晶格子・格子パラメータの取得に使用
  - インストール例:
    - pip install pymatgen
- numpy
  - 説明: 行列・ベクトル演算、数値計算
  - インストール例:
    - pip install numpy
- tkcrystalbase
  - 説明: tkcrystalbase が提供する格子計算関連関数（例: cal_lattice_vectors、cal_metrics、distance など）
  - インストール方法の例:
    - tkcrystalbase は PyPI が提供されている場合は pip install tkcrystalbase
    - もし公式リポジトリからの取得が必要な場合は、リポジトリの手順に従ってインストール（例: pip install git+https://github.com/ユーザー/tkcrystalbase.git など）
  - 注意: 本コードは tkcrystalbase からの関数を多用しており、同ライブラリが Python 環境で利用可能であることを前提とします。
- その他
  - 上記が満たされていれば Python 3.x 環境で動作します。必要に応じて依存関係を満たす仮想環境を推奨します。

補足
- ここで示したインストール方法は標準的なものです。環境によっては tkcrystalbase の配布形態が異なる場合があるため、入手元のドキュメントを確認してください。

# 3) 必要な入力ファイル

- CIF ファイル
  - 例: MgO.cif
  - 内容: 結晶構造の格子定数、空間群、原子位置（fractional coordinates）など
  - 形式: pymatgen が Structure.from_file で読み取れる形式
- SX-1 データベースファイル
  - 例: SX-1.txt など
  - 形式: タブ区切りのテキスト
  - 最小限の欄（ヘッダ）:
    - element, mass, charge, ai, bi, ci, ARAD
  - 実装上は以下を使用
    - 各元素の mass, charge, ai, bi, ci, ratom（原子量・電荷・ポテンシャルパラメータ）
- 任意（オプション）
  - カーチマップ（charge-map）文字列
    - 例: "Zn: +2, O: -2"
  - zero-charge フラグがある場合には全原子の電荷を 0 にする設定
  - アンダースコアのオプションを使って、元素毎の電荷を上書きする場合にも利用

# 4) 実行後に生成される出力ファイル

- 本スクリプトはファイルへの出力を明示的には行わず、標準出力へ情報を表示します。そのため「出力ファイル」という意味でのファイル生成は基本的には行いません。
- 出力の主内容
  - 各サイトごとのエネルギーと力（Ewald 分、Born–Mayer 分、総エネルギー、総力）
  - セル全体のエネルギー（Ewald tot、Born–Mayer tot、TOTAL energy）と力の総和
  - スケーリング適用後の lattice パラメータや体積（--print-lattice 指定時）
  - 0 K の応力計算結果（sigma_Pa、sigma_GPa、P_GPa の表示）等
- 実際の出力は stdout に連続して表示されるため、リダイレクトしてログとして保存することが一般的です。
  - 例: python ewaldfP_BM.py ... > results.log

# 5) コマンドラインでの