Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/src/Trixi.jl
2802 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
# Special elixirs such as `convergence_test`
155
include("auxiliary/special_elixirs.jl")
156
157
# Plot recipes and conversion functions to visualize results with Plots.jl
158
include("visualization/visualization.jl")
159
160
# export types/functions that define the public API of Trixi.jl
161
162
export AcousticPerturbationEquations2D,
163
CompressibleEulerEquations1D, CompressibleEulerEquations2D,
164
CompressibleEulerEquations3D,
165
CompressibleEulerMulticomponentEquations1D,
166
CompressibleEulerMulticomponentEquations2D,
167
CompressibleEulerEquationsQuasi1D,
168
IdealGlmMhdEquations1D, IdealGlmMhdEquations2D, IdealGlmMhdEquations3D,
169
IdealGlmMhdMulticomponentEquations1D, IdealGlmMhdMulticomponentEquations2D,
170
IdealGlmMhdMultiIonEquations2D, IdealGlmMhdMultiIonEquations3D,
171
HyperbolicDiffusionEquations1D, HyperbolicDiffusionEquations2D,
172
HyperbolicDiffusionEquations3D,
173
LinearScalarAdvectionEquation1D, LinearScalarAdvectionEquation2D,
174
LinearScalarAdvectionEquation3D,
175
InviscidBurgersEquation1D,
176
LatticeBoltzmannEquations2D, LatticeBoltzmannEquations3D,
177
LinearizedEulerEquations1D, LinearizedEulerEquations2D, LinearizedEulerEquations3D,
178
PolytropicEulerEquations2D,
179
TrafficFlowLWREquations1D,
180
MaxwellEquations1D,
181
LinearElasticityEquations1D,
182
PassiveTracerEquations
183
184
export NonIdealCompressibleEulerEquations1D, NonIdealCompressibleEulerEquations2D
185
export IdealGas, VanDerWaals, PengRobinson
186
187
export LaplaceDiffusion1D, LaplaceDiffusion2D, LaplaceDiffusion3D,
188
LaplaceDiffusionEntropyVariables1D, LaplaceDiffusionEntropyVariables2D,
189
LaplaceDiffusionEntropyVariables3D,
190
CompressibleNavierStokesDiffusion1D, CompressibleNavierStokesDiffusion2D,
191
CompressibleNavierStokesDiffusion3D
192
193
export GradientVariablesConservative, GradientVariablesPrimitive, GradientVariablesEntropy
194
195
export flux, flux_central, flux_lax_friedrichs, flux_hll, flux_hllc, flux_hlle,
196
flux_godunov,
197
flux_chandrashekar, flux_ranocha, flux_derigs_etal, flux_hindenlang_gassner,
198
flux_nonconservative_powell, flux_nonconservative_powell_local_symmetric,
199
flux_nonconservative_powell_local_jump,
200
flux_ruedaramirez_etal, flux_nonconservative_ruedaramirez_etal,
201
flux_nonconservative_central,
202
flux_kennedy_gruber, flux_shima_etal, flux_ec,
203
flux_fjordholm_etal, flux_nonconservative_fjordholm_etal,
204
flux_wintermeyer_etal, flux_nonconservative_wintermeyer_etal,
205
flux_chan_etal, flux_nonconservative_chan_etal, flux_winters_etal,
206
flux_terashima_etal, flux_central_terashima_etal,
207
FluxPlusDissipation, DissipationGlobalLaxFriedrichs, DissipationLocalLaxFriedrichs,
208
DissipationLaxFriedrichsEntropyVariables, DissipationMatrixWintersEtal,
209
FluxLaxFriedrichs, max_abs_speed_naive, max_abs_speed,
210
FluxHLL, min_max_speed_naive, min_max_speed_davis, min_max_speed_einfeldt,
211
FluxLMARS,
212
FluxRotated,
213
flux_shima_etal_turbo, flux_ranocha_turbo,
214
FluxUpwind,
215
FluxTracerEquationsCentral
216
217
export splitting_steger_warming, splitting_vanleer_haenel,
218
splitting_coirier_vanleer, splitting_lax_friedrichs,
219
splitting_drikakis_tsangaris
220
221
export initial_condition_constant,
222
initial_condition_gauss,
223
initial_condition_density_wave,
224
initial_condition_weak_blast_wave
225
226
export boundary_condition_do_nothing,
227
boundary_condition_periodic,
228
BoundaryConditionDirichlet,
229
BoundaryConditionNeumann,
230
boundary_condition_noslip_wall,
231
boundary_condition_slip_wall,
232
boundary_condition_wall,
233
BoundaryConditionNavierStokesWall,
234
NoSlip, Slip,
235
Adiabatic, Isothermal,
236
BoundaryConditionCoupled
237
238
export initial_condition_convergence_test, source_terms_convergence_test,
239
source_terms_lorentz, source_terms_collision_ion_electron,
240
source_terms_collision_ion_ion
241
export source_terms_harmonic
242
export initial_condition_poisson_nonperiodic, source_terms_poisson_nonperiodic,
243
boundary_condition_poisson_nonperiodic
244
export initial_condition_eoc_test_coupled_euler_gravity,
245
source_terms_eoc_test_coupled_euler_gravity, source_terms_eoc_test_euler
246
247
export cons2cons, cons2prim, prim2cons, cons2macroscopic, cons2state, cons2mean,
248
cons2entropy, entropy2cons, cons2thermo, thermo2cons
249
export density, pressure, density_pressure, velocity, temperature,
250
global_mean_vars,
251
equilibrium_distribution,
252
waterheight, waterheight_pressure
253
export entropy, entropy_thermodynamic, entropy_math, entropy_guermond_etal,
254
entropy_potential,
255
energy_total, energy_kinetic, energy_internal, energy_internal_specific,
256
energy_magnetic, cross_helicity, magnetic_field, divergence_cleaning_field,
257
enstrophy, vorticity
258
export lake_at_rest_error
259
export ncomponents, eachcomponent
260
export have_constant_speed
261
262
export TreeMesh, StructuredMesh, StructuredMeshView, UnstructuredMesh2D, P4estMesh,
263
P4estMeshView, P4estMeshCubedSphere, T8codeMesh
264
265
export DG,
266
DGSEM, LobattoLegendreBasis,
267
FDSBP,
268
VolumeIntegralWeakForm, VolumeIntegralStrongForm,
269
VolumeIntegralFluxDifferencing,
270
VolumeIntegralPureLGLFiniteVolume, VolumeIntegralPureLGLFiniteVolumeO2,
271
VolumeIntegralShockCapturingHG, VolumeIntegralShockCapturingRRG,
272
VolumeIntegralShockCapturingHGType,
273
VolumeIntegralAdaptive, IndicatorEntropyChange,
274
IndicatorHennemannGassner,
275
VolumeIntegralUpwind,
276
SurfaceIntegralWeakForm, SurfaceIntegralStrongForm,
277
SurfaceIntegralUpwind,
278
MortarL2
279
280
export reconstruction_O2_inner, reconstruction_O2_full,
281
reconstruction_constant,
282
minmod, monotonized_central, superbee, vanleer,
283
koren, koren_flipped, koren_symmetric,
284
central_slope
285
286
export VolumeIntegralSubcellLimiting, BoundsCheckCallback,
287
SubcellLimiterIDP, SubcellLimiterIDPCorrection
288
289
export nelements, nnodes, nvariables,
290
eachelement, eachnode, eachvariable,
291
get_node_vars
292
293
export SemidiscretizationHyperbolic, semidiscretize, compute_coefficients, integrate
294
295
export SemidiscretizationHyperbolicParabolic
296
export have_constant_diffusivity, max_diffusivity
297
298
export SemidiscretizationEulerAcoustics
299
300
export SemidiscretizationEulerGravity, ParametersEulerGravity,
301
timestep_gravity_erk51_3Sstar!,
302
timestep_gravity_erk52_3Sstar!,
303
timestep_gravity_erk53_3Sstar!,
304
timestep_gravity_carpenter_kennedy_erk54_2N!
305
306
export SemidiscretizationCoupled
307
308
export SummaryCallback, SteadyStateCallback, AnalysisCallback, AliveCallback,
309
SaveRestartCallback, SaveSolutionCallback, TimeSeriesCallback, VisualizationCallback,
310
AveragingCallback,
311
AMRCallback, StepsizeCallback,
312
GlmSpeedCallback, LBMCollisionCallback, EulerAcousticsCouplingCallback,
313
TrivialCallback, AnalysisCallbackCoupled,
314
AnalysisSurfaceIntegral, DragCoefficientPressure2D, LiftCoefficientPressure2D,
315
DragCoefficientShearStress2D, LiftCoefficientShearStress2D,
316
DragCoefficientPressure3D, LiftCoefficientPressure3D
317
318
export load_mesh, load_time, load_timestep, load_timestep!, load_dt,
319
load_adaptive_time_integrator!
320
321
export ControllerThreeLevel, ControllerThreeLevelCombined,
322
IndicatorLöhner, IndicatorLoehner, IndicatorMax
323
324
export PositivityPreservingLimiterZhangShu, EntropyBoundedLimiter
325
326
export trixi_include, examples_dir, get_examples, default_example,
327
default_example_unstructured, ode_default_options
328
329
export ode_norm, ode_unstable_check
330
331
export convergence_test,
332
jacobian_fd, jacobian_ad_forward, jacobian_ad_forward_parabolic,
333
linear_structure, linear_structure_parabolic
334
335
export DGMulti, DGMultiBasis, estimate_dt, DGMultiMesh, GaussSBP
336
337
export ViscousFormulationBassiRebay1, ViscousFormulationLocalDG
338
339
# Visualization-related exports
340
export PlotData1D, PlotData2D, ScalarPlotData2D, getmesh, adapt_to_mesh_level!,
341
adapt_to_mesh_level,
342
iplot, iplot!
343
344
function __init__()
345
init_mpi()
346
347
init_p4est()
348
init_t8code()
349
350
register_error_hints()
351
352
# Enable features that depend on the availability of the Plots package
353
@require Plots="91a5bcdd-55d7-5caf-9e0b-520d859cae80" begin
354
using .Plots: Plots
355
end
356
end
357
358
include("auxiliary/precompile.jl")
359
_precompile_manual_()
360
361
end
362
363