以下は、 Python 言語のプログラム ewaldf_BM.py を解析し、ドキュメント化したものです。

1) プログラムの動作
- 入力ファイルの読み込み
  - CIF ファイルを pymatgen で読み込み、結晶の格子パラメータと格子内原子サイト情報を取得する。
  - --charge-map または --zero-charge が指定されている場合、それに従って各サイトの電荷を設定する。デフォルトは原子の酸化状態（oxi_state）または 0.0。
- 格子情報の整形とスケーリング
  - a, b, c の格子長さに対して --scale または --scale-abc で拡縮を適用できる。scale-abc は三つの軸の個別スケーリング sa, sb, sc を受け取る。
  - --print-lattice が指定されると、スケーリング後の格子情報と体積を表示する。
- Ewald ポテンシャル（自励式長距離のエネルギーと力）の計算
  - ewald_potential_force_at_site 関数を用いて、各サイト i に対して以下を計算:
    - 実空間項（real space）UC1 と力 F_real
    - reciprocal 空間項（reciprocal space）UC2 と力 F_reci
    - 自己項 UC3
    - 総体のポテンシャル/力 MP（1/m 単位のポテンシャル）と F_tot（力の総和）
  - α（分布幅パラメータ）は手動指定または自動選択（--auto 等）と連携。α の初期値はデフォルト 0.3。
  - nrmax, hgmax は距離カットオフの整数範囲で、α に基づく推定値を用意。必要に応じてオーバーライド可能。
- SX-1 Born–Mayer（短距離反発項）の計算
  - SX-1 データベースファイル（--sx1 で指定）を読み込み、原子種ペアごとに aij, bij, charge を取得して Born–Mayer 力とエネルギーを短距離で評価する。
  - sr-cut で短距離カットを設定。Coulomb 欠片を含めるオプション (--sr-include-coulomb) あり（通常は False）。
  - 距離 r に対して、V_BM(r) および F_BM(r) を求め、サイトごとに E_bm_eV[i]（eV）と F_bm_N[i]（N）として蓄積。
- 出力
  - 各サイト i について、Ewald 系の寄与（Ewald energy, force）と Born–Mayer の寄与を表示
  - 総計（CELL TOTALS）として、全サイトの Ewald エネルギー合計、Born–Mayer 合計、TOTAL エネルギー、すべての力の合計を表示
  - all-sites 指定時には全サイトの情報を表示、そうでなければ先頭サイトのみ表示
  - 追加で、Lattice の情報表示オプションが有効な場合には格子情報も表示される
- 出力の形式
  - 標準出力へテキストを表示。ファイルとして自動的に保存する挙動はコード中には見られない（必要に応じてリダイレクトでファイル化可能）。

2) 必要な非標準ライブラリとインストール方法
このプログラムは外部ライブラリをいくつか利用しています。公式ドキュメント上の標準ライブラリだけでは動作しません。

- 非標準ライブラリ（推奨環境）
  - pymatgen: CIF/結晶構造の読み込みと格子パラメータの取得
  - numpy
  - (任意) tkcrystalbase: 格子計測・格子演算関連の関数群。コード上では tkcrystalbase から cal_lattice_vectors などをインポートして使用
- 依存ライブラリを満たすための一般的なインストール方法
  - Python 環境が整っている前提で、以下を実行
    - pip install numpy
    - pip install pymatgen
    - もし tkcrystalbase が公開パッケージとして入手可能であれば pip install tkcrystalbase。ただし、現状はソース配布または用途に応じたローカルモジュールである可能性が高く、配布元に従って設置してください。
  - 注意点
    - pymatgen は依存関係が多く、特に配布環境によっては追加のパッケージが必要になる場合があります。
    - tkcrystalbase は公開パッケージとして入手できない場合があり、ローカルのモジュールとして用意されていることが多いです。その場合は、コードと同じディレクトリに tkcrystalbase.py または tkcrystalbase ディレクトリを置いてインポートできる状態にしてください。

3) 必要な入力ファイル
- CIF ファイル
  - --cif MgO.cif のように指定される、結晶の構造情報を含む CIF ファイル
  - pymatgen の Structure.from_file で読める CIF 形式であること
- SX-1 パラメータデータベース
  - --sx1 に指定する、SX-1 パラメータファイル
  - Tab 区切り (TSV) 形式想定
  - 期待フォーマット（ヘッダ付き・タブ区切り）:
    element  mass  charge  ai  bi  ci  ARAD
  - このファイルは、各元素の ai, bi, charge など Born–Mayer 関連パラメータを含む必要がある
- その他
  - 必要に応じて --charge-map で指定する場合のキー/値ペア（例: Zn:+2,O:-2）

4) 実行後に生成される出力ファイル
- 本プログラムは基本的に標準出力へログを出力します。ファイルに自動保存される出力はありません。
- 出力内容の例
  - 各サイト i の情報:
    - site 名称、元素、電荷、Ewald エネルギー（J および eV）、Born–Mayer エネルギー（J および eV）、TOTAL エネルギー、力の成分（実空間・reciprocal・総和）など
  - CELL TOTALS:
    - Ewald total エネルギー（J / eV）、Born–Mayer total エネルギー、TOTAL energy、力の総和
  - --print-lattice が有効な場合には、Scaled lattice の数値と体積
- ファイルとして保存したい場合は、実行時に標準出力をリダイレクトするなどの方法を用いる
  - 例: python ewaldf_BM.py ... > output.log など

5) コマンドラインでの使用例 (Usage)
- 基本的な Ewald+Born–Mayer の計算（SX-1 データベース使用、デフォルト α、実空間/ reciprocal/自己項を計算）
  -