Octave运行bim包示例时msh2m_gmsh报tmpnam未定义错误如何解决
Octave Bim包示例运行报错修复方案
报错
'tmpnam' undefined的根本原因是Octave 6.0及以上版本已移除废弃的tmpnam函数,你当前使用的msh包版本未适配高版本Octave,仍在调用该函数。Octave官方不存在名为mesh的扩展包,因此安装mesh的操作必然失败,你已安装的msh包就是正确的网格处理扩展包。
- 修正
msh包的废弃函数调用
找到本地msh扩展包的安装目录,打开msh2m_gmsh.m文件,定位到第78行调用tmpnam的代码,将tmpnam替换为高版本Octave的等效函数tempname,保存文件即可解决当前报错。 - 修正示例代码笔误
你手动录入的代码存在两处拼写错误,会导致后续运行报错,需提前修正:- 对流扩散矩阵构造函数名拼写错误:将
bim2a_advaction_diffusion修改为bim2a_advection_diffusion - 梯度拼接语法错误:将
fpl_vtk_write_field行中的[gx:gy]'修改为[gx;gy]'
- 对流扩散矩阵构造函数名拼写错误:将
- 补充缺失的变量定义
代码中调用bim2a_rhs(mesh,f,g)前未定义源项变量f和g,在该行之前补充如下代码即可:f = ones(nnodes, 1); g = zeros(columns(mesh.e), 1); - 确认系统已安装Gmsh工具
msh2m_gmsh函数依赖系统级安装的Gmsh网格生成工具,如果你当前系统未安装Gmsh,完成上述修改后仍会报错,需先根据你的操作系统安装对应版本的Gmsh后再运行示例代码。
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

