经验大分享: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?

相关文章
|
27天前
|
机器学习/深度学习 存储 人工智能
阿里云CPU云服务器gn6v、gn7i、gn6i实例最新租用收费标准与2026最新活动价格参考
阿里云GPU云服务器以其在深度学习、科学计算等领域的卓越性能,成为企业和开发者的首选。本文解析了gn6v、gn7i、gn6i三大实例规格族的核心性能参数与差异化特性。gn6v搭载NVIDIA V100 GPU,适合深度学习训练;gn7i采用NVIDIA A10 GPU,适合AI推理与图形渲染;gn6i则以NVIDIA T4 GPU为核心,提供高性价比的异构计算能力。此外,阿里云还提供了包年包月与按量付费两种模式,结合最新优惠活动,为用户提供灵活且经济的选择。
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
Pyside6-第七篇-QLineEdit文本行编辑(内设案例)
1773 0
|
7月前
|
安全 生物认证 数据安全/隐私保护
微信加人频繁怎么快速解除???
微信加人频繁限制的技术分析与解决方案 1. 微信加人限制机制解析
|
11月前
|
索引
如何理解openfoam案例里面的blockMesh文件里面的simpleGrading
在OpenFOAM的blockMesh文件中,`simpleGrading`参数用于控制网格的非均匀分布,通过调整x、y、z方向的拉伸系数,可以精确地控制网格的密集和稀疏程度。这对于模拟中需要高精度的区域提供了灵活性。在实际应用中,合理设置 `simpleGrading`参数,可以优化计算资源,提高模拟精度。
484 20
|
机器学习/深度学习 分布式计算 并行计算
【MATLAB】史上最全的13种数据拟合算法全家桶
【MATLAB】史上最全的13种数据拟合算法全家桶
2560 1
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
传感器 机器学习/深度学习 人工智能
再见吧云台!AI“魔法”让视频稳定起来
再见吧云台!AI“魔法”让视频稳定起来
|
文字识别 小程序 安全
印刷文字识别操作报错合集之微信小程序调用API时路径总是返回不对,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
安全 JavaScript Shell
vite中环境变量的使用与配置,非常实用详细!
【8月更文挑战第2天】vite中如何使用环境变量?根据当前的代码环境产生值的变化的变量就叫做环境变量。本文将详细介绍vite中如何使用环境变量
1922 1
|
机器学习/深度学习 人工智能 数据可视化
号称能打败MLP的KAN到底行不行?数学核心原理全面解析
Kolmogorov-Arnold Networks (KANs) 是一种新型神经网络架构,挑战了多层感知器(mlp)的基础,通过在权重而非节点上使用可学习的激活函数(如b样条),提高了准确性和可解释性。KANs利用Kolmogorov-Arnold表示定理,将复杂函数分解为简单函数的组合,简化了神经网络的近似过程。与mlp相比,KAN在参数量较少的情况下能达到类似或更好的性能,并能直观地可视化,增强了模型的可解释性。尽管仍需更多研究验证其优势,KAN为深度学习领域带来了新的思路。
6627 5