33 Star 67 Fork 63

poplee/openFoamUserManual

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
30.Case_manipulation.md 7.28 KB
一键复制 编辑 原始数据 按行查看 历史
poplee 提交于 2023-07-26 01:45 . add 30.Case_manipulation.md.

30 算例处理

本节将讨论算例处理工具,这些工具可以在不创建或不修改网格的情况下对算例进行处理,也可以用于初始化算例。这里提到的应用程序已经在之前的章节中讨论过了,在此不再赘述。

图74:未映射区域

30.1 变更字典

实用工具changeDictionary可用于修改除了系统字典外的其他字典。当然,我们可以使用一个简单的文本编辑器,甚至从命令行(emacs、vim、nano等)来操作任何字典。

changeDictionary可以派上用场的一种可能情况是,当我们进行旋转模拟时,例如模拟在一定时间内来流流量减少的流动,然后流量恢复到最大值。这种方法可以提高模拟的稳定性。

能够说明changeDictionary非常重要的另一种情况是,当我们想要改变先前模拟中获得的区域边界值时。使用某些文本编辑器编辑以兆字节为单位的ascii文件可能会非常麻烦。如果文件是以二进制存储的,更是无法使用文本编辑器来进行编辑。这种情况下changeDictionary就提供了一种更改边界值的非常简单的方法。

清单172显示了changeDictionaryDict的一个简单示例。

dictionaryReplacement
{
	U
	{
		boundaryField
		{
			inlet
		{
			type fixedValue ;
			value uniform (20 0 0) ;
		}
		}
	}
}

清单172:用于更改入口速度的简单changeDictionaryDict

默认情况下,changeDictionary仅对时间步目录中的字典进行操作。通过添加命令行选项-content,可以编辑常量文件夹的字典。

30.1.1 旋转模拟

在本节中,我们将讨论并展示前面提到的旋转模拟。目的是为了演示模拟运行开始后就无需用户干预是如何实现的。在这种情况下,我们假设已经建立了一个入口流速较低的流动模拟。在这种情况下流场内的流动可以用比较温柔的方式建立起来(因为速度低)。流场建立后,我们将入口流速再增加到所需的一个比较大的值。此时因为之前已经有了一个较慢的流场,流场内的流动增加就会比直接设定到该最大值更温和。如此我们就避免了入口处的流体全力冲击流场中静止流体的情况,使模拟更加稳定。

清单173显示了这种模拟的Allrun脚本。在第11行中,首次运行了解算器。由于脚本中没有一行是以&符号(&)结尾的,因此每一条命令的执行都将等待上一行命令完成之后。因此我们假设所有命令都以此指定的顺序运行的。

  • 在第14行中,runApplication生成的日志文件被重命名(在目录中移动文件实质上就是重命名)。此操作的原因是,runApplication检查是否已存在日志。如果存在,runApplication将不运行指定的应用程序。
  • 在第15行中调用changeDictionary。在我们的示例中,这是增加入口速度的步骤。在第16行中,我们使用GNU工具sed编辑controlDict。
  • 在第19行中,我们第二次调用解算器。这一步,在controlDict中将关键字startAt设置为latestTime至关重要。
  • 在第20行中,我们对第二次运行的解算器日志应用相同方式进行重命名。这在原则上是不必要的,然而若我们要执行日志的自动处理,那么一致的命名方案可能会更有用。
1 #!/ bin/sh
2 cd $ {0%/*} || exit 1 # run from this directory
3
4 # Source tutorial run functions
5 .$WM_PROJECT_DIR/bin/tools/RunFunctions
6
7 # Create the mesh using blockMesh
8 runApplication blockMesh
9
10 # Run the solver
11 runApplication pimpleFoam
12
13 # prepare second run
14 mv log.pimpleFoam log.pimpleFoamRun01
15 runApplication changeDictionary
16 sed -i ’s/endTime  20/endTime  40/g’ system/controlDict
17(译者注:sed 's/要被取代的字串/新的字串/g')
18 # Run the solver again
19 runApplication pimpleFoam
20 mv log.pimpleFoam log.pimpleFoam02
21
22 # ----------------------------------------------------------------- end -of - file

清单173:spin-up模拟的Allrun脚本

把Allrun脚本应用于稍微修改过的pitzDaily算例。将适当的changeDictionaryDict文件(清单172)添加到系统目录中,否则算例不会有任何变化。图75显示了调用changeDictionary后的流场,图中显示了由入口速度为(10 0 0)建立的初始运行时的流场,以及入口速度增加之后的流场。

30.1.2 更改边界类型

changeDictionary的另一个非常方便的用途是更改某些边界的类型。当使用导入的网格时这种方法会非常有用。某些网格格式或网格工具不支持为某些边界分配边界类型。因此,当将这些网格导入OpenFOAM时,所有边界面都是一般类型。因此,有必要将这些类型为“墙”的边界面的类型改为“wall”。当然可以通过手动编辑边界文件的方式来完成,但这种方法不可扩展 - 如果我们有数百个“墙”边界面怎么办 - 而且也很容易忘记这一步骤。

图75:在t=1s时,pitzDaily教程案例建立的流场和增加的入口边界条件

使用changeDictionary更改边界面的类型是一种可扩展的解决方案,即一旦在文件changeDictionaryDict中指定了更改,当我们重新导入网格和更改边界类型时,就不会有额外的工作了。

使用changeDictionary而不是手动编辑的第二个主要优点是,使用工具可以编写脚本,而手动操作文件则不行。脚本可以确保在任何过程中都不会遗漏任何中间操作。

boundary
{
	walls
	{
		type wall ;
	}
}

清单174:一个简单的changeDictionaryDict,用于将边界的“walls”类型更改为“wall”。

30.2 全能的Linux终端

本节介绍了我们使用Linux终端中的工具进行算例操作的过程。使用Linux终端工具的原因是,据作者所知,对于某些任务,OpenFOAM没有提供任何工具,或者使用终端的工具而不是OpenFOAM的工具可以更方便地完成任务。

我们能够使用Linux终端中的工具来处理算例的主要原因是,在OpenFOAM的算例定义中,每个对象都是一个文本文件。如果说Linux或一般的UNIX有一点过于丰富的话,那就是他们的文本编辑工具。这是由于UNIX创建者的一个设计决定,引用Eric S.Raymond[20]最能说明这一点。

Unix传统强烈鼓励编写读写简单、文本、面向流、与设备无关的格式的程序。在经典Unix下,尽可能多的程序被编写为简单的过滤器,在输入时采用一个简单的文本流,在输出时将其处理为另一个简单文本流。

这种做法之所以受到青睐,并不是因为Unix程序员讨厌图形用户界面。这是因为如果你不编写接受和发出简单文本流的程序,那么将这些程序连接在一起就会困难得多。

文本流对于Unix工具来说就像消息对于面向对象环境中的对象一样。文本流接口的简单性加强了工具的封装。更复杂的进程间通信形式,如远程过程调用,则会过多地干涉彼此软件的内部编写。

在朋友的帮助下 如果我们将Linux终端和OpenFOAM工具的功能结合起来,一切皆有可能。在本节的剩余部分中,介绍了Linux和OpenFOAM提供的工具组合使用的一些操作场景。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/poplee/openFoamUserManual.git
git@gitee.com:poplee/openFoamUserManual.git
poplee
openFoamUserManual
openFoamUserManual
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891