diff --git a/test/validation/validation.jl b/test/validation/validation.jl index d19c84274a..d1c8420842 100644 --- a/test/validation/validation.jl +++ b/test/validation/validation.jl @@ -83,4 +83,33 @@ # Verify number of plots @test length(axs_edac[1].scene.plots) >= 2 end + + @trixi_testset "TGV_2D" begin + @trixi_test_nowarn trixi_include(@__MODULE__, + joinpath(validation_dir(), + "taylor_green_vortex_2d", + "validation_taylor_green_vortex_2d.jl"), + tspan=(0.0, 0.01)) [ + r"WARNING: Method definition pressure_function.*\n", + r"WARNING: Method definition initial_pressure_function.*\n", + r"WARNING: Method definition velocity_function.*\n", + r"WARNING: Method definition initial_velocity_function.*\n" + ] + @test sol.retcode == ReturnCode.Success + @test count_rhs_allocations(sol, semi) == 0 + end + + @trixi_testset "LDC_2D" begin + @trixi_test_nowarn trixi_include(@__MODULE__, + joinpath(validation_dir(), + "lid_driven_cavity_2d", + "validation_lid_driven_cavity_2d.jl"), + tspan=(0.0, 0.02), dt=0.01, + SENSOR_CAPTURE_TIME=0.01) [ + r"WARNING: Method definition lid_movement_function.*\n", + r"WARNING: Method definition is_moving.*\n" + ] + @test sol.retcode == ReturnCode.Success + @test count_rhs_allocations(sol, semi) == 0 + end end diff --git a/validation/lid_driven_cavity_2d/validation_lid_driven_cavity_2d.jl b/validation/lid_driven_cavity_2d/validation_lid_driven_cavity_2d.jl index 40818ed4dc..c75d1500e3 100644 --- a/validation/lid_driven_cavity_2d/validation_lid_driven_cavity_2d.jl +++ b/validation/lid_driven_cavity_2d/validation_lid_driven_cavity_2d.jl @@ -2,17 +2,21 @@ using TrixiParticles # ========================================================================================== # ==== Resolution -particle_spacings = [0.02, 0.01, 0.005] +# The paper provides reference data for particle spacings particle_spacings = [0.02, 0.01, 0.005] +particle_spacing = 0.02 # ========================================================================================== # ==== Experiment Setup tspan = (0.0, 25.0) reynolds_numbers = [100.0, 1000.0, 10_000.0] -interpolated_velocity(v, u, t, system) = nothing +const SENSOR_CAPTURE_TIME = 24.8 +const CAPTURE_STARTED = Ref(false) -function interpolated_velocity(v, u, t, system::TrixiParticles.FluidSystem) - if t < 24.8 +interpolated_velocity(system, v, u, semi, t) = nothing + +function interpolated_velocity(system::TrixiParticles.FluidSystem, v, u, semi, t) + if t < SENSOR_CAPTURE_TIME return nothing end @@ -32,7 +36,7 @@ function interpolated_velocity(v, u, t, system::TrixiParticles.FluidSystem) file = joinpath(output_directory, "interpolated_velocities.csv") - if isfile(file) + if CAPTURE_STARTED[] data = TrixiParticles.CSV.read(file, TrixiParticles.DataFrame) vy_y_ = (data.vy_y .+ vy_y) vy_x_ = (data.vy_x .+ vy_x) @@ -50,12 +54,13 @@ function interpolated_velocity(v, u, t, system::TrixiParticles.FluidSystem) counter=1, vy_y=vy_y, vy_x=vy_x, vx_y=vx_y, vx_x=vx_x) TrixiParticles.CSV.write(output_directory * "/interpolated_velocities.csv", df) + CAPTURE_STARTED[] = true end return nothing end -for particle_spacing in particle_spacings, reynolds_number in reynolds_numbers, +for reynolds_number in reynolds_numbers, density_calculator in [SummationDensity(), ContinuityDensity()], wcsph in [false, true] n_particles_xy = round(Int, 1.0 / particle_spacing) @@ -68,8 +73,9 @@ for particle_spacing in particle_spacings, reynolds_number in reynolds_numbers, name_density_calculator, "validation_run_lid_driven_cavity_2d_nparticles_$(n_particles_xy)x$(n_particles_xy)_Re_$Re") - saving_callback = SolutionSavingCallback(dt=0.1, output_directory=output_directory) + saving_callback = SolutionSavingCallback(dt=0.02, output_directory=output_directory) + CAPTURE_STARTED[] = false pp_callback = PostprocessCallback(; dt=0.02, interpolated_velocity=interpolated_velocity, filename="interpolated_velocities", diff --git a/validation/taylor_green_vortex_2d/validation_taylor_green_vortex_2d.jl b/validation/taylor_green_vortex_2d/validation_taylor_green_vortex_2d.jl index a30f26f98c..73884e38c2 100644 --- a/validation/taylor_green_vortex_2d/validation_taylor_green_vortex_2d.jl +++ b/validation/taylor_green_vortex_2d/validation_taylor_green_vortex_2d.jl @@ -2,7 +2,8 @@ using TrixiParticles # ========================================================================================== # ==== Resolution -particle_spacings = [0.02, 0.01, 0.005] +# The paper provides reference data for particle spacings particle_spacings = [0.02, 0.01, 0.005] +particle_spacing = 0.02 # ========================================================================================== # ==== Experiment Setup @@ -12,10 +13,13 @@ reynolds_number = 100.0 density_calculators = [ContinuityDensity(), SummationDensity()] perturb_coordinates = [false, true] -function compute_l1v_error(v, u, t, system) +function compute_l1v_error(system, v_ode, u_ode, semi, t) v_analytical_avg = 0.0 v_avg = 0.0 + v = TrixiParticles.wrap_v(v_ode, system, semi) + u = TrixiParticles.wrap_u(u_ode, system, semi) + for particle in TrixiParticles.eachparticle(system) position = TrixiParticles.current_coords(u, system, particle) @@ -32,11 +36,14 @@ function compute_l1v_error(v, u, t, system) return v_avg /= v_analytical_avg end -function compute_l1p_error(v, u, t, system) +function compute_l1p_error(system, v_ode, u_ode, semi, t) p_max_exact = 0.0 L1p = 0.0 + v = TrixiParticles.wrap_v(v_ode, system, semi) + u = TrixiParticles.wrap_u(u_ode, system, semi) + for particle in TrixiParticles.eachparticle(system) position = TrixiParticles.current_coords(u, system, particle) @@ -57,14 +64,14 @@ end # The pressure plotted in the paper is the difference of the local pressure minus # the average of the pressure of all particles. -function diff_p_loc_p_avg(v, u, t, system) - p_avg_tot = avg_pressure(v, u, t, system) +function diff_p_loc_p_avg(system, v, u, semi, t) + p_avg_tot = avg_pressure(system, v, u, semi, t) return v[end, :] .- p_avg_tot end for density_calculator in density_calculators, perturbation in perturb_coordinates, - particle_spacing in particle_spacings, wcsph in [false, true] + wcsph in [false, true] n_particles_xy = round(Int, 1.0 / particle_spacing) name_density_calculator = density_calculator isa SummationDensity ?