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

相关推荐
TPBoreas1 小时前
springboot我们项目中的常见注解
java·spring boot·后端
终将老去的穷苦程序员1 小时前
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
前端·npm·node.js
05候补工程师1 小时前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
asdfg12589631 小时前
三层架构(Controller-Service-DAO)模式中的controller 和 dao/mapper的通俗理解
java·架构模式
真实的菜1 小时前
Nacos单机部署入门:避坑指南与实战
java
之歆1 小时前
Day10_Node.js 与 Express 开发实战指南:从零到一构建专业级 Web 服务
前端·node.js·express
阿文的代码库1 小时前
浅谈:无向图的欧拉回路
算法
-Thinker1 小时前
AI 算法核心原理与实现
人工智能·算法·机器学习
装不满的克莱因瓶1 小时前
掌握生成对抗网络(GAN)原理——从零理解“对抗学习”的核心思想与生成机制
人工智能·pytorch·python·深度学习·神经网络·机器学习·ai
问心无愧05131 小时前
ctf show web入门107
android·前端·笔记·android studio