19#ifndef FEEvaluationWrapper_H_
20#define FEEvaluationWrapper_H_
32 template <dftfe::Int components>
36#define FEEvaluationWrapperTemplates(T1, T2) \
37 std::shared_ptr<dealii::FEEvaluation<3, T1, T2, components>>,
38#include "feevaluationWrapper.def"
39#undef FEEvaluationWrapperTemplates
40 std::shared_ptr<dealii::FEEvaluation<3, -1, 1, components>>>;
47#define FEEvaluationWrapperTemplates(T1, T2) \
48 std::shared_ptr<dealii::FEEvaluation<3, T1, T2, 3>>,
49#include "feevaluationWrapper3Comp.def"
50#undef FEEvaluationWrapperTemplates
51 std::shared_ptr<dealii::FEEvaluation<3, -1, 1, 3>>>;
55 template <dftfe::Int components>
59 template <
dftfe::Int components,
class... Args>
66 if constexpr (components == 1)
70#define FEEvaluationWrapperTemplates(T1, T2) \
71 case encodeFEEvaluation(T1, T2): \
72 return FEEvaluationObject<components>( \
73 std::make_shared<dealii::FEEvaluation<3, T1, T2, components>>( \
74 std::forward<Args>(args)...));
75#include "feevaluationWrapper.def"
76#undef FEEvaluationWrapperTemplates
79 std::make_shared<dealii::FEEvaluation<3, -1, 1, components>>(
80 std::forward<Args>(args)...));
83 if constexpr (components == 3)
87#define FEEvaluationWrapperTemplates(T1, T2) \
88 case encodeFEEvaluation(T1, T2): \
89 return FEEvaluationObject<components>( \
90 std::make_shared<dealii::FEEvaluation<3, T1, T2, components>>( \
91 std::forward<Args>(args)...));
92#include "feevaluationWrapper3Comp.def"
93#undef FEEvaluationWrapperTemplates
96 std::make_shared<dealii::FEEvaluation<3, -1, 1, components>>(
97 std::forward<Args>(args)...));
102 template <dftfe::Int components>
108 const dealii::MatrixFree<3, double> &matrixFreeData,
111 :
n_q_points(matrixFreeData.get_n_q_points(matrixFreeQuadratureComponent))
114 matrixFreeData.get_dof_handler(matrixFreeVectorComponent)
118 std::round(std::cbrt(
static_cast<double>(
n_q_points))));
123 matrixFreeVectorComponent,
124 matrixFreeQuadratureComponent));
127 template <
typename... Args>
131 std::visit([&](
auto &t) { t->reinit(std::forward<Args>(args)...); },
135 template <
typename... Args>
140 [&](
auto &t) { t->read_dof_values(std::forward<Args>(args)...); },
144 template <
typename... Args>
149 [&](
auto &t) { t->read_dof_values_plain(std::forward<Args>(args)...); },
153 template <
typename... Args>
157 std::visit([&](
auto &t) { t->evaluate(std::forward<Args>(args)...); },
161 template <
typename... Args>
166 [&](
auto &t) { t->submit_gradient(std::forward<Args>(args)...); },
170 template <
typename... Args>
174 std::visit([&](
auto &t) { t->submit_value(std::forward<Args>(args)...); },
178 template <
typename... Args>
183 [&](
auto &t) ->
decltype(
auto) {
184 return t->get_value(std::forward<Args>(args)...);
189 template <
typename... Args>
194 [&](
auto &t) ->
decltype(
auto) {
195 return t->get_gradient(std::forward<Args>(args)...);
200 template <
typename... Args>
205 [&](
auto &t) ->
decltype(
auto) {
206 return t->integrate_value(std::forward<Args>(args)...);
211 template <
typename... Args>
216 [&](
auto &t) ->
decltype(
auto) {
217 return t->get_hessian(std::forward<Args>(args)...);
222 template <
typename... Args>
226 std::visit([&](
auto &t) { t->integrate(std::forward<Args>(args)...); },
230 template <
typename... Args>
235 [&](
auto &t) ->
decltype(
auto) {
236 return t->quadrature_point(std::forward<Args>(args)...);
241 template <
typename... Args>
246 [&](
auto &t) ->
decltype(
auto) {
247 return t->JxW(std::forward<Args>(args)...);
252 template <
typename... Args>
258 t->distribute_local_to_global(std::forward<Args>(args)...);
const dftfe::uInt n_q_points
Definition feevaluationWrapper.h:264
FEEvaluationWrapperClass(const dealii::MatrixFree< 3, double > &matrixFreeData, const dftfe::uInt matrixFreeVectorComponent, const dftfe::uInt matrixFreeQuadratureComponent)
Constructor.
Definition feevaluationWrapper.h:107
decltype(auto) quadrature_point(Args &&...args)
Definition feevaluationWrapper.h:232
void read_dof_values(Args &&...args)
Definition feevaluationWrapper.h:137
decltype(auto) get_value(Args &&...args)
Definition feevaluationWrapper.h:180
void read_dof_values_plain(Args &&...args)
Definition feevaluationWrapper.h:146
void submit_gradient(Args &&...args)
Definition feevaluationWrapper.h:163
void integrate(Args &&...args)
Definition feevaluationWrapper.h:224
decltype(auto) JxW(Args &&...args)
Definition feevaluationWrapper.h:243
FEEvaluationObject< components > d_FEEvaluationObject
Definition feevaluationWrapper.h:267
decltype(auto) integrate_value(Args &&...args)
Definition feevaluationWrapper.h:202
void reinit(Args &&...args)
Definition feevaluationWrapper.h:129
void distribute_local_to_global(Args &&...args)
Definition feevaluationWrapper.h:254
decltype(auto) get_hessian(Args &&...args)
Definition feevaluationWrapper.h:213
decltype(auto) get_gradient(Args &&...args)
Definition feevaluationWrapper.h:191
void evaluate(Args &&...args)
Definition feevaluationWrapper.h:155
void submit_value(Args &&...args)
Definition feevaluationWrapper.h:172
Definition pseudoPotentialToDftfeConverter.cc:34
FEEvaluationObject< components > createFEEvaluationObject(dftfe::Int feOrder, dftfe::Int quadrature, Args &&...args)
Definition feevaluationWrapper.h:61
constexpr dftfe::Int encodeFEEvaluation(dftfe::Int a, dftfe::Int b)
Definition feevaluationWrapper.h:27
typename FEEvalTrait< components >::type FEEvaluationObject
Definition feevaluationWrapper.h:56
std::uint32_t uInt
Definition TypeConfig.h:10
std::int32_t Int
Definition TypeConfig.h:11
std::variant< #define FEEvaluationWrapperTemplates(T1, T2) \ # 1 "/github/workspace/include/feevaluationWrapper3Comp.def" 1 FEEvaluationWrapperTemplates(1, 2) FEEvaluationWrapperTemplates(1, 3) FEEvaluationWrapperTemplates(1, 4) FEEvaluationWrapperTemplates(1, 5) FEEvaluationWrapperTemplates(1, 6) FEEvaluationWrapperTemplates(1, 7) FEEvaluationWrapperTemplates(1, 8) FEEvaluationWrapperTemplates(1, 9) FEEvaluationWrapperTemplates(1, 10) FEEvaluationWrapperTemplates(1, 11) FEEvaluationWrapperTemplates(1, 12) FEEvaluationWrapperTemplates(1, 13) FEEvaluationWrapperTemplates(1, 14) # 49 "/github/workspace/include/feevaluationWrapper.h" 2 std::shared_ptr< dealii::FEEvaluation< 3, -1, 1, 3 > > > type
Definition feevaluationWrapper.h:46
Definition feevaluationWrapper.h:34
std::variant< #define FEEvaluationWrapperTemplates(T1, T2) \ # 1 "/github/workspace/include/feevaluationWrapper.def" 1 FEEvaluationWrapperTemplates(1, 2) FEEvaluationWrapperTemplates(1, 4) FEEvaluationWrapperTemplates(2, 3) FEEvaluationWrapperTemplates(2, 5) FEEvaluationWrapperTemplates(3, 4) FEEvaluationWrapperTemplates(3, 6) FEEvaluationWrapperTemplates(4, 5) FEEvaluationWrapperTemplates(4, 7) FEEvaluationWrapperTemplates(5, 6) FEEvaluationWrapperTemplates(5, 8) FEEvaluationWrapperTemplates(6, 7) FEEvaluationWrapperTemplates(6, 9) FEEvaluationWrapperTemplates(7, 8) FEEvaluationWrapperTemplates(7, 10) FEEvaluationWrapperTemplates(8, 9) FEEvaluationWrapperTemplates(8, 11) FEEvaluationWrapperTemplates(9, 10) FEEvaluationWrapperTemplates(9, 12) FEEvaluationWrapperTemplates(10, 11) FEEvaluationWrapperTemplates(10, 13) FEEvaluationWrapperTemplates(11, 12) FEEvaluationWrapperTemplates(11, 14) FEEvaluationWrapperTemplates(12, 13) FEEvaluationWrapperTemplates(12, 15) FEEvaluationWrapperTemplates(13, 14) FEEvaluationWrapperTemplates(13, 16) FEEvaluationWrapperTemplates(14, 15) FEEvaluationWrapperTemplates(14, 17)# 38 "/github/workspace/include/feevaluationWrapper.h" 2 std::shared_ptr< dealii::FEEvaluation< 3, -1, 1, components > > > type
Definition feevaluationWrapper.h:35