Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
5 changes: 3 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,11 @@ 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,7 @@ 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
5 changes: 3 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,11 @@ 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