CASTEP 19.11源码编译实战:平面波程序安装与计算避坑指南
简介CASTEP-19.11.tar.gz 是一款基于密度泛函理论的第一性原理量子力学计算软件包 CASTEP 的 19.11 版本面向计算材料学、固体物理、化学催化等科研与工程领域用于模拟晶体与表面体系的电子结构、能带分布、声子振动、电荷密度以及化学反应路径等关键性质。整个压缩包包含 4542 个文件约 20.12MB文件组成以 param 和 cell 计算输入、C 与 Fortran 源码、Python 脚本、cif 结构文件、usp/recpot 赝势文件、mk 和 makefile 编译脚本以及 tex/readme/pdf 文档为主并附带了编译指南、示例算例与若干结构/结果转换工具目录结构较清晰便于按模块检索和编译安装。已有 1595 人学习下载。通过这一压缩包可取得 CASTEP 19.11 完整源码、示例输入文件、文档及编译配置自带声子、能带与几何优化等示例能够帮助较快上手晶体结构优化、能带计算、频率分析、电荷密度分析等典型任务源码也体现了并行算法、自洽场迭代与赝势库的改进便于深入理解 DFT 实现并开展二次开发。1. CASTEP 19.11源码包为什么值得自己编译这份平面波计算程序手里有台工作站想算某二维半导体材料的电子结构结果课题组里的商业程序授权到期续费流程走了半个月还没批下来。把一个CASTEP 19.11源码包拿过来自己编译几乎是唯一不打断研究节奏的路子。CASTEP以平面波基组和赝势著称晶体、表面、界面这类周期体系的几何优化、能带、态密度、弹性常数都能算19.11的内置赝势库和CMake构建流程对新手也算友好。适合的人有Linux基础、知道一点Fortran编译概念、想把计算环境完全握在自己手里的从业者与研究生。下文不聊泛泛的概念直接按我实际拆包、编译、跑任务的顺序来写坑都给你标出来。2. CASTEP的计算逻辑平面波展开、超软赝势与SCF循环2.1 平面波基组与能量截断的物理直觉CASTEP这类平面波程序与常见的局域轨道程序最大的区别在基组。晶体具有周期性势场满足平移对称性根据Bloch定理波函数可以写成周期函数与平面波因子的乘积把周期部分再展开成平面波最终每个k点上的波函数就是一组平面波的叠加。平面波基组不需要人为指定原子轨道它像傅里叶级数一样把实空间里变化很快的波函数用越来越细的频率去逼近。这个性质带来的好处是只要基组取得够大计算结果可以系统性地逼近真实解不像局域轨道方法那样依赖基组函数的选择经验。基组大小由动能截断参数cut_off_energy决定。平面波的动能与波矢平方成正比程序只保留动能小于该截断值的平面波。Ecut越大波函数展开越充分结果越接近收敛值但计算量也越大。基组数量大致与体系体积和Ecut的1.5次方成正比体积翻倍时计算量不会只翻倍。我见过不少人在2×2×2超胞上耗掉几周时间其实就是低估了基组数量随体积的膨胀速度。CASTEP里常用超软赝势这个组合下Ecut一般落在300到700 eV之间比PAW类程序动辄上500 eV的习惯要温和一些但也不代表你可以直接把别的程序的截断能照搬过来。还有个容易忽略的点是k点网格与Ecut的耦合。Ecut决定每个k点上的平面波数量k点网格决定布里渊区采样的密度。两者相互独立但都影响总能量精度。初学者常犯的毛病是只调Ecut不调k点结果换了网格发现能量跳了50 meV还以为程序出了问题。实际上结构优化时力与应力的收敛对k点密度比对Ecut更敏感尤其是含有金属键或存在电荷密度变化剧烈的体系。判断一个设置是否合理唯一标准是同时加大Ecut和k点密度看目标量的变化是否低于你设定的阈值。提示平面波程序的收敛测试是短板但也是必做项。省掉这一步后面所有结果的可靠性都要打问号。2.2 内置OTFG赝势库与赝势的选取赝势在这里不是可有可无的选项而是决定计算成本与精度的核心组件。芯区电子的波函数振荡剧烈直接用全电子平面波展开需要极大的Ecut。赝势的思想是把芯区电子冻结用一个平滑的等效势代替原子实只让价电子参与自洽计算。CASTEP 19.11内置了on-the-fly generated赝势库OTFG这是它比早期版本省心的地方不需要像VASP那样为每个元素单独找POTCAR文件也不需要像一些老代码那样手工下载.usp文件所有常用元素的赝势参数在编译时已经打进程序里了。在输入文件里声明赝势的方式也很直接在cell文件里写一行species_pot块指定元素名和泛函类型。比如要算硅写法是Si: PBE程序会在运行时从内置库中即时生成对应的超软赝势。这里有个细节值得注意OTFG赝势库里同一元素在不同泛函类别下是不同的赝势Si: LDA和Si: PBE对应两套完全不同的生成参数用错泛函不会报错但结果会系统地偏离PBE参考数据。所以选定xc_functional时一定要回头核对cell文件里每个物种的赝势字符串保持两者一致。与VASP的POTCAR机制相比CASTEP的OTFG赝势对新手更友好但也有边界它能生成的元素类型和泛函版本取决于源码包自带的赝势库版本不是所有元素都支持所有泛函。比如某些稀土元素在旧版赝势库里只有LDA版本这时你要么降低泛函要求要么换外部赝势文件。判据很简单跑任务时如果程序报Unidentified species或在赝势生成阶段直接退出优先怀疑元素与泛函的组合不存在而不是怀疑Cell文件写错。2.3 SCF循环与几何优化的两层迭代关系CASTEP的计算任务可以理解成两层循环。内层是电子步也就是自洽场SCF迭代给定原子位置求解Kohn-Sham方程得到新的电荷密度再把新密度代回去重新构建哈密顿量直到输入输出密度之差小于收敛阈值。这个过程的收敛速度取决于体系性质与混合方案。金属体系费米面附近占据数突变直接迭代很容易震荡绝缘体和半导体相对温顺默认的混合参数往往就能收敛。19.11里常见的混合方法有密度混合与Kerr-Pulay混合前者适用于大多数情况后者在电荷密度振荡时更稳。外层是离子步也就是几何优化。每移动一次原子位置都要完整跑完一次SCF。CASTEP里几何优化默认的算法是BFGS它利用一阶导数原子力和二阶导数信息Hessian来预测下一步的原子位移。BFGS在接近极小点时收敛很快但如果初始结构远离平衡或者力场里有某些自由度耦合严重也会出现震荡甚至发散。此时调整opt_strategy参数牺牲一点速度换取更稳的步长控制往往是比加大Ecut更有效的做法。收敛判据是另一个经常被忽视的地方。CASTEP的几何优化有三个独立的收敛条件能量收敛、力的收敛和应力的收敛三者要同时满足才算收敛。默认的阈值偏宽松适合粗筛如果要拿结果去算弹性常数或声子力阈值至少要压到0.01 eV/Å以下应力阈值也相应收紧。下表是我常用的参考值实际值按你的精度需求调整。参数默认参考值高精度建议opt_energy_convergence1e-5 eV/atom1e-6 eV/atomopt_force_convergence0.05 eV/Å0.005 eV/Åopt_stress_convergence0.1 GPa0.01 GPa还有个时间上的直觉SCF次数与几何优化步数是两个不同量级的开销。一次SCF通常几十个电子步一次几何优化几十个离子步所以一个完整优化任务要跑几千次电子步。如果某一步SCF迟迟不收敛问题往往出在最内层的混合参数上而不是外层结构。我一般会先跑单点能task: single point energy把SCF调稳再提交几何优化这能省掉大量反复试错的时间。3. 从源码到可执行文件CMake配置、编译命令与依赖清单3.1 编译前环境检查CASTEP 19.11是Fortran程序并行版本依赖MPI数学库依赖BLAS/LAPACK或Intel MKL。常见的组合有两套Intel oneAPI环境下的ifort加MKL加Intel MPI性能最好编译最顺gfortran加OpenBLAS加OpenMPI纯开源免费好装性能略低。对大多数计算任务来说这两套的差距在10%以内没必要为了几个百分点的性能去折腾闭源工具链。真正影响选择的是你工作站上已有的CUDA、Python等环境避免多套编译器混用导致库冲突。拿到源码包后先别急着建build目录把环境检查一遍。需要确认三件事编译器能正常调用MPI的mpirun能找到CMake版本不低于3.12。CASTEP 19.11整个构建流程已经切到CMake老教程里那个configure脚本早就没了照着旧帖子的步骤做只会卡在第一句。敲下面三条命令输出正常再往下走ifort --version mpirun --version cmake --version逻辑说明第一条确认Fortran主编译器第二条确认MPI运行时第三条确认构建系统版本。参数说明如果你的机器上装的是gfortran第一条换成gfortran --version即可如果有多个MPI版本用which mpirun确认当前生效的是哪个避免CMAKE捡到一套、运行时又去调另一套。3.2 用Intel oneAPI编译的完整命令Intel工具链安装好之后记得先source一下环境变量否则终端里找不到ifort和mkl。以当前最常见的oneAPI安装位置为例先加载环境再开始构建source /opt/intel/oneapi/setvars.sh cd CASTEP-19.11 mkdir build cd build cmake -DCMAKE_Fortran_COMPILERifort \ -DCMAKE_C_COMPILERicx \ -DCMAKE_Fortran_FLAGS-O2 \ -DCASTEP_BUILD_TYPErelease \ .. make -j8 castep.mpi逻辑说明source那一步把Intel编译器和MKL库的路径注入PATH与LD_LIBRARY_PATHmkdir和cd把构建产物与源码分开保持源码目录干净cmake根据你指定的编译器生成Makefilemake只构建castep.mpi这个并行可执行文件避免把文档、工具等无关目标也编译一遍。参数说明-DCMAKE_Fortran_COMPILER指定Fortran编译器CASTEP的核心代码全是Fortran这个选项直接决定能不能过编译-DCASTEP_BUILD_TYPErelease控制优化等级release模式会加上自动向量化等优化debug模式一般只在排查段错误时用-j8对应你的CPU物理核数核数多的机器可以加大并发。这里有个容易被忽略的细节C编译器选项也要给因为部分依赖库是C写的。很多人在这一步翻车只指定了Fortran编译器CMake的默认C编译器是gcc结果MKL的接口库和gcc编译的C代码在链接阶段报一堆未定义符号。解决方式就是我上面写的把C编译器也指向Intel的icx与MKL保持同源。3.3 用gfortran与OpenBLAS的备选路线没有Intel工具链时gfortran路线更省心。Ubuntu系系统上OpenBLAS和OpenMPI都可以用包管理器直接装。构建命令稍有不同关键是让CMake找到BLAS和LAPACK的实现sudo apt install gfortran libopenblas-dev libopenmpi-dev cmake cd CASTEP-19.11 mkdir build cd build cmake -DCMAKE_Fortran_COMPILERgfortran \ -DCMAKE_C_COMPILERgcc \ -DCMAKE_Fortran_FLAGS-O2 \ -DCASTEP_BUILD_TYPErelease \ -DBLAS_LIBRARIES/usr/lib/x86_64-linux-gnu/libopenblas.so \ -DLAPACK_LIBRARIES/usr/lib/x86_64-linux-gnu/libopenblas.so \ .. make -j8 castep.mpi逻辑说明apt那行把Fortran编译器、OpenBLAS数学库和OpenMPI并行库一次装齐后面cmake的选项里BLAS和LAPACK都指向OpenBLAS的共享库因为OpenBLAS同时实现了两套接口不需要再单独装LAPACK。参数说明如果系统里OpenBLAS的路径不在上述位置用find /usr -name libopenblas.so查一下再把路径换掉。这条路线最常出现的问题不是编译而是运行时OpenMPI找不到宿主。原因是OpenMPI默认通过ssh启动远程进程而工作站上往往没配好ssh免密登录。解决办法是把mpirun加上--allow-run-as-root或者把mpirun换成本地模式比如mpirun -np 4 --allow-run-as-root ./bin/castep.mpi这个参数说明-np指定进程数--allow-run-as-root允许以root身份运行。真实集群上不需要这个选项但在本地容器环境里几乎是必修课。3.4 验证编译产物版本号与最小测试编译完成后先看版本号再跑一个最小任务。版本号能验证链接是否完整最小任务则验证数值结果没有被编译器优化破坏。命令很简单./bin/castep.mpi --version正常情况下会输出CASTEP的版本号和编译选项比如MPI支持、MKL版本、内置赝势库的生成日期。如果这一步输出了段错误或非法指令通常是编译优化选项与CPU指令集不匹配把CMAKE_Fortran_FLAGS里的-O2改成-O1再重编。如果--version正常但跑任务时结果明显异常先怀疑是不是不同编译器混用导致运行时库冲突用ldd检查一下可执行文件链接的库ldd ./bin/castep.mpi | grep -E mkl|mpi|blas逻辑说明ldd列出可执行文件运行时依赖的共享库过滤出数学库与MPI库确认它们都指向同一个工具链。参数说明这里没有任何需要改的参数纯粹是诊断手段。我在一台工作站上遇到过ifort编译成功、运行时却去调了系统自带的libgfortran导致输入输出文件里全是乱码的情况就是靠这条命令定位的。4. 跑第一个计算任务cell与param输入文件详解4.1 cell文件结构、赝势与k点网格CASTEP每个计算任务需要两个输入文件分别以.cell和.param为后缀。cell文件描述物理体系晶格、原子位置、赝势声明、k点网格与对称性param文件描述计算任务要算什么、用哪种泛函、收敛到什么程度。两者职责清晰分开维护比写进一个文件更灵活。一个硅原胞的cell文件长这样%BLOCK LATTICE_CART 2.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 2.0 %ENDBLOCK LATTICE_CART %BLOCK POSITIONS_FRAC Si 0.00 0.00 0.00 Si 0.25 0.25 0.25 %ENDBLOCK POSITIONS_FRAC %BLOCK SPECIES_POT Si: PBE %ENDBLOCK SPECIES_POT KPOINT_MP_GRID 4 4 4 KPOINT_MP_OFFSET 0.0 0.0 0.0 SYMMETRY_GENERATE逻辑说明LATTICE_CART用笛卡尔坐标给出晶格矢量这里的2.0是晶格常数的数值占位实际使用要换成你材料的晶格参数POSITIONS_FRAC给出原子分数坐标硅是金刚石结构两个原子分别坐在(0,0,0)和(1/4,1/4,1/4)SPECIES_POT声明赝势Si: PBE表示用PBE泛函对应的OTFG超软赝势KPOINT_MP_GRID定义Monkhorst-Pack网格为4×4×4SYMMETRY_GENERATE让程序自动分析空间群。参数说明分数坐标必须与晶格矢量匹配单位是晶格矢量的倍数不是埃k点偏移量一般取0但如果计算带隙或能带有时需要人为微调offset打破对称性。赝势是这里面最不能抄错的部分。元素的化学符号必须与周期表一致大小写敏感Si和si是不同的字符串。泛函标识要与param文件里的xc_functional一致用的PBE就都写PBE用的RPBE就都写RPBE混写的结果是程序直接在赝势生成阶段退出连SCF都进不去。4.2 param文件任务类型与收敛控制param文件决定计算任务的行为。同样是上面那个硅原胞可以做单点能、几何优化、能带计算区别全在param里。一个几何优化任务的典型param文件TASK : GEOMETRY OPTIMISATION XC_FUNCTIONAL : PBE CUT_OFF_ENERGY : 400 eV FINE_GRID_SCALE : 4.0 OPT_STRATEGY : SPEED OPT_ENERGY_CONVERGENCE : 1.0e-6 OPT_FORCE_CONVERGENCE : 0.01 OPT_STRESS_CONVERGENCE : 0.02 SMEARING_SCHEME : GAUSSIAN SMEARING_WIDTH : 0.1 eV MAX_SCF_CYCLES : 100逻辑说明TASK指定任务类型几何优化对应GEOMETRY OPTIMISATIONXC_FUNCTIONAL选定交换关联泛函必须与cell里赝势字符串的泛函一致CUT_OFF_ENERGY设400 eV对硅的OTFG赝势来说已经接近收敛FINE_GRID_SCALE控制电荷密度网格的倍率4.0是常见默认OPT_STRATEGY选择SPEED让BFGS算法的步长试探更激进三个OPT收敛参数分别对应能量、力与应力的阈值SMEARING_SCHEME和SMEARING_WIDTH是给金属体系准备的硅是半导体这里不设也能算但设了可以避免费米面附近的迭代震荡MAX_SCF_CYCLES是单次SCF的最大电子步数。参数说明CUT_OFF_ENERGY的单位是eV这个值不是越大越好超过系统收敛值之后纯粹浪费机时SMEARING_WIDTH对半导体的影响可能比想象中大太大会人为展宽带边算带隙时要格外小心。关于OPT_STRATEGY这里有个容易踩的认知偏差。SPEED和ACCURACY并不影响物理精度只影响BFGS步长试探策略的激进程度。SPEED会在结构远离极小点时走大步收敛快但偶尔震荡ACCURACY步长保守适合初始结构很差、原子坐标明显不合理的体系。我自己习惯先用SPEED粗筛再读结果看对称性有没有被破坏。4.3 从结构优化到能带计算多一步固定框架几何优化拿到最低能量结构后算能带是下一步最常见需求。能带计算的param文件与优化相比变化主要在任务类型和少量参数上。保持cell文件不变param改成TASK : BAND STRUCTURE XC_FUNCTIONAL : PBE CUT_OFF_ENERGY : 400 eV FINE_GRID_SCALE : 4.0 SMEARING_SCHEME : GAUSSIAN SMEARING_WIDTH : 0.1 eV BS_WRITE_EIGENVALUES : true BS_NBANDS : 20 BS_MAX_PATH_NODES : 30 BS_SELECTED_PATH : G X W K L U W L K关键差异在三个BS参数BS_NBANDS确定要输出的能带数数值太小会把高能导带截断掉BS_MAX_PATH_NODES控制高对称点之间的插值密度BS_SELECTED_PATH是把布里渊区高对称点串成路径。路径的写法有讲究硅的常规路径是G-X-W-K-L-U-W-L-K你需要确认这些高对称点在当前晶格类型下确实存在程序输出文件会列出自动识别的对称点与坐标。BS_WRITE_EIGENVALUES打开后程序会把每条能带的本征值写到.bands文件供后处理脚本读取。能带计算通常在优化后的结构上进行。不要跳过TASK : GEOMETRY OPTIMISATION直接用原始实验结构算能带实验晶格常数与理论优化的晶格常数之间有零点几个百分点的偏差对带隙的影响在0.1到0.2 eV量级对某些窄带隙材料甚至会导致定性错误。我一般按这个流程走先几何优化再在优化结构上做一次与cell文件完全相同的单点能最后把单点能任务改成能带计算提交。三次任务前后衔接结构一模一样只是算的东西从构型松弛变成了电子结构。输出文件方面主输出文件是.castep后缀的文本包含SCF各步的能量、原子力、压力张量以及最终收敛信息。.bands文件是纯文本的能带数据每行对应一个k点和一条能带的本征值。你要是只关心带隙直接在.castep文件里搜band gap即可程序会打印出价带顶与导带底的本征值插值结果。要注意的是CASTEP报告的带隙是理论带隙与实验光学带隙有系统偏差PBE泛函通常低估0.3到0.5 eV这在解释结果时要写进文章里。5. 避坑与常见问题编译失败与计算翻车的五条踩坑记录5.1 编译时MKL链接失败报错编号#10106现象cmake配置通过make时输出大量形如ifort: error #10106的错误提示找不到MKL头文件或库文件。解决路径翻config日志发现CMAKE在找MKL时选到了错误的库路径把vml、pthread之类的系统库混了进来。原因Intel编译器环境没有正确加载或者setvars.sh脚本和构建进程不在同一个shell会话中。我见过有人把source写进脚本但脚本以bash方式执行环境变量进不了当前终端也见过在容器里编译宿主机与容器里的oneAPI路径不一致。解决编译前在同一个终端里手工执行source并做一次验证source /opt/intel/oneapi/setvars.sh echo $MKLROOT逻辑说明第一行加载oneAPI所有组件路径第二行确认MKL的环境变量已经注入。参数说明如果echo输出为空说明setvars.sh没生效换用绝对路径source。之后重新删除build目录再走一遍cmake让CMake缓存里失效的MKL路径全部刷新不要在旧build目录里憋着。5.2 结构优化能量震荡不收敛现象几何优化任务跑到第20步左右能量不再单调下降开始在某个值附近上下波动原子力始终达不到设定阈值。日志里能看到SCF每步都收敛但外层离子步像踩了弹簧。原因最常见的情况是初始结构与真实极值点相差太远BFGS的Hessian初始近似与实际差太多导致步长过大。另一个高频原因是固定体积优化task里加上strain控制时应力张量存在符号错误程序在能量面上来回跳。解决先跑一次task: single point energy确认当前结构的能量在合理范围内再用opt_strategy: accuracy重跑。如果还震荡把结构用分子动力学粗筛一遍再优化或者手动检查原子间距离排除过度接近造成的排斥。这个问题的本质是优化算法对初始点的敏感性不是参数或程序的缺陷。5.3 并行核心数增加速度反而下降现象同一任务4核跑3小时改成16核后变成5小时好像同步检查点等网络开销比计算本身还慢。在.castep文件里还会看到每个SCF步的输出时间戳间隔不规律。原因小体系下k点数量少并行切分到不同进程后每个进程承担的k点太少通信开销盖过了计算收益。程序作业规模小时并行效率天然上不去。解决先用单核跑一遍日志确认SCF耗时再用mpirun -np 4、-np 8、-np 16各跑一遍记录总耗时找出拐点。经验法则是每个进程至少分配到4到8个k点否则并行就是惩罚。我一般先看.kpoints输出里实际生成的k点总数再反推合适的进程数。5.4 赝势报错Unidentified species现象提交任务后程序在初始阶段退出错误信息里出现Unidentified species或Could not generate pseudopotential字样有时还会附上元素名。原因cell文件species_pot块里写的字符串与内置赝势库不匹配。常见的情况是元素符号大小写错了或者泛函标识拼写不对比如把PBE写成了pbe、把RPBE写成了PBEsol。解决打开cell文件核对species_pot块的写法元素符号首字母大写、第二个字母小写泛函名称与param文件里的xc_functional一致。如果确认无误用castep.mpi --help或程序自带工具列出内置赝势库支持的元素与泛函组合对照着改。这个报错的好处是它足够早不会浪费SCF的机时。5.5 能带路径错乱画出来的带结构断断续续现象能带计算正常结束但后处理画图时高对称点之间的连线错乱出现交叉的斜线或断裂的谱线k点间距明显不均匀。原因BS_SELECTED_PATH里的高对称点顺序与程序自动识别的对称性不一致或者symmetry_generate生成的群操作改变了布里渊区路径的定义。另一种常见情况是cell文件的晶格矢量定义与symmetry分析模块默认的约定不匹配导致高对称点坐标错位。解决先把BS_SELECTED_PATH参数注释掉让程序按默认路径生成一次再对照.castep输出文件里列出的高对称点名称手动修正路径。注意有些空间群的高对称点有多个等价表示路径里必须用程序输出的那套符号。从那以后我每次做能带都先跑一次默认路径确认对称点名称无误再改成自定义路径。6. 进阶习惯用脚本做赝势收敛测试与并行效率验证对任何一个新接触的体系我不会直接拿默认参数跑正事而是先做一组短计算把截断能和k点网格的收敛性摸清楚。这个习惯帮我避开了很多后期返工的麻烦。下面这个脚本循环跑不同Ecut的单点能把所有能量汇总到一个文件里for ecut in 300 350 400 450 500 550 600; do sed s/CUT_OFF_ENERGY : 400 eV/CUT_OFF_ENERGY : ${ecut} eV/ base.param run.param mpirun -np 8 ./bin/castep.mpi si.cell /dev/null 21 grep Final energy si.castep | tail -1 ecut_sweep.txt echo Ecut ${ecut} done ecut_sweep.txt done逻辑说明sed把模板param文件里的截断能字段替换成当前循环值每次计算都覆盖写入同一个castep文件因此每个Ecut的最终能量用tail取最后一行主任务的stdout丢到/dev/null只看程序退出状态。参数说明Ecut的采样点要先粗后细300到600 eV间隔50 eV已经能看出收敛趋势如果600 eV与550 eV的能量差还在5 meV以上继续加大上限重跑一轮。判断收敛的标准是能量变化进入你想要的精度范围通常1到2 meV/atom就足够做结构分析了。k点网格的收敛测试同理把KPOINT_MP_GRID从2改到3、4、5、6对比总能变化。两个维度都测完正式任务的Ecut和k点网格就定下来了后续所有计算都用同一套基准结果之间才有可比性。并行效率验证则更直接同一个结构分别用2、4、8、16核跑同一个单点能记录每轮的总耗时。你会发现小体系4核以后提速几乎为零大体系16核还能继续吃。这两组测试加在一起就是我接手一个陌生体系时的固定开场动作。这里还得提一个细节就是从.castep文件里提取能量时用grep Final energy会把带隙信息也带出来因为带隙那一行也含energy字样。我一般用grep Total energy corrected来锁定最终总能的输出行这行对应经过基组修正后的能量做收敛曲线更平滑。从那以后我每次拿到一个新材料体系都强制走一遍Ecut与k点的双扫描把结果贴进实验记录本再开始正式计算。这个习惯帮我挡掉了至少三次因为参数未收敛得出的错误结论。希望帮到你。本文还有配套的精品资源点击获取