基于R-Shiny和脚本的OpenFOAM远程应用开发

2022-03-16 11:14车霖源
关键词:配置文件脚本阻力

车霖源

(上海船舶运输科学研究所 a.航运技术与安全国家重点实验室; b.航运技术交通行业重点实验室,上海 200135)

0 引 言

在船型优化工作中,计算流体力学(Computational Fluid Dynamics,CFD)工具已成为不可或缺的计算工具之一。为获得性能优良的船舶线型,需借助经验或优化算法对多个方案进行对比。CFD计算需耗费大量的计算资源,一般在计算机集群或专用的服务器上通过相应的软件实现,这些高性能计算机通常采用linux系统。CFD计算对CFD工具使用者有较高的要求,不仅要求其熟悉计算机系统,而且要求其能很好地把握软件的参数设置,保证计算的合理性和准确性。在实际工作中,这会影响一部人使用CFD工具的效率,任务多时还会出现浪费计算资源的问题,影响工作进度。因此,需在船型优化设计人员与计算工具之间建立一座“桥梁”,使船型优化设计人员将更多精力投入到优化设计工作中,减少对计算工具的关注。

R语言的Shiny包可用来构建交互式网页,便于部署,能满足常用的交互式应用的需求。OpenFOAM是一款CFD开源平台,从本质上看是采用C++语言编写的面向对象的类库,具有极强的扩展性和强大的底层数学场量操作类库,可实现大规模的并行计算。OpenFOAM已在多个领域得到深入研究,在船舶水动力领域得到了广泛应用。本文以OpenFOAM为求解器,以Shiny为操作界面界面,以linux脚本为控制后台,建立针对船模阻力计算的远程应用。

1 基本技术路线

基本技术路线示意见图1。首先,用户利用浏览器输入计算参数,并将其与几何文件一同上传至服务器端;随后,脚本执行相关动作,实现计算和信息展示等功能。

图1 基本技术路线示意

R-Shiny在整个技术路线中起到传递数据和信息的作用,连接用户与服务器。输入数据,在服务器端生成可供脚本使用的,用于生成OpenFOAM计算策略的参数文件。调用生成的结果文件和计算排队文件,返回至浏览器,供用户参考。

脚本功能分为3部分,即:执行计算;监测计算收敛情况,控制OpenFOAM;收集、汇总信息。提交计算方案之后,脚本探测到新的文件,调用OpenFOAM执行网格划分和计算等任务。同时,根据计算的阻力时历数据判断计算是否收敛,以及是否结束本案例的计算,实现对多个方案的自动、连续计算,生成计算结果和多个方案的计算排队文件。

OpenFOAM设置以模板的形式存储在服务器内,其中参数设置随计算条件的改变而改变,计算条件来源于用户提交的参数文件。脚本自动生成供OpenFOAM计算使用的参数,如边界条件和网格划分参数等。

2 R-Shiny功能

Shiny的代码由ui和server组成,其中:ui用于设计浏览器展示内容的布局和用户交互的信息;server用于处理相应的逻辑关系,对输入的信息进行处理,对输出的信息进行控制,对用户的操作作出反应,产出对应的结果。

网页界面由信息输入和信息展示2个区域组成。信息输入区域见图2,计算参数可通过读取文件和在页面中填写2种方式提交;上传的几何文件为stl格式的文件,可通过三维建模软件(如Rhino)导出获得。通过下载数据功能可获得当前输入的参数文件和结果查询编号,方便下次计算时直接读取参数文件,不需要重新在界面中填写;同时,可通过查询编号查询本方案的计算结果和排队情况。图3为查询编号输入区域。

当计算完成之后,输入查询编号即可获得计算结果,包括阻力值和收敛过程。在阻力计算中采用半船,图4为半船的阻力时历曲线,表1为处理后的全船阻力。若查询的方案没有计算结束或没有开始计算,则显示该方案的排队情况。

图2 信息输入区域

图3 查询编号输入区域

图4 半船的阻力时历曲线

表1 处理后的全船阻力

server负责从读入的文件或界面中获取数据,并将其转换为可被脚本读入的格式,同时将参数文件和几何文件放在指定位置,供脚本调用。对于信息展示的处理,则是从指定位置读取结果文件,并将其传递给网页。

3 脚本功能

3.1 执行计算

在执行计算的脚本中,参考OpenFOAM的官方示例,将计算过程分为几何特征提取、背景网格划分、多次局部加密、有几何物体的网格划分、网格检查、多相流设置、计算域拆分、并行计算和计算结果组合等过程。由于要在不同情况下应用计算策略,在执行上述计算任务之前,根据提交的参数文件获得OpenFOAM配置文件中不同参数的数值,并对模板文件进行替换,得到当前算例的完整计算文件。具体脚本执行计算流程见图5。

3.2 监测收敛,控制OpenFOAM

在进行数值模拟过程中,需高效利用计算资源和时间资源,及时判断模拟结果是否稳定收敛,结束当前过程,并对后续方案进行计算。OpenFOAM中的控制文件controlDict可在计算过程中进行修改并立即起效。利用该特性修改controlDict中的endTime,使计算立即结束。

利用脚本监测计算总阻力,以最新的300个计算步的变异系数为评估变量,设定的准则为变异系数等于0.1。变异系数用于反映一组数据的离散程度,本文借此概念评估计算阻力的振荡情况,进而判断计算是否稳定。变异系数的表达式为

(1)

判断标准为

<01

(2)

若当前进行了1 000个时间步的计算,则计算700~1 000个时间步内总阻力的变异系数,判断其数值是否小于0.1。若该变异系数的值小于0.1,则自动修改配置文件controlDict中的endTime字段数值为当前对应的模拟时间,结束本方案的计算;若该变异系数的值大于等于0.1,则继续计算,以此类推,直至计算稳定。脚本处理流程见图6。

图5 脚本执行计算流程

图6 脚本处理流程

3.3 信息收集与汇总

计算结束之后,原始的计算结果被存储到了服务器中,用户无法直接读取,需通过Shiny将计算结果传递到浏览器端,实现信息展示。脚本对阻力时历结果中的最后300个时间步的数据取平均值,将其存储在相应的文件中和特定的位置上,内容包括压阻力、黏性阻力和总阻力。同时,脚本控制Gnuplot绘图工具,处理得到阻力时历曲线,为用户提供收敛过程,帮助其判断计算是否正常。

获取多个方案的计算排队情况有助于用户合理规划工作时间。应用脚本监测待计算文件夹内的方案和正在计算的方案,形成排队情况信息汇总,以表格的形式在浏览器中展示。

4 OpenFOAM计算策略模板化

OpenFOAM的配置文件包含众多内容,软件的使用门槛较高。本文针对船舶阻力计算,基于大量水池试验,总结一套可靠的计算策略,建立相应的模板文件。用户无需知道参数如何设置,在浏览器中填写好计算条件之后,脚本自动生成符合当前方案的配置文件。

下面以网格加密的参数设置说明如何利用模板和脚本生成计算配置文件。文件topoSetDict.1用于对船体周围的某个长方形区域进行1次加密标记,因此区域的大小与船模尺度有关,否则将导致加密区域过大,网格数量过多,或没有将船模包围进去,在划分网格时出现错误。

模板中topoSetDict.1文件中的box字段按以下方式编写:

box (x1min y1min-3) (x1max 0 z1max);

脚本中采用以下命令:

sed-i "s/x1min/$x1min/g" system/topoSetDict.1

sed-i "s/x1max/$x1max/g" system/topoSetDict.1

将模板中的x1min和x1max替换为对应的数值。x1min和x1max是与船模长有关的变量,本文取

x1min=-pp

(3)

x1max=1.5pp

(4)

式(3)和式(4)中:pp为船模垂线间长,根据实船垂线间长和缩尺比计算得到。其他的字段采用类似的方式替换,最终获得用于计算的配置文件。

5 应用情况

首先校核计算精度,为后续改进提供基础。从上海船舶运输科学研究所的模型试验数据库中随机抽取31艘船的试验数据作为样本,选择设计吃水和设计航速状态,采用该应用进行计算校核,得到的误差分布柱形图和核密度估计曲线见图7。

图7 误差分布柱形图和核密度估计曲线

计算误差基本集中在±4%以内,占总计算样本的93.5%,且在0附近比例最高,均值为-0.42%,说明该应用对船模阻力具有很好的模拟效果,可作为船型优化和性能评估的辅助工具。

在该应用发布之后的20 d内共对4艘船的近50个方案进行了计算,包括1艘客船、2艘多用途船和1艘大型散货船,帮助完成了相关的优化选型和性能评估工作。

6 结 语

为合理利用计算资源,方便船型优化设计人员使用CFD工具评估船舶性能,结合R-Shiny和linux脚本实现了基于OpenFOAM的远程应用开发。该应用在输入计算参数和几何文件之后能自动配置好OpenFOAM所需文件并执行计算;计算过程中可判断收敛情况,在保证结果稳定的情况下,结束当前算例并进行后续计算。该应用能极大地提高计算资源的使用效率,缩短不必要的模拟时间;同时,能为用户反馈必要的信息,实现关键信息展示。

该应用使用简单,计算精度高,展示结果清晰,方便用户进行批量多方案计算;输入的参数较少且能重复利用,同时对输入的几何文件要求低,无需额外进行修整。

本文涉及到的服务器端的信息是在文件中存储和传递的,在处理过程中略显繁琐。后续将考虑采用数据库技术,通过数据库实现信息存储,高效地管理输入信息和输出信息。此外,可融入几何变形工具和优化算法,实现自主或半自主式优化,提升船型优化效率。

猜你喜欢
配置文件脚本阻力
基于正交试验的整车驱动轮滚动阻力因素分析
掌握颜色查找表的魔力
Explore wild skating on nature
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
猪猴跳伞
互不干涉混用Chromium Edge
自动推送与网站匹配的脚本
举一反三新编
捕风捉影新编