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
8 changes: 6 additions & 2 deletions src/callbacks/density_reinit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ Callback to reinitialize the density field when using [`ContinuityDensity`](@ref
# Keywords
- `interval=0`: Reinitialize the density every `interval` time steps.
- `dt`: Reinitialize the density in regular intervals of `dt` in terms
of integration time.
- `reinit_initial_solution`: Reinitialize the initial solution (default=false)
of integration time. This callback does not add extra time
steps / `tstops`; instead, reinitialization is triggered at
the first solver step after each `dt` interval has elapsed.
- `reinit_initial_solution`: Reinitialize the initial solution (default=true)
"""
mutable struct DensityReinitializationCallback{I}
interval::I
Expand Down Expand Up @@ -102,4 +104,6 @@ function (reinit_callback::DensityReinitializationCallback)(integrator)
@trixi_timeit timer() "reinit density" reinit_density!(vu_ode, semi)

reinit_callback.last_t = integrator.t

u_modified!(integrator, true)
end
2 changes: 1 addition & 1 deletion src/general/initial_condition.jl
Original file line number Diff line number Diff line change
Expand Up @@ -368,8 +368,8 @@ function InitialCondition(sol::ODESolution, system, semi; use_final_velocity=fal

v_ode, u_ode = sol.u[end].x

v = wrap_v(v_ode, system, semi)
u = wrap_u(u_ode, system, semi)
v = wrap_u(v_ode, system, semi)

# Check if particles come too close especially when the surface exhibits large curvature
too_close = find_too_close_particles(u, min_particle_distance)
Expand Down
12 changes: 12 additions & 0 deletions src/schemes/fluid/weakly_compressible_sph/system.jl
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,13 @@ end

function reinit_density!(system::WeaklyCompressibleSPHSystem, v, u,
v_ode, u_ode, semi)
(; density_calculator) = system

reinit_density!(system, density_calculator, v, u, v_ode, u_ode, semi)
end

function reinit_density!(system::WeaklyCompressibleSPHSystem, ::ContinuityDensity, v, u,
v_ode, u_ode, semi)
# Compute density with `SummationDensity` and store the result in `v`,
# overwriting the previous integrated density.
summation_density!(system, semi, u, u_ode, v[end, :])
Expand All @@ -405,6 +412,11 @@ function reinit_density!(system::WeaklyCompressibleSPHSystem, v, u,
return system
end

function reinit_density!(system::WeaklyCompressibleSPHSystem, ::SummationDensity, v, u,
v_ode, u_ode, semi)
return system
end

function reinit_density!(system, v, u, v_ode, u_ode, semi)
return system
end
Expand Down
Loading