ITADN
CliMA/Oceananigans.jl
CliMA/Oceananigans.jl · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Oceananigans.jl

🌊 快速且友好的海洋风味 Julia 软件,用于在 CPU 和 GPU 上的笛卡尔和球壳域中模拟不可压缩流体动力学。https://clima.github.io/OceananigansDocumentation/stable

GitHub tag (latest SemVer pre-release) MIT license Ask us anything ColPrac: Contributor's Guide on Collaborative Practices for Community Packages JOSS

Stable documentation Development documentation Downloads per month Downloads per month

Performance dashboard

Oceananigans 是一个快速、友好且灵活的软件包,用于在 CPU 和 GPU 上对非静力 和静力 Boussinesq 方程进行有限体积模拟。 它可以在 GPU 上运行(哇,快!),尽管我们认为 Oceananigans 凭借其超灵活的用户界面掀起了最大的浪潮, 该界面使简单的模拟变得容易,并使复杂、创造性的模拟成为可能。 Oceananigans 的开发由社区驱动,贡献者来自学术界和工业界 - 查看 工作讨论 了解开发者和用户的机会! 测试基础设施由 atdepth气候建模联盟 提供。

目录

安装说明

Oceananigans 是一个 已注册的 Julia 包。因此,要安装它,

  1. 下载 Julia(版本 1.10 或更高版本)。

  2. 启动 Julia 并输入

julia> using Pkg

julia> Pkg.add("Oceananigans")

这将安装与当前环境_兼容_的最新版本。 别忘了小心 🏄 并检查你安装的 Oceananigans 版本:

julia> Pkg.status("Oceananigans")

运行你的第一个模型

让我们使用 128² 个有限体积单元,运行一个二维、水平周期性的湍流模拟,持续 4 个无量纲时间单位:

using Oceananigans
grid = RectilinearGrid(CPU(), size=(128, 128), x=(0, 2π), y=(0, 2π), topology=(Periodic, Periodic, Flat))
model = NonhydrostaticModel(grid; advection=WENO())
ϵ(x, y) = 2rand() - 1
set!(model, u=ϵ, v=ϵ)
simulation = Simulation(model; Δt=0.01, stop_time=4)
run!(simulation)

但还有更多:加载 CUDA.jl(通过 using CUDA)并将 CPU() 更改为 GPU() 可使此代码在支持 CUDA 的 Nvidia GPU 上运行。

深入了解 文档 以获取更多代码示例和教程。 下方,您将找到来自 GPU 模拟的电影,以及 CPU 和 GPU 的 性能基准测试

Oceananigans 知识库

它_很深_,包括:

  • 文档 提供
    • 示例 Oceananigans 脚本,
    • 描述关键 Oceananigans 对象和函数的教程,
    • Oceananigans 基于有限体积的数值方法的解释,
    • Oceananigans 模型求解的动力学方程的细节,以及
    • 记录所有面向用户的 Oceananigans 对象和函数的库。
  • Oceananigans github 上的讨论,涵盖诸如
    • "计算科学",即如何在 Oceananigans 中进行科学计算和设置数值模拟,以及
    • "实验性功能",涵盖那些喜欢冒险的人的新功能和文档稀疏的功能。

如果你有任何问题或任何想聊的内容,请随时发起新的讨论

引用及传播信息

如果你将 Oceananigans 用于研究、教学或娱乐 🤩,我们社区的每个人都会感激你 通过提及 Oceananigans 的名称来给予署名。

社区已发表多篇描述 Oceananigans 开发的文章, 包括最近提交给 Journal of Advances in Modeling Earth Systems 的预印本,该预印本概述了使 Oceananigans 独具特色的所有内容:

“使用 Oceananigans 在所有尺度上进行高层级、高分辨率海洋建模”

作者:Gregory L. Wagner, Simone Silvestri, Navid C. Constantinou, Ali Ramadhan, Jean-Michel Campin, Chris Hill, Tomas Chor, Jago Strong-Wright, Xin Kai Lee, Francis Poulin, Andre Souza, Keaton J. Burns, Siddhartha Bishnu, John Marshall, and Raffaele Ferrari

已提交至 Journal of Advances in Modeling Earth Systems,arXiv:2502.14148

bibtex
@article{Oceananigans-overview-paper-2025,
  title = {{High-level, high-resolution ocean modeling at all scales with Oceananigans}},
  author = {G. L. Wagner and S. Silvestri and N. C. Constantinou and A. Ramadhan and J.-M. Campin and C. Hill and T. Chor and J. Strong-Wright and X. K. Lee and F. Poulin and A. Souza and K. J. Burns and S. Bishnu and J. Marshall and R. Ferrari},
  journal = {arXiv preprint},
  year = {2025},
  archivePrefix = {arXiv},
  eprint = {2502.14148},
  doi = {10.48550/arXiv.2502.14148},
  notes = {submitted to the Journal of Advances in Modeling Earth Systems},
}

如果您在已发表的工作中使用了 Oceananigans,请引用上方 👆 这篇综述论文。

我们还发表/提交了几篇模型开发论文。如果您使用了它们所描述的功能,请引用以下 👇 这些论文。此外,如果您在 Oceananigans 中开发了新功能并在论文中进行了描述,请务必提交一个 pull request 将其添加到本列表中:

本文介绍了 CATKEVerticalDiffusivity() 的开发过程,包括如何将其自动校准到 一套 35 个大涡模拟(同样使用 Oceananigans 运行)。此外,它还包含了来自 TKEDissipationVerticalDiffusivity(也称为 "k-epsilon")的解。

我们还维护着一个 使用 Oceananigans.jl 的出版物列表。 如果您有使用 Oceananigans 的工作并希望将其列入其中,请提交一个 pull request 来添加,或告知我们!

贡献

如果您有兴趣为 Oceananigans 的开发做出贡献,无论您的贡献大小,我们都期待您的帮助! 因为我们都在一起。

如果您想开发一个新功能,或者如果您是开源新手并希望众包一些符合您兴趣的精彩项目,您应该 立即发起讨论

更多信息请查看我们的 贡献者指南

视频

深对流

Watch deep convection in action

自由对流

Watch free convection in action

海上的风

Watch winds blowing over the ocean

自由对流与风应力

Watch free convection with wind stress in action

性能基准测试

我们通过初始化不同规模、采用不同方案与参数化的模型,并测量每次模型迭代(或时间步)所消耗的墙钟时间,来持续测量 Oceananigans 的性能。这些基准测试在 main 分支的每次提交时运行,并在我们的性能仪表板上跟踪。

要充分利用或完全饱和 Nvidia Tesla V100 或 Titan V 等 GPU 的计算能力,模型的网格点数应达到约 1000 万或更多。

有时反直觉地,使用 Float32 运行比使用 Float64 更慢。这很可能是由于类型不匹配导致性能下降,因为浮点数需要在 32 位和 64 位之间进行转换, 这是一个需要仔细处理的问题。由于内存访问和 GPU 寄存器压力等其他瓶颈,Float32 模型可能不会带来太多加速,因此主要优势变为 更低的内存成本(大约降低 2 倍)。

Performance benchmark plots