Skip to content

Releases: WaterLily-jl/WaterLily.jl

v1.2.0

22 Jul 16:29
d23ac35
Compare
Choose a tag to compare

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

19 Jun 17:19
1882eae
Compare
Choose a tag to compare

WaterLily v1.1.0

Diff since v1.0.4

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:

Closed issues:

  • Taylor Vortex file (#115)
  • Write VTK size/shape of field in writer (#116)
  • Can WaterLily.jl be used for 2D hydrodynamic modeling of real watersheds, similar to lisflood-fp, mike21, and anuga? (#124)
  • Simulating a tank for VIV (#128)

v1.0.4

29 Mar 21:33
Compare
Choose a tag to compare

WaterLily v1.0.4

Diff since v1.0.3

WaterLily 1.0.4

New Simulation Features (in order of addition):

  1. Added VTK write/read #79
  2. Periodic Boundary conditions #83
  3. Time varying body force #87
  4. Time varying boundary conditions #108

Internal updates:

  1. Super-charged benchmark suite #90
  2. Correct residuals within pressure solver #91
  3. Pressure V-cycle clean up #97
  4. Add extensions feature from Julia 1.9 #98
  5. Fix n-body stack overflow #95

And lots of other small important fixes and documentation additions!

Merged pull requests:

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

14 Oct 13:46
45cc63b
Compare
Choose a tag to compare

WaterLily v1.0.3

Diff since v1.0.2

Merged pull requests:

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

15 Jun 21:33
d6c58b1
Compare
Choose a tag to compare

WaterLily v1.0.2

Diff since v1.0.1

Merged pull requests:

v1.0.1: Merge pull request #61 from weymouth/weymouth-patch-1

10 Jun 14:32
34fe5e3
Compare
Choose a tag to compare

v1.0.0

26 Apr 11:10
34a09df
Compare
Choose a tag to compare

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 or LinearAlgebra: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 like AutoBody(sdf, map) functions.
  • PERFORMANCE NOTE: KA allocates to the CPU on every loop. Reverting @loop to use @simd restores a perfectly non-allocating sim_step!. We tried other tools like Polyester.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), and U must now be an NTuple.
  • The Simulation constructor also take a new mem=Array argument which can be set to CUDA.CuArray or AMDGPU.ROCArray to set-up simulations on GPUs. The Flow and Poisson structs now use AbstractArrays 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 the L, x, and z fields with Flow to reduce the memory footprint. The z field holds the RHS vector and is mutated by solve!.
  • The SOR! and GS! smoothers are not thread-safe, and have been replaced with a Jacobi preconditioned conjugate-gradient smoother held in new routines Jacobi! and pcg!.
  • 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 with measure_sdf! which simply @loops body.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.

Diff since v0.2.4

Closed issues:

  • Use KernelAbstractions for loops? (#18)
  • Diverging pressure for rotational motion (#36)

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

28 Feb 18:22
29463c9
Compare
Choose a tag to compare

WaterLily v0.2.4

Diff since v0.2.3

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

07 Aug 11:36
db1f737
Compare
Choose a tag to compare

WaterLily v0.2.3

Diff since v0.2.2

Closed issues:

  • TagBot trigger issue (#19)

v0.2.2: Version 0.2.2

01 Aug 18:08
Compare
Choose a tag to compare

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.