Open Sustainable Technology

A curated list of open technology projects to sustain a stable climate, energy supply, biodiversity and natural resources.

Browse accepted projects | Review proposed projects | Propose new project | Open Issues

Oceananigans.jl

Fast and friendly fluid dynamics on CPUs and GPUs.
https://github.com/clima/oceananigans.jl

climate climate-change data-assimilation fluid-dynamics gpu julia machine-learning ocean

Last synced: about 21 hours ago
JSON representation

Repository metadata

๐ŸŒŠ Julia software for fast, friendly, flexible, ocean-flavored fluid dynamics on CPUs and GPUs

README

        


Oceananigans.jl


๐ŸŒŠ Fast and friendly ocean-flavored Julia software for simulating incompressible fluid dynamics in Cartesian and spherical shell domains on CPUs and GPUs. https://clima.github.io/OceananigansDocumentation/stable



Repo status


MIT license


Ask us anything


ColPrac: Contributor's Guide on Collaborative Practices for Community Packages


JOSS



GitHub tag (latest SemVer pre-release)


Stable documentation


Development documentation



Buildkite CPU+GPU build status


Docker build status

Oceananigans is a fast, friendly, flexible software package for finite volume simulations of the nonhydrostatic
and hydrostatic Boussinesq equations on CPUs and GPUs.
It runs on GPUs (wow, [fast!](http://arxiv.org/abs/2309.06662)), though we believe Oceananigans makes the biggest waves
with its ultra-flexible user interface that makes simple simulations easy, and complex, creative simulations possible.

Oceananigans.jl is developed by the [Climate Modeling Alliance](https://clima.caltech.edu) and heroic external collaborators.

## Contents

* [Installation instructions](#installation-instructions)
* [Running your first model](#running-your-first-model)
* [The Oceananigans knowledge base](#the-oceananigans-knowledge-base)
* [Citing](#citing)
* [Contributing](#contributing)
* [Movies](#movies)
* [Performance benchmarks](#performance-benchmarks)

## Installation instructions

Oceananigans is a [registered Julia package](https://julialang.org/packages/). So to install it,

1. [Download Julia](https://julialang.org/downloads/) (version 1.9 or later).

2. Launch Julia and type

```julia
julia> using Pkg

julia> Pkg.add("Oceananigans")
```

This installs the latest version that's _compatible with your current environment_.
Don't forget to *be careful* ๐Ÿ„ and check which Oceananigans you installed:

```julia
julia> Pkg.status("Oceananigans")
```

## Running your first model

Let's run a two-dimensional, horizontally-periodic simulation of turbulence using 128ยฒ finite volume cells for 4 non-dimensional time units:

```julia
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)
```

But there's more: changing `CPU()` to `GPU()` makes this code on a CUDA-enabled Nvidia GPU.

Dive into [the documentation](https://clima.github.io/OceananigansDocumentation/stable/) for more code examples and tutorials.
Below, you'll find movies from GPU simulations along with CPU and GPU [performance benchmarks](https://github.com/clima/Oceananigans.jl#performance-benchmarks).

## The Oceananigans knowledge base

It's _deep_ and includes:

* [Documentation](https://clima.github.io/OceananigansDocumentation/stable) that provides
* example Oceananigans scripts,
* tutorials that describe key Oceananigans objects and functions,
* explanations of Oceananigans finite-volume-based numerical methods,
* details of the dynamical equations solved by Oceananigans models, and
* a library documenting all user-facing Oceananigans objects and functions.
* [Discussions on the Oceananigans github](https://github.com/CliMA/Oceananigans.jl/discussions), covering topics like
* ["Computational science"](https://github.com/CliMA/Oceananigans.jl/discussions/categories/computational-science), or how to science and set up numerical simulations in Oceananigans, and
* ["Experimental features"](https://github.com/CliMA/Oceananigans.jl/discussions?discussions_q=experimental+features), which covers new and sparsely-documented features for those who like to live dangerously.

If you've got a question or something, anything! to talk about, don't hesitate to [start a new discussion](https://github.com/CliMA/Oceananigans.jl/discussions/new?).
* The [Oceananigans wiki](https://github.com/CliMA/Oceananigans.jl/wiki) contains practical tips for [getting started with Julia](https://github.com/CliMA/Oceananigans.jl/wiki/Installation-and-getting-started-with-Oceananigans), [accessing and using GPUs](https://github.com/CliMA/Oceananigans.jl/wiki/Accessing-GPUs-and-using-Oceananigans-on-GPUs), and [productive workflows when using Oceananigans](https://github.com/CliMA/Oceananigans.jl/wiki/Productive-Oceananigans-workflows-and-Julia-environments).
* The `#oceananigans` channel on the [Julia Slack](https://julialang.org/slack/), which accesses "institutional knowledge" stored in the minds of the amazing Oceananigans community.
* [Issues](https://github.com/CliMA/Oceananigans.jl/issues) and [pull requests](https://github.com/CliMA/Oceananigans.jl/pulls) also contain lots of information about problems we've found, solutions we're trying to implement, and dreams we're dreaming to make tomorrow better ๐ŸŒˆ.

## Citing

If you use Oceananigans.jl as part of your research, teaching, or other activities, we would be grateful if you could cite our work and mention Oceananigans.jl by name.

```bibtex
@article{OceananigansJOSS,
doi = {10.21105/joss.02018},
url = {https://doi.org/10.21105/joss.02018},
year = {2020},
publisher = {The Open Journal},
volume = {5},
number = {53},
pages = {2018},
author = {Ali Ramadhan and Gregory LeClaire Wagner and Chris Hill and Jean-Michel Campin and Valentin Churavy and Tim Besard and Andre Souza and Alan Edelman and Raffaele Ferrari and John Marshall},
title = {{Oceananigans.jl: Fast and friendly geophysical fluid dynamics on GPUs}},
journal = {Journal of Open Source Software}
}
```

We also maintain a [list of publications using Oceananigans.jl](https://clima.github.io/OceananigansDocumentation/stable/#Papers-and-preprints-using-Oceananigans). If you have work using Oceananigans.jl that you would like to have listed there, please open a pull request to add it or let us know!

## Contributing

If you're interested in contributing to the development of Oceananigans we want your help no matter how big or small a contribution you make!
Cause we're all in this together.

If you'd like to work on a new feature, or if you're new to open source and want to crowd-source neat projects that fit your interests, you should [start a discussion](https://github.com/CliMA/Oceananigans.jl/discussions/new?) right away.

For more information check out our [contributor's guide](https://clima.github.io/OceananigansDocumentation/stable/contributing/).

## Movies

### [Deep convection](https://www.youtube.com/watch?v=kpUrxnKKMjI)

[![Watch deep convection in action](https://raw.githubusercontent.com/ali-ramadhan/ali-ramadhan.Github.io/master/img/surface_temp_3d_00130_halfsize.png)](https://www.youtube.com/watch?v=kpUrxnKKMjI)

### [Free convection](https://www.youtube.com/watch?v=yq4op9h3xcU)

[![Watch free convection in action](https://raw.githubusercontent.com/ali-ramadhan/ali-ramadhan.Github.io/master/img/free_convection_0956.png)](https://www.youtube.com/watch?v=yq4op9h3xcU)

### [Winds blowing over the ocean](https://www.youtube.com/watch?v=IRncfbvuiy8)

[![Watch winds blowing over the ocean](https://raw.githubusercontent.com/ali-ramadhan/ali-ramadhan.Github.io/master/img/wind_stress_0400.png)](https://www.youtube.com/watch?v=IRncfbvuiy8)

### [Free convection with wind stress](https://www.youtube.com/watch?v=ob6OMQgPfI4)

[![Watch free convection with wind stress in action](https://raw.githubusercontent.com/ali-ramadhan/ali-ramadhan.Github.io/master/img/wind_stress_unstable_7500.png)](https://www.youtube.com/watch?v=ob6OMQgPfI4)

## Performance benchmarks

We've performed some preliminary performance benchmarks (see the [performance benchmarks](https://clima.github.io/OceananigansDocumentation/stable/appendix/benchmarks/) section of the documentation) by initializing models of various sizes and measuring the wall clock time taken per model iteration (or time step).

This is not really a fair comparison as we haven't parallelized across all the CPU's cores so we will revisit these benchmarks once Oceananigans.jl can run on multiple CPUs and GPUs.

To make full use of or fully saturate the computing power of a GPU such as an Nvidia Tesla V100 or
a Titan V, the model should have around ~10 million grid points or more.

Sometimes counter-intuitively running with `Float32` is slower than `Float64`. This is likely due
to type mismatches causing slowdowns as floats have to be converted between 32-bit and 64-bit, an
issue that needs to be addressed meticulously. Due to other bottlenecks such as memory accesses and
GPU register pressure, `Float32` models may not provide much of a speedup so the main benefit becomes
lower memory costs (by around a factor of 2).

![Performance benchmark plots](https://user-images.githubusercontent.com/20099589/89906791-d2c85b00-dbb9-11ea-969a-4b8db2c31680.png)

Citation (CITATION.cff)

cff-version: 1.2.0
preferred-citation:
  type: article
  authors:
  - family-names: "Ramadhan"
    given-names: "Ali"
    orcid: "https://orcid.org/0000-0003-1102-1520"
  - family-names: "Wagner"
    given-names: "Gregory LeClaire"
    orcid: "https://orcid.org/0000-0001-5317-2445"
  - family-names: "Hill"
    given-names: "Chris"
  - family-names: "Jean-Michel"
    given-names: "Campin"
  - family-names: "Churavy"
    given-names: "Valentin"
    orcid: "https://orcid.org/0000-0002-9033-165X"
  - family-names: "Souza"
    given-names: "Andre"
  - family-names: "Edelman"
    given-names: "Adam"
    orcid: "https://orcid.org/0000-0002-9033-165X"
  - family-names: "Ferrari"
    given-names: "Raffaele"
    orcid: "https://orcid.org/0000-0003-1895-4294"
  - family-names: "Marshall"
    given-names: "John"
  title: "Oceananigans.jl: Fast and friendly geophysical fluid dynamics on GPUs"
  journal: "Journal of Open Source Software"
  doi: "10.21105/joss.02018"
  volume: 5
  issue: 53
  start: 2018
  year: 2020

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 2 days ago

Total Commits: 10,508
Total Committers: 68
Avg Commits per committer: 154.529
Development Distribution Score (DDS): 0.669

Commits in past year: 211
Committers in past year: 22
Avg Commits per committer in past year: 9.591
Development Distribution Score (DDS) in past year: 0.592

Name Email Commits
ali-ramadhan a****n@g****m 3475
Gregory Wagner w****g@g****m 2299
Simone Silvestri s****0@g****m 1718
Navid C. Constantinou n****y 1685
tomchor t****r@g****m 582
francispoulin f****n@u****a 267
Elise Palethorpe e****y@g****m 78
sandreza a****a@g****m 73
suyashbire1 s****9@g****m 45
hennyg888 h****2@h****m 38
Victoria Whitley w****v@a****t 37
christophernhill c****h@m****u 29
Jago Strong-Wright j****w@p****m 26
github-actions[bot] 4****] 19
Jean-Michel Campin j****c@m****u 13
Valentin Churavy v****y@g****m 13
CompatHelper Julia c****y@j****g 10
Simone Silvestri s****i@d****u 9
Josef Bisits j****s@g****m 6
iury simoes-sousa i****t@p****e 5
Alex Cavaliere a****e@s****m 5
Keaton J. Burns k****s@g****m 4
Tim Besard t****d@g****m 4
Kamontat Chantrachirathumrong g****b@k****t 4
Markus E m****t@m****e 3
Mohan Sha m****n@g****m 3
Simone Silvestri s****t@M****U 3
Simone Silvestri s****i@S****l 3
Josuรฉ Martรญnez Moreno j****o@g****m 2
William Moses g****h@w****m 2
and 38 more...

Committer domains:


Issue and Pull Request metadata

Last synced: 2 days ago

Total issues: 1,416
Total pull requests: 1,979
Average time to close issues: 6 months
Average time to close pull requests: 18 days
Total issue authors: 89
Total pull request authors: 63
Average comments per issue: 4.99
Average comments per pull request: 4.42
Merged pull request: 1,609
Bot issues: 0
Bot pull requests: 78

Past year issues: 160
Past year pull requests: 302
Past year average time to close issues: about 1 month
Past year average time to close pull requests: 13 days
Past year issue authors: 29
Past year pull request authors: 27
Past year average comments per issue: 5.34
Past year average comments per pull request: 5.26
Past year merged pull request: 206
Past year bot issues: 0
Past year bot pull requests: 9

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/clima/oceananigans.jl

Top Issue Authors

  • ali-ramadhan (409)
  • glwagner (387)
  • navidcy (206)
  • tomchor (125)
  • francispoulin (69)
  • simone-silvestri (28)
  • jagoosw (15)
  • iuryt (13)
  • mukund-gupta (8)
  • suyashbire1 (8)
  • Sumanshekhar17 (8)
  • sandreza (7)
  • xkykai (6)
  • christophernhill (5)
  • raphaelouillon (5)

Top Pull Request Authors

  • glwagner (555)
  • navidcy (423)
  • ali-ramadhan (414)
  • simone-silvestri (140)
  • tomchor (125)
  • github-actions[bot] (77)
  • francispoulin (51)
  • jagoosw (29)
  • christophernhill (16)
  • siddharthabishnu (14)
  • iuryt (9)
  • suyashbire1 (8)
  • sandreza (8)
  • vchuravy (7)
  • elise-palethorpe (6)

Top Issue Labels

  • bug ๐Ÿž (200)
  • documentation ๐Ÿ“œ (171)
  • cleanup ๐Ÿงน (148)
  • question ๐Ÿ’ญ (133)
  • feature ๐ŸŒŸ (132)
  • user interface/experience ๐Ÿ’ป (129)
  • abstractions ๐ŸŽจ (115)
  • testing ๐Ÿงช (99)
  • numerics ๐Ÿงฎ (91)
  • performance ๐Ÿ๏ธ (86)
  • GPU ๐Ÿ‘พ (80)
  • science ๐ŸŒŠ (60)
  • output ๐Ÿ’พ (54)
  • package ๐Ÿ“ฆ (43)
  • help wanted ๐Ÿฆฎ (39)
  • good first issue ๐Ÿค (39)
  • grids ๐Ÿ—บ๏ธ (34)
  • distributed ๐Ÿ•ธ๏ธ (22)
  • immersed boundaries โ›ฐ๏ธ (19)
  • ๐Ÿšจ high priority ๐Ÿšจ (18)
  • turbulence closures ๐ŸŽ (15)
  • cubed sphere ๐ŸงŠ๐ŸŒŽ (13)
  • boundary conditions ๐Ÿ“ (12)
  • models ๐Ÿงซ (10)
  • duplicate ๐Ÿงฌ (9)
  • simulation ๐ŸŽฎ (7)
  • ๐Ÿšฒ bikeshedding (3)
  • multithreading ๐Ÿงต (2)
  • biogeochemistry ๐Ÿฆ  (1)
  • parameterizations (1)

Top Pull Request Labels

  • documentation ๐Ÿ“œ (233)
  • bug ๐Ÿž (128)
  • package ๐Ÿ“ฆ (98)
  • cleanup ๐Ÿงน (88)
  • testing ๐Ÿงช (86)
  • numerics ๐Ÿงฎ (78)
  • feature ๐ŸŒŸ (78)
  • user interface/experience ๐Ÿ’ป (63)
  • GPU ๐Ÿ‘พ (61)
  • science ๐ŸŒŠ (49)
  • performance ๐Ÿ๏ธ (49)
  • grids ๐Ÿ—บ๏ธ (33)
  • ๐Ÿšจ DO NOT MERGE ๐Ÿšจ (32)
  • abstractions ๐ŸŽจ (28)
  • turbulence closures ๐ŸŽ (28)
  • output ๐Ÿ’พ (26)
  • immersed boundaries โ›ฐ๏ธ (25)
  • distributed ๐Ÿ•ธ๏ธ (21)
  • cubed sphere ๐ŸงŠ๐ŸŒŽ (20)
  • boundary conditions ๐Ÿ“ (12)
  • validation scripts ๐Ÿ’…๐Ÿผ (6)
  • extensions ๐Ÿงฌ (6)
  • models ๐Ÿงซ (6)
  • biogeochemistry ๐Ÿฆ  (4)
  • ๐Ÿšฒ bikeshedding (4)
  • ๐Ÿšจ high priority ๐Ÿšจ (3)
  • help wanted ๐Ÿฆฎ (3)
  • simulation ๐ŸŽฎ (3)
  • good first issue ๐Ÿค (3)
  • experimental feature ๐Ÿงช (2)

Package metadata

juliahub.com: Oceananigans

๐ŸŒŠ Julia software for fast, friendly, flexible, ocean-flavored fluid dynamics on CPUs and GPUs

  • Homepage: https://clima.github.io/OceananigansDocumentation/stable
  • Documentation: https://docs.juliahub.com/Oceananigans/hU93i/
  • Licenses: MIT
  • Latest release: 0.91.0 (published 5 days ago)
  • Last Synced: 2024-05-10T09:04:34.648Z (2 days ago)
  • Versions: 235
  • Dependent Packages: 4
  • Dependent Repositories: 0
  • Rankings:
    • Stargazers count: 0.386%
    • Forks count: 0.421%
    • Average: 5.957%
    • Dependent repos count: 6.056%
    • Dependent packages count: 16.965%

Dependencies

.github/workflows/CompatHelper.yml actions
  • julia-actions/setup-julia v1 composite
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
Dockerfile docker
  • julia 1.9.3 build

Score: 12.593292313296988