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}ρ∂t∂u​+ρ∇(uu)=∇(μ∇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 ss是待求点的位置矢量,这显然与方程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 sg​⋅s项不太理解,其实我们只要对其展开就很好说明问题了:g⃗⋅s⃗=(0,g,0)⋅(x,y,z)=gy(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⃗)=∇(gy)=(∂(gy)∂x,∂(gy)∂y,∂(gy)∂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}ρ∂t∂u​+ρ∇(uu)=∇(μ∇u)−∇p−(g​⋅s)∇ρ(8)

OpenFOAM中重力的植入方式相关推荐

  1. 电视剧植入式广告的植入方式有哪些

    植入式广告的异军突起无疑为我国电视行业和广告业都带来了双赢的局面.随着新技术.新媒体的出现,广告行业就受到了强大的冲击,电视广告经常被观众跳空,而植入式广告的出现则为广告主们提供了一个新的有力的平台. ...

  2. OpenFOAM 中边界条件的设定【转载】

    转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102v7jt.html 用习惯了FLUENT的操作界面,再使用OpenFOAM就会觉得非常繁琐.遇到的第一个问 ...

  3. 在OpenFOAM中获取每个网格的Skewness

    常用的网格划分软件中关于网格偏度(Skewness)只有统计结果,通常只能看到平均值.最大值及粗略的分布情况,而无法看到每一个网格单元对应的Skewness.因此,这里我希望借助OpenFOAM建立一 ...

  4. 将Bean放入Spring容器中的五种方式

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_43741092/ article/details/120176466 将bean放 ...

  5. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  6. python ctypes库中动态链接库加载方式

    最近看了<Gray hat python>一书,这才知道为什么python是黑客必学的编程语言.通过python的ctypes模块,可以直接调用动态链接库中的导出函数,而且甚至可以直接在p ...

  7. android 实现自定义监听接口,Android在自定义类中实现自定义监听器方式

    Android在自定义类中实现自定义监听器方式 发布时间:2020-08-31 06:19:39 来源:脚本之家 阅读:203 作者:Simon_Qi 监听器可以说是Android开发中最常用的东西之 ...

  8. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  9. 在C#中使用代理的方式触发事件 (委托和事件 ) (转)

    From:  http://www.cnblogs.com/gzhnan/articles/1859477.html 在C#中使用代理的方式触发事件 (委托和事件 ) 事件(event)是一个非常重要 ...

  10. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

最新文章

  1. 工程路径网站图片路径的问题 绝对路径
  2. 磁盘修复工具TestDisk
  3. System.currentTimeMills()显示系统当前时间
  4. eclipe安装中文语言包 CDT Pydev
  5. C语言ASM汇编内嵌语法zz
  6. Python 数据分析三剑客之 Matplotlib(五):散点图的绘制
  7. Dubbo Metrics 发布新版本 2.0.1 | Dubbo 的度量统计基础设施
  8. 实现UniqueAttribute唯一性约束-优化版
  9. shell脚本启动语法错误syntax error near unexpected token '{
  10. github竟然挂掉?那么多顶级牛人……
  11. SCI 论文缩写使用心得
  12. 把谷歌主题背景图片保存下来
  13. 史上最全的前端资源汇总(上)
  14. 显卡a卡和n卡的区别
  15. Java中的try-catch-finally
  16. Java校招基础知识总结(横扫BAT,就业经验交流会演讲稿)
  17. MATLAB——Harris角点检测
  18. 2019 Multi-University Training Contest 7 部分补题
  19. 张小飞的Java之路——第三章
  20. 三方支付公司有哪些?

热门文章

  1. getchar 使用
  2. linux进入桌面后CPU狂转,笔记本风扇狂转+CPU调节问题
  3. CSS篇十六——盒子模型之边框
  4. Gocator三维传感器环境配置结合VS2015 (Gocator自带网页软件使用介绍)
  5. 用 emacs 浏览 C/C++ 项目
  6. QQ游戏-大家来找茬 外挂
  7. 《python网络爬虫和信息提取》:全球电影票房排行榜(附更改后的代码)
  8. 可汗学院公开课——统计学学习:47-61
  9. BZOJ2794 [Poi2012]Cloakroom [离线][DP]
  10. 生活照无处不在的细节决定着你的命运