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 =