pymatgen主要模块小例子：离线终端实操

在解压目录运行：
  bash run.sh
  ls analysis
  ls figures

使用集群已有pymatgen/2026.9.24环境（含NumPy/SciPy/Matplotlib），1个CPU核心。
不启动VASP，不访问在线数据库，不安装软件，不写个人配置。

也可以逐步运行：
  module load pymatgen/2026.9.24
  python modules.py
  python plot.py

包括哪些操作：
1. MinimumDistanceNN：Si/Cu/hBN/理想NaCl的最近壳层配位。
   本例按最近距离的10%窗口，cutoff=8Å，不把所有邻居都算进第一壳层。
   对应配位分别4、12、3、6。改变定义会影响配位，不是唯一的化学键判据。
2. StructureGraph + Larsen维数：使用同一近邻图，Si/Cu/NaCl为3D，hBN为2D。
   三维周期晶胞里含真空的hBN，不等于三维成键网络。
3. BVAnalyzer：理想NaCl的形式价态Na+1/Cl-1，不是Bader实际电荷。
4. EwaldSummation：预先给定Na+1/Cl-1点电荷，a=5.64Å、8原子常规胞。
   总静电能约-35.69406eV，即约-8.92351eV/NaCl；与独立Madelung表达式对照。
   晶格线性扩大2倍，静电能减半。不是NaCl的DFT总能或内聚能。
5. Supercell/ReplaceSiteSpecies：Si2->Si4，再指定0号位点替换为Ge，得到Si3Ge1。
   生成前后POSCAR，原结构保留。StructureMatcher用于比较原胞/超胞等价性，
   不把替位后的成分变化当作同一种结构。没有结构松弛或新的DFT能量。
6. WulffShape：从已有真实Cu体相/对称Cu(111)薄层E0及面积重新推导gamma，
   gamma约1.327645J/m2。只输入{111}对称等价面族，得到受限八面体构型。
   没有{100}/{110}等面能，不能把此图称作完整Cu平衡形貌预测。
   构型坐标归一化，不能读作纳米颗粒尺寸；面积/体积与独立八面体公式核对。

文件：
  analysis/RESULTS.json          各模块数值、参数与物理边界
  analysis/coordination.csv      配位和维数表
  analysis/*-bond-graph.json     周期近邻图
  analysis/NaCl-formal-valence.json   带形式价态的结构
  analysis/POSCAR-*              理想NaCl及Si/Ge结构变换结果
  figures/*.png                 三张结构/数据图

inputs里的Si/Cu/hBN来自既有真实VASP计算几何。
Cu体相/薄层原始输入和输出用于复算现有表面能，没有新增DFT。
NaCl点电荷模型及Si->Ge的几何替换明确由程序构造。
原始输出/输入不覆盖，INPUT-HASHES.json与MANIFEST.sha256用于追溯文件。
这些小脚本对应提供的结构和参数，替换材料时要先修改路径、近邻判据、
指定价态、晶面集合等条件，而不是把任意数据重命名后直接套用。

本包补充几个主要离线模块，不代表pymatgen所有模块或API都已运行。
pmg在线query需要用户自己的账号和数据授权；图形view需要显示环境。
旧版本analysis命名空间的一些入口实际转发到core；以集群本版接口为准。
