35 #ifndef NEKTAR_LIB_UTILITIES_BASIC_UTILS_SHAPE_TYPE_H
36 #define NEKTAR_LIB_UTILITIES_BASIC_UTILS_SHAPE_TYPE_H
48 namespace LibUtilities
113 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
114 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
115 ASSERTL1(Na <= Nb,
"order in 'a' direction is higher "
116 "than order in 'b' direction");
117 return Na*(Na+1)/2 + Na*(Nb-Na);
122 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
123 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
124 ASSERTL1(Na <= Nb,
"order in 'a' direction is higher "
125 "than order in 'b' direction");
126 return (Na-1) + 2*(Nb-1);
130 namespace StdQuadData
134 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
135 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
141 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
142 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
143 return 2*(Na-1) + 2*(Nb-1);
153 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
154 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
155 ASSERTL2(Nc > 1,
"Order in 'c' direction must be > 1.");
161 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
162 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
163 ASSERTL2(Nc > 1,
"Order in 'c' direction must be > 1.");
164 return 2*Na*Nb + 2*Na*Nc + 2*Nb*Nc
165 - 4*(Na + Nb + Nc) + 8;
188 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
189 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
190 ASSERTL2(Nc > 1,
"Order in 'c' direction must be > 1.");
191 ASSERTL1(Na <= Nc,
"order in 'a' direction is higher "
192 "than order in 'c' direction");
193 ASSERTL1(Nb <= Nc,
"order in 'b' direction is higher "
194 "than order in 'c' direction");
196 for (
int a = 0; a < Na; ++a)
198 for (
int b = 0; b < Nb - a; ++b)
200 for (
int c = 0; c < Nc - a - b; ++c)
211 ASSERTL2(Na > 1,
"Order in 'a' direction must be > 1.");
212 ASSERTL2(Nb > 1,
"Order in 'b' direction must be > 1.");
213 ASSERTL2(Nc > 1,
"Order in 'c' direction must be > 1.");
214 ASSERTL1(Na <= Nc,
"order in 'a' direction is higher "
215 "than order in 'c' direction");
216 ASSERTL1(Nb <= Nc,
"order in 'b' direction is higher "
217 "than order in 'c' direction");
219 int nCoef = Na*(Na+1)/2 + (Nb-Na)*Na
220 + Na*(Na+1)/2 + (Nc-Na)*Na
221 + 2*(Nb*(Nb+1)/2 + (Nc-Nb)*Nb)
234 ASSERTL1(Na > 1,
"Order in 'a' direction must be > 1.");
235 ASSERTL1(Nb > 1,
"Order in 'b' direction must be > 1.");
236 ASSERTL1(Nc > 1,
"Order in 'c' direction must be > 1.");
237 ASSERTL1(Na <= Nc,
"Order in 'a' direction is higher "
238 "than order in 'c' direction.");
239 ASSERTL1(Nb <= Nc,
"Order in 'b' direction is higher "
240 "than order in 'c' direction.");
243 const int Pi = Na - 2, Qi = Nb - 2, Ri = Nc - 2;
246 Pi * 2 + Qi * 2 + Ri * 4 +
248 Pi * (2*Ri - Pi - 1) +
249 Qi * (2*Ri - Qi - 1);
252 for (
int a = 0; a < Pi - 1; ++a)
254 for (
int b = 0; b < Qi - a - 1; ++b)
256 for (
int c = 0; c < Ri - a - b -1; ++c)
268 ASSERTL1(Na > 1,
"Order in 'a' direction must be > 1.");
269 ASSERTL1(Nb > 1,
"Order in 'b' direction must be > 1.");
270 ASSERTL1(Nc > 1,
"Order in 'c' direction must be > 1.");
271 ASSERTL1(Na <= Nc,
"Order in 'a' direction is higher "
272 "than order in 'c' direction.");
273 ASSERTL1(Nb <= Nc,
"Order in 'b' direction is higher "
274 "than order in 'c' direction.");
277 + 2*(Na*(Na+1)/2 + (Nc-Na)*Na)
278 + 2*(Nb*(Nb+1)/2 + (Nc-Nb)*Nb)
284 namespace StdPrismData
288 ASSERTL1(Na > 1,
"Order in 'a' direction must be > 1.");
289 ASSERTL1(Nb > 1,
"Order in 'b' direction must be > 1.");
290 ASSERTL1(Nc > 1,
"Order in 'c' direction must be > 1.");
291 ASSERTL1(Na <= Nc,
"Order in 'a' direction is higher "
292 "than order in 'c' direction.");
299 ASSERTL1(Na > 1,
"Order in 'a' direction must be > 1.");
300 ASSERTL1(Nb > 1,
"Order in 'b' direction must be > 1.");
301 ASSERTL1(Nc > 1,
"Order in 'c' direction must be > 1.");
302 ASSERTL1(Na <= Nc,
"Order in 'a' direction is higher "
303 "than order in 'c' direction.");
305 return Na*Nb + 2*Nb*Nc
306 + 2*( Na*(Na+1)/2 + (Nc-Na)*Na )
318 returnval = modes[offset];
324 returnval = modes[offset]*modes[offset+1];
336 returnval = modes[offset]*modes[offset+1]*modes[offset+2];
339 ASSERTL0(
false,
"Unknown Shape Type");
371 returnval = na*nb*nc;
374 ASSERTL0(
false,
"Unknown Shape Type");
#define ASSERTL0(condition, msg)
int getNumberOfBndCoefficients(int Na, int Nb)
int getNumberOfCoefficients(int Na, int Nb, int Nc)
int getNumberOfBndCoefficients(int Na, int Nb, int Nc)
int getNumberOfBndCoefficients(int Na, int Nb, int Nc)
int getNumberOfCoefficients(int Na, int Nb, int Nc)
const char *const ShapeTypeMap[]
int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset)
int getNumberOfCoefficients(int Na)
int getNumberOfCoefficients(int Na, int Nb)
int getNumberOfBndCoefficients(int Na)
int getNumberOfBndCoefficients(int Na, int Nb)
int getNumberOfCoefficients(int Na, int Nb, int Nc)
int getNumberOfBndCoefficients(int Na, int Nb, int Nc)
int getNumberOfCoefficients(int Na, int Nb)
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
int getNumberOfCoefficients(int Na, int Nb, int Nc)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
int getNumberOfBndCoefficients(int Na, int Nb, int Nc)
const unsigned int ShapeTypeDimMap[SIZE_ShapeType]