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
32 changes: 15 additions & 17 deletions src/SPHCellList.jl
Original file line number Diff line number Diff line change
Expand Up @@ -718,34 +718,20 @@ using TimerOutputs: @timeit

###
UniqueCellsView = view(UniqueCells, 1:SimMetaData.IndexCounter)
# This code here is to initialize the first time step for each simulation loop
dt = SimConstants.CFL * (SimKernel.h / SimConstants.c₀)
CurrentTimeStep = SimMetaData.CurrentTimeStep
dt = iszero(CurrentTimeStep) ? SimConstants.CFL * (SimKernel.h / SimConstants.c₀) : CurrentTimeStep
TimeSteppingMode = SimMetaData.TimeSteppingMode

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

SimMetaData.IndexCounter = UpdateNeighbors!(SimParticles, SimKernel.H⁻¹, SortingScratchSpace, ParticleRanges, UniqueCells, CellListIndices)
UniqueCellsView = view(UniqueCells, 1:SimMetaData.IndexCounter)
BuildNeighborCellLists!(NeighborCellLists, FullStencil, UniqueCellsView, ParticleRanges)

if TimeSteppingMode isa SingleNeighborTimeStepping
@timeit SimMetaData.HourGlass "00 Init Pressure" Pressure!(SimParticles.Pressure, SimParticles.Density, SimConstants)
@timeit SimMetaData.HourGlass "00a Init MDBC" ApplyMDBCBeforeHalf!(SimMetaData, SimKernel, SimConstants, SimParticles, ParticleRanges, UniqueCells)
@timeit SimMetaData.HourGlass "00b Init NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellListIndices,
NeighborCellLists, dρdtI, SimParticles.Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
)
end

NextOutputTime = next_output_time(SimMetaData)
while SimMetaData.TotalTime <= NextOutputTime
@timeit SimMetaData.HourGlass "01 Calculate IndexCounter" begin

SimMetaData.Δx = UpdateΔx!(SimMetaData.Δx, Positionₙ⁺, SimParticles.Position)
ShouldRebuild = SimMetaData.Δx >= SimKernel.h
ShouldRebuild = SimMetaData.Iteration == 0 || SimMetaData.Δx >= SimKernel.h

# println("Δx: ", Δx, "h: ", SimKernel.h," dt: ", SimMetaData.CurrentTimeStep, " Iteration: ", SimMetaData.Iteration, " TotalTime: ", SimMetaData.TotalTime, " OutputIterationCounter: ", SimMetaData.OutputIterationCounter)

Expand All @@ -760,6 +746,16 @@ using TimerOutputs: @timeit
SimMetaData.Δx = zero(eltype(dρdtI))
UniqueCellsView = view(UniqueCells, 1:SimMetaData.IndexCounter)
BuildNeighborCellLists!(NeighborCellLists, FullStencil, UniqueCellsView, ParticleRanges)

if TimeSteppingMode isa SingleNeighborTimeStepping
@timeit SimMetaData.HourGlass "01b Rebuild MDBC" ApplyMDBCBeforeHalf!(SimMetaData, SimKernel, SimConstants, SimParticles, ParticleRanges, UniqueCells)
@timeit SimMetaData.HourGlass "01c Rebuild Pressure" Pressure!(SimParticles.Pressure, SimParticles.Density, SimConstants)
@timeit SimMetaData.HourGlass "01d Rebuild NeighborLoop" NeighborLoopPerParticle!(
SimDensityDiffusion, SimViscosity, SimKernel, SimMetaData,
SimConstants, SimParticles, ParticleRanges, CellListIndices,
NeighborCellLists, dρdtI, SimParticles.Acceleration, ∇Cᵢ, ∇◌rᵢ, AccelerationMax,
)
end
end
end

Expand Down Expand Up @@ -819,6 +815,8 @@ using TimerOutputs: @timeit
@timeit SimMetaData.HourGlass "10 Update MetaData" UpdateMetaData!(SimMetaData, dt)

@timeit SimMetaData.HourGlass "11 Update TimeStep" dt = UpdateTimeStep(AccelerationMax, SimConstants, SimKernel)
SimMetaData.CurrentTimeStep = dt
dt₂ = dt * 0.5
end
end

Expand Down
12 changes: 6 additions & 6 deletions src/TimeStepping.jl
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ function HalfTimeStep(::SimulationMetaData{Dimensions, FloatType, SMode, KMode,
@inbounds @simd ivdep for i in eachindex(Position)
MotionLimiterFactor = MotionLimiterValue(AccelerationScalarType, ParticleType[i])
GravityFactor = GravityFactorValue(AccelerationScalarType, ParticleType[i])
Acceleration[i] += ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Accelerationᵢ = Acceleration[i] + ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Positionₙ⁺[i] = Position[i] + Velocity[i] * dt₂ * MotionLimiterFactor
Velocityₙ⁺[i] = Velocity[i] + Acceleration[i] * dt₂ * MotionLimiterFactor
Velocityₙ⁺[i] = Velocity[i] + Accelerationᵢ * dt₂ * MotionLimiterFactor
ρₙ⁺[i] = Density[i] + dρdtI[i] * dt₂
end

Expand All @@ -124,8 +124,8 @@ function FullTimeStep(::SimulationMetaData{D,T,NoShifting,K,B,L}, SimKernel,
@inbounds @simd ivdep for i in eachindex(Position)
MotionLimiterFactor = MotionLimiterValue(AccelerationScalarType, ParticleType[i])
GravityFactor = GravityFactorValue(AccelerationScalarType, ParticleType[i])
Acceleration[i] += ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Velocity[i] += Acceleration[i] * dt * MotionLimiterFactor
Accelerationᵢ = Acceleration[i] + ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Velocity[i] += Accelerationᵢ * dt * MotionLimiterFactor
Position[i] += (Velocityₙ⁺[i] * dt) * MotionLimiterFactor
end
return nothing
Expand All @@ -145,8 +145,8 @@ function FullTimeStep(::SimulationMetaData{D,T,S,K,B,L}, SimKernel, SimConstants
@inbounds @simd ivdep for i in eachindex(Position)
MotionLimiterFactor = MotionLimiterValue(AccelerationScalarType, ParticleType[i])
GravityFactor = GravityFactorValue(AccelerationScalarType, ParticleType[i])
Acceleration[i] += ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Velocity[i] += Acceleration[i] * dt * MotionLimiterFactor
Accelerationᵢ = Acceleration[i] + ConstructGravitySVector(Acceleration[i], SimConstants.g * GravityFactor)
Velocity[i] += Accelerationᵢ * dt * MotionLimiterFactor

A_FSC = (∇◌rᵢ[i] - A_FST)/(A_FSM - A_FST)
if A_FSC < 0
Expand Down