IFEM 90A354
BasisFunctionCache.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _BASIS_FUNCTION_CACHE_H
15#define _BASIS_FUNCTION_CACHE_H
16
17#include "BasisFunctionVals.h"
18#include "ASMenums.h"
19
20#include <array>
21#include <memory>
22
23class Integrand;
24
25
30template<size_t Dim> class BasisFunctionCache
31{
32public:
35
38
40 virtual ~BasisFunctionCache() = default;
41
43 void clear();
44
47 bool init(int nd);
48
53 const BasisFunctionVals& getVals(size_t el, size_t gp, bool reduced = false);
54
57 void setIntegrand(const Integrand* itg) { integrand = itg; }
58
61 const std::array<int,Dim>& nGauss(bool reduced = false)
62 { return reduced ? reducedQ->ng : mainQ->ng; }
63
66 const std::array<const double*,Dim>& weight(bool reduced = false) const
67 { return reduced ? reducedQ->wg : mainQ->wg; }
68
71 const std::array<const double*,Dim>& coord(bool reduced = false) const
72 { return reduced ? reducedQ->xg : mainQ->xg; }
73
75 bool hasReduced() const { return !reducedQ->gpar[0].empty(); }
76
82 virtual double getParam(int dir, size_t el, size_t gp, bool reduced = false) const;
83
84 int basis = 1;
85
88
89protected:
91 struct Quadrature {
92 std::array<int,Dim> ng;
93 std::array<const double*,Dim> xg;
94 std::array<const double*,Dim> wg;
95 std::array<RealArray,Dim> gpar;
96
98 void reset()
99 {
100 ng.fill(0);
101 xg.fill(nullptr);
102 wg.fill(nullptr);
103 gpar.fill({});
104 }
105 };
106
108 virtual bool internalInit() = 0;
109
114 virtual BasisFunctionVals calculatePt(size_t el, size_t gp,
115 bool reduced = false) const = 0;
116
118 virtual void calculateAll() = 0;
119
124 virtual size_t index (size_t el, size_t gp, bool reduced) const;
125
129 std::array<size_t,Dim> gpIndex(size_t gp, bool reduced) const;
130
131 std::vector<BasisFunctionVals> values;
132 std::vector<BasisFunctionVals> valuesRed;
133 const Integrand* integrand = nullptr;
134 int nderiv = 0;
135
136 std::shared_ptr<Quadrature> mainQ;
137 std::shared_ptr<Quadrature> reducedQ;
138
139 size_t nTotal = 0;
140 size_t nTotalRed = 0;
141};
142
143#endif
Various enums for assembly scope.
Basis function values container.
Base class for basis function caches.
Definition BasisFunctionCache.h:31
const std::array< int, Dim > & nGauss(bool reduced=false)
Returns number of integration points.
Definition BasisFunctionCache.h:61
BasisFunctionCache()
Default constructor.
Definition BasisFunctionCache.C:22
std::shared_ptr< Quadrature > mainQ
Main quadrature information.
Definition BasisFunctionCache.h:136
void setIntegrand(const Integrand *itg)
Defines the integrand to be used.
Definition BasisFunctionCache.h:57
bool init(int nd)
Initialize the basis function cache according to policy.
Definition BasisFunctionCache.C:36
size_t nTotalRed
Total number of reduced integration points.
Definition BasisFunctionCache.h:140
std::shared_ptr< Quadrature > reducedQ
Reduced quadrature information.
Definition BasisFunctionCache.h:137
void clear()
Clears the basis function cache.
Definition BasisFunctionCache.C:62
int basis
Basis to use.
Definition BasisFunctionCache.h:84
std::vector< BasisFunctionVals > valuesRed
Cache for reduced quadrature.
Definition BasisFunctionCache.h:132
virtual double getParam(int dir, size_t el, size_t gp, bool reduced=false) const
Obtain a single integration point parameter.
Definition BasisFunctionCache.C:98
virtual bool internalInit()=0
Class-specified initialization.
virtual size_t index(size_t el, size_t gp, bool reduced) const
Obtain global integration point index.
Definition BasisFunctionCache.C:108
virtual ~BasisFunctionCache()=default
Empty destructor.
const BasisFunctionVals & getVals(size_t el, size_t gp, bool reduced=false)
Obtain basis function values/derivatives in an integration point.
Definition BasisFunctionCache.C:76
int nderiv
Number of derivatives.
Definition BasisFunctionCache.h:134
std::array< size_t, Dim > gpIndex(size_t gp, bool reduced) const
Obtain structured integration point indices.
Definition BasisFunctionCache.C:121
virtual BasisFunctionVals calculatePt(size_t el, size_t gp, bool reduced=false) const =0
Calculates basis function info in a single integration point.
std::vector< BasisFunctionVals > values
Cache for main quadrature.
Definition BasisFunctionCache.h:131
virtual void calculateAll()=0
Calculates basis function info in all integration points.
const std::array< const double *, Dim > & weight(bool reduced=false) const
Return integration scheme weights.
Definition BasisFunctionCache.h:66
bool hasReduced() const
Returns whether or not a reduced quadrature is enabled.
Definition BasisFunctionCache.h:75
void resizeThreadBuffers()
Called if application changes number of threads.
Definition BasisFunctionCache.C:134
const std::array< const double *, Dim > & coord(bool reduced=false) const
Return integration scheme nodes.
Definition BasisFunctionCache.h:71
size_t nTotal
Total number of main integration points.
Definition BasisFunctionCache.h:139
const Integrand * integrand
Integrand to use.
Definition BasisFunctionCache.h:133
Abstract base class representing a system level integrated quantity.
Definition Integrand.h:44
Template struct holding information about a quadrature.
Definition BasisFunctionCache.h:91
std::array< RealArray, Dim > gpar
Global integration point parameters.
Definition BasisFunctionCache.h:95
void reset()
Clears out configured quadrature.
Definition BasisFunctionCache.h:98
std::array< const double *, Dim > wg
Integration scheme weights.
Definition BasisFunctionCache.h:94
std::array< int, Dim > ng
Number of integration point in each dimension.
Definition BasisFunctionCache.h:92
std::array< const double *, Dim > xg
Integration scheme nodes.
Definition BasisFunctionCache.h:93
Struct holding basis function values and derivatives.
Definition BasisFunctionVals.h:25