DFT-EFE
 
Loading...
Searching...
No Matches
EFEBasisDataStorageDealii.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 Avirup Sircar
24 */
25
26#ifndef dftefeEFEBasisDataStorageDealii_h
27#define dftefeEFEBasisDataStorageDealii_h
28
29#include <utils/TypeConfig.h>
31#include <utils/MemoryStorage.h>
42#include <memory>
43#include <map>
44#include <vector>
45
46namespace dftefe
47{
48 namespace basis
49 {
55 template <typename ValueTypeBasisCoeff,
56 typename ValueTypeBasisData,
58 size_type dim>
60 : public EFEBasisDataStorage<ValueTypeBasisData, memorySpace>
61 {
62 public:
65 using Storage =
67
69 std::shared_ptr<const BasisDofHandler> efeBDH,
70 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
71 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap,
73
75
76 std::shared_ptr<const BasisDofHandler>
77 getBasisDofHandler() const override;
78
79 void
81 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
82 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
83 override;
84
85 void
87 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
88 std::shared_ptr<const quadrature::QuadratureRuleContainer>
89 quadratureRuleContainer,
90 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
91 override;
92
93 void
95 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
96 std::vector<std::shared_ptr<const quadrature::QuadratureRule>>
97 quadratureRuleVec,
98 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
99 override;
100
101 void
103 const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes,
104 std::shared_ptr<const quadrature::QuadratureRule>
105 baseQuadratureRuleAdaptive,
106 std::vector<std::shared_ptr<const utils::ScalarSpatialFunctionReal>>
107 & functions,
108 const std::vector<double> & absoluteTolerances,
109 const std::vector<double> & relativeTolerances,
110 const std::vector<double> & integralThresholds,
111 const double smallestCellVolume,
112 const size_type maxRecursion,
113 const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap)
114 override;
115
116 void
117 deleteBasisData() override;
118
119 // functions to get data for a basis function on a given quad point in a
120 // cell
121 Storage
122 getBasisData(const QuadraturePointAttributes &attributes,
123 const size_type basisId) const override;
124 Storage
126 const size_type basisId) const override;
127 Storage
129 const size_type basisId) const override;
130
131 // functions to get data for a basis function on all quad points in a cell
132 // The evaluation of functions
133 Storage
134 getBasisDataInCell(const size_type cellId,
135 const size_type basisId) const override;
136 Storage
138 const size_type basisId) const override;
139 Storage
141 const size_type basisId) const override;
142
143 // functions to get data for all basis functions on all quad points in a
144 // cell
145 Storage
146 getBasisDataInCell(const size_type cellId) const override;
147 Storage
148 getBasisGradientDataInCell(const size_type cellId) const override;
149 Storage
150 getBasisHessianDataInCell(const size_type cellId) const override;
151
152 Storage
153 getJxWInCell(const size_type cellId) const override;
154
155 // functions to get data for all basis functions on all quad points in all
156 // cells
157 const Storage &
158 getBasisDataInAllCells() const override;
159 const Storage &
160 getBasisGradientDataInAllCells() const override;
161 const Storage &
162 getBasisHessianDataInAllCells() const override;
163
164 const Storage &
165 getJxWInAllCells() const override;
166
167 // get overlap of two basis functions in a cell
168 Storage
169 getBasisOverlap(const size_type cellId,
170 const size_type basisId1,
171 const size_type basisId2) const override;
172
173 // get overlap of all the basis functions in a cell
174 Storage
175 getBasisOverlapInCell(const size_type cellId) const override;
176
177 // get overlap of all the basis functions in all cells
178 const Storage &
179 getBasisOverlapInAllCells() const override;
180
181 // get the laplace operator in a cell
182 Storage
183 getBasisGradNiGradNjInCell(const size_type cellId) const override;
184
185 // get laplace operator in all cells
186 const Storage &
187 getBasisGradNiGradNjInAllCells() const override;
188
189 std::shared_ptr<const quadrature::QuadratureRuleContainer>
190 getQuadratureRuleContainer() const override;
191
192 // functions to get data for basis functions on all quad points in range
193 // of cells
194 void
195 getBasisDataInCellRange(std::pair<size_type, size_type> cellRange,
196 Storage &basisData) const override;
197 void
199 std::pair<size_type, size_type> cellRange,
200 Storage & basisGradientData) const override;
201
202 private:
204 std::shared_ptr<const EFEBasisDofHandlerDealii<ValueTypeBasisCoeff,
205 ValueTypeBasisData,
206 memorySpace,
207 dim>>
209 std::shared_ptr<const quadrature::QuadratureRuleContainer>
213 std::shared_ptr<Storage> d_basisQuadStorage;
214 std::shared_ptr<Storage> d_JxWStorage;
215 std::shared_ptr<Storage> d_basisGradNiGradNj;
216 std::shared_ptr<Storage> d_basisGradientQuadStorage;
217 std::shared_ptr<Storage> d_basisHessianQuadStorage;
218 std::shared_ptr<Storage> d_basisOverlap;
219 std::vector<size_type> d_dofsInCell;
220 std::vector<size_type> d_cellStartIdsBasisOverlap;
221 std::vector<size_type> d_nQuadPointsIncell;
222 std::vector<size_type> d_cellStartIdsBasisQuadStorage;
225 std::vector<size_type> d_cellStartIdsGradNiGradNj;
227 };
228 } // end of namespace basis
229} // end of namespace dftefe
231#endif
An abstract class to store and access data for enriched fe basis, such as the basis function values o...
Definition: EFEBasisDataStorageDealii.h:61
std::vector< size_type > d_cellStartIdsGradNiGradNj
Definition: EFEBasisDataStorageDealii.h:225
void getBasisDataInCellRange(std::pair< size_type, size_type > cellRange, Storage &basisData) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3311
std::vector< size_type > d_cellStartIdsBasisGradientQuadStorage
Definition: EFEBasisDataStorageDealii.h:223
std::vector< size_type > d_nQuadPointsIncell
Definition: EFEBasisDataStorageDealii.h:221
Storage getBasisDataInCell(const size_type cellId, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3768
std::vector< size_type > d_cellStartIdsBasisHessianQuadStorage
Definition: EFEBasisDataStorageDealii.h:224
const Storage & getBasisHessianDataInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3227
linearAlgebra::LinAlgOpContext< memorySpace > & d_linAlgOpContext
Definition: EFEBasisDataStorageDealii.h:226
const Storage & getBasisDataInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3183
Storage getBasisHessianData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3596
Storage getBasisData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3509
QuadratureRuleAttributes d_quadratureRuleAttributes
Definition: EFEBasisDataStorageDealii.h:211
std::shared_ptr< const EFEBasisDofHandlerDealii< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_efeBDH
Definition: EFEBasisDataStorageDealii.h:208
void getBasisGradientDataInCellRange(std::pair< size_type, size_type > cellRange, Storage &basisGradientData) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3393
void evaluateBasisData(const quadrature::QuadratureRuleAttributes &quadratureRuleAttributes, const BasisStorageAttributesBoolMap basisStorageAttributesBoolMap) override
Definition: EFEBasisDataStorageDealii.t.cpp:2132
Storage getBasisGradientData(const QuadraturePointAttributes &attributes, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3551
std::vector< size_type > d_cellStartIdsBasisQuadStorage
Definition: EFEBasisDataStorageDealii.h:222
BasisStorageAttributesBoolMap d_basisStorageAttributesBoolMap
Definition: EFEBasisDataStorageDealii.h:212
std::shared_ptr< Storage > d_JxWStorage
Definition: EFEBasisDataStorageDealii.h:214
std::shared_ptr< Storage > d_basisQuadStorage
Definition: EFEBasisDataStorageDealii.h:213
std::shared_ptr< Storage > d_basisGradNiGradNj
Definition: EFEBasisDataStorageDealii.h:215
Storage getBasisHessianDataInCell(const size_type cellId, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3809
const Storage & getBasisOverlapInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3644
std::vector< size_type > d_dofsInCell
Definition: EFEBasisDataStorageDealii.h:219
std::shared_ptr< Storage > d_basisHessianQuadStorage
Definition: EFEBasisDataStorageDealii.h:217
std::shared_ptr< const quadrature::QuadratureRuleContainer > d_quadratureRuleContainer
Definition: EFEBasisDataStorageDealii.h:210
std::vector< size_type > d_cellStartIdsBasisOverlap
Definition: EFEBasisDataStorageDealii.h:220
std::shared_ptr< Storage > d_basisOverlap
Definition: EFEBasisDataStorageDealii.h:218
const Storage & getBasisGradNiGradNjInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3880
bool d_evaluateBasisData
Definition: EFEBasisDataStorageDealii.h:203
Storage getBasisOverlapInCell(const size_type cellId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3666
Storage getBasisGradNiGradNjInCell(const size_type cellId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3845
std::shared_ptr< Storage > d_basisGradientQuadStorage
Definition: EFEBasisDataStorageDealii.h:216
void deleteBasisData() override
Definition: EFEBasisDataStorageDealii.t.cpp:3737
const Storage & getBasisGradientDataInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3205
Storage getBasisGradientDataInCell(const size_type cellId, const size_type basisId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3789
Storage getJxWInCell(const size_type cellId) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3474
std::shared_ptr< const BasisDofHandler > getBasisDofHandler() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3902
Storage getBasisOverlap(const size_type cellId, const size_type basisId1, const size_type basisId2) const override
Definition: EFEBasisDataStorageDealii.t.cpp:3700
const Storage & getJxWInAllCells() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3249
std::shared_ptr< const quadrature::QuadratureRuleContainer > getQuadratureRuleContainer() const override
Definition: EFEBasisDataStorageDealii.t.cpp:3828
typename BasisDataStorage< ValueTypeBasisData, memorySpace >::Storage Storage
Definition: EFEBasisDataStorageDealii.h:66
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: EFEBasisDataStorage.h:52
Definition: EFEBasisDofHandlerDealii.h:61
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