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

相关推荐
觅_2 小时前
前端学习后端的时候 选择一个技术
前端·学习
独泪了无痕2 小时前
CryptoJS:数据安全的JavaScript加密利器
前端·vue.js·node.js
重生之我是Java开发战士2 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
发现一只大呆瓜2 小时前
一文搞懂 Vite 处理CommonJS包、按需编译逻辑及 Rollup 插件兼容规则
前端
念恒123062 小时前
Python(循环中断)
开发语言·python
Edwardwu2 小时前
写了个y-mxgraph:给 draw.io 接上了 Yjs,顺便解决了部署在 iframe 里的一堆问题
前端·typescript
郑重其事,鹏程万里2 小时前
表达式计算器(mvel2)
java
其实防守也摸鱼3 小时前
软件安全与漏洞--软件安全编码
java·前端·网络·安全·网络安全·web·工具
888CC++3 小时前
栈上分配 VS 堆分配 核心区别
java·开发语言·jvm