PROJ 是一个基于平面波方法的k投影/能带反折叠程序。将超胞的波函数投影回原胞的布里渊区,从而得到展开的有效能带结构(EBS, Effective Band Structure)。 支持的第一性原理软件: VASP(WAVECAR)、Quantum ESPRESSO(data-file-schema.xml + wfc\*.dat)、ABINIT(\_WFK文件) 使用参考:https://mp.weixin.qq.com/s/T2eCSlfKdU-R9YMMFxs4Uw KPROJ 源码下载与解压 下载地址:https://github.com/mxchen-2020/kproj/tree/develop unzip -o kproj-develop.zip -d kproj-develop 解压后的目录结构: kproj-develop/kproj-develop/ ├── src/ # 核心源码 │ ├── main.f # 主程序入口 │ ├── mod_comp.f # 基本单位和精度参数 │ ├── mod_input.f # 输入参数读取(类似VASP的INCAR风格) │ ├── mod_wave.f # 波函数接口模块(VASP/QE/ABINIT) │ ├── mod_lattice.f # 晶格量、矩阵、G矢量生成 │ ├── mod_fft.f # FFT傅里叶变换模块 │ ├── mod_kproj.f # k-projection核心算法 │ ├── mod_step_funciton.f # 空间窗口步进函数 │ ├── out_bands.f # 能带输出(bs_projected.dat) │ ├── out_psi2.f # 波函数模方输出 │ ├── out_pchg.f # 部分电荷密度输出 │ ├── merge_bndfiles.f # 合并多个bs_projected.dat │ ├── bsplt_k_projected.f # 能带分割工具 │ ├── combine_bsfiles.f # 能带文件合并 │ ├── eig2bs.f # 本征值转能带格式 │ ├── proj2mesh.f # 投影到网格 │ ├── dlexlib.f # 词法分析库 │ ├── drdatab.f # 数据读取库 │ ├── FFT/ # FFT子模块(include文件) │ │ ├── fft.f │ │ ├── fft_allocate.f │ │ ├── fft_cutoffs.f │ │ ├── gfft.f │ │ ├── wf_to_fftmesh.f │ │ └── cp_g_to_fftmesh.f │ ├── qe_related_modules/ # QE接口 │ │ ├── mod_read_information_qe.f # 从QE XML读取参数 │ │ ├── mod_kproj_qe.f # QE的k-projection实现 │ │ └── qes_types_module.f # QE数据类型定义 │ ├── abinit_related_modules/ # ABINIT接口 │ │ ├── mod_read_information_ab.f # 从ABINIT _WFK读取参数 │ │ ├── mod_kproj_abinit.f # ABINIT的k-projection实现 │ │ └── README │ ├── other_unfold/ # 其他展开方法 │ │ ├── mod_other.f # 入口调度 │ │ ├── mod_metric.f # 度量张量 │ │ ├── mod_lcao.f # LCAO能带反折叠(ABACUS) │ │ ├── mod_phonon.f # 声子谱反折叠(Phonopy) │ │ └── README │ ├── Makefile / Makefile.in # 编译文件 │ ├── fox.sh / fox.tgz # Fox XML库(QE解析用) │ └── README # 源码说明 ├── utils/ # 工具集 │ ├── kproj_plot.py # Python可视化脚本 │ ├── futils / run_futils # 后处理工具(生成gnuplot/dx文件) │ ├── kpts_path.f90 / ksplit.f90 # K点路径生成/分割 │ ├── Band-plots.cfg / Band-plots.net # DX可视化配置 │ └── supercell/ # 超胞生成器 │ ├── supercell.f # Fortran超胞生成程序 │ ├── bp.f # 黑磷超胞示例 │ ├── mod_poscar.f/f90 # POSCAR读取模块 │ ├── pos2stru.f90 # POSCAR转STRU(ABACUS格式) │ └── examples/ # 多处示例(石墨烯、黑磷、硅烯等) └── examples/ # 使用示例 └── vasp/ ├── gr_rt7_rt7/ # 石墨烯√7×√7超胞示例 │ ├── gen_structure/ # 超胞生成 │ ├── scf/ # 自洽计算 │ └── band/ # 能带展开(含INKPROJ) └── defected_graphene/ # 缺陷石墨烯示例 必备库与依赖 | 依赖 | 版本要求 | 用途 | | ---------------------------------------- | ------------------------- | ---------------- | | **Intel Fortran(ifort)** 或 **gfortran** | ifort 2019+ 或 gfortran 9+ | Fortran编译器 | | **Intel MKL** | 2019+ | FFTW3接口(ifort推荐) | | **FFTW3** | ≥ 3.3.x | 快速傅里叶变换库 | | **OpenMP** | 编译器自带 | 多线程FFT并行 | | **make** | 任意版本 | 构建工具 | 在编译前配置 Makefile 中的 FFTW 路径: FFTW_INCLUDES = /usr/local/include/ #或自定义路径: /home/user/bin/fftw-3.3.9/build/include 可通过命令在Intel编译器安装目录中搜寻 find ~/intel -name "fftw3.f03" 然后在FFTW_INCLUDES = 后面添加正确的路径/包含fftw3.f03的目录 编译安装流程 # 进入源码目录 cd kproj-develop/kproj-develop/src/ # 步骤1: 解压并编译Fox XML库( make fox # 该命令执行 fox.sh,解压 fox.tgz 并编译 # 步骤2: 编译主程序 make kproj # 生成可执行文件 kproj 若使用 gfortran,需修改 Makefile: # 注释掉 ifort 行,取消 gfortran 行注释: FF = gfortran OPT = -ffree-form -O3 -march=native LOPT = # 注意: gfortran 编译时可能需要额外链接 FFTW3: -lfftw3 -lfftw3_threads