10#ifndef IMPACTX_ELEMENTS_MIXIN_LINEAR_TRANSPORT_H
11#define IMPACTX_ELEMENTS_MIXIN_LINEAR_TRANSPORT_H
48 template <
typename T_Element,
bool Implemented = true>
68 std::is_base_of_v<LinearTransport, T_Element>,
69 "LinearTransport can only be used as a mixin class!"
74 T_Element
const & element = *
static_cast<T_Element const*
>(
this);
75 auto const R = element.transport_map(ref);
76 cm = R * cm * R.transpose();
97 template <
typename T_Element>
109 throw std::runtime_error(
110 std::string(T_Element::type)
111 +
": Linear transport map is not yet implemented for this element."
127 std::is_base_of_v<LinearTransport, T_Element>,
128 "LinearTransport can only be used as a mixin class!"
131 T_Element
const & element = *
static_cast<T_Element const*
>(
this);
132 cm = element.transport_map(ref) * cm * element.transport_map(ref).transpose();
#define AMREX_FORCE_INLINE
Definition alignment.H:23
amrex::SmallMatrix< amrex::ParticleReal, 6, 6, amrex::Order::F, 1 > Map6x6
Definition CovarianceMatrix.H:20
Definition ReferenceParticle.H:33
AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 transport_map(RefPart const &AMREX_RESTRICT refpart) const
Definition lineartransport.H:107
static constexpr bool has_linear_transport
Definition lineartransport.H:100
Definition lineartransport.H:50
static constexpr bool has_linear_transport
Definition lineartransport.H:51
AMREX_GPU_HOST AMREX_FORCE_INLINE void operator()(Map6x6 &AMREX_RESTRICT cm, RefPart const &AMREX_RESTRICT ref) const
Definition lineartransport.H:62