foamlib:与OpenFOAM交互的现代Python包最佳实践教程
项目介绍
foamlib
是一个现代的 Python 包,旨在简化与 OpenFOAM 的交互。它提供了对 OpenFOAM 配置和场文件的读写访问,就像它们是 Python 字典一样。foamlib
的独立解析器使得从 Python 中处理 OpenFOAM 的输入/输出文件变得容易,而其案例处理功能则促进了各种执行工作流程,减少了样板代码,并使基于 Python 的预和后处理以及模拟管理更加高效。
foamlib
相比于 PyFoam
和其他类似工具(如 fluidfoam
、fluidsimfoam
和 Ofpp
)提供了现代 Python 兼容性、对二进制格式场的支持、完全类型注解的 API 以及异步操作等优势,使得 OpenFOAM 工作流程更加易于访问和简化。
项目快速启动
首先,您需要安装 foamlib
。可以使用以下方式安装:
pip install foamlib
或者使用 conda
:
conda install -c conda-forge foamlib
或者使用 Homebrew
:
brew install gerlero/openfoam/foamlib
安装完成后,您可以使用以下代码快速启动一个案例:
import os
from pathlib import Path
from foamlib import FoamCase
# 假设您的 OpenFOAM 教程目录已设置在环境变量中
pitz_tutorial = FoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "incompressible/simpleFoam/pitzDaily")
# 克隆案例
my_pitz = pitz_tutorial.clone("myPitz")
# 运行案例
my_pitz.run()
# 获取结果
latest_time = my_pitz[-1]
p = latest_time["p"]
U = latest_time["U"]
print(p.internal_field)
print(U.internal_field)
# 清理案例
my_pitz.clean()
# 编辑 controlDict 文件
my_pitz.control_dict["writeInterval"] = 10
# 一次性进行多个文件读写操作
with my_pitz.fv_schemes as f:
f["gradSchemes"]["default"] = f["divSchemes"]["default"]
f["snGradSchemes"]["default"] = "uncorrected"
# 异步运行案例
import asyncio
from foamlib import AsyncFoamCase
async def run_case():
my_pitz_async = AsyncFoamCase(my_pitz)
await my_pitz_async.run()
asyncio.run(run_case())
# 使用 FoamFieldFile 类直接解析场
from foamlib import FoamFieldFile
U = FoamFieldFile(Path(my_pitz) / "0/U")
print(U.internal_field)
应用案例和最佳实践
- 使用
foamlib
进行模拟配置和执行,可以显著减少样板代码,提高开发效率。 - 通过
foamlib
的异步操作,可以在多核心或多节点环境下更有效地运行多个案例。 - 利用
foamlib
的类型注解,可以提高代码质量和可维护性。 - 使用
foamlib
的案例处理功能,可以轻松地管理和跟踪模拟案例的进度和结果。
典型生态项目
OpenFOAM
:foamlib
主要用于与 OpenFOAM 的交互,因此 OpenFOAM 是其最典型的生态项目。PyFoam
:虽然foamlib
提供了更现代的功能,但PyFoam
仍然是一个广泛使用的 Python 包,用于与 OpenFOAM 交互。fluidfoam
、fluidsimfoam
和Ofpp
:这些是其他与 OpenFOAM 交互的 Python 包,它们与foamlib
具有相似的功能,但foamlib
提供了更现代的 API 和更好的性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考