Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finite difference SBP methods #607

Open
8 of 18 tasks
ranocha opened this issue May 25, 2021 · 0 comments
Open
8 of 18 tasks

Finite difference SBP methods #607

ranocha opened this issue May 25, 2021 · 0 comments
Labels
enhancement New feature or request

Comments

@ranocha
Copy link
Member

ranocha commented May 25, 2021

This is to track the progress of porting finite difference methods to Trixi. I propose to use my package SummationByPartsOperators.jl to get the basic methods. Then, we could use the following approach (implemented in #617).

  • Pack an SBP derivative operator from SummationByPartsOperators.jl as basis in Trixi's DG struct
  • Organize methods written for general DG operators such that they can use these new basis types
  • Implement the weak-form volume integral in 2D for these SBP operators and the TreeMesh with conforming interfaces (no mortar, no AMR)

We shouldn't look at performance too much at this stage. It will probably be okay to just compute the fluxes and use mul!. However, that will require multiple mul!s for each component, reinterpreting arrays to have SVectors as contents, or to use something like StructArrays.jl, see also #557.

Some limitations of this first approach and open questions are

  • We will use the same number of nodes per coordinate direction
  • Efficient parallelization will probably require new/more code. Will we have enough elements such that threading across elements is still optimal? Or will we have a few huge elements such that we also need threading inside of the elements?
  • Truly multi-dimensional implementations can be more (cache-) efficient than dimension-by-dimension versions implemented at first
  • How should we handle a single truly periodic block? The basic option above will give us one SBP element coupled via numerical fluxes. Do we also want to enable a single truly periodic FD block?
  • Shall we also allow upwind SBP operators? If so, how can we do that efficiently?

This will be a basic proof-of-concept and allows us to see whether/how our current abstractions need to be changed. Afterwards, some possible next steps are

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant