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 
23 class Integrand;
24 
25 
30 template<size_t Dim> class BasisFunctionCache
31 {
32 public:
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 
87  void resizeThreadBuffers();
88 
89 protected:
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
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
const std::array< const double *, Dim > & coord(bool reduced=false) const
Return integration scheme nodes.
Definition: BasisFunctionCache.h:71
virtual bool internalInit()=0
Class-specified initialization.
const std::array< const double *, Dim > & weight(bool reduced=false) const
Return integration scheme weights.
Definition: BasisFunctionCache.h:66
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
const std::array< int, Dim > & nGauss(bool reduced=false)
Returns number of integration points.
Definition: BasisFunctionCache.h:61
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.
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
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