简介CASTEP-19.11.tar.gz 是 Materials Studio 常用第一性原理计算程序 CASTEP 19.11 版的源码压缩包面向从事固体电子结构、材料物性模拟的研究者与学生可用于几何优化、能带结构、频率分析、电荷密度与反应路径等密度泛函计算。包内共 4542 个文件包含完整的 configure/makefile 构建体系其中 param/cell 为计算输入与结构定义模板c/f90/mk 为源码与构建脚本cif/usp/recpot 等为结构文件与赝势库还附 tex/py 文档、示例与辅助工具压缩后约 20.12MB。文档和示例覆盖从环境配置、编译安装到典型算例输出的完整流程便于快速上手更新后的并行算法、更完善的赝势库与自洽场迭代改进有助于提升高精度计算效率与收敛速度。已有 1595 人浏览学习适合需要本地搭建 CASTEP 计算环境、扩展自定义功能或深入理解 DFT 实现的科研与教学用户参考。1. CASTEP-19.11.tar.gz一个让很多人卡在编译阶段的第一性原理包手上这份 CASTEP-19.11.tar.gz解出来是大量 Fortran 源码和 Makefile不是装好就能跑的二进制。很多人拿到后的第一反应是解压进 bin 目录发现里面只有空文件夹心就凉了半截。其实这是 CASTEP 的正常交付形态平面波 DFT 程序必须本地编译才能匹配你的 CPU 指令集和 MPI 实现。CASTEP 19.11 能算晶体基态能量、几何优化、能带、态密度、弹性常数、声子是材料模拟里非常重型且可靠的工具。这篇文章按我装它的顺序来解包、查依赖、编译串行与并行版、跑通最小体硅算例再把最容易翻车的五个坑提前讲清楚。适合已经装过其他 DFT 包、想快速把 CASTEP 用起来的计算材料从业者。2. 解包与依赖检查动手编译前先确认目录结构和工具链CASTEP 和常见开源 DFT 包不一样它没有 configure 脚本也不走 cmake。这意味着你没法通过./configure make一条路走到黑。最常见做法是解压后先读 INSTALL 文档看 19.11 这条发布线对编译器、MPI、数学库的约束再按本机环境选一个构架名去编译。跳过这一步直接 make大概率会在半小时后遇到一个莫名其妙的错误然后从头排查。2.1 解包后先读 INSTALL 与 Makefile目录里有什么tar -xzf CASTEP-19.11.tar.gz cd CASTEP-19.11 ls -la less INSTALL解压后第一件事不是跑 make而是看 INSTALL。这份文档会列出支持的编译器组合、MPI 实现、FFT 库要求以及常见构架名的命名规则。19.11 的编号规律是 19 代表 2019 年发布线11 代表 11 月同系列 17.21、19.11、21.11 的编译流程高度一致所以你会装这一版后面换新版也能快速上手。源码包大致分这几个部分src 目录放着全部 Fortran 源码编译报错几乎都发生在那里lib 目录存放构建中间产物和自带数值库Examples 目录是验证安装最宝贵的资产docs 放文档。我习惯在解压后先跑一句ls src | head -20扫一眼源码布局确认版本完整性再用grep -n ^ARCH Makefile | head -20看可用的构架名列表。构架名是 CASTEP 编译的核心概念它决定了编译器、MPI、数学库的排列组合。目录用途你需要注意什么srcFortran 源码编译错误的源头都在这里lib构建产物与自带库编译失败后必须先 make cleanExamples示例算例验证安装是否成功的第一手素材docs文档与说明INSTALL 必读别跳过2.2 依赖清单与选型编译器、MPI、FFT 库怎么搭配CASTEP 是平面波程序性能瓶颈集中在 FFT 和线性代数所以依赖重在三块Fortran 编译器、MPI 实现、BLAS/LAPACK 与 FFT 数学库。最省事的组合是 gfortran 配 OpenMPI 和 OpenBLAS因为主流 Linux 发行版自带前两者OpenBLAS 也能用包管理器直接装。如果你所在机构集群已经装好 Intel 编译器用 ifort 配 Intel MPI 和 MKL 是一体化方案数学库不用单独操心。组件可选方案选型理由编译器gfortran / ifortgfortran 省事ifort 性能与兼容性更好MPIOpenMPI / Intel MPI / MPICH本机练习用 OpenMPI集群看调度器自带哪个FFT 库FFTW3 / MKL二选一即可MKL 在平面波计算里优势明显BLAS/LAPACKOpenBLAS / MKL / 内置实现编译串行版时没有外部数学库也能通过许可证商业许可编译不需要运行算例需要有一种情况会让你在依赖阶段就翻车机器上同时装了两个 MPIwhich mpirun指向 A 版本mpif90却来自 B 版本。CASTEP 编译时用 mpif90 作为编译器前端运行时用 mpirun 启动两者版本分裂会在链接阶段或运行瞬间爆出难以定位的错误。我一般会把 gfortran 和它配套的 OpenMPI 放进同一个 module 环境里或者干脆用绝对路径固定 mpif90避免 PATH 顺序捣乱。另一个常见误解是以为没有 MKL 就编不过。实际上 19.11 自带了一些数值计算的后备实现串行版在纯 gfortran 环境下可以完成编译。区别在于性能同等体系规模下用 MKL 做 FFT 的版本通常比纯内置实现快这在跑大体系时体感非常明显。所以我的建议是哪怕编译时不强依赖 MKL也优先把数学库环境配齐再动手。2.3 一条命令验证工具链编译器与 MPI 环境自检which gfortran gfortran --version | head -1 which ifort ifort --version | head -1 which mpif90 mpif90 --version | head -1 which mpirun echo MKLROOT$MKLROOT echo LD_LIBRARY_PATH$LD_LIBRARY_PATH这六行命令能一次性确认四个关键点Fortran 编译器是否存在、MPI 编译器前端是否可用、mpirun 是否在 PATH 里、数学库环境变量是否已导入。注意 mpif90 的--version输出的其实是底层 Fortran 编译器版本仔细看它指向的是 gfortran 还是 ifort。如果 mpif90 显示的是旧版本 gfortran而你打算用新版 gfortran 编译两者不一致会带来标准库接口不匹配的问题。我还会在自检时顺手确认物理核心数这个数字决定后面 make 的-j参数。nproc会给出逻辑核数但编译时每个编译单元都会吃内存笔记本 8 核的话-j 8通常没问题如果有 16 核但内存只有 16G建议降到-j 6或者-j 8加低负载。内存不足时编译进程被 OOM 杀掉现象就是最后几秒报错退出这时你容易误判成代码问题其实是资源问题。3. 编译流程串行版与 MPI 并行版的最小命令和参数CASTEP 的编译没有统一的官方魔改标准命令因为每个人的机器环境不同。但流程上有一个安全次序先编译串行版确认源码完整、编译器顺手再编译 MPI 并行版。直接上并行版的问题是一旦报错你很难分清是编译器问题、数学库问题还是 MPI 版本问题。串行版先跑通等于把变量砍掉了大半。3.1 先编译串行版最保险的第一步cd CASTEP-19.11 make clean make ARCHlinux_x86_64_gfortran -j 8如果 Makefile 里没有linux_x86_64_gfortran这个精确条目先执行grep -n ARCH Makefile | head -30查看可用列表然后挑一个命名里同时带你的架构和编译器名称的条目。这一步会生成bin/linux_x86_64_gfortran/castep.serial整个编译过程根据机器性能大约持续 10 到 30 分钟。ARCH是 CASTEP 编译系统里最重要的参数它不只是一个名字而是一整套编译选项的集合。构架名里通常包含目标 CPU 架构、操作系统、编译器、MPI 实现四个信息。19.11 的 Makefile 里会有不少预设构架从纯 gfortran 到 ifort 加 Intel MPI 的都有。选错构架的典型症状是编译成功但一运行就报非法指令或段错误因为编译选项里带了错误的指令集。比如在 AMD 机器上选了带特定 Intel 指令的构架就有可能出现这类问题。-j 8是并行编译参数8 通常取自nproc的结果。如果编译中途进程被杀优先怀疑内存不足把-j降到 4 再试。注意make clean必须放在前面因为 lib 目录里可能残留上一次编译的临时对象文件不清理干净会出现链接阶段的对象不匹配。3.2 升级为 MPI 并行版指定 MPI 与数学库make clean make ARCHlinux_x86_64_gfortran_openmpi -j 8构架名里带mpi后缀的条目会生成castep.mpi这是用于多核、多节点计算的版本。如果 Makefile 里找不到精确匹配的构架名可以查一下是否有COMMAND_MPI这类变量可供覆盖。我见过某套环境里构架列表只给了 ifort 版本但机器上只有 gfortran这时候的常见做法是复制对应构架的配置段把编译器名替换成 gfortran再重新编译。相比串行版MPI 版多了一个关键依赖MPI 头文件和运行库必须完整安装。比如在 Ubuntu 上需要libopenmpi-dev而不只是openmpi-bin。缺头文件时编译会在 Fortran 源码的use mpi处报错提示找不到 mpi 模块这比运行阶段才暴露问题友好得多。make clean make COMMAND_MPIopenmpi ARCHlinux_x86_64_gfortran -j 8COMMAND_MPI会在某些构架配置下被用来选择 MPI 启动器的具体型号。设成openmpi时编译过程会链接 OpenMPI 的库并生成适合mpirun启动的二进制。如果你的集群用 Intel MPI这里要设成对应的名称否则 mpirun 启动时会报库不匹配的错。编译完成后确认bin/下同时存在castep.serial和castep.mpi两个文件说明两种形态都成功了。3.3 编译参数对照表参数位置串行初学者本机多核常用集群生产建议编译器gfortrangfortran / ifortifortMPI不需要OpenMPIIntel MPI 或调度器内置 MPI数学库内置实现OpenBLAS 或 MKLMKLFFT内置 / FFTWFFTW3 或 MKLMKL启动方式直接运行 castep.serialmpirun -np 核数 castep.mpi通过调度器提交任务这张表的核心结论是物理计算性能的差异主要来自数学库而不是编译器本身。gfortran 加 MKL 的组合在实际算例中和 ifort 加 MKL 的差距通常在一个很小的百分比范围内。所以如果你的机器上只有 gfortran不必为了“性能更好”去折腾 ifort先用起来比什么优化都重要。3.4 编译成功后的安装与 PATH 安排mkdir -p ~/bin ln -s $PWD/bin/linux_x86_64_gfortran/castep.serial ~/bin/castep.serial ln -s $PWD/bin/linux_x86_64_gfortran/castep.mpi ~/bin/castep.mpi export PATH$HOME/bin:$PATH把可执行文件软链到~/bin的好处是源码包可以整个挪走或重装不影响已经建好的软链。但要注意软链指向的绝对路径是固定的如果之后移动了源码目录软链会失效需要重建。我不建议把整个源码包写进 PATH因为 CASTEP 会在工作目录下生成大量缓存文件不要把源码目录和算例目录混在一起。4. 跑通第一个算例Si.cell 与 Si.param 的最小配置编译成功的成就感会在首次运行时迅速蒸发如果连一个最小的算例都跑不通前面所有工作都要打问号。CASTEP 的输入和很多 DFT 软件不同它的主输入是.cell与.param两个文件没有第三方前端时你必须手写。体硅是最经典的最小验证体系结构简单、参数成熟跑通了能证明编译结果可靠。4.1 CASTEP 输入文件三件套.cell、.param 与 seednameCASTEP 运行时以一个名为 seedname 的前缀关联文件。执行castep.mpi Si它会自动读取Si.cell和Si.param。seedname 建议用有意义的名字比如硅用Si别叫test1、111。因为之后你会有一堆算例命名混乱时很难追溯某个结果对应的输入。.cell文件负责几何信息晶格矢量、原子位置、原子种类、是否固定某些原子。.param文件负责计算控制任务类型、泛函、截断能、k 点网格、收敛阈值。两者的语法都是冒号分隔的关键字与取值#开头是注释。CASTEP 对文件格式敏感比如关键字拼写错误会直接退出常见的坑是把等号写成而不是冒号。4.2 体硅算例最小 .cell 与 .param 可以直接抄%BLOCK LATTICE_CART 0.0 2.715 2.715 2.715 0.0 2.715 2.715 2.715 0.0 %ENDBLOCK LATTICE_CART %BLOCK POSITIONS_FRAC Si 0.00 0.00 0.00 Si 0.25 0.25 0.25 %ENDBLOCK POSITIONS_FRAC这是体硅的面心立方常规单胞晶格矢量长度为 2.715 Å等价于实验晶格常数 5.43 Å 的一半。POSITIONS_FRAC用分数坐标表示原子位置硅的两个原子分别位于原点与体对角线的四分之一处。这是钻石结构的最低描述两原子基加面心立方格子。task : singlepoint functional : PBE cut_off_energy : 400 eV kpoint_mp_grid : 4 4 4 max_scf_cycles : 200 elec_energy_tol : 1e-6 eV四行核心参数决定了这个算例的性质。task : singlepoint表示只算一次总能量不优化结构functional : PBE选择 Perdew-Burke-Ernzerhof 泛函是凝聚态计算最常见的选择cut_off_energy : 400 eV是平面波截断能体硅 400 eV 足够给出趋势正确的能量但要得到收敛的绝对值通常需要测到 600 eV 以上kpoint_mp_grid : 4 4 4是 Monkhorst-Pack 网格参数硅这种半导体 4×4×4 已经能给出误差可接受的 k 点采样。elec_energy_tol是电子步自洽收敛阈值1e-6 eV 是保守但稳妥的默认值。4.3 执行命令与输出文件怎么读export PATH$(pwd)/bin/linux_x86_64_gfortran:$PATH cd /tmp/castep-test cp /path/to/Si.cell . cp /path/to/Si.param . mpirun -np 8 castep.mpi Si执行时先进入工作目录把输入文件放在当前目录然后用 mpirun 启动。第一轮建议就用这个命令把流程跑通观察是否输出正常。如果mpirun报错提示无法启动 8 个进程说明 OpenMPI 的配置可能有问题可以临时改成-np 2验证并行环境。运行结束后工作目录里会出现一堆文件主要看Si.castep。这是一个纯文本日志记录了完整的输入回显、自洽场的每步迭代信息、总能量、运行时间。查看结果用这两条命令grep Final energy Si.castep tail -n 30 Si.castepFinal energy行给出电子步收敛后的总能这是判断算例是否正常完成的最直接指标。tail则能确认任务有没有跑到最后如果最后一行停在某个 SCF 迭代中途多半是没收敛或进程被杀。其他输出文件按任务类型生成振动计算会产出声子数据能带计算产出.bands态密度计算产出.pdos_bin等二进制文件文本主日志.castep永远是第一排查对象。4.4 参数怎么改切任务、换泛函、加 k 点单点能跑通后下一个最常做的改动是几何优化把task从singlepoint改成geometry。这会启动 BFGS 算法逐布移动原子和晶胞直到力与位移收敛。体硅这种理论晶格常数已知的体系可以顺手验证 CASTEP 对结构的预测能力。换泛函也很简单把functional改成 LDA 的CA-PZ、RPA 等。不同泛函对晶格常数、带隙的预测误差模式完全不同PBE 一般高估晶格常数LDA 通常低估。做表面吸附时交换泛函的选择对吸附能的影响远大于截断能的影响。k 点网格的调整是收敛性测试的核心操作。4 4 4只是起点做正式计算前需要跑2 2 2到6 6 6甚至更密的网格看总能随 k 点增加的变化是否已进入可接受的误差范围。金属体系则要在.param里加smearing : gaussian 0.2 eV否则 SCF 会在费米面附近振荡难以收敛。5. CASTEP-19.11 的编译与运行避坑指南5 个常见坑的排查顺序CASTEP 装不出来的报错五花八门但这五个坑占了九成以上的翻车现场。按顺序排查可以少走很多弯路。5.1 编译中断在“找不到 ifort”编译器环境没加载现象make 到一半报错说找不到ifort或mpif90但你在终端单独执行ifort --version明明有输出。原因编译过程用的是非交互式 shell没有加载你的 shell 配置文件比如.bashrc里的 module 命令没有生效或者编译器的 PATH 只存在于交互式终端。解决先执行source /path/to/compiler/init.sh手动加载编译器环境再重新 make。如果用的是 module需要module load intel之后再编译并且确保写进了.bashrc。5.2 运行算例立刻退出并提示许可证错误现象castep.mpi Si启动后几秒内退出Si.castep里只有几行输出其中有明显的 license 或 licence 字样。原因CASTEP 是商业授权软件运行任何算例都需要许可证而许可证文件没有被当前环境找到。解决确认许可证文件路径在.bashrc或当前 shell 里设置环境变量指向许可证文件例如export CASTEP_LICENSE/你的路径/license.dat再重跑。不同机构发放的许可证形式不同以你收到许可证时的说明为准。5.3 并行看起来生效了但算得比串行还慢现象mpirun -np 8跑小体系耗时反而比串行长CPU 占用率却不高。原因体系太小并行通信开销超过了计算收益。CASTEP 的并行主要在 k 点与平面波系数两个维度上展开体硅这种小体系只有 4 个 k 点8 个核分 k 点后调度负载不均大部分核在等待。解决先确认体系规模再定核数。小体系用串行版castep.serial跑几百个原子以上的体系再用并行版。5.4 几何优化不收敛位移与能量反复震荡现象SCF 正常收敛但几何优化步数一直增加能量不再下降位移在某个值附近来回跳。原因初始结构离极小点太远或者 k 点与截断能太低导致梯度计算误差偏大。震动节先从这两个参数开始查。解决把cut_off_energy提高到 500 或 600 eVkpoint_mp_grid加密再重跑 geometry。如果仍然震荡把task改回singlepoint确认单点能量稳定后再逐步放宽优化步长限制。金属体系优先检查是否加了 smearing。5.5 编译通过但运行时提示找不到动态库现象castep.mpi可以正常执行但一跑算例就报error while loading shared libraries: libmkl_xxx.so或类似的动态库缺失错误。原因链接时用了 MKL 或 FFTW但运行时的动态链接库路径没有写进系统配置。解决用ldd $(which castep.mpi)查看具体缺失的库再把它所在目录加入LD_LIBRARY_PATH。如果库在 Intel 编译器目录下通常是sourceIntel 的环境变量脚本就能一次解决不需要手动加路径。6. 把 19.11 用顺的几个进阶习惯收敛性测试与批量验证6.1 收敛性测试脚本k 点与截断能的批量扫描正式做研究前先跑一组合适的 k 点与截断能收敛测试是值得的。用下面这个循环每次改一个参数并记录总能for cut in 400 500 600 700; do sed s/cut_off_energy : 400/cut_off_energy : $cut/ Si.param Si-$cut.param cp Si-$cut.param Si.param mpirun -np 4 castep.mpi Si total$(grep Final energy Si.castep | tail -1) echo $cut $total cut-scan.txt done这个脚本的思路很朴素用 sed 修改截断能重跑算例抓取总能并追加到汇总文件里。跑完后把cut-scan.txt画成散点图总能变化进入稳定区间的点就是合理工作参数。k 点扫描用同样逻辑改kpoint_mp_grid。我习惯把这种扫描结果保存下来因为审稿人或复盘时常常会问“为什么用 600 eV 而不是 400 eV”这份记录就是最直接的依据。6.2 自动检查算例是否正常完成批量算例最怕的就是其中一个静默失败。我通常会在每个算例结束后做一次状态检查if grep -q Completed successfully Si.castep; then echo Si done else echo Si failed tail -n 20 Si.castep fiCASTEP 主输出文件在正常结束时会写入一段完成标志。只检查这一行比人眼翻日志高效得多。失败时顺手把日志尾部打印出来方便定位是 SCF 未收敛、结构优化超步数还是运行中断。这里值得注意grep Total energy每步都有输出不能作为完成判据必须用结尾的完成标志。6.3 我的两个小习惯记录编译信息、复核总能我每次编译成功后会在源码目录里留一个build-note.txt写下编译器版本、MPI 版本、构架名、make 参数、MKL 路径。这个习惯帮我避免过“两个月后换机器重新编译却忘了当初怎么配”的尴尬。还有个习惯是拿到陌生算例时先复算一遍上年文献里的参考值比如用体硅验证 PBE 总能和晶格常数确认当前编译版本可靠再跑新体系。我第一次装 CASTEP 时也翻过车卡在编译器混用上整整两天后来发现只是 mpif90 和 gfortran 版本不一致。从那以后我养成了解压源码先读 INSTALL、编译之前先跑自检命令的习惯后面再装任何版本都没翻过车。希望这些经验帮到你。本文还有配套的精品资源点击获取