You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenFOAM新版本适配问题:Gmsh轴对称网格求解报错求助

解决OpenFOAM适配旧版教程的报错 & 新版Gmsh轴对称网格生成指南

我来帮你一步步搞定这些问题,先从你碰到的两个报错入手,再给你新版OpenFOAM下用Gmsh生成轴对称网格的实操步骤:

一、解决旧版教程适配新版OpenFOAM的报错问题

1. Unknown TurbulenceModel type RASModel 报错

这个问题是因为新版OpenFOAM对湍流模型的顶层类型命名做了调整,旧版里的RASModel已经被简化为RAS(有效类型确实是LESRASlaminar)。你只需要修改constant/turbulenceProperties的语法,把原来的RASModel替换成RAS,确保文件结构正确,示例如下:

simulationType RAS;

RAS
{
    model        kEpsilon;  // 这里可以换成你需要的RAS模型,比如kOmegaSST
    turbulence   on;
    printCoeffs  on;
}

注意要保证大括号成对,关键字拼写正确,别漏了分号。

2. attempt to read beyond EOF 报错(指向system/fvSchemes.divSchemes.default第29行)

这个报错说明你的fvSchemes文件要么在第29行之后内容不完整,要么语法格式错误导致OpenFOAM读取时误以为文件没结束。你可以按以下步骤排查:

  • 检查第29行附近的代码:看看有没有未闭合的大括号、缺失的分号,或者divSchemes的定义格式不对。新版OpenFOAM的divSchemes区块示例如下,你可以参考对齐自己的文件:
divSchemes
{
    default         Gauss linear;
    div(phi,U)      Gauss linearUpwind grad(U);
    div(phi,k)      Gauss linearUpwind grad(k);
    div(phi,epsilon) Gauss linearUpwind grad(epsilon);
    div((nuEff*dev2(T(grad(U))))) Gauss linear;
}
  • 检查文件末尾:有没有多余的空行,或者缺失的闭合大括号(比如整个fvSchemes文件的最后一个大括号是不是漏写了)。
  • 替换旧版关键字:如果教程是很老的OpenFOAM版本,有些旧版的离散格式关键字可能已经被弃用,你需要换成新版的对应写法,比如旧版的div(phi,omega)格式是否需要调整。

二、新版OpenFOAM下用Gmsh生成轴对称网格的教程

下面是一套实操性很强的步骤,适配新版OpenFOAM(比如v9及以上版本):

1. 编写Gmsh轴对称几何文件(.geo

Gmsh的轴对称网格是基于二维截面绕指定轴旋转生成的,这里以一个简单的圆柱腔为例,写一个.geo文件:

SetFactory("OpenCASCADE");

// 定义二维截面的点(轴对称绕z轴,所以z坐标设为0)
Point(1) = {0, 0, 0, 0.1};    // 原点(对称轴)
Point(2) = {0, 1, 0, 0.1};    // 左侧壁顶点
Point(3) = {1, 1, 0, 0.1};    // 右侧壁顶点
Point(4) = {1, 0, 0, 0.1};    // 底部顶点

// 连接点生成线
Line(1) = {1,2};  // 左侧壁(对称轴)
Line(2) = {2,3};  // 顶部壁
Line(3) = {3,4};  // 右侧壁
Line(4) = {4,1};  // 底部壁

// 创建面
Curve Loop(1) = {1,2,3,4};
Plane Surface(1) = {1};

// 设置网格密度,用Transfinite生成结构化网格
Transfinite Curve{1,3} = 20 Using Progression 1.1;  // 左右壁划分20层,渐变率1.1
Transfinite Curve{2,4} = 10 Using Progression 1.1;  // 上下壁划分10层
Transfinite Surface{1};
Recombine Surface{1};  // 把三角形网格转换成四边形

// 定义物理组(对应OpenFOAM的边界)
Physical Curve("axis") = {1};          // 对称轴,对应OpenFOAM的axis边界类型
Physical Curve("topWall") = {2};        // 顶部壁面
Physical Curve("rightWall") = {3};      // 右侧壁面
Physical Curve("bottomWall") = {4};     // 底部壁面
Physical Surface("fluid") = {1};        // 流体区域

2. 生成网格并转换为OpenFOAM格式

  • 用Gmsh生成3D网格:
    gmsh -3 -o case.msh your_geo_file.geo
    
    这里-3表示生成3D网格(因为是轴对称,Gmsh会自动把二维截面旋转成3D网格),-o指定输出的msh文件名。
  • 用OpenFOAM自带的工具转换网格:
    gmshToFoam case.msh -case your_openfoam_case_path
    
    这个命令会把Gmsh生成的网格转换成OpenFOAM能识别的格式,自动生成constant/polyMesh目录下的文件。

3. 配置OpenFOAM的轴对称设置

  • 修改边界类型:打开constant/polyMesh/boundary文件,把对应对称轴的边界类型改成axis(新版OpenFOAM专门为轴对称设计的边界类型),其他壁面设置为wall,如果有进出口可以设置为patch
  • 确认求解器设置:在system/controlDict里设置application pimpleFoam,确保turbulenceProperties里的湍流模型设置正确(参考前面的报错解决方法)。
  • 调整离散格式:在system/fvSchemes里,针对轴对称流动,建议把div(phi,U)设置为Gauss linearUpwind grad(U),保证流动计算的稳定性。

4. 检查并运行求解器

  • 先运行checkMesh命令检查网格质量:
    checkMesh -case your_openfoam_case_path
    
    确保没有负体积、扭曲度过大的网格。
  • 然后运行pimpleFoam开始求解:
    pimpleFoam -case your_openfoam_case_path
    

另外,你提到已经在GitHub仓库提交了问题,如果上面的步骤还没解决你的问题,可以把仓库里的turbulencePropertiesfvSchemes等关键文件的内容贴出来,方便进一步排查细节。

内容的提问来源于stack exchange,提问作者Foad S. Farimani

火山引擎 最新活动