Skip to content

Commit 86456c8

Browse files
committed
Fix public accesses of old_dof_object
1 parent 1edadb8 commit 86456c8

4 files changed

Lines changed: 51 additions & 42 deletions

File tree

include/systems/generic_projector.h

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ class OldSolutionBase
609609
}
610610
else
611611
{
612-
if (!elem.old_dof_object)
612+
if (!elem.get_old_dof_object())
613613
{
614614
libmesh_error();
615615
}
@@ -659,7 +659,7 @@ class OldSolutionBase
659659
}
660660
else
661661
{
662-
if (!elem.old_dof_object)
662+
if (!elem.get_old_dof_object())
663663
return false;
664664

665665
old_context.pre_fe_reinit(sys, &elem);
@@ -795,12 +795,13 @@ class OldSolutionValue : public OldSolutionBase<Output, point_output>
795795

796796
// Be sure to handle cases where the variable wasn't defined on
797797
// this node (e.g. due to changing subdomain support)
798-
if (n.old_dof_object &&
799-
n.old_dof_object->n_vars(this->sys.number()) &&
800-
n.old_dof_object->n_comp(this->sys.number(), var))
798+
const DofObject * old_dof_object = n.get_old_dof_object();
799+
if (old_dof_object &&
800+
old_dof_object->n_vars(this->sys.number()) &&
801+
old_dof_object->n_comp(this->sys.number(), var))
801802
{
802803
const dof_id_type first_old_id =
803-
n.old_dof_object->dof_number(this->sys.number(), var, dim);
804+
old_dof_object->dof_number(this->sys.number(), var, dim);
804805
std::vector<dof_id_type> old_ids(n_mixed);
805806
std::iota(old_ids.begin(), old_ids.end(), first_old_id);
806807
old_solution.get(old_ids, derivs);
@@ -1031,15 +1032,16 @@ eval_at_node(const FEMContext & c,
10311032

10321033
const Elem::RefinementState flag = c.get_elem().refinement_flag();
10331034

1034-
if (n.old_dof_object &&
1035+
const DofObject * old_dof_object = n.get_old_dof_object();
1036+
if (old_dof_object &&
10351037
(!extra_hanging_dofs ||
10361038
flag == Elem::JUST_COARSENED ||
10371039
flag == Elem::DO_NOTHING) &&
1038-
n.old_dof_object->n_vars(sys.number()) &&
1039-
n.old_dof_object->n_comp(sys.number(), var))
1040+
old_dof_object->n_vars(sys.number()) &&
1041+
old_dof_object->n_comp(sys.number(), var))
10401042
{
10411043
const dof_id_type old_id =
1042-
n.old_dof_object->dof_number(sys.number(), var, 0);
1044+
old_dof_object->dof_number(sys.number(), var, 0);
10431045
return old_solution(old_id);
10441046
}
10451047

@@ -1081,19 +1083,20 @@ eval_at_node(const FEMContext & c,
10811083

10821084
const Elem::RefinementState flag = elem.refinement_flag();
10831085

1084-
if (n.old_dof_object &&
1086+
const DofObject * old_dof_object = n.get_old_dof_object();
1087+
if (old_dof_object &&
10851088
(!extra_hanging_dofs ||
10861089
flag == Elem::JUST_COARSENED ||
10871090
flag == Elem::DO_NOTHING) &&
1088-
n.old_dof_object->n_vars(sys.number()) &&
1089-
n.old_dof_object->n_comp(sys.number(), var))
1091+
old_dof_object->n_vars(sys.number()) &&
1092+
old_dof_object->n_comp(sys.number(), var))
10901093
{
10911094
Gradient return_val;
10921095

10931096
for (unsigned int dim = 0; dim < elem.dim(); ++dim)
10941097
{
10951098
const dof_id_type old_id =
1096-
n.old_dof_object->dof_number(sys.number(), var, dim);
1099+
old_dof_object->dof_number(sys.number(), var, dim);
10971100
return_val(dim) = old_solution(old_id);
10981101
}
10991102

@@ -1138,18 +1141,19 @@ eval_at_node(const FEMContext & c,
11381141

11391142
const Elem::RefinementState flag = c.get_elem().refinement_flag();
11401143

1141-
if (n.old_dof_object &&
1144+
const DofObject * old_dof_object = n.get_old_dof_object();
1145+
if (old_dof_object &&
11421146
(!extra_hanging_dofs ||
11431147
flag == Elem::JUST_COARSENED ||
11441148
flag == Elem::DO_NOTHING) &&
1145-
n.old_dof_object->n_vars(sys.number()) &&
1146-
n.old_dof_object->n_comp(sys.number(), var))
1149+
old_dof_object->n_vars(sys.number()) &&
1150+
old_dof_object->n_comp(sys.number(), var))
11471151
{
11481152
Gradient g;
11491153
for (unsigned int d = 0; d != elem_dim; ++d)
11501154
{
11511155
const dof_id_type old_id =
1152-
n.old_dof_object->dof_number(sys.number(), var, d+1);
1156+
old_dof_object->dof_number(sys.number(), var, d+1);
11531157
g(d) = old_solution(old_id);
11541158
}
11551159
return g;
@@ -1516,7 +1520,8 @@ void GenericProjector<FFunctor, GFunctor, FValue, ProjectionAction>::SortAndCopy
15161520
// wasn't just refined or just coarsened into activity, then
15171521
// it must be newly added, so the user is responsible for
15181522
// setting the new dofs on it during a grid projection.
1519-
if (!elem->old_dof_object &&
1523+
const DofObject * old_dof_object = elem->get_old_dof_object();
1524+
if (!old_dof_object &&
15201525
elem->refinement_flag() != Elem::JUST_REFINED &&
15211526
elem->refinement_flag() != Elem::JUST_COARSENED)
15221527
continue;

src/base/dof_map.C

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -546,13 +546,13 @@ void DofMap::reinit(MeshBase & mesh)
546546
for (auto & node : mesh.node_ptr_range())
547547
{
548548
node->clear_old_dof_object();
549-
libmesh_assert (!node->old_dof_object);
549+
libmesh_assert (!node->get_old_dof_object());
550550
}
551551

552552
for (auto & elem : mesh.element_ptr_range())
553553
{
554554
elem->clear_old_dof_object();
555-
libmesh_assert (!elem->old_dof_object);
555+
libmesh_assert (!elem->get_old_dof_object());
556556
}
557557

558558

@@ -567,11 +567,11 @@ void DofMap::reinit(MeshBase & mesh)
567567
continue;
568568

569569
for (Node & node : elem->node_ref_range())
570-
if (node.old_dof_object == nullptr)
570+
if (node.get_old_dof_object() == nullptr)
571571
if (node.has_dofs(sys_num))
572572
node.set_old_dof_object();
573573

574-
libmesh_assert (!elem->old_dof_object);
574+
libmesh_assert (!elem->get_old_dof_object());
575575

576576
if (elem->has_dofs(sys_num))
577577
elem->set_old_dof_object();
@@ -2608,7 +2608,7 @@ void DofMap::old_dof_indices (const Elem * const elem,
26082608
// then we should have old dof indices too.
26092609
libmesh_assert(!elem->has_dofs(sys_num) ||
26102610
elem->p_refinement_flag() == Elem::JUST_REFINED ||
2611-
elem->old_dof_object);
2611+
elem->get_old_dof_object());
26122612

26132613
// Clear the DOF indices vector.
26142614
di.clear();

src/mesh/mesh_tools.C

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,11 +1217,11 @@ void MeshTools::libmesh_assert_old_dof_objects (const MeshBase & mesh)
12171217
continue;
12181218

12191219
if (elem->has_dofs())
1220-
libmesh_assert(elem->old_dof_object);
1220+
libmesh_assert(elem->get_old_dof_object());
12211221

12221222
for (auto & node : elem->node_ref_range())
12231223
if (node.has_dofs())
1224-
libmesh_assert(node.old_dof_object);
1224+
libmesh_assert(node.get_old_dof_object());
12251225
}
12261226
}
12271227
#else

src/systems/system_projection.C

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -566,12 +566,13 @@ public:
566566

567567
// Be sure to handle cases where the variable wasn't defined on
568568
// this node (e.g. due to changing subdomain support)
569-
if (n.old_dof_object &&
570-
n.old_dof_object->n_vars(this->sys.number()) &&
571-
n.old_dof_object->n_comp(this->sys.number(), var))
569+
const DofObject * old_dof_object = n.get_old_dof_object();
570+
if (old_dof_object &&
571+
old_dof_object->n_vars(this->sys.number()) &&
572+
old_dof_object->n_comp(this->sys.number(), var))
572573
{
573574
const dof_id_type first_old_id =
574-
n.old_dof_object->dof_number(this->sys.number(), var, dim);
575+
old_dof_object->dof_number(this->sys.number(), var, dim);
575576
std::vector<dof_id_type> old_ids(n_mixed);
576577
std::iota(old_ids.begin(), old_ids.end(), first_old_id);
577578

@@ -643,7 +644,7 @@ public:
643644
// and we should never need those indices
644645
if (nc != 0)
645646
{
646-
libmesh_assert(old_elem.old_dof_object);
647+
const DofObject & old_dof_object = old_elem.get_old_dof_object_ref();
647648

648649
const auto [vg, vig] =
649650
elem.var_to_vg_and_offset(sys_num,var_num);
@@ -655,7 +656,7 @@ public:
655656
for (unsigned int i=0; i<nc; i++)
656657
{
657658
const dof_id_type d_old =
658-
old_elem.old_dof_object->dof_number(sys_num, vg, vig, i, n_comp);
659+
old_dof_object.dof_number(sys_num, vg, vig, i, n_comp);
659660
const dof_id_type d_new =
660661
elem.dof_number(sys_num, vg, vig, i, n_comp);
661662
libmesh_assert_not_equal_to (d_old, DofObject::invalid_id);
@@ -800,16 +801,17 @@ eval_at_node(const FEMContext & c,
800801

801802
const Elem::RefinementState flag = c.get_elem().refinement_flag();
802803

803-
if (n.old_dof_object &&
804+
const DofObject * old_dof_object = n.get_old_dof_object();
805+
if (old_dof_object &&
804806
(!extra_hanging_dofs ||
805807
flag == Elem::JUST_COARSENED ||
806808
flag == Elem::DO_NOTHING) &&
807-
n.old_dof_object->n_vars(sys.number()) &&
808-
n.old_dof_object->n_comp(sys.number(), i))
809+
old_dof_object->n_vars(sys.number()) &&
810+
old_dof_object->n_comp(sys.number(), i))
809811
{
810812
DynamicSparseNumberArray<Real, dof_id_type> returnval;
811813
const dof_id_type old_id =
812-
n.old_dof_object->dof_number(sys.number(), i, 0);
814+
old_dof_object->dof_number(sys.number(), i, 0);
813815
returnval.resize(1);
814816
returnval.raw_at(0) = 1;
815817
returnval.raw_index(0) = old_id;
@@ -846,18 +848,19 @@ eval_at_node(const FEMContext & c,
846848

847849
const Elem::RefinementState flag = c.get_elem().refinement_flag();
848850

849-
if (n.old_dof_object &&
851+
const DofObject * old_dof_object = n.get_old_dof_object();
852+
if (old_dof_object &&
850853
(!extra_hanging_dofs ||
851854
flag == Elem::JUST_COARSENED ||
852855
flag == Elem::DO_NOTHING) &&
853-
n.old_dof_object->n_vars(sys.number()) &&
854-
n.old_dof_object->n_comp(sys.number(), i))
856+
old_dof_object->n_vars(sys.number()) &&
857+
old_dof_object->n_comp(sys.number(), i))
855858
{
856859
VectorValue<DynamicSparseNumberArray<Real, dof_id_type> > g;
857860
for (unsigned int d = 0; d != elem_dim; ++d)
858861
{
859862
const dof_id_type old_id =
860-
n.old_dof_object->dof_number(sys.number(), i, d+1);
863+
old_dof_object->dof_number(sys.number(), i, d+1);
861864
g(d).resize(1);
862865
g(d).raw_at(0) = 1;
863866
g(d).raw_index(0) = old_id;
@@ -1354,13 +1357,14 @@ void BuildProjectionList::operator()(const ConstElemRange & range)
13541357
// ... but we need a better way to test for that; the code
13551358
// below breaks on any FE type for which the elem stores no
13561359
// dofs.
1357-
// if (!elem->old_dof_object || !elem->old_dof_object->has_dofs(system.number()))
1360+
// if (!elem->get_old_dof_object() || !elem->get_old_dof_object()->has_dofs(system.number()))
13581361
// continue;
13591362

13601363
// Examining refinement flags instead should distinguish
13611364
// between refinement-added and user-added elements lacking
13621365
// old_dof_object
1363-
if (!elem->old_dof_object &&
1366+
const DofObject * old_dof_object = elem->get_old_dof_object();
1367+
if (!old_dof_object &&
13641368
elem->refinement_flag() != Elem::JUST_REFINED &&
13651369
elem->refinement_flag() != Elem::JUST_COARSENED)
13661370
continue;

0 commit comments

Comments
 (0)