Skip to content

Commit 709aed7

Browse files
committed
Some more edits to get disabling of NEDELEC_ONE refinement working
1 parent e73e97e commit 709aed7

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

include/fe/fe_abstract.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,11 @@ class FEAbstract : public ReferenceCountedObject<FEAbstract>
609609
*/
610610
void add_p_level_in_reinit(bool value) { _add_p_level_in_reinit = value; }
611611

612+
/**
613+
* Whether to add p-refinement levels in init/reinit methods
614+
*/
615+
bool add_p_level_in_reinit() const { return _add_p_level_in_reinit; }
616+
612617
protected:
613618

614619
/**

include/systems/generic_projector.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2549,10 +2549,12 @@ void GenericProjector<FFunctor, GFunctor, FValue, ProjectionAction>::ProjectSide
25492549
continue;
25502550

25512551
FEType fe_type = base_fe_type;
2552+
const auto & dof_map = system.get_dof_map();
2553+
const bool add_p_level = dof_map.should_p_refine_var(var);
25522554

25532555
// This may be a p refined element
25542556
fe_type.order =
2555-
libMesh::Order (fe_type.order + elem.p_level());
2557+
libMesh::Order (fe_type.order + add_p_level*elem.p_level());
25562558

25572559
// If this is a Lagrange element with DoFs on sides then by
25582560
// convention we interpolate at the node rather than project
@@ -2664,7 +2666,7 @@ void GenericProjector<FFunctor, GFunctor, FValue, ProjectionAction>::ProjectSide
26642666

26652667
std::vector<unsigned int> side_dofs;
26662668
FEInterface::dofs_on_side(&elem, dim, base_fe_type,
2667-
context.side, side_dofs);
2669+
context.side, side_dofs, add_p_level);
26682670

26692671
this->construct_projection
26702672
(dof_indices, side_dofs, var_component,

src/systems/fem_context.C

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2025,20 +2025,24 @@ FEMContext::build_new_fe( const FEGenericBase<OutputShape>* fe,
20252025
libmesh_assert(this->has_elem() || fe_type.family == SCALAR);
20262026

20272027
#ifdef LIBMESH_ENABLE_AMR
2028+
const bool add_p_level = fe->add_p_level_in_reinit();
20282029
if ((algebraic_type() == OLD) &&
20292030
this->has_elem())
20302031
{
20312032
if (this->get_elem().p_refinement_flag() == Elem::JUST_REFINED)
2032-
fe_type.order = static_cast<Order>(fe_type.order - 1);
2033+
fe_type.order = static_cast<Order>(fe_type.order - add_p_level);
20332034
else if (this->get_elem().p_refinement_flag() == Elem::JUST_COARSENED)
2034-
fe_type.order = static_cast<Order>(fe_type.order + 1);
2035+
fe_type.order = static_cast<Order>(fe_type.order + add_p_level);
20352036
}
20362037
#endif // LIBMESH_ENABLE_AMR
20372038

20382039
const unsigned int elem_dim = this->has_elem() ? this->get_elem().dim() : 0;
20392040

20402041
FEGenericBase<OutputShape>* fe_new =
20412042
cached_fe<OutputShape>(elem_dim, fe_type, get_derivative_level);
2043+
#ifdef LIBMESH_ENABLE_AMR
2044+
fe_new->add_p_level_in_reinit(add_p_level);
2045+
#endif // LIBMESH_ENABLE_AMR
20422046

20432047
// Map the physical co-ordinates to the master co-ordinates using the inverse_map from fe_interface.h
20442048
// Build a vector of point co-ordinates to send to reinit

0 commit comments

Comments
 (0)