前言
这篇博文总结自OpenFOAM的用户手册。OpenFOAM的用户手写得很好,初学OpenFOAM的时候没觉得什么,等差不多入门之后,回头再看一遍,能发现其中很多亮点,很多能解决实际使用痛点的操作。有空多读手册,多回头看看。(本文长期更新)
- 场映射 mapFields
- 插值得到中间步的场 temporalInterpolate
- 重新进行并行区域划分redistributePar
- OpenFOAM搜索&百科 foamSerch&foamInfo
- 复制/清理算例 foamCloneCase&foamListTimes&foamCleanPolyMesh
- 修改字典 foamDictionary
- 配置文件获取 foamGet
场映射 mapFields
mapFields工具用来映射场。比如目前我们有一个100x100网格的运算结果,为了提高运算精度,我们决定将网格密度提高至200x200。为了不至于从0开始计算,我们可以使用mapFields工具将100x100网格的结果映射值200x200的网格中。关于mapFields工具,在OpenFOAM用户手册中多有探讨读者可以自行去阅读(用户手册第七版,2.1.5.3节,2.1.9节,5.6节)。值得强调的是,该技术实现的方法是进行插值,因此对于一些对有界性要求非常高的变量来说,进行场映射可能导致越界。(例如相界面处)。对于并行运算结果,该命令不需要进行重组也可以运行。
插值得到中间步的场 temporalInterpolate
使用 temporalInterpolate可以通过插值得到两个时间步之间的场。例如我们现在已经得到了0.2,0.4,0.6,0.8四步的数据,运行以下命令:
temporalInterpolate -time 0.2:0.8
我们可以插值得到0.3,0.5,0.7s时的数据,而运行:
temporalInterpolate -time 0.2,0.8
我们将得到0.2s和0.8s中间步的数据,即0.5s时的数据。
temporalInterpolate还可以指定插值方式等其他参数,可以使用附加-help参数来查看temporalInterpolate函数支持的参数。
重新进行并行区域划分redistributePar
当我们已经进行了并行区域的划分又想重新进行新的区域划分时,我们可以使用redistributePar命令进行。假设我们现在已经使用decomposePar命令划分好了2个并行区域,现在我们想重新划分为4个并行计算域,我们可以先可以修改system/decomposeParDict里的参数,进行4区域的划分,然后执行以下命令:
mpirun -np 4 redistributePar -parallel
如果想重新划分特定时间步(例如1s时)的数据,可以添加time关键词:
mpirun -np 4 redistributePar -time 1 -parallel
命