Loading...
Searching...
No Matches
reconstruction.cpp
68const std::vector<std::vector<uint16_t>> ReconstructionPolynomial::m_countCoefficientCache = generateCountCoefficientCache();
74const std::vector<std::vector<uint16_t>> ReconstructionPolynomial::m_countDegreeCoefficientCache = generateCountDegreeCoefficientCache();
81 std::vector<std::vector<uint16_t>> cache(MAX_DIMENSIONS + 1, std::vector<uint16_t>(MAX_DEGREE + 1, 0));
95std::vector<std::vector<uint16_t>> ReconstructionPolynomial::generateCountDegreeCoefficientCache()
97 std::vector<std::vector<uint16_t>> cache(MAX_DIMENSIONS + 1, std::vector<uint16_t>(MAX_DEGREE + 1, 0));
183const std::vector<uint16_t> & ReconstructionPolynomial::getDegreeCoefficientsCount(uint8_t dimensions)
205 return static_cast<uint16_t>(utils::factorial(dimensions - 1 + degree) / utils::factorial(dimensions - 1) / utils::factorial(degree));
218void ReconstructionPolynomial::evalPointBasisValues(uint8_t degree, uint8_t dimensions, const std::array<double, 3> &origin,
267void ReconstructionPolynomial::evalPointBasisDerivatives(uint8_t degree, uint8_t dimensions, const std::array<double, 3> &origin,
338void ReconstructionPolynomial::evalCellBasisValues(uint8_t degree, uint8_t dimensions, const std::array<double, 3> &origin,
435 : ReconstructionPolynomial(other.getDegree(), other.getDimensions(), other.m_origin, other.m_nFields)
673std::size_t ReconstructionPolynomial::computeFieldCoefficientsOffset(uint8_t degree, int field) const
937void ReconstructionPolynomial::computeValueLimited(int degree, const std::array<double, 3> &point,
957void ReconstructionPolynomial::computeValuesLimited(int degree, const std::array<double, 3> &point,
978void ReconstructionPolynomial::computeValuesLimited(int degree, const std::array<double, 3> &point,
1000void ReconstructionPolynomial::computeValuesLimited(int degree, const std::array<double, 3> &point,
1042 const std::vector<uint16_t> &nDegreeCoeffs = ReconstructionPolynomial::getDegreeCoefficientsCount(m_dimensions);
1140void ReconstructionPolynomial::computeDerivative(int degree, const std::array<double, 3> &point,
1155void ReconstructionPolynomial::computeDerivatives(int degree, const std::array<double, 3> &point,
1171void ReconstructionPolynomial::computeDerivatives(int degree, const std::array<double, 3> &point,
1188void ReconstructionPolynomial::computeDerivatives(int degree, const std::array<double, 3> &point,
1241 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, direction, csi);
1357void ReconstructionPolynomial::computeDerivativeLimited(int degree, const std::array<double, 3> &point,
1379void ReconstructionPolynomial::computeDerivativesLimited(int degree, const std::array<double, 3> &point,
1402void ReconstructionPolynomial::computeDerivativesLimited(int degree, const std::array<double, 3> &point,
1426void ReconstructionPolynomial::computeDerivativesLimited(int degree, const std::array<double, 3> &point,
1486 const std::vector<uint16_t> &nDegreeCoeffs = ReconstructionPolynomial::getDegreeCoefficientsCount(m_dimensions);
1489 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, direction, dcsi);
1674 BITPIT_CREATE_WORKSPACE(dcsi, double, static_cast<std::size_t>(m_dimensions * m_nCoeffs), 3 * MAX_STACK_WORKSPACE_SIZE);
1675 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{1., 0., 0.}}, dcsi);
1676 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{0., 1., 0.}}, dcsi + m_nCoeffs);
1678 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{0., 0., 1.}}, dcsi + 2 * m_nCoeffs);
1797void ReconstructionPolynomial::computeGradientLimited(int degree, const std::array<double, 3> &point,
1817void ReconstructionPolynomial::computeGradientsLimited(int degree, const std::array<double, 3> &point,
1838void ReconstructionPolynomial::computeGradientsLimited(int degree, const std::array<double, 3> &point,
1860void ReconstructionPolynomial::computeGradientsLimited(int degree, const std::array<double, 3> &point,
1923 const std::vector<uint16_t> &nDegreeCoeffs = ReconstructionPolynomial::getDegreeCoefficientsCount(m_dimensions);
1925 BITPIT_CREATE_WORKSPACE(dcsi, double, static_cast<std::size_t>(m_dimensions * nDegreeCoeffs[degree]), 3 * MAX_STACK_WORKSPACE_SIZE);
1926 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{1., 0., 0.}}, dcsi);
1927 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{0., 1., 0.}}, dcsi + nDegreeCoeffs[degree]);
1929 ReconstructionPolynomial::evalPointBasisDerivatives(degree, m_dimensions, m_origin, point, {{0., 0., 1.}}, dcsi + 2 * nDegreeCoeffs[degree]);
2090void ReconstructionKernel::initialize(uint8_t degree, uint8_t dimensions, int nEquations, bool release)
2255void ReconstructionKernel::assemblePolynomial(uint8_t degree, const std::array<double, 3> &origin,
2288void ReconstructionKernel::assemblePolynomial(uint8_t degree, const std::array<double, 3> &origin,
2472 computeValueLimitedWeights(getEquationCount(), getDegree(), origin, point, nullptr, valueWeights);
2493void ReconstructionKernel::computeValueWeights(uint8_t degree, const std::array<double, 3> &origin,
2519void ReconstructionKernel::computeValueWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
2546void ReconstructionKernel::computeValueLimitedWeights(const std::array<double, 3> &origin, const std::array<double, 3> &point,
2549 computeValueLimitedWeights(getEquationCount(), getDegree(), origin, point, limiters, valueWeights);
2574void ReconstructionKernel::computeValueLimitedWeights(uint8_t degree, const std::array<double, 3> &origin,
2607void ReconstructionKernel::computeValueLimitedWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
2664 computeDerivativeLimitedWeights(getEquationCount(), getDegree(), origin, point, direction, nullptr, derivativeWeights);
2687void ReconstructionKernel::computeDerivativeWeights(uint8_t degree, const std::array<double, 3> &origin,
2691 computeDerivativeLimitedWeights(getEquationCount(), degree, origin, point, direction, nullptr, derivativeWeights);
2715void ReconstructionKernel::computeDerivativeWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
2719 computeDerivativeLimitedWeights(nEquations, degree, origin, point, direction, nullptr, derivativeWeights);
2750 computeDerivativeLimitedWeights(getEquationCount(), getDegree(), origin, point, direction, limiters, derivativeWeights);
2780void ReconstructionKernel::computeDerivativeLimitedWeights(uint8_t degree, const std::array<double, 3> &origin,
2785 computeDerivativeLimitedWeights(getEquationCount(), degree, origin, point, direction, limiters, derivativeWeights);
2816void ReconstructionKernel::computeDerivativeLimitedWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
2836 ReconstructionPolynomial::evalPointBasisDerivatives(degree, dimensions, origin, point, direction, dcsi);
2868 computeGradientLimitedWeights(getEquationCount(), getDegree(), origin, point, nullptr, gradientWeights);
2889void ReconstructionKernel::computeGradientWeights(uint8_t degree, const std::array<double, 3> &origin,
2893 computeGradientLimitedWeights(getEquationCount(), degree, origin, point, nullptr, gradientWeights);
2915void ReconstructionKernel::computeGradientWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
2946 computeGradientLimitedWeights(getEquationCount(), getDegree(), origin, point, limiters, gradientWeights);
2973void ReconstructionKernel::computeGradientLimitedWeights(uint8_t degree, const std::array<double, 3> &origin,
2977 computeGradientLimitedWeights(getEquationCount(), degree, origin, point, limiters, gradientWeights);
3005void ReconstructionKernel::computeGradientLimitedWeights(int nEquations, uint8_t degree, const std::array<double, 3> &origin,
3035 ReconstructionPolynomial::evalPointBasisDerivatives(degree, dimensions, origin, point, direction, dcsi + offset);
3041 cblas_dgemm(CBLAS_ORDER::CblasColMajor, CBLAS_TRANSPOSE::CblasTrans, CBLAS_TRANSPOSE::CblasTrans,
3067void ReconstructionKernel::applyLimiter(uint8_t degree, const double *limiters, double *coeffs) const
3074 const std::vector<uint16_t> &nDegreeCoeffs = ReconstructionPolynomial::getDegreeCoefficientsCount(dimensions);
3310 ReconstructionPolynomial::evalPointBasisValues(getDegree(), getDimensions(), origin, point, equationCoeffs);
3329 ReconstructionPolynomial::evalPointBasisDerivatives(getDegree(), getDimensions(), origin, point, direction, equationCoeffs);
3348 ReconstructionPolynomial::evalCellBasisValues(getDegree(), getDimensions(), origin, cell, vertexCoords, equationCoeffs);
3554void ReconstructionAssembler::computePseudoInverse(int m, int n, double zeroThreshold, double *A) const
3572 info = LAPACKE_dgesvd_work(LAPACK_COL_MAJOR, jobU, jobVT, m, n, A, m, m_sigma.data(), m_U.data(), m, m_Vt.data(), k,
3580 info = LAPACKE_dgesvd_work(LAPACK_COL_MAJOR, jobU, jobVT, m, n, A, m, m_sigma.data(), m_U.data(), m, m_Vt.data(), k,
3602 cblas_dgemm(CBLAS_ORDER::CblasColMajor, CBLAS_TRANSPOSE::CblasTrans, CBLAS_TRANSPOSE::CblasTrans,
double evalSize(const std::array< double, 3 > *coordinates) const
Definition element.cpp:1549
std::array< double, 3 > evalCentroid(const std::array< double, 3 > *coordinates) const
Definition element.cpp:1521
uint8_t getDegree() const
Definition reconstruction.cpp:3237
uint16_t getCoefficientCount() const
Definition reconstruction.cpp:3257
void swap(ReconstructionAssembler &other) noexcept
Definition reconstruction.cpp:3153
void clear(bool release=true)
Definition reconstruction.cpp:3199
uint8_t getDimensions() const
Definition reconstruction.cpp:3247
void addPointValueEquation(ReconstructionType type, const std::array< double, 3 > &origin, const std::array< double, 3 > &point, double scaleFactor=1.)
Definition reconstruction.cpp:3304
void assembleKernel(ReconstructionKernel *kernel) const
Definition reconstruction.cpp:3403
void initialize(uint8_t degree, uint8_t dimensions, bool release=true)
Definition reconstruction.cpp:3180
int countConstraints() const
Definition reconstruction.cpp:3267
int countEquations() const
Definition reconstruction.cpp:3287
void addPointDerivativeEquation(ReconstructionType type, const std::array< double, 3 > &origin, const std::array< double, 3 > &point, const std::array< double, 3 > &direction, double scaleFactor=1.)
Definition reconstruction.cpp:3322
void addCellAverageEquation(ReconstructionType type, const Cell &cell, const std::array< double, 3 > &origin, const std::array< double, 3 > *vertexCoords, double scaleFactor=1.)
Definition reconstruction.cpp:3341
ReconstructionAssembler()
Definition reconstruction.cpp:3130
void updateKernel(ReconstructionKernel *kernel) const
Definition reconstruction.cpp:3424
int countLeastSquares() const
Definition reconstruction.cpp:3277
The ReconstructionKernel class allows to evaluate the weight of a reconstruction polynomial previousl...
Definition reconstruction.hpp:169
void computeGradientWeights(const std::array< double, 3 > &origin, const std::array< double, 3 > &point, std::array< double, 3 > *gradientWeights) const
Definition reconstruction.cpp:2864
void computeValueWeights(const std::array< double, 3 > &origin, const std::array< double, 3 > &point, double *valueWeights) const
Definition reconstruction.cpp:2469
void computeGradientLimitedWeights(const std::array< double, 3 > &origin, const std::array< double, 3 > &point, const double *limiters, std::array< double, 3 > *gradientWeights) const
Definition reconstruction.cpp:2942
int getEquationCount() const
Definition reconstruction.cpp:2152
void updatePolynomial(const double *values, ReconstructionPolynomial *polynomial) const
Definition reconstruction.cpp:2312
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
Definition reconstruction.cpp:2745
void swap(ReconstructionKernel &other) noexcept
Definition reconstruction.cpp:2071
void initialize(uint8_t degree, uint8_t dimensions, int nEquations, bool release=true)
Definition reconstruction.cpp:2090
ReconstructionKernel()
Definition reconstruction.cpp:2016
uint8_t getDimensions() const
Definition reconstruction.cpp:2132
void display(std::ostream &out, double tolerance=1.e-10) const
Definition reconstruction.cpp:3095
void computeValueLimitedWeights(const std::array< double, 3 > &origin, const std::array< double, 3 > &point, const double *limiters, double *valueWeights) const
Definition reconstruction.cpp:2546
void computeDerivativeWeights(const std::array< double, 3 > &origin, const std::array< double, 3 > &point, const std::array< double, 3 > &direction, double *derivativeWeights) const
Definition reconstruction.cpp:2660
ReconstructionKernel & operator=(const ReconstructionKernel &other)
Definition reconstruction.cpp:2056
void assemblePolynomial(const std::array< double, 3 > &origin, const double *values, ReconstructionPolynomial *polynomial) const
Definition reconstruction.cpp:2193
uint16_t getCoefficientCount() const
Definition reconstruction.cpp:2142
const double * getPolynomialWeights() const
Definition reconstruction.cpp:2164
void applyLimiter(uint8_t degree, const double *limiters, double *coeffs) const
Definition reconstruction.cpp:3067
The ReconstructionPolynomial class allows to apply a reconstruction polynomial previously assembled.
Definition reconstruction.hpp:37
static uint16_t countCoefficients(uint8_t degree, uint8_t dimensions)
Definition reconstruction.cpp:148
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)
Definition reconstruction.cpp:267
void computeDerivativeLimited(const std::array< double, 3 > &point, const std::array< double, 3 > &direction, const double *limiters, int field, double *derivative) const
Definition reconstruction.cpp:1268
static const uint8_t MAX_DIMENSIONS
Definition reconstruction.hpp:129
void computeValue(const std::array< double, 3 > &point, int field, double *values) const
Definition reconstruction.cpp:697
const double * getDegreeCoefficients(uint8_t degree, int field=0) const
Definition reconstruction.cpp:641
void computeDerivativesLimited(const std::array< double, 3 > &point, const std::array< double, 3 > &direction, const double *limiters, double *derivatives) const
Definition reconstruction.cpp:1289
uint16_t getCoefficientCount() const
Definition reconstruction.cpp:571
void display(std::ostream &out) const
Definition reconstruction.cpp:1972
uint8_t getDegree() const
Definition reconstruction.cpp:541
void computeValuesLimited(const std::array< double, 3 > &point, const double *limiters, double *values) const
Definition reconstruction.cpp:875
void clear(bool release=true)
Definition reconstruction.cpp:526
void initialize(uint8_t degree, uint8_t dimensions, const std::array< double, 3 > &origin, int nFields=1, bool release=true)
Definition reconstruction.cpp:485
void swap(ReconstructionPolynomial &other) noexcept
Definition reconstruction.cpp:464
const double * getCoefficients() const
Definition reconstruction.cpp:591
static void evalPointBasisValues(uint8_t degree, uint8_t dimensions, const std::array< double, 3 > &origin, const std::array< double, 3 > &point, double *csi)
Definition reconstruction.cpp:218
int getFieldCount() const
Definition reconstruction.cpp:581
void computeGradientsLimited(const std::array< double, 3 > &point, const double *limiters, std::array< double, 3 > *gradients) const
Definition reconstruction.cpp:1735
static const std::vector< uint16_t > & getCoefficientsCount(uint8_t dimensions)
Definition reconstruction.cpp:132
void computeGradients(const std::array< double, 3 > &point, std::array< double, 3 > *gradients) const
Definition reconstruction.cpp:1532
static const uint8_t MAX_DEGREE
Definition reconstruction.hpp:128
void computeDerivative(const std::array< double, 3 > &point, const std::array< double, 3 > &direction, int field, double *derivative) const
Definition reconstruction.cpp:1079
void computeGradientLimited(const std::array< double, 3 > &point, const double *limiters, int field, std::array< double, 3 > *gradient) const
Definition reconstruction.cpp:1716
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)
Definition reconstruction.cpp:338
static uint16_t getDegreeCoefficientCount(uint8_t degree, uint8_t dimensions)
Definition reconstruction.cpp:167
void computeValueLimited(const std::array< double, 3 > &point, const double *limiters, int field, double *value) const
Definition reconstruction.cpp:856
void computeDerivatives(const std::array< double, 3 > &point, const std::array< double, 3 > &direction, double *derivatives) const
Definition reconstruction.cpp:1093
void computeValues(const std::array< double, 3 > &point, double *values) const
Definition reconstruction.cpp:709
uint8_t getDimensions() const
Definition reconstruction.cpp:551
ReconstructionPolynomial & operator=(const ReconstructionPolynomial &other)
Definition reconstruction.cpp:449
const std::array< double, 3 > & getOrigin() const
Definition reconstruction.cpp:561
static uint16_t countDegreeCoefficients(uint8_t degree, uint8_t dimensions)
Definition reconstruction.cpp:199
static const std::vector< uint16_t > & getDegreeCoefficientsCount(uint8_t dimensions)
Definition reconstruction.cpp:183
ReconstructionPolynomial()
Definition reconstruction.cpp:408
void computeGradient(const std::array< double, 3 > &point, int field, std::array< double, 3 > *gradient) const
Definition reconstruction.cpp:1520
void initialize(uint8_t degree, uint8_t dimensions, bool release=true)
Definition reconstruction.cpp:3647
Reconstruction(uint8_t degree, uint8_t dimensions)
Definition reconstruction.cpp:3620
void swap(Reconstruction &other) noexcept
Definition reconstruction.cpp:3632
#define BITPIT_CREATE_WORKSPACE(workspace, item_type, size, stack_size)
Definition commonUtils.hpp:76
int linearIndexRowMajor(int row, int col, int nRows, int nCols)
Definition matrix_utilities.cpp:65
int linearIndexColMajorSymmetric(int row, int col, int nRows, int nCols, char uplo)
Definition matrix_utilities.cpp:87
int linearIndexColMajor(int row, int col, int nRows, int nCols)
Definition matrix_utilities.cpp:48
Logger & cout(log::Level defaultSeverity, log::Visibility defaultVisibility)
Definition logger.cpp:1714
