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