DFT-EFE
 
Loading...
Searching...
No Matches
QuadratureRuleContainer.h
Go to the documentation of this file.
1#ifndef dftefeQuadratureRuleContainer_h
2#define dftefeQuadratureRuleContainer_h
3
6#include <utils/TypeConfig.h>
7#include <utils/Point.h>
12#include <memory>
13#include <utils/MPITypes.h>
14#include <utils/MPIWrapper.h>
15#include <quadrature/Defaults.h>
16#include <utils/MemoryStorage.h>
17namespace dftefe
18{
19 namespace quadrature
20 {
27 {
28 public:
40 const QuadratureRuleAttributes & quadratureRuleAttributes,
41 std::shared_ptr<const QuadratureRule> quadratureRule,
42 std::shared_ptr<const basis::TriangulationBase> triangulation,
43 const basis::CellMappingBase & cellMapping);
44
56 const QuadratureRuleAttributes &quadratureRuleAttributes,
57 std::vector<std::shared_ptr<const QuadratureRule>> quadratureRuleVec,
58 std::shared_ptr<const basis::TriangulationBase> triangulation,
59 const basis::CellMappingBase & cellMapping);
60
74 const QuadratureRuleAttributes & quadratureRuleAttributes,
75 std::shared_ptr<const QuadratureRule> baseQuadratureRule,
76 std::shared_ptr<const basis::TriangulationBase> triangulation,
77 const basis::CellMappingBase & cellMapping,
78 basis::ParentToChildCellsManagerBase &parentToChildCellsManager,
79 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
80 functions,
81 const std::vector<double> &absoluteTolerances,
82 const std::vector<double> &relativeTolerances,
83 const std::vector<double> &integralThresholds,
84 const double smallestCellVolume =
86 const dftefe::size_type maxRecursion =
88
119 const QuadratureRuleAttributes &quadratureRuleAttributes,
120 const size_type order1DMin,
121 const size_type order1DMax,
122 const size_type copies1DMax,
123 std::shared_ptr<const basis::TriangulationBase> triangulation,
124 const basis::CellMappingBase & cellMapping,
125 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
126 functions,
127 const std::vector<double> &absoluteTolerances,
128 const std::vector<double> &relativeTolerances,
130 & quadratureRuleContainerReference,
131 const utils::mpi::MPIComm &comm);
132
134
141
147 nCells() const;
148
154 const std::vector<dftefe::utils::Point> &
155 getRealPoints() const;
156
164 std::vector<dftefe::utils::Point>
165 getCellRealPoints(const dftefe::size_type cellId) const;
166
174 const std::vector<dftefe::utils::Point> &
175 getCellParametricPoints(const dftefe::size_type cellId) const;
176
184 const std::vector<double> &
186
193 const std::vector<double> &
194 getJxW() const;
195
203 std::vector<double>
204 getCellJxW(const dftefe::size_type cellId) const;
205
213 const QuadratureRule &
214 getQuadratureRule(const dftefe::size_type cellId) const;
215
222 nQuadraturePoints() const;
223
232 nCellQuadraturePoints(const dftefe::size_type cellId) const;
233
239 const std::vector<size_type> &
240 getCellQuadStartIds() const;
241
249 getCellQuadStartId(const size_type cellId) const;
250
251 std::shared_ptr<const basis::TriangulationBase>
252 getTriangulation() const;
253
255 getCellMapping() const;
256
257 template <utils::MemorySpace memorySpace>
258 inline const double *
260 {
261 if constexpr (memorySpace == utils::MemorySpace::HOST)
262 {
263 return d_realPointsHost.data();
264 }
265 else
266 {
267#ifdef DFTEFE_WITH_DEVICE
268 if (d_realPointsDevice == nullptr)
269 {
270 d_realPointsDevice = std::make_unique<
272 d_realPointsHost.size());
273 d_realPointsDevice->copyFrom(d_realPointsHost);
274 }
275 return d_realPointsDevice->data();
276#else
277 static_assert(memorySpace == utils::MemorySpace::HOST,
278 "Device memory not available");
279#endif
280 }
281 }
282
283 private:
285 std::vector<std::shared_ptr<const QuadratureRule>> d_quadratureRuleVec;
286 std::vector<size_type> d_numCellQuadPoints;
287 std::vector<size_type> d_cellQuadStartIds;
288 std::vector<dftefe::utils::Point> d_realPoints;
289 std::vector<double> d_realPointsHost;
290 std::vector<double> d_JxW;
295 std::shared_ptr<const basis::TriangulationBase> d_triangulation;
297
298#ifdef DFTEFE_WITH_DEVICE
299 mutable std::unique_ptr<
301 d_realPointsDevice;
302#endif
303 };
304 } // end of namespace quadrature
305
306} // end of namespace dftefe
307
308#endif // dftefeQuadratureRuleContainer_h
An abstract class to map a real point to parametric point and vice-versa.
Definition: CellMappingBase.h:27
Definition: ParentToChildCellsManagerBase.h:13
static const size_type MAX_RECURSION
Definition: Defaults.h:47
static const double SMALLEST_CELL_VOLUME
Setting all the QuadratureRuleAdaptiveDefaults.
Definition: Defaults.h:42
Definition: QuadratureAttributes.h:135
Definition: QuadratureRuleContainer.h:27
const std::vector< double > & getJxW() const
Function that returns a vector containing the Jacobian times quadrature weight for all the quad point...
Definition: QuadratureRuleContainer.cpp:693
bool d_storeJacobianInverse
Definition: QuadratureRuleContainer.h:294
const QuadratureRule & getQuadratureRule(const dftefe::size_type cellId) const
Function that returns the handle to quadrature rule corresponding to the the cell Id.
Definition: QuadratureRuleContainer.cpp:713
const basis::CellMappingBase & getCellMapping() const
Definition: QuadratureRuleContainer.cpp:751
const std::vector< size_type > & getCellQuadStartIds() const
A function to return the starting index of the quadrature point of each cell.
Definition: QuadratureRuleContainer.cpp:733
std::vector< std::shared_ptr< const QuadratureRule > > d_quadratureRuleVec
Definition: QuadratureRuleContainer.h:285
const QuadratureRuleAttributes & getQuadratureRuleAttributes() const
Returns the underlying QuadratureRuleAttributes.
Definition: QuadratureRuleContainer.cpp:643
std::vector< dftefe::utils::Point > getCellRealPoints(const dftefe::size_type cellId) const
Function that returns a vector containing the real coordinates of the quad points in cell correspondi...
Definition: QuadratureRuleContainer.cpp:661
dftefe::size_type d_dim
Definition: QuadratureRuleContainer.h:291
std::shared_ptr< const basis::TriangulationBase > d_triangulation
Definition: QuadratureRuleContainer.h:295
size_type nCells() const
Returns the number of cells in the quadrature container.
Definition: QuadratureRuleContainer.cpp:649
const basis::CellMappingBase & d_cellMapping
Definition: QuadratureRuleContainer.h:296
std::vector< double > d_realPointsHost
Definition: QuadratureRuleContainer.h:289
size_type nQuadraturePoints() const
A function to return the total number of quadrature points in all the cells.
Definition: QuadratureRuleContainer.cpp:720
const std::vector< dftefe::utils::Point > & getRealPoints() const
Function that returns a vector containing the real coordinates of the quad points in all cells.
Definition: QuadratureRuleContainer.cpp:655
std::vector< size_type > d_cellQuadStartIds
Definition: QuadratureRuleContainer.h:287
std::vector< double > d_JxW
Definition: QuadratureRuleContainer.h:290
const double * getRealPointsPtr() const
Definition: QuadratureRuleContainer.h:259
std::vector< dftefe::utils::Point > d_realPoints
Definition: QuadratureRuleContainer.h:288
const std::vector< dftefe::utils::Point > & getCellParametricPoints(const dftefe::size_type cellId) const
Function that returns a vector containing the real coordinates of the quad points in cell correspondi...
Definition: QuadratureRuleContainer.cpp:679
size_type d_numCells
Definition: QuadratureRuleContainer.h:293
std::vector< size_type > d_numCellQuadPoints
Definition: QuadratureRuleContainer.h:286
size_type getCellQuadStartId(const size_type cellId) const
A function to return the starting index of the quadrature point of a given cell.
Definition: QuadratureRuleContainer.cpp:739
const std::vector< double > & getCellQuadratureWeights(const dftefe::size_type cellId) const
Function that returns a vector containing the weight of the quad points in cell corresponding to the ...
Definition: QuadratureRuleContainer.cpp:686
std::vector< double > getCellJxW(const dftefe::size_type cellId) const
Function that returns a vector containing the Jacobian times weight of the quad points in cell corres...
Definition: QuadratureRuleContainer.cpp:699
size_type nCellQuadraturePoints(const dftefe::size_type cellId) const
A function to returns the number of quadrature points in cell corresponding to the the cell Id.
Definition: QuadratureRuleContainer.cpp:726
const QuadratureRuleAttributes & d_quadratureRuleAttributes
Definition: QuadratureRuleContainer.h:284
size_type d_numQuadPoints
Definition: QuadratureRuleContainer.h:292
std::shared_ptr< const basis::TriangulationBase > getTriangulation() const
Definition: QuadratureRuleContainer.cpp:745
Definition: QuadratureRule.h:18
Definition: MemoryStorage.h:38
void copyFrom(const MemoryStorage< ValueType, memorySpaceSrc > &srcMemoryStorage)
Copies data from a MemoryStorage object in a different memory space. This provides a seamless interfa...
Definition: MemoryStorage.t.cpp:258
int MPIComm
Definition: MPITypes.h:84
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9