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 {
21 template <utils::MemorySpace memorySpace>
23 {};
24
31 {
32 public:
44 const QuadratureRuleAttributes & quadratureRuleAttributes,
45 std::shared_ptr<const QuadratureRule> quadratureRule,
46 std::shared_ptr<const basis::TriangulationBase> triangulation,
47 const basis::CellMappingBase & cellMapping);
48
60 const QuadratureRuleAttributes &quadratureRuleAttributes,
61 std::vector<std::shared_ptr<const QuadratureRule>> quadratureRuleVec,
62 std::shared_ptr<const basis::TriangulationBase> triangulation,
63 const basis::CellMappingBase & cellMapping);
64
78 const QuadratureRuleAttributes & quadratureRuleAttributes,
79 std::shared_ptr<const QuadratureRule> baseQuadratureRule,
80 std::shared_ptr<const basis::TriangulationBase> triangulation,
81 const basis::CellMappingBase & cellMapping,
82 basis::ParentToChildCellsManagerBase &parentToChildCellsManager,
83 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
84 functions,
85 const std::vector<double> &absoluteTolerances,
86 const std::vector<double> &relativeTolerances,
87 const std::vector<double> &integralThresholds,
88 const double smallestCellVolume =
90 const dftefe::size_type maxRecursion =
92
93 template <utils::MemorySpace memorySpace>
96 const QuadratureRuleAttributes & quadratureRuleAttributes,
97 std::shared_ptr<const QuadratureRule> baseQuadratureRule,
98 std::shared_ptr<const basis::TriangulationBase> triangulation,
99 const basis::CellMappingBase & cellMapping,
100 basis::ParentToChildCellsManagerBase &parentToChildCellsManager,
101 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
102 functions,
103 const std::vector<double> &absoluteTolerances,
104 const std::vector<double> &relativeTolerances,
105 const std::vector<double> &integralThresholds,
106 const double smallestCellVolume =
108 const dftefe::size_type maxRecursion =
110
141 const QuadratureRuleAttributes &quadratureRuleAttributes,
142 const size_type order1DMin,
143 const size_type order1DMax,
144 const size_type copies1DMax,
145 std::shared_ptr<const basis::TriangulationBase> triangulation,
146 const basis::CellMappingBase & cellMapping,
147 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
148 functions,
149 const std::vector<double> &absoluteTolerances,
150 const std::vector<double> &relativeTolerances,
152 & quadratureRuleContainerReference,
153 const utils::mpi::MPIComm &comm);
154
156
163
169 nCells() const;
170
176 const std::vector<dftefe::utils::Point> &
177 getRealPoints() const;
178
186 std::vector<dftefe::utils::Point>
187 getCellRealPoints(const dftefe::size_type cellId) const;
188
196 const std::vector<dftefe::utils::Point> &
197 getCellParametricPoints(const dftefe::size_type cellId) const;
198
206 const std::vector<double> &
208
215 const std::vector<double> &
216 getJxW() const;
217
225 std::vector<double>
226 getCellJxW(const dftefe::size_type cellId) const;
227
235 const QuadratureRule &
236 getQuadratureRule(const dftefe::size_type cellId) const;
237
244 nQuadraturePoints() const;
245
254 nCellQuadraturePoints(const dftefe::size_type cellId) const;
255
261 const std::vector<size_type> &
262 getCellQuadStartIds() const;
263
271 getCellQuadStartId(const size_type cellId) const;
272
273 std::shared_ptr<const basis::TriangulationBase>
274 getTriangulation() const;
275
277 getCellMapping() const;
278
279 template <utils::MemorySpace memorySpace>
280 inline const double *
282 {
283 if constexpr (memorySpace == utils::MemorySpace::HOST)
284 {
285 return d_realPointsHost.data();
286 }
287 else
288 {
289#ifdef DFTEFE_WITH_DEVICE
290 if (d_realPointsDevice == nullptr)
291 {
292 d_realPointsDevice = std::make_unique<
294 d_realPointsHost.size());
295 d_realPointsDevice->copyFrom(d_realPointsHost);
296 }
297 return d_realPointsDevice->data();
298#else
299 static_assert(memorySpace == utils::MemorySpace::HOST,
300 "Device memory not available");
301#endif
302 }
303 }
304
305 private:
307 std::vector<std::shared_ptr<const QuadratureRule>> d_quadratureRuleVec;
308 std::vector<size_type> d_numCellQuadPoints;
309 std::vector<size_type> d_cellQuadStartIds;
310 std::vector<dftefe::utils::Point> d_realPoints;
311 std::vector<double> d_realPointsHost;
312 std::vector<double> d_JxW;
317 std::shared_ptr<const basis::TriangulationBase> d_triangulation;
319
320#ifdef DFTEFE_WITH_DEVICE
321 mutable std::unique_ptr<
323 d_realPointsDevice;
324#endif
325 };
326 } // end of namespace quadrature
327
328} // end of namespace dftefe
329
330#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:31
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:820
bool d_storeJacobianInverse
Definition: QuadratureRuleContainer.h:316
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:840
const basis::CellMappingBase & getCellMapping() const
Definition: QuadratureRuleContainer.cpp:878
const std::vector< size_type > & getCellQuadStartIds() const
A function to return the starting index of the quadrature point of each cell.
Definition: QuadratureRuleContainer.cpp:860
std::vector< std::shared_ptr< const QuadratureRule > > d_quadratureRuleVec
Definition: QuadratureRuleContainer.h:307
const QuadratureRuleAttributes & getQuadratureRuleAttributes() const
Returns the underlying QuadratureRuleAttributes.
Definition: QuadratureRuleContainer.cpp:770
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:788
dftefe::size_type d_dim
Definition: QuadratureRuleContainer.h:313
std::shared_ptr< const basis::TriangulationBase > d_triangulation
Definition: QuadratureRuleContainer.h:317
size_type nCells() const
Returns the number of cells in the quadrature container.
Definition: QuadratureRuleContainer.cpp:776
const basis::CellMappingBase & d_cellMapping
Definition: QuadratureRuleContainer.h:318
std::vector< double > d_realPointsHost
Definition: QuadratureRuleContainer.h:311
size_type nQuadraturePoints() const
A function to return the total number of quadrature points in all the cells.
Definition: QuadratureRuleContainer.cpp:847
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:782
std::vector< size_type > d_cellQuadStartIds
Definition: QuadratureRuleContainer.h:309
std::vector< double > d_JxW
Definition: QuadratureRuleContainer.h:312
const double * getRealPointsPtr() const
Definition: QuadratureRuleContainer.h:281
std::vector< dftefe::utils::Point > d_realPoints
Definition: QuadratureRuleContainer.h:310
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:806
size_type d_numCells
Definition: QuadratureRuleContainer.h:315
std::vector< size_type > d_numCellQuadPoints
Definition: QuadratureRuleContainer.h:308
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:866
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:813
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:826
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:853
const QuadratureRuleAttributes & d_quadratureRuleAttributes
Definition: QuadratureRuleContainer.h:306
size_type d_numQuadPoints
Definition: QuadratureRuleContainer.h:314
std::shared_ptr< const basis::TriangulationBase > getTriangulation() const
Definition: QuadratureRuleContainer.cpp:872
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
Definition: QuadratureRuleContainer.h:23