Path: blob/main/examples/structured_3d_dgsem/elixir_advection_nonperiodic_curved.jl
2055 views
using OrdinaryDiffEqLowStorageRK1using Trixi23###############################################################################4# semidiscretization of the linear advection equation56advection_velocity = (0.2, -0.7, 0.5)7equations = LinearScalarAdvectionEquation3D(advection_velocity)89initial_condition = initial_condition_convergence_test10boundary_conditions = BoundaryConditionDirichlet(initial_condition)1112solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs)1314# Mapping as described in https://arxiv.org/abs/2012.12040 but with less warping.15function mapping(xi, eta, zeta)16# Don't transform input variables between -1 and 1 onto [0,3] to obtain curved boundaries17# xi = 1.5 * xi_ + 1.518# eta = 1.5 * eta_ + 1.519# zeta = 1.5 * zeta_ + 1.52021y = eta +221 / 6 * (cos(1.5 * pi * (2 * xi - 3) / 3) *23cos(0.5 * pi * (2 * eta - 3) / 3) *24cos(0.5 * pi * (2 * zeta - 3) / 3))2526x = xi +271 / 6 * (cos(0.5 * pi * (2 * xi - 3) / 3) *28cos(2 * pi * (2 * y - 3) / 3) *29cos(0.5 * pi * (2 * zeta - 3) / 3))3031z = zeta +321 / 6 * (cos(0.5 * pi * (2 * x - 3) / 3) *33cos(pi * (2 * y - 3) / 3) *34cos(0.5 * pi * (2 * zeta - 3) / 3))3536return SVector(x, y, z)37end3839cells_per_dimension = (8, 8, 8)40mesh = StructuredMesh(cells_per_dimension, mapping, periodicity = false)4142semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,43boundary_conditions = boundary_conditions)4445###############################################################################46# ODE solvers, callbacks etc.4748tspan = (0.0, 1.0)49ode = semidiscretize(semi, tspan)5051summary_callback = SummaryCallback()5253analysis_interval = 10054analysis_callback = AnalysisCallback(semi, interval = analysis_interval,55extra_analysis_integrals = (entropy,))5657alive_callback = AliveCallback(analysis_interval = analysis_interval)5859save_restart = SaveRestartCallback(interval = 100,60save_final_restart = true)6162save_solution = SaveSolutionCallback(interval = 100,63save_initial_solution = true,64save_final_solution = true,65solution_variables = cons2prim)6667stepsize_callback = StepsizeCallback(cfl = 1.2)6869callbacks = CallbackSet(summary_callback,70analysis_callback,71alive_callback,72save_restart,73save_solution,74stepsize_callback)7576###############################################################################77# run the simulation7879sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);80dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback81ode_default_options()..., callback = callbacks);828384