Path: blob/main/examples/dgmulti_1d/elixir_navierstokes_convergence_periodic.jl
5586 views
using OrdinaryDiffEqLowStorageRK1using Trixi23dg = DGMulti(polydeg = 3, element_type = Line(), approximation_type = GaussSBP(),4surface_integral = SurfaceIntegralWeakForm(flux_hllc))56prandtl_number() = 0.727mu() = 6.25e-4 # equivalent to Re = 160089equations = CompressibleEulerEquations1D(1.4)10equations_parabolic = CompressibleNavierStokesDiffusion1D(equations, mu = mu(),11Prandtl = prandtl_number(),12gradient_variables = GradientVariablesPrimitive())1314function initial_condition_navier_stokes_convergence_test(x, t, equations)15# Amplitude and shift16RealT = eltype(x)17A = 0.5f018c = 21920# convenience values for trig. functions21pi_x = convert(RealT, pi) * x[1]22pi_t = convert(RealT, pi) * t2324rho = c + A * sin(pi_x) * cos(pi_t)25v1 = sin(pi_x) * cos(pi_t)26p = rho^22728return prim2cons(SVector(rho, v1, p), equations)29end30initial_condition = initial_condition_navier_stokes_convergence_test3132@inline function source_terms_navier_stokes_convergence_test(u, x, t, equations)33# we currently need to hardcode these parameters until we fix the "combined equation" issue34# see also https://github.com/trixi-framework/Trixi.jl/pull/116035RealT = eltype(x)3637@unpack gamma, inv_gamma_minus_one = equations38Pr = prandtl_number()39mu_ = mu()4041# Same settings as in `initial_condition`42# Amplitude and shift43A = 0.5f044c = 24546# convenience values for trig. functions47pi_x = convert(RealT, pi) * x[1]48pi_t = convert(RealT, pi) * t4950# compute the manufactured solution and all necessary derivatives51rho = c + A * sin(pi_x) * cos(pi_t)52rho_t = -convert(RealT, pi) * A * sin(pi_x) * sin(pi_t)53rho_x = convert(RealT, pi) * A * cos(pi_x) * cos(pi_t)54rho_xx = -convert(RealT, pi) * convert(RealT, pi) * A * sin(pi_x) * cos(pi_t)5556v1 = sin(pi_x) * cos(pi_t)57v1_t = -convert(RealT, pi) * sin(pi_x) * sin(pi_t)58v1_x = convert(RealT, pi) * cos(pi_x) * cos(pi_t)59v1_xx = -convert(RealT, pi) * convert(RealT, pi) * sin(pi_x) * cos(pi_t)6061p = rho * rho62p_t = 2 * rho * rho_t63p_x = 2 * rho * rho_x64p_xx = 2 * rho * rho_xx + 2 * rho_x * rho_x6566E = p * inv_gamma_minus_one + 0.5f0 * rho * v1^267E_t = p_t * inv_gamma_minus_one + 0.5f0 * rho_t * v1^2 + rho * v1 * v1_t68E_x = p_x * inv_gamma_minus_one + 0.5f0 * rho_x * v1^2 + rho * v1 * v1_x6970# Some convenience constants71T_const = gamma * inv_gamma_minus_one / Pr72inv_rho_cubed = 1 / (rho^3)7374# compute the source terms75# density equation76du1 = rho_t + rho_x * v1 + rho * v1_x7778# x-momentum equation79du2 = (rho_t * v1 + rho * v1_t80+ p_x + rho_x * v1^2 + 2 * rho * v1 * v1_x -81# stress tensor from x-direction82v1_xx * mu_)8384# total energy equation85du3 = (E_t + v1_x * (E + p) + v1 * (E_x + p_x) -86# stress tensor and temperature gradient terms from x-direction87v1_xx * v1 * mu_ -88v1_x * v1_x * mu_ -89T_const * inv_rho_cubed *90(p_xx * rho * rho -912 * p_x * rho * rho_x +922 * p * rho_x * rho_x -93p * rho * rho_xx) * mu_)9495return SVector(du1, du2, du3)96end9798cells_per_dimension = (12,)99mesh = DGMultiMesh(dg, cells_per_dimension,100coordinates_min = (-1.0,), coordinates_max = (1.0,),101periodicity = true)102103# define periodic boundary conditions everywhere104boundary_conditions = boundary_condition_periodic105boundary_conditions_parabolic = boundary_condition_periodic106107semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),108initial_condition, dg;109boundary_conditions = (boundary_conditions,110boundary_conditions_parabolic),111source_terms = source_terms_navier_stokes_convergence_test)112113tspan = (0.0, 1.0)114ode = semidiscretize(semi, tspan)115116summary_callback = SummaryCallback()117118alive_callback = AliveCallback(alive_interval = 10)119120analysis_interval = 100121analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))122123callbacks = CallbackSet(summary_callback, alive_callback,124analysis_callback)125126###############################################################################127# run the simulation128time_int_tol = 1e-6129sol = solve(ode, RDPK3SpFSAL49(); adaptive = true, dt = 1e-3,130abstol = time_int_tol, reltol = time_int_tol,131ode_default_options()..., callback = callbacks)132133134