Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/src/Trixi.jl
2055 views
1
"""
2
Trixi
3
4
**Trixi.jl** is a numerical simulation framework for hyperbolic conservation
5
laws. A key objective for the framework is to be useful to both scientists
6
and students. Therefore, next to having an extensible design with a fast
7
implementation, Trixi.jl is focused on being easy to use for new or inexperienced
8
users, including the installation and postprocessing procedures.
9
10
To get started, run your first simulation with Trixi.jl using
11
12
trixi_include(default_example())
13
14
See also: [trixi-framework/Trixi.jl](https://github.com/trixi-framework/Trixi.jl)
15
"""
16
module Trixi
17
18
using Preferences: @load_preference, set_preferences!
19
const _PREFERENCE_SQRT = @load_preference("sqrt", "sqrt_Trixi_NaN")
20
const _PREFERENCE_LOG = @load_preference("log", "log_Trixi_NaN")
21
const _PREFERENCE_THREADING = Symbol(@load_preference("backend", "polyester"))
22
const _PREFERENCE_LOOPVECTORIZATION = @load_preference("loop_vectorization", true)
23
24
# Include other packages that are used in Trixi.jl
25
# (standard library packages first, other packages next, all of them sorted alphabetically)
26
27
using Accessors: @reset
28
using LinearAlgebra: LinearAlgebra, Diagonal, diag, dot, eigvals, mul!, norm, cross,
29
normalize, I,
30
UniformScaling, det
31
using Printf: @printf, @sprintf, println
32
using SparseArrays: AbstractSparseMatrix, AbstractSparseMatrixCSC, sparse, droptol!,
33
rowvals, nzrange, nonzeros
34
35
# import @reexport now to make it available for further imports/exports
36
using Reexport: @reexport
37
38
# MPI needs to be imported before HDF5 to be able to use parallel HDF5
39
# as long as HDF5.jl uses Requires.jl to enable parallel HDF5 with MPI
40
using MPI: MPI
41
42
@reexport using SciMLBase: CallbackSet
43
using SciMLBase: DiscreteCallback,
44
ODEProblem, ODESolution,
45
SplitODEProblem
46
import SciMLBase: get_du, get_tmp_cache, u_modified!,
47
init, step!, check_error,
48
get_proposed_dt, set_proposed_dt!,
49
terminate!, remake, add_tstop!, has_tstop, first_tstop
50
51
using DelimitedFiles: readdlm
52
using Downloads: Downloads
53
using Adapt: Adapt, adapt
54
using CodeTracking: CodeTracking
55
using ConstructionBase: ConstructionBase
56
using DiffEqBase: DiffEqBase, get_tstops, get_tstops_array
57
using DiffEqCallbacks: PeriodicCallback, PeriodicCallbackAffect
58
@reexport using EllipsisNotation # ..
59
using FillArrays: Ones, Zeros
60
using ForwardDiff: ForwardDiff
61
using HDF5: HDF5, h5open, attributes, create_dataset, datatype, dataspace
62
using KernelAbstractions: KernelAbstractions, @index, @kernel, get_backend, Backend
63
using LinearMaps: LinearMap
64
if _PREFERENCE_LOOPVECTORIZATION
65
using LoopVectorization: LoopVectorization, @turbo, indices
66
else
67
using LoopVectorization: LoopVectorization, indices
68
include("auxiliary/mock_turbo.jl")
69
end
70
71
using StaticArrayInterface: static_length # used by LoopVectorization
72
using MuladdMacro: @muladd
73
using Octavian: Octavian, matmul!
74
using Polyester: Polyester, @batch # You know, the cheapest threads you can find...
75
using OffsetArrays: OffsetArray, OffsetVector
76
using P4est
77
using T8code
78
using RecipesBase: RecipesBase
79
using RecursiveArrayTools: VectorOfArray
80
using Requires: @require
81
using Static: Static, One, True, False
82
@reexport using StaticArrays: SVector
83
using StaticArrays: StaticArrays, MVector, MArray, SMatrix, @SMatrix
84
using StrideArrays: PtrArray, StrideArray, StaticInt
85
@reexport using StructArrays: StructArrays, StructArray
86
using TimerOutputs: TimerOutputs, @notimeit, print_timer, reset_timer!
87
using Triangulate: Triangulate, TriangulateIO
88
export TriangulateIO # for type parameter in DGMultiMesh
89
using TriplotBase: TriplotBase
90
using TriplotRecipes: DGTriPseudocolor
91
@reexport using TrixiBase: trixi_include
92
using TrixiBase: TrixiBase, @trixi_timeit, timer
93
@reexport using SimpleUnPack: @unpack
94
using SimpleUnPack: @pack!
95
using DataStructures: BinaryHeap, FasterForward, extract_all!
96
97
using UUIDs: UUID
98
99
# finite difference SBP operators
100
using SummationByPartsOperators: AbstractDerivativeOperator,
101
AbstractNonperiodicDerivativeOperator,
102
AbstractPeriodicDerivativeOperator,
103
grid
104
import SummationByPartsOperators: integrate, semidiscretize,
105
compute_coefficients, compute_coefficients!,
106
left_boundary_weight, right_boundary_weight
107
@reexport using SummationByPartsOperators: SummationByPartsOperators, derivative_operator,
108
periodic_derivative_operator,
109
upwind_operators
110
111
# DGMulti solvers
112
@reexport using StartUpDG: StartUpDG, Polynomial, Gauss, TensorProductWedge, SBP, Line, Tri,
113
Quad, Hex, Tet, Wedge
114
using StartUpDG: RefElemData, MeshData, AbstractElemShape
115
116
# TODO: include_optimized
117
# This should be used everywhere (except to `include("interpolations.jl")`)
118
# once the upstream issue https://github.com/timholy/Revise.jl/issues/634
119
# is fixed; tracked in https://github.com/trixi-framework/Trixi.jl/issues/664.
120
# # By default, Julia/LLVM does not use fused multiply-add operations (FMAs).
121
# # Since these FMAs can increase the performance of many numerical algorithms,
122
# # we need to opt-in explicitly.
123
# # See https://ranocha.de/blog/Optimizing_EC_Trixi for further details.
124
# function include_optimized(filename)
125
# include(expr -> quote @muladd begin $expr end end, filename)
126
# end
127
128
# Define the entry points of our type hierarchy, e.g.
129
# AbstractEquations, AbstractSemidiscretization etc.
130
# Placing them here allows us to make use of them for dispatch even for
131
# other stuff defined very early in our include pipeline, e.g.
132
# IndicatorLöhner(semi::AbstractSemidiscretization)
133
include("basic_types.jl")
134
135
# Include all top-level source files
136
include("auxiliary/auxiliary.jl")
137
include("auxiliary/vector_of_arrays.jl")
138
include("auxiliary/mpi.jl")
139
include("auxiliary/p4est.jl")
140
include("auxiliary/t8code.jl")
141
include("equations/equations.jl")
142
include("meshes/meshes.jl")
143
include("solvers/solvers.jl")
144
include("equations/equations_parabolic.jl") # these depend on parabolic solver types
145
include("semidiscretization/semidiscretization.jl")
146
include("semidiscretization/semidiscretization_hyperbolic.jl")
147
include("semidiscretization/semidiscretization_hyperbolic_parabolic.jl")
148
include("semidiscretization/semidiscretization_euler_acoustics.jl")
149
include("semidiscretization/semidiscretization_coupled.jl")
150
include("time_integration/time_integration.jl")
151
include("callbacks_step/callbacks_step.jl")
152
include("callbacks_stage/callbacks_stage.jl")
153
include("semidiscretization/semidiscretization_euler_gravity.jl")
154
155
# Special elixirs such as `convergence_test`
156
include("auxiliary/special_elixirs.jl")
157
158
# Plot recipes and conversion functions to visualize results with Plots.jl
159
include("visualization/visualization.jl")
160
161
# export types/functions that define the public API of Trixi.jl
162
163
export AcousticPerturbationEquations2D,
164
CompressibleEulerEquations1D, CompressibleEulerEquations2D,
165
CompressibleEulerEquations3D,
166
CompressibleEulerMulticomponentEquations1D,
167
CompressibleEulerMulticomponentEquations2D,
168
CompressibleEulerEquationsQuasi1D,
169
IdealGlmMhdEquations1D, IdealGlmMhdEquations2D, IdealGlmMhdEquations3D,
170
IdealGlmMhdMulticomponentEquations1D, IdealGlmMhdMulticomponentEquations2D,
171
IdealGlmMhdMultiIonEquations2D, IdealGlmMhdMultiIonEquations3D,
172
HyperbolicDiffusionEquations1D, HyperbolicDiffusionEquations2D,
173
HyperbolicDiffusionEquations3D,
174
LinearScalarAdvectionEquation1D, LinearScalarAdvectionEquation2D,
175
LinearScalarAdvectionEquation3D,
176
InviscidBurgersEquation1D,
177
LatticeBoltzmannEquations2D, LatticeBoltzmannEquations3D,
178
LinearizedEulerEquations1D, LinearizedEulerEquations2D, LinearizedEulerEquations3D,
179
PolytropicEulerEquations2D,
180
TrafficFlowLWREquations1D,
181
MaxwellEquations1D,
182
PassiveTracerEquations
183
184
export LaplaceDiffusion1D, LaplaceDiffusion2D, LaplaceDiffusion3D,
185
LaplaceDiffusionEntropyVariables1D, LaplaceDiffusionEntropyVariables2D,
186
LaplaceDiffusionEntropyVariables3D,
187
CompressibleNavierStokesDiffusion1D, CompressibleNavierStokesDiffusion2D,
188
CompressibleNavierStokesDiffusion3D
189
190
export GradientVariablesConservative, GradientVariablesPrimitive, GradientVariablesEntropy
191
192
export flux, flux_central, flux_lax_friedrichs, flux_hll, flux_hllc, flux_hlle,
193
flux_godunov,
194
flux_chandrashekar, flux_ranocha, flux_derigs_etal, flux_hindenlang_gassner,
195
flux_nonconservative_powell, flux_nonconservative_powell_local_symmetric,
196
flux_nonconservative_powell_local_jump,
197
flux_ruedaramirez_etal, flux_nonconservative_ruedaramirez_etal,
198
flux_nonconservative_central,
199
flux_kennedy_gruber, flux_shima_etal, flux_ec,
200
flux_fjordholm_etal, flux_nonconservative_fjordholm_etal,
201
flux_wintermeyer_etal, flux_nonconservative_wintermeyer_etal,
202
flux_chan_etal, flux_nonconservative_chan_etal, flux_winters_etal,
203
FluxPlusDissipation, DissipationGlobalLaxFriedrichs, DissipationLocalLaxFriedrichs,
204
DissipationLaxFriedrichsEntropyVariables, DissipationMatrixWintersEtal,
205
FluxLaxFriedrichs, max_abs_speed_naive, max_abs_speed,
206
FluxHLL, min_max_speed_naive, min_max_speed_davis, min_max_speed_einfeldt,
207
FluxLMARS,
208
FluxRotated,
209
flux_shima_etal_turbo, flux_ranocha_turbo,
210
FluxUpwind,
211
FluxTracerEquationsCentral
212
213
export splitting_steger_warming, splitting_vanleer_haenel,
214
splitting_coirier_vanleer, splitting_lax_friedrichs,
215
splitting_drikakis_tsangaris
216
217
export initial_condition_constant,
218
initial_condition_gauss,
219
initial_condition_density_wave,
220
initial_condition_weak_blast_wave
221
222
export boundary_condition_do_nothing,
223
boundary_condition_periodic,
224
BoundaryConditionDirichlet,
225
BoundaryConditionNeumann,
226
boundary_condition_noslip_wall,
227
boundary_condition_slip_wall,
228
boundary_condition_wall,
229
BoundaryConditionNavierStokesWall,
230
NoSlip, Slip,
231
Adiabatic, Isothermal,
232
BoundaryConditionCoupled
233
234
export initial_condition_convergence_test, source_terms_convergence_test,
235
source_terms_lorentz, source_terms_collision_ion_electron,
236
source_terms_collision_ion_ion
237
export source_terms_harmonic
238
export initial_condition_poisson_nonperiodic, source_terms_poisson_nonperiodic,
239
boundary_condition_poisson_nonperiodic
240
export initial_condition_eoc_test_coupled_euler_gravity,
241
source_terms_eoc_test_coupled_euler_gravity, source_terms_eoc_test_euler
242
243
export cons2cons, cons2prim, prim2cons, cons2macroscopic, cons2state, cons2mean,
244
cons2entropy, entropy2cons
245
export density, pressure, density_pressure, velocity, global_mean_vars,
246
equilibrium_distribution, waterheight, waterheight_pressure
247
export entropy, energy_total, energy_kinetic, energy_internal,
248
energy_magnetic, cross_helicity, magnetic_field, divergence_cleaning_field,
249
enstrophy, vorticity
250
export lake_at_rest_error
251
export ncomponents, eachcomponent
252
253
export TreeMesh, StructuredMesh, StructuredMeshView, UnstructuredMesh2D, P4estMesh,
254
P4estMeshView, T8codeMesh
255
256
export DG,
257
DGSEM, LobattoLegendreBasis,
258
FDSBP,
259
VolumeIntegralWeakForm, VolumeIntegralStrongForm,
260
VolumeIntegralFluxDifferencing,
261
VolumeIntegralPureLGLFiniteVolume,
262
VolumeIntegralShockCapturingHG, IndicatorHennemannGassner,
263
VolumeIntegralUpwind,
264
SurfaceIntegralWeakForm, SurfaceIntegralStrongForm,
265
SurfaceIntegralUpwind,
266
MortarL2
267
268
export VolumeIntegralSubcellLimiting, BoundsCheckCallback,
269
SubcellLimiterIDP, SubcellLimiterIDPCorrection
270
271
export nelements, nnodes, nvariables,
272
eachelement, eachnode, eachvariable,
273
get_node_vars
274
275
export SemidiscretizationHyperbolic, semidiscretize, compute_coefficients, integrate
276
277
export SemidiscretizationHyperbolicParabolic
278
279
export SemidiscretizationEulerAcoustics
280
281
export SemidiscretizationEulerGravity, ParametersEulerGravity,
282
timestep_gravity_erk51_3Sstar!,
283
timestep_gravity_erk52_3Sstar!,
284
timestep_gravity_erk53_3Sstar!,
285
timestep_gravity_carpenter_kennedy_erk54_2N!
286
287
export SemidiscretizationCoupled
288
289
export SummaryCallback, SteadyStateCallback, AnalysisCallback, AliveCallback,
290
SaveRestartCallback, SaveSolutionCallback, TimeSeriesCallback, VisualizationCallback,
291
AveragingCallback,
292
AMRCallback, StepsizeCallback,
293
GlmSpeedCallback, LBMCollisionCallback, EulerAcousticsCouplingCallback,
294
TrivialCallback, AnalysisCallbackCoupled,
295
AnalysisSurfaceIntegral, DragCoefficientPressure2D, LiftCoefficientPressure2D,
296
DragCoefficientShearStress2D, LiftCoefficientShearStress2D,
297
DragCoefficientPressure3D, LiftCoefficientPressure3D
298
299
export load_mesh, load_time, load_timestep, load_timestep!, load_dt,
300
load_adaptive_time_integrator!
301
302
export ControllerThreeLevel, ControllerThreeLevelCombined,
303
IndicatorLöhner, IndicatorLoehner, IndicatorMax
304
305
export PositivityPreservingLimiterZhangShu, EntropyBoundedLimiter
306
307
export trixi_include, examples_dir, get_examples, default_example,
308
default_example_unstructured, ode_default_options
309
310
export ode_norm, ode_unstable_check
311
312
export convergence_test,
313
jacobian_fd, jacobian_ad_forward, jacobian_ad_forward_parabolic,
314
linear_structure
315
316
export DGMulti, DGMultiBasis, estimate_dt, DGMultiMesh, GaussSBP
317
318
export ViscousFormulationBassiRebay1, ViscousFormulationLocalDG
319
320
# Visualization-related exports
321
export PlotData1D, PlotData2D, ScalarPlotData2D, getmesh, adapt_to_mesh_level!,
322
adapt_to_mesh_level,
323
iplot, iplot!
324
325
function __init__()
326
init_mpi()
327
328
init_p4est()
329
init_t8code()
330
331
register_error_hints()
332
333
# Enable features that depend on the availability of the Plots package
334
@require Plots="91a5bcdd-55d7-5caf-9e0b-520d859cae80" begin
335
using .Plots: Plots
336
end
337
end
338
339
include("auxiliary/precompile.jl")
340
_precompile_manual_()
341
342
end
343
344