首页/文章/ 详情

DAKOTA与OpenFOAM联合仿真:参数分析与参数寻优

1年前浏览2980
   


关于DAKOTA

DAKOTA是一款开源的黑箱套件,功能包括参数分析、不确定性分析、敏感性分析及参数优化等。它的黑箱特性给OpenFOAM使用者带来了空前的便利:退能自动部署算例,解放双手;进能深挖数据,给出报表。无论是对于何种需求的OpenFOAM爱好者,它都是一个值得尝试的强大工具。DAKOTA的通用性来自于它的高度参数化,只要是能以文本格式进行输入输出的代码,都能与DAKOTA构成闭环。


   
下面用两个简单例子了解DAKOTA算例的部署。  

1

入口流速对空间内某点速度的影响分析

一个DAKOTA算例目录至少包含四个要素:

1

casebase目录:OpenFOAM基础算例文件夹(可以理解为食材); 

2

templatedir目录:字典模板文件夹(可以理解为砧板);

3

simulator_script文件:OpenFOAM单个算例执行脚本(可以理解为埋头做菜的学徒);

4

.in文件:DAKOTA字典(姑且理解为管事儿的总厨)。


 

食材将在砧板上被加工成可以下锅的原料,再由学徒进行烹饪。悉数装盘后统一交由总厨评判定夺。这就是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的诸多高级用法才是它的精髓。    
高级功能不需要氪金,需要的是学习与尝试。    

这里仍然使用以上的例子,展示DAKOTA在参数寻优方面的应用。假设我们需要设计点的Ux为5m/s,结合刚刚的参数分析,可以粗略估计入口速度在5.2m/s附近,接下来使用梯度下降法对猜测进行验证,使用的算法为comin_frcg。该算法适用于平滑、连续、无线性约束条件的问题。修改simulator_script为:

   

在此脚本中,我们实现了将计算结果与设计值的绝对差值传给DAKOTA。

修改dakota_of.in为:

   

执行DAKOTA,发现寻优算法在迭代16步(包括24个算例)后结束,与设计值差距仅为1e-5。

   
观察table_out.dat文件,可以查看参数选取的历史。    

需要注意的是,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/

来源:多相流在线
AdamsOpenFOAM碰撞多相流湍流通用核能电力电子参数优化理论材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-23
最近编辑:1年前
积鼎科技
联系我们13162025768
获赞 102粉丝 95文章 282课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈