Space-time Trefftz-DG on tent pitched meshes
Two examples of the current Trefftz-DG method using tent pitching.
A wave hitting a corner, producing a singularity:
A wave in inhomogeneous material:
I am still a little torn about the current way of steering things from python, because it is quite rigid, but at least it is possible to start tent pitching using Trefftz-DG for the accoustic wave equation.
We start by importing and setting some parameters:
from trefftzngs import *
import netgen.gui
from ngsolve import *
D = initmesh.dim
t = CoordCF(D)
order = 4
t_start = 0
t_step = 0.01
initmesh = # your space mesh
We create the WaveTents object, which will handle everything, and set initial and boundary conditions
sq = sqrt(0.5);
# Simple example use solution for initial cond. + dirichlet/neumann bndc.
# supply fct + derivatives
bdd = CoefficientFunction((
sin( t+sq*(x+y) ), # used to reconstruct the 2nd order solution
sq*cos(t+sq*(x+y)), # init. cond. / Neumann bc
sq*cos(t+sq*(x+y)),
cos(t+sq*(x+y)) # init. cond. / Dirichlet bc
))
TT=WaveTents(order,initmesh,c,bdd) # set boundary condition
TT.SetWavefront(bdd,t_start) # set initial cond.
Now we set up the GridFunction to draw, provided by GetWave(), and then we are ready to start the iteration.
gfu = TT.GetWave()
Draw(gfu,initmesh,'sol',autoscale=False,min=-0.025,max=0.05)
with TaskManager():
for t in range(0,80):
TT.EvolveTents(t_step)
gfu.vec.data = TT.GetWave().vec.data
Redraw()
t_start += t_step
print("time: " + str(t_start))
It is also possible to use neumann bdc
for i in range(0,len(initmesh.GetBoundaries())):
initmesh.ngmesh.SetBCName(i,"neumann")