Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@ Static = "0.8, 1"
StaticArrayInterface = "1.5.1"
StaticArrays = "1"
StrideArrays = "0.1.28"
Trixi = "0.14"
Trixi = "0.15"
julia = "1.10"
3 changes: 2 additions & 1 deletion examples/advection/cartesian/elixir_cubed_sphere.jl
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ initial_condition_transformed = transform_initial_condition(initial_condition, e

# A semidiscretization collects data structures and functions for the spatial discretization
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver,
source_terms = source_terms_convert_to_linear_advection)
source_terms = source_terms_convert_to_linear_advection,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.
Expand Down
3 changes: 2 additions & 1 deletion examples/advection/cartesian/elixir_quad_icosahedron.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ initial_condition_transformed = transform_initial_condition(initial_condition, e

# A semidiscretization collects data structures and functions for the spatial discretization
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver,
source_terms = source_terms_convert_to_linear_advection)
source_terms = source_terms_convert_to_linear_advection,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.
Expand Down
7 changes: 4 additions & 3 deletions examples/advection/covariant/elixir_cubed_sphere.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ equations = CovariantLinearAdvectionEquation2D(global_coordinate_system = Global
solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs,
volume_integral = VolumeIntegralWeakForm())

# Create a 2D cubed sphere mesh the size of the Earth. For the covariant form to work
# properly, we currently need polydeg to equal that of the solver,
# Create a 2D cubed sphere mesh the size of the Earth. For the covariant form to work
# properly, we currently need polydeg to equal that of the solver,
# initial_refinement_level = 0 (default), and element_local_mapping = true.
mesh = P4estMeshCubedSphere2D(cells_per_dimension[1], EARTH_RADIUS,
polydeg = Trixi.polydeg(solver),
Expand All @@ -29,7 +29,8 @@ mesh = P4estMeshCubedSphere2D(cells_per_dimension[1], EARTH_RADIUS,
initial_condition_transformed = transform_initial_condition(initial_condition, equations)

# A semidiscretization collects data structures and functions for the spatial discretization
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver)
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.
Expand Down
13 changes: 7 additions & 6 deletions examples/advection/covariant/elixir_quad_icosahedron.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ equations = CovariantLinearAdvectionEquation2D(global_coordinate_system = Global
solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs,
volume_integral = VolumeIntegralWeakForm())

# Create a 2D quadrilateral icosahedral mesh the size of the Earth. For the covariant form
# Create a 2D quadrilateral icosahedral mesh the size of the Earth. For the covariant form
# to work properly, we currently need polydeg to equal that of the solver, and
# initial_refinement_level = 0 (default)
mesh = P4estMeshQuadIcosahedron2D(cells_per_dimension[1], EARTH_RADIUS,
Expand All @@ -28,19 +28,20 @@ mesh = P4estMeshQuadIcosahedron2D(cells_per_dimension[1], EARTH_RADIUS,
initial_condition_transformed = transform_initial_condition(initial_condition, equations)

# A semidiscretization collects data structures and functions for the spatial discretization
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver)
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_transformed, solver,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.

# Create ODE problem with time span from 0 to T
ode = semidiscretize(semi, (0.0, 12 * SECONDS_PER_DAY))

# At the beginning of the main loop, the SummaryCallback prints a summary of the simulation
# At the beginning of the main loop, the SummaryCallback prints a summary of the simulation
# setup and resets the timers
summary_callback = SummaryCallback()

# The AnalysisCallback allows to analyse the solution in regular intervals and prints the
# The AnalysisCallback allows to analyse the solution in regular intervals and prints the
# results
analysis_callback = AnalysisCallback(semi, interval = 10,
save_analysis = true,
Expand All @@ -53,15 +54,15 @@ save_solution = SaveSolutionCallback(interval = 10,
# The StepsizeCallback handles the re-calculation of the maximum Δt after each time step
stepsize_callback = StepsizeCallback(cfl = 0.7)

# Create a CallbackSet to collect all callbacks such that they can be passed to the ODE
# Create a CallbackSet to collect all callbacks such that they can be passed to the ODE
# solver
callbacks = CallbackSet(summary_callback, analysis_callback, save_solution,
stepsize_callback)

###############################################################################
# run the simulation

# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed
# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed
# callbacks
sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false),
dt = 1.0, save_everystep = false, callback = callbacks)
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ polydeg = 3
solver = DGSEM(polydeg = polydeg, surface_flux = surface_flux,
volume_integral = VolumeIntegralFluxDifferencing(volume_flux))

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)
Expand Down
4 changes: 2 additions & 2 deletions examples/euler/dry_air/buoyancy/elixir_gemein_bubble.jl
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ end

initial_condition = initial_condition_warm_bubble

boundary_conditions = Dict(:y_neg => boundary_condition_slip_wall,
:y_pos => boundary_condition_slip_wall)
boundary_conditions = (; y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)

# Gravity source since Q_ph=0
source_term = source_terms_geopotential
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ end

source_term = source

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ polydeg = 3
solver = DGSEM(polydeg = polydeg, surface_flux = surface_flux,
volume_integral = VolumeIntegralFluxDifferencing(volume_flux))

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ polydeg = 3
solver = DGSEM(polydeg = polydeg, surface_flux = surface_flux,
volume_integral = VolumeIntegralFluxDifferencing(volume_flux))

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,8 @@ equations = CompressibleEulerEnergyEquationsWithGravity3D(c_p = 1004,

initial_condition = initial_condition_baroclinic_instability

boundary_conditions = Dict(:inside => boundary_condition_slip_wall,
:outside => boundary_condition_slip_wall)
boundary_conditions = (; inside = boundary_condition_slip_wall,
outside = boundary_condition_slip_wall)

polydeg = 5
surface_flux = (FluxLMARS(340), flux_zero)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# An idealized baroclinic instability test case
# For optimal results consider increasing the resolution to 16x16x8 trees per cube face.
#
#
# This elixir takes about 8 hours, using 16 threads of an AMD Ryzen 7 7800X3D.
#
# References:
Expand Down Expand Up @@ -198,8 +198,8 @@ equations = CompressibleEulerPotentialTemperatureEquationsWithGravity3D(c_p = 10

initial_condition = initial_condition_baroclinic_instability

boundary_conditions = Dict(:inside => boundary_condition_slip_wall,
:outside => boundary_condition_slip_wall)
boundary_conditions = (; inside = boundary_condition_slip_wall,
outside = boundary_condition_slip_wall)

polydeg = 5
surface_flux = (FluxLMARS(340), flux_zero)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ equations = CompressibleEulerPotentialTemperatureEquationsWithGravity3D(c_p = 10

initial_condition = initial_condition_isothermal

boundary_conditions = Dict(:inside => boundary_condition_slip_wall,
:outside => boundary_condition_slip_wall)
boundary_conditions = (; inside = boundary_condition_slip_wall,
outside = boundary_condition_slip_wall)

polydeg = 4
surface_flux = (FluxLMARS(340), flux_zero)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,10 @@ alpha = 0.03
xr_B = 20000
schär_setup = SchärSetup(alpha, xr_B)
boundary = BoundaryConditionDirichlet(schär_setup)
boundary_conditions = Dict(:x_neg => boundary,
:x_pos => boundary,
:y_neg => boundary_condition_slip_wall,
:y_pos => boundary)
boundary_conditions = (; x_neg = boundary,
x_pos = boundary,
y_neg = boundary_condition_slip_wall,
y_pos = boundary)

polydeg = 3
basis = LobattoLegendreBasis(polydeg)
Expand Down
6 changes: 4 additions & 2 deletions examples/euler/dry_air/tests/elixir_gemein_source_terms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ coordinates_max = (2.0, 2.0)

cells_per_dimension = (16, 16)

mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max)
mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max,
periodicity = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
source_terms = source_terms_convergence_test_dry)
source_terms = source_terms_convergence_test_dry,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ coordinates_min = (0.0,)
coordinates_max = (1.0,)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level = 3,
n_cells_max = 100_000)
n_cells_max = 100_000,
periodicity = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver,
boundary_conditions = boundary_condition_periodic)
###############################################################################
# ODE solvers, callbacks etc.
tspan = (0.0, 0.4)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,10 @@ linear_hydrostatic_setup = HydrostaticSetup(alpha, xr_B, equations)

boundary = BoundaryConditionDirichlet(linear_hydrostatic_setup)

boundary_conditions = Dict(:x_neg => boundary,
:x_pos => boundary,
:y_neg => boundary_condition_slip_wall,
:y_pos => boundary)
boundary_conditions = (; x_neg = boundary,
x_pos = boundary,
y_neg = boundary_condition_slip_wall,
y_pos = boundary)

# We have an isothermal background state with T0 = 250 K.
# The reference speed of sound can be computed as:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ linear_hydrostatic_setup = NonHydrostaticSetup(alpha, xr_B)

boundary = BoundaryConditionDirichlet(linear_hydrostatic_setup)

boundary_conditions = Dict(:x_neg => boundary,
:x_pos => boundary,
:y_neg => boundary_condition_slip_wall,
:y_pos => boundary)
boundary_conditions = (; x_neg = boundary,
x_pos = boundary,
y_neg = boundary_condition_slip_wall,
y_pos = boundary)
polydeg = 3
basis = LobattoLegendreBasis(polydeg)
surface_flux = (FluxLMARS(340.0), flux_zero)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max,
periodicity = (true, true, true))

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_taylor_green_vortex,
solver)
solver,
boundary_conditions = boundary_condition_periodic)
###############################################################################
# ODE solvers, callbacks etc.
tspan = (0.0, 0.2)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# References:
# - Marco Artiano, Oswald Knoth, Peter Spichtinger, Hendrik Ranocha (2025)
# Structure-Preserving High-Order Methods for the Compressible Euler Equations
# Structure-Preserving High-Order Methods for the Compressible Euler Equations
# in Potential Temperature Formulation for Atmospheric Flows
# https://arxiv.org/abs/2509.10311 (pre-print)
using OrdinaryDiffEqSSPRK
Expand Down Expand Up @@ -50,8 +50,10 @@ mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level = 3,
n_cells_max = 100_000, periodicity = false)

boundary_conditions = (x_pos = boundary_condition_slip_wall,
x_neg = boundary_condition_slip_wall)
boundary_conditions = (; x_pos = boundary_condition_slip_wall,
x_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall,
y_neg = boundary_condition_slip_wall)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_adiabatic, solver,
boundary_conditions = boundary_conditions)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# References:
# - Marco Artiano, Oswald Knoth, Peter Spichtinger, Hendrik Ranocha (2025)
# Structure-Preserving High-Order Methods for the Compressible Euler Equations
# Structure-Preserving High-Order Methods for the Compressible Euler Equations
# in Potential Temperature Formulation for Atmospheric Flows
# https://arxiv.org/abs/2509.10311 (pre-print)
using OrdinaryDiffEqSSPRK
Expand Down Expand Up @@ -55,10 +55,10 @@ mesh = P4estMesh(trees_per_dimension, polydeg = polydeg,
mapping = mapping, periodicity = (false, false),
initial_refinement_level = 0)

boundary_conditions = Dict(:x_pos => boundary_condition_slip_wall,
:x_neg => boundary_condition_slip_wall,
:y_pos => boundary_condition_slip_wall,
:y_neg => boundary_condition_slip_wall)
boundary_conditions = (; x_pos = boundary_condition_slip_wall,
x_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall,
y_neg = boundary_condition_slip_wall)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_adiabatic, solver,
boundary_conditions = boundary_conditions)
Expand Down
2 changes: 1 addition & 1 deletion examples/euler/moist_air/buoyancy/elixir_hoeck_bubble.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ end

equations = CompressibleRainyEulerEquations2D()

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_slip_wall,
y_pos = boundary_condition_slip_wall)
Expand Down
6 changes: 4 additions & 2 deletions examples/euler/moist_air/tests/elixir_gemein_source_terms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ coordinates_max = (2.0, 2.0)

cells_per_dimension = (4, 4)

mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max)
mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max,
periodicity = true)

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
source_terms = source_terms_convergence_test_moist)
source_terms = source_terms_convergence_test_moist,
boundary_conditions = boundary_condition_periodic)

###############################################################################
# ODE solvers, callbacks etc.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ end
###############################################################################
# semidiscretization of the compressible rainy Euler equations

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_simple_slip_wall,
y_pos = boundary_condition_simple_slip_wall)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ end
diffusivity = 0.5f0
equations_parabolic = LaplaceDiffusion2D(diffusivity, equations)

boundary_conditions = (x_neg = boundary_condition_periodic,
boundary_conditions = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_simple_slip_wall,
y_pos = boundary_condition_simple_slip_wall)

boundary_conditions_parabolic = (x_neg = boundary_condition_periodic,
boundary_conditions_parabolic = (; x_neg = boundary_condition_periodic,
x_pos = boundary_condition_periodic,
y_neg = boundary_condition_laplace,
y_pos = boundary_condition_laplace)
Expand Down
Loading
Loading