2 #ifndef _PROTO_COMPOSITE_OP_ 3 #define _PROTO_COMPOSITE_OP_ 9 template<
typename T, std::size_t... I>
11 return std::make_tuple(v[I]...);
14 template<
typename T, std::
size_t N>
17 "Vector size %u is smaller than expected size %u", v.size(), N);
18 return tupleFromVector<T>(v, std::make_index_sequence<N>{});
20 template<
unsigned int NDOMAINS>
25 inline virtual std::array<Box, NDOMAINS>
domains(
const Box &rangeBox)
const = 0;
27 inline virtual Box range(
const std::array<Box, NDOMAINS> &domainBoxes)
const = 0;
29 template<
typename... Args>
32 static_assert((std::is_same_v<Box, Args>&& ...),
"All arguments must be of type Box");
34 domains.push_back(first);
35 (domains.push_back(boxes), ...);
37 "Incorrect number of domains (%u should be %u)", domains.size(), NDOMAINS);
38 std::array<Box, NDOMAINS> domainArray;
39 std::copy_n(domains.begin(), NDOMAINS, domainArray.begin());
40 return range(domainArray);
45 for (
auto B :
domains(rangeBox))
62 for (
int ii = 0; ii < DIM; ii++)
64 g[ii] = max(abs(H[ii]), abs(L[ii]));
71 template<
typename... Srcs>
72 inline std::array<Box, NDOMAINS>
getDomains(Srcs&... sources)
75 (domains.push_back(sources.box()), ...);
77 "incorrect number of arguments (detected %u, should be %u)",
78 domains.size(), NDOMAINS);
79 std::array<Box, NDOMAINS> domainArray;
80 std::copy_n(domains.begin(), NDOMAINS, domainArray.begin());
85 #include "operators/Proto_ConvolveOp.H" 86 #include "operators/Proto_DeconvolveOp.H" 87 #include "operators/Proto_ConvolveFaceOp.H" 88 #include "operators/Proto_DeconvolveFaceOp.H" 89 #include "operators/Proto_ConvolveEdgeOp.H" 90 #include "operators/Proto_DeconvolveEdgeOp.H" 92 #include "operators/Proto_FaceAverageDiffOp.H" 93 #include "operators/Proto_ProductOrQuotientAverageOp.H" 94 #include "operators/Proto_ProductAverageOp.H" 95 #include "operators/Proto_CellAverageProductOp.H" 96 #include "operators/Proto_FaceAverageProductOp.H" 97 #include "operators/Proto_EdgeAverageProductOp.H" 98 #include "operators/Proto_QuotientAverageOp.H" 99 #include "operators/Proto_CellAverageQuotientOp.H" 100 #include "operators/Proto_FaceAverageQuotientOp.H" 102 #include "operators/Proto_MatrixProductOp.H" 103 #include "operators/Proto_FaceAverageMatrixProductOp.H" 104 #include "operators/Proto_CellAverageMatrixProductOp.H" 105 #include "operators/Proto_FaceAverageTensorQuotientOp.H" 107 #include "operators/Proto_CrossProductOp.H" 108 #include "operators/Proto_EdgeAverageCrossProductOp.H" 110 #include "operators/Proto_FaceAverageSurfaceTransformOp.H" 111 #include "operators/Proto_FaceAverageAdjugateMatrixOp.H" 112 #include "operators/Proto_MappedFaceAverageDiffOp.H" ACCEL_DECORATION Point high() const
Access High Corner.
Definition: Proto_Box.H:174
Point ghost()
Definition: Proto_CompositeOp.H:51
std::array< Box, NDOMAINS > getDomains(Srcs &... sources)
Definition: Proto_CompositeOp.H:72
virtual Box range(const std::array< Box, NDOMAINS > &domainBoxes) const =0
Box domainUnion(const Box &rangeBox) const
Definition: Proto_CompositeOp.H:42
virtual std::array< Box, NDOMAINS > domains(const Box &rangeBox) const =0
An interval in DIM dimensional space.
Definition: Proto_Box.H:29
ACCEL_DECORATION Point low() const
Access Low Corner.
Definition: Proto_Box.H:167
#define PROTO_ASSERT(stmt, args...)
Definition: Proto_PAssert.H:48
static ACCEL_DECORATION Point Zeros()
Get Zeros.
Definition: Proto_Array.H:17
auto tupleFromVector(const std::vector< T > &v, std::index_sequence< I... >)
Definition: Proto_CompositeOp.H:10
Integer Valued Vector.
Definition: Proto_Point.H:24
Definition: Proto_CompositeOp.H:21
Box getRange(Box first, Args... boxes)
Definition: Proto_CompositeOp.H:30