53 void initialize(uint8_t degree, uint8_t dimensions,
const std::array<double, 3> &origin,
int nFields=1,
bool release =
true);
54 void clear(
bool release =
true);
58 const std::array<double, 3> &
getOrigin()
const;
71 void computeValue(
const std::array<double, 3> &point,
int field,
double *values)
const;
72 void computeValues(
const std::array<double, 3> &point,
double *values)
const;
73 void computeValues(
const std::array<double, 3> &point,
int nFields,
double *values)
const;
74 void computeValues(
const std::array<double, 3> &point,
int nFields,
int offset,
double *values)
const;
75 void computeValue(
int degree,
const std::array<double, 3> &point,
int field,
double *values)
const;
76 void computeValues(
int degree,
const std::array<double, 3> &point,
double *values)
const;
77 void computeValues(
int degree,
const std::array<double, 3> &point,
int nFields,
double *values)
const;
78 void computeValues(
int degree,
const std::array<double, 3> &point,
int nFields,
int offset,
double *values)
const;
80 void computeValueLimited(
const std::array<double, 3> &point,
const double *limiters,
int field,
double *value)
const;
81 void computeValuesLimited(
const std::array<double, 3> &point,
const double *limiters,
double *values)
const;
82 void computeValuesLimited(
const std::array<double, 3> &point,
const double *limiters,
int nFields,
double *values)
const;
83 void computeValuesLimited(
const std::array<double, 3> &point,
const double *limiters,
int nFields,
int offset,
double *values)
const;
84 void computeValueLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int field,
double *values)
const;
85 void computeValuesLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
double *values)
const;
86 void computeValuesLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int nFields,
double *values)
const;
87 void computeValuesLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int nFields,
int offset,
double *values)
const;
89 void computeDerivative(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int field,
double *derivative)
const;
90 void computeDerivatives(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *derivatives)
const;
91 void computeDerivatives(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int nFields,
double *derivatives)
const;
92 void computeDerivatives(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int nFields,
int offset,
double *derivatives)
const;
93 void computeDerivative(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int field,
double *derivative)
const;
94 void computeDerivatives(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *derivatives)
const;
95 void computeDerivatives(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int nFields,
double *derivatives)
const;
96 void computeDerivatives(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
int nFields,
int offset,
double *derivatives)
const;
98 void computeDerivativeLimited(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int field,
double *derivative)
const;
99 void computeDerivativesLimited(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
double *derivatives)
const;
100 void computeDerivativesLimited(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int nFields,
double *derivatives)
const;
101 void computeDerivativesLimited(
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int nFields,
int offset,
double *derivatives)
const;
102 void computeDerivativeLimited(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int field,
double *derivative)
const;
103 void computeDerivativesLimited(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
double *derivatives)
const;
104 void computeDerivativesLimited(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int nFields,
double *derivatives)
const;
105 void computeDerivativesLimited(
int degree,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
int nFields,
int offset,
double *derivatives)
const;
107 void computeGradient(
const std::array<double, 3> &point,
int field, std::array<double, 3> *gradient)
const;
108 void computeGradients(
const std::array<double, 3> &point, std::array<double, 3> *gradients)
const;
109 void computeGradients(
const std::array<double, 3> &point,
int nFields, std::array<double, 3> *gradients)
const;
110 void computeGradients(
const std::array<double, 3> &point,
int nFields,
int offset, std::array<double, 3> *gradients)
const;
111 void computeGradient(
int degree,
const std::array<double, 3> &point,
int field, std::array<double, 3> *gradient)
const;
112 void computeGradients(
int degree,
const std::array<double, 3> &point, std::array<double, 3> *gradients)
const;
113 void computeGradients(
int degree,
const std::array<double, 3> &point,
int nFields, std::array<double, 3> *gradients)
const;
114 void computeGradients(
int degree,
const std::array<double, 3> &point,
int nFields,
int offset, std::array<double, 3> *gradients)
const;
116 void computeGradientLimited(
const std::array<double, 3> &point,
const double *limiters,
int field, std::array<double, 3> *gradient)
const;
117 void computeGradientsLimited(
const std::array<double, 3> &point,
const double *limiters, std::array<double, 3> *gradients)
const;
118 void computeGradientsLimited(
const std::array<double, 3> &point,
const double *limiters,
int nFields, std::array<double, 3> *gradients)
const;
119 void computeGradientsLimited(
const std::array<double, 3> &point,
const double *limiters,
int nFields,
int offset, std::array<double, 3> *gradients)
const;
120 void computeGradientLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int field, std::array<double, 3> *gradient)
const;
121 void computeGradientsLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters, std::array<double, 3> *gradients)
const;
122 void computeGradientsLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int nFields, std::array<double, 3> *gradients)
const;
123 void computeGradientsLimited(
int degree,
const std::array<double, 3> &point,
const double *limiters,
int nFields,
int offset, std::array<double, 3> *gradients)
const;
125 void display(std::ostream &out)
const;
139 static void evalPointBasisValues(uint8_t degree, uint8_t dimensions,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
double *csi);
140 static void evalPointBasisDerivatives(uint8_t degree, uint8_t dimensions,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *dcsi);
142 static void evalCellBasisValues(uint8_t degree, uint8_t dimensions,
const std::array<double, 3> &origin,
const Cell &cell,
const std::array<double, 3> *vertexCoords,
double *csi);
145 static const bool ENABLE_FAST_PATH_OPTIMIZATIONS;
146 static const int MAX_STACK_WORKSPACE_SIZE;
148 const static std::vector<std::vector<uint16_t>> m_countCoefficientCache;
149 const static std::vector<std::vector<uint16_t>> m_countDegreeCoefficientCache;
151 static std::vector<std::vector<uint16_t>> generateCountCoefficientCache();
152 static std::vector<std::vector<uint16_t>> generateCountDegreeCoefficientCache();
155 uint8_t m_dimensions;
160 std::unique_ptr<double[]> m_coeffs;
162 std::array<double, 3> m_origin;
164 std::size_t computeFieldCoefficientsOffset(uint8_t degree,
int field)
const;
165 std::size_t getFieldCoefficientsStride()
const;
182 void initialize(uint8_t degree, uint8_t dimensions,
int nEquations,
bool release =
true);
204 void computeValueWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
double *valueWeights)
const;
205 void computeValueWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
double *valueWeights)
const;
206 void computeValueWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
double *valueWeights)
const;
207 void computeValueLimitedWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters,
double *valueWeights)
const;
208 void computeValueLimitedWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters,
double *valueWeights)
const;
209 void computeValueLimitedWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters,
double *valueWeights)
const;
211 void computeDerivativeWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *derivativeWeights)
const;
212 void computeDerivativeWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *derivativeWeights)
const;
213 void computeDerivativeWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
double *derivativeWeights)
const;
214 void computeDerivativeLimitedWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
double *derivativeWeights)
const;
215 void computeDerivativeLimitedWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
double *derivativeWeights)
const;
216 void computeDerivativeLimitedWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const std::array<double, 3> &direction,
const double *limiters,
double *derivativeWeights)
const;
218 void computeGradientWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point, std::array<double, 3> *gradientWeights)
const;
219 void computeGradientWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point, std::array<double, 3> *gradientWeights)
const;
220 void computeGradientWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point, std::array<double, 3> *gradientWeights)
const;
221 void computeGradientLimitedWeights(
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters, std::array<double, 3> *gradientWeights)
const;
222 void computeGradientLimitedWeights(uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters, std::array<double, 3> *gradientWeights)
const;
223 void computeGradientLimitedWeights(
int nEquations, uint8_t degree,
const std::array<double, 3> &origin,
const std::array<double, 3> &point,
const double *limiters, std::array<double, 3> *gradientWeights)
const;
225 void display(std::ostream &out,
double tolerance = 1.e-10)
const;
228 void applyLimiter(uint8_t degree,
const double *limiters,
double *coeffs)
const;
231 static const bool ENABLE_FAST_PATH_OPTIMIZATIONS;
232 static const int MAX_STACK_WORKSPACE_SIZE;
234 std::unique_ptr<double[]> m_weights;
241 uint8_t m_dimensions;