以下は、Python プログラム md_c.py の解析結果を Markdown 形式でまとめたドキュメントです。

## 1) プログラムの動作概要

- CIF ファイルを pymatgen 経由で読み込み、結晶格子情報とサイト情報を取得する。
- Born–Mayer (SX-1) ポテンシャルを用いた短距離相互作用を計算する。SX-1 パラメータは外部ファイルから読み込む。
- Ewald の長距離相互作用を計算する。計算には以下のいずれかの方法を使用可能：
  - ctypes でロードした C DLL（ewald_c.dll）を用いた高速実装
  - DLL のロードに失敗した場合は Python 実装にフォールバック
- 合成ポテンシャルエネルギーと力を計算し、原子の系全体のエネルギーと力のベクトルを返す。力は eV/Å 、エネルギーは eV 表記。
- 分子動力学（MD）を実行する。以下をサポート:
  - 初期位置の設定、初期速度の割り当て（Maxwell-Boltzmann 分布またはゼロ）
  - Berendsen 温度緩和（任意の thermostat 指定時の速度スケーリング）
  - 時間積分は Velocity-Verlet 風の更新（半ステップの力更新を挟んだ形式）
  - 位置の wrap（周期境界条件）を実施
  - 出力ファイル（XYZ 形式）へのトラジェクトリ保存
  - 初期状態のログ出力と、必要に応じた内訳（Ewald/Born–Mayer の寄与の breakdown）の表示
- ユーザーがコマンドライン引数で設定可能

入力ファイルの例として、CIF ファイル MgO.cif と SX-1 パラメータ TSV が挙げられている（コード内の説明コメント参照）。

主なクラス/機能
- EwaldSX1Engine
  - lattice_parameters、sites、sx1_db などを元に Ewald（C 動的 DLL または Python 御用実装）と Born–Mayer を組み合わせてエネルギー・力を計算
  - update_positions_cart: 分率座標から Cartesian 座標へ反映・wrap
  - compute_energy_forces: Ewald のエネルギー・力、BM のエネルギー・力の計算、総エネルギー・総力の算出と breakdown の返却
- いくつかのユーティリティ関数
  - frac_to_cart、cart_to_frac、wrap_frac
  - instantaneous_temperature、kinetic_energy、maxwell_boltzmann_velocities、berendsen_scale
  - write_xyz: XYZ ファイル出力機能

- CLI（parse_args と main）
  - CIF のパス、SX-1 パラメータ、スケーリング、Ewald の近似精度・α、α 自動選択、nrmax/hgmax、半空間/全空間の切替、DLL のパス、ctypes の使用有無、Born–Mayer の切り替え、MD の時間刻み・ステップ数・温度・サーモスタット、初期速度・初期微小変位、出力ファイルとインターバル等を指定可能

出力の形式
- 初期状態と毎ステップのエネルギー・温度・時間などのログ
- 指定があれば XYZ 形式のトラジェクトリファイル
- print breakdown オプションで Ewald/BM の内訳をログ表示

補足
- 単位系は以下のとおり（コードコメントに記載）
  - 位置: Å
  - 速度: Å/fs
  - 力: eV/Å
  - 質量: eV·fs^2/Å^2
  - 時間: fs

---

## 2) 必要な非標準ライブラリとインストール方法

このプログラムは以下の外部ライブラリ・リソースに依存します。

- Python ライブラリ
  - numpy
  - pymatgen（CIF 読み込みなどに使用）
  - ewaldf_BM (自作ライブラリ、Python モジュールとして同梱想定。CIF 読み込み、格子情報、α設計などを提供)
- C 計算用の DLL/ラッパー
  - ewald_c_ctypes（ctypes ラッパー）を利用可能。実際には ewald_c.dll をロードして全サイト一括計算を行うことを意図
  - DLL のロードには ewald_c.dll が必要。デフォルトは ./ewald_c.dll。パスは --ewald-dll で変更可能
  - DLL ロードに失敗した場合、Python 実装へ自動フォールバック

インストール手順の例
- Python 環境を用意
  - Python 3.x を推奨
- パッケージのインストール
  - pip を用いて numpy と pymatgen をインストール
    - pip install numpy pymatgen
- 自作ライブラリ（このリポジトリに含まれている前提の場合が多い）
  - git でリポジトリをクローンした場合、pip 等でデプロイ可能な場合もあります。手元の構成に合わせてください。
  - もし ewald_c_ctypes.py が別リポジトリとして必要なら、それを取得して配置
- C DLL の用意
  - ewald_c.dll を用意して、md_c.py と同階層、あるいは --ewald-dll で指定したパスへ配置
  - DLL が用意できない場合は Python 実装が用いられるため、環境が大幅に制限されることはありませんが、速度は低下します

注意
- 公式の PyPI パッケージとしての公開状況を前提とせず、リポジトリ内の依存関係・ローカルモジュールとして動作する想定です。個別の環境に応じて import エラーが出る場合は、必要なファイル（ewaldf_BM.py、ewald_c_ctypes.py、ewald_c.dll など）を揃えてください。

---

## 3) 必要な入力ファイル

- CIF ファイル
  - --cif で指定する CIF ファイル（例: MgO.cif）
  - pymatgen を介して読み込み、格子情報・サイト情報を取得する
- SX-1 パラメータファイル
  - SX-1 のパラメータ TSV（Element, mass, charge, ai, bi, ci, ARAD などを含む）
  - --sx1 で指定するファイル
-（任意）CIF の電荷を SX-1 の電荷で上書きする場合
  - --use-cif-charges を使わず、SX-1 の charge をサイト電荷として用いる
- 追加の設定ファイル
  - 特に不要だが、SX-1 の読み込みに合わせたフォーマットの TSV が必要

---

## 4) 実行後に生成される出力ファイル

- XYZ トラジェクトリファイル（任意）
  - --save で指定したパスへ出力
  - 1 フレームごとに "element x y z" 形式で保存
  - 初期状態は step=0 で保存され、--save-interval ごとに追加フレームが追加
- 標準