24#define DNDS_EULERP_IMPL_ARG_GET_REF(member) auto &member = arg.member;
25#define DNDS_EULERP_IMPL_ARG_GET_REF_PORTABLE(member) auto &member = arg.portable.member;
27#define DNDS_EULERP_IMPL_ARG_CTOR_INIT_SELF() \
29 this_v(self.template deviceView<B>()), \
31#define DNDS_EULERP_IMPL_ARG_CTOR_INIT_SSPARR(member) \
32 member(arg.member->template deviceView<B>())
33#define DNDS_EULERP_IMPL_ARG_CTOR_INIT_VECSSPARR(member, member_v) \
34 member_v(arg.member.size(), [&](int i) \
35 { return arg.member.at(i)->template deviceView<B>(); }), \
36 member((member_v).deviceView())
38#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_SSPARR(member) \
40 portable.member = arg.member->template deviceView<B>(); \
42#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_SSPARR_BUF(member, buf_name) \
44 portable.member = (buf_name).template deviceView<B>(); \
46#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_VECSSPARR(member, member_v) \
49 member_v = std::make_unique<typename decltype(member_v)::element_type>( \
50 arg.member.size(), [&](int i) \
51 { return arg.member.at(i)->template deviceView<B>(); }); \
52 portable.member = (member_v)->deviceView(); \
55#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_VECSSPARR_BUF(member, member_v, buf_name) \
58 member_v = std::make_unique<typename decltype(member_v)::element_type>( \
59 (buf_name).size(), [&](int i) \
60 { return (buf_name).at(i).template deviceView<B>(); }); \
61 portable.member = (member_v)->deviceView(); \
77 template <DeviceBackend B>
108 static_assert(std::is_trivially_copyable_v<Portable>);
174 static_assert(std::is_trivially_copyable_v<Portable>);
231 static_assert(std::is_trivially_copyable_v<Portable>);
279 static_assert(std::is_trivially_copyable_v<Portable>);
332 static_assert(std::is_trivially_copyable_v<Portable>);
414 static_assert(std::is_trivially_copyable_v<Portable>);
Main evaluator class for the EulerP compressible Navier-Stokes solver module.
#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_SSPARR(member)
#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_VECSSPARR_BUF(member, member_v, buf_name)
#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_SSPARR_BUF(member, buf_name)
#define DNDS_EULERP_IMPL_ARG_CTOR_INIT_SELF()
#define DNDS_EULERP_IMPL_ARG_CTOR_PORTABLE_COPY_VECSSPARR(member, member_v)
Mutable device view of an ArrayDof father/son pair.
ArrayDofDeviceView< B, n_m, n_n > t_deviceView
Mutable device view alias.
Device-callable view of the Evaluator, combining finite volume, BC handler, and physics views.
Main EulerP evaluator orchestrating CFD kernel dispatch for compressible N-S solvers.
TUDof u_face_bufferL
Left-side face DOF buffer for boundary value storage.
std::vector< TUScalar > uScalar_face_bufferL
Left-side face scalar buffers for additional transported scalars.
Non-owning device-callable view {pointer, size} over a typed array.
Namespace for the EulerP alternative evaluator module with GPU support.
Packed argument struct for conservative-to-primitive conversion with viscosity computation.
Packed argument struct for conservative-to-primitive conversion without gradients or viscosity.
Packed argument struct for eigenvalue estimation and local time-step computation.
Packed argument struct for 2nd-order inviscid (and eventually viscous) flux evaluation.
Packed argument struct for 2nd-order face value reconstruction.
Packed argument struct for Green-Gauss gradient reconstruction with Barth-Jespersen limiting.
Non-trivially-copyable device view holding shared_ptr to fv and device views of BC/physics.
Trivially-copyable payload for Cons2PrimMu kernel data.
vector_DeviceView< B, TUScalar::t_deviceView< B > > muComp
Component viscosities output (device view).
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGrad
Scalar gradients (device view).
TUDof::t_deviceView< B > uPrim
Primitive state output (device view).
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalar
Transported scalars (device view).
TUGrad::t_deviceView< B > uGradPrim
Primitive gradient output (device view).
TUScalar::t_deviceView< B > a
Speed of sound output (device view).
TUScalar::t_deviceView< B > T
Temperature output (device view).
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGradPrim
Primitive scalar gradients output (device view).
TUScalar::t_deviceView< B > gamma
Gamma output (device view).
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarPrim
Primitive scalars output (device view).
TUScalar::t_deviceView< B > p
Pressure output (device view).
TUDof::t_deviceView< B > u
Conservative state (device view).
TUScalar::t_deviceView< B > mu
Total viscosity output (device view).
TUGrad::t_deviceView< B > uGrad
Gradient of conservative state (device view).
Device-side argument struct for conservative-to-primitive + viscosity kernel.
t_ScalarGrad_deviceViewVector_sup uScalarGrad_v
t_Scalar_deviceViewVector_sup uScalar_v
EvaluatorDeviceView< B > self_view
must keep this alive
struct DNDS::EulerP::Evaluator_impl::Cons2PrimMu_Arg::Portable portable
Cons2PrimMu_Arg(Evaluator &self_, Evaluator::Cons2PrimMu_Arg &arg)
t_Scalar_deviceViewVector_sup muComp_v
Evaluator::t_deviceView< B > this_v
t_Scalar_deviceViewVector_sup uScalarPrim_v
t_ScalarGrad_deviceViewVector_sup uScalarGradPrim_v
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalar
TUScalar::t_deviceView< B > p
TUScalar::t_deviceView< B > a
TUScalar::t_deviceView< B > gamma
TUDof::t_deviceView< B > u
TUDof::t_deviceView< B > uPrim
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarPrim
TUScalar::t_deviceView< B > T
Device-side argument struct for conservative-to-primitive conversion (no gradients/viscosity).
struct DNDS::EulerP::Evaluator_impl::Cons2Prim_Arg::Portable portable
t_Scalar_deviceViewVector_sup uScalar_v
Cons2Prim_Arg(Evaluator &self_, Evaluator::Cons2Prim_Arg &arg)
Evaluator::t_deviceView< B > this_v
EvaluatorDeviceView< B > self_view
must keep this alive
t_Scalar_deviceViewVector_sup uScalarPrim_v
TUScalar::t_deviceView< B > faceLamVisEst
TUScalar::t_deviceView< B > dt
TUScalar::t_deviceView< B > deltaLamFace
TUScalar::t_deviceView< B > aCell
TUDof::t_deviceView< B > u
TUScalar::t_deviceView< B > muCell
TUScalarGrad::t_deviceView< B > faceLamEst
TUScalar::t_deviceView< B > deltaLamCell
Device-side argument struct for eigenvalue estimation and time-step computation.
struct DNDS::EulerP::Evaluator_impl::EstEigenDt_Arg::Portable portable
EstEigenDt_Arg(Evaluator &self_, Evaluator::EstEigenDt_Arg &arg)
EvaluatorDeviceView< B > self_view
must keep this alive
Evaluator::t_deviceView< B > this_v
TUScalar::t_deviceView< B > pFR
TUScalar::t_deviceView< B > mu
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarFR
TUScalar::t_deviceView< B > a
vector_DeviceView< B, TUScalar::t_deviceView< B > > rhsScalar
TUGrad::t_deviceView< B > uGradFF
vector_DeviceView< B, TUScalar::t_deviceView< B > > fluxScalarFF
TUDof::t_deviceView< B > uPrim
TUScalar::t_deviceView< B > pFL
TUGrad::t_deviceView< B > uGradPrim
TUScalar::t_deviceView< B > p
TUScalar::t_deviceView< B > T
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGradPrim
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarFL
TUDof::t_deviceView< B > uFL
TUDof::t_deviceView< B > uFR
TUDof::t_deviceView< B > rhs
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalar
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGradFF
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGrad
TUDof::t_deviceView< B > u
TUScalar::t_deviceView< B > gamma
TUScalar::t_deviceView< B > deltaLamCell
vector_DeviceView< B, TUScalar::t_deviceView< B > > muComp
TUDof::t_deviceView< B > fluxFF
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarPrim
TUGrad::t_deviceView< B > uGrad
Device-side argument struct for 2nd-order flux evaluation and RHS accumulation.
t_Scalar_deviceViewVector_sup uScalarFR_v
Flux2nd_Arg(Evaluator &self_, Evaluator::Flux2nd_Arg &arg)
t_ScalarGrad_deviceViewVector_sup uScalarGrad_v
Evaluator::t_deviceView< B > this_v
struct DNDS::EulerP::Evaluator_impl::Flux2nd_Arg::Portable portable
t_Scalar_deviceViewVector_sup fluxScalarFF_v
t_Scalar_deviceViewVector_sup rhsScalar_v
t_ScalarGrad_deviceViewVector_sup uScalarGradPrim_v
t_Scalar_deviceViewVector_sup uScalar_v
EvaluatorDeviceView< B > self_view
must keep this alive
t_Scalar_deviceViewVector_sup muComp_v
t_ScalarGrad_deviceViewVector_sup uScalarGradFF_v
t_Scalar_deviceViewVector_sup uScalarFL_v
t_Scalar_deviceViewVector_sup uScalarPrim_v
TUDof::t_deviceView< B > uFR
TUGrad::t_deviceView< B > uGrad
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGrad
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarFL
TUDof::t_deviceView< B > u
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalarFR
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGradFF
TUDof::t_deviceView< B > uFL
TUGrad::t_deviceView< B > uGradFF
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalar
Device-side argument struct for 2nd-order face value reconstruction.
RecFace2nd_Arg(Evaluator &self_, Evaluator::RecFace2nd_Arg &arg)
t_ScalarGrad_deviceViewVector_sup uScalarGrad_v
t_Scalar_deviceViewVector_sup uScalarFL_v
struct DNDS::EulerP::Evaluator_impl::RecFace2nd_Arg::Portable portable
Evaluator::t_deviceView< B > this_v
EvaluatorDeviceView< B > self_view
must keep this alive
t_ScalarGrad_deviceViewVector_sup uScalarGradFF_v
t_Scalar_deviceViewVector_sup uScalar_v
t_Scalar_deviceViewVector_sup uScalarFR_v
Trivially-copyable payload holding device views of all kernel data.
TUGrad::t_deviceView< B > uGrad
Gradient of conservative state (device view).
vector_DeviceView< B, TUScalarGrad::t_deviceView< B > > uScalarGrad
Gradients of transported scalars (device view).
vector_DeviceView< B, TUScalar::t_deviceView< B > > uScalar
Transported scalar fields (device view).
TUDof::t_deviceView< B > u
Conservative state (device view).
TUDof::t_deviceView< B > faceBCBuffer
Face BC ghost DOF buffer (device view).
vector_DeviceView< B, TUScalar::t_deviceView< B > > faceBCScalarBuffer
Face BC ghost scalar buffers (device view).
Device-side argument struct for gradient reconstruction kernels.
t_ScalarGrad_deviceViewVector_sup uScalarGrad_v
Owning storage for scalar gradient device views.
EvaluatorDeviceView< B > self_view
must keep this alive
t_Scalar_deviceViewVector_sup faceBCScalarBuffer_v
Owning storage for face BC scalar buffer device views.
Evaluator::t_deviceView< B > this_v
t_Scalar_deviceViewVector_sup uScalar_v
Owning storage for scalar field device views.
RecGradient_Arg(Evaluator &self_, Evaluator::RecGradient_Arg &arg)
Constructs device views from the host-side RecGradient_Arg.
struct DNDS::EulerP::Evaluator_impl::RecGradient_Arg::Portable portable
Backend-specific implementation of EulerP Evaluator kernels.
static void Flux2nd(Flux2nd_Arg &arg)
Evaluates 2nd-order Roe flux per face and scatters to cell RHS.
static void Cons2PrimMu(Cons2PrimMu_Arg &arg)
Executes conservative-to-primitive conversion with viscosity computation.
static void EstEigenDt_GetFaceLam(EstEigenDt_Arg &arg)
First pass: computes per-face eigenvalue estimates from cell states.
std::unique_ptr< deviceViewVector< TUScalar::t_deviceView< B >, B > > t_Scalar_deviceViewVector_sup
Unique pointer to a device view vector of scalar array views.
static void Cons2Prim(Cons2Prim_Arg &arg)
Executes conservative-to-primitive conversion (no gradients/viscosity).
static void EstEigenDt_FaceLam2CellDt(EstEigenDt_Arg &arg)
Second pass: accumulates face eigenvalues to cells and computes local dt.
static void RecFace2nd(RecFace2nd_Arg &arg)
Executes 2nd-order face value reconstruction from cell-centered data.
std::unique_ptr< deviceViewVector< TUScalarGrad::t_deviceView< B >, B > > t_ScalarGrad_deviceViewVector_sup
Unique pointer to a device view vector of scalar-gradient array views.
static void RecGradient_BarthLimiter(RecGradient_Arg &arg)
Barth-Jespersen gradient limiter applied to reconstructed gradients.
static void RecGradient_GGRec(RecGradient_Arg &arg)
Green-Gauss gradient reconstruction: boundary ghost values + cell gradient computation.