Path: blob/main/docs/literate/src/files/DGMulti_2.jl
5591 views
#src # Other SBP schemes (FD, CGSEM) via `DGMulti` solver12# For a tutorial about DG schemes via the [`DGMulti`](@ref) solver please visit the [previous tutorial](@ref DGMulti_1).3# The `DGMulti` solver also supports other methods than DG. The important property a method has to4# fulfill is the summation-by-parts (SBP) property. The package [SummationByPartsOperators.jl](https://github.com/ranocha/SummationByPartsOperators.jl)5# provides such methods, like a finite difference SBP (FD SBP) scheme. To do this,6# you need to create an SBP derivative operator and pass that as `approximation_type`7# to the `DGMulti` constructor. For example, the classical second-order FD SBP operator8# can be created as9using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly10D = derivative_operator(MattssonNordström2004(), derivative_order = 1, accuracy_order = 2,11xmin = 0.0, xmax = 1.0, N = 11)12# Here, the arguments `xmin` and `xmax` do not matter beyond setting the real type13# used for the operator - they just set a reference element and are rescaled on the14# physical elements. The parameter `N` determines the number of finite difference nodes.15# Then, `D` can be used as `approximation_type` like `SBP()` in a multi-block fashion.16# In multiple dimensions, such a 1D SBP operator will be used in a tensor product fashion,17# i.e., in each coordinate direction. In particular, you can use them only on 1D, 2D `Quad()`,18# and 3D `Hex()` elements.19#20# You can also use fully periodic single-block FD methods by creating a periodic SBP21# operator. For example, a fully periodic FD operator can be constructed as22D = periodic_derivative_operator(derivative_order = 1, accuracy_order = 2,23xmin = 0.0, xmax = 1.0, N = 11)24# An example using such an FD method is implemented in25# [`elixir_euler_fdsbp_periodic.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/dgmulti_2d/elixir_euler_fdsbp_periodic.jl).26# For all parameters and other calling options, please have a look in the27# [documentation of SummationByPartsOperators.jl](https://ranocha.de/SummationByPartsOperators.jl/stable/).2829# Another possible method is for instance a continuous Galerkin (CGSEM) method. You can use such a30# method with polynomial degree of `3` (`N=4` Legendre Lobatto nodes on `[0, 1]`) coupled continuously31# on a uniform mesh with `Nx=10` elements by setting `approximation_type` to32using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly33D = couple_continuously(legendre_derivative_operator(xmin = 0.0, xmax = 1.0, N = 4),34UniformPeriodicMesh1D(xmin = -1.0, xmax = 1.0, Nx = 10))3536# To choose a discontinuous coupling (DGSEM), use `couple_discontinuously()` instead of `couple_continuously()`.3738# For more information and other SBP operators, see the documentations of [StartUpDG.jl](https://jlchan.github.io/StartUpDG.jl/dev/)39# and [SummationByPartsOperators.jl](https://ranocha.de/SummationByPartsOperators.jl/stable/).4041# ## Package versions4243# These results were obtained using the following versions.4445using InteractiveUtils46versioninfo()4748using Pkg49Pkg.status(["Trixi", "StartUpDG", "SummationByPartsOperators"],50mode = PKGMODE_MANIFEST)515253