DFT-EFE
 
Loading...
Searching...
No Matches
FEBasisOperations.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, Avirup Sircar
24 */
25
26#ifndef dftefeFEBasisOperations_h
27#define dftefeFEBasisOperations_h
28
29#include <utils/TypeConfig.h>
40#include <memory>
41namespace dftefe
42{
43 namespace basis
44 {
46 {
52 };
57 template <typename ValueTypeBasisCoeff,
58 typename ValueTypeBasisData,
59 utils::MemorySpace memorySpace,
60 size_type dim>
61 class FEBasisOperations : public BasisOperations<ValueTypeBasisCoeff,
62 ValueTypeBasisData,
63 memorySpace>
64 {
65 //
66 // typedefs
67 //
68 public:
69 //
70 // Get the union of the ValueTypeBasisCoeff and ValueTypeBasisData
71 // (.e.g, the union of double and complex<double> is complex<double>)
72 //
74 typename BasisOperations<ValueTypeBasisCoeff,
75 ValueTypeBasisData,
76 memorySpace>::ValueTypeUnion;
77
78 using StorageUnion = typename BasisOperations<ValueTypeBasisCoeff,
79 ValueTypeBasisData,
80 memorySpace>::StorageUnion;
81
82 using StorageBasis = typename BasisOperations<ValueTypeBasisCoeff,
83 ValueTypeBasisData,
84 memorySpace>::StorageBasis;
85
88 basisDataStorage,
89 const size_type maxCellBlockSize,
90 const size_type maxFieldBlockSize = 0);
91
92 void
93 reinit(const size_type maxCellBlockSize,
94 const size_type maxFieldBlockSize = 0);
95
96 ~FEBasisOperations() = default;
97
98 void
101 & vectorData,
104 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisCoeff,
105 ValueTypeBasisData>,
106 memorySpace> &quadValuesContainer) const override;
107
108 void
111 & vectorData,
114 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisCoeff,
115 ValueTypeBasisData>,
116 memorySpace> &quadValuesContainer) const override;
117
118 void
121 & vectorData,
123 const std::pair<size_type, size_type> cellRange,
124 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisCoeff,
125 ValueTypeBasisData>
126 *quadValuesInCellRangePtr) const;
127
128 void
131 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisCoeff,
132 ValueTypeBasisData>,
133 memorySpace> & inp,
136 &vectorData) const override;
137
138 void
141 & vectorData,
143 const std::pair<size_type, size_type> cellRange,
144 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisCoeff,
145 ValueTypeBasisData>
146 *quadValuesInCellRangePtr) const;
147
148 /* FE functions for local kernel computations*/
149 /* \integral (L1 op1 N1) f (L2 op2 N2) dx */
150 void
155 & f,
158 StorageUnion & cellWiseFEData,
159 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
160
161 /* FE functions for local kernel computations*/
162 /* \integral f L12 op12 (N1.N2) dx */
163 void
166 & f,
169 StorageUnion & cellWiseFEData,
170 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
171
172 /* FE functions for local kernel computations*/
173 /* \integral (L1 op1 N1) (L2 op2 N2) dx */
174 void
179 StorageBasis & cellWiseFEData,
180 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
181
182 private:
183 std::shared_ptr<const FEBasisDataStorage<ValueTypeBasisData, memorySpace>>
187
192 mutable std::pair<size_type, size_type> d_cellRangeForBasisDataCache;
194 mutable std::pair<size_type, size_type>
199 std::vector<size_type> d_numCellDofs;
200 std::vector<size_type> d_numCellQuad;
207 std::shared_ptr<const quadrature::QuadratureRuleContainer>
209
210 void
211 deleteScratch() const;
212
213 void
218 & f,
221 std::shared_ptr<
223 feBasisDataStorage,
224 const size_type cellBlockSize,
225 StorageUnion & cellWiseFEData,
226 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
227
228 void
231 & f,
234 std::shared_ptr<
236 feBasisDataStorage,
237 const size_type cellBlockSize,
238 StorageUnion & cellWiseFEData,
239 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
240
241 void
246 std::shared_ptr<
248 feBasisDataStorage,
249 const size_type cellBlockSize,
250 StorageBasis & cellWiseFEData,
251 linearAlgebra::LinAlgOpContext<memorySpace> &linAlgOpContext) const;
252
253 }; // end of FEBasisOperations
254 } // end of namespace basis
255} // end of namespace dftefe
257#endif // dftefeBasisOperations_h
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: BasisDataStorage.h:59
An abstract class to encapsulate the partitioning of a basis across multiple processors.
Definition: BasisManager.h:54
Definition: BasisOperations.h:67
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: FEBasisDofHandler.h:57
Definition: FEBasisOperations.h:64
std::shared_ptr< const quadrature::QuadratureRuleContainer > d_quadratureRuleContainer
Definition: FEBasisOperations.h:208
const FEBasisDofHandler< ValueTypeBasisCoeff, memorySpace, dim > * d_feBasisDofHandler
Definition: FEBasisOperations.h:202
size_type d_maxDofInCell
Definition: FEBasisOperations.h:203
StorageUnion d_fxJxWxNBlock
Definition: FEBasisOperations.h:191
typename BasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace >::ValueTypeUnion ValueTypeUnion
Definition: FEBasisOperations.h:76
void reinit(const size_type maxCellBlockSize, const size_type maxFieldBlockSize=0)
Definition: FEBasisOperations.t.cpp:879
size_type d_maxQuadInCell
Definition: FEBasisOperations.h:204
void interpolateWithBasisGradient(const linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, const BasisManager< ValueTypeBasisCoeff, memorySpace > &basisManager, quadrature::QuadratureValuesContainer< linearAlgebra::blasLapack::scalar_type< ValueTypeBasisCoeff, ValueTypeBasisData >, memorySpace > &quadValuesContainer) const override
Definition: FEBasisOperations.t.cpp:1425
std::vector< size_type > d_numCellDofs
Definition: FEBasisOperations.h:199
StorageBasis d_basisDataInCellRange
Definition: FEBasisOperations.h:189
StorageBasis d_JxWxNBlock
Definition: FEBasisOperations.h:190
StorageBasis d_basisGradientDataInCellRange
Definition: FEBasisOperations.h:190
typename BasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace >::StorageBasis StorageBasis
Definition: FEBasisOperations.h:84
typename BasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace >::StorageUnion StorageUnion
Definition: FEBasisOperations.h:80
StorageUnion d_fieldCellValues
Definition: FEBasisOperations.h:191
std::vector< size_type > d_numCellQuad
Definition: FEBasisOperations.h:200
bool d_isBasisDataCellRangeCached
Definition: FEBasisOperations.h:193
void integrateWithBasisValues(const quadrature::QuadratureValuesContainer< linearAlgebra::blasLapack::scalar_type< ValueTypeBasisCoeff, ValueTypeBasisData >, memorySpace > &inp, const BasisManager< ValueTypeBasisCoeff, memorySpace > &basisManager, linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData) const override
Definition: FEBasisOperations.t.cpp:1638
bool d_sameQuadRuleInAllCells
Definition: FEBasisOperations.h:206
size_type d_maxCellBlock
Definition: FEBasisOperations.h:185
std::pair< size_type, size_type > d_cellRangeForBasisDataCache
Definition: FEBasisOperations.h:192
std::shared_ptr< const FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBasisDataStorage
Definition: FEBasisOperations.h:184
size_type d_numLocallyOwnedCells
Definition: FEBasisOperations.h:205
void BasisWeakFormKernel(realspace::LinearLocalOp L1, realspace::VectorMathOp Op1, realspace::LinearLocalOp L2, std::shared_ptr< const FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBasisDataStorage, const size_type cellBlockSize, StorageBasis &cellWiseFEData, linearAlgebra::LinAlgOpContext< memorySpace > &linAlgOpContext) const
Definition: FEBasisOperations.t.cpp:599
void interpolate(const linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &vectorData, const BasisManager< ValueTypeBasisCoeff, memorySpace > &basisManager, quadrature::QuadratureValuesContainer< linearAlgebra::blasLapack::scalar_type< ValueTypeBasisCoeff, ValueTypeBasisData >, memorySpace > &quadValuesContainer) const override
Definition: FEBasisOperations.t.cpp:913
size_type d_maxFieldBlock
Definition: FEBasisOperations.h:186
StorageBasis d_JxWxGradNBlock
Definition: FEBasisOperations.h:190
bool d_variableDofsPerCell
Definition: FEBasisOperations.h:206
bool d_isBasisGradientDataCellRangeCached
Definition: FEBasisOperations.h:196
std::pair< size_type, size_type > d_cellRangeForBasisGradientDataCache
Definition: FEBasisOperations.h:195
void computeFEMatrices(realspace::LinearLocalOp L1, realspace::VectorMathOp Op1, const quadrature::QuadratureValuesContainer< ValueTypeUnion, memorySpace > &f, realspace::VectorMathOp L2, realspace::LinearLocalOp Op2, StorageUnion &cellWiseFEData, linearAlgebra::LinAlgOpContext< memorySpace > &linAlgOpContext) const
Definition: FEBasisOperations.t.cpp:1889
void BasisWeakFormKernelWithField(realspace::LinearLocalOp L1, realspace::VectorMathOp Op1, const quadrature::QuadratureValuesContainer< ValueTypeUnion, memorySpace > &f, realspace::VectorMathOp Op2, realspace::LinearLocalOp L2, std::shared_ptr< const FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBasisDataStorage, const size_type cellBlockSize, StorageUnion &cellWiseFEData, linearAlgebra::LinAlgOpContext< memorySpace > &linAlgOpContext) const
Definition: FEBasisOperations.t.cpp:43
void deleteScratch() const
Definition: FEBasisOperations.t.cpp:894
Definition: LinAlgOpContext.h:52
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
Definition: QuadratureValuesContainer.h:39
VectorMathOp
Definition: BasisOperations.h:44
LinearLocalOp
Definition: BasisOperations.h:52
FEBasisOpScratchSpaceAttr
Definition: FEBasisOperations.h:46
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9