Skip to content

Commit 4162c29

Browse files
committed
fix resize!(system, n)
1 parent afe2196 commit 4162c29

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

src/general/semidiscretization.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,7 @@ function Semidiscretization(systems...;
7373
# Other checks might be added here later.
7474
check_configuration(systems)
7575

76-
sizes_u = [u_nvariables(system) * n_moving_particles(system)
77-
for system in systems]
78-
ranges_u = Tuple((sum(sizes_u[1:(i - 1)]) + 1):sum(sizes_u[1:i])
79-
for i in eachindex(sizes_u))
80-
sizes_v = [v_nvariables(system) * n_moving_particles(system)
81-
for system in systems]
82-
ranges_v = Tuple((sum(sizes_v[1:(i - 1)]) + 1):sum(sizes_v[1:i])
83-
for i in eachindex(sizes_v))
76+
ranges_v, ranges_u = ranges_vu(systems)
8477

8578
# Create a tuple of n neighborhood searches for each of the n systems.
8679
# We will need one neighborhood search for each pair of systems.
@@ -92,6 +85,16 @@ function Semidiscretization(systems...;
9285
return Semidiscretization(systems, ranges_u, ranges_v, searches)
9386
end
9487

88+
function ranges_vu(systems)
89+
sizes_u = [u_nvariables(system) * n_moving_particles(system) for system in systems]
90+
ranges_u = [(sum(sizes_u[1:(i - 1)]) + 1):sum(sizes_u[1:i]) for i in eachindex(sizes_u)]
91+
92+
sizes_v = [v_nvariables(system) * n_moving_particles(system) for system in systems]
93+
ranges_v = [(sum(sizes_v[1:(i - 1)]) + 1):sum(sizes_v[1:i]) for i in eachindex(sizes_v)]
94+
95+
return ranges_v, ranges_u
96+
end
97+
9598
# Inline show function e.g. Semidiscretization(neighborhood_search=...)
9699
function Base.show(io::IO, semi::Semidiscretization)
97100
@nospecialize semi # reduce precompilation time

src/multi_resolution/resize.jl

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function resize!(semi::Semidiscretization, v_ode, u_ode, _v_ode, _u_ode)
1+
function Base.resize!(semi::Semidiscretization, v_ode, u_ode, _v_ode, _u_ode)
22
# Resize all systems
33
foreach_system(semi) do system
44
resize!(system, capacity(system))
@@ -22,15 +22,15 @@ function deleteat!(semi::Semidiscretization, v_ode, u_ode, _v_ode, _u_ode)
2222
return semi
2323
end
2424

25-
function resize!(v_ode, u_ode, _v_ode, _u_ode, semi::Semidiscretization)
25+
function Base.resize!(v_ode, u_ode, _v_ode, _u_ode, semi::Semidiscretization)
2626
copyto!(_v_ode, v_ode)
2727
copyto!(_u_ode, u_ode)
2828

2929
# Get ranges after resizing the systems
3030
ranges_v_new, ranges_u_new = ranges_vu(semi.systems)
3131

32-
ranges_v_old = semi.ranges_v
33-
ranges_u_old = semi.ranges_u
32+
ranges_v_old = copy(semi.ranges_v)
33+
ranges_u_old = copy(semi.ranges_u)
3434

3535
# Set ranges after resizing the systems
3636
for i in 1:length(semi.systems)
@@ -40,12 +40,12 @@ function resize!(v_ode, u_ode, _v_ode, _u_ode, semi::Semidiscretization)
4040

4141
for i in eachindex(ranges_u_old)
4242
length_u = min(length(ranges_u_old[i]), length(ranges_u_new[i]))
43-
for j in 1:length_u
43+
for j in 0:(length_u - 1)
4444
u_ode[ranges_u_new[i][1] + j] = _u_ode[ranges_u_old[i][1] + j]
4545
end
4646

4747
length_v = min(length(ranges_v_old[i]), length(ranges_v_new[i]))
48-
for j in 1:length_v
48+
for j in 0:(length_v - 1)
4949
v_ode[ranges_v_new[i][1] + j] = _v_ode[ranges_v_old[i][1] + j]
5050
end
5151
end
@@ -66,15 +66,15 @@ function resize!(v_ode, u_ode, _v_ode, _u_ode, semi::Semidiscretization)
6666
return v_ode
6767
end
6868

69-
resize!(system, capacity_system) = system
69+
Base.resize!(system::System, capacity_system) = system
7070

71-
function resize!(system::FluidSystem, capacity_system)
71+
function Base.resize!(system::FluidSystem, capacity_system)
7272
return resize!(system, system.particle_refinement, capacity_system)
7373
end
7474

75-
resize!(system, ::Nothing, capacity_system) = system
75+
Base.resize!(system, ::Nothing, capacity_system) = system
7676

77-
function resize!(system::WeaklyCompressibleSPHSystem, refinement, capacity_system::Int)
77+
function Base.resize!(system::WeaklyCompressibleSPHSystem, refinement, capacity_system::Int)
7878
(; mass, pressure, cache, density_calculator) = system
7979

8080
refinement.n_particles_before_resize[] = nparticles(system)
@@ -86,7 +86,7 @@ function resize!(system::WeaklyCompressibleSPHSystem, refinement, capacity_syste
8686
# resize_cache!(system, cache, n)
8787
end
8888

89-
function resize!(system::EntropicallyDampedSPHSystem, refinement, capacity_system::Int)
89+
function Base.resize!(system::EntropicallyDampedSPHSystem, refinement, capacity_system::Int)
9090
(; mass, cache, density_calculator) = system
9191

9292
refinement.n_particles_before_resize[] = nparticles(system)
@@ -163,7 +163,9 @@ function deleteat!(system::FluidSystem, refinement, v, u)
163163
return system
164164
end
165165

166-
@inline capacity(system) = capacity(system, system.particle_refinement)
166+
@inline capacity(system) = nparticles(system)
167+
168+
@inline capacity(system::FluidSystem) = capacity(system, system.particle_refinement)
167169

168170
@inline capacity(system, ::Nothing) = nparticles(system)
169171

0 commit comments

Comments
 (0)