# -*- coding: utf-8 -*-
from pyfr.solvers.baseadvec import BaseAdvectionElements
class BaseACFluidElements:
formulations = ['dual']
privarmap = {2: ['p', 'u', 'v'],
3: ['p', 'u', 'v', 'w']}
convarmap = {2: ['p', 'u', 'v'],
3: ['p', 'u', 'v', 'w']}
dualcoeffs = {2: ['u', 'v'],
3: ['u', 'v', 'w']}
visvarmap = {
2: [('velocity', ['u', 'v']),
('pressure', ['p'])],
3: [('velocity', ['u', 'v', 'w']),
('pressure', ['p'])]
}
@staticmethod
def pri_to_con(pris, cfg):
return pris
@staticmethod
def con_to_pri(convs, cfg):
return convs
[docs]class ACEulerElements(BaseACFluidElements, BaseAdvectionElements):
[docs] def set_backend(self, *args, **kwargs):
super().set_backend(*args, **kwargs)
# Can elide interior flux calculations at p = 0
if self.basis.order == 0:
return
# Register our flux kernels
self._be.pointwise.register('pyfr.solvers.aceuler.kernels.tflux')
self._be.pointwise.register('pyfr.solvers.aceuler.kernels.tfluxlin')
# Template parameters for the flux kernels
tplargs = {
'ndims': self.ndims,
'nvars': self.nvars,
'nverts': len(self.basis.linspts),
'c': self.cfg.items_as('constants', float),
'jac_exprs': self.basis.jac_exprs
}
# Helpers
c, l = 'curved', 'linear'
r, s = self._mesh_regions, self._slice_mat
if c in r and 'flux' not in self.antialias:
self.kernels['tdisf_curved'] = lambda uin: self._be.kernel(
'tflux', tplargs=tplargs, dims=[self.nupts, r[c]],
u=s(self.scal_upts[uin], c), f=s(self._vect_upts, c),
smats=self.curved_smat_at('upts')
)
elif c in r:
self.kernels['tdisf_curved'] = lambda: self._be.kernel(
'tflux', tplargs=tplargs, dims=[self.nqpts, r[c]],
u=s(self._scal_qpts, c), f=s(self._vect_qpts, c),
smats=self.curved_smat_at('qpts')
)
if l in r and 'flux' not in self.antialias:
self.kernels['tdisf_linear'] = lambda uin: self._be.kernel(
'tfluxlin', tplargs=tplargs, dims=[self.nupts, r[l]],
u=s(self.scal_upts[uin], l), f=s(self._vect_upts, l),
verts=self.ploc_at('linspts', l), upts=self.upts
)
elif l in r:
self.kernels['tdisf_linear'] = lambda: self._be.kernel(
'tfluxlin', tplargs=tplargs, dims=[self.nqpts, r[l]],
u=s(self._scal_qpts, l), f=s(self._vect_qpts, l),
verts=self.ploc_at('linspts', l), upts=self.qpts
)