Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 9 additions & 14 deletions src/SPHCellList.jl
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ using LinearAlgebra
SimConstants, SimParticles, ParticleRanges,
CellDict, NeighborCellLists, dρdtI,
Acceleration, ∇Cᵢ,
∇◌rᵢ, AccelerationMax;
∇◌rᵢ;
Position = SimParticles.Position,
Density = SimParticles.Density,
Pressure = SimParticles.Pressure,
Expand Down Expand Up @@ -84,7 +84,6 @@ using LinearAlgebra

dρdtI[i] = dρdt_acc
Acceleration[i] = acc_acc
AccelerationMax[i] = norm(acc_acc)
end

return nothing
Expand All @@ -95,7 +94,7 @@ using LinearAlgebra
SimConstants, SimParticles, ParticleRanges,
CellDict, NeighborCellLists, dρdtI,
Acceleration, ∇Cᵢ,
∇◌rᵢ, AccelerationMax;
∇◌rᵢ;
Position = SimParticles.Position,
Density = SimParticles.Density,
Pressure = SimParticles.Pressure,
Expand Down Expand Up @@ -153,7 +152,6 @@ using LinearAlgebra
Acceleration[i] = acc_acc
Kernel[i] = kernel_acc
KernelGradient[i] = kernel_grad_acc
AccelerationMax[i] = norm(acc_acc)
end

return nothing
Expand All @@ -164,7 +162,7 @@ using LinearAlgebra
SimConstants, SimParticles, ParticleRanges,
CellDict, NeighborCellLists, dρdtI,
Acceleration, ∇Cᵢ,
∇◌rᵢ, AccelerationMax;
∇◌rᵢ;
Position = SimParticles.Position,
Density = SimParticles.Density,
Pressure = SimParticles.Pressure,
Expand Down Expand Up @@ -221,7 +219,6 @@ using LinearAlgebra
Acceleration[i] = acc_acc
∇Cᵢ[i] = shift_c_acc
∇◌rᵢ[i] = shift_r_acc
AccelerationMax[i] = norm(acc_acc)
end

return nothing
Expand All @@ -232,7 +229,7 @@ using LinearAlgebra
SimConstants, SimParticles, ParticleRanges,
CellDict, NeighborCellLists, dρdtI,
Acceleration, ∇Cᵢ,
∇◌rᵢ, AccelerationMax;
∇◌rᵢ;
Position = SimParticles.Position,
Density = SimParticles.Density,
Pressure = SimParticles.Pressure,
Expand Down Expand Up @@ -295,7 +292,6 @@ using LinearAlgebra
KernelGradient[i] = kernel_grad_acc
∇Cᵢ[i] = shift_c_acc
∇◌rᵢ[i] = shift_r_acc
AccelerationMax[i] = norm(acc_acc)
end

return nothing
Expand Down Expand Up @@ -721,7 +717,6 @@ using LinearAlgebra
TimeSteppingMode = SimMetaData.TimeSteppingMode

@no_escape begin
AccelerationMax = @alloc(FloatType, length(Position))
dt₂ = dt * 0.5

SimMetaData.IndexCounter = UpdateNeighbors!(SimParticles, SimKernel.H⁻¹, SortingScratchSpace, ParticleRanges, UniqueCells, CellDict)
Expand All @@ -737,7 +732,7 @@ using LinearAlgebra
@timeit SimMetaData.HourGlass "00b Init NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellDict,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ,
)
end

Expand Down Expand Up @@ -775,7 +770,7 @@ using LinearAlgebra
@timeit SimMetaData.HourGlass "04 First NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellDict,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ,
)

@timeit SimMetaData.HourGlass "05 Update To Half TimeStep" HalfTimeStep(SimMetaData, SimConstants, SimParticles, Positionₙ⁺, Velocityₙ⁺, ρₙ⁺, dρdtI, dt₂)
Expand All @@ -788,7 +783,7 @@ using LinearAlgebra
@timeit SimMetaData.HourGlass "08 Second NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellDict,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ,
Position = Positionₙ⁺,
Density = ρₙ⁺,
Velocity = Velocityₙ⁺,
Expand All @@ -809,7 +804,7 @@ using LinearAlgebra
@timeit SimMetaData.HourGlass "06 NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellDict,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
NeighborCellLists, dρdtI, Acceleration, ∇Cᵢ, ∇◌rᵢ,
Position = Positionₙ⁺,
Density = ρₙ⁺,
Velocity = Velocityₙ⁺,
Expand All @@ -824,7 +819,7 @@ using LinearAlgebra

@timeit SimMetaData.HourGlass "10 Update MetaData" UpdateMetaData!(SimMetaData, dt)

@timeit SimMetaData.HourGlass "11 Update TimeStep" dt = UpdateTimeStep(AccelerationMax, SimConstants, SimKernel)
@timeit SimMetaData.HourGlass "11 Update TimeStep" dt = UpdateTimeStep(Acceleration, SimConstants, SimKernel)
end
end

Expand Down
24 changes: 20 additions & 4 deletions src/TimeStepping.jl
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,36 @@ function Δt(max_acceleration, SimulationConstants, SPHKernel)
end

"""
UpdateTimeStep(AccelerationMax, SimConstants, SimKernel)
UpdateTimeStep(Acceleration, SimConstants, SimKernel)

Computes and returns the updated time step based on maximum acceleration across all particles.

# Arguments
- `AccelerationMax`: Array of acceleration magnitudes for each particle.
- `Acceleration`: Vector of per-particle acceleration vectors.
- `SimConstants`: Struct containing simulation parameters.
- `SimKernel`: Struct containing kernel parameters.

# Returns
- The calculated adaptive time step `dt`.
"""
function UpdateTimeStep(AccelerationMax, SimConstants, SimKernel)
max_acceleration = maximum(AccelerationMax)
function UpdateTimeStep(Acceleration, SimConstants, SimKernel)
max_acceleration = zero(eltype(eltype(Acceleration)))
@no_escape begin
max_storage = @alloc(eltype(eltype(Acceleration)), 1)
max_storage[1] = max_acceleration
max_lock = Threads.SpinLock()
@inbounds Threads.@threads for i in eachindex(Acceleration)
acc_norm = norm(Acceleration[i])
if acc_norm > max_storage[1]
lock(max_lock)
if acc_norm > max_storage[1]
max_storage[1] = acc_norm
end
unlock(max_lock)
end
end
max_acceleration = max_storage[1]
end
return Δt(max_acceleration, SimConstants, SimKernel)
end

Expand Down