DDC 0.10.0
Loading...
Searching...
No Matches
spline_traits.hpp
1// Copyright (C) The DDC development team, see COPYRIGHT.md file
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <type_traits>
8
9#include "spline_boundary_conditions.hpp"
10#include "spline_builder.hpp"
11#include "spline_builder_2d.hpp"
12#include "spline_evaluator.hpp"
13#include "spline_evaluator_2d.hpp"
14
15namespace ddc {
16
17template <class T>
18struct is_spline_builder : std::false_type
19{
20};
21
22template <
23 class ExecSpace,
24 class MemorySpace,
25 class BSplines,
26 class InterpolationDDim,
27 ddc::BoundCond BcLower,
28 ddc::BoundCond BcUpper,
29 SplineSolver Solver>
31 ExecSpace,
32 MemorySpace,
33 BSplines,
34 InterpolationDDim,
35 BcLower,
36 BcUpper,
37 Solver>> : std::true_type
38{
39};
40
41/**
42 * @brief A helper to check if T is a SplineBuilder
43 * @tparam T The type to be checked if is a SplineBuilder
44 */
45template <class T>
46inline constexpr bool is_spline_builder_v = is_spline_builder<T>::value;
47
48template <class T>
49struct is_spline_builder2d : std::false_type
50{
51};
52
53template <
54 class ExecSpace,
55 class MemorySpace,
56 class BSpline1,
57 class BSpline2,
58 class DDimI1,
59 class DDimI2,
60 ddc::BoundCond BcLower1,
61 ddc::BoundCond BcUpper1,
62 ddc::BoundCond BcLower2,
63 ddc::BoundCond BcUpper2,
64 ddc::SplineSolver Solver>
66 ExecSpace,
67 MemorySpace,
68 BSpline1,
69 BSpline2,
70 DDimI1,
71 DDimI2,
72 BcLower1,
73 BcUpper1,
74 BcLower2,
75 BcUpper2,
76 Solver>> : std::true_type
77{
78};
79
80/**
81 * @brief A helper to check if T is a SplineBuilder2D
82 * @tparam T The type to be checked if is a SplineBuilder2D
83 */
84template <class T>
85inline constexpr bool is_spline_builder2d_v = is_spline_builder2d<T>::value;
86
87template <class T>
88struct is_spline_evaluator : std::false_type
89{
90};
91
92template <
93 class ExecSpace,
94 class MemorySpace,
95 class BSplines,
96 class EvaluationDDim,
97 class LowerExtrapolationRule,
98 class UpperExtrapolationRule>
100 ExecSpace,
101 MemorySpace,
102 BSplines,
103 EvaluationDDim,
104 LowerExtrapolationRule,
105 UpperExtrapolationRule>> : std::true_type
106{
107};
108
109/**
110 * @brief A helper to check if T is a SplineEvaluator
111 * @tparam T The type to be checked if is a SplineEvaluator
112 */
113template <class T>
114inline constexpr bool is_spline_evaluator_v = is_spline_evaluator<T>::value;
115
116template <class T>
117struct is_spline_evaluator2d : std::false_type
118{
119};
120
121template <
122 class ExecSpace,
123 class MemorySpace,
124 class BSpline1,
125 class BSpline2,
126 class EvaluationDDim1,
127 class EvaluationDDim2,
128 class LowerExtrapolationRule1,
129 class UpperExtrapolationRule1,
130 class LowerExtrapolationRule2,
131 class UpperExtrapolationRule2>
133 ExecSpace,
134 MemorySpace,
135 BSpline1,
136 BSpline2,
137 EvaluationDDim1,
138 EvaluationDDim2,
139 LowerExtrapolationRule1,
140 UpperExtrapolationRule1,
141 LowerExtrapolationRule2,
142 UpperExtrapolationRule2>> : std::true_type
143{
144};
145
146/**
147 * @brief A helper to check if T is a SplineEvaluator2D
148 * @tparam T The type to be checked if is a SplineEvaluator2D
149 */
150template <class T>
151inline constexpr bool is_spline_evaluator2d_v = is_spline_evaluator2d<T>::value;
152
153template <class Builder, class Evaluator>
154struct is_evaluator_admissible : std::false_type
155{
156};
157
158template <
159 class ExecSpace,
160 class MemorySpace,
161 class BSplines,
162 class InterpolationDDim,
163 ddc::BoundCond BcLower,
164 ddc::BoundCond BcUpper,
165 SplineSolver Solver,
166 class LowerExtrapolationRule,
167 class UpperExtrapolationRule>
170 ExecSpace,
171 MemorySpace,
172 BSplines,
173 InterpolationDDim,
174 BcLower,
175 BcUpper,
176 Solver>,
178 ExecSpace,
179 MemorySpace,
180 BSplines,
181 InterpolationDDim,
182 LowerExtrapolationRule,
183 UpperExtrapolationRule>> : std::true_type
184{
185};
186
187template <
188 class ExecSpace,
189 class MemorySpace,
190 class BSplines1,
191 class BSplines2,
192 class DDimI1,
193 class DDimI2,
194 ddc::BoundCond BcLower1,
195 ddc::BoundCond BcUpper1,
196 ddc::BoundCond BcLower2,
197 ddc::BoundCond BcUpper2,
198 SplineSolver Solver,
199 class LowerExtrapolationRule1,
200 class UpperExtrapolationRule1,
201 class LowerExtrapolationRule2,
202 class UpperExtrapolationRule2>
205 ExecSpace,
206 MemorySpace,
207 BSplines1,
208 BSplines2,
209 DDimI1,
210 DDimI2,
211 BcLower1,
212 BcUpper1,
213 BcLower2,
214 BcUpper2,
215 Solver>,
217 ExecSpace,
218 MemorySpace,
219 BSplines1,
220 BSplines2,
221 DDimI1,
222 DDimI2,
223 LowerExtrapolationRule1,
224 UpperExtrapolationRule1,
225 LowerExtrapolationRule2,
226 UpperExtrapolationRule2>> : std::true_type
227{
228};
229
230/**
231 * @brief A helper to check if SplineEvaluator is admissible for SplineBuilder
232 * @tparam Builder The builder type to be checked if it is admissible for Evaluator
233 * @tparam Evaluator The evaluator type to be checked if it is admissible for Builder
234 */
235template <class Builder, class Evaluator>
236inline constexpr bool is_evaluator_admissible_v
238
239} // namespace ddc
A class for creating a 2D spline approximation of a function.
A class for creating a spline approximation of a function.
A class to evaluate, differentiate or integrate a 2D spline function.
A class to evaluate, differentiate or integrate a spline function.
The top-level namespace of DDC.
constexpr bool is_spline_builder_v
A helper to check if T is a SplineBuilder.
BoundCond
An enum representing a spline boundary condition.
constexpr bool is_spline_evaluator2d_v
A helper to check if T is a SplineEvaluator2D.
SplineSolver
An enum determining the backend solver of a SplineBuilder or SplineBuilder2d.
constexpr bool is_spline_builder2d_v
A helper to check if T is a SplineBuilder2D.
constexpr bool is_spline_evaluator_v
A helper to check if T is a SplineEvaluator.
constexpr bool is_evaluator_admissible_v
A helper to check if SplineEvaluator is admissible for SplineBuilder.