Releases: CliMA/Oceananigans.jl
🍞 Oceananigans v0.42.0
Oceananigans v0.42.0
Added support for time averaging to NetCDFOutputWriter
and revamped how field slicing is done.
Breaking changes:
NetCDFOutputWriter
constructor: Thefilename
keyword argument is nowfilepath
.NetCDFOutputWriter
constructor: To specify slices, pass aFieldSlicer(i, j, k; with_halos)
instead of using thexC
,xF
,yC
,yF
,zC
, andzF
keyword arguments.
Closed issues:
Computation
has result at wrong location (#876)- Split up TEST_GROUP=model? (#1048)
- Initializing environment on Buildkite can be a testing bottleneck (#1056)
Merged pull requests:
- Time averaging and
FieldSlicer
forNetCDFOutputWriter
(#1040) (@ali-ramadhan) - Split-explicit Buildkite (#1064) (@ali-ramadhan)
- Fix
pipeline.yml
(#1066) (@ali-ramadhan) - Bump v0.42.0 (#1067) (@ali-ramadhan)
🎑 Oceananigans v0.41.0
Oceananigans v0.41.0
Oceananigans.jl fully supports Julia 1.5 now!
Major changes:
- Support for setting background fields. See background fields section of the model setup docs for more details and examples.
- Shiny new Eady turbulence example that involves setting background fields.
- A few bug fixes.
Closed issues:
- Obscure GPU error when time stepping a model with Julia 1.5 and Oceananigans v0.33.0 (#828)
- Background tracer distributions and advecting velocity fields (#960)
FieldSlicer
does not convert to parent indices for integer indices (#1028)- Run on GPU without network access (#1035)
- Stop testing on GitLab CI (#1049)
Merged pull requests:
- Attempting to get Oceananigans to work on GPUs with Julia 1.5 (#997) (@ali-ramadhan)
- Prescribed background velocity and tracer fields (#1014) (@glwagner)
- Use allowscalar when converting output (#1025) (@glwagner)
- Proper FieldSlicer indices (#1029) (@glwagner)
- Better Buildkite CI pipeline (#1031) (@ali-ramadhan)
- Bump v0.41.0 (#1032) (@ali-ramadhan)
- Teach Oceananigans about plural nouns (#1033) (@ali-ramadhan)
- Run Buildkite cleanup step on Tartarus (#1038) (@ali-ramadhan)
- Update JLD2 to v0.2.4 (#1039) (@ali-ramadhan)
- Updates buildkite pipeline (#1047) (@glwagner)
- Stop testing on GitLab CI (#1054) (@ali-ramadhan)
- Reduce the size of the eady_turbulence.jl script test (#1058) (@glwagner)
- Update README badges (#1060) (@ali-ramadhan)
- Update compat entries (#1065) (@ali-ramadhan)
🪔 Oceananigans v0.40.0
Oceananigans v0.40.0
- Support for
Flat
dimensions. See the grid section of the model setup documentation for more details and examples. - New advection schemes:
UpwindBiasedThirdOrder
andUpwindBiasedFifthOrder
. - Grid halos are automatically adjusted on model construction depending on advection scheme and turbulence closure used.
- Improved two-dimensional turbulence example.
- Fixed Langmuir turbulence example.
- Numerous bug fixes.
Closed issues:
- Only perform operations as needed depending on model dimension. (#35)
Float32
tracer conservation test not actuallyFloat32
(#487)- Utilities for calculating buoyancy and density offline (#516)
- Floating point equality checking in 2D Leith (#535)
- Model not enforcing zero vertical shear at top and bottom (do we expect this?) (#540)
- Deepening mixed layer verification experiment (#547)
NetCDFOutputWriter
output does not include global attributes (#576)- Incompressibility and pressure projection step test (#673)
- ERROR: LoadError: UndefVarError: SolutionBoundaryConditions not defined (#686)
- Cubic lattice grid with missing nodes (#743)
- An example with stable mixed layer depth? (#749)
- questions relating to Oceananigans.jl (#770)
- Possible bug in checkpointing? (#778)
- test Oceananigans returns CUDA error depsite being able to run examples on CPU and GPU (#788)
- Is any way to simulate the hydrodynamic behaviour of a bioreactor with Oceananigans.jl? (#830)
- Test failing on GPU (#882)
- Eliding differences, interpolation, and
fill_halo_regions
forFlat
dimensions (#902) - Stop simulation when output is NaN (#938)
- Model immediately turns to
NaN
after 1 time step when grid length is zero alongFlat
dimensions (#940) - Model constructor should check that halos are big enough for chosen advection scheme and turbulence closure (#941)
- Bug(s) somewhere in
UpwindBiasedThirdOrder
left-biased interpolation functions (#986) - Requiring Lz and Nz for two-dimensional grids is a bit counterintuitive (#1001)
- Langmuir example broken (#1004)
- Passing a
Clock
torestore_from_checkpoint
gets overwritten by clock from checkpoint file (#1008) - Cannot use
Forcing
s withfield_dependencies
on GPU with Oceananigans v0.39.0 (#1010)
Merged pull requests:
- Fixes bug in UpwindBiasedThirdOrder advection scheme (#993) (@glwagner)
- Adds naive (non-WENO) fifth order advection scheme (#994) (@glwagner)
- Better two-dimensional turbulence Docs example (#1000) (@navidcy)
- More support for
Flat
dimensions (#1003) (@glwagner) - Update langmuir_turbulence.jl (#1005) (@glwagner)
- Add Buildkite CI pipeline (#1006) (@ali-ramadhan)
- Fix bug in
restore_from_checkpoint
(#1009) (@ali-ramadhan) - Adjust halos according to advection scheme and turbulence closure (#1012) (@glwagner)
- Adds adapt_structure for ContinuousForcing (#1016) (@glwagner)
- Add Dev in Docs versions menu (#1017) (@navidcy)
- Build and test but do not deploy docs on Buildkite (#1018) (@ali-ramadhan)
- Fixes tests with AveragedField and BuoyancyField (#1020) (@glwagner)
- Bump v0.40.0 (#1021) (@ali-ramadhan)
🥊 Oceananigans v0.39.0
Oceananigans v0.39.0
- Overhauled interface for forcing functions. Instead of calling
ModelForcing
to set up model forcing functions, you should pass a named tuple ofForcing
objects to the model constructor.- See the model setup documentation on forcings for examples.
- See the
Forcing
docstring for more details.
Closed issues:
- getindex and setindex! much slower than just accessing array contents directly. (#13)
- Can we inline source term calculation to save memory? (#98)
- Unified forcing function interface (#896)
- fourth-order advection tested? (#925)
- Not sure why Oceananigans instantly kills a constant velocity field in a box (#951)
- Flatten
state
in boundary condition functions and forcing functions to single tuple? (#985) - Remove SymPy dependency in next release of Oceananigans (#990)
MethodError
whenusing Oceananigans
with Julia 1.5 and OffsetArrays v1.3.0 (#991)
Merged pull requests:
- New forcing function interface, defaults, and functionality (#989) (@glwagner)
- Update new_data.jl (#992) (@glwagner)
- Remove SymPy dependency for now (#996) (@ali-ramadhan)
- Bump v0.39.0 (#998) (@ali-ramadhan)
⚖️ Oceananigans v0.38.0
Oceananigans v0.38.0
- New experimental WENO-5 advection scheme for momentum and tracers. Use by passing
advection=WENO5()
when creating a model. See #592 for convergence tests, comparisons, and benchmarks. - Very experimental automatically generated
WENO{N}
advection schemes. - New framework for high-order advection schemes abstracting centered and upwind schemes.
- Lid-driven cavity verification experiment against data by Ghia et al. (1982). See the docs for movies.
- New lazily-computed
PressureField
. - Avoiding unnecessary recomputation of fields in output evaluation.
- Bug fixes for
WindowedTimeAverage
andAveragedField
. - BREAKING: Internal functions
run_diagnostic(model, diag)
andwrite_output(model, output_writer)
are nowrun_diagnostic!(diag, model)
andwrite_output!(output_writer, model)
.
Closed issues:
- Sugary syntax for boundary conditions (#637)
- Don't require
simulation.progress
to subtypeFunction
(#642) - Checkpointing docs are stale (#660)
- Incorporate performance benchmarks into tests and CI (#684)
- Doc strings for some kernel functions are out of date (#763)
- Introduce "location" notation :u, :v, :w, :c ? (#766)
- Incomplete docstring for
SeawaterBuoyancy
? (#768) - Proper bangs (#861)
- Typo in docs, should be
Non-traditional
(#912) - Advection scheme benchmarks (#934)
- halo points behaving differently in master branch compared with 0.36.0 (#949)
- Identifier conflict warnings when
using Oceananigans
(#950) - Avoiding repeated computations in the evaluation of
AbstractOperations
(#955) - Docstring for RungeKutta3TimeStepper is incorrect (#957)
- Bug due to "initialization" of WindowedTimeAverage diagnostic (#962)
- Bugs in fourth order advection in bounded directions (#965)
- Typo in docstring for
AveragedField(op::AbstractOperation)
(#967)
Merged pull requests:
- Lid-driven cavity verification experiment (#572) (@ali-ramadhan)
- WENO advection schemes and advection verification experiments (#592) (@ali-ramadhan)
- Fixes bug in adapt_structure for ComputedField (#953) (@glwagner)
- More specific imports from KernelAbstractions in Fields module to solve identifier conflict warnings (#954) (@glwagner)
- PressureField and tests for AveragedFields and ComputedFields in operations (#956) (@glwagner)
- Fixes initialization and finalization bugs in WindowedTimeAverage (#964) (@glwagner)
- Updating Julia DOI (#966) (@arfon)
- Avoiding unnecessary recomputation of fields in output evaluation (#968) (@glwagner)
- Do not zero out halo regions in directions that arent averaged (#970) (@glwagner)
- New framework for high-order advection schemes (#972) (@glwagner)
- Add JOSS badge (#976) (@ali-ramadhan)
- Fixes timestepper docstrings and simplifies constructor (#977) (@glwagner)
- Fixes typo in docs for non-traditional beta plane and simplifies language (#978) (@glwagner)
- Docs comply with julia = "^1.4" compat entry (#979) (@navidcy)
- Adds bangs and conventionalizes signatures of run_diagnostic! and write_output! (#980) (@glwagner)
- Completes docstring for SeawaterBuoyancy constructor (#981) (@glwagner)
- Cleans up docstrings for tendency kernels (#982) (@glwagner)
- Changes default progress from nothing to an innocuous function (#983) (@glwagner)
- Moves boundary condition aliases to FieldBoundaryConditions (#984) (@glwagner)
- Bump v0.38.0 (#988) (@ali-ramadhan)
🌾 Oceananigans v0.37.0
Oceananigans v0.37.0
- More empowered
Field
abstraction:AbstractReducedField
and concreteReducedField
for representing fields that are reduced along one or more dimensions.AveragedField <: AbstractReducedField
representing a field that is averaged along one dimension.AveragedField
will replaceAverage
in the near future and can be inserted intoAbstractOperations
.ComputedField
representing fields whose data must be "computed".ComputedField
s are intended to hold the results ofAbstractOperations
. They can also participate inAbstractOperation
s.
FieldSlicer
abstraction representing a "slice" or sub-indexing operation applied to fields prior to output.- Functionality in
JLD2OutputWriter
for handling field output. This eliminates the need for theFieldOuputs
constructor.FieldSlicer
can be used withJLD2OutputWriter
. - Bugfixes and improvements to
WindowedTimeAverage
and full integration withFieldSlicer
andJLD2OutputWriter
. - Support for
closure = nothing
so that models can be run with no diffusivity or turbulence closure. - A new, as-of-now non-default third-order Runge-Kutta time-stepper, along with dynamics tests and convergence tests.
- Bugfix in the experimental fourth order advection scheme.
- Bugfix that incorrectly created
MultiaryOperation
s when they should have beenBinaryOperation
s.
Breaking changes:
FieldOutputs
no longer exists; named tuples of fields should be passed directly toJLD2OutputWriter
instead (and halos are omitted by default when using this functionality)
Closed issues:
- Explicitly time-step w instead of recomputing it from continuity? (#338)
- Forward Euler + 3rd order Runge-Kutta time-stepping (or integration with DifferentialEquations.jl) (#506)
ReducedField
type (#525)- zero_halo_regions needs to know about field and grid topology (#734)
- Need to update
ParameterizedForcing
constructor (#785) - Setting up inflow condition in bounded domain with buoyancy as tracer (#789)
- Why is
w*T
is aMultiaryOperation
? (#892) - Docstring for IncompressibleModel is incorrect (#895)
- Keyword
array_type
in JLD2OutputWriter (and perhaps NetCDFOutputWriter) (#901) - More meaningful notation for non-traditional beta plane (#918)
zero_halo_regions
is incorrect for fields located on faces in bounded directions (#919)- The values of
slices
dictionary in NetCDFOutputWriter are identical for every field (#926) - Cannot create model with
closure = nothing
(#939)
Merged pull requests:
- Stop 'recomputing w' at the end of each time step (#711) (@glwagner)
- Clean up Fields module (#914) (@glwagner)
- ReducedField (#920) (@glwagner)
- Changes definition of MultiaryOperation to a function of 3 or more fields (#922) (@glwagner)
- Updates docstring for IncompressibleModel (#923) (@glwagner)
- CompatHelper: bump compat for "KernelAbstractions" to "0.4" (#924) (@github-actions[bot])
- Functionality for output as fields with JLD2 (#927) (@glwagner)
- Starts process of modernizing WindowedTimeAverage (#928) (@glwagner)
- Fixes bug in zero_halo_regions that uses wrong indices for face-located fields in Bounded directions (#929) (@glwagner)
- AveragedField (#930) (@glwagner)
- ComputedField (#931) (@glwagner)
- Adds FieldSlicer and integrates with JLD2OutputWriter and WindowedTimeAverage (#932) (@glwagner)
- Only test Mac OSX on Travis now (#933) (@ali-ramadhan)
- Fixes interpolation error in centered fourth order tracer advection (#935) (@glwagner)
- Slims down model size for many tests (#937) (@glwagner)
- Regenerate LES regression test data (#943) (@glwagner)
- Third-order Runge-Kutta timestepper (#945) (@glwagner)
- Support closure=nothing; resolves #939 (#947) (@glwagner)
- Bump v0.37.0 (#948) (@ali-ramadhan)
- BuoyancyField (#952) (@glwagner)
🧻 Oceananigans v0.36.0
Oceananigans v0.36.0
This release coincides with the publication of the Oceananigans.jl Journal of Open Source Software (JOSS) paper.
Changelog:
- Simplified boundary condition interface, types, and constructors. See the "boundary conditions" section under "Model setup" in the documentation for updated examples.
- Support for a
NonTraditionalBetaPlane
Coriolis force implementation. - The
AnisotropicBiharmonicDiffusivity
closure now works properly in closed domains with zeroFlux
boundary conditions, as higher-order boundary conditions are enforced. - Bug fix: Appending to NetCDF files with
NetCDFOutputWriter
works now. - Bug fix: Computations of abstract operations compute the right end point of face-centered fields along bounded dimensions.
- Bug fix: Averages
with_halos=false
return results with the correct dimensions for face-centered results along bounded dimensions. - Small bug fixes for
show
methods.
Breaking changes:
- When constructing a
NetCDFOutputWriter
, usemode="c"
instead ofclobber=true
andmode="a"
instead ofclobber=false
.
Closed issues:
- More streamlined interface for boundary functions? (#769)
- Return of the multiple of 16 bug (#780)
- When printing an
AbstractOperation
, the tree should be indented for readability (and without newline separation) (#893) - Is the warning "This simulation will recalculate the time step every iteration which can be slow" correct? (#903)
- Wrong size for averages with halos of face-centered fields along bounded dimensions (#906)
- Computations do not compute the right end point faces of bounded dimensions (#908)
- Cannot append to NetCDF file even with
clobber=false
(#913) - Docs for 0.35.0 seem to be missing (#917)
Merged pull requests:
- Journal of Open Source Software paper (#564) (@ali-ramadhan)
- Output writer "diagnostic dependencies" (#886) (@glwagner)
- Convenience kwargs in
JLD2OutputWriter
constructor for averaging output (#887) (@glwagner) - Simplifies boundary condition interface, types, and constructors (#894) (@glwagner)
- Non-traditional β plane (#899) (@ali-ramadhan)
- Generalizes halo filling for flux boundary conditions (#904) (@glwagner)
- Nicer
Base.show
for abstract operations (#905) (@ali-ramadhan) - Fix size for averages with halos of face-centered fields along bounded dimensions (#907) (@ali-ramadhan)
- Update test to also catch multiple of 16 bug (#909) (@ali-ramadhan)
- Fix computation work layout for faces along bounded dimensions (#910) (@ali-ramadhan)
- Fix typo in AnisotropicBiharmonicDiffusivity docstring (#911) (@navidcy)
- Fix appending to NetCDF file (#915) (@ali-ramadhan)
- Bump v0.36.0 (JOSS release) (#916) (@ali-ramadhan)
🧵 Oceananigans v0.35.0
Oceananigans v0.35.0
- Support for multithreaded CPU simulations! Set the number of threads via the
JULIA_NUM_THREADS
environment variable or via the-t
flag in Julia 1.5+. - New
OceananigansLogger
for fancy log messages with time stamps. - New experimental diagnostic: the
WindowedTimeAverage
. Average
diagnostic can include or exclude halos via thewith_halos
keyword argument.- Improved testing infrastructure made possible by splitting tests into four groups, selectable with the
TEST_GROUP
environment variable. - Cleaned up convergence test scripts and plots. Convergence tests can now be fully run by running the tests with the
TEST_GROUP=convergence
environment variable. - Numerous bug fixes and documentation updates.
Closed issues:
- We need to upgrade our testing infrastructure soon-ish. (#139)
- Abstraction / Diagnostic for moving averages (#501)
- Failed to precompile GPUArrays, CUDA, Oceananigans on macOS (#854)
- Error when trying to diagnose
Average
of an abstract operation (#857) - Error with NetCDF output - Julia v1.5, Oceananigans v0.34.1 (#862)
scalar getindex is disallowed
withtopology = (Periodic, Bounded, Bounded)
using Oceananigans v0.34.1 (#864){x,y,z}nodes
function docstrings do not document thereshape
keyword argument (#865)- Getting GPU name in
versioninfo_with_gpu()
fails with CUDA v1.3.0 (#866) - Use
FFTW.set_num_threads
(#867) test/test_*.jl
is a redundant naming scheme (#871)- Run convergence tests as part of the verification testset (#873)
- Include all convergence test plots in documentation (#879)
total_size(grid::AbstractGrid)
seems wrong (#883)
Merged pull requests:
- Logging with crayons (#855) (@ali-ramadhan)
- WindowedTimeAverage (#856) (@glwagner)
- Clearer error in operation average constructor (#858) (@ali-ramadhan)
- Add
with_halos
option toAverage
diagnostic (#859) (@ali-ramadhan) - Update dependencies (#860) (@ali-ramadhan)
- Dont close output writers at the end of
run!
(#863) (@ali-ramadhan) - Use
FFTW.set_num_threads
if more than 1 thread is available (#868) (@ali-ramadhan) - Multithreading benchmarks (#869) (@ali-ramadhan)
- Split tests into four groups for CI job matrices (#872) (@ali-ramadhan)
- Update
Utils.versioninfo_with_gpu()
(#875) (@ali-ramadhan) - Update docstrings for
{x,y,z}nodes
functions (#877) (@ali-ramadhan) - Fix some CuArray scalar operations (#878) (@ali-ramadhan)
- Adds missing convergence plots to docs (#880) (@glwagner)
- Clean up convergence test scripts and plots (#881) (@ali-ramadhan)
- Moves total_size(loc, grid) to grid_utils.jl (#889) (@glwagner)
- Bump v0.35.0 (#891) (@ali-ramadhan)
- CompatHelper: add new compat entry for "SafeTestsets" at version "0.0.1" (#898) (@github-actions[bot])
⏳ Oceananigans v0.34.1
Oceananigans v0.34.1
This is a bugfix release that disables CuArray scalar operations by default (to avoid surprise scalar operations that can cause huge slowdowns) and fixes a related bug where writing GPU fields to NetCDF was very slow. Also includes small updates to the documentation.
Closed issues:
- Dynamically disable CuArray scalar operations (#276)
- Update performance benchmarks plot and discuss results (#607)
- Fix citations and references in documentation (#609)
- Link documentation of numerical methods with code and API (#610)
Merged pull requests:
- Small documentation improvements and fixes for JOSS (#849) (@ali-ramadhan)
- Update benchmarks for JOSS (#850) (@ali-ramadhan)
- Dynamically disable CuArray scalar operations (#851) (@ali-ramadhan)
- Bump v0.34.1 (#852) (@ali-ramadhan)
🏵️ Oceananigans v0.34.0
Oceananigans v0.34.0
This release adds some new features, fixes some bugs, and improves the API (so there are some breaking changes, listed below).
Major changes:
- Triply periodic models are now available by passing the
topology = (Periodic, Periodic, Periodic)
keyword argument to grids. - All 1D, 2D, and 3D averages are now available through the
Average
diagnostic with thedims
keyword argument. - Fixed some checkpointing bugs.
- BREAKING: Use
Average(..., dims=(1, 2))
instead ofHorizontalAverage(...)
. - BREAKING: Use
iteration_interval
andtime_interval
instead offrequency
andinterval
for diagnostics and output writers. - BREAKING: Use
iteration_interval
instead ofprogress_frequency
for simulations. - BREAKING: Use
IsotropicDiffusivity
andAnisotropicDiffusivity
instead ofConstantIsotropicDiffusivity
andConstantAnisotropicDiffusivity
. Also, useνz
instead ofνv
andκz
instead ofκv
. - BREAKING: To
restore_from_checkpoint
, pass model constructor arguments as you would to a normal constructor, e.g.restore_from_checkpoint("my_checkpoint.jld2", boundary_conditions=custom_bcs)
. Previous behavior was to pass a dictionary which was less user friendly.
Closed issues:
- Update README and fix broken links (#608)
- Clearer names for
frequency
andinterval
for diagnostics (#672) - Misleading documentation for JLD2OutputWriter (#827)
- Typo: no such thing as "tradient" (#831)
- IsotropicDiffusivity and AnisotropicDiffusivity are not exported by Oceananigans.jl (#835)
Flux
boundary condition docstring should mention the sign convention (#837)versioninfo_with_gpu
util fails on machine with CUDA but running CPU models (#840)NetCDFOutputWriter
should recast the type ofglobal_attributes
intoDict{String,Any}
(#841)
Merged pull requests:
- Zonal averages, horizontal averages, and volume averages under the same structure (#798) (@sandreza)
- Fix performance benchmarks dead link in README (#822) (@ali-ramadhan)
- Fix plot in example (#829) (@mancellin)
- fix tradient -> gradient (#832) (@navidcy)
- Fix triply periodic pressure solver and add/cleanup some tests (#834) (@ali-ramadhan)
iteration_interval
andtime_interval
(#836) (@ali-ramadhan)- Checkpointer bug fixes and improved interface (#839) (@ali-ramadhan)
- Recast
global_attributes
intoDict{Any,Any}
(#842) (@ali-ramadhan) - Explanation of
Flux
BC in docstring (#843) (@ali-ramadhan) - Export
{Isotropic, Anisotropic}Diffusivity
(#844) (@ali-ramadhan) - Nuke
Constant{Isotropic,Anisotropic}Diffusivity
in favor of{Isotropic,Anisotropic}Diffusivity
(#846) (@ali-ramadhan) - Bump v0.34.0 (#847) (@ali-ramadhan)