DFT-EFE
 
Loading...
Searching...
No Matches
DealiiFEEvaluationWrapper.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 DFTFE, Avirup Sircar
24 */
25
26#ifndef FEEvaluationWrapper_h
27#define FEEvaluationWrapper_h
28
29#include <boost/preprocessor.hpp>
30#include <cmath>
31#include <memory>
32#include <utils/TypeConfig.h>
33
34#include <deal.II/matrix_free/matrix_free.h>
35#include <deal.II/matrix_free/fe_evaluation.h>
36
37namespace dftefe
38{
39 namespace basis
40 {
42 {
43 public:
44 template <typename T>
46 dealii::LinearAlgebra::distributed::Vector<T,
47 dealii::MemorySpace::Host>;
48
49 virtual ~FEEvaluationWrapperBase() = 0;
50
54 virtual size_type
56
60 virtual void
61 reinit(const size_type macrocell) = 0;
62
66 virtual void
68
72 virtual void
74
78 virtual void
79 evaluate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags) = 0;
80
81 virtual void
83 dealii::VectorizedArray<double> &alpha) = 0;
84
85 // virtual void submitInterpolatedGradientsAndMultiply(
86 // dealii::AlignedVector<
87 // dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &alpha) = 0;
88
89 virtual void
91 dealii::VectorizedArray<double> &alpha) = 0;
92
93 virtual void
95
96 virtual void
98 dealii::AlignedVector<dealii::VectorizedArray<double>> &alpha) = 0;
99
100 virtual void
102 const dealii::VectorizedArray<double> &scaling,
103 dealii::AlignedVector<
104 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &alpha) = 0;
105
106 virtual void
108 dealii::AlignedVector<
109 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &alpha) = 0;
110
111 virtual void
113 dealii::AlignedVector<dealii::VectorizedArray<double>> &alpha) = 0;
114
115
116 virtual dealii::VectorizedArray<double>
118
119 virtual void
121 const dealii::VectorizedArray<double> &value) = 0;
122
123 virtual void
125 const double alpha,
126 double * outputVector) = 0;
127
128 virtual void
130 const double alpha,
131 double * outputVector) = 0;
132
133 virtual void
135 const double alpha,
136 double * outputVector) = 0;
137
138
139 virtual void
141 const dealii::VectorizedArray<double> &scaleValues,
142 const bool scaleValuesFlag,
143 const dealii::VectorizedArray<double> &scaleGradients,
144 const bool scaleGradientsFlag) = 0;
145
146 virtual void
147 integrate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags) = 0;
148
149 virtual dealii::Point<3, dealii::VectorizedArray<double>>
150 getQuadraturePoint(const size_type iQuadPoint) = 0;
151
152 virtual void
154 dealii::AlignedVector<dealii::VectorizedArray<double>> &tempVec) = 0;
155
156 virtual void
158 };
159
160 template <int FEOrder, size_type num_1d_quadPoints, size_type n_components>
162 {
163 public:
165 const dealii::MatrixFree<3, double> &matrixFreeData,
166 const size_type matrixFreeVectorComponent,
167 const size_type matrixFreeQuadratureComponent);
168
170
171 std::unique_ptr<
172 dealii::FEEvaluation<3, FEOrder, num_1d_quadPoints, n_components>>
174
175
178
179 void
180 reinit(const size_type macrocell) override;
181
182 void
183 readDoFValues(const distributedCPUVec<double> &tempvec) override;
184
185 void
186 readDoFValuesPlain(const distributedCPUVec<double> &tempvec) override;
187
188 void
189 evaluate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags) override;
190
191 void
193 dealii::VectorizedArray<double> &alpha) override;
194
195 // void submitInterpolatedGradientsAndMultiply(
196 // dealii::AlignedVector<
197 // dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &alpha)
198 // override;
199 void
201 dealii::VectorizedArray<double> &alpha) override;
202
203 void
205
206 void
208 dealii::AlignedVector<dealii::VectorizedArray<double>> &alpha) override;
209
210 void
211 submitValues(const dealii::VectorizedArray<double> &scaling,
212 dealii::AlignedVector<
213 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
214 &alpha) override;
215
216 void
217 submitGradients(dealii::AlignedVector<
218 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
219 &alpha) override;
220
221 void
223 dealii::AlignedVector<dealii::VectorizedArray<double>> &alpha) override;
224
225 dealii::VectorizedArray<double>
226 integrateValue() override;
227
228 void
230 const size_type iQuadPoint,
231 const dealii::VectorizedArray<double> &value) override;
232
233 dealii::Point<3, dealii::VectorizedArray<double>>
234 getQuadraturePoint(const size_type iQuadPoint) override;
235
236 void
238 const double alpha,
239 double *outputVector) override;
240
241 void
242 getQuadGradientsForSubCell(const size_type subCellIndex,
243 const double alpha,
244 double * outputVector) override;
245
246 void
247 getQuadHessianForSubCell(const size_type subCellIndex,
248 const double alpha,
249 double * outputVector) override;
250
251 void
253 const dealii::VectorizedArray<double> &scaleValues,
254 const bool scaleValuesFlag,
255 const dealii::VectorizedArray<double> &scaleGradients,
256 const bool scaleGradientsFlag) override;
257
258 void
259 integrate(
260 dealii::EvaluationFlags::EvaluationFlags evaluateFlags) override;
261
262 void
263 getValues(dealii::AlignedVector<dealii::VectorizedArray<double>> &tempVec)
264 override;
265
266 void
268 };
269
270
271
272 template <size_type numberOfComponents>
274 {
275 public:
287 size_type fe_degree,
288 size_type num_1d_quad,
289 const dealii::MatrixFree<3, double> &matrixFreeData,
290 const size_type matrixFreeVectorComponent,
291 const size_type matrixFreeQuadratureComponent);
292
294
297
298 private:
303
304 std::unique_ptr<FEEvaluationWrapperBase> d_feEvaluationBase;
305 const dealii::MatrixFree<3, double> * d_matrix_free_data;
306
307
308
309 }; // end of DealiiFEEvaluationWrapper
310
311 } // end of namespace basis
312
313} // end of namespace dftefe
314
315
316#endif // FEEvaluationWrapper_h
Definition: DealiiFEEvaluationWrapper.h:274
~DealiiFEEvaluationWrapper()
Definition: DealiiFEEvaluationWrapper.cpp:474
size_type d_num1dQuad
Definition: DealiiFEEvaluationWrapper.h:300
size_type d_feDegree
Definition: DealiiFEEvaluationWrapper.h:299
size_type d_matrixFreeQuadratureComponent
Definition: DealiiFEEvaluationWrapper.h:302
const dealii::MatrixFree< 3, double > * d_matrix_free_data
Definition: DealiiFEEvaluationWrapper.h:305
FEEvaluationWrapperBase & getFEEvaluationWrapperBase() const
Definition: DealiiFEEvaluationWrapper.cpp:484
size_type d_matrixFreeVectorComponent
Definition: DealiiFEEvaluationWrapper.h:301
std::unique_ptr< FEEvaluationWrapperBase > d_feEvaluationBase
Definition: DealiiFEEvaluationWrapper.h:304
Definition: DealiiFEEvaluationWrapper.h:42
virtual void readDoFValuesPlain(const distributedCPUVec< double > &tempvec)=0
Calls dealii::FEEvaluation::read_dofs_values_plain.
virtual void submitInterpolatedValuesAndMultiplySquared()=0
virtual void reinit(const size_type macrocell)=0
reinits the dealii::FEEvaluation object for the macrocellIndex
dealii::LinearAlgebra::distributed::Vector< T, dealii::MemorySpace::Host > distributedCPUVec
Definition: DealiiFEEvaluationWrapper.h:47
virtual void submitValues(const dealii::VectorizedArray< double > &scaling, dealii::AlignedVector< dealii::Tensor< 1, 3, dealii::VectorizedArray< double > > > &alpha)=0
virtual void readDoFValues(const distributedCPUVec< double > &tempvec)=0
Calls dealii::FEEvaluation::read_dof_values.
virtual void integrate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags)=0
virtual void getQuadHessianForSubCell(const size_type subCellIndex, const double alpha, double *outputVector)=0
virtual void getValues(dealii::AlignedVector< dealii::VectorizedArray< double > > &tempVec)=0
virtual dealii::VectorizedArray< double > integrateValue()=0
virtual void submitInterpolatedValuesSubmitInterpolatedGradients(const dealii::VectorizedArray< double > &scaleValues, const bool scaleValuesFlag, const dealii::VectorizedArray< double > &scaleGradients, const bool scaleGradientsFlag)=0
virtual void alphaTimesQuadValuesPlusYFromSubCell(const size_type subCellIndex, const double alpha, double *outputVector)=0
virtual void submitInterpolatedValuesAndMultiply(dealii::VectorizedArray< double > &alpha)=0
virtual void getQuadGradientsForSubCell(const size_type subCellIndex, const double alpha, double *outputVector)=0
virtual void submitInterpolatedValuesAndMultiply(dealii::AlignedVector< dealii::VectorizedArray< double > > &alpha)=0
virtual size_type totalNumberofQuadraturePoints()=0
Returns the total number of quadrature points in all 3 directions.
virtual void distributeLocalToGlobal(distributedCPUVec< double > &tempvec)=0
virtual void submitValues(dealii::AlignedVector< dealii::VectorizedArray< double > > &alpha)=0
virtual void submitValueAtQuadpoint(const size_type iQuadPoint, const dealii::VectorizedArray< double > &value)=0
virtual dealii::Point< 3, dealii::VectorizedArray< double > > getQuadraturePoint(const size_type iQuadPoint)=0
virtual void submitGradients(dealii::AlignedVector< dealii::Tensor< 1, 3, dealii::VectorizedArray< double > > > &alpha)=0
virtual ~FEEvaluationWrapperBase()=0
Definition: DealiiFEEvaluationWrapper.cpp:53
virtual void submitInterpolatedGradientsAndMultiply(dealii::VectorizedArray< double > &alpha)=0
virtual void evaluate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags)=0
Calls the dealii::FEEvaluation::evaluate.
Definition: DealiiFEEvaluationWrapper.h:162
void submitGradients(dealii::AlignedVector< dealii::Tensor< 1, 3, dealii::VectorizedArray< double > > > &alpha) override
Definition: DealiiFEEvaluationWrapper.cpp:225
void submitInterpolatedValuesAndMultiply(dealii::VectorizedArray< double > &alpha) override
Definition: DealiiFEEvaluationWrapper.cpp:110
void distributeLocalToGlobal(distributedCPUVec< double > &tempvec) override
Definition: DealiiFEEvaluationWrapper.cpp:399
void submitInterpolatedGradientsAndMultiply(dealii::VectorizedArray< double > &alpha) override
Definition: DealiiFEEvaluationWrapper.cpp:97
dealii::Point< 3, dealii::VectorizedArray< double > > getQuadraturePoint(const size_type iQuadPoint) override
Definition: DealiiFEEvaluationWrapper.cpp:391
void submitInterpolatedValuesSubmitInterpolatedGradients(const dealii::VectorizedArray< double > &scaleValues, const bool scaleValuesFlag, const dealii::VectorizedArray< double > &scaleGradients, const bool scaleGradientsFlag) override
Definition: DealiiFEEvaluationWrapper.cpp:167
void submitValues(const dealii::VectorizedArray< double > &scaling, dealii::AlignedVector< dealii::Tensor< 1, 3, dealii::VectorizedArray< double > > > &alpha) override
Definition: DealiiFEEvaluationWrapper.cpp:152
std::unique_ptr< dealii::FEEvaluation< 3, FEOrder, num_1d_quadPoints, n_components > > d_dealiiFEEvaluation
Definition: DealiiFEEvaluationWrapper.h:173
void getQuadHessianForSubCell(const size_type subCellIndex, const double alpha, double *outputVector) override
Definition: DealiiFEEvaluationWrapper.cpp:288
~FEEvaluationWrapperDerived()
Definition: DealiiFEEvaluationWrapper.cpp:48
void alphaTimesQuadValuesPlusYFromSubCell(const size_type subCellIndex, const double alpha, double *outputVector) override
Definition: DealiiFEEvaluationWrapper.cpp:246
void submitInterpolatedValuesAndMultiplySquared() override
Definition: DealiiFEEvaluationWrapper.cpp:123
size_type totalNumberofQuadraturePoints() override
Returns the total number of quadrature points in all 3 directions.
Definition: DealiiFEEvaluationWrapper.cpp:59
void reinit(const size_type macrocell) override
reinits the dealii::FEEvaluation object for the macrocellIndex
Definition: DealiiFEEvaluationWrapper.cpp:67
void readDoFValuesPlain(const distributedCPUVec< double > &tempvec) override
Calls dealii::FEEvaluation::read_dofs_values_plain.
Definition: DealiiFEEvaluationWrapper.cpp:81
void getValues(dealii::AlignedVector< dealii::VectorizedArray< double > > &tempVec) override
Definition: DealiiFEEvaluationWrapper.cpp:356
dealii::VectorizedArray< double > integrateValue() override
Definition: DealiiFEEvaluationWrapper.cpp:238
void evaluate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags) override
Calls the dealii::FEEvaluation::evaluate.
Definition: DealiiFEEvaluationWrapper.cpp:88
void getQuadGradientsForSubCell(const size_type subCellIndex, const double alpha, double *outputVector) override
Definition: DealiiFEEvaluationWrapper.cpp:263
void submitValueAtQuadpoint(const size_type iQuadPoint, const dealii::VectorizedArray< double > &value) override
Definition: DealiiFEEvaluationWrapper.cpp:381
void integrate(dealii::EvaluationFlags::EvaluationFlags evaluateFlags) override
Definition: DealiiFEEvaluationWrapper.cpp:373
void readDoFValues(const distributedCPUVec< double > &tempvec) override
Calls dealii::FEEvaluation::read_dof_values.
Definition: DealiiFEEvaluationWrapper.cpp:74
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9