首页/文章/ 详情

OpenFOAM-12解读|01 概述

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
4小时前浏览3

了解OpenFOAM的道友都知道,OpenFOAM的文档写的是真的太过于简洁,以至于想要通过文档了解OpenFOAM变得非常困难。好在当前AI技术先进,从全局代码出发,对整个代码架构进行解读及总结变成了可能。

本系列文档利用AI对OpenFOAM 12的github仓库代码进行全局扫描并总结,希望对于OpenFOAM的学习能够提供一些帮助。

注意,文档内容为AI自动生成,虽然经过了简单的人工审核,但内容中依然可能会存在一些错误,请仔细甄别。添加原创标记仅为方便创建合集。


OpenFOAM(Open-source Field Operation And Manipulation)是一个用于开发定制数值求解器和前后处理工具的C++工具箱,主要用于求解连续介质力学问题,最常见的是计算流体力学(CFD)。本文档介绍了OpenFOAM-12、其架构以及主要组件之间的关系。

1 OpenFOAM是什么?

OpenFOAM以一系列协同工作的库组成,用于构建可执行应用程序。这些应用程序分为两大类:

  1. Solvers:专门求解连续介质力学领域特定问题的应用程序
  2. Utilities:执行前处理、后处理以及支持仿真流程其他任务的辅助程序

该框架具备高度可扩展性,支持用户通过复用现有组件或开发新模块,创建定制化的求解器和工具程序。

2 核心架构

OpenFOAM的核心由几个关键系统构成:

  1. 时间管理系统foam::Time):控制模拟的时间维度,触发函数对象,并作为顶级对象注册表。它负责时间步进、按指定间隔输出数据,以及确定模拟的开始和结束时间。

  2. 有限体积网格系统fvMesh):将离散化的域表示为单元、面和点的集 合。它处理网格拓扑、几何结构及连接性,并通过网格缝合器处理非共形接口。

  3. 字典系统dictionary):提供一种分层配置机制,贯穿于OpenFOAM中。工具如foamDictionary可用于操作这些字典。

  4. 物理场系统GeometricField):存储并管理与网格元素相关的物理变量(如速度、压力、温度等)。

  5. 函数对象系统functionObjectList):提供框架,用于在模拟过程中执行操作,如计算派生量、输出特定数据或修改模拟状态。

3 环境及配置

OPENFOAM的环境配置通过以下方式实现:

  1. 环境设置脚本etc/bashrcetc/cshrc):设置环境变量、路径以及OPENFOAM的默认配置。

  2. 案例结构:每个OPENFOAM模拟都组织为一个案例目录,包含以下内容:

    • system/:包含控制模拟参数的字典(如controlDict)、离散格式(如fvSchemes)以及求解器设置(如fvSolution)。
    • constant/:包含物理属性和网格定义。
    • Time目录:存储不同模拟时间点的场数据。
  3. Control字典controlDict):位于system/目录中,是模拟的主要配置文件,定义时间步长、写入间隔以及要执行的函数对象等参数。

4 仿真及数据流

OPENFOAM的模拟流程通常遵循以下步骤:

  1. 前处理

    • 使用工具如blockMeshsnappyHexMesh生成网格
    • 指定边界条件
    • 定义物理属性
  2. 模拟设置

    • 使用decomposePar进行并行计算时的计算域分解
    • 在字典中配置模拟参数
  3. 求解器执行

    • Time类控制时间步进
    • 使用有限体积离散进行矩阵组装和求解
    • 按指定间隔执行函数对象
  4. 后处理

    • 使用reconstructPar进行域重建(针对并行计算)
    • 使用paraFoam(ParaView的封装)进行可视化
    • 使用postProcess和其他工具进行数据分析

5 网格和场表示

OpenFOAM 通过以下方式表示计算域及其相关数据:

  1. 网格表示

    • polyMesh:基础网格类,提供拓扑信息(单元、面、点)。
    • fvMesh:有限体积网格类,扩展了 polyMesh,为有限体积离散化提供额外功能。
    • 边界网格和Patch,表示具有不同条件的域边界。
  2. 场表示

    • volField:单元中心场(例如压力、温度)。
    • surfaceField:面中心场(例如通量)。
    • pointField:点中心场。
    • GeometricField:模板类,用于表示与网格实体相关的场。
    • 根据数据存储位置的不同,场类型包括:
  3. 边界条件

    • 通过专门的patch场(fvPatchField 的派生类)应用。
    • 提供多种类型:固定值、固定梯度、混合等。

6 字典系统

字典系统提供了一种用于整个OpenFOAM的分层键值配置机制。

字典系统的关键要素:

  1. 字典类

    • dictionary:用于存储层次化键值对的基类
    • IOdictionary:为字典添加输入输出功能
    • controlIOdictionary:专为控制字典设计
  2. 条目

    • entry:字典条目的基类
    • primitiveEntry:用于简单值(如数字、字符串等)
    • dictionaryEntry:用于嵌套字典
  3. 特殊功能

    • 用于高级功能的函数条目(如#include#calc
    • 使用正则表达式模式匹配进行键查找
    • 通过foamDictionary工具进行操作

7 功能对象系统

功能对象提供了在模拟过程中执行操作的框架:

  1. 核心类
    • functionObject:定义接口的抽象基类
    • functionObjectList:管理所有活动功能对象的容器
    • timeControl:控制功能对象何时执行
  2. 与时间系统的集成
    • 功能对象由 Time 类在时间步进期间触发
    • 它们可以在模拟开始、每个时间步进期间或模拟结束时执行
  3. 典型的功能对象
    • 力和力矩计算
    • 场平均值和操作
    • 数据采样和导出
    • 运行时可视化和后处理

8 总结

OpenFOAM-12为计算流体动力学及其他连续介质力学问题提供了一个全面的框架。其面向对象的架构允许灵活定制与扩展,而核心组件为创建、求解及分析复杂物理模拟奠定了坚实基础。该框架的主要优势包括:

  1. 稳健的网格表示系统,支持复杂几何结构
  2. 灵活的场操作,用于表示物理量
  3. 针对多种物理现象的广泛求解器能力
  4. 强大的字典系统,便于配置
  5. 对并行计算的强力支持
  6. 通过功能对象系统实现可扩展架构

这些特性的结合,使OpenFOAM-12成为适用于标准CFD应用及需要定制求解器与工具的专门模拟的强大工具。


(未完待续)



来源:CFD之道
SystemOpenFOAM控制ParaView
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-05-10
最近编辑:4小时前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2612粉丝 11842文章 809课程 27
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈