DFT-EFE
 
Loading...
Searching...
No Matches
CFEBasisDataStorageDealii.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (c) 2021. *
3 * The Regents of the University of Michigan and DFT-EFE developers. *
4 * *
5 * This file is part of the DFT-EFE code. *
6 * *
7 * DFT-EFE is free software: you can redistribute it and/or modify *
8 * it under the terms of the Lesser GNU General Public License as *
9 * published by the Free Software Foundation, either version 3 of *
10 * the License, or (at your option) any later version. *
11 * *
12 * DFT-EFE is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
15 * See the Lesser GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU Lesser General Public *
18 * License at the top level of DFT-EFE distribution. If not, see *
19 * <https://www.gnu.org/licenses/>. *
20 ******************************************************************************/
21
22/*
23 * @author Bikash Kanungo, Vishal Subramanian
24 */
25
26#ifndef dftefeCFEBasisDataStorageDealii_h
27#define dftefeCFEBasisDataStorageDealii_h
28
29#include <utils/TypeConfig.h>
31#include <utils/MemoryStorage.h>
39#include <memory>
40#include <map>
41#include <vector>
42namespace dftefe
43{
44 namespace basis
45 {
51 template <typename ValueTypeBasisCoeff,
52 typename ValueTypeBasisData,
54 size_type dim>
56 : public FEBasisDataStorage<ValueTypeBasisData, memorySpace>
57 {
58 public:
61 using Storage =
63
65 std::shared_ptr<const BasisDofHandler> feBDH,
66 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
67 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap,
69
71
72 std::shared_ptr<const BasisDofHandler>
73 getBasisDofHandler() const override;
74
75 void
77 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
78 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
79 override;
80
81 void
83 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
84 std::shared_ptr<const quadrature::QuadratureRuleContainer>
85 quadratureRuleContainer,
86 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
87 override;
88
89 void
91 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
92 std::vector<std::shared_ptr<const quadrature::QuadratureRule>>
93 quadratureRuleVec,
94 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
95 override;
96
97 void
99 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
100 std::shared_ptr<const quadrature::QuadratureRule>
101 baseQuadratureRuleAdaptive,
102 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
103 & functions,
104 const std::vector<double> & absoluteTolerances,
105 const std::vector<double> & relativeTolerances,
106 const std::vector<double> & integralThresholds,
107 const double smallestCellVolume,
108 const size_type maxRecursion,
109 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
110 override;
111
112
113 // void
114 // evaluateBasisData(
115 // std::shared_ptr<const quadrature::QuadratureRuleContainer>
116 // quadratureRuleContainer,
117 // const QuadratureRuleAttributes & quadratureRuleAttributes,
118 // const BasisStorageAttributesBoolMap boolBasisStorageFlagsObj)
119 // override;
120
121 void
122 deleteBasisData() override;
123
124
125
126 // std::shared_ptr<const quadrature::QuadratureRuleContainer>
127 // getCellQuadratureRuleContainer(std::shared_ptr<Storage>>
128 // const QuadratureRuleAttributes &quadratureRuleAttributes) const
129 // override;
130 // functions to get data for a basis function on a given quad point in a
131 // cell
132 Storage
133 getBasisData(const QuadraturePointAttributes &attributes,
134 const size_type basisId) const override;
135 Storage
137 const size_type basisId) const override;
138 Storage
140 const size_type basisId) const override;
141
142 // functions to get data for a basis function on all quad points in a cell
143 Storage
144 getBasisDataInCell(const size_type cellId,
145 const size_type basisId) const override;
146 Storage
148 const size_type basisId) const override;
149 Storage
151 const size_type basisId) const override;
152
153 // functions to get data for all basis functions on all quad points in a
154 // cell
155 Storage
156 getBasisDataInCell(const size_type cellId) const override;
157 Storage
158 getBasisGradientDataInCell(const size_type cellId) const override;
159 Storage
160 getBasisHessianDataInCell(const size_type cellId) const override;
161
162 Storage
163 getJxWInCell(const size_type cellId) const override;
164
165 // functions to get data for all basis functions on all quad points in all
166 // cells
167 const Storage &
168 getBasisDataInAllCells() const override;
169 const Storage &
170 getBasisGradientDataInAllCells() const override;
171 const Storage &
172 getBasisHessianDataInAllCells() const override;
173
174 const Storage &
175 getJxWInAllCells() const override;
176
177 // get overlap of two basis functions in a cell
178 Storage
179 getBasisOverlap(const size_type cellId,
180 const size_type basisId1,
181 const size_type basisId2) const override;
182
183 // get overlap of all the basis functions in a cell
184 Storage
185 getBasisOverlapInCell(const size_type cellId) const override;
186
187 // get overlap of all the basis functions in all cells
188 const Storage &
189 getBasisOverlapInAllCells() const override;
190
191
192 // get the laplace operator in a cell
193 Storage
194 getBasisGradNiGradNjInCell(const size_type cellId) const override;
195
196 // get laplace operator in all cells
197 const Storage &
198 getBasisGradNiGradNjInAllCells() const override;
199
200
201 std::shared_ptr<const quadrature::QuadratureRuleContainer>
202 getQuadratureRuleContainer() const override;
203
204 // functions to get data for basis functions on all quad points in range
205 // of cells
206 void
207 getBasisDataInCellRange(std::pair<size_type, size_type> cellRange,
208 Storage &basisData) const override;
209 void
211 std::pair<size_type, size_type> cellRange,
212 Storage & basisGradientData) const override;
213
214 // dealii function
215 const dealii::Quadrature<dim> &
217
218 private:
220 std::shared_ptr<
223 std::shared_ptr<const quadrature::QuadratureRuleContainer>
227 std::shared_ptr<Storage> d_basisQuadStorage;
228 std::shared_ptr<Storage> d_JxWStorage;
229 std::shared_ptr<Storage> d_basisGradNiGradNj;
230 std::shared_ptr<Storage> d_basisGradientQuadStorage;
231 std::shared_ptr<Storage> d_basisHessianQuadStorage;
232 std::shared_ptr<Storage> d_basisOverlap;
233 std::vector<size_type> d_dofsInCell;
234 std::vector<size_type> d_cellStartIdsBasisOverlap;
235 std::vector<size_type> d_nQuadPointsIncell;
236 std::vector<size_type> d_cellStartIdsBasisQuadStorage;
239 std::vector<size_type> d_cellStartIdsGradNiGradNj;
240 dealii::Quadrature<dim> d_dealiiQuadratureRule;
243
244 }; // end of CFEBasisDataStorageDealii
245 } // end of namespace basis
246} // end of namespace dftefe
248#endif // dftefeCFEBasisDataStorageDealii_h
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: CFEBasisDataStorageDealii.h:57
const Storage & getBasisGradNiGradNjInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:2727
const Storage & getBasisHessianDataInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:1985
const dealii::Quadrature< dim > & getDealiiQuadratureRule() const
Definition: CFEBasisDataStorageDealii.t.cpp:2762
const Storage & getBasisDataInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:1941
const Storage & getBasisOverlapInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:2476
std::shared_ptr< const quadrature::QuadratureRuleContainer > d_quadratureRuleContainer
Definition: CFEBasisDataStorageDealii.h:224
BasisStorageAttributesBoolMap d_basisStorageAttributesBoolMap
Definition: CFEBasisDataStorageDealii.h:226
std::vector< size_type > d_cellStartIdsBasisQuadStorage
Definition: CFEBasisDataStorageDealii.h:236
std::shared_ptr< const CFEBasisDofHandlerDealii< ValueTypeBasisCoeff, memorySpace, dim > > d_feBDH
Definition: CFEBasisDataStorageDealii.h:222
Storage getBasisData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2322
QuadratureRuleAttributes d_quadratureRuleAttributes
Definition: CFEBasisDataStorageDealii.h:225
dealii::Quadrature< dim > d_dealiiQuadratureRule
Definition: CFEBasisDataStorageDealii.h:240
Storage getJxWInCell(const size_type cellId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2281
std::shared_ptr< Storage > d_basisQuadStorage
Definition: CFEBasisDataStorageDealii.h:227
std::shared_ptr< Storage > d_basisGradNiGradNj
Definition: CFEBasisDataStorageDealii.h:229
void getBasisDataInCellRange(std::pair< size_type, size_type > cellRange, Storage &basisData) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2074
Storage getBasisHessianData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2421
Storage getBasisGradientDataInCell(const size_type cellId, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2632
std::vector< size_type > d_cellStartIdsBasisOverlap
Definition: CFEBasisDataStorageDealii.h:234
bool d_evaluateBasisData
Definition: CFEBasisDataStorageDealii.h:219
Storage getBasisHessianDataInCell(const size_type cellId, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2652
void evaluateBasisData(const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes, const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap) override
Definition: CFEBasisDataStorageDealii.t.cpp:1254
std::shared_ptr< Storage > d_JxWStorage
Definition: CFEBasisDataStorageDealii.h:228
bool d_isUniformQuad
Definition: CFEBasisDataStorageDealii.h:241
void getBasisGradientDataInCellRange(std::pair< size_type, size_type > cellRange, Storage &basisGradientData) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2189
void deleteBasisData() override
Definition: CFEBasisDataStorageDealii.t.cpp:2580
std::vector< size_type > d_nQuadPointsIncell
Definition: CFEBasisDataStorageDealii.h:235
std::shared_ptr< const BasisDofHandler > getBasisDofHandler() const override
Definition: CFEBasisDataStorageDealii.t.cpp:2749
std::shared_ptr< Storage > d_basisOverlap
Definition: CFEBasisDataStorageDealii.h:232
typename BasisDataStorage< ValueTypeBasisData, memorySpace >::Storage Storage
Definition: CFEBasisDataStorageDealii.h:62
std::shared_ptr< Storage > d_basisHessianQuadStorage
Definition: CFEBasisDataStorageDealii.h:231
const Storage & getBasisGradientDataInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:1963
Storage getBasisGradientData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2369
Storage getBasisOverlapInCell(const size_type cellId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2498
Storage getBasisDataInCell(const size_type cellId, const size_type basisId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2611
std::shared_ptr< Storage > d_basisGradientQuadStorage
Definition: CFEBasisDataStorageDealii.h:230
Storage getBasisOverlap(const size_type cellId, const size_type basisId1, const size_type basisId2) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2537
std::vector< size_type > d_dofsInCell
Definition: CFEBasisDataStorageDealii.h:233
const Storage & getJxWInAllCells() const override
Definition: CFEBasisDataStorageDealii.t.cpp:2007
std::vector< size_type > d_cellStartIdsBasisHessianQuadStorage
Definition: CFEBasisDataStorageDealii.h:238
std::shared_ptr< const quadrature::QuadratureRuleContainer > getQuadratureRuleContainer() const override
Definition: CFEBasisDataStorageDealii.t.cpp:2671
Storage getBasisGradNiGradNjInCell(const size_type cellId) const override
Definition: CFEBasisDataStorageDealii.t.cpp:2688
std::vector< size_type > d_cellStartIdsGradNiGradNj
Definition: CFEBasisDataStorageDealii.h:239
std::vector< size_type > d_cellStartIdsBasisGradientQuadStorage
Definition: CFEBasisDataStorageDealii.h:237
linearAlgebra::LinAlgOpContext< memorySpace > & d_linAlgOpContext
Definition: CFEBasisDataStorageDealii.h:242
Definition: CFEBasisDofHandlerDealii.h:57
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: FEBasisDataStorage.h:54
Definition: LinAlgOpContext.h:52
Class to store the attributes of a quad point, such as the cell Id it belongs, the quadPointId within...
Definition: QuadratureAttributes.h:171
Definition: QuadratureAttributes.h:135
std::map< BasisStorageAttributes, bool > BasisStorageAttributesBoolMap
Definition: BasisDataStorage.h:50
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9