# Source code for pyfr.solvers.euler.inters

    # -*- coding: utf-8 -*-

    from pyfr.solvers.baseadvec import (BaseAdvectionIntInters,
                                        BaseAdvectionMPIInters,
                                        BaseAdvectionBCInters)

    class EulerIntInters(BaseAdvectionIntInters):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)

            self._be.pointwise.register('pyfr.solvers.euler.kernels.intcflux')

            rsolver = self.cfg.get('solver-interfaces', 'riemann-solver')
            tplargs = dict(ndims=self.ndims, nvars=self.nvars, rsolver=rsolver,
                           c=self._tpl_c)

            self.kernels['comm_flux'] = lambda: self._be.kernel(
                'intcflux', tplargs=tplargs, dims=[self.ninterfpts],
                ul=self._scal_lhs, ur=self._scal_rhs,
                magnl=self._mag_pnorm_lhs, nl=self._norm_pnorm_lhs
            )

    class EulerMPIInters(BaseAdvectionMPIInters):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)

            self._be.pointwise.register('pyfr.solvers.euler.kernels.mpicflux')

            rsolver = self.cfg.get('solver-interfaces', 'riemann-solver')
            tplargs = dict(ndims=self.ndims, nvars=self.nvars, rsolver=rsolver,
                           c=self._tpl_c)

            self.kernels['comm_flux'] = lambda: self._be.kernel(
                'mpicflux', tplargs, dims=[self.ninterfpts],
                ul=self._scal_lhs, ur=self._scal_rhs,
                magnl=self._mag_pnorm_lhs, nl=self._norm_pnorm_lhs
            )

    class EulerBaseBCInters(BaseAdvectionBCInters):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)

            self._be.pointwise.register('pyfr.solvers.euler.kernels.bccflux')

            rsolver = self.cfg.get('solver-interfaces', 'riemann-solver')
            tplargs = dict(ndims=self.ndims, nvars=self.nvars, rsolver=rsolver,
                           c=self._tpl_c, bctype=self.type)

            self.kernels['comm_flux'] = lambda: self._be.kernel(
                'bccflux', tplargs, dims=[self.ninterfpts], ul=self._scal_lhs,
                magnl=self._mag_pnorm_lhs, nl=self._norm_pnorm_lhs,
                ploc=self._ploc
            )

    class EulerSupInflowBCInters(EulerBaseBCInters):
        type = 'sup-in-fa'

        def __init__(self, be, lhs, elemap, cfgsect, cfg):
            super().__init__(be, lhs, elemap, cfgsect, cfg)

            tplc = self._exp_opts(
                ['rho', 'p', 'u', 'v', 'w'][:self.ndims + 2], lhs
            )
            self._tpl_c.update(tplc)

    class EulerCharRiemInvBCInters(EulerBaseBCInters):
        type = 'char-riem-inv'

        def __init__(self, be, lhs, elemap, cfgsect, cfg):
            super().__init__(be, lhs, elemap, cfgsect, cfg)

            tplc = self._exp_opts(
                ['rho', 'p', 'u', 'v', 'w'][:self.ndims + 2], lhs
            )
            self._tpl_c.update(tplc)

    class EulerSlpAdiaWallBCInters(EulerBaseBCInters):
        type = 'slp-adia-wall'