Path: blob/main/examples/dgmulti_3d/elixir_euler_weakform.jl
2055 views
using OrdinaryDiffEqLowStorageRK1using Trixi23dg = DGMulti(polydeg = 3, element_type = Tet(),4surface_integral = SurfaceIntegralWeakForm(flux_hll),5volume_integral = VolumeIntegralWeakForm())67equations = CompressibleEulerEquations3D(1.4)8initial_condition = initial_condition_convergence_test9source_terms = source_terms_convergence_test1011# example where we tag two separate boundary segments of the mesh12top_boundary(x, tol = 50 * eps()) = abs(x[2] - 1) < tol13rest_of_boundary(x, tol = 50 * eps()) = !top_boundary(x, tol)14is_on_boundary = Dict(:top => top_boundary, :rest => rest_of_boundary)1516cells_per_dimension = (4, 4, 4)17mesh = DGMultiMesh(dg, cells_per_dimension, is_on_boundary = is_on_boundary)1819boundary_condition_convergence_test = BoundaryConditionDirichlet(initial_condition)20boundary_conditions = (; :top => boundary_condition_convergence_test,21:rest => boundary_condition_convergence_test)2223semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,24source_terms = source_terms,25boundary_conditions = boundary_conditions)2627tspan = (0.0, 0.1)28ode = semidiscretize(semi, tspan)2930summary_callback = SummaryCallback()31alive_callback = AliveCallback(alive_interval = 10)32analysis_interval = 10033analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))34save_solution = SaveSolutionCallback(interval = analysis_interval,35solution_variables = cons2prim)36callbacks = CallbackSet(summary_callback, alive_callback, analysis_callback, save_solution)3738###############################################################################39# run the simulation4041sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);42dt = 0.5 * estimate_dt(mesh, dg),43ode_default_options()...,44callback = callbacks);454647