@@ -174,10 +174,10 @@ class OperatorCeed : public OperatorBase<Number>
174174 void
175175 reinit () override
176176 {
177- CeedVector q_data ;
177+ CeedVector metric_data ;
178178 CeedBasis sol_basis;
179179 CeedElemRestriction sol_restriction;
180- CeedElemRestriction q_data_restriction ;
180+ CeedElemRestriction metric_data_restriction ;
181181 BuildContext build_ctx_data;
182182 CeedQFunctionContext build_ctx;
183183 CeedQFunction qf_apply;
@@ -276,20 +276,20 @@ class OperatorCeed : public OperatorBase<Number>
276276 // 4) create mapping -> MappingInfo
277277 const unsigned int n_components_metric = (bp <= BPType::BP2) ? 1 : (dim * (dim + 1 ) / 2 );
278278
279- this -> weights = compute_metric_data (ceed, mapping, tria, quadrature, bp);
279+ metric_data_raw = compute_metric_data (ceed, mapping, tria, quadrature, bp);
280280
281281 strides = {{1 ,
282282 static_cast <int >(quadrature.size ()),
283283 static_cast <int >(quadrature.size () * n_components_metric)}};
284- CeedVectorCreate (ceed, weights .size (), &q_data );
285- CeedVectorSetArray (q_data , CEED_MEM_HOST, CEED_USE_POINTER, weights .data ());
284+ CeedVectorCreate (ceed, metric_data_raw .size (), &metric_data );
285+ CeedVectorSetArray (metric_data , CEED_MEM_HOST, CEED_USE_POINTER, metric_data_raw .data ());
286286 CeedElemRestrictionCreateStrided (ceed,
287287 n_local_active_cells,
288288 quadrature.size (),
289289 n_components_metric,
290- weights .size (),
290+ metric_data_raw .size (),
291291 strides.data (),
292- &q_data_restriction );
292+ &metric_data_restriction );
293293
294294 build_ctx_data.dim = dim;
295295 build_ctx_data.space_dim = dim;
@@ -315,7 +315,7 @@ class OperatorCeed : public OperatorBase<Number>
315315 else
316316 CeedQFunctionAddInput (qf_apply, " u" , dim * n_components, CEED_EVAL_GRAD);
317317
318- CeedQFunctionAddInput (qf_apply, " qdata " , n_components_metric, CEED_EVAL_NONE);
318+ CeedQFunctionAddInput (qf_apply, " metric data " , n_components_metric, CEED_EVAL_NONE);
319319
320320 if (bp <= BPType::BP2)
321321 CeedQFunctionAddOutput (qf_apply, " v" , n_components, CEED_EVAL_INTERP);
@@ -328,16 +328,17 @@ class OperatorCeed : public OperatorBase<Number>
328328 CeedOperatorCreate (ceed, qf_apply, CEED_QFUNCTION_NONE, CEED_QFUNCTION_NONE, &op_apply);
329329
330330 CeedOperatorSetField (op_apply, " u" , sol_restriction, sol_basis, CEED_VECTOR_ACTIVE);
331- CeedOperatorSetField (op_apply, " qdata" , q_data_restriction, CEED_BASIS_NONE, q_data);
331+ CeedOperatorSetField (
332+ op_apply, " metric data" , metric_data_restriction, CEED_BASIS_NONE, metric_data);
332333 CeedOperatorSetField (op_apply, " v" , sol_restriction, sol_basis, CEED_VECTOR_ACTIVE);
333334
334335 // 7) libCEED vectors
335336 CeedElemRestrictionCreateVector (sol_restriction, &src_ceed, NULL );
336337 CeedElemRestrictionCreateVector (sol_restriction, &dst_ceed, NULL );
337338
338339 // 8) cleanup
339- CeedVectorDestroy (&q_data );
340- CeedElemRestrictionDestroy (&q_data_restriction );
340+ CeedVectorDestroy (&metric_data );
341+ CeedElemRestrictionDestroy (&metric_data_restriction );
341342 CeedElemRestrictionDestroy (&sol_restriction);
342343 CeedBasisDestroy (&sol_basis);
343344 CeedQFunctionContextDestroy (&build_ctx);
@@ -402,6 +403,9 @@ class OperatorCeed : public OperatorBase<Number>
402403
403404 diagonal.compress (VectorOperation::add);
404405
406+ // apply constraints: we assume homogeneous DBC
407+ constraints.set_zero (diagonal);
408+
405409 for (auto &i : diagonal)
406410 i = (std::abs (i) > 1.0e-10 ) ? (1.0 / i) : 1.0 ;
407411 }
@@ -502,28 +506,11 @@ class OperatorCeed : public OperatorBase<Number>
502506 const Quadrature<dim> &quadrature,
503507 const BPType bp)
504508 {
505- std::vector<double > weights;
506-
507- if (false )
508- {
509- FE_Nothing<dim> dummy_fe;
510- FEValues<dim> fe_values (mapping, dummy_fe, quadrature, update_JxW_values);
511-
512- for (const auto &cell : tria.active_cell_iterators ())
513- if (cell->is_locally_owned ())
514- {
515- fe_values.reinit (cell);
516-
517- for (const auto q : fe_values.quadrature_point_indices ())
518- weights.emplace_back (fe_values.JxW (q));
519- }
520-
521- return weights;
522- }
509+ std::vector<double > metric_data_raw;
523510
524511 CeedBasis geo_basis;
525- CeedVector q_data ;
526- CeedElemRestriction q_data_restriction ;
512+ CeedVector metric_data ;
513+ CeedElemRestriction metric_data_restriction ;
527514 CeedVector node_coords;
528515 CeedElemRestriction geo_restriction;
529516 CeedQFunctionContext build_ctx;
@@ -532,7 +519,7 @@ class OperatorCeed : public OperatorBase<Number>
532519
533520 const unsigned int n_q_points = quadrature.get_tensor_basis ()[0 ].size ();
534521
535- const unsigned int n_components = (bp <= BPType::BP2) ? 1 : (dim * (dim + 1 ) / 2 );
522+ const unsigned int n_components_metric = (bp <= BPType::BP2) ? 1 : (dim * (dim + 1 ) / 2 );
536523
537524 const auto mapping_q = dynamic_cast <const MappingQ<dim> *>(&mapping);
538525
@@ -625,21 +612,21 @@ class OperatorCeed : public OperatorBase<Number>
625612 }
626613 }
627614
628- weights .resize (n_local_active_cells * quadrature.size () * n_components );
615+ metric_data_raw .resize (n_local_active_cells * quadrature.size () * n_components_metric );
629616
630617 CeedInt strides[3 ] = {1 ,
631618 static_cast <int >(quadrature.size ()),
632- static_cast <int >(quadrature.size () * n_components )};
619+ static_cast <int >(quadrature.size () * n_components_metric )};
633620
634- CeedVectorCreate (ceed, weights .size (), &q_data );
635- CeedVectorSetArray (q_data , CEED_MEM_HOST, CEED_USE_POINTER, weights .data ());
621+ CeedVectorCreate (ceed, metric_data_raw .size (), &metric_data );
622+ CeedVectorSetArray (metric_data , CEED_MEM_HOST, CEED_USE_POINTER, metric_data_raw .data ());
636623 CeedElemRestrictionCreateStrided (ceed,
637624 n_local_active_cells,
638625 quadrature.size (),
639- n_components ,
640- weights .size (),
626+ n_components_metric ,
627+ metric_data_raw .size (),
641628 strides,
642- &q_data_restriction );
629+ &metric_data_restriction );
643630
644631 CeedVectorCreate (ceed, geo_support_points.size (), &node_coords);
645632 CeedVectorSetArray (node_coords, CEED_MEM_HOST, CEED_USE_POINTER, geo_support_points.data ());
@@ -670,31 +657,31 @@ class OperatorCeed : public OperatorBase<Number>
670657 CeedQFunctionCreateInterior (ceed, 1 , f_build_poisson, f_build_poisson_loc, &qf_build);
671658
672659 CeedQFunctionAddInput (qf_build, " geo" , dim * dim, CEED_EVAL_GRAD);
673- CeedQFunctionAddInput (qf_build, " weights " , 1 , CEED_EVAL_WEIGHT);
674- CeedQFunctionAddOutput (qf_build, " qdata " , n_components , CEED_EVAL_NONE);
660+ CeedQFunctionAddInput (qf_build, " weight " , 1 , CEED_EVAL_WEIGHT);
661+ CeedQFunctionAddOutput (qf_build, " metric data " , n_components_metric , CEED_EVAL_NONE);
675662 CeedQFunctionSetContext (qf_build, build_ctx);
676663
677664 // 6) put everything together
678665 CeedOperatorCreate (ceed, qf_build, CEED_QFUNCTION_NONE, CEED_QFUNCTION_NONE, &op_build);
679666 CeedOperatorSetField (op_build, " geo" , geo_restriction, geo_basis, CEED_VECTOR_ACTIVE);
680667 CeedOperatorSetField (
681- op_build, " weights " , CEED_ELEMRESTRICTION_NONE, geo_basis, CEED_VECTOR_NONE);
668+ op_build, " weight " , CEED_ELEMRESTRICTION_NONE, geo_basis, CEED_VECTOR_NONE);
682669 CeedOperatorSetField (
683- op_build, " qdata " , q_data_restriction , CEED_BASIS_NONE, CEED_VECTOR_ACTIVE);
670+ op_build, " metric data " , metric_data_restriction , CEED_BASIS_NONE, CEED_VECTOR_ACTIVE);
684671
685- CeedOperatorApply (op_build, node_coords, q_data , CEED_REQUEST_IMMEDIATE);
672+ CeedOperatorApply (op_build, node_coords, metric_data , CEED_REQUEST_IMMEDIATE);
686673
687674 CeedVectorDestroy (&node_coords);
688- CeedVectorSyncArray (q_data , CEED_MEM_HOST);
689- CeedVectorDestroy (&q_data );
675+ CeedVectorSyncArray (metric_data , CEED_MEM_HOST);
676+ CeedVectorDestroy (&metric_data );
690677 CeedElemRestrictionDestroy (&geo_restriction);
691- CeedElemRestrictionDestroy (&q_data_restriction );
678+ CeedElemRestrictionDestroy (&metric_data_restriction );
692679 CeedBasisDestroy (&geo_basis);
693680 CeedQFunctionContextDestroy (&build_ctx);
694681 CeedQFunctionDestroy (&qf_build);
695682 CeedOperatorDestroy (&op_build);
696683
697- return weights ;
684+ return metric_data_raw ;
698685 }
699686
700687 /* *
@@ -736,19 +723,11 @@ class OperatorCeed : public OperatorBase<Number>
736723 * libCEED data structures.
737724 */
738725 Ceed ceed;
739- std::vector<double > weights ;
726+ std::vector<double > metric_data_raw ;
740727 std::array<CeedInt, 3 > strides;
741728 CeedVector src_ceed;
742729 CeedVector dst_ceed;
743730 CeedOperator op_apply;
744-
745- /* *
746- * Temporal (tempral) vectors.
747- *
748- * @note Only needed for multiple components.
749- */
750- mutable VectorType src_tmp;
751- mutable VectorType dst_tmp;
752731};
753732
754733
0 commit comments