Ubuntu下WIEN2k 19.2运行set_elast_pressure报Fortran运行时错误
故障场景
Ubuntu环境下部署WIEN2k 19.2,调用IRelast模块计算弹性常数,执行set_elast_pressure命令时程序崩溃,完整报错日志如下:
E=E0+[B*V/BP*(1/(BP-1)*(V0/V)**BP +1)-B*V0/(BP-1)] E Read data from line 8 .... At line 83 of file calLa_Pre_elast.f (unit = 10, file = 'MgO.outputeos') Fortran runtime error: Constant string in input format (' V0,B(GPa),BP,E0',3f15.4,f18.6) ^ Error termination. Backtrace: #0 0x154aa00e932a #1 0x154aa00e9ed5 #2 0x154aa00ea69d #3 0x154aa0253cb1 #4 0x154aa0262101 #5 0x154aa026372c #6 0x154aa02642d2 #7 0x55d47934d7ef #8 0x55d47934cd7e #9 0x154a9f960c86 #10 0x55d47934cdb9 #11 0xffffffffffffffff cp: cannot stat 'init.struct': No such file or directory (C)by Morteza Jamal (2014) ***** * * ****** * * * * * * * ****** * * * * ***** * * ****** ####################################### # set_elast_lapw ####################################### # C_set_elast_lapw prepares # # Directories and job files. # # C(2017) by Morteza Jamal # # it creates c11+2c12, # # c11-c12, and c44 directories # # and CUBIC.job file # # in them # # which must be executed # # and can be analyzed by # # C_ana_elast_lapw # ####################################### cp: -r not specified; omitting directory '../../MgO/.' cp: -r not specified; omitting directory '../../MgO/..'
根因定位
报错存在先后连锁关系,核心触发点是第一个Fortran运行时错误,后续两个文件/目录操作报错均为前序程序崩溃导致的次生问题:
- 核心错误:
calLa_Pre_elast.f采用固定格式读入MgO.outputeos的第8行内容,代码中写死的读入格式为(' V0,B(GPa),BP,E0',3f15.4,f18.6),要求该行必须以精确匹配的固定字符串V0,B(GPa),BP,E0(V前带1个半角空格,标点完全一致)开头,后续依次排列4个数值:前3个(V0、B(GPa)、BP)字段宽度15位、保留4位小数,最后1个(E0)字段宽度18位、保留6位小数。当前生成的MgO.outputeos第8行内容不符合该格式要求(常见原因是EOS拟合时选错了状态方程,报错中打印的是Murnaghan EOS的能量表达式,若选了Birch-Murnaghan、Vinet等其他EOS,输出表头、参数顺序都会变化;或是拟合输出时额外增加了标注字符、空格错位),导致Fortran读入时在预期为数值的位置读到了常量字符串,触发运行时崩溃。 - 次生错误1:前序Fortran程序异常退出,未在工作路径下生成预期的
init.struct文件,后续执行复制命令时找不到该文件报错。 - 次生错误2:程序执行到目录创建阶段时工作路径异常,调用
cp命令复制目录时未加-r递归参数,无法复制目录项直接跳过。
修复方案
按顺序执行以下操作即可解决问题:
- 修复EOS输出文件格式问题
优先检查EOS拟合步骤:确认体积-能量拟合时选择的是Murnaghan状态方程,重新执行拟合生成MgO.outputeos,避免参数顺序、表头不匹配。如果重新拟合后仍报错,直接手动打开MgO.outputeos定位到第8行,将表头部分修改为完全匹配的V0,B(GPa),BP,E0,调整后续4个拟合参数的位置,对齐格式要求即可。 - 验证前置步骤输出
重新执行set_elast_pressure,确认Fortran读入步骤无报错,检查当前工作目录下已正常生成init.struct文件,即可解决文件不存在的报错。 - 修复目录复制脚本问题
找到WIEN2k安装目录下IRelast模块中set_elast_lapw对应的shell脚本,定位到复制../../MgO/.的命令行,给cp命令添加-r递归参数,例如将原行cp ../../MgO/. ./修改为cp -r ../../MgO/. ./,保存后重新赋予脚本可执行权限,重新运行命令即可。
内容的提问来源于stack exchange,提问作者NARAYANAN P
相关产品推荐
相关产品推荐

