Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port & mix last 3D elixirs #311

Merged
merged 24 commits into from
Nov 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
740500e
Add new elixir which works in general but still produces differences …
sloede Nov 9, 2020
0fa4e89
Port MHD Orszag-Tang 3D
sloede Nov 9, 2020
129d4cd
Add Alfven wave mortar test 3D + fix calc_mortar_fluxes for noncons t…
sloede Nov 9, 2020
5d5beaf
Add 3D Euler Sedov blast (without test yet)
sloede Nov 9, 2020
6ef9632
Fix Euler AMR elixir
sloede Nov 9, 2020
fcbe7ce
Confirm new test
sloede Nov 9, 2020
a4ac1f8
euler_ec tests now taal-confirmed
Nov 9, 2020
1dad9cb
euler shockcapturing tests taal-confirmed
Nov 9, 2020
c3e7226
Fix Hennemann & Gassner indicator 3D
sloede Nov 9, 2020
98d551d
Further improve 3D Sedov elixir (not yet working)
sloede Nov 9, 2020
31a2aa6
Fix elixir
sloede Nov 10, 2020
91c7d62
Merge branch '3d-or-not-3d' into msl/3d-or-not-3d
sloede Nov 10, 2020
f8b830d
Mark Taam as confirmed
sloede Nov 10, 2020
a99a19a
Add #DOF and #elements to default analysis output
sloede Nov 10, 2020
82391a1
euler-shockcapturing_amr elixir/parameter build, but not identical ye…
Nov 10, 2020
6d8eac2
Adapt elixir
sloede Nov 10, 2020
5d0941c
Remove unnecessary TOML file
sloede Nov 10, 2020
63f8082
Confirm last 3D test (except blob)
sloede Nov 10, 2020
7f09e7c
Fix indentatin
sloede Nov 10, 2020
1f2b531
Export initial_condition_density_pulse
sloede Nov 10, 2020
0f3d051
Apply suggestions from @ranocha
sloede Nov 10, 2020
258c254
Remove unnecessary Trixi. prefixes
sloede Nov 10, 2020
b3520bd
Remove unnecessary Trixi. prefixes
sloede Nov 10, 2020
a2bedcb
Remove unnecessary Trixi. prefixes
sloede Nov 10, 2020
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
69 changes: 69 additions & 0 deletions examples/3d/elixir_euler_amr.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@

using OrdinaryDiffEq
using Trixi

###############################################################################
# semidiscretization of the compressible Euler equations

equations = CompressibleEulerEquations3D(1.4)

initial_condition = initial_condition_density_pulse

surface_flux = flux_lax_friedrichs
solver = DGSEM(3, surface_flux)

coordinates_min = (-5, -5, -5)
coordinates_max = ( 5, 5, 5)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=4,
n_cells_max=10_000)


semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)


###############################################################################
# ODE solvers, callbacks etc.

tspan = (0.0, 10.0)
ode = semidiscretize(semi, tspan)

summary_callback = SummaryCallback()

amr_controller = ControllerThreeLevel(semi, IndicatorMax(semi, variable=first),
base_level=4,
med_level=5, med_threshold=1.05,
max_level=6, max_threshold=1.3)
amr_callback = AMRCallback(semi, amr_controller,
interval=5,
adapt_initial_condition=true,
adapt_initial_condition_only_refine=true)

# FIXME Taal restore after Taam sync
stepsize_callback = StepsizeCallback(cfl=0.4)

save_solution = SaveSolutionCallback(interval=100,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)

save_restart = SaveRestartCallback(interval=100,
save_final_restart=true)

analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval,
extra_analysis_integrals=(entropy,))

# TODO: Taal decide, first AMR or save solution etc.
callbacks = CallbackSet(summary_callback, amr_callback, stepsize_callback,
save_restart, save_solution, analysis_callback,
alive_callback);


###############################################################################
# run the simulation

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep=false, callback=callbacks);
summary_callback() # print the timer summary
2 changes: 1 addition & 1 deletion examples/3d/elixir_euler_density_pulse.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ using Trixi

equations = CompressibleEulerEquations3D(1.4)

initial_condition = Trixi.initial_condition_density_pulse
initial_condition = initial_condition_density_pulse

surface_flux = flux_ranocha
volume_flux = flux_ranocha
Expand Down
87 changes: 87 additions & 0 deletions examples/3d/elixir_euler_sedov_blast_wave_shockcapturing_amr.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@

using OrdinaryDiffEq
using Trixi

###############################################################################
# semidiscretization of the compressible Euler equations

equations = CompressibleEulerEquations3D(1.4)

initial_condition = initial_condition_sedov_self_gravity
boundary_conditions = boundary_condition_sedov_self_gravity

surface_flux = flux_hll
volume_flux = flux_ranocha
polydeg = 3
basis = LobattoLegendreBasis(polydeg)
indicator_sc = IndicatorHennemannGassner(equations, basis,
alpha_max=0.7,
alpha_min=0.001,
alpha_smooth=true,
variable=density_pressure)
volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;
volume_flux_dg=volume_flux,
volume_flux_fv=surface_flux)
solver = DGSEM(basis, surface_flux, volume_integral)

coordinates_min = (-4, -4, -4)
coordinates_max = ( 4, 4, 4)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=2,
n_cells_max=1_000_000,
periodicity=false)


semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
boundary_conditions=boundary_conditions)


###############################################################################
# ODE solvers, callbacks etc.

tspan = (0.0, 0.4)
ode = semidiscretize(semi, tspan)

summary_callback = SummaryCallback()

amr_indicator = IndicatorHennemannGassner(semi,
alpha_max=1.0,
alpha_min=0.0,
alpha_smooth=false,
variable=density_pressure)

amr_controller = ControllerThreeLevel(semi, amr_indicator,
base_level=2,
max_level =7, max_threshold=0.0003)

amr_callback = AMRCallback(semi, amr_controller,
interval=1,
adapt_initial_condition=true,
adapt_initial_condition_only_refine=true)

# FIXME Taal restore after Taam sync
stepsize_callback = StepsizeCallback(cfl=0.35)

save_solution = SaveSolutionCallback(interval=100,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)

save_restart = SaveRestartCallback(interval=10,
save_final_restart=true)

analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval)

callbacks = CallbackSet(summary_callback, amr_callback, stepsize_callback,
save_restart, save_solution,
analysis_callback, alive_callback)


###############################################################################
# run the simulation

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep=false, callback=callbacks, maxiters=1e5);
summary_callback() # print the timer summary
85 changes: 85 additions & 0 deletions examples/3d/elixir_euler_shockcapturing_amr.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@

using OrdinaryDiffEq
using Trixi

###############################################################################
# semidiscretization of the compressible Euler equations

equations = CompressibleEulerEquations3D(1.4)

initial_condition = initial_condition_weak_blast_wave

surface_flux = flux_ranocha # OBS! Using a non-dissipative flux is only sensible to test EC,
# but not for real shock simulations
volume_flux = flux_ranocha
polydeg = 3
basis = LobattoLegendreBasis(polydeg)
indicator_sc = IndicatorHennemannGassner(equations, basis,
alpha_max=0.5,
alpha_min=0.001,
alpha_smooth=true,
variable=density_pressure)
volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;
volume_flux_dg=volume_flux,
volume_flux_fv=surface_flux)
solver = DGSEM(basis, surface_flux, volume_integral)

coordinates_min = (-2, -2, -2)
coordinates_max = ( 2, 2, 2)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=3,
n_cells_max=100_000)


semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)


###############################################################################
# ODE solvers, callbacks etc.

tspan = (0.0, 0.4)
ode = semidiscretize(semi, tspan)

summary_callback = SummaryCallback()


amr_indicator = IndicatorHennemannGassner(semi,
alpha_smooth=false,
variable=density_pressure)

amr_controller = ControllerThreeLevel(semi, amr_indicator,
base_level=2,
max_level =4, max_threshold=0.0003)

amr_callback = AMRCallback(semi, amr_controller,
interval=1,
adapt_initial_condition=true,
adapt_initial_condition_only_refine=true)

# FIXME Taal restore after Taam sync to something better
stepsize_callback = StepsizeCallback(cfl=0.5)

save_solution = SaveSolutionCallback(interval=100,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)

save_restart = SaveRestartCallback(interval=100,
save_final_restart=true)

analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval)

callbacks = CallbackSet(summary_callback, amr_callback, stepsize_callback,
save_restart, save_solution,
analysis_callback, alive_callback)


###############################################################################
# run the simulation

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep=false, callback=callbacks, maxiters=1e5);
summary_callback() # print the timer summary

59 changes: 59 additions & 0 deletions examples/3d/elixir_mhd_alfven_wave_mortar.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@

using OrdinaryDiffEq
using Trixi

###############################################################################
# semidiscretization of the compressible ideal GLM-MHD equations

equations = IdealGlmMhdEquations3D(5/3)

initial_condition = initial_condition_convergence_test

surface_flux = flux_hll
volume_flux = flux_derigs_etal
solver = DGSEM(3, surface_flux, VolumeIntegralFluxDifferencing(volume_flux))

coordinates_min = (-1, -1, -1)
coordinates_max = ( 1, 1, 1)
refinement_patches = (
(type="box", coordinates_min=(-0.5, -0.5, -0.5),
coordinates_max=( 0.5, 0.5, 0.5)),
)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=2,
refinement_patches=refinement_patches,
n_cells_max=10_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

###############################################################################
# ODE solvers, callbacks etc.

tspan = (0.0, 1.0)
ode = semidiscretize(semi, tspan)

summary_callback = SummaryCallback()

# FIXME Taal restore after Taam sync to something better
stepsize_callback = StepsizeCallback(cfl=0.5)

save_solution = SaveSolutionCallback(interval=10,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)

analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval)

callbacks = CallbackSet(summary_callback, stepsize_callback,
save_solution,
analysis_callback, alive_callback)


###############################################################################
# run the simulation

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep=false, callback=callbacks);
summary_callback() # print the timer summary
54 changes: 54 additions & 0 deletions examples/3d/elixir_mhd_orszag_tang.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@

using OrdinaryDiffEq
using Trixi

###############################################################################
# semidiscretization of the compressible ideal GLM-MHD equations

equations = IdealGlmMhdEquations3D(5/3)

initial_condition = initial_condition_orszag_tang

surface_flux = flux_hll
volume_flux = flux_central
solver = DGSEM(3, surface_flux, VolumeIntegralFluxDifferencing(volume_flux))

coordinates_min = (0, 0, 0)
coordinates_max = (1, 1, 1)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=3,
n_cells_max=10_000)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

###############################################################################
# ODE solvers, callbacks etc.

tspan = (0.0, 0.5)
ode = semidiscretize(semi, tspan)

summary_callback = SummaryCallback()

# FIXME Taal restore after Taam sync to something better
stepsize_callback = StepsizeCallback(cfl=0.5)

save_solution = SaveSolutionCallback(interval=10,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)

analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval)

callbacks = CallbackSet(summary_callback, stepsize_callback,
save_solution,
analysis_callback, alive_callback)


###############################################################################
# run the simulation

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
save_everystep=false, callback=callbacks);
summary_callback() # print the timer summary
2 changes: 1 addition & 1 deletion src/Trixi.jl
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export flux_central, flux_lax_friedrichs, flux_hll, flux_upwind,

export initial_condition_constant,
initial_condition_gauss,
initial_condition_density_wave,
initial_condition_density_wave, initial_condition_density_pulse,
initial_condition_isentropic_vortex,
initial_condition_khi,
initial_condition_weak_blast_wave, initial_condition_blast_wave,
Expand Down
3 changes: 2 additions & 1 deletion src/callbacks/analysis.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ function (analysis_callback::AnalysisCallback)(integrator)
" " *
" Time/DOF/rhs!: " * @sprintf("%10.8e s", runtime_relative))
println(" sim. time: " * @sprintf("%10.8e", t))
println(" #DOF: " * @sprintf("% 14d", ndofs(semi)))
println(" #elements: " * @sprintf("% 14d", nelements(solver, cache)))

# Level information (only show for AMR)
uses_amr = false
Expand All @@ -187,7 +189,6 @@ function (analysis_callback::AnalysisCallback)(integrator)
max_level = max(max_level, current_level)
end

println(" #elements: " * @sprintf("% 14d", nelements(solver, cache)))
for level = max_level:-1:min_level+1
println(" ├── level $level: " * @sprintf("% 14d", count(isequal(level), levels)))
end
Expand Down
Loading