@@ -874,6 +874,9 @@ Real FE<3,SIDE_HIERARCHIC>::shape(const Elem * elem,
874874 libmesh_assert_less (i , 6 * dofs_per_side );
875875
876876 const unsigned int sidenum = cube_side (p );
877+ if (sidenum > 5 )
878+ return std ::numeric_limits < Real > ::quiet_NaN ();
879+
877880 const unsigned int dof_offset = sidenum * dofs_per_side ;
878881
879882 if (i < dof_offset ) // i is on a previous side
@@ -1095,6 +1098,9 @@ Real FE<3,SIDE_HIERARCHIC>::shape_deriv(const Elem * elem,
10951098 libmesh_assert_less (i , 6 * dofs_per_side );
10961099
10971100 const unsigned int sidenum = cube_side (p );
1101+ if (sidenum > 5 )
1102+ return std ::numeric_limits < Real > ::quiet_NaN ();
1103+
10981104 const unsigned int dof_offset = sidenum * dofs_per_side ;
10991105
11001106 if (i < dof_offset ) // i is on a previous side
@@ -1346,6 +1352,9 @@ Real FE<3,SIDE_HIERARCHIC>::shape_second_deriv(const Elem * elem,
13461352 libmesh_assert_less (i , 6 * dofs_per_side );
13471353
13481354 const unsigned int sidenum = cube_side (p );
1355+ if (sidenum > 5 )
1356+ return std ::numeric_limits < Real > ::quiet_NaN ();
1357+
13491358 const unsigned int dof_offset = sidenum * dofs_per_side ;
13501359
13511360 if (i < dof_offset ) // i is on a previous side
@@ -1578,8 +1587,10 @@ unsigned int cube_side (const Point & p)
15781587 return 4 ;
15791588 else if (zeta > maxabs_xi_eta )
15801589 return 5 ;
1581- else
1582- libmesh_error_msg ("Cannot determine side to evaluate" );
1590+
1591+ // We need to be able to return invalid values for cases where
1592+ // mixed FE are being evaluated together on edges and vertices
1593+ return 65535 ;
15831594}
15841595
15851596
0 commit comments