High-level boundary condition management interface. 
The BcManager provides a high-level interface for applying boundary conditions to finite element problems, working in close integration with MeshsetsManager to bridge mesh-based boundary condition definitions with finite element implementations.
MeshsetsManager Integration
BcManager operates as the application layer above MeshsetsManager:
- Data Discovery: MeshsetsManager discovers and organizes boundary condition meshsets from various mesh formats (CUBIT, Gmsh, Salome, etc.)
- DOF Management: BcManager translates meshset information into DOF-level operations for finite element problem setup
- Type Safety: Provides type-safe interfaces for different boundary condition types while maintaining format independence
- Problem Integration: Handles DOF marking, removal, and Index Set creation for seamless integration with finite element solvers
Essential vs Natural Boundary Conditions
BcManager supports both essential and natural boundary condition implementations:
Essential Boundary Conditions (Dirichlet)
- Implementation: Applied by removing constrained DOFs from the system
- DOF Removal: removeBlockDOFsOnEntities()eliminates constrained DOFs
- System Modification: Reduces system size by eliminating known DOFs
- Examples: Fixed displacements, prescribed temperatures, velocity constraints
- Workflow: Mark DOFs → Remove from system → Apply prescribed values
Natural Boundary Conditions (Neumann)
- Implementation: Applied through load vectors and surface integrals
- DOF Marking: pushMarkDOFsOnEntities()identifies affected DOFs
- Entity Access: Provides entity ranges for integration operations
- Examples: Applied forces, pressure loads, heat flux, traction boundaries
- Workflow: Mark DOFs → Integrate over boundaries → Add to load vector
Template Specializations
BcManager uses template specializations to handle different boundary condition types and meshset configurations in a type-safe manner:
Meshset Type Specializations
- BcMeshsetType<DISPLACEMENTSET>: Displacement boundary conditions on nodesets
- BcMeshsetType<FORCESET>: Force boundary conditions on nodesets
- BcMeshsetType<TEMPERATURESET>: Temperature boundary conditions on nodesets
- BcMeshsetType<HEATFLUXSET>: Heat flux boundary conditions on sidesets
- BcMeshsetType<PRESSURESET>: Pressure boundary conditions on sidesets
Block-Based Specializations
- BcDisplacementMeshsetType<BLOCKSET>: Volume-based displacement constraints
- BcScalarMeshsetType<BLOCKSET>: Volume-based scalar field constraints
- BcForceMeshsetType<BLOCKSET>: Volume-based force application
- BcPressureMeshsetType<BLOCKSET>: Volume-based pressure conditions
- BcNormalDisplacementMeshsetType<BLOCKSET>: Normal displacement constraints
- BcAnalyticalDisplacementMeshsetType<BLOCKSET>: Analytical displacement functions
- BcAnalyticalTractionMeshsetType<BLOCKSET>: Analytical traction functions
Data Structure Specializations
- DisplacementCubitBcData: CUBIT displacement boundary condition data
- TemperatureCubitBcData: CUBIT temperature boundary condition data
- HeatFluxCubitBcData: CUBIT heat flux boundary condition data
- ForceCubitBcData: CUBIT force boundary condition data
- PressureCubitBcData: CUBIT pressure boundary condition data
Purpose of Specializations
Type Safety and Compile-Time Checking
The template specialization system provides several critical benefits:
1. Geometric Entity Differentiation (NODESET vs SIDESET vs BLOCKSET):
- NODESET (0D): Point-based boundary conditions applied to mesh vertices
- Essential: Dirichlet constraints removing DOF degrees of freedom
- Natural: Concentrated loads applied at specific points
 
- SIDESET (2D): Surface-based boundary conditions applied to mesh faces
- Essential: Surface-distributed constraints (e.g., zero normal displacement)
- Natural: Pressure loads, heat flux, traction forces requiring surface integration
 
- BLOCKSET (3D): Volume-based constraints and body forces applied to mesh regions
- Essential: Domain-wide field constraints and material property assignments
- Natural: Body forces, heat sources, manufacturing forces within volumes
 
2. Physics-Specific Type Safety:
- DisplacementCubitBcData: Vector fields with 3 spatial components (Ux, Uy, Uz)
- TemperatureCubitBcData: Scalar field with single temperature value
- ForceCubitBcData: Vector loading with force magnitude and direction
- PressureCubitBcData: Scalar pressure with automatic normal direction calculation
- HeatFluxCubitBcData: Scalar flux with surface orientation handling
3. Compile-Time Dispatch Benefits:
- Prevents runtime errors by catching type mismatches during compilation
- Enables optimized code generation for each boundary condition type
- Provides clear separation between essential (constraint) and natural (loading) operations
- Allows physics-specific validation and error checking
4. Essential vs Natural BC Implementation Patterns: 
bc_manager.removeBlockDOFsOnEntities<BcMeshsetType<DISPLACEMENTSET>>(
    "problem", "DISPLACEMENT", true, false, false);
 
bc_manager.pushMarkDOFsOnEntities<BcMeshsetType<FORCESET>>(
    "problem", "DISPLACEMENT", true, false);
 5. BLOCKSET Specializations for Advanced Physics:
- Volume Constraints: Entire material regions with uniform properties
- Body Forces: Gravitational, centrifugal, or manufacturing loads
- Material Interfaces: Coupling between different physics domains
- Analytical Functions: Mathematical expressions for complex loading patterns
- Multi-Physics Coupling: Temperature-dependent displacement constraints
Geometry-Specific Handling
- NODESET Operations: Point-based constraints and loads (0D entities)
- SIDESET Operations: Surface-based conditions and fluxes (2D entities)
- BLOCKSET Operations: Volume-based constraints and body forces (3D entities)
- Bridge Dimensions: Proper handling of DOF-to-geometry associations
Physics-Specific Implementations
- Mechanical: Displacement, force, pressure, traction boundary conditions
- Thermal: Temperature and heat flux boundary conditions
- Multi-Physics: Coupled boundary condition handling across physics domains
- Analytical: Mathematical function-based boundary condition application
Typical Workflow
- Mesh Loading: MeshsetsManager discovers boundary condition meshsets
- BC Detection: BcManager identifies available boundary condition types
- Essential BCs: Remove constrained DOFs using removeBlockDOFsOnEntities()
- Natural BCs: Mark affected DOFs using pushMarkDOFsOnEntities()
Definition in file BcManager.hpp.