117 const auto firstElementVertexPoints =
122 refElement_m.getInverseTransposeTransformationJacobian(firstElementVertexPoints);
126 const Tlhs absDetDPhi = Kokkos::abs(
127 refElement_m.getDeterminantOfTransformationJacobian(firstElementVertexPoints));
130 DPhiInvT, absDetDPhi);
134 FieldBC bcType = bcField[0]->getBCType();
136 const auto algoOperator = [poissonEquationEval, &bcField,
this](
rhs_type field) ->
lhs_type {
138 field.setFieldBC(bcField);
142 auto return_field =
lagrangeSpace_m.evaluateAx(field, poissonEquationEval);
147 const auto algoOperatorL = [poissonEquationEval, &bcField,
this](
lhs_type field) ->
lhs_type {
149 field.setFieldBC(bcField);
153 auto return_field =
lagrangeSpace_m.evaluateAx_lower(field, poissonEquationEval);
158 const auto algoOperatorU = [poissonEquationEval, &bcField,
this](
lhs_type field) ->
lhs_type {
160 field.setFieldBC(bcField);
164 auto return_field =
lagrangeSpace_m.evaluateAx_upper(field, poissonEquationEval);
169 const auto algoOperatorUL = [poissonEquationEval, &bcField,
this](
lhs_type field) ->
lhs_type {
171 field.setFieldBC(bcField);
175 auto return_field =
lagrangeSpace_m.evaluateAx_upperlower(field, poissonEquationEval);
180 const auto algoOperatorInvD = [poissonEquationEval, &bcField,
this](
lhs_type field) ->
lhs_type {
182 field.setFieldBC(bcField);
186 auto return_field =
lagrangeSpace_m.evaluateAx_inversediag(field, poissonEquationEval);
191 const auto algoOperatorD = [poissonEquationEval, &bcField,
this](
lhs_type field) ->
lhs_type {
193 field.setFieldBC(bcField);
197 auto return_field =
lagrangeSpace_m.evaluateAx_diag(field, poissonEquationEval);
203 std::string preconditioner_type =
207 int inner = this->
params_m.template
get<int>(
"gauss_seidel_inner_iterations");
208 int outer = this->
params_m.template
get<int>(
"gauss_seidel_outer_iterations");
210 int richardson_iterations =
213 pcg_algo_m.setPreconditioner(algoOperator, algoOperatorL, algoOperatorU, algoOperatorUL,
214 algoOperatorInvD, algoOperatorD, 0, 0, preconditioner_type,
215 level, degree, richardson_iterations, inner, outer, omega);
237 (this->
lhs_mp)->fillHalo();