Skip to content

Commit 7a71d01

Browse files
authored
Merge pull request #1870 from CEED/peterrum/dealii_cleanup
deal.II examples: some clean up
2 parents 15c97c4 + eb3489a commit 7a71d01

File tree

1 file changed

+36
-57
lines changed

1 file changed

+36
-57
lines changed

examples/deal.II/bps.h

Lines changed: 36 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)