diff --git a/src/callbacks/density_reinit.jl b/src/callbacks/density_reinit.jl index e1d565b154..9264d2d201 100644 --- a/src/callbacks/density_reinit.jl +++ b/src/callbacks/density_reinit.jl @@ -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 @@ -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 diff --git a/src/general/initial_condition.jl b/src/general/initial_condition.jl index f69f5b78d1..b78ae8013f 100644 --- a/src/general/initial_condition.jl +++ b/src/general/initial_condition.jl @@ -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) diff --git a/src/schemes/fluid/weakly_compressible_sph/system.jl b/src/schemes/fluid/weakly_compressible_sph/system.jl index 4b1caf351a..2e5474a33c 100644 --- a/src/schemes/fluid/weakly_compressible_sph/system.jl +++ b/src/schemes/fluid/weakly_compressible_sph/system.jl @@ -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, :]) @@ -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