第1章:微尺度CFD模型(OpenFOAM)——求解器选择

各位同行,咱们直接进入正题。复杂地形的风资源模拟,说白了就是跟山、谷、陡坡这些“捣蛋鬼”打交道。我做了十几年风能项目,最深的体会是:选错求解器,后面全白干。

1.1 simpleFoam vs buoyantSimpleFoam

这两个求解器,是OpenFOAM里做稳态不可压缩流动的“哼哈二将”。但它们的脾气完全不同。

特性 simpleFoam buoyantSimpleFoam
适用场景 平坦地形、中性大气 复杂地形、强热力效应
密度处理 常数密度 可压缩/变密度
浮力项 包含重力浮力
计算成本 高(约1.5-2倍)

我个人习惯:如果项目区域高差小于200米,且没有明显的山谷风效应,我直接用simpleFoam。但要是遇到那种“早上起雾、下午起风”的山脊,嗯,buoyantSimpleFoam才是正解。

核心判断标准:看理查森数(Ri)。Ri > 0.25时,浮力效应不可忽略,必须上buoyantSimpleFoam。

1.2 求解器选择实战经验

我记得2018年在云南一个项目,海拔从1800米到3200米,温差大得离谱。一开始我用simpleFoam算,结果风廓线跟实测差了30%。后来换成buoyantSimpleFoam,加上热通量边界条件,误差直接降到8%以内。

这里有个避坑指南:buoyantSimpleFoam对初始场很敏感。我曾经因为初始温度场设得不对,算了三天才收敛——结果发现是边界条件写错了。所以我的建议是:先用simpleFoam跑一个冷态流场,再作为初始场给buoyantSimpleFoam热启动。

1.3 湍流模型:k-epsilon vs SST

湍流模型这块,争议一直很大。我个人的看法是:没有最好的模型,只有最合适的模型。

1.3.1 标准k-epsilon模型

这是最经典的模型,收敛性好,计算快。但它的弱点也很明显:对分离流、强曲率流动预测不准。说白了,就是遇到陡峭的山脊或者悬崖,它容易“犯迷糊”。

  • 优点:鲁棒性强,网格要求低
  • 缺点:近壁面处理粗糙,分离区预测偏差大
  • 适用:缓坡地形、开阔区域

1.3.2 SST k-omega模型

SST模型是我在复杂地形项目中的“主力选手”。它结合了k-omega在近壁面的优势和k-epsilon在远场的优势。你想想看,山体表面附近需要精细捕捉,而高空又需要稳定扩散——SST正好两头都占。

我的经验:如果计算资源允许,优先选SST。特别是当山体坡度超过30度时,SST的预测精度比k-epsilon高出至少15%。

1.4 网格生成:snappyHexMesh实战

网格是CFD的“骨架”。snappyHexMesh这个工具,我用得最多。它基于六面体网格,能自动贴合复杂几何表面。

1.4.1 基本流程

// 典型snappyHexMeshDict配置
castellatedMesh true;
snap            true;
addLayers       true;

geometry {
    terrain.stl {
        type triSurfaceMesh;
        name terrain;
    }
};

 castellatedMeshControls {
    maxLocalCells 100000;
    maxGlobalCells 2000000;
    minRefinementCells 10;
    maxLoadUnbalance 3;
    nCellsBetweenLevels 3;
    
    features {
        terrain {
            file "terrain.eMesh";
            level 2;
        }
    };
    
    refinementSurfaces {
        terrain {
            level (2 3);
        };
    };
};

这段配置,我几乎每个项目都会微调。注意nCellsBetweenLevels这个参数——它控制不同加密区之间的过渡层数。设成3比较稳妥,太少会导致网格突变,太多又浪费计算资源。

1.4.2 网格质量检查清单

  • 非正交性:最大不超过70度,平均小于30度
  • 长宽比:近壁面控制在100以内,远场可放宽到1000
  • 扭曲度:最大不超过0.8
  • 最小体积:不能出现负体积

我曾经踩过的坑:有一次在贵州的项目,网格生成后checkMesh报了一堆警告。我没在意,结果算了三天,残差死活不降。后来发现是地形STL文件有自相交面。所以记住:STL文件必须做几何修复,这是前置条件。

1.5 知识体系框架

下面这张图,是我自己总结的微尺度CFD建模决策流程。每次做新项目,我都会对照着走一遍。

微尺度CFD建模决策流程 输入地形数据 高差 > 200m? simpleFoam buoyantSimpleFoam k-epsilon / RNG k-epsilon SST k-omega snappyHexMesh网格生成

这张图的核心逻辑是:先判断地形复杂度,再选求解器,然后定湍流模型,最后做网格。顺序不能乱,否则后面返工的成本很高。

1.6 综合建议

说了这么多,我总结几条实战经验:

  1. 新手入门:从simpleFoam + k-epsilon + 粗网格开始,跑通流程再说
  2. 进阶项目:buoyantSimpleFoam + SST + 加密网格,精度优先
  3. 资源有限时:用simpleFoam + RNG k-epsilon,平衡精度和效率
  4. 永远做网格无关性验证:至少三套网格,粗、中、细,看关键点风速变化

最后说一句:CFD模拟是工具,不是目的。我见过太多人沉迷于调参数,却忘了最终要回答的问题是——“这个山头,到底能发多少电?”

专注资料整理