Releases: WaterLily-jl/WaterLily.jl
v1.2.0
What's Changed
- Added time(::Flow) and fixed shift function float types by @b-fg in #131
- Viscous force and memory allocation by @marinlauber in #113
- Fixed links to point to organisation url by @b-fg in #139
- Fixing compatibilities for GPU packages by @b-fg in #146
- Make Simulation mutable and loc(T=Float32) by @weymouth in #149
Full Changelog: v1.1.0...v1.2.0
v1.1.0
WaterLily v1.1.0
WaterLily 1.1
Lots of new features were added in https://github.com/weymouth/WaterLily.jl/releases/tag/v1.0.4, see those release notes. Also:
Updated docs #122
Benchmark cleanup #127
A thorough code clean-up #129:
- ForwardDiff is now working on the CPU, but still not on GPU.
- Greatly reduced allocations in
mom_step!
, especially in the new single-threaded version of@loop
, with new tests to keep allocated memory to a minimum. - Fancy BCs (periodic, time-varying, etc) are faster and have zero overhead cost when not used in a simulation.
Merged pull requests:
- add interp routine (#121) (@marinlauber)
- Display README in the Documentation (#122) (@navidcy)
- Add CI for julia v1.10 (#123) (@navidcy)
- Fix the issue when calculating λ₂ by using Hermitian matrix (#125) (@TzuYaoHuang)
- benchmark.sh working with/without juliaup (#127) (@b-fg)
- WaterLily + AutoDiff workflow (#129) (@weymouth)
Closed issues:
v1.0.4
WaterLily v1.0.4
WaterLily 1.0.4
New Simulation Features (in order of addition):
- Added VTK write/read #79
- Periodic Boundary conditions #83
- Time varying body force #87
- Time varying boundary conditions #108
Internal updates:
- Super-charged benchmark suite #90
- Correct residuals within pressure solver #91
- Pressure V-cycle clean up #97
- Add extensions feature from Julia 1.9 #98
- Fix n-body stack overflow #95
And lots of other small important fixes and documentation additions!
Merged pull requests:
- add vtkWriter to WaterLily (#79) (@marinlauber)
- added 2D cylinder VIV example (#80) (@marinlauber)
- Implement periodic boundary conditions (#83) (@marinlauber)
- bug fix (#85) (@weymouth)
- General benchmarking framework (#86) (@b-fg)
- Feature: time varying body force (#87) (@TzuYaoHuang)
- Benchmarks hotfix (#89) (@b-fg)
- Fixed benchmark default to run on release channel of juliaup. (#90) (@b-fg)
- Fix residuals within pressure solver (#91) (@weymouth)
- New jelly benchmark (#92) (@b-fg)
- measure body at timeNext instead of time (#94) (@weymouth)
- Fix n-bodies stack-overflow error with new type Bodies (#95) (@b-fg)
- change V-cycle tolerance criterion (#97) (@marinlauber)
- Add extensions feature from Julia 1.9 with backward compatibility (#98) (@b-fg)
- Remove useless dependencies from Project.toml (#100) (@giordano)
- Make it possible to run the benchmarks outside of their directory (#101) (@giordano)
- Description of 2d oscillating flow example (#105) (@TzuYaoHuang)
- Update vtk writer and add utilities (#106) (@marinlauber)
- Adjusts velocity boundary conditions for accelerated flows (#108) (@marinlauber)
- Small fixes in benchmark and sim_step! (#114) (@b-fg)
- update README with solver upgrades (#117) (@marinlauber)
- Cleaned up Bodies docs and reduce_sdf_map function (#118) (@b-fg)
- Update to 1.0.4 (#119) (@weymouth)
Closed issues:
- Adjusting for Surface Mesh (#32)
- Prescribing boundary conditions (#54)
- Jellyfish example: contour not exported by GLMakie (#71)
- How to use separate map functions for different bodies? (#84)
- Repeated AutoBody additions cause StackOverflow (#88)
- MultiLevelPoisson solver tolerance not independent of domain size (#96)
- Cannot run the benchmarks:
ERROR: Case arguments are arrays of different sizes.
(#99) - Issue when saving large number of file (#102)
- Vtk writer, writing always to vtk_data folder (#103)
- Test fail on MacOS in testing enviroment (#104)
- Courant number (CFL) (#109)
- Circle example not working (#112)
v1.0.3
WaterLily v1.0.3
Merged pull requests:
- Fix some docstring rendering (#63) (@navidcy)
- Use Documenter v0.27 (#64) (@navidcy)
- Update Flow.jl (#65) (@weymouth)
- Update mult (#66) (@weymouth)
- Quick/CD on boundaries (#72) (@marinlauber)
- Rescale source term (#73) (@weymouth)
- Convective exit (#74) (@marinlauber)
- Update AutoBody.jl (#77) (@weymouth)
- Update Project.toml (#78) (@weymouth)
Closed issues:
- Add support for objects specified by NURBS? (#53)
- Heaving Cylinder in still water (#67)
- Error on running the example in Youtube video. (#68)
- StackOverflowError (#69)
- 3D simulations for several shape: flow u is NaN or 0 (#70)
- Fluid Structure Interaction (#75)
- Modeling flow over a full 3D normal facing disk (#76)
v1.0.2
v1.0.1: Merge pull request #61 from weymouth/weymouth-patch-1
v1.0.0
WaterLily v1.0.0
Upgraded the solver for backend agnostic execution:
- New version of
@loop
macro which integrates KernelAbstractions.jl (KA) to run multi-threaded on CPUs and GPUs. This replaces the@simd
version of@loop
as well as previous multi-threading code. Each@loop <expr> over <I in R>
is expanded into a@kernel function
and then run on the backend of the first variable in<expr>
. - BREAKING CHANGE: Many high-level functions don't compile or run correctly or run much slower than expected on GPUs. Things as simple as
sum
orLinearAlgebra:norm2
. These have been replaced in the code-base with lower-level functions, but unfortunately, users will need to take extra care when defining things likeAutoBody(sdf, map)
functions. - PERFORMANCE NOTE: KA allocates to the CPU on every loop. Reverting
@loop
to use@simd
restores a perfectly non-allocatingsim_step!
. We tried other tools likePolyester.jl
which had better multi-threading performance for small simulations, but large simulations is where we need the speed-up and so we chose KA. - PERFORMANCE NOTE:
@loop
is not fully optimized. For example, there is an execution overhead for each@loop
call on GPUs. A few of the loops have been combined to help reduce this overhead, but many more would require major refactoring or modification of the@loop
macro. Despite this we benchmarked up to 182x speed-up with GPU execution. - BREAKING CHANGE: The
Simulation
constructor arguments have changed.dims
is now the internal field dimension(L,2L)
not(L+2,2L+2)
, andU
must now be anNTuple
. - The
Simulation
constructor also take a newmem=Array
argument which can be set toCUDA.CuArray
orAMDGPU.ROCArray
to set-up simulations on GPUs. TheFlow
andPoisson
structs now useAbstractArrays
for all fields to accommodate those arrays types. - DEFAULT CHANGE:
sim_step!(remeasure=true)
is now the default as that is the safer (but slower) option. Poission
now shares memory for theL
,x
, andz
fields withFlow
to reduce the memory footprint. Thez
field holds the RHS vector and is mutated bysolve!
.- The
SOR!
andGS!
smoothers are not thread-safe, and have been replaced with a Jacobi preconditioned conjugate-gradient smoother held in new routinesJacobi!
andpcg!
. - PERFORMANCE NOTE: Because of the poor-scaling on small fields, the number of multi-grid levels has been set to a default
maxlevels=4
. The optimal number of levels is likely to be simulation and backend dependent. - PERFORMANCE NOTE:
pcg!
requires a lot of inner products, which are somewhat slow. Switching to the data-driven approximate inverse smoother may be beneficial in the future. - Because of the poor-scaling on small fields, the multi-grid-style recursive
apply_sdf!
has been replaced withmeasure_sdf!
which simply@loop
sbody.sdf()
.
There have also many changes to the code outside of src
to support the upgrade:
- The testing cases have been massively expanded. In particular, there are tests for every major function on CPU, CUDA, and AMDGPU backends.
- The benchmarks have been massively expanded. In particular, benchmarks for each function within
mom_step!
as well as the 3D TGV and donut cases can be compared against previous commits, including pre 1.0 versions. - The examples have been brought up-to-date, including GPU execution for the 3D examples and a new jelly fish example demonstrating a deforming geometry.
The only (intentional) modelling change was to add correct_div!(σ)
to Body.jl
to enable the deformable jelly fish example. This has nothing to do with the backend upgrade and should have been added to master and then merged in - but it wasn't.
Closed issues:
Merged pull requests:
- add function addBody (#35) (@Blagneaux)
- Update for new Makie (#37) (@asinghvi17)
- Boundary conditions kernel and dependencies (#38) (@b-fg)
- Flow.jl MWE (#39) (@b-fg)
- Moved creation of boundary conditions array out of Flow (#40) (@b-fg)
- Cleaned up CUDAEnv/Flow.jl and fixed allowscalar in tests. Fixed BCs too. (#41) (@b-fg)
- Started porting Flow.jl using KernelAbstractions.jl [WIP] (#43) (@b-fg)
- Changed from cu to CuArray the way to create arrays in GPU memory. (#45) (@b-fg)
- Added CUDAEnv/benchmark.jl where it breaks down mom_step. (#46) (@b-fg)
- mom_step benchmark (#47) (@b-fg)
- Added AMDGPU package (#48) (@b-fg)
- Update to 1.0 (#49) (@weymouth)
v0.2.4
WaterLily v0.2.4
Closed issues:
- Plotting gif of examples seems broken (#15)
- Docs are pointing to wrong/old repo URL (#20)
- Docs "source" buttons do not go to source code for relevant function (#22)
- Pluto_test.jl (#24)
- examples ThreeD_Plots.jl (#27)
- Saving each time step flow field values (#30)
- circle position (#31)
Merged pull requests:
- Fix: Update repo URL in docs to
https://github.com/weymouth/WaterLily.jl
(#21) (@kimlaberinto) - Fix "link to source" buttons in docs by removing
repo
from makedocs (#23) (@kimlaberinto) - Package requirements in Pluto_test.jl (#25) (@J-Massey)
- CPU parallel WaterLily.jl (#28) (@J-Leetch)
v0.2.3
v0.2.2: Version 0.2.2
Optimized loops for Julia 1.6 and got rid of allocations for moving geometries. WaterLily 0.2.2 is around twice as fast for Julia 1.6 than version 0.2.0 for statics goemetries and around 4 x faster for moving geometries.