CliMA/Oceananigans.jl

🌊 Julia software for fast, friendly, flexible, ocean-flavored fluid dynamics on CPUs and GPUs

Oceananigans.jl – 在 Julia 中進行快速、靈活的海洋規模流體動力學模擬

是什麼 – Oceananigans 是一個開源的 Julia 套件,用於在笛卡兒或球殼網格上求解不可壓縮 Boussinesq 方程式(包括非靜力學與靜力學模型)。它使用有限體積離散化,並可在 CPU 以及 CUDA 啟用的 GPU 上執行,讓研究人員只需透過幾行程式碼即可原型化並執行高解析度的海洋模擬。

核心能力

  • 模型NonhydrostaticModelHydrostaticFreeSurfaceModel 以及相關變體。
  • 網格:直角座標、曲線座標與球殼網格,具有可配置的拓撲結構(週期性、平面等)。
  • 數值方法:一系列平流方案(例如 WENO、WENOVectorInvariant)、Runge-Kutta 時間步進器,以及如 CATKEVerticalDiffusivityTKEDissipationVerticalDiffusivity 等湍流閉合模型。
  • GPU 加速:在載入 CUDA.jl 後,將 CPU() 切換為 GPU() 即可在 Nvidia GPU 上執行相同的程式碼,對於大型(約 10M 個單元格)問題,可實現數量級的加速。
  • 可微分工作流:與 Enzyme.jlReactant.jl 的整合,使得模型組件的可微分性支援可用於數據同化或機器學習迴圈中的研究。
  • 效能追蹤:包含一個公開的儀表板,持續進行基準測試,記錄許多模型配置下每個時間步長的牆鐘時間。

入門指南

using Pkg; Pkg.add("Oceananigans")   # install
using Oceananigans

# a 2-D periodic turbulence test on the CPU
grid = RectilinearGrid(CPU(), size=(128,128), x=(0,2π), y=(0,2π), topology=(Periodic,Periodic,Flat))
model = NonhydrostaticModel(grid; advection=WENO())
set!(model, u = x->2rand()-1, v = x->2rand()-1)
sim = Simulation(model; Δt=0.01, stop_time=4)
run!(sim)

using CUDA 之後,將 CPU() 替換為 GPU() 即可在 GPU 上執行相同的實驗。

文件與學習資源

  • 穩定版與開發版文件:https://clima.github.io/OceananigansDocumentation/stable
  • 文件中附帶了範例腳本、教學指南與完整的 API 參考。
  • 討論、問答與社群群組建議可在 GitHub Discussions 頁面與 NumericalEarth Slack 找到。
  • Wiki 包含安裝、GPU 使用與工作流最佳實踐指南。

使用者群體 Oceananigans 被學術界與產業界群體用於研究、教學與原型氣候系統建模。文件中有一個整理好的論文引用列表,列出了使用該套件的相關研究。

引用方式 如果你發布了依賴 Oceananigans 的研究成果,請引用概述論文(Wagner et al., 2025, arXiv:2502.14148)以及與你使用的功能相關的任何特定模型開發論文(例如 Silvestri 2026 關於 Runge-Kutta,Moses 2026 關於可微分建模,等等)。

社群與貢獻

  • 在 Climate Modeling Alliance (CliMA) 框架下進行開放、社群驅動的開發。
  • 提供貢獻者指南、行為準則與 ColPrac 最佳實踐徽章。
  • 歡迎透過 pull requests 進行貢獻;關於新功能或錯誤的討論可以在 GitHub 上發起。

授權 – MIT (寬鬆且對商業用途友好)。

總結 – Oceananigans 為海洋學與流體動力學研究人員提供了一個高性能、易於使用的 Julia 環境,用於構建與執行從簡單測試案例到大規模、GPU 加速的海洋模擬。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案