|
| 1 | +# The same setup as tree_2d_dgsem/elixir_advection_basic.jl |
| 2 | +# to verify the StructuredMesh implementation against TreeMesh |
| 3 | + |
| 4 | +using OrdinaryDiffEqSSPRK, OrdinaryDiffEqLowStorageRK |
| 5 | +using Trixi |
| 6 | + |
| 7 | +############################################################################### |
| 8 | +# semidiscretization of the linear advection equation |
| 9 | + |
| 10 | +advection_velocity = (0.2, -0.7) |
| 11 | +equations = LinearScalarAdvectionEquation2D(advection_velocity) |
| 12 | + |
| 13 | +# Create DG solver with polynomial degree = 3 and (local) Lax-Friedrichs/Rusanov flux as surface flux |
| 14 | +solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs) |
| 15 | + |
| 16 | +coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y)) |
| 17 | +coordinates_max = (1.0, 1.0) # maximum coordinates (max(x), max(y)) |
| 18 | + |
| 19 | +trees_per_dimension = (8, 8) |
| 20 | + |
| 21 | +# Create P4estMesh with 8 x 8 trees and 16 x 16 elements |
| 22 | +mesh = P4estMesh(trees_per_dimension, polydeg = 3, |
| 23 | + coordinates_min = coordinates_min, coordinates_max = coordinates_max, |
| 24 | + initial_refinement_level = 1) |
| 25 | + |
| 26 | +# A semidiscretization collects data structures and functions for the spatial discretization |
| 27 | +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, |
| 28 | + solver) |
| 29 | + |
| 30 | +############################################################################### |
| 31 | +# ODE solvers, callbacks etc. |
| 32 | + |
| 33 | +# Create ODE problem with time span from 0.0 to 1.0 |
| 34 | +ode = semidiscretize(semi, (0.0, 1.0); real_type = nothing, storage_type = nothing) |
| 35 | + |
| 36 | +# At the beginning of the main loop, the SummaryCallback prints a summary of the simulation setup |
| 37 | +# and resets the timers |
| 38 | +summary_callback = SummaryCallback() |
| 39 | + |
| 40 | +# The AnalysisCallback allows to analyse the solution in regular intervals and prints the results |
| 41 | +analysis_callback = AnalysisCallback(semi, interval = 100) |
| 42 | + |
| 43 | +# The SaveSolutionCallback allows to save the solution to a file in regular intervals |
| 44 | +save_solution = SaveSolutionCallback(interval = 100, |
| 45 | + solution_variables = cons2prim) |
| 46 | + |
| 47 | +# The StepsizeCallback handles the re-calculation of the maximum Δt after each time step |
| 48 | +stepsize_callback = StepsizeCallback(cfl = 1.6) |
| 49 | + |
| 50 | +# Create a CallbackSet to collect all callbacks such that they can be passed to the ODE solver |
| 51 | +callbacks = CallbackSet(summary_callback, analysis_callback, save_solution, |
| 52 | + stepsize_callback) |
| 53 | + |
| 54 | +############################################################################### |
| 55 | +# run the simulation |
| 56 | + |
| 57 | +# # OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks |
| 58 | +# sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false); |
| 59 | +# dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback |
| 60 | +# ode_default_options()..., callback = callbacks); |
0 commit comments