OpenFOAM中重力的植入方式

news/2024/11/8 17:54:27/

OpenFOAM中重力的植入方式


考虑重力的NS方程可以写为:
ρ ∂ u ⃗ ∂ t + ρ ∇ ( u ⃗ u ⃗ ) = ∇ ( μ ∇ u ⃗ ) − ∇ P + ρ g ⃗ (1) \rho \frac{\partial \vec u}{\partial t}+\rho \nabla(\vec u \vec u)=\nabla(\mu\nabla \vec u)-\nabla P +\rho \vec g \tag {1} ρtu +ρ(u u )=(μu )P+ρg (1)在openFOAM中,许多求解器中都耦合了重力,以interFoam为例,其中的重力定义处的代码块为:

  fvc::reconstruct((mixture.surfaceTensionForce()- ghf*fvc::snGrad(rho)- fvc::snGrad(p_rgh)) * mesh.magSf()

将其中的重力抽离出来,其表达式为fvc::reconstruct( (ghf*fvc::snGrad(rho) )* mesh.magSf() )。通过溯源代码,我们可以进一步得到其中ghf的表达式:

new surfaceScalarField
("ghf",(gFluid[i] & fluidRegions[i].Cf()) - ghRef
)

其中gFluid[i]返回了通过字典(constant/g)读取得到的重力加速度项,fluidRegions[i].Cf()返回了当前网格表面的面心矢量,ghRef是给定的相对重力加速度,一般为0。综上所述,openFOAM中的重力的表达式为: G ⃗ = − ( g ⃗ ⋅ s ⃗ ) ∇ ρ (2) \vec G=-(\vec g \cdot \vec s)\nabla \rho\tag {2} G =(g s )ρ(2)其中 s ⃗ \vec s s 是待求点的位置矢量,这显然与方程1使用的重力表达式相差很大,接下来我们就一步一步推导这个结果。
首先明确,在涉及到重力的求解器中,其求解的压力p并不是总压P,而是动压,即: P = p + ρ g ⃗ ⋅ s ⃗ (3) P=p+\rho \vec g \cdot \vec s\tag {3} P=p+ρg s (3)之所以要这样处理是为了方便用户设置初场,大家可以设想最简单的溃坝算例,如果直接对总压设置初场,那我们要设置的则是一个梯形的压力分布,计算域的y坐标越高其净水压强就越大,而如果我们拆分成动压和静压的形式,就可以直接设置初场为0了。可能有小伙伴对 g ⃗ ⋅ s ⃗ \vec g \cdot \vec s g s 项不太理解,其实我们只要对其展开就很好说明问题了: g ⃗ ⋅ s ⃗ = ( 0 , g , 0 ) ⋅ ( x , y , z ) = g y (4) \vec g \cdot \vec s=(0,g,0)\cdot(x,y,z)=gy\tag {4} g s =(0,g,0)(x,y,z)=gy(4)在动量方程中,我们存在对总压的压力梯度项,将总压拆成静压和动压即可得到: ∇ P = ∇ ( p + ρ g ⃗ ⋅ s ⃗ ) = ∇ p + ∇ ( ρ g ⃗ ⋅ s ⃗ ) = ∇ p + ( g ⃗ ⋅ s ⃗ ) ∇ ρ + ρ ∇ ( g ⃗ ⋅ s ⃗ ) (5) \nabla P=\nabla (p+\rho \vec g \cdot \vec s)=\nabla p+\nabla(\rho \vec g \cdot \vec s)=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho\nabla( \vec g \cdot \vec s)\tag {5} P=(p+ρg s )=p+(ρg s )=p+(g s )ρ+ρ(g s )(5)其中关键点在于处理 ∇ ( g ⃗ ⋅ s ⃗ ) \nabla(\vec g \cdot \vec s) (g s )项,根据式4有: ∇ ( g ⃗ ⋅ s ⃗ ) = ∇ ( g y ) = ( ∂ ( g y ) ∂ x , ∂ ( g y ) ∂ y , ∂ ( g y ) ∂ z ) = ( 0 , g , 0 ) = g ⃗ (6) \nabla(\vec g \cdot \vec s)=\nabla (gy)=(\frac{\partial (gy)}{\partial x},\frac{\partial (gy)}{\partial y},\frac{\partial (gy)}{\partial z})=(0,g,0)=\vec g\tag {6} (g s )=(gy)=(x(gy),y(gy),z(gy))=(0,g,0)=g (6)因此,式5最终写为: ∇ P = ∇ p + ( g ⃗ ⋅ s ⃗ ) ∇ ρ + ρ ∇ ( g ⃗ ⋅ s ⃗ ) = ∇ p + ( g ⃗ ⋅ s ⃗ ) ∇ ρ + ρ g ⃗ (7) \nabla P=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho\nabla( \vec g \cdot \vec s)=\nabla p+ ( \vec g \cdot \vec s)\nabla\rho+\rho \vec g\tag {7} P=p+(g s )ρ+ρ(g s )=p+(g s )ρ+ρg (7)将式7带回方程1,即可得到OpenFOAM代码中使用的含重力的动量方程了:
ρ ∂ u ⃗ ∂ t + ρ ∇ ( u ⃗ u ⃗ ) = ∇ ( μ ∇ u ⃗ ) − ∇ p − ( g ⃗ ⋅ s ⃗ ) ∇ ρ (8) \rho \frac{\partial \vec u}{\partial t}+\rho \nabla(\vec u \vec u)=\nabla(\mu\nabla \vec u)-\nabla p - ( \vec g \cdot \vec s)\nabla\rho \tag {8} ρtu +ρ(u u )=(μu )p(g s )ρ(8)


http://www.ppmy.cn/news/547598.html

相关文章

A*寻路算法详解

博主自制工具 翰华Box:https://hanhuabox.lanzous.com/b00zjq9uf 翰华Box - 开发日志:https://blog.csdn.net/qq_41517936/article/details/106409456 在我们平时打小游戏的时候,有时候会遇到一些小怪兽,这些小怪兽会自动追击我…

Hive常用函数大全(一)(关系/数学/逻辑/数值/日期/条件/字符串/集合统计/复杂类型)

测试数据集: create external table if not exists order_detail( user_id string, device_id string, user_type string, price double, sales int ) row format delimited fields terminated by \t lines terminated by \n stored as textfile;hdfs dfs -put /h…

在VM安装最新版Linux镜像

在VM中安装最新版Linux镜像 1.点开VM,选择创建新的虚拟机。 2.出现下图提示后,选择典型,更加快捷。然后点击下一步。 3.当出现下图提示时,选择镜像文件所在位置,点击下一步。 4.初次设置全名为Huifeng Linux,便于…

MATLAN图像处理之高频强调滤波(图像增强)

书中是对X拍的图片进行了增强 下面这个例子不太合适 但是也能体会到高频强调滤波的作用 % 图中可以看出 高频强调滤波在增强边缘的同时 距离原图的色度较近 %高通滤波器偏离了直流项,从而把图像的平均值降低到0. %一种补偿的方法是给高通滤波器加上一个偏移量。…

最详细的HIve常用函数整理及案例演示

Hive常用函数 一、测试数据集1.1 测试数据集:1.2 结果展示 二、常用函数2.1 关系运算2.1.1 常见关系运算符2.1.2 空值判断2.1.3 非空判断2.1.4 LIKE2.1.5 RLIKE2.1.6 REGEXP 2.2 数学运算2.2.1 - * /2.2.2 %2.2.3 位与& 位或| 位异或^ 位取反~ 2.3 逻辑运算2.3…

ubuntu20.04 磁盘故障,然后重装22.04

ubuntu20.04 磁盘故障,然后重装22.04 重装原因开机自启动不需要使用sudo 软件截图 flameshot输入法 fcitx5 重装原因 编译程序报错 /usr/include/x86_64-linux-gnu/bits/signum.h:26:10: fatal error: /usr/include/x86_64-linux-gnu/bits/signum-generic.h: 结构需…

基于SpringBoot+SpringCloud+vue的智慧养老平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

第三方库介绍——Protobuf库(更高效的协议)

文章目录 protobuf综述传输协议与指令创建协议编译协议 利用soctet实现客户端与服务端传输协议Linux(Ubuntu)安装protoc步骤编写案例代码 protobuf综述 Protocol Buffers,是Google公司开发的一种数据格式,类似于XML和json&#x…