OpenFOAM 拓扑优化
时间:2022年4月1日
本文简要介绍OpenFOAM-7自带的求解器adjointShapeOptimizationFoam以及自带的算例pitzDaily。小试牛刀介绍OpenFOAM的流体拓扑优化问题,希望能给入门者启发。
拓扑优化原是固体力学中的概念,用于材料结构设计,在设计初期在给定载荷下尽可能减少材料用量。2003年,Borrvall 和 Petersson提出在流体力学领域的拓扑优化问题,优化流体区域,以实现目标函数最大(小)化。
本文禁止未经允许的任何形式的转载
拓扑优化是将设计域划分为有限个单元,优化单元内固体含量。在流体拓扑优化中,设计变量是单元格内固体的体积分数 , 时为固体, 时为流体。(如果此处不好理解可以先看后面的算例结果)
考察不可压缩稳态Navier-Stokes方程,在Navier-Stokes引入Darcy力,即 ,用于描述过渡区域的固体阻力。
优化问题可以描述为:
引入拉格朗日乘子,将有约束的优化问题转变为无约束优化问题。
其中 是 正向问题的控制方程,即{1}式中的动量方程和连续性方程, 是拉格朗日乘子,也是伴随速度和伴随压力。
拉格朗日函数对 求偏导等于零,可以得到连续伴随方程,即关于伴随变量 的PDE问题。(具体推导过程以及伴随方程的边界条件将在下一篇文章中介绍)
拉格朗日函数对设计变量 求偏导,得到目标函数的灵敏度。
求解正向问题,即连续性方程和动量方程得到速度 ,求解伴随问题,即连续伴随方程,得到伴随速度 ,即获得目标函数对于设计变量的导数,接下来利用优化算法,可以进一步优化问题。
该部分不涉及OpenFOAM如何编写求解器及具体如何求解,只介绍其中入门者可能困惑的关键问题。
1.目标函数为最小流动功耗
该目标函数是边界的积分,计算域内偏导为零。得到伴随方程{3}中
伴随动量方程{1}对应的代码形式为
volVectorField adjointTransposeConvection((fvc::grad(Ua) & U));
zeroCells(adjointTransposeConvection, inletCells);
tmp<fvVectorMatrix> tUaEqn
(
fvm::div(-phi, Ua)
- adjointTransposeConvection
+ turbulence->divDevReff(Ua)
+ fvm::Sp(alpha, Ua)
==
fvOptions(Ua)
);
2.最速下降法
adjointShapeOptimizationFoam求解器利用最速下降法优化结构, 为步长,并引入松弛因子。
OpenFOAM中以以下实现:
alpha += mesh.fieldRelaxationFactor("alpha")
*(min(max(alpha + lambda*(Ua & U), zeroAlpha),alphaMax) - alpha);
3.一步法求解
通常求解CFD问题时,需要多次迭代,才能达到收敛,获得比较准确的速度场和压力场。而在该求解器中,由于求解器和算例的都较为简单,为了演示计算,同时降低计算量,采用一步法求解正向问题和伴随问题。在每一步优化迭代中,只循环计算一次SIMPLE耦合速度和压力场,不需要求解得到稳定收敛的向量和标量场。将结构优化迭代问题和正逆问题的迭代在同一个循环中计算。
用OpenFOAM自带的算例进行演示,可以看到蓝色为流体流经区域,红色为固体区域。 经过优化后入口处的阶梯变成了一个斜坡,降低了流动功耗。 (下一篇文章将对该算例进行详细说明)
Othmer, C. & de Villiers, E. & Weller, H.G. (2007). Implementation of a continuous adjoint for topology optimization of ducted flows. American Institute of Aeronautics and Astronautics, AIAA-3947.
这篇是Othmer写的在OpenFOAM实现拓扑优化的文章
Description of adjointShapeOptimizationFoam and how to implement new objective functions
是一篇 http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/ 课程报告中关于adjointShapeOptimizationFoam的作品