-
Notifications
You must be signed in to change notification settings - Fork 114
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* implementation of quasi 1d compressible Euler Equation * added example elixir for quasi 1d compressible Euler equations * added example elixir with a discontinuous initial condition * including and exported CompressibleEulerEquationsQuasi1D * formatting * added entropy conservative test * fixing spelling * formatting * Update examples/tree_1d_dgsem/elixir_euler_quasi_1d_discontinuous.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * updated test_tree_1d_euler.jl and formatting * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * adding consistency check for flux * Update compressible_euler_quasi_1d.jl * formatting * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Jesse Chan <[email protected]> * Update compressible_euler_quasi_1d and test_tree_1d_euler * formatting * Update examples/tree_1d_dgsem/elixir_euler_quasi_1d_discontinuous.jl Co-authored-by: Jesse Chan <[email protected]> * Update examples/tree_1d_dgsem/elixir_euler_quasi_1d_ec.jl Co-authored-by: Jesse Chan <[email protected]> * Update examples/tree_1d_dgsem/elixir_euler_quasi_1d_source_terms.jl Co-authored-by: Jesse Chan <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * Update src/equations/compressible_euler_quasi_1d.jl Co-authored-by: Daniel Doehring <[email protected]> * update boundary condition slip wall * update compressible_euler_quasi_1d.jl * Update src/equations/compressible_euler_quasi_1d.jl * Update src/equations/compressible_euler_quasi_1d.jl * remove boundary_condition_slip_wall --------- Co-authored-by: Jesse Chan <[email protected]> Co-authored-by: Daniel Doehring <[email protected]> Co-authored-by: Daniel Doehring <[email protected]> Co-authored-by: Hendrik Ranocha <[email protected]>
- Loading branch information
1 parent
14796ea
commit c7c4cf7
Showing
8 changed files
with
634 additions
and
0 deletions.
There are no files selected for viewing
85 changes: 85 additions & 0 deletions
85
examples/tree_1d_dgsem/elixir_euler_quasi_1d_discontinuous.jl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
using OrdinaryDiffEq | ||
using Trixi | ||
|
||
############################################################################### | ||
# Semidiscretization of the quasi 1d compressible Euler equations | ||
# See Chan et al. https://doi.org/10.48550/arXiv.2307.12089 for details | ||
|
||
equations = CompressibleEulerEquationsQuasi1D(1.4) | ||
|
||
""" | ||
initial_condition_discontinuity(x, t, equations::CompressibleEulerEquations1D) | ||
A discontinuous initial condition taken from | ||
- Jesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) | ||
High order entropy stable schemes for the quasi-one-dimensional | ||
shallow water and compressible Euler equations | ||
[DOI: 10.48550/arXiv.2307.12089](https://doi.org/10.48550/arXiv.2307.12089) | ||
""" | ||
function initial_condition_discontinuity(x, t, | ||
equations::CompressibleEulerEquationsQuasi1D) | ||
rho = (x[1] < 0) ? 3.4718 : 2.0 | ||
v1 = (x[1] < 0) ? -2.5923 : -3.0 | ||
p = (x[1] < 0) ? 5.7118 : 2.639 | ||
a = (x[1] < 0) ? 1.0 : 1.5 | ||
|
||
return prim2cons(SVector(rho, v1, p, a), equations) | ||
end | ||
|
||
initial_condition = initial_condition_discontinuity | ||
|
||
surface_flux = (flux_lax_friedrichs, flux_nonconservative_chan_etal) | ||
volume_flux = (flux_chan_etal, flux_nonconservative_chan_etal) | ||
|
||
basis = LobattoLegendreBasis(3) | ||
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 = (-1.0,) | ||
coordinates_max = (1.0,) | ||
mesh = TreeMesh(coordinates_min, coordinates_max, | ||
initial_refinement_level = 6, | ||
n_cells_max = 10_000) | ||
|
||
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver) | ||
|
||
############################################################################### | ||
# ODE solvers, callbacks etc. | ||
|
||
tspan = (0.0, 2.0) | ||
ode = semidiscretize(semi, tspan) | ||
|
||
summary_callback = SummaryCallback() | ||
|
||
analysis_interval = 100 | ||
|
||
analysis_callback = AnalysisCallback(semi, interval = analysis_interval) | ||
|
||
alive_callback = AliveCallback(analysis_interval = analysis_interval) | ||
|
||
save_solution = SaveSolutionCallback(interval = 100, | ||
save_initial_solution = true, | ||
save_final_solution = true, | ||
solution_variables = cons2prim) | ||
|
||
stepsize_callback = StepsizeCallback(cfl = 0.5) | ||
|
||
callbacks = CallbackSet(summary_callback, | ||
analysis_callback, alive_callback, | ||
save_solution, | ||
stepsize_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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
using OrdinaryDiffEq | ||
using Trixi | ||
|
||
############################################################################### | ||
# Semidiscretization of the quasi 1d compressible Euler equations with a discontinuous nozzle width function. | ||
# See Chan et al. https://doi.org/10.48550/arXiv.2307.12089 for details | ||
|
||
equations = CompressibleEulerEquationsQuasi1D(1.4) | ||
|
||
# Setup a truly discontinuous density function and nozzle width for | ||
# this academic testcase of entropy conservation. The errors from the analysis | ||
# callback are not important but the entropy error for this test case | ||
# `∑∂S/∂U ⋅ Uₜ` should be around machine roundoff. | ||
# Works as intended for TreeMesh1D with `initial_refinement_level=6`. If the mesh | ||
# refinement level is changed the initial condition below may need changed as well to | ||
# ensure that the discontinuities lie on an element interface. | ||
function initial_condition_ec(x, t, equations::CompressibleEulerEquationsQuasi1D) | ||
v1 = 0.1 | ||
rho = 2.0 + 0.1 * x[1] | ||
p = 3.0 | ||
a = 2.0 + x[1] | ||
|
||
return prim2cons(SVector(rho, v1, p, a), equations) | ||
end | ||
|
||
initial_condition = initial_condition_ec | ||
|
||
surface_flux = (flux_chan_etal, flux_nonconservative_chan_etal) | ||
volume_flux = surface_flux | ||
solver = DGSEM(polydeg = 4, surface_flux = surface_flux, | ||
volume_integral = VolumeIntegralFluxDifferencing(volume_flux)) | ||
|
||
coordinates_min = (-1.0,) | ||
coordinates_max = (1.0,) | ||
mesh = TreeMesh(coordinates_min, coordinates_max, | ||
initial_refinement_level = 6, | ||
n_cells_max = 10_000) | ||
|
||
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver) | ||
|
||
############################################################################### | ||
# ODE solvers, callbacks etc. | ||
|
||
tspan = (0.0, 0.4) | ||
ode = semidiscretize(semi, tspan) | ||
|
||
summary_callback = SummaryCallback() | ||
|
||
analysis_interval = 100 | ||
|
||
analysis_callback = AnalysisCallback(semi, interval = analysis_interval) | ||
|
||
alive_callback = AliveCallback(analysis_interval = analysis_interval) | ||
|
||
save_solution = SaveSolutionCallback(interval = 100, | ||
save_initial_solution = true, | ||
save_final_solution = true, | ||
solution_variables = cons2prim) | ||
|
||
stepsize_callback = StepsizeCallback(cfl = 0.8) | ||
|
||
callbacks = CallbackSet(summary_callback, | ||
analysis_callback, alive_callback, | ||
save_solution, | ||
stepsize_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 |
60 changes: 60 additions & 0 deletions
60
examples/tree_1d_dgsem/elixir_euler_quasi_1d_source_terms.jl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
using OrdinaryDiffEq | ||
using Trixi | ||
using ForwardDiff | ||
|
||
############################################################################### | ||
# Semidiscretization of the quasi 1d compressible Euler equations | ||
# See Chan et al. https://doi.org/10.48550/arXiv.2307.12089 for details | ||
|
||
equations = CompressibleEulerEquationsQuasi1D(1.4) | ||
|
||
initial_condition = initial_condition_convergence_test | ||
|
||
surface_flux = (flux_chan_etal, flux_nonconservative_chan_etal) | ||
volume_flux = surface_flux | ||
solver = DGSEM(polydeg = 4, surface_flux = surface_flux, | ||
volume_integral = VolumeIntegralFluxDifferencing(volume_flux)) | ||
|
||
coordinates_min = -1.0 | ||
coordinates_max = 1.0 | ||
mesh = TreeMesh(coordinates_min, coordinates_max, | ||
initial_refinement_level = 4, | ||
n_cells_max = 10_000) | ||
|
||
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver, | ||
source_terms = source_terms_convergence_test) | ||
|
||
############################################################################### | ||
# ODE solvers, callbacks etc. | ||
|
||
tspan = (0.0, 2.0) | ||
ode = semidiscretize(semi, tspan) | ||
|
||
summary_callback = SummaryCallback() | ||
|
||
analysis_interval = 100 | ||
analysis_callback = AnalysisCallback(semi, interval = analysis_interval, | ||
extra_analysis_errors = (:l2_error_primitive, | ||
:linf_error_primitive)) | ||
|
||
alive_callback = AliveCallback(analysis_interval = analysis_interval) | ||
|
||
save_solution = SaveSolutionCallback(interval = 100, | ||
save_initial_solution = true, | ||
save_final_solution = true, | ||
solution_variables = cons2prim) | ||
|
||
stepsize_callback = StepsizeCallback(cfl = 0.8) | ||
|
||
callbacks = CallbackSet(summary_callback, | ||
analysis_callback, alive_callback, | ||
save_solution, | ||
stepsize_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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.