吾生有涯 学海无涯
析模有界 知识无界

学习OpenFOAM:好处、坏处与挑战!

本文为翻译版,原文地址:https://cfd.university/blog/learn-openfoam-the-good-the-bad-and-the-evil/

您是否应该学习OpenFOAM?学习OpenFOAM的最大优缺点是什么?自2016年以来,我一直在使用和教授OpenFOAM,不得不说,我对OpenFOAM的爱恨交加之情随着时间的推移而日益加深。我发现这个求解器非常迷人,它是一个相当有争议的CFD求解器。因此,我想在这篇博客文章中整理我的想法,为您提供一个在考虑学习OpenFOAM时应预期的优缺点列表,并据此提出何时学习以及何时不学习的建议。

目录

1 OpenFOAM简介

这是一个我经常被问到的问题:我应该学习OpenFOAM吗?答案是肯定的,如果你不熟悉它,那么就学习吧。但如果给我更多思考的空间,那么让我详细地阐述一下这个问题,因为这个问题并不容易回答。这取决于你从中想要得到什么,根据你的预期用途(或职业抱负),答案可能会有很大不同。

但在我们深入探讨OpenFOAM的优缺点之前,让我们先了解一下它的历史,这可能会变得有些复杂。准备好了吗?

没有人确切知道OpenFOAM是从什么时候开始的,关于它真正是由谁开始的开发,也没有明确的说法,但普遍认为亨利·韦勒(Henry Weller)在1989年开始用C++开发FOAM(场操作与操纵),这与当时CFD应用中占主导地位的Fortran不同。

在那个时期,Hrvoje Jasak加入了这个团队,与韦勒一起开发了OpenFOAM,大约有十年时间。他们成立了Nabla Ltd,并以商业求解器的形式分发FOAM。2004年发生的事情似乎有些神秘,但Nabla Ltd被解散,随之而来的是一段混乱的离婚。韦勒和其他人继续成立了OpenCFD Ltd,以继续开发FOAM,此时FOAM以开源许可发布,并更名为OpenFOAM。

另一方面,Jasak独自一人成立了咨询公司Wikki Ltd,保留了OpenFOAM的一个分支,称为foam-extend

2011年,OpenCFD将其所有源代码和文档移至新成立的公司OpenFOAM Foundation Inc.,该公司在美国成立,从而标志着OpenFOAM向美国的转移。3天后,OpenFOAM Foundation被Silicon Graphics International (SGI) 收购,但仅一年后,ESI Group 就收购了OpenCFD(后来作为ESI的子公司运营),因此OpenFOAM的所有权和OpenFOAM Foundation至今仍属于ESI集团。

2014年,OpenFOAM Foundation Ltd在英国成立,源代码从美国移回英国,那里至今仍在开发。2015年,韦勒和其他人成立了CFD direct,并继续开发并发布OpenFOAM至今。

所以,让我们梳理一下,我们有CFD directOpenFOAM FoundationOpenCFDfoam-extend,它们都在OpenFOAM的开发中拥有一定的权利和传承,并想要分得一杯羹。这种所有者和开发者的多元化意味着随着时间的推移,引入了一些不兼容的改变,如果你查看一个版本的语法,它可能在另一个版本中不起作用。是的,你需要一点运气来设置你的模拟,这当然是你即将学习的新求解器所希望的……

有传言(可能是从我这里开始的),Jasak和韦勒不再交谈,这导致了2004年Nabla Ltd的解散和OpenFOAM所有者和公司的多元化。这让我想起了阿迪达斯和彪马,这两个品牌你可能很熟悉,但你是否知道它们都来自同一个家族?它们只是因为两兄弟无法就如何继承父亲留下的生意方向达成一致而发展成了两个品牌。

也许韦勒和Jasak也有类似的纷争,或者也许是一个和平的过渡,或者他们只是无法就午餐去哪家外卖店达成一致。我的猜测和你的一样,但我们都必须忍受挑选一个版本并坚持下去的混乱。

进一步复杂化的是,OpenFOAM不是一个CFD求解器,尽管这是它的主要用途。回想一下,FOAM只是场操作与操纵的缩写;FOAM项目最初是为了处理场算子(如对标量、向量或张量场应用nabla算子或旋度算子)而开发的。结果是CFD迫切需要场算子,因此使用FOAM(或现在通常说的OpenFOAM)来编写CFD求解器相当直接。

所以,OpenFOAM首先是一个库。然而,当你下载OpenFOAM时,你也会得到使用这个库开发的求解器集合,这是我们更熟悉的OpenFOAM。如果你遇到过simpleFoam、pimpleFoam或rhoCentralFoam这样的求解器,这些都是使用OpenFOAM库开发的求解器。

所以,OpenFOAM是CFD求解器,但它不再是一个CFD求解器,它也不再知道自己的父母是谁了。在设定了背景之后,让我们来看看为什么你应该学习OpenFOAM,或者为什么不应该学习它。准备好了吗?这会变得更加混乱(哦,对了,我已经说过会这样了。好吧,绑好安全带,情况不会变得更糟)。

2 是否应该学习OpenFOAM?

因此,在阅读开篇段落之后,您可能会想,为什么还要费这个劲呢?这个软件项目看起来一团糟,我为什么要费心去学习OpenFOAM呢?嗯,关于一团糟这一点,您说得没错,这恐怕是我们不得不忍受的。

以杰里米·克拉克森为例,他曾是《TopGear》节目的主持人,因为[殴打制片人](https://www.bbc.co.uk/news/entertainment-arts-35648682)而被解雇。克拉克森以冲动著称,他在这起事件之前的大部分行为,对其他人来说可能已经足够被解雇,但克拉克森不是这样;他是TopGear品牌不可或缺的一部分,因此人们不得不忍受他的难相处的行为。

OpenFOAM是一个庞大的源代码集合,没有其他软件可以与之匹敌,可能大多数商业求解器都比OpenFOAM的代码行数少。没有竞争对手,所以我们只能接受它有时会无缘无故、毫无预警地“打”我们一拳。我对/恨使用OpenFOAM,以下列表为您提供了关于它的优缺点,以及为什么即使您还没有学习,我也仍然认为您应该学习OpenFOAM。

而且,如果您现在正在学习OpenFOAM,并且已经研究了几个星期或几个月,您仍然会感到这些“拳头”。我希望我能告诉您,它会变得更好,但事实并非如此。至多,我们只能忍受这种不适,并找到一种方法与我们的这位虐待性的新朋友相处。

但让我们保持乐观,让我们试着看到它的好的一面(我听起来像是患上了斯德哥尔摩综合症)。在下一节中,我们将探讨当您想要学习OpenFOAM时可以预见的所有优点和缺点。让我们深入探讨。

2.1 对于怀疑者:当我学习OpenFOAM时,我可以期待哪些优点?

我知道我在前面的段落中有些过于夸张,事情并没有那么糟糕。有一些真正的好发展让我非常享受,使得学习OpenFOAM变得有价值。让我们看看我认为的主要优点。

2.1.1 它是免费且开源的

好吧,我无法比这更明确了。您获得了一组高度竞争的CFD求解器,数十万行代码,以及一个完整的集成CFD工作流程,而这些的一切价格与一个拥抱相当(https://www.freehugscampaign.org/)。它是完全免费的。我是一位自由和开源([FOSS](https://itsfoss.com/what-is-foss/))软件项目的忠实粉丝,因为它们允许任何人检查源代码并在源代码中提交错误修复

不幸的是,OpenFOAM不再由一群开源爱好者开发(如果他们能就午餐带什么达成一致就好了……),而是由一家商业公司开发,而支付其员工的成本必须从某个地方来。内部培训可能是一个来源,但一些收入是通过提供实施新代码(或修复现有代码)来换取一大笔钱(我曾经申请过资金,报价令人垂涎)。

因此,您可以选择接受或放弃,但除非有一个类似的大规模开源项目威胁到OpenFOAM的存在,否则我们必须接受这样一个事实:是的,从金钱的角度来看它是免费的,但我们仍然必须付出代价,主要是我们的时间,来弄清楚为什么OpenFOAM没有按预期工作。

2.1.2 从预处理到后处理的全面支持

这就是高人一等的区别,市面上有无数的开源CFD求解器,但OpenFOAM始终想要成为一个batteries included的解决方案,即提供一套完整的工具来管理您的预处理(网格划分)、求解和后处理。据我所知,没有其他开源软件具备相同的功能,当然,也难以达到OpenFOAM提供的同样标准。

实际上,甚至没有我可以命名的优秀开源网格生成器(是的,我清楚Gmsh、Salome等软件,但说到严肃的CFD网格划分,它们都显得力不从心)。

所以,如果您懂得如何使用OpenFOAM,您就有了一套完整的工具可用,不需要考虑OpenFOAM生态系统之外的工具。不过,公平地说,应该提到它们的后处理是在paraFoam中完成的,而paraFoam是ParaView的一个分支。paraFoam曾经提供了一些额外的帮助来直接处理OpenFOAM案例,尽管这些功能已经与Paraview集成,使得paraFoam的使用变得有些受限。

尽管如此,它与ParaView集成良好,并具备一些不错的网格划分能力。真正缺少的只是一个CAD处理器,但这可能有点过于夸张(尽管可以生成像正方形和圆柱这样的原始形状,并且通过一些工作,您还可以使用其网格划分工具创建空气动力学形状的网格)。

如果您打算取代OpenFOAM,您必须开发出一个能够完成这三件事的求解器,并且做得更好。您看,OpenFOAM有很多发展,把它推到了其他CFD求解器的前面,遥遥领先。这就是为什么在开源领域很难忽视OpenFOAM,也是开始学习它的好理由。

2.1.3 一系列功能齐全的CFD求解器

正如我之前所暗示的,OpenFOAM是一个库,而不是求解器,但它附带了一系列为各种CFD应用预先编程的求解器。或许它的一个缺点是,到目前为止,大约有100个不同的求解器,你必须了解它们之间的区别,才能知道哪个适合你。OpenFOAM设计求解器的方式有些不幸,因为一些选择是硬编码的,无法更改(除非你想编写自己的求解器并在代码中更改它),而有些则不是。

例如,你可以更改支持湍流模拟的每个求解器中的湍流模型,但包含湍流模型的能力是求解器的一个特性。因此,一些求解器支持湍流模拟,而一些则不支持,但如果它们支持,你可以使用RANS、DES、SAS或LES,而无需对您的代码进行任何修改。最糟糕的是,你可以设置一个案例以包含湍流模拟,并使用不支持它的求解器运行;求解器会运行而不会发出警告,但它不会计算您期望它计算的内容。

实际上,如果您查看求解器,您会很快发现,您拥有的功能和求解器比其他一些商业CFD求解器要多得多。这意味着如果您现在准备好学习OpenFOAM,您可以放心,您在未来的学习中不会遇到任何限制;OpenFOAM可能支持您未来需要的几乎所有内容,包括您作为一个CFD或OpenFOAM新手现在甚至没有意识到的能力。即使它尚未实现,您也有一个庞大的OpenFOAM爱好者社区,可以在以后帮助您实现它。

2.1.4 一旦你掌握了OpenFOAM,你将成为CFD大师

我们不妨直截了当;在OpenFOAM中设置案例很困难。这并不是因为界面让人困惑(实际上界面设计得相当好),而是因为你必须提供大量的信息。OpenFOAM假设任何事情,因此你必须从头开始为每个案例(或OpenFOAM甚至不会启动你的案例)设置一切。

以ANSYS Fluent为例,你可以在12次鼠标点击和2次键盘输入中设置一个案例(例如,空气动力学叶片周围的流动)。你可以看到,设置案例可能不到一分钟,但在OpenFOAM中,你将花费更多的时间。经验丰富的OpenFOAM用户可能会说,他们可以在几分钟内设置好一个案例,尽管他们很可能遵循了常见的惯例,即复制一个与你要做的类似的教学案例,然后只更改他们需要的输入。

这是一项危险但必要的工作;查看类似空气动力学叶片周围流动的案例设置需要大约700行代码,分散在13个不同的文件中。当我说代码时,我确实是指它;OpenFOAM使用一种不太一致的C++语法来设置案例,因此你必须正确使用括号,将逗号放在正确的位置等。设置案例的感觉就像编程。

如果你必须为简单的案例设置编写700行代码,你将被迫使用已经设置好的案例。危险在于没有改变所有需要改变的东西,只是足够让案例运行,这是大多数OpenFOAM初学者会做的事情。你运行案例,检查结果,然后想知道哪里出了问题。但是,由于你复制了所有内容,你无法确定错误的原因。

这让我想到了主要优势:当你学习OpenFOAM时,它会迫使你同时精通CFD。为了正确使用它,你需要具备CFD的专业知识。任何人都可以运行教学案例,任何人都可以在ParaView(我们称之为CFD = 五彩流体动力学)中展示结果,但要知道结果是否正确,以及在没有错误消息的情况下,能够在案例崩溃后让它重新运行,这需要一定的CFD背景知识。

好消息是,OpenFOAM揭示了设置案例所需的所有内容,这也意味着你可以开始了解每个选项和输入的作用。一开始,你将花费大量时间查找这些内容(不是在官方文档中,那相当无用)。随着时间的推移,事情会变得清晰起来,但这需要时间。然而,一旦你从这个过程中走出来,你将比普通CFD用户了解更多关于CFD的知识,你将对自己的模拟设置感到自信。这是一种令人欣慰的感觉,但需要一段时间才能稳定下来。

2.1.5 优秀的源代码

查看代码时,我发现它有自己的格式规范,这与我所见过的任何东西都不太一样,但它 somehow works。OpenFOAM以自己的方式做所有事情,这同样适用于它的代码。虽然格式化标准有些非标准化,但它是一致的,这意味着阅读源代码变得相当直接,尽管OpenFOAM是一个由不同源文件组成的庞大集合。如果你查看任何其他开源代码项目,格式化和代码的清晰度通常不是优先考虑的事项。

这意味着,如果你想了解某些概念是如何在实际的CFD求解器中实现的,你必须经历学习如何阅读源代码的初步痛苦,但一旦你做到了,源代码可能就是你能读到的关于CFD最好的书籍。我只希望他们能更多地记录他们的方程式来源,但,well,你不可能得到一切。

我曾在我的几场讲座中使用过源代码,例如,提取过渡湍流模型的关联(这些关联你不会在任何教科书中找到)。这是一个非常实用的资源,阅读它实际上并不困难。

2.1.6 轻松通过自定义C++扩展OpenFOAM,即使不知道C++

现在,这正是我喜欢OpenFOAM的原因。Weller和Jasak设计得非常巧妙,以至于我们即使在不了解自己在最简单的情况下编写C++也能轻松注入C++代码。你几乎可以在任何你想的地方注入代码。

你想要参数化你的输入文件吗?没问题,而不是硬编码一个值,只需使用#calc" ";代替,这样你就可以通过这种方式注入自己的C++代码。你可以在之前定义变量,然后在使用calc语句时使用它们。参数化你的案例只需几分钟。

OpenFOAM的50多个边界条件对你来说不够用吗?你需要一些非常具体的东西?(定制的入口剖面,时间变化的行为)?当然,只需为你的边界条件添加一些代码,OpenFOAM就会将其连接到你的求解器上,你甚至不需要自己编译。这一切将在你第一次运行案例时完成(并且只进行一次;下一次你运行它时,将直接使用编译版本,无需重新编译)!

当然,你需要知道如何将这些内容注入到你的案例设置中,但幸运的是,有一些在线资源可以帮助你入门。一旦你有代码,你就可以轻松地修改它并在另一个案例设置中使用。这是学习OpenFOAM的一部分,但一旦你掌握了它,就没有更多的限制了。

2.1.7 适用于自动化和参数化

我提到了OpenFOAM的参数化方面,但还有一个与之密切相关的方面,那就是自动化。当我们运行案例时,我们很可能会运行几个不同的模拟,然后从所有这些模拟中提取数据。例如,我们想要提取在一系列攻角下空气动力学叶片的升力和阻力系数。能够参数化我们的模拟意味着我们也可以轻松地自动化它们。

由于一切都是基于文本的,因此很容易编写一个脚本来运行所有模拟,提取所需的数据,将其存储在特定位置,甚至可能对现有的案例设置进行更改然后重新启动模拟。定制、自动化和参数化你的案例相当简单,比其他求解器都要简单。因此,一旦你经历了学习OpenFOAM的痛苦,以自动化的方式使用它就变得相当直接。

2.1.8 对商业CFD求解器的威胁

这可能是我最喜欢的一个观点。当我开始我的本科CFD学习时,我的大学有ANSYS Fluent的学生许可证,所以我首先使用了这个求解器。我对它既不兴奋也不失望,因为我没有参照物,但它是不错的求解器。

大约在同一时间(2010年代初),OpenFOAM真正开始流行起来,并且它在几乎所有你能想到的行业中都被使用。它对像Fluent这样的商业求解器构成了严重威胁,在过去十年中,商业求解器进行了大幅度的重新开发以应对这一威胁。

作为一个从2010年代初开始使用Fluent的用户,我有机会亲自观察这种转变,这真的是相当迷人的。尽管我与ANSYS没有联系,但我非常确信他们的运营模式可能是这样的:“我们不能在成本上与OpenFOAM竞争,所以让我们找出如何与他们区分并提供OpenFOAM较弱的地方的解决方案”。如今我们拥有的Fluent正是这样!

我们从大约2020年开始有了Fluent网格划分,它能够相当不错地创建网格。与Fluent类似,设置网格只需要几次点击。它生成的网格通常比其他专用网格生成器质量更好,并且膨胀层算法几乎总是有效。这是其他网格生成器通常最难以处理的地方(包括OpenFOAM的网格生成器)。

如果你有ANSYS,或者甚至只是Fluent,你还会得到Spaceclaim,这是我们拥有的最被低估但可能是最好的用于CFD的CAD/前处理工具之一。OpenFOAM不提供创建CAD或清理CAD的支持。Fluent也变得更加用户友好(是的,它曾经需要超过12次点击和2次键盘输入),而OpenFOAM仍然像以前一样不友好(即,在开始运行你的案例之前,给我700行代码)。

我们之前探讨了CFD中的GPU计算,这也是Fluent大幅改进的另一个领域,我们不太可能在OpenFOAM中很快(或根本)看到类似的能力尽管已经有一些尝试

OpenFOAM让其他CFD供应商保持警惕,并且它确保了你支付的高许可费用意味着你得到了一个相当不错的回报,加上商业求解器提供的支持。

2.2 对于乐观主义者:学习OpenFOAM时可能遇到哪些不利因素?

我们已经探讨了如果你决定学习OpenFOAM可能期望的一些优势。但让我们也回顾一下一些不利因素,看看你将面临的障碍和挑战,你将不得不克服或减轻它们。

2.2.1 希望你喜欢Linux

OpenFOAM仅在Linux上运行。这就是全部。他们声称它也可以在Windows上运行,但实际上并不行。当然,你可以在Windows上运行OpenFOAM(这也是我一直在做的事情),但你首先需要设置一个Linux内核才能运行它。你无法在Windows上原生运行OpenFOAM,你始终需要一个中间的Linux层才能使其工作,无论是MinGW还是WSL。为什么?因为OpenFOAM的开发者决定编写自己的构建系统,它围绕另一个仅在Linux上工作的构建系统,并使用一些与Windows不兼容的库。

公平地说,OpenFOAM是一个老项目,想象一下你现在开始一个全新的软件项目,你需要有向后兼容性,那么30年后当你所在的计算科学领域可能已经发展到我们甚至无法想象的领域时,指责你软件设计不佳是不合理的。

所以,假设你是那70%使用Windows的人之一。如果你是,你现在必须学习一个全新的操作系统。不,不是所有按钮在哪里以及如何更改到深色模式;你必须深入了解你的终端。什么?你不在Windows上使用PowerShell?对,所以你首先必须学习如何使用任何终端。

OpenFOAM的学习曲线已经足够陡峭,但大多数人还必须学习一个全新的操作系统。这是一大认知负担,并不会让事情变得更容易。即使你在Windows上运行OpenFOAM,因为你必须通过其中一个Linux子层(我会推荐WSL),这和启动一个Linux操作系统并在那里完成所有工作(或者使用虚拟机,尽管我不推荐这样做,即使是中等规模的模拟,虚拟机也太慢且受限)并没有什么不同。

尽管如此,这并不一定是个坏事情,因为CFD代码通常在Linux环境中运行,特别是如果你正在迁移到HPC集群。当你这样做的时候,你将已经熟悉了集群的基本导航,只需学习如何与像SlurmPBS这样的调度器交互。

所以,我希望你喜欢Linux,因为它将成为你的(非滥用性的)第二个新最好的朋友!

2.2.2 仍然存在不良的软件测试实践

时至今日,我仍不确定在OpenFOAM总部是否正在进行任何软件测试。他们必须进行某种形式的测试,我可以在代码仓库中看到零星的测试案例,但鉴于代码库中仍存在大量软件缺陷(且修复这些缺陷的意愿不强),软件测试似乎并不是优先事项。

当然,已经实施了系统测试,这些测试通常在捕捉错误时能提供最大的支持,但如果系统测试没有涵盖整个代码库,它们就不可能检测到未经过测试的代码部分的错误。然而,据我所知,OpenFOAM仅提供了为数不多的针对相对简单几何形状的系统测试

简而言之,这意味着:祝你好运!如果你要运行系统测试之外的代码,你能否成功还是个未知数。如果你使用的是许多人都会使用的设置,那么你很可能得到结果,并且假设你的案例设置正确,这些结果可能是正确的。但在其他情况下,你可能不会这么幸运。

我最喜欢的例子是DFSEM湍流入口,它为LES模拟在入口处生成合成涡流。在cfd-online上有一个关于这种特定边界条件的非常详细的讨论帖,人们花费了大量时间来弄清楚如何让它工作,结果发现实施它的那个人没有考虑到一个特定的值(在其测试案例中为1,因此不会影响结果),但在任何其他这个值不为1的情况下,它根本就不起作用。据我所知,它至今仍未得到修复。

有一个LES亚格子尺度模型根本不起作用。没有教程案例使用它,也没有针对它的系统测试。据我所知,有人实现了它,却没有麻烦去测试它。我编写了自己的系统测试并系统地检查了所有LES实现。找出问题并不困难,同样,确定这里存在的是编程错误而不是设置错误也很容易。如果实施了适当的软件测试,这个错误就不会被公开发布。

2.2.3 对于复杂几何形状,网格划分能力有限

好吧,我提到OpenFOAM附带了一套自己的网格生成器,并且可以用于相当复杂的几何形状。这确实是正确的,但遗憾的是,当涉及到网格生成时(这不仅仅适用于OpenFOAM的网格生成器),创建膨胀层是想要解析湍流的边界拟合网格必须的过程。通常,你可以通过任何网格生成器在其生成膨胀层的鲁棒性来判断它,而OpenFOAM的能力真的很差(可能是我所见过的最差的之一)。

所以,是的,你可以使用OpenFOAM的网格生成器,当你最初学习OpenFOAM时这样做是有意义的,但请注意,你将得到非常简单几何形状的网格,但对于更复杂的案例,膨胀层过程很可能会失败。你仍然可以使用你的网格,但你不会得到近壁面速度场的良好预测,而且你可以基本上说再见了,你的模拟将无法得到任何有意义的阻力或摩擦系数。

如果你没有固体壁面,那么OpenFOAM确实为你提供了不错的网格支持,但如果你看到任何使用OpenFOAM网格生成器的、针对中等到高雷诺数的尺度和壁面解析(DES、SAS、LES)或甚至RANS模拟,我会非常怀疑结果的准确性。

如果你对壁面模型RANS的准确性感到满意(这在工业中通常是足够的),那么你可以应付这种情况。或者,如果你有足够的计算资源可用,并且你并不真的关心资源使用或计算时间,那么当然,你可能可以得到可以用于更具挑战性的湍流模拟的网格,但可能性很大,一个仅专注于生成网格并且做得很好的专用网格生成器将可能为你提供一个具有更高质量指标且单元格数量更少的网格,以达到相同的精度水平。

但正如俗话所说,一个糟糕的网格生成器总比没有网格生成器好。而且,再次强调,它是完全免费的,所以学习OpenFOAM的网格生成器仍然有它的价值。但请注意,你可能会在这里遇到某些形式的限制,无论是性能、质量还是精度方面的。你已经得到了警告。

2.2.4 设置成本高,易出错

我们讨论了这样一个事实:要设置一个围绕机翼的简单流动,需要700行代码(这还不包括力的计算;那将是另外100行代码)。显然,这太过庞大,但如前所述,这是我们不得不忍受的。

你这里有几个选择:

  • 忍耐下来,从记忆中写下所有700行代码(没有人会这么做!),或者,如果你喜欢一点冒险,为什么不请ChatGPT为你写点东西?(没有人应该这么做)
  • 复制一个教程案例并修改到你满意的程度(如上所述,这是一种危险但常见的做法)
  • 使用工具来设置你的案例(需要在学习OpenFOAM的同时再学习一个新的工具)。其中一些工具的复杂性和学习曲线与OpenFOAM本身相似(一个流行的例子:swak4Foam)

你可以很容易地看到错误是如何悄悄地潜入并破坏你的模拟的。这通常意味着你必须通过先运行一个测试模拟,检查结果,理想情况下与一些参考数据进行比较,然后微调你的设置,重复这个过程,直到你达到满意的结果(以你想要衡量的任何方式)。

2.2.5 文档记录不佳的求解器

如果你在这个网站上待了一段时间,你就会知道我对一些其他人不关心的事情感到兴奋,比如编写文档,以及撰写关于如何做的文章。没有人关心这些话题,OpenFOAM是一个绝佳的例子,展示了当开发者不关心它但仍然提供它时会发生什么。

OpenFOAM的文档几乎可以不存在。它是无用的。他们确实有一个相当有用的用户指南,我建议任何对学习OpenFOAM感兴趣的人都应该从头到尾阅读一遍(它并不长),但不要麻烦在代码文档中查找任何内容(截至写作时,似乎文档提供有所变化,也许我们将来会得到更好的文档,但我不会对此下注)。

按照我为DFSEM湍流入口生成器提供的例子,在阅读了cfd-online帖子后,我因为沮丧而放弃了它。但后来,我注意到引入了两个额外的边界条件,它们本应解决 exactly the same issue,所以我尝试了它们。

问题是,我根本无法弄清楚它们需要我使用什么输入。没有文档,但他们提供了一个他们从中实现了这个条件的参考论文。我通读了整篇论文,仍然无法弄清楚需要将什么内容放入设置中。我转向cfd-online并得到了一些建议,但它们都不起作用。

我并不是声称自己是无所不知的OpenFOAM巫师,但我确实拥有CFD的博士学位,并在CFD领域担任讲师。如果连我(以及我咨询的其他人)都无法弄清楚(nor anyone else I consulted),那么初学者在导航OpenFOAM的复杂性并真正利用它所提供的能力时有什么机会呢?

2.2.6 只提供低效的CFD算法

最后,我对OpenFOAM的最大问题之一是它非常慢。它之所以慢,不是因为其实施效率低下;它之所以慢,是因为它将其所有求解器限制在半隐式方法。这意味着我们将始终受限于我们可以使用的时间步长大小(对于瞬态求解器),因此收敛率相当慢。即使我们使用基于CFL的时间步进,我们也无法使用非常大的CFL数值来加速收敛,这对于快速收敛是必要的。

话虽如此,OpenFOAM确实通过使用其pimpleFoam算法和大量外部校正步骤(类似于使用具有双重时间步进的PISO)来支持大CFL数值,尽管作为刚开始学习OpenFOAM的新手,你可能会轻易错过这一点。但即使你使用了它,你也会发现这也不一定非常高效,因为我们确实需要无数次求解压力泊松方程,而这正是不可压缩CFD求解器的所有计算成本所在。

相反,他们本可以至少实现一种完全隐式方法(你可以在不太多改变现有求解器的情况下自行实现),但你很可能不会在刚开始学习OpenFOAM时就考虑定制自己的求解器。

其他CFD求解器实现了收敛加速方法,如伪时间步进、切换演化松弛等,但OpenFOAM却没有这些。好吧,好吧,局部时间步进是可用的,但我已经尝试过几次,它似乎并不正确工作,也没有像预期的那样加速收敛。

3 总结

那么,在这篇文章中,我们探讨了学习OpenFOAM时的主要优缺点。但让我们回到我们的开头问题,你应该学习OpenFOAM吗?

我认为答案取决于你的具体情况,所以我将它们分组到不同的类别中:

3.1 何时学习OpenFOAM

  • 你是一名学生,你有大量时间,并且不介意深夜被你的电脑折磨,只是为了让那些壁面函数工作。OpenFOAM对你来说非常合适。
  • 你想要获得CFD专业知识并理解求解器设置的所有步骤。你并不一定在寻找一个能立即给出结果的求解器,而是一个你愿意等待几周/几个月才能得到一些有意义结果的地方。简而言之,你不回避智力挑战。OpenFOAM也非常适合这一点!
  • 你在考虑编写自己的求解器。你不在乎其他CFD求解器,只想用你自己的求解器统治世界。首先学习OpenFOAM,了解它的弱点,并确保你的求解器为所有这些弱点(网格划分、设置复杂性、未经测试的代码等)提供卓越的用户体验。
  • 你不属于上述任何类别,但不想或不能在许可证费用上花钱。作为开源CFD求解器,OpenFOAM可能是你的最佳选择,作为一个通用的CFD求解器。

3.2 何时不应学习OpenFOAM

  • 如果你珍视你的时间和理智。
  • 你有足够的资金购买每年25,000美元的ANSYS许可证(其他求解器可供选择)。说真的,你为什么要把这篇文章看到底?你早就应该离开了,我给你留下了足够的线索,让你把钱扔给ANSYS……
  • 你想要一个易于导航的用户界面,最好是图形化的,这样你可以用你的新游戏鼠标练习点击速度。
  • 你是CFD的完全新手。如果你是大学生并且可以访问不同的(商业)求解器,先学习那个,然后再回来学习OpenFOAM。对更用户友好的求解器的基本了解将在你学习OpenFOAM时提供巨大帮助。
  • 你没有访问商业网格生成工具,并且你想或需要模拟具有壁面解析湍流模型的流动(即y+值为1或更小)。除非你做的是像平板、圆柱流动、通道中的盒子、机翼这样简单的东西,你可以轻易地将域划分为独立的块(因此可以使用OpenFOAM的结构化网格生成器blockMesh,它相当不错),否则OpenFOAM不会给你你想要的东西。他们的笛卡尔切割单元网格生成器snappyHexMesh在膨胀层创建上表现不佳。对于y+值大约100及以上,它的工作还可以,但即使在这里,我也见过它惨不忍睹地失败。通过大量工作,你仍然可以得到相当不错的结果,但壁面解析边界层是一个挑战,如果不是不可能(这取决于你的几何形状)。
  • 你有一个特定的用例,其中存在更好的替代方案。例如,OpenFOAM因在可压缩流动方面性能极差而闻名(没有黎曼求解器或更高阶的方案可用)。在这种情况下,像SU2这样的求解器可能更好。对于流体-结构相互作用,code_sature提供了更好的开箱即用支持。OpenFOAM确实有FSI能力,但成熟度不如前者。

我希望这个列表总结了何时学习OpenFOAM,何时不应学习。看看你最适合哪个部分,然后你就有答案了。

如果我要给出一个适合所有情况的答案(你又拿出那把枪了?!),那么我会说,是的,学习OpenFOAM。即使你能够访问不同的商业求解器,我认为OpenFOAM和可用的求解器套件实际上是互补的。你知道你总是可以用你的商业求解器得到结果,但时不时地,尝试在OpenFOAM中设置一个案例,并将其与你的商业(或内部,或任何其他类型的)求解器进行比较。

这样,你可以减轻学习OpenFOAM的痛苦,并随着时间的推移慢慢学习。根据我的个人经验,当我第一次遇到OpenFOAM时,作为学生,有很多东西我并没有完全理解,但随着时间的推移,通过大量的阅读,我设法掌握了它,我的CFD求解器算法和方案知识也因此爆炸式增长。这需要时间,但这是值得投资的时间。

当然,时不时地,OpenFOAM会像Jeremy Clarkson一样给你一个出其不意的“惊喜”,但如果你能应对这一点,你很快就会感觉自己像一个CFD超级力量,可以驯服我们大多数人无法驯服的野兽!当你运行你的模拟并且它们顺利工作时,这是一种非常令人满足的感觉。如果你现在决定学习OpenFOAM,恭喜你。你选择了颠簸的冒险道路,但这是一条值得旅行的道路。


赞(1) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《学习OpenFOAM:好处、坏处与挑战!》
文章链接:https://www.topcfd.cn/40554/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册