@@ -2,6 +2,24 @@ using PointNeighbors
22using TrixiParticles
33using 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
@@ -37,6 +55,7 @@ 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' ))
@@ -45,11 +64,10 @@ function benchmark_wcsph(neighborhood_search, coordinates;
4564
4665 # Initialize the system
4766 TrixiParticles. initialize! (system, nhs)
48- # Note that the third argument is supposed to be the semidiscretization, but it is only
49- # used for `@threaded`, so we can just pass `v` instead.
50- TrixiParticles. compute_pressure! (system, v, v)
67+ TrixiParticles. compute_pressure! (system, v, semi)
5168
52- return @belapsed TrixiParticles. interact! ($ dv, $ v, $ u, $ v, $ u, $ nhs, $ system, $ system)
69+ return @belapsed TrixiParticles. interact! ($ dv, $ v, $ u, $ v, $ u, $ nhs,
70+ $ system, $ system, $ semi)
5371end
5472
5573"""
@@ -88,6 +106,7 @@ function benchmark_wcsph_fp32(neighborhood_search, coordinates_;
88106
89107 system = PointNeighbors. Adapt. adapt (parallelization_backend, fluid_system)
90108 nhs = PointNeighbors. Adapt. adapt (parallelization_backend, neighborhood_search)
109+ semi = DummySemidiscretization (nhs, parallelization_backend)
91110
92111 v = PointNeighbors. Adapt. adapt (parallelization_backend,
93112 vcat (fluid. velocity, fluid. density' ))
@@ -96,7 +115,7 @@ function benchmark_wcsph_fp32(neighborhood_search, coordinates_;
96115
97116 # Initialize the system
98117 TrixiParticles. initialize! (system, nhs)
99- TrixiParticles. compute_pressure! (system, v)
118+ TrixiParticles. compute_pressure! (system, v, semi )
100119
101120 return @belapsed TrixiParticles. interact! ($ dv, $ v, $ u, $ v, $ u, $ nhs, $ system, $ system)
102121end
@@ -123,6 +142,7 @@ function benchmark_tlsph(neighborhood_search, coordinates;
123142
124143 solid_system = TotalLagrangianSPHSystem (solid, smoothing_kernel, smoothing_length,
125144 material. E, material. nu)
145+ semi = DummySemidiscretization (neighborhood_search, parallelization_backend)
126146
127147 v = copy (solid. velocity)
128148 u = copy (solid. coordinates)
@@ -132,5 +152,5 @@ function benchmark_tlsph(neighborhood_search, coordinates;
132152 TrixiParticles. initialize! (solid_system, neighborhood_search)
133153
134154 return @belapsed TrixiParticles. interact! ($ dv, $ v, $ u, $ v, $ u, $ neighborhood_search,
135- $ solid_system, $ solid_system)
155+ $ solid_system, $ solid_system, $ semi )
136156end
0 commit comments