Skip to content

Commit 6840c22

Browse files
authored
Use new major release of TrixiParticles.jl (#104)
* Use new major release of TrixiParticles.jl * Fix smoothing length of rescaled Wendland kernels * Apply new breaking changes of TrixiParticles * Fix tests * Fix tests
1 parent 8e68904 commit 6840c22

File tree

3 files changed

+44
-17
lines changed

3 files changed

+44
-17
lines changed

benchmarks/smoothed_particle_hydrodynamics.jl

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@ using PointNeighbors
22
using TrixiParticles
33
using BenchmarkTools
44

5+
# Create a dummy semidiscretization type to be able to use a specific neighborhood search
6+
struct DummySemidiscretization{N, P}
7+
neighborhood_search :: N
8+
parallelization_backend :: P
9+
end
10+
11+
@inline function PointNeighbors.parallel_foreach(f, iterator, semi::DummySemidiscretization)
12+
PointNeighbors.parallel_foreach(f, iterator, semi.parallelization_backend)
13+
end
14+
15+
@inline function TrixiParticles.get_neighborhood_search(_, _, semi::DummySemidiscretization)
16+
return semi.neighborhood_search
17+
end
18+
19+
@inline function TrixiParticles.get_neighborhood_search(_, semi::DummySemidiscretization)
20+
return semi.neighborhood_search
21+
end
22+
523
"""
624
benchmark_wcsph(neighborhood_search, coordinates; parallel = true)
725
@@ -14,8 +32,8 @@ function benchmark_wcsph(neighborhood_search, coordinates;
1432
density = 1000.0
1533
fluid = InitialCondition(; coordinates, density, mass = 0.1)
1634

17-
# Compact support == smoothing length for the Wendland kernel
18-
smoothing_length = PointNeighbors.search_radius(neighborhood_search)
35+
# Compact support == 2 * smoothing length for these kernels
36+
smoothing_length = PointNeighbors.search_radius(neighborhood_search) / 2
1937
if ndims(neighborhood_search) == 1
2038
smoothing_kernel = SchoenbergCubicSplineKernel{1}()
2139
else
@@ -37,17 +55,18 @@ function benchmark_wcsph(neighborhood_search, coordinates;
3755

3856
system = PointNeighbors.Adapt.adapt(parallelization_backend, fluid_system)
3957
nhs = PointNeighbors.Adapt.adapt(parallelization_backend, neighborhood_search)
58+
semi = DummySemidiscretization(nhs, parallelization_backend)
4059

4160
v = PointNeighbors.Adapt.adapt(parallelization_backend,
4261
vcat(fluid.velocity, fluid.density'))
4362
u = PointNeighbors.Adapt.adapt(parallelization_backend, coordinates)
4463
dv = zero(v)
4564

4665
# Initialize the system
47-
TrixiParticles.initialize!(system, nhs)
48-
TrixiParticles.compute_pressure!(system, v)
66+
TrixiParticles.initialize!(system, semi)
67+
TrixiParticles.compute_pressure!(system, v, semi)
4968

50-
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u, $nhs, $system, $system)
69+
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u, $system, $system, $semi)
5170
end
5271

5372
"""
@@ -61,8 +80,9 @@ function benchmark_wcsph_fp32(neighborhood_search, coordinates_;
6180
density = 1000.0f0
6281
fluid = InitialCondition(; coordinates, density, mass = 0.1f0)
6382

64-
# Compact support == smoothing length for the Wendland kernel
65-
smoothing_length = convert(Float32, PointNeighbors.search_radius(neighborhood_search))
83+
# Compact support == 2 * smoothing length for these kernels
84+
smoothing_length = convert(Float32,
85+
PointNeighbors.search_radius(neighborhood_search) / 2)
6686
if ndims(neighborhood_search) == 1
6787
smoothing_kernel = SchoenbergCubicSplineKernel{1}()
6888
else
@@ -80,22 +100,24 @@ function benchmark_wcsph_fp32(neighborhood_search, coordinates_;
80100
fluid_system = WeaklyCompressibleSPHSystem(fluid, fluid_density_calculator,
81101
state_equation, smoothing_kernel,
82102
smoothing_length, viscosity = viscosity,
83-
acceleration = (0.0f0, 0.0f0, 0.0f0),
103+
acceleration = ntuple(_ -> 0.0f0,
104+
Val(ndims(neighborhood_search))),
84105
density_diffusion = density_diffusion)
85106

86107
system = PointNeighbors.Adapt.adapt(parallelization_backend, fluid_system)
87108
nhs = PointNeighbors.Adapt.adapt(parallelization_backend, neighborhood_search)
109+
semi = DummySemidiscretization(nhs, parallelization_backend)
88110

89111
v = PointNeighbors.Adapt.adapt(parallelization_backend,
90112
vcat(fluid.velocity, fluid.density'))
91113
u = PointNeighbors.Adapt.adapt(parallelization_backend, coordinates)
92114
dv = zero(v)
93115

94116
# Initialize the system
95-
TrixiParticles.initialize!(system, nhs)
96-
TrixiParticles.compute_pressure!(system, v)
117+
TrixiParticles.initialize!(system, semi)
118+
TrixiParticles.compute_pressure!(system, v, semi)
97119

98-
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u, $nhs, $system, $system)
120+
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u, $system, $system, $semi)
99121
end
100122

101123
"""
@@ -110,8 +132,8 @@ function benchmark_tlsph(neighborhood_search, coordinates;
110132
material = (density = 1000.0, E = 1.4e6, nu = 0.4)
111133
solid = InitialCondition(; coordinates, density = material.density, mass = 0.1)
112134

113-
# Compact support == smoothing length for the Wendland kernel
114-
smoothing_length = PointNeighbors.search_radius(neighborhood_search)
135+
# Compact support == 2 * smoothing length for these kernels
136+
smoothing_length = PointNeighbors.search_radius(neighborhood_search) / 2
115137
if ndims(neighborhood_search) == 1
116138
smoothing_kernel = SchoenbergCubicSplineKernel{1}()
117139
else
@@ -120,14 +142,15 @@ function benchmark_tlsph(neighborhood_search, coordinates;
120142

121143
solid_system = TotalLagrangianSPHSystem(solid, smoothing_kernel, smoothing_length,
122144
material.E, material.nu)
145+
semi = DummySemidiscretization(neighborhood_search, parallelization_backend)
123146

124147
v = copy(solid.velocity)
125148
u = copy(solid.coordinates)
126149
dv = zero(v)
127150

128151
# Initialize the system
129-
TrixiParticles.initialize!(solid_system, neighborhood_search)
152+
TrixiParticles.initialize!(solid_system, semi)
130153

131-
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u, $neighborhood_search,
132-
$solid_system, $solid_system)
154+
return @belapsed TrixiParticles.interact!($dv, $v, $u, $v, $u,
155+
$solid_system, $solid_system, $semi)
133156
end

test/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ TrixiParticles = "66699cd8-9c01-4e9d-a059-b96c86d16b3a"
99
BenchmarkTools = "1"
1010
Plots = "1"
1111
Test = "1"
12-
TrixiParticles = "0.2"
12+
TrixiParticles = "0.3"

test/benchmarks.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
@test_nowarn_mod plot_benchmarks(benchmark_wcsph, size, 2)
1919
end
2020

21+
@testset verbose=true "`benchmark_wcsph_fp32`" begin
22+
@test_nowarn_mod plot_benchmarks(benchmark_wcsph_fp32, size, 2)
23+
end
24+
2125
@testset verbose=true "`benchmark_tlsph`" begin
2226
@test_nowarn_mod plot_benchmarks(benchmark_tlsph, size, 2)
2327
end

0 commit comments

Comments
 (0)