经验大分享:OpenFOAM中的边界条件(一)

简介: 经验大分享:OpenFOAM中的边界条件(一)

博客园:硫酸亚铜

原文链接:

本系列解读 OpenFOAM 中边界条件的实现。主要关心一些几个问题:

OpenFOAM 中边界条件是怎样与有限体积离散部分交互的?

怎么从代码看懂一个边界条件具体是怎么计算边界上的值的?

怎么定制一个边界条件?

本篇先阐述第一个问题。

从有限体积离散的角度来看,离散过程中,可能要用到的边界信息包括两类:一是某个场在边界上的值,另一是某个场在边界上的梯度。前者在对流项的离散中需要用到,举例说

当组成体积元的面中有边界面时,需要用到这些边界面上的值 ?f。

而在扩散项的离散过程中

这时,如果组成体积元的某个面是边界面,就需要该边界面上 ?的梯度值 ??f 了。

边界上的某个场值,或者梯度值,其计算方法可以用如下通式表示

这里,?C表示?在邻近边界的网格中心的值,A1 ,B1,A2,B2是系数。

OpenFOAM 中的边界条件类中,有四个函数分别对应上面四个系数:valueInternalCoeffs 对应A1,valueBoundaryCoeffs 对应 B1,gradientInternalCoeffs对应 A2,gradientBoundaryCoeffs对应B2。

所以,看懂 OpenFOAM 中的边界条件,很关键的一步就是看懂这四个函数的定义。

此外,还有一个函数,updateCoeffs, 也很重要。这个函数负责对边界条件进行显式地更新。浏览一下 OpenFOAM 边界条件的代码,会发现很多边界条件都是在 updateCoeffs 这个函数中进行边界值的计算的。

另外,还有些边界条件,似乎是在 evaluate 函数中进行边界值的指定的。

至于边界条件是在什么地方调用的,cfd-online 上有一个帖子,Hrvoje Jasak 对这个问题的回答是:

"

Easy:

- on correctBoundaryConditions() for a field

- on updateCoeffs() at matrix creation

correctBoundaryConditions is also called after the linear solver call automatically.

"

其他网友还提供了一些有价值的信息,比如,在 correctBoundaryConditions 函数中,

template

void Foam::GeometricField::

correctBoundaryConditions()

{

this->setUpToDate();

storeOldTimes();

boundaryField_.evaluate();

}

调用了 evaluate 函数。

为什么有些边界条件用 updateCoeffs(),而有些则用 evaluate() 呢?目前的理解是这样的: updateCoeffs() 主要用来显式地计算并更新变量在边界上的值,当边界上的值是通过某个依赖于外部参数的公式来计算,并且值会随着迭代的进行而不断改变时,则需要用 updateCoeffs()。有些边界条件,比如最基本的 //代码效果参考:http://www.zidongmutanji.com/zsjx/194807.html

zeroGradient(),不需要外部的参数,只需要每一次将临近网格的值赋给边界就可以了,这时就可以用 evaluate()。

关于边界条件调用的具体过程,需要在看了 fvMatrix 类以后才能更深入地理解,博主目前只能给出一个粗浅的理解。

参考资料:

The Finite Volume Method in Computational Fluid Dynamics: An Advanced Introduction with OpenFOAM? and Matlab?

相关文章
|
Linux C语言
make:***没有指明目标并且找不到makefile。停止。
make:***没有指明目标并且找不到makefile。停止。
1589 0
|
7月前
|
存储 弹性计算 人工智能
算力性能提升20%!阿里云第九代ECS g9i企业级实例全球邀测
算力性能提升20%!阿里云第九代ECS g9i企业级实例全球邀测
275 0
|
11月前
|
编译器 C++
#include<> 与#include ""的区别
在C++中,`#include &lt;&gt;` 和 `#include &quot;&quot;` 都用于包含头文件,但使用场景不同。`#include &lt;&gt;` 用于包含系统标准库头文件,编译器会在标准库路径中查找;而 `#include &quot;&quot;` 用于包含用户自定义的头文件,编译器会优先在当前项目目录中查找。
|
11月前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
578 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
10月前
|
存储 缓存 人工智能
【AI系统】GPU 工作原理
本文详细解析了AI计算体系中的GPU工作原理,重点介绍了GPU与CPU在架构上的差异,强调了GPU在并行计算方面的优势。文章通过$AX+Y$的例子,展示了GPU如何通过并行和并发提高计算效率,并深入探讨了GPU的缓存机制及线程原理,解释了GPU如何通过大量线程和Warp来掩盖延迟问题,实现高效计算。
475 0
|
11月前
|
编译器 C++
【C++】模板进阶:深入解析模板特化
【C++】模板进阶:深入解析模板特化
302 0
|
安全 文件存储 iOS开发
告别痕迹:远程桌面连接历史和凭据的清零指南
【8月更文挑战第18天】使用远程桌面后,为保障安全隐私,需清除连接历史及凭据。在Windows中,可通过注册表编辑器删除HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default下的MRU键值来清除历史记录;macOS下则需移步至“~/Library/Application Support/Apple/Remote Desktop”删除“Clients.plist”。清除凭据方面,Windows用户应访问“控制面板”中的“凭据管理器”删除相应条目;macOS用户需利用“钥匙串访问”应用找出并移除相关条目。
3198 3
|
传感器 机器学习/深度学习 自动驾驶
【多模态融合】CRN 多视角相机与Radar融合 实现3D检测、目标跟踪、BEV分割 ICCV2023
本文介绍使用雷达与多视角相机融合,实现3D目标检测、3D目标跟踪、道路环境BEV分割,它是来自ICCV2023的。CRN,全称是Camera Radar Net,是一个多视角相机-雷达融合框架。 通过融合多视角相机和雷达的特性,生成语义丰富且空间精确的BEV特征图。实现3D物体检测、跟踪和BEV分割任务。
1478 57
|
文字识别 小程序 安全
印刷文字识别操作报错合集之微信小程序调用API时路径总是返回不对,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。