Skip to content

Commit 8e3bb0a

Browse files
committed
Add/use DofObject::old_dof_object accessors
* Decided to call the pointer-returning version get_old_dof_object() and the reference-returning version get_old_dof_object_ref() for brevity. * Use old_dof_object accessors in dof_map.C * Use old_dof_object accessors in system_projection.C
1 parent ecb8523 commit 8e3bb0a

5 files changed

Lines changed: 40 additions & 19 deletions

File tree

include/base/dof_object.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,31 @@ class DofObject : public ReferenceCountedObject<DofObject>
8080
*/
8181
std::unique_ptr<DofObject> old_dof_object;
8282

83+
/**
84+
* Pointer accessor for previously public old_dof_object. If you
85+
* want to assert that the old_dof_object pointer is valid as well,
86+
* consider using the get_old_dof_object_ref() accessor instead.
87+
*/
88+
DofObject * get_old_dof_object() { return old_dof_object.get(); }
89+
const DofObject * get_old_dof_object() const { return old_dof_object.get(); }
90+
91+
/**
92+
* As above, but do not use in situations where the old_dof_object
93+
* may be nullptr, since this function asserts that the
94+
* old_dof_object is valid before returning a reference to it.
95+
*/
96+
DofObject & get_old_dof_object_ref()
97+
{
98+
libmesh_assert(old_dof_object);
99+
return *old_dof_object;
100+
}
101+
102+
const DofObject & get_old_dof_object_ref() const
103+
{
104+
libmesh_assert(old_dof_object);
105+
return *old_dof_object;
106+
}
107+
83108
/**
84109
* Sets the \p old_dof_object to nullptr
85110
*/

include/systems/generic_projector.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -887,24 +887,23 @@ class OldSolutionValue : public OldSolutionBase<Output, point_output>
887887
// zero.
888888
if (nc != 0)
889889
{
890-
const DofObject *old_dof_object = old_elem.old_dof_object.get();
891-
libmesh_assert(old_dof_object);
890+
const DofObject & old_dof_object = old_elem.get_old_dof_object_ref();
892891
libmesh_assert_greater(elem.n_systems(), sys_num);
893892

894893
const std::pair<unsigned int, unsigned int>
895894
vg_and_offset = elem.var_to_vg_and_offset(sys_num,var_num);
896895
const unsigned int vg = vg_and_offset.first;
897896
const unsigned int vig = vg_and_offset.second;
898897

899-
unsigned int n_comp = old_dof_object->n_comp_group(sys_num,vg);
898+
unsigned int n_comp = old_dof_object.n_comp_group(sys_num,vg);
900899
n_comp = std::min(n_comp, nc);
901900

902901
std::vector<dof_id_type> old_dof_indices(n_comp);
903902

904903
for (unsigned int i=0; i != n_comp; ++i)
905904
{
906905
const dof_id_type d_old =
907-
old_dof_object->dof_number(sys_num, vg, vig, i, n_comp);
906+
old_dof_object.dof_number(sys_num, vg, vig, i, n_comp);
908907
const dof_id_type d_new =
909908
elem.dof_number(sys_num, vg, vig, i, n_comp);
910909
libmesh_assert_not_equal_to (d_old, DofObject::invalid_id);

src/base/dof_map.C

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,9 +2260,8 @@ void DofMap::old_dof_indices (const Elem & elem,
22602260
std::vector<dof_id_type> & di,
22612261
const unsigned int vn) const
22622262
{
2263-
const DofObject * old_obj = elem.node_ref(n).old_dof_object.get();
2264-
libmesh_assert(old_obj);
2265-
this->_node_dof_indices(elem, n, *old_obj, di, vn);
2263+
const DofObject & old_obj = elem.node_ref(n).get_old_dof_object_ref();
2264+
this->_node_dof_indices(elem, n, old_obj, di, vn);
22662265
}
22672266

22682267
#endif // LIBMESH_ENABLE_AMR
@@ -2687,8 +2686,7 @@ void DofMap::old_dof_indices (const Elem * const elem,
26872686
for (unsigned int n=0; n<n_nodes; n++)
26882687
{
26892688
const Node * node = nodes_ptr[n];
2690-
const DofObject * old_dof_obj = node->old_dof_object.get();
2691-
libmesh_assert(old_dof_obj);
2689+
const DofObject & old_dof_obj = node->get_old_dof_object_ref();
26922690

26932691
// There is a potential problem with h refinement. Imagine a
26942692
// quad9 that has a linear FE on it. Then, on the hanging side,
@@ -2701,7 +2699,7 @@ void DofMap::old_dof_indices (const Elem * const elem,
27012699
#endif
27022700
ndan (type, static_cast<Order>(var.type().order + extra_order), n);
27032701

2704-
const int n_comp = old_dof_obj->n_comp_group(sys_num,vg);
2702+
const int n_comp = old_dof_obj.n_comp_group(sys_num,vg);
27052703

27062704
// If this is a non-vertex on a hanging node with extra
27072705
// degrees of freedom, we use the non-vertex dofs (which
@@ -2724,7 +2722,7 @@ void DofMap::old_dof_indices (const Elem * const elem,
27242722
for (int i=n_comp-1; i>=dof_offset; i--)
27252723
{
27262724
const dof_id_type d =
2727-
old_dof_obj->dof_number(sys_num, vg, vig, i, n_comp);
2725+
old_dof_obj.dof_number(sys_num, vg, vig, i, n_comp);
27282726

27292727
// On a newly-expanded subdomain, we
27302728
// may have some DoFs that didn't
@@ -2748,7 +2746,7 @@ void DofMap::old_dof_indices (const Elem * const elem,
27482746
for (unsigned int i=0; i != old_nc; ++i)
27492747
{
27502748
const dof_id_type d =
2751-
old_dof_obj->dof_number(sys_num, vg, vig, i, n_comp);
2749+
old_dof_obj.dof_number(sys_num, vg, vig, i, n_comp);
27522750

27532751
libmesh_assert_not_equal_to (d, DofObject::invalid_id);
27542752

@@ -2765,20 +2763,19 @@ void DofMap::old_dof_indices (const Elem * const elem,
27652763

27662764
if (nc != 0)
27672765
{
2768-
const DofObject * old_dof_obj = elem->old_dof_object.get();
2769-
libmesh_assert(old_dof_obj);
2766+
const DofObject & old_dof_obj = elem->get_old_dof_object_ref();
27702767

27712768
const unsigned int n_comp =
2772-
old_dof_obj->n_comp_group(sys_num,vg);
2769+
old_dof_obj.n_comp_group(sys_num,vg);
27732770

2774-
if (old_dof_obj->n_systems() > sys_num &&
2771+
if (old_dof_obj.n_systems() > sys_num &&
27752772
nc <= n_comp)
27762773
{
27772774

27782775
for (unsigned int i=0; i<nc; i++)
27792776
{
27802777
const dof_id_type d =
2781-
old_dof_obj->dof_number(sys_num, vg, vig, i, n_comp);
2778+
old_dof_obj.dof_number(sys_num, vg, vig, i, n_comp);
27822779

27832780
di.push_back(d);
27842781
}

src/base/dof_object.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ DofObject & DofObject::operator= (const DofObject & dof_obj)
8181

8282
#ifdef LIBMESH_ENABLE_AMR
8383
this->clear_old_dof_object();
84-
this->old_dof_object = this->construct(dof_obj.old_dof_object.get());
84+
this->old_dof_object = this->construct(dof_obj.get_old_dof_object());
8585
#endif
8686

8787
_id = dof_obj._id;

src/systems/system_projection.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ void BuildProjectionList::operator()(const ConstElemRange & range)
13791379

13801380
for (auto & node : elem->node_ref_range())
13811381
{
1382-
const DofObject * old_dofs = node.old_dof_object.get();
1382+
const DofObject * old_dofs = node.get_old_dof_object();
13831383

13841384
if (old_dofs)
13851385
{

0 commit comments

Comments
 (0)