libMesh
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Friends | List of all members
libMesh::StaticCondensationDofMap Class Reference

A class holding degree of freedom information pertinent to static condensation. More...

#include <static_condensation_dof_map.h>

Inheritance diagram for libMesh::StaticCondensationDofMap:
[legend]

Classes

struct  DofData
 Data stored on a per-element basis used to compute element Schur complements and their applications to vectors. More...
 

Public Member Functions

 StaticCondensationDofMap (MeshBase &mesh, System &system, const DofMap &dof_map)
 
virtual ~StaticCondensationDofMap ()
 
void reinit ()
 Build the element global to local index maps. More...
 
void dont_condense_vars (const std::unordered_set< unsigned int > &vars)
 Add vars to the list of variables not to condense. More...
 
const std::unordered_set< unsigned int > & uncondensed_vars () const
 
virtual unsigned int n_variables () const override
 
virtual const Variablevariable (const unsigned int c) const override
 
virtual void dof_indices (const Elem *const elem, std::vector< dof_id_type > &di, const unsigned int vn, int p_level=-12345) const override
 Fills the vector di with the global degree of freedom indices for the element. More...
 
virtual void dof_indices (const Node *const node, std::vector< dof_id_type > &di, const unsigned int vn) const override
 Fills the vector di with the global degree of freedom indices for the node, for one variable vn. More...
 
const Systemreduced_system () const
 
bool initialized () const
 Whether we are initialized. More...
 
virtual void clear () override
 
dof_id_type get_reduced_from_global_constraint_dof (dof_id_type full_dof) const
 Retrieve the dof index in the reduced system corresponding to the provided dof index in the full system. More...
 
dof_id_type first_dof (const processor_id_type proc) const
 
dof_id_type first_dof () const
 
dof_id_type end_dof (const processor_id_type proc) const
 
dof_id_type end_dof () const
 
dof_id_type n_dofs () const
 
dof_id_type n_dofs_on_processor (const processor_id_type proc) const
 
dof_id_type n_local_dofs () const
 
dof_id_type n_old_dofs () const
 
dof_id_type first_old_dof (const processor_id_type proc) const
 
dof_id_type first_old_dof () const
 
dof_id_type end_old_dof (const processor_id_type proc) const
 
dof_id_type end_old_dof () const
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Protected Member Functions

std::size_t compute_dof_info (dof_id_type n_local_dofs)
 compute the key degree of freedom information given the local number of degrees of freedom on this process More...
 

Protected Attributes

std::vector< dof_id_type_first_df
 First DOF index on processor p. More...
 
std::vector< dof_id_type_end_df
 Last DOF index (plus 1) on processor p. More...
 
dof_id_type _n_dfs
 Total number of degrees of freedom. More...
 
dof_id_type _n_old_dfs
 Total number of degrees of freedom on old dof objects. More...
 
std::vector< dof_id_type_first_old_df
 First old DOF index on processor p. More...
 
std::vector< dof_id_type_end_old_df
 Last old DOF index (plus 1) on processor p. More...
 
const Parallel::Communicator_communicator
 

Private Member Functions

void add_uncondensed_dof_plus_constraint_dofs (dof_id_type full_dof_number, bool involved_in_constraints, std::unordered_map< dof_id_type, dof_id_type > &uncondensed_global_to_local_map, std::unordered_set< dof_id_type > &local_uncondensed_dofs_set, std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &nonlocal_uncondensed_dofs, std::vector< dof_id_type > &elem_uncondensed_dofs, dof_id_type &uncondensed_local_dof_number, std::unordered_set< dof_id_type > &constraint_dofs)
 Add an uncondensed dof potentially along with constraining dofs which themselves must/will also be uncondensed. More...
 
void add_uncondensed_dof (dof_id_type full_dof_number, bool involved_in_constraints, std::unordered_map< dof_id_type, dof_id_type > &uncondensed_global_to_local_map, std::unordered_set< dof_id_type > &local_uncondensed_dofs_set, std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &nonlocal_uncondensed_dofs, std::vector< dof_id_type > &elem_uncondensed_dofs, dof_id_type &uncondensed_local_dof_number, std::unordered_set< dof_id_type > &constraint_dofs)
 Add an uncondensed dof. More...
 

Private Attributes

std::unordered_map< dof_id_type, DofData_elem_to_dof_data
 A map from element ID to Schur complement data. More...
 
std::vector< dof_id_type_local_uncondensed_dofs
 All the uncondensed degrees of freedom (numbered in the "full" uncondensed + condensed space). More...
 
MeshBase_mesh
 
System_system
 
const DofMap_dof_map
 
std::unordered_set< unsigned int_uncondensed_vars
 Variables for which we will keep all dofs. More...
 
bool _sc_is_initialized
 Whether our object has been initialized. More...
 
std::vector< Variable_reduced_vars
 The variables in the reduced system. More...
 
System_reduced_system
 A dummyish system to help with DofObjects. More...
 
std::unique_ptr< SparsityPattern::Build_reduced_sp
 Owned storage of the reduced system sparsity pattern. More...
 
std::vector< dof_id_type_reduced_nnz
 Number of on-diagonal nonzeros per row in the reduced system. More...
 
std::vector< dof_id_type_reduced_noz
 Number of off-diagonal nonzeros per row in the reduced system. More...
 
std::unordered_map< dof_id_type, dof_id_type_full_to_reduced_constraint_dofs
 A small map from full system degrees of freedom to reduced/condensed system degrees of freedom involved in constraints. More...
 

Friends

class StaticCondensation
 Friend the static condensation matrix class so they can inspect our degree of freedom data. More...
 

Detailed Description

A class holding degree of freedom information pertinent to static condensation.

Static condensation is a process for reducing the number of unknowns in a linear(ized) system. It is often used in conjunction with a hybridized discontinuous Galerkin (HDG) method to reduce the number of unknowns in the linear system to something more on the order of a continuous Galerkin (CG) method as opposed to a discontinuous Galerkin method. In the HDG example, degrees of freedom on the element interiors are condensed out and only the degrees of freedom on element faces are retained in the condensed system. Static condensation is not only applicable to HDG methods, however. One could also use static condensation with a high order CG method, again removing internal degrees of freedom and leaving those on element boundaries.

Users may query this class for condensed space degree of freedom information associated with elements. Queries with nodes are not supported. This class also holds information for mapping degree of freedom indices in the global, uncondensed space to local element degree of freedom numbers. This information is essential in order to build the element Schur complement matrices that are used to map global system vector and matrix data to the condensed system vector and matrix data

Definition at line 59 of file static_condensation_dof_map.h.

Constructor & Destructor Documentation

◆ StaticCondensationDofMap()

libMesh::StaticCondensationDofMap::StaticCondensationDofMap ( MeshBase mesh,
System system,
const DofMap dof_map 
)

Definition at line 31 of file static_condensation_dof_map.C.

34  : DofMapBase(dof_map.comm()),
35  _mesh(mesh),
36  _system(system),
37  _dof_map(dof_map),
38  _sc_is_initialized(false)
39 {
40  libmesh_experimental();
41 }
MeshBase & mesh
bool _sc_is_initialized
Whether our object has been initialized.
DofMapBase(const Parallel::Communicator &comm)
Definition: dof_map_base.C:23

◆ ~StaticCondensationDofMap()

libMesh::StaticCondensationDofMap::~StaticCondensationDofMap ( )
virtualdefault

Member Function Documentation

◆ add_uncondensed_dof()

void libMesh::StaticCondensationDofMap::add_uncondensed_dof ( dof_id_type  full_dof_number,
bool  involved_in_constraints,
std::unordered_map< dof_id_type, dof_id_type > &  uncondensed_global_to_local_map,
std::unordered_set< dof_id_type > &  local_uncondensed_dofs_set,
std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &  nonlocal_uncondensed_dofs,
std::vector< dof_id_type > &  elem_uncondensed_dofs,
dof_id_type uncondensed_local_dof_number,
std::unordered_set< dof_id_type > &  constraint_dofs 
)
private

Add an uncondensed dof.

Parameters
full_dof_numberThe dof id in the full (uncondensed + condensed) system
involved_in_constraintsWhether the full_dof_number is involved in constraints
uncondensed_local_to_global_mapA map from uncondensed full dof numbering to local (element) numbering for a given element
local_uncondensed_dofs_setSet of local uncondensed degrees of freedom (numbered in the full system)
nonlocal_uncondensed_dofsMap from processor IDs to sets of nonlocal uncondensed degrees of freedom (numbered in the full system)
elem_uncondensed_dofsUsed for temporary storage of uncondensed degrees of freedom active on an element
uncondensed_local_dof_numberCounter for number of uncondensed dofs on an element
constraint_dofsSet of degrees of freedom numbered in the full system involved in constraints

Definition at line 45 of file static_condensation_dof_map.C.

References _dof_map, libMesh::DofMap::dof_owner(), and libMesh::DofMap::local_index().

Referenced by add_uncondensed_dof_plus_constraint_dofs().

55 {
56  if (uncondensed_global_to_local_map.count(full_dof_number))
57  // We've already seen this dof on this element
58  return;
59 
60  if (_dof_map.local_index(full_dof_number))
61  local_uncondensed_dofs_set.insert(full_dof_number);
62  else
63  nonlocal_uncondensed_dofs[_dof_map.dof_owner(full_dof_number)].insert(full_dof_number);
64 
65  elem_uncondensed_dofs.push_back(full_dof_number);
66  (uncondensed_global_to_local_map)[full_dof_number] = uncondensed_local_dof_number++;
67  if (involved_in_constraints)
68  constraint_dofs.insert(full_dof_number);
69 }
processor_id_type dof_owner(const dof_id_type dof) const
Definition: dof_map.h:707
bool local_index(dof_id_type dof_index) const
Definition: dof_map.h:839

◆ add_uncondensed_dof_plus_constraint_dofs()

void libMesh::StaticCondensationDofMap::add_uncondensed_dof_plus_constraint_dofs ( dof_id_type  full_dof_number,
bool  involved_in_constraints,
std::unordered_map< dof_id_type, dof_id_type > &  uncondensed_global_to_local_map,
std::unordered_set< dof_id_type > &  local_uncondensed_dofs_set,
std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &  nonlocal_uncondensed_dofs,
std::vector< dof_id_type > &  elem_uncondensed_dofs,
dof_id_type uncondensed_local_dof_number,
std::unordered_set< dof_id_type > &  constraint_dofs 
)
private

Add an uncondensed dof potentially along with constraining dofs which themselves must/will also be uncondensed.

Parameters
full_dof_numberThe dof id in the full (uncondensed + condensed) system
involved_in_constraintsWhether the full_dof_number is involved in constraints
uncondensed_local_to_global_mapA map from uncondensed full dof numbering to local (element) numbering for a given element
local_uncondensed_dofs_setSet of local uncondensed degrees of freedom (numbered in the full system)
nonlocal_uncondensed_dofsMap from processor IDs to sets of nonlocal uncondensed degrees of freedom (numbered in the full system)
elem_uncondensed_dofsUsed for temporary storage of uncondensed degrees of freedom active on an element
uncondensed_local_dof_numberCounter for number of uncondensed dofs on an element
constraint_dofsSet of degrees of freedom numbered in the full system involved in constraints

Definition at line 71 of file static_condensation_dof_map.C.

References _dof_map, add_uncondensed_dof(), libMesh::DofMap::get_dof_constraints(), libMesh::libmesh_ignore(), and libMesh::MeshTools::weight().

Referenced by reinit().

81 {
82  const auto & full_dof_constraints = _dof_map.get_dof_constraints();
83  auto it = full_dof_constraints.find(full_dof_number);
84  const bool is_constrained = it != full_dof_constraints.end();
85  involved_in_constraints = involved_in_constraints || is_constrained;
86 
87  this->add_uncondensed_dof(full_dof_number,
88  involved_in_constraints,
89  uncondensed_global_to_local_map,
90  local_uncondensed_dofs_set,
91  nonlocal_uncondensed_dofs,
92  elem_uncondensed_dofs,
93  uncondensed_local_dof_number,
94  constraint_dofs);
95  if (is_constrained)
96  for (const auto [full_constraining_dof, weight] : it->second)
97  {
99  // Our constraining dofs may themselves be constrained
100  this->add_uncondensed_dof_plus_constraint_dofs(full_constraining_dof,
101  /*involved_in_constraints=*/true,
102  uncondensed_global_to_local_map,
103  local_uncondensed_dofs_set,
104  nonlocal_uncondensed_dofs,
105  elem_uncondensed_dofs,
106  uncondensed_local_dof_number,
107  constraint_dofs);
108  }
109 }
void add_uncondensed_dof(dof_id_type full_dof_number, bool involved_in_constraints, std::unordered_map< dof_id_type, dof_id_type > &uncondensed_global_to_local_map, std::unordered_set< dof_id_type > &local_uncondensed_dofs_set, std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &nonlocal_uncondensed_dofs, std::vector< dof_id_type > &elem_uncondensed_dofs, dof_id_type &uncondensed_local_dof_number, std::unordered_set< dof_id_type > &constraint_dofs)
Add an uncondensed dof.
void libmesh_ignore(const Args &...)
dof_id_type weight(const MeshBase &mesh, const processor_id_type pid)
Definition: mesh_tools.C:437
const DofConstraints & get_dof_constraints() const
Provide a const accessor to the DofConstraints map.
Definition: dof_map.h:1049
void add_uncondensed_dof_plus_constraint_dofs(dof_id_type full_dof_number, bool involved_in_constraints, std::unordered_map< dof_id_type, dof_id_type > &uncondensed_global_to_local_map, std::unordered_set< dof_id_type > &local_uncondensed_dofs_set, std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &nonlocal_uncondensed_dofs, std::vector< dof_id_type > &elem_uncondensed_dofs, dof_id_type &uncondensed_local_dof_number, std::unordered_set< dof_id_type > &constraint_dofs)
Add an uncondensed dof potentially along with constraining dofs which themselves must/will also be un...

◆ clear()

void libMesh::StaticCondensationDofMap::clear ( )
overridevirtual

Reimplemented from libMesh::DofMapBase.

Definition at line 422 of file static_condensation_dof_map.C.

References _elem_to_dof_data, _reduced_nnz, _reduced_noz, _reduced_sp, _reduced_vars, _sc_is_initialized, _uncondensed_vars, and libMesh::DofMapBase::clear().

Referenced by reinit().

423 {
425  _elem_to_dof_data.clear();
426  _uncondensed_vars.clear();
427  _reduced_vars.clear();
428  _reduced_sp = nullptr;
429  _reduced_nnz.clear();
430  _reduced_noz.clear();
431  _sc_is_initialized = false;
432 }
virtual void clear()
Definition: dof_map_base.C:71
std::unordered_set< unsigned int > _uncondensed_vars
Variables for which we will keep all dofs.
std::vector< dof_id_type > _reduced_nnz
Number of on-diagonal nonzeros per row in the reduced system.
std::vector< dof_id_type > _reduced_noz
Number of off-diagonal nonzeros per row in the reduced system.
std::vector< Variable > _reduced_vars
The variables in the reduced system.
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
bool _sc_is_initialized
Whether our object has been initialized.
std::unique_ptr< SparsityPattern::Build > _reduced_sp
Owned storage of the reduced system sparsity pattern.

◆ comm()

const Parallel::Communicator& libMesh::ParallelObject::comm ( ) const
inlineinherited
Returns
A reference to the Parallel::Communicator object used by this mesh.

Definition at line 97 of file parallel_object.h.

References libMesh::ParallelObject::_communicator.

Referenced by libMesh::__libmesh_petsc_diff_solver_jacobian(), libMesh::__libmesh_petsc_diff_solver_monitor(), libMesh::__libmesh_petsc_diff_solver_residual(), libMesh::__libmesh_tao_equality_constraints(), libMesh::__libmesh_tao_equality_constraints_jacobian(), libMesh::__libmesh_tao_gradient(), libMesh::__libmesh_tao_hessian(), libMesh::__libmesh_tao_inequality_constraints(), libMesh::__libmesh_tao_inequality_constraints_jacobian(), libMesh::__libmesh_tao_objective(), libMesh::MeshRefinement::_coarsen_elements(), libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_get_diagonal(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_get_diagonal(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult(), libMesh::SlepcEigenSolver< libMesh::Number >::_petsc_shell_matrix_mult(), libMesh::PetscLinearSolver< Number >::_petsc_shell_matrix_mult_add(), libMesh::MeshRefinement::_refine_elements(), libMesh::MeshRefinement::_smooth_flags(), libMesh::DofMap::add_constraints_to_send_list(), add_cube_convex_hull_to_mesh(), libMesh::PetscDMWrapper::add_dofs_helper(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::TransientRBConstruction::add_IC_to_RB_space(), libMesh::RBEIMEvaluation::add_interpolation_data(), libMesh::CondensedEigenSystem::add_matrices(), libMesh::EigenSystem::add_matrices(), libMesh::System::add_matrix(), libMesh::RBConstruction::add_scaled_matrix_and_vector(), libMesh::System::add_variable(), libMesh::System::add_variables(), libMesh::System::add_vector(), libMesh::MeshTools::Modification::all_tri(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::TransientRBConstruction::allocate_data_structures(), libMesh::RBConstruction::allocate_data_structures(), libMesh::TransientRBConstruction::assemble_affine_expansion(), libMesh::AdvectionSystem::assemble_claw_rhs(), libMesh::FEMSystem::assemble_qoi(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::MeshCommunication::assign_global_indices(), libMesh::Partitioner::assign_partitioning(), libMesh::MeshTools::Generation::build_extrusion(), libMesh::Partitioner::build_graph(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::PetscDMWrapper::build_section(), libMesh::PetscDMWrapper::build_sf(), libMesh::MeshBase::cache_elem_data(), libMesh::System::calculate_norm(), libMesh::DofMap::check_dirichlet_bcid_consistency(), libMesh::RBConstruction::compute_Fq_representor_innerprods(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::RBConstruction::compute_output_dual_innerprods(), libMesh::RBConstruction::compute_residual_dual_norm_slow(), libMesh::RBSCMConstruction::compute_SCM_bounds_on_training_set(), libMesh::DofMap::computed_sparsity_already(), libMesh::Problem_Interface::computeF(), libMesh::Problem_Interface::computeJacobian(), libMesh::Problem_Interface::computePreconditioner(), libMesh::ContinuationSystem::ContinuationSystem(), libMesh::MeshBase::copy_constraint_rows(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::CondensedEigenSystem::copy_super_to_sub(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::MeshTools::create_bounding_box(), libMesh::DofMap::create_dof_constraints(), libMesh::MeshTools::create_nodal_bounding_box(), libMesh::MeshRefinement::create_parent_error_vector(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::MeshTools::create_subdomain_bounding_box(), libMesh::PetscMatrix< T >::create_submatrix_nosort(), create_wrapped_function(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::RBEIMEvaluation::distribute_bfs(), DMlibMeshFunction(), DMlibMeshJacobian(), DMlibMeshSetSystem_libMesh(), DMVariableBounds_libMesh(), libMesh::DTKSolutionTransfer::DTKSolutionTransfer(), libMesh::MeshRefinement::eliminate_unrefined_patches(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_interiors(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_nodes(), libMesh::RBEIMConstruction::enrich_eim_approximation_on_sides(), libMesh::TransientRBConstruction::enrich_RB_space(), libMesh::EpetraVector< T >::EpetraVector(), AssembleOptimization::equality_constraints(), libMesh::PatchRecoveryErrorEstimator::estimate_error(), libMesh::WeightedPatchRecoveryErrorEstimator::estimate_error(), libMesh::AdjointRefinementEstimator::estimate_error(), libMesh::ExactErrorEstimator::estimate_error(), libMesh::MeshRefinement::flag_elements_by_elem_fraction(), libMesh::MeshRefinement::flag_elements_by_error_fraction(), libMesh::MeshRefinement::flag_elements_by_error_tolerance(), libMesh::MeshRefinement::flag_elements_by_mean_stddev(), libMesh::MeshRefinement::flag_elements_by_nelem_target(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::DofMap::gather_constraints(), libMesh::MeshfreeInterpolation::gather_remote_data(), libMesh::CondensedEigenSystem::get_eigenpair(), libMesh::RBEIMEvaluation::get_eim_basis_function_node_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_side_value(), libMesh::RBEIMEvaluation::get_eim_basis_function_value(), libMesh::MeshBase::get_info(), libMesh::System::get_info(), libMesh::DofMap::get_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::ImplicitSystem::get_linear_solver(), libMesh::RBEIMConstruction::get_max_abs_value(), libMesh::RBEIMConstruction::get_node_max_abs_value(), libMesh::RBEIMEvaluation::get_parametrized_function_node_value(), libMesh::RBEIMEvaluation::get_parametrized_function_side_value(), libMesh::RBEIMEvaluation::get_parametrized_function_value(), libMesh::RBEIMConstruction::get_random_point(), AssembleOptimization::inequality_constraints(), AssembleOptimization::inequality_constraints_jacobian(), libMesh::LocationMap< T >::init(), libMesh::TimeSolver::init(), libMesh::StaticCondensation::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_and_attach_petscdm(), libMesh::AdvectionSystem::init_data(), libMesh::ClawSystem::init_data(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::OptimizationSystem::initialize_equality_constraints_storage(), libMesh::OptimizationSystem::initialize_inequality_constraints_storage(), libMesh::RBEIMConstruction::initialize_parametrized_functions_in_training_set(), libMesh::RBEIMConstruction::inner_product(), integrate_function(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_equal_connectivity(), libMesh::MeshTools::libmesh_assert_equal_points(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_constraint_rows(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::MeshTools::libmesh_assert_valid_unique_ids(), libMesh::libmesh_petsc_linesearch_shellfunc(), libMesh::libmesh_petsc_preconditioner_apply(), libMesh::libmesh_petsc_recalculate_monitor(), libMesh::libmesh_petsc_snes_fd_residual(), libMesh::libmesh_petsc_snes_jacobian(), libMesh::libmesh_petsc_snes_mffd_interface(), libMesh::libmesh_petsc_snes_mffd_residual(), libMesh::libmesh_petsc_snes_postcheck(), libMesh::libmesh_petsc_snes_precheck(), libMesh::libmesh_petsc_snes_residual(), libMesh::libmesh_petsc_snes_residual_helper(), libMesh::MeshRefinement::limit_level_mismatch_at_edge(), libMesh::MeshRefinement::limit_level_mismatch_at_node(), libMesh::MeshRefinement::limit_overrefined_boundary(), libMesh::MeshRefinement::limit_underrefined_boundary(), libMesh::LinearImplicitSystem::LinearImplicitSystem(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshCommunication::make_elems_parallel_consistent(), libMesh::MeshRefinement::make_flags_parallel_consistent(), libMesh::MeshCommunication::make_new_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_new_nodes_parallel_consistent(), libMesh::MeshCommunication::make_node_bcids_parallel_consistent(), libMesh::MeshCommunication::make_node_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_proc_ids_parallel_consistent(), libMesh::MeshCommunication::make_node_unique_ids_parallel_consistent(), libMesh::MeshCommunication::make_nodes_parallel_consistent(), libMesh::MeshCommunication::make_p_levels_parallel_consistent(), libMesh::MeshRefinement::make_refinement_compatible(), libMesh::TransientRBConstruction::mass_matrix_scaled_matvec(), libMesh::FEMSystem::mesh_position_set(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), LinearElasticityWithContact::move_mesh(), libMesh::DistributedMesh::n_active_elem(), libMesh::MeshTools::n_active_levels(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::DofMap::n_constrained_dofs(), libMesh::MeshBase::n_constraint_rows(), libMesh::DofMap::n_dofs(), libMesh::DofMap::n_dofs_per_processor(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::CondensedEigenSystem::n_global_non_condensed_dofs(), libMesh::MeshTools::n_levels(), MixedOrderTest::n_neighbor_links(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::SparsityPattern::Build::n_nonzeros(), libMesh::MeshTools::n_p_levels(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_distribute_bfs(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::RBEIMConstruction::node_inner_product(), libMesh::MeshBase::operator==(), libMesh::DistributedMesh::parallel_max_elem_id(), libMesh::DistributedMesh::parallel_max_node_id(), libMesh::ReplicatedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_max_unique_id(), libMesh::DistributedMesh::parallel_n_elem(), libMesh::DistributedMesh::parallel_n_nodes(), libMesh::SparsityPattern::Build::parallel_sync(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::MeshTools::paranoid_n_levels(), libMesh::Partitioner::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::petsc_auto_fieldsplit(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::prepare_for_use(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Partitioner::processor_pairs_to_interface_nodes(), libMesh::InterMeshProjection::project_system_vectors(), FEMParameters::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::RBEIMEvaluation::read_in_interior_basis_functions(), libMesh::RBEIMEvaluation::read_in_node_basis_functions(), libMesh::RBEIMEvaluation::read_in_side_basis_functions(), libMesh::RBEvaluation::read_in_vectors_from_multiple_files(), libMesh::System::read_legacy_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::MeshBase::recalculate_n_partitions(), libMesh::MeshRefinement::refine_and_coarsen_elements(), libMesh::SimplexRefiner::refine_via_edges(), reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), LinearElasticityWithContact::residual_and_jacobian(), OverlappingAlgebraicGhostingTest::run_ghosting_test(), OverlappingCouplingGhostingTest::run_sparsity_pattern_test(), scale_mesh_and_plot(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::send_and_insert_dof_values(), libMesh::TransientRBConstruction::set_error_temporal_data(), libMesh::Partitioner::set_interface_node_processor_ids_BFS(), libMesh::Partitioner::set_interface_node_processor_ids_linear(), libMesh::Partitioner::set_interface_node_processor_ids_petscpartitioner(), libMesh::Partitioner::set_node_processor_ids(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::Partitioner::set_parent_processor_ids(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::PetscDiffSolver::setup_petsc_data(), libMesh::RBEIMEvaluation::side_distribute_bfs(), libMesh::RBEIMEvaluation::side_gather_bfs(), libMesh::RBEIMConstruction::side_inner_product(), libMesh::Partitioner::single_partition(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::VariationalMeshSmoother::smooth(), libMesh::ClawSystem::solve_conservation_law(), libMesh::split_mesh(), libMesh::RBEIMConstruction::store_eim_solutions_for_training_set(), libMesh::MeshBase::subdomain_ids(), libMesh::BoundaryInfo::sync(), ConstraintOperatorTest::test1DCoarseningNewNodes(), ConstraintOperatorTest::test1DCoarseningOperator(), libMesh::MeshRefinement::test_level_one(), MeshfunctionDFEM::test_mesh_function_dfem(), MeshfunctionDFEM::test_mesh_function_dfem_grad(), MeshFunctionTest::test_p_level(), libMesh::MeshRefinement::test_unflagged(), DofMapTest::testBadElemFECombo(), SystemsTest::testBlockRestrictedVarNDofs(), BoundaryInfoTest::testBoundaryOnChildrenErrors(), VolumeTest::testC0PolygonMethods(), VolumeTest::testC0PolyhedronMethods(), ConstraintOperatorTest::testCoreform(), ConnectedComponentsTest::testEdge(), MeshInputTest::testExodusIGASidesets(), MeshTriangulationTest::testFoundCenters(), PointLocatorTest::testLocator(), BoundaryInfoTest::testMesh(), PointLocatorTest::testPlanar(), MeshTriangulationTest::testPoly2TriRefinementBase(), SystemsTest::testProjectCubeWithMeshFunction(), BoundaryInfoTest::testRenumber(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), MeshTriangulationTest::testTriangulatorInterp(), MeshTriangulationTest::testTriangulatorMeshedHoles(), MeshTriangulationTest::testTriangulatorRoundHole(), libMesh::MeshTools::total_weight(), libMesh::RBConstruction::train_reduced_basis_with_POD(), libMesh::MeshFunctionSolutionTransfer::transfer(), libMesh::MeshfreeSolutionTransfer::transfer(), libMesh::Poly2TriTriangulator::triangulate(), libMesh::TransientRBConstruction::truth_assembly(), libMesh::RBConstruction::truth_assembly(), libMesh::MeshRefinement::uniformly_coarsen(), update_current_local_solution(), libMesh::TransientRBConstruction::update_RB_initial_condition_all_N(), libMesh::TransientRBConstruction::update_RB_system_matrices(), libMesh::RBConstruction::update_RB_system_matrices(), libMesh::TransientRBConstruction::update_residual_terms(), libMesh::RBConstruction::update_residual_terms(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::VTKIO::write_nodal_data(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), libMesh::RBEvaluation::write_out_vectors(), libMesh::TransientRBConstruction::write_riesz_representors_to_files(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::RBDataSerialization::RBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::TransientRBEvaluationSerialization::write_to_file(), libMesh::RBDataSerialization::RBEIMEvaluationSerialization::write_to_file(), and libMesh::RBDataSerialization::RBSCMEvaluationSerialization::write_to_file().

98  { return _communicator; }
const Parallel::Communicator & _communicator

◆ compute_dof_info()

std::size_t libMesh::DofMapBase::compute_dof_info ( dof_id_type  n_local_dofs)
protectedinherited

compute the key degree of freedom information given the local number of degrees of freedom on this process

Returns
The total number of DOFs for the System, summed across all procs.

Referenced by libMesh::DofMap::distribute_dofs(), and reinit().

◆ dof_indices() [1/2]

void libMesh::StaticCondensationDofMap::dof_indices ( const Elem *const  elem,
std::vector< dof_id_type > &  di,
const unsigned int  vn,
int  p_level = -12345 
) const
overridevirtual

Fills the vector di with the global degree of freedom indices for the element.

For one variable, and potentially for a non-default element p refinement level

Implements libMesh::DofMapBase.

Definition at line 405 of file static_condensation_dof_map.C.

References _elem_to_dof_data, and libMesh::DofObject::id().

Referenced by reinit().

409 {
410  di.clear();
411  di = libmesh_map_find(_elem_to_dof_data, elem->id()).reduced_space_indices[vn];
412 }
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.

◆ dof_indices() [2/2]

void libMesh::StaticCondensationDofMap::dof_indices ( const Node *const  node,
std::vector< dof_id_type > &  di,
const unsigned int  vn 
) const
overridevirtual

Fills the vector di with the global degree of freedom indices for the node, for one variable vn.

Implements libMesh::DofMapBase.

Definition at line 414 of file static_condensation_dof_map.C.

417 {
418  libmesh_error_msg("StaticCondensationDofMap dof indices are only meant to be queried with "
419  "elements, not nodes");
420 }

◆ dont_condense_vars()

void libMesh::StaticCondensationDofMap::dont_condense_vars ( const std::unordered_set< unsigned int > &  vars)
inline

Add vars to the list of variables not to condense.

This can be useful when some variable's equation is discretized with a DG method or if including the variable in the condensed block diagonal would result in it being singular

Definition at line 239 of file static_condensation_dof_map.h.

References _uncondensed_vars.

Referenced by libMesh::StaticCondensation::dont_condense_vars().

240 {
241  _uncondensed_vars.insert(vars.begin(), vars.end());
242 }
std::unordered_set< unsigned int > _uncondensed_vars
Variables for which we will keep all dofs.

◆ end_dof() [1/2]

dof_id_type libMesh::DofMapBase::end_dof ( const processor_id_type  proc) const
inlineinherited

◆ end_dof() [2/2]

dof_id_type libMesh::DofMapBase::end_dof ( ) const
inlineinherited

◆ end_old_dof() [1/2]

dof_id_type libMesh::DofMapBase::end_old_dof ( const processor_id_type  proc) const
inlineinherited
Returns
The first old dof index that is after all indices local to processor proc.

Analogous to the end() member function of STL containers.

Definition at line 210 of file dof_map_base.h.

References libMesh::DofMapBase::_end_old_df.

Referenced by libMesh::PetscDMWrapper::init_petscdm(), libMesh::BuildProjectionList::operator()(), SystemsTest::testProjectMatrix1D(), SystemsTest::testProjectMatrix2D(), and SystemsTest::testProjectMatrix3D().

211 {
212  libmesh_assert_less(proc, _end_old_df.size());
213  return _end_old_df[proc];
214 }
std::vector< dof_id_type > _end_old_df
Last old DOF index (plus 1) on processor p.
Definition: dof_map_base.h:181

◆ end_old_dof() [2/2]

dof_id_type libMesh::DofMapBase::end_old_dof ( ) const
inlineinherited

Definition at line 140 of file dof_map_base.h.

References libMesh::DofMapBase::end_old_dof(), and libMesh::ParallelObject::processor_id().

Referenced by libMesh::DofMapBase::end_old_dof().

140 { return this->end_old_dof(this->processor_id()); }
dof_id_type end_old_dof() const
Definition: dof_map_base.h:140
processor_id_type processor_id() const

◆ first_dof() [1/2]

dof_id_type libMesh::DofMapBase::first_dof ( const processor_id_type  proc) const
inlineinherited

◆ first_dof() [2/2]

dof_id_type libMesh::DofMapBase::first_dof ( ) const
inlineinherited

◆ first_old_dof() [1/2]

dof_id_type libMesh::DofMapBase::first_old_dof ( const processor_id_type  proc) const
inlineinherited
Returns
The first old dof index that is local to partition proc.

Definition at line 204 of file dof_map_base.h.

References libMesh::DofMapBase::_first_old_df.

Referenced by libMesh::PetscDMWrapper::init_petscdm(), libMesh::BuildProjectionList::operator()(), SystemsTest::testProjectMatrix1D(), SystemsTest::testProjectMatrix2D(), and SystemsTest::testProjectMatrix3D().

205 {
206  libmesh_assert_less(proc, _first_old_df.size());
207  return _first_old_df[proc];
208 }
std::vector< dof_id_type > _first_old_df
First old DOF index on processor p.
Definition: dof_map_base.h:176

◆ first_old_dof() [2/2]

dof_id_type libMesh::DofMapBase::first_old_dof ( ) const
inlineinherited

Definition at line 130 of file dof_map_base.h.

References libMesh::DofMapBase::first_old_dof(), and libMesh::ParallelObject::processor_id().

Referenced by libMesh::DofMapBase::first_old_dof().

130 { return this->first_old_dof(this->processor_id()); }
dof_id_type first_old_dof() const
Definition: dof_map_base.h:130
processor_id_type processor_id() const

◆ get_reduced_from_global_constraint_dof()

dof_id_type libMesh::StaticCondensationDofMap::get_reduced_from_global_constraint_dof ( dof_id_type  full_dof) const
inline

Retrieve the dof index in the reduced system corresponding to the provided dof index in the full system.

This dof index should be a dof index involved in constraints

Definition at line 251 of file static_condensation_dof_map.h.

References _full_to_reduced_constraint_dofs.

Referenced by libMesh::StaticCondensation::set().

252 {
253  return libmesh_map_find(_full_to_reduced_constraint_dofs, full_dof);
254 }
std::unordered_map< dof_id_type, dof_id_type > _full_to_reduced_constraint_dofs
A small map from full system degrees of freedom to reduced/condensed system degrees of freedom involv...

◆ initialized()

bool libMesh::StaticCondensationDofMap::initialized ( ) const
inline

Whether we are initialized.

Definition at line 107 of file static_condensation_dof_map.h.

References _sc_is_initialized.

Referenced by libMesh::StaticCondensation::init(), and reinit().

107 { return _sc_is_initialized; }
bool _sc_is_initialized
Whether our object has been initialized.

◆ n_dofs()

dof_id_type libMesh::DofMapBase::n_dofs ( ) const
inlineinherited

◆ n_dofs_on_processor()

dof_id_type libMesh::DofMapBase::n_dofs_on_processor ( const processor_id_type  proc) const
inlineinherited
Returns
The number of degrees of freedom on partition proc.

Definition at line 197 of file dof_map_base.h.

References libMesh::DofMapBase::_end_df, and libMesh::DofMapBase::_first_df.

Referenced by libMesh::DofMapBase::n_local_dofs(), and SystemsTest::testProjectMatrix3D().

198 {
199  libmesh_assert_less(proc, _first_df.size());
200  return cast_int<dof_id_type>(_end_df[proc] - _first_df[proc]);
201 }
std::vector< dof_id_type > _first_df
First DOF index on processor p.
Definition: dof_map_base.h:154
std::vector< dof_id_type > _end_df
Last DOF index (plus 1) on processor p.
Definition: dof_map_base.h:159

◆ n_local_dofs()

dof_id_type libMesh::DofMapBase::n_local_dofs ( ) const
inlineinherited
Returns
The number of degrees of freedom on this processor.

Definition at line 115 of file dof_map_base.h.

References libMesh::DofMapBase::n_dofs_on_processor(), and libMesh::ParallelObject::processor_id().

Referenced by libMesh::DofMap::build_sparsity(), libMesh::StaticCondensation::init(), libMesh::DofMap::n_dofs(), libMesh::DofMap::n_dofs_per_processor(), and libMesh::DofMap::process_mesh_constraint_rows().

115 { return this->n_dofs_on_processor(this->processor_id()); }
dof_id_type n_dofs_on_processor(const processor_id_type proc) const
Definition: dof_map_base.h:197
processor_id_type processor_id() const

◆ n_old_dofs()

dof_id_type libMesh::DofMapBase::n_old_dofs ( ) const
inlineinherited
Returns
The total number of degrees of freedom on old_dof_objects

Definition at line 123 of file dof_map_base.h.

References libMesh::DofMapBase::_n_old_dfs.

Referenced by libMesh::BuildProjectionList::operator()(), and libMesh::DofMap::SCALAR_dof_indices().

123 { return _n_old_dfs; }
dof_id_type _n_old_dfs
Total number of degrees of freedom on old dof objects.
Definition: dof_map_base.h:171

◆ n_processors()

processor_id_type libMesh::ParallelObject::n_processors ( ) const
inlineinherited
Returns
The number of processors in the group.

Definition at line 103 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, libMesh::libmesh_assert(), and TIMPI::Communicator::size().

Referenced by libMesh::Partitioner::_find_global_index_by_pid_map(), libMesh::BoundaryInfo::_find_id_maps(), libMesh::DofMap::add_constraints_to_send_list(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::System::add_vector(), libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::AztecLinearSolver< T >::AztecLinearSolver(), libMesh::Partitioner::build_graph(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::UnstructuredMesh::copy_nodes_and_elements(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::UnstructuredMesh::create_pid_mesh(), libMesh::MeshTools::create_processor_bounding_box(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::EnsightIO::EnsightIO(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::MeshBase::get_info(), libMesh::StaticCondensation::init(), libMesh::SystemSubsetBySubdomain::init(), libMesh::PetscDMWrapper::init_petscdm(), libMesh::Nemesis_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::DistributedMesh::insert_elem(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_new_node_procids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_topology_consistent_procids< Node >(), libMesh::MeshTools::libmesh_assert_valid_boundary_ids(), libMesh::MeshTools::libmesh_assert_valid_dof_ids(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::MeshTools::libmesh_assert_valid_refinement_flags(), libMesh::DofMap::local_variable_indices(), libMesh::MeshRefinement::make_coarsening_compatible(), libMesh::MeshBase::n_active_elem_on_proc(), libMesh::DofMap::n_dofs_per_processor(), libMesh::MeshBase::n_elem_on_proc(), libMesh::MeshBase::n_nodes_on_proc(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::Partitioner::partition(), libMesh::MeshBase::partition(), libMesh::Partitioner::partition_unpartitioned_elements(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::DofMap::prepare_send_list(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::CheckpointIO::read(), libMesh::CheckpointIO::read_connectivity(), libMesh::XdrIO::read_header(), libMesh::CheckpointIO::read_nodes(), libMesh::System::read_parallel_data(), libMesh::System::read_SCALAR_dofs(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::System::read_serialized_vector(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::Partitioner::repartition(), OverlappingFunctorTest::run_partitioner_test(), libMesh::DofMap::scatter_constraints(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), WriteVecAndScalar::setupTests(), libMesh::RBEIMEvaluation::side_gather_bfs(), DistributedMeshTest::testRemoteElemError(), CheckpointIOTest::testSplitter(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::GMVIO::write_binary(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::System::write_parallel_data(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::XdrIO::write_serialized_nodes(), and libMesh::XdrIO::write_serialized_nodesets().

104  {
105  processor_id_type returnval =
106  cast_int<processor_id_type>(_communicator.size());
107  libmesh_assert(returnval); // We never have an empty comm
108  return returnval;
109  }
const Parallel::Communicator & _communicator
processor_id_type size() const
uint8_t processor_id_type
libmesh_assert(ctx)

◆ n_variables()

unsigned int libMesh::StaticCondensationDofMap::n_variables ( ) const
overridevirtual
Returns
The number of variables in the global solution vector. Defaults to 1, should be 1 for a scalar equation, 3 for 2D incompressible Navier Stokes (u,v,p), etc...

Implements libMesh::DofMapBase.

Definition at line 398 of file static_condensation_dof_map.C.

References _reduced_vars.

398 { return _reduced_vars.size(); }
std::vector< Variable > _reduced_vars
The variables in the reduced system.

◆ processor_id()

processor_id_type libMesh::ParallelObject::processor_id ( ) const
inlineinherited
Returns
The rank of this processor in the group.

Definition at line 114 of file parallel_object.h.

References libMesh::ParallelObject::_communicator, and TIMPI::Communicator::rank().

Referenced by libMesh::BoundaryInfo::_find_id_maps(), libMesh::PetscDMWrapper::add_dofs_to_section(), libMesh::DistributedMesh::add_elem(), libMesh::BoundaryInfo::add_elements(), libMesh::DofMap::add_neighbors_to_send_list(), libMesh::DistributedMesh::add_node(), libMesh::MeshTools::Modification::all_tri(), libMesh::DofMap::allgather_recursive_constraints(), libMesh::FEMSystem::assembly(), libMesh::Nemesis_IO::assert_symmetric_cmaps(), libMesh::Partitioner::assign_partitioning(), libMesh::Nemesis_IO_Helper::build_element_and_node_maps(), libMesh::Partitioner::build_graph(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::BoundaryInfo::build_node_list_from_side_list(), libMesh::EquationSystems::build_parallel_elemental_solution_vector(), libMesh::EquationSystems::build_parallel_solution_vector(), libMesh::MeshFunction::check_found_elem(), libMesh::DistributedMesh::clear(), libMesh::DistributedMesh::clear_elems(), libMesh::ExodusII_IO_Helper::close(), libMesh::Nemesis_IO_Helper::compute_border_node_ids(), libMesh::Nemesis_IO_Helper::compute_communication_map_parameters(), libMesh::Nemesis_IO_Helper::compute_internal_and_border_elems_and_internal_nodes(), libMesh::RBConstruction::compute_max_error_bound(), libMesh::Nemesis_IO_Helper::compute_node_communication_maps(), libMesh::Nemesis_IO_Helper::compute_num_global_elem_blocks(), libMesh::Nemesis_IO_Helper::compute_num_global_nodesets(), libMesh::Nemesis_IO_Helper::compute_num_global_sidesets(), libMesh::Nemesis_IO_Helper::construct_nemesis_filename(), libMesh::ExodusII_IO::copy_elemental_solution(), libMesh::ExodusII_IO::copy_nodal_solution(), libMesh::ExodusII_IO::copy_scalar_solution(), libMesh::Nemesis_IO::copy_scalar_solution(), libMesh::MeshTools::correct_node_proc_ids(), libMesh::ExodusII_IO_Helper::create(), libMesh::DistributedMesh::delete_elem(), libMesh::MeshCommunication::delete_remote_elements(), libMesh::DofMap::distribute_dofs(), libMesh::DofMap::distribute_scalar_dofs(), libMesh::DistributedMesh::DistributedMesh(), libMesh::DofMapBase::end_dof(), libMesh::DofMapBase::end_old_dof(), libMesh::EnsightIO::EnsightIO(), libMesh::GenericProjector< FFunctor, GFunctor, FValue, ProjectionAction >::SubFunctor::find_dofs_to_send(), libMesh::UnstructuredMesh::find_neighbors(), libMesh::DofMapBase::first_dof(), libMesh::DofMapBase::first_old_dof(), libMesh::RBEIMEvaluation::gather_bfs(), libMesh::Nemesis_IO_Helper::get_cmap_params(), libMesh::Nemesis_IO_Helper::get_eb_info_global(), libMesh::Nemesis_IO_Helper::get_elem_cmap(), libMesh::Nemesis_IO_Helper::get_elem_map(), libMesh::MeshBase::get_info(), libMesh::DofMap::get_info(), libMesh::Nemesis_IO_Helper::get_init_global(), libMesh::Nemesis_IO_Helper::get_init_info(), libMesh::RBEIMEvaluation::get_interior_basis_functions_as_vecs(), libMesh::Nemesis_IO_Helper::get_loadbal_param(), libMesh::DofMap::get_local_constraints(), libMesh::MeshBase::get_local_constraints(), libMesh::Nemesis_IO_Helper::get_node_cmap(), libMesh::Nemesis_IO_Helper::get_node_map(), libMesh::Nemesis_IO_Helper::get_ns_param_global(), libMesh::Nemesis_IO_Helper::get_ss_param_global(), libMesh::SparsityPattern::Build::handle_vi_vj(), libMesh::LaplaceMeshSmoother::init(), libMesh::SystemSubsetBySubdomain::init(), HeatSystem::init_data(), libMesh::ExodusII_IO_Helper::initialize(), libMesh::ExodusII_IO_Helper::initialize_element_variables(), libMesh::ExodusII_IO_Helper::initialize_global_variables(), libMesh::ExodusII_IO_Helper::initialize_nodal_variables(), libMesh::DistributedMesh::insert_elem(), libMesh::DofMap::is_evaluable(), libMesh::SparsityPattern::Build::join(), libMesh::TransientRBEvaluation::legacy_write_offline_data_to_files(), libMesh::RBSCMEvaluation::legacy_write_offline_data_to_files(), libMesh::RBEvaluation::legacy_write_offline_data_to_files(), libMesh::MeshTools::libmesh_assert_consistent_distributed(), libMesh::MeshTools::libmesh_assert_consistent_distributed_nodes(), libMesh::MeshTools::libmesh_assert_contiguous_dof_ids(), libMesh::MeshTools::libmesh_assert_parallel_consistent_procids< Elem >(), libMesh::MeshTools::libmesh_assert_valid_neighbors(), libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids(), libMesh::DofMap::local_variable_indices(), main(), libMesh::MeshRefinement::make_coarsening_compatible(), AugmentSparsityOnInterface::mesh_reinit(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::MeshBase::n_active_local_elem(), libMesh::BoundaryInfo::n_boundary_conds(), libMesh::MeshTools::n_connected_components(), libMesh::MeshBase::n_constraint_rows(), libMesh::BoundaryInfo::n_edge_conds(), libMesh::DofMapBase::n_local_dofs(), libMesh::MeshBase::n_local_elem(), libMesh::MeshBase::n_local_nodes(), libMesh::BoundaryInfo::n_nodeset_conds(), libMesh::BoundaryInfo::n_shellface_conds(), libMesh::RBEIMEvaluation::node_gather_bfs(), libMesh::DistributedMesh::own_node(), libMesh::BoundaryInfo::parallel_sync_node_ids(), libMesh::BoundaryInfo::parallel_sync_side_ids(), libMesh::System::point_gradient(), libMesh::System::point_hessian(), libMesh::System::point_value(), libMesh::MeshBase::print_constraint_rows(), libMesh::DofMap::print_dof_constraints(), libMesh::DofMap::process_mesh_constraint_rows(), libMesh::Nemesis_IO_Helper::put_cmap_params(), libMesh::Nemesis_IO_Helper::put_elem_cmap(), libMesh::Nemesis_IO_Helper::put_elem_map(), libMesh::Nemesis_IO_Helper::put_loadbal_param(), libMesh::Nemesis_IO_Helper::put_node_cmap(), libMesh::Nemesis_IO_Helper::put_node_map(), libMesh::NameBasedIO::read(), libMesh::Nemesis_IO::read(), libMesh::XdrIO::read(), libMesh::CheckpointIO::read(), libMesh::EquationSystems::read(), libMesh::ExodusII_IO_Helper::read_elem_num_map(), libMesh::ExodusII_IO_Helper::read_global_values(), libMesh::ExodusII_IO::read_header(), libMesh::CheckpointIO::read_header(), libMesh::XdrIO::read_header(), libMesh::System::read_header(), libMesh::System::read_legacy_data(), libMesh::DynaIO::read_mesh(), libMesh::ExodusII_IO_Helper::read_node_num_map(), libMesh::System::read_parallel_data(), libMesh::TransientRBConstruction::read_riesz_representors_from_files(), libMesh::RBConstruction::read_riesz_representors_from_files(), libMesh::System::read_SCALAR_dofs(), libMesh::XdrIO::read_serialized_bc_names(), libMesh::XdrIO::read_serialized_bcs_helper(), libMesh::System::read_serialized_blocked_dof_objects(), libMesh::XdrIO::read_serialized_connectivity(), libMesh::System::read_serialized_data(), libMesh::XdrIO::read_serialized_nodes(), libMesh::XdrIO::read_serialized_nodesets(), libMesh::XdrIO::read_serialized_subdomain_names(), libMesh::System::read_serialized_vector(), libMesh::System::read_serialized_vectors(), libMesh::Nemesis_IO_Helper::read_var_names_impl(), libMesh::SimplexRefiner::refine_via_edges(), reinit(), libMesh::DistributedMesh::renumber_dof_objects(), libMesh::DistributedMesh::renumber_nodes_and_elements(), libMesh::DofMap::scatter_constraints(), libMesh::CheckpointIO::select_split_config(), libMesh::DistributedMesh::set_next_unique_id(), libMesh::DofMap::set_nonlocal_dof_objects(), libMesh::PetscDMWrapper::set_point_range_in_section(), libMesh::RBEIMEvaluation::side_gather_bfs(), ExodusTest< elem_type >::test_read_gold(), ExodusTest< elem_type >::test_write(), MeshInputTest::testAbaqusRead(), MeshInputTest::testBadGmsh(), MeshInputTest::testCopyElementSolutionImpl(), MeshInputTest::testCopyElementVectorImpl(), MeshInputTest::testCopyNodalSolutionImpl(), DefaultCouplingTest::testCoupling(), PointNeighborCouplingTest::testCoupling(), MeshInputTest::testDynaFileMappings(), MeshInputTest::testDynaNoSplines(), MeshInputTest::testDynaReadElem(), MeshInputTest::testDynaReadPatch(), MeshInputTest::testExodusFileMappings(), MeshInputTest::testExodusIGASidesets(), MeshInputTest::testExodusWriteElementDataFromDiscontinuousNodalData(), MeshInputTest::testGmshBCIDOverlap(), MeshInputTest::testGoodGmsh(), MeshInputTest::testGoodSTL(), MeshInputTest::testGoodSTLBinary(), MeshInputTest::testLowOrderEdgeBlocks(), SystemsTest::testProjectMatrix3D(), BoundaryInfoTest::testShellFaceConstraints(), MeshInputTest::testSingleElementImpl(), WriteVecAndScalar::testSolution(), CheckpointIOTest::testSplitter(), MeshInputTest::testTetgenIO(), libMesh::MeshTools::total_weight(), libMesh::NetGenMeshInterface::triangulate(), libMesh::MeshRefinement::uniformly_coarsen(), libMesh::DistributedMesh::update_parallel_id_counts(), libMesh::DTKAdapter::update_variable_values(), libMesh::MeshTools::volume(), libMesh::STLIO::write(), libMesh::NameBasedIO::write(), libMesh::XdrIO::write(), libMesh::CheckpointIO::write(), libMesh::EquationSystems::write(), libMesh::GMVIO::write_discontinuous_gmv(), libMesh::ExodusII_IO::write_element_data(), libMesh::ExodusII_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::ExodusII_IO_Helper::write_elements(), libMesh::ExodusII_IO_Helper::write_elemset_data(), libMesh::ExodusII_IO_Helper::write_elemsets(), libMesh::ExodusII_IO::write_global_data(), libMesh::ExodusII_IO_Helper::write_global_values(), libMesh::System::write_header(), libMesh::ExodusII_IO::write_information_records(), libMesh::ExodusII_IO_Helper::write_information_records(), libMesh::ExodusII_IO_Helper::write_nodal_coordinates(), libMesh::UCDIO::write_nodal_data(), libMesh::VTKIO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data(), libMesh::ExodusII_IO::write_nodal_data_common(), libMesh::ExodusII_IO::write_nodal_data_discontinuous(), libMesh::ExodusII_IO_Helper::write_nodal_values(), libMesh::ExodusII_IO_Helper::write_nodeset_data(), libMesh::Nemesis_IO_Helper::write_nodesets(), libMesh::ExodusII_IO_Helper::write_nodesets(), libMesh::RBEIMEvaluation::write_out_interior_basis_functions(), libMesh::RBEIMEvaluation::write_out_node_basis_functions(), libMesh::RBEIMEvaluation::write_out_side_basis_functions(), write_output_solvedata(), libMesh::System::write_parallel_data(), libMesh::RBConstruction::write_riesz_representors_to_files(), libMesh::System::write_SCALAR_dofs(), libMesh::XdrIO::write_serialized_bc_names(), libMesh::XdrIO::write_serialized_bcs_helper(), libMesh::System::write_serialized_blocked_dof_objects(), libMesh::XdrIO::write_serialized_connectivity(), libMesh::System::write_serialized_data(), libMesh::XdrIO::write_serialized_nodes(), libMesh::XdrIO::write_serialized_nodesets(), libMesh::XdrIO::write_serialized_subdomain_names(), libMesh::System::write_serialized_vector(), libMesh::System::write_serialized_vectors(), libMesh::ExodusII_IO_Helper::write_sideset_data(), libMesh::Nemesis_IO_Helper::write_sidesets(), libMesh::ExodusII_IO_Helper::write_sidesets(), libMesh::ExodusII_IO::write_timestep(), libMesh::ExodusII_IO_Helper::write_timestep(), and libMesh::ExodusII_IO::write_timestep_discontinuous().

115  { return cast_int<processor_id_type>(_communicator.rank()); }
processor_id_type rank() const
const Parallel::Communicator & _communicator

◆ reduced_system()

const System & libMesh::StaticCondensationDofMap::reduced_system ( ) const
inline

Definition at line 244 of file static_condensation_dof_map.h.

References _reduced_system, and libMesh::libmesh_assert().

245 {
247  return *_reduced_system;
248 }
System * _reduced_system
A dummyish system to help with DofObjects.
libmesh_assert(ctx)

◆ reinit()

void libMesh::StaticCondensationDofMap::reinit ( )

Build the element global to local index maps.

Definition at line 111 of file static_condensation_dof_map.C.

References libMesh::ParallelObject::_communicator, _dof_map, _elem_to_dof_data, libMesh::DofMapBase::_first_df, _full_to_reduced_constraint_dofs, _local_uncondensed_dofs, _mesh, _reduced_nnz, _reduced_noz, _reduced_sp, _reduced_system, _reduced_vars, _sc_is_initialized, _system, _uncondensed_vars, libMesh::EquationSystems::add_system(), add_uncondensed_dof_plus_constraint_dofs(), libMesh::DofMap::build_sparsity(), clear(), libMesh::ParallelObject::comm(), libMesh::DofMapBase::compute_dof_info(), dof_indices(), libMesh::DofMap::dof_indices(), libMesh::FEType::family, libMesh::DofMapBase::first_dof(), libMesh::System::get_equation_systems(), libMesh::index_range(), libMesh::System::init(), initialized(), libMesh::DofObject::invalid_id, libMesh::invalid_uint, libMesh::System::is_initialized(), libMesh::libmesh_assert(), libMesh::libmesh_ignore(), libMesh::make_range(), libMesh::DofMap::n_variable_groups(), libMesh::Variable::name(), libMesh::MeshTools::Subdivision::next, libMesh::VariableGroup::number(), libMesh::System::number(), libMesh::ParallelObject::processor_id(), TIMPI::pull_parallel_vector_data(), libMesh::SCALAR, libMesh::DofMap::SCALAR_dof_indices(), TIMPI::Communicator::set_union(), TIMPI::Communicator::size(), TIMPI::Communicator::sum(), libMesh::Variable::type(), libMesh::DofMap::variable(), and libMesh::DofMap::variable_group().

112 {
113  if (this->initialized())
114  this->clear();
115 
116  std::vector<dof_id_type> elem_dofs, elem_uncondensed_dofs; // only used to satisfy API
117  dof_id_type condensed_local_dof_number = 0, uncondensed_local_dof_number = 0;
118  std::unordered_map<dof_id_type, dof_id_type> *condensed_global_to_local_map = nullptr,
119  *uncondensed_global_to_local_map = nullptr;
120  std::set<unsigned int> full_vars_present_in_reduced_sys;
121  std::unordered_set<dof_id_type> local_uncondensed_dofs_set, constraint_dofs;
122  std::unordered_map<processor_id_type, std::unordered_set<dof_id_type>> nonlocal_uncondensed_dofs;
123 
124  // Handle SCALAR dofs
125  for (const auto vg : make_range(_dof_map.n_variable_groups()))
126  if (const auto & vg_description = _dof_map.variable_group(vg);
127  vg_description.type().family == SCALAR)
128  {
129  std::vector<dof_id_type> scalar_dof_indices;
130  const processor_id_type last_pid = this->comm().size() - 1;
131  for (const auto vg_vn : make_range(vg_description.n_variables()))
132  {
133  const auto vn = vg_description.number(vg_vn);
134  _dof_map.SCALAR_dof_indices(scalar_dof_indices, vn);
135  if (this->comm().rank() == last_pid)
136  local_uncondensed_dofs_set.insert(scalar_dof_indices.begin(),
137  scalar_dof_indices.end());
138  else
139  nonlocal_uncondensed_dofs[last_pid].insert(scalar_dof_indices.begin(),
140  scalar_dof_indices.end());
141  }
142  }
143 
144  auto scalar_dofs_functor =
145  [this,
146  &uncondensed_global_to_local_map,
147  &local_uncondensed_dofs_set,
148  &nonlocal_uncondensed_dofs,
149  &elem_uncondensed_dofs,
150  &uncondensed_local_dof_number,
151  &constraint_dofs](const Elem & /*elem*/,
152  std::vector<dof_id_type> & dof_indices,
153  const std::vector<dof_id_type> & scalar_dof_indices) {
154  dof_indices.insert(dof_indices.end(), scalar_dof_indices.begin(), scalar_dof_indices.end());
155  for (const auto global_dof : scalar_dof_indices)
157  false,
158  *uncondensed_global_to_local_map,
159  local_uncondensed_dofs_set,
160  nonlocal_uncondensed_dofs,
161  elem_uncondensed_dofs,
162  uncondensed_local_dof_number,
163  constraint_dofs);
164  };
165 
166  auto field_dofs_functor = [this,
167  &condensed_local_dof_number,
168  &condensed_global_to_local_map,
169  &uncondensed_global_to_local_map,
170  &local_uncondensed_dofs_set,
171  &nonlocal_uncondensed_dofs,
172  &elem_uncondensed_dofs,
173  &uncondensed_local_dof_number,
174  &constraint_dofs](const Elem & elem,
175  const unsigned int node_num,
176  const unsigned int var_num,
177  std::vector<dof_id_type> & dof_indices,
178  const dof_id_type field_dof) {
179  dof_indices.push_back(field_dof);
180 
181  bool uncondensed_dof = false;
182  if (_uncondensed_vars.count(var_num))
183  {
184  libmesh_assert_msg(
185  node_num == invalid_uint,
186  "Users should not be providing continuous FEM variables to the uncondensed vars API");
187  uncondensed_dof = true;
188  }
189 
190  if (node_num != invalid_uint && !elem.is_internal(node_num))
191  uncondensed_dof = true;
192 
193  if (uncondensed_dof)
195  false,
196  *uncondensed_global_to_local_map,
197  local_uncondensed_dofs_set,
198  nonlocal_uncondensed_dofs,
199  elem_uncondensed_dofs,
200  uncondensed_local_dof_number,
201  constraint_dofs);
202  else
203  (*condensed_global_to_local_map)[field_dof] = condensed_local_dof_number++;
204  };
205 
206  for (auto elem : _mesh.active_local_element_ptr_range())
207  {
208  auto & dof_data = _elem_to_dof_data[elem->id()];
209  condensed_local_dof_number = 0;
210  uncondensed_local_dof_number = 0;
211  condensed_global_to_local_map = &dof_data.condensed_global_to_local_map;
212  uncondensed_global_to_local_map = &dof_data.uncondensed_global_to_local_map;
213 
214  const auto sub_id = elem->subdomain_id();
215  for (const auto vg : make_range(_dof_map.n_variable_groups()))
216  {
217  const auto & var_group = _dof_map.variable_group(vg);
218  if (!var_group.active_on_subdomain(sub_id))
219  continue;
220 
221  for (const auto v : make_range(var_group.n_variables()))
222  {
223  const auto var_num = var_group.number(v);
224  dof_data.reduced_space_indices.resize(var_num + 1);
225  elem_uncondensed_dofs.clear();
226  _dof_map.dof_indices(elem,
227  elem_dofs,
228  var_num,
229  scalar_dofs_functor,
230  field_dofs_functor,
231  elem->p_level());
232  if (!elem_uncondensed_dofs.empty())
233  {
234  auto & var_reduced_space_indices = dof_data.reduced_space_indices[var_num];
235  var_reduced_space_indices.insert(var_reduced_space_indices.end(),
236  elem_uncondensed_dofs.begin(),
237  elem_uncondensed_dofs.end());
238  full_vars_present_in_reduced_sys.insert(var_num);
239  }
240  }
241  }
242  }
243 
244  _local_uncondensed_dofs.assign(local_uncondensed_dofs_set.begin(),
245  local_uncondensed_dofs_set.end());
246  local_uncondensed_dofs_set.clear();
247 
248  //
249  // Build the reduced system data
250  //
251 
252  const dof_id_type n_local = _local_uncondensed_dofs.size();
253  dof_id_type n = n_local;
254  this->comm().sum(n);
255 
256  // Get DOF counts on all processors
257  this->compute_dof_info(n_local);
258 
259  // Build a map from the full size problem uncondensed dof indices to the reduced problem
260  // (uncondensed) dof indices
261  std::unordered_map<dof_id_type, dof_id_type> full_dof_to_reduced_dof;
262  const auto local_start = _first_df[this->processor_id()];
263  for (const auto i : index_range(_local_uncondensed_dofs))
264  full_dof_to_reduced_dof[_local_uncondensed_dofs[i]] = i + local_start;
265 
266  // Build the condensed system sparsity pattern
268  this->_mesh, /*calculate_constrained=*/false, /*use_condensed_system=*/true);
269  const auto & nnz = _reduced_sp->get_n_nz();
270  const auto & noz = _reduced_sp->get_n_oz();
271  libmesh_assert(nnz.size() == noz.size());
272 
273  // Optimization for PETSc. This is critical for problems in which there are SCALAR dofs that
274  // introduce dense rows to avoid allocating a dense matrix
275  _reduced_nnz.resize(_local_uncondensed_dofs.size());
276  _reduced_noz.resize(_local_uncondensed_dofs.size());
277  for (const dof_id_type local_reduced_i : index_range(_local_uncondensed_dofs))
278  {
279  const dof_id_type full_i = _local_uncondensed_dofs[local_reduced_i];
280  const dof_id_type local_full_i = full_i - _dof_map.first_dof();
281  libmesh_assert(local_full_i < nnz.size());
282  _reduced_nnz[local_reduced_i] = nnz[local_full_i];
283  _reduced_noz[local_reduced_i] = noz[local_full_i];
284  }
285 
286  //
287  // Now we need to pull our nonlocal data
288  //
289 
290  // build our queries
291  std::unordered_map<processor_id_type, std::vector<dof_id_type>> nonlocal_uncondensed_dofs_mapvec;
292  for (const auto & [pid, set] : nonlocal_uncondensed_dofs)
293  {
294  auto & vec = nonlocal_uncondensed_dofs_mapvec[pid];
295  vec.assign(set.begin(), set.end());
296  }
297  // clear no longer needed memory
298  nonlocal_uncondensed_dofs.clear();
299 
300  auto gather_functor = [&full_dof_to_reduced_dof](processor_id_type,
301  const std::vector<dof_id_type> & full_dof_ids,
302  std::vector<dof_id_type> & reduced_dof_ids) {
303  reduced_dof_ids.resize(full_dof_ids.size());
304  for (const auto i : index_range(full_dof_ids))
305  reduced_dof_ids[i] = libmesh_map_find(full_dof_to_reduced_dof, full_dof_ids[i]);
306  };
307 
308  auto action_functor =
309  [&full_dof_to_reduced_dof](processor_id_type,
310  const std::vector<dof_id_type> & full_dof_ids,
311  const std::vector<dof_id_type> & reduced_dof_ids) {
312  for (const auto i : index_range(full_dof_ids))
313  {
314  libmesh_assert(!full_dof_to_reduced_dof.count(full_dof_ids[i]));
315  full_dof_to_reduced_dof[full_dof_ids[i]] = reduced_dof_ids[i];
316  }
317  };
318 
320  nonlocal_uncondensed_dofs_mapvec,
321  gather_functor,
322  action_functor,
324  nonlocal_uncondensed_dofs_mapvec.clear();
325 
326  // Determine the variables with any degrees of freedom present in the reduced system
327  _communicator.set_union(full_vars_present_in_reduced_sys);
328  _reduced_vars.reserve(full_vars_present_in_reduced_sys.size());
329  unsigned int first_local_number = 0;
330  for (const auto i : index_range(full_vars_present_in_reduced_sys))
331  {
332  const auto full_var_num = *std::next(full_vars_present_in_reduced_sys.begin(), i);
333  const auto & full_var = _dof_map.variable(full_var_num);
334  _reduced_vars.push_back(Variable{nullptr,
335  full_var.name(),
336  cast_int<unsigned int>(i),
337  first_local_number,
338  full_var.type()});
339  first_local_number += _reduced_vars.back().n_components(_mesh);
340  }
341 
342  // Now we can finally set our element reduced dof indices
343  std::vector<dof_id_type> var_full_dof_indices;
344  for (auto & [elem, dof_data] : _elem_to_dof_data)
345  {
346  libmesh_ignore(elem);
347  auto & reduced_space_indices = dof_data.reduced_space_indices;
348  // Start erasing from the back to reduce the number of copy assignment operations
349  if (reduced_space_indices.size())
350  for (typename std::vector<dof_id_type>::difference_type i =
351  reduced_space_indices.size() - 1;
352  i >= 0;
353  --i)
354  if (!full_vars_present_in_reduced_sys.count(i))
355  reduced_space_indices.erase(reduced_space_indices.begin() + i);
356  // It is theoretically possible that we have an element that doesn't have dofs for one of the
357  // variables present in our reduced system, which is why the assertion below is not an
358  // equality assertion
359  libmesh_assert(reduced_space_indices.size() <= full_vars_present_in_reduced_sys.size());
360 
361  for (auto & var_dof_indices : reduced_space_indices)
362  {
363  var_full_dof_indices = var_dof_indices;
364  var_dof_indices.clear();
365  for (const auto full_dof : var_full_dof_indices)
366  var_dof_indices.push_back(libmesh_map_find(full_dof_to_reduced_dof, full_dof));
367  }
368  }
369 
370  // Build our dof constraints map
371  for (const auto full_dof : constraint_dofs)
373  libmesh_map_find(full_dof_to_reduced_dof, full_dof);
374  constraint_dofs.clear();
375 
376  // Prevent querying Nodes for dof indices
377  std::vector<unsigned int> nvpg(_reduced_vars.size());
378  for (auto & elem : nvpg)
379  elem = 1;
380 
381  // add_system returns a system if it already exists instead of erroring so there's no harm if
382  // we do this multiple times
383  _reduced_system = &_system.get_equation_systems().add_system("Basic", "reduced");
385  {
387  for (auto * const nd : _mesh.active_node_ptr_range())
388  {
389  nd->set_n_vars_per_group(_reduced_system->number(), nvpg);
390  for (const auto g : index_range(nvpg))
391  nd->set_n_comp_group(_reduced_system->number(), g, 0);
392  }
393  }
394 
395  _sc_is_initialized = true;
396 }
bool is_initialized() const
Definition: system.h:2414
FEFamily family
The type of finite element.
Definition: fe_type.h:221
void pull_parallel_vector_data(const Communicator &comm, const MapToVectors &queries, GatherFunctor &gather_data, const ActionFunctor &act_on_data, const datum *example)
unsigned int n_variable_groups() const
Definition: dof_map.h:625
std::unordered_set< unsigned int > _uncondensed_vars
Variables for which we will keep all dofs.
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value for an unsigned int...
Definition: libmesh.h:310
std::unordered_map< dof_id_type, dof_id_type > _full_to_reduced_constraint_dofs
A small map from full system degrees of freedom to reduced/condensed system degrees of freedom involv...
std::vector< dof_id_type > _reduced_nnz
Number of on-diagonal nonzeros per row in the reduced system.
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition: dof_map.C:2164
std::vector< dof_id_type > _first_df
First DOF index on processor p.
Definition: dof_map_base.h:154
std::vector< dof_id_type > _reduced_noz
Number of off-diagonal nonzeros per row in the reduced system.
std::unique_ptr< SparsityPattern::Build > build_sparsity(const MeshBase &mesh, bool calculate_constrained=false, bool use_condensed_system=false) const
Builds a sparsity pattern for matrices using the current degree-of-freedom numbering and coupling...
Definition: dof_map.C:61
const EquationSystems & get_equation_systems() const
Definition: system.h:721
void sum(T &r) const
std::vector< Variable > _reduced_vars
The variables in the reduced system.
const Parallel::Communicator & comm() const
const Parallel::Communicator & _communicator
void init()
Initializes degrees of freedom on the current mesh.
Definition: system.C:197
uint8_t processor_id_type
Definition: id_types.h:104
void SCALAR_dof_indices(std::vector< dof_id_type > &di, const unsigned int vn, const bool old_dofs=false) const
Fills the vector di with the global degree of freedom indices corresponding to the SCALAR variable vn...
Definition: dof_map.C:2547
System * _reduced_system
A dummyish system to help with DofObjects.
const Variable & variable(const unsigned int c) const override
Definition: dof_map.h:2190
std::unordered_map< dof_id_type, DofData > _elem_to_dof_data
A map from element ID to Schur complement data.
processor_id_type size() const
uint8_t processor_id_type
void libmesh_ignore(const Args &...)
unsigned int number() const
Definition: system.h:2350
bool _sc_is_initialized
Whether our object has been initialized.
std::vector< dof_id_type > _local_uncondensed_dofs
All the uncondensed degrees of freedom (numbered in the "full" uncondensed + condensed space)...
libmesh_assert(ctx)
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
Definition: dof_object.h:482
const VariableGroup & variable_group(const unsigned int c) const
Definition: dof_map.h:2180
static const unsigned int next[3]
A lookup table for the increment modulo 3 operation, for iterating through the three nodes per elemen...
virtual void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di, const unsigned int vn, int p_level=-12345) const override
Fills the vector di with the global degree of freedom indices for the element.
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:140
std::size_t compute_dof_info(dof_id_type n_local_dofs)
compute the key degree of freedom information given the local number of degrees of freedom on this pr...
unsigned int number(unsigned int v) const
Definition: variable.h:304
std::unique_ptr< SparsityPattern::Build > _reduced_sp
Owned storage of the reduced system sparsity pattern.
bool initialized() const
Whether we are initialized.
void add_uncondensed_dof_plus_constraint_dofs(dof_id_type full_dof_number, bool involved_in_constraints, std::unordered_map< dof_id_type, dof_id_type > &uncondensed_global_to_local_map, std::unordered_set< dof_id_type > &local_uncondensed_dofs_set, std::unordered_map< processor_id_type, std::unordered_set< dof_id_type >> &nonlocal_uncondensed_dofs, std::vector< dof_id_type > &elem_uncondensed_dofs, dof_id_type &uncondensed_local_dof_number, std::unordered_set< dof_id_type > &constraint_dofs)
Add an uncondensed dof potentially along with constraining dofs which themselves must/will also be un...
dof_id_type first_dof(const processor_id_type proc) const
Definition: dof_map_base.h:185
virtual System & add_system(std::string_view system_type, std::string_view name)
Add the system of type system_type named name to the systems array.
processor_id_type processor_id() const
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:117
uint8_t dof_id_type
Definition: id_types.h:67
const FEType & type() const
Definition: variable.h:144
void set_union(T &data, const unsigned int root_id) const

◆ uncondensed_vars()

const std::unordered_set<unsigned int>& libMesh::StaticCondensationDofMap::uncondensed_vars ( ) const
inline
Returns
our list of variables for whom we do not condense out any dofs

Definition at line 84 of file static_condensation_dof_map.h.

References _uncondensed_vars.

Referenced by libMesh::SparsityPattern::Build::sorted_connected_dofs().

84 { return _uncondensed_vars; }
std::unordered_set< unsigned int > _uncondensed_vars
Variables for which we will keep all dofs.

◆ variable()

const Variable & libMesh::StaticCondensationDofMap::variable ( const unsigned int  c) const
overridevirtual
Returns
The variable description object for variable c.

Implements libMesh::DofMapBase.

Definition at line 400 of file static_condensation_dof_map.C.

References _reduced_vars.

401 {
402  return _reduced_vars[c];
403 }
std::vector< Variable > _reduced_vars
The variables in the reduced system.

Friends And Related Function Documentation

◆ StaticCondensation

friend class StaticCondensation
friend

Friend the static condensation matrix class so they can inspect our degree of freedom data.

Definition at line 197 of file static_condensation_dof_map.h.

Member Data Documentation

◆ _communicator

const Parallel::Communicator& libMesh::ParallelObject::_communicator
protectedinherited

◆ _dof_map

const DofMap& libMesh::StaticCondensationDofMap::_dof_map
private

◆ _elem_to_dof_data

std::unordered_map<dof_id_type, DofData> libMesh::StaticCondensationDofMap::_elem_to_dof_data
private

◆ _end_df

std::vector<dof_id_type> libMesh::DofMapBase::_end_df
protectedinherited

◆ _end_old_df

std::vector<dof_id_type> libMesh::DofMapBase::_end_old_df
protectedinherited

Last old DOF index (plus 1) on processor p.

Definition at line 181 of file dof_map_base.h.

Referenced by libMesh::DofMap::clear(), and libMesh::DofMapBase::end_old_dof().

◆ _first_df

std::vector<dof_id_type> libMesh::DofMapBase::_first_df
protectedinherited

◆ _first_old_df

std::vector<dof_id_type> libMesh::DofMapBase::_first_old_df
protectedinherited

First old DOF index on processor p.

Definition at line 176 of file dof_map_base.h.

Referenced by libMesh::DofMap::clear(), and libMesh::DofMapBase::first_old_dof().

◆ _full_to_reduced_constraint_dofs

std::unordered_map<dof_id_type, dof_id_type> libMesh::StaticCondensationDofMap::_full_to_reduced_constraint_dofs
private

A small map from full system degrees of freedom to reduced/condensed system degrees of freedom involved in constraints.

This may be leveraged by StaticCondensation::set during DofMap::enforce_constraints_on_jacobian at the very end of Jacobian evaluation

Definition at line 235 of file static_condensation_dof_map.h.

Referenced by get_reduced_from_global_constraint_dof(), and reinit().

◆ _local_uncondensed_dofs

std::vector<dof_id_type> libMesh::StaticCondensationDofMap::_local_uncondensed_dofs
private

All the uncondensed degrees of freedom (numbered in the "full" uncondensed + condensed space).

This data member is used for creating subvectors corresponding to only uncondensed dofs

Definition at line 205 of file static_condensation_dof_map.h.

Referenced by libMesh::StaticCondensation::apply(), libMesh::StaticCondensation::forward_elimination(), and reinit().

◆ _mesh

MeshBase& libMesh::StaticCondensationDofMap::_mesh
private

Definition at line 207 of file static_condensation_dof_map.h.

Referenced by reinit().

◆ _n_dfs

dof_id_type libMesh::DofMapBase::_n_dfs
protectedinherited

Total number of degrees of freedom.

Definition at line 164 of file dof_map_base.h.

Referenced by libMesh::DofMapBase::clear(), and libMesh::DofMapBase::n_dofs().

◆ _n_old_dfs

dof_id_type libMesh::DofMapBase::_n_old_dfs
protectedinherited

Total number of degrees of freedom on old dof objects.

Definition at line 171 of file dof_map_base.h.

Referenced by libMesh::DofMap::clear(), and libMesh::DofMapBase::n_old_dofs().

◆ _reduced_nnz

std::vector<dof_id_type> libMesh::StaticCondensationDofMap::_reduced_nnz
private

Number of on-diagonal nonzeros per row in the reduced system.

Definition at line 227 of file static_condensation_dof_map.h.

Referenced by clear(), libMesh::StaticCondensation::init(), and reinit().

◆ _reduced_noz

std::vector<dof_id_type> libMesh::StaticCondensationDofMap::_reduced_noz
private

Number of off-diagonal nonzeros per row in the reduced system.

Definition at line 230 of file static_condensation_dof_map.h.

Referenced by clear(), libMesh::StaticCondensation::init(), and reinit().

◆ _reduced_sp

std::unique_ptr<SparsityPattern::Build> libMesh::StaticCondensationDofMap::_reduced_sp
private

Owned storage of the reduced system sparsity pattern.

Definition at line 224 of file static_condensation_dof_map.h.

Referenced by clear(), libMesh::StaticCondensation::init(), and reinit().

◆ _reduced_system

System* libMesh::StaticCondensationDofMap::_reduced_system
private

A dummyish system to help with DofObjects.

Definition at line 221 of file static_condensation_dof_map.h.

Referenced by reduced_system(), and reinit().

◆ _reduced_vars

std::vector<Variable> libMesh::StaticCondensationDofMap::_reduced_vars
private

The variables in the reduced system.

Definition at line 218 of file static_condensation_dof_map.h.

Referenced by clear(), n_variables(), reinit(), and variable().

◆ _sc_is_initialized

bool libMesh::StaticCondensationDofMap::_sc_is_initialized
private

Whether our object has been initialized.

Definition at line 215 of file static_condensation_dof_map.h.

Referenced by clear(), initialized(), and reinit().

◆ _system

System& libMesh::StaticCondensationDofMap::_system
private

Definition at line 208 of file static_condensation_dof_map.h.

Referenced by reinit().

◆ _uncondensed_vars

std::unordered_set<unsigned int> libMesh::StaticCondensationDofMap::_uncondensed_vars
private

Variables for which we will keep all dofs.

Definition at line 212 of file static_condensation_dof_map.h.

Referenced by clear(), dont_condense_vars(), reinit(), and uncondensed_vars().


The documentation for this class was generated from the following files: