KPROJ编译教程

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

相关推荐
To_OC8 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔8 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
不好听6138 小时前
从一行 JSX 到屏幕像素:前端开发者必须懂的浏览器渲染管线
前端
恒拓高科WorkPlus8 小时前
企业级内网即时通讯建设模型:BeeWorks内网IM四层架构
前端
2401_841495648 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
前端小李子9 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端