1
入口流速对空间内某点速度的影响分析
一个DAKOTA算例目录至少包含四个要素:
1 | casebase目录:OpenFOAM基础算例文件夹(可以理解为食材); |
2 | templatedir目录:字典模板文件夹(可以理解为砧板); |
3 | simulator_script文件:OpenFOAM单个算例执行脚本(可以理解为埋头做菜的学徒); |
4 | .in文件:DAKOTA字典(姑且理解为管事儿的总厨)。 |
1
casebase目录
先准备食材。
将一个调试好的算例放入casebase文件夹。这里直接拷贝OpenFOAM的后台阶绕流算例至工作目录,将其重命名为casebase。
食材还是原生态了点,我们稍微加工一下,让算例能自个儿进行后处理。这年头都买冷鲜肉了,自己杀猪的少。
我们需要的是空间内某点的速度值,自然联想到OpenFOAM自带的probes工具。在casebase/system/controlDict末尾加入如下函数:
运行时,OpenFOAM会自动生成postProcessing / probes / 0 / U 文件,如下:
2
templatedir目录
下面我们进行切配的准备。
选取的自变量是速度入口边界条件,必然涉及对0/U字典中的入口速度进行修改。我们要做的仅仅是把0/U字典拷贝到templatedir目录,命名为U.template,再将文件中需要自动修改的地方标出即可。
将图左内容修改为图右所示。Ux即为我们指定的变量名,在运行时将被替换成指定的数据。
3
simulator_script文件
作为一个学徒,是需要有点烹饪技术,但也不需要太厉害,学徒嘛。
下面我们来用一段简单的bash脚本部署算例,该脚本包括三个部分。
(1)前处理:按大厨的吩咐($1)进行切配,用DAKOTA自带命令dprepro将给定值按要求填入字典;
(2)计算:大家都熟悉的OpenFOAM执行脚本;
(3)后处理:小心翼翼地将成果放到大厨面前桌上($2)
4
.in文件:DAKOTA字典
脑袋大,脖子粗,不是大款就伙夫。别看大厨从不亲力亲为,他有资源调配去粗存精的能力。
DAKOTA字典文件随需求的不同,会有很大的变化,需要一定的数据分析知识才能吃透。但我们可以有样学样,借官方案例进行模改。以下为本算例的字典文件,仅对初期需要关心的字段进行简介,更多的内容请参阅DAKOTA官方文档。
执行算例的命令为:
DAKOTA会自动生成一个.rst文件,如果运算被打断,无需从头来过,执行以下命令即可“断点续算”。
算例执行完毕,会生成table_out.dat的数据汇总,形如:
有了结果,我们就可以使用gnuplot等工具进行图表的绘制。
此例中设定自变量的方式为给定初值和终点,当然也可以通过表格的方式逐一给值,感兴趣的朋友可以自行探索。
2
使设计点速度为期望值的入口流速寻优
这里仍然使用以上的例子,展示DAKOTA在参数寻优方面的应用。假设我们需要设计点的Ux为5m/s,结合刚刚的参数分析,可以粗略估计入口速度在5.2m/s附近,接下来使用梯度下降法对猜测进行验证,使用的算法为comin_frcg。该算法适用于平滑、连续、无线性约束条件的问题。修改simulator_script为:
在此脚本中,我们实现了将计算结果与设计值的绝对差值传给DAKOTA。
修改dakota_of.in为:
执行DAKOTA,发现寻优算法在迭代16步(包括24个算例)后结束,与设计值差距仅为1e-5。
需要注意的是,DAKOTA中植入的算法繁多,仅梯度算法就有近二十种。本案例最初采用了comin_mfd算法,在13步即收敛,但却被困在了局部最优里,并不能给出理想的优化结果。更换comin_frcg算法后得到了让人满意的结果。所以,在测试时须结合需求(如函数及约束条件的特性、求取局部最优抑或全局最优等)对算法进行选取和尝试。
另外,对于一些不平滑的函数,基于梯度的算法显然不再满足要求,DAKOTA也提供了十余种无导数算法,如著名的基因(GA)算法。
总 结
本文结合案例简要介绍了DAKOTA在参数分析与参数寻优中的应用。工程中的问题远比本文例子复杂,尤其当涉及多个自变量或多个目标函数时。后续将分享多参数分析及多目标优化的案例。
参考文献
1. Adams, B.M., Bauman, L.E., Bohnhoff, W.J., Dalbey, K.R., Ebeida, M.S., Eddy, J.P., Eldred, M.S., Hough, P.D., Hu, K.T., Jakeman, J.D., Stephens, J.A., Swiler, L.P., Vigil, D.M., and Wildey, T.M., "Dakota, A Multilevel Parallel Object-Oriented Framework for Design Optimization, Parameter Estimation, Uncertainty Quantification, and Sensitivity Analysis: Version 6.0 User’s Manual," Sandia Technical Report SAND2014-4633, July 2014. Updated November 2015 (Version 6.3).
2. DAKOTA官网:https://dakota.sandia.gov/
3. DAKOTA用户指南及理论指南:https://dakota.sandia.gov/content/manuals
4. DAKOTA参考手册:https://dakota.sandia.gov/content/611-reference-manual
5. DAKOTA编译安装教程(Ubuntu平台):https://chienfm.com/dakota/Compile-Dakota-for-Ubuntu-16.04/