7#ifndef __BCMANAGER_HPP__
8#define __BCMANAGER_HPP__
36 struct BCs : boost::enable_shared_from_this<BCs> {
41 boost::shared_ptr<DisplacementCubitBcData>
dispBcPtr;
42 boost::shared_ptr<TemperatureCubitBcData>
tempBcPtr;
47 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
51 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
55 return boost::shared_ptr<std::vector<unsigned char>>(shared_from_this(),
81 const std::string block_name,
83 int hi,
bool get_low_dim_ents =
true,
84 bool is_distributed_mesh =
true);
99 const std::string block_name,
101 int hi,
bool get_low_dim_ents =
true);
114 template <
typename T>
117 bool get_low_dim_ents =
true,
118 bool block_name_field_prefix =
false,
119 bool is_distributed_mesh =
true);
130 template <
typename T>
133 bool get_low_dim_ents =
true,
134 bool block_name_field_prefix =
false);
147 template <
typename T>
149 const std::string block_name,
151 bool get_low_dim_ents =
true,
152 bool is_distributed_mesh =
true);
163 template <
typename T>
165 const std::string block_name,
167 bool get_low_dim_ents =
true);
184 using BcMarkerPtr = boost::shared_ptr<std::vector<char unsigned>>;
216 std::vector<std::regex> reg_vec(bc_names.size());
217 for (
int i = 0;
i != bc_names.size(); ++
i) {
218 auto full_name = std::string(
"(.*)_") + bc_names[
i] + std::string(
"(.*)");
219 reg_vec[
i] = std::regex(full_name);
230 const std::vector<BcMarkerPtr> &boundary_markers_ptr_vec);
238 inline auto checkBlock(
const std::pair<
string, boost::shared_ptr<BCs>> &bc,
240 return std::regex_match(bc.first, reg);
250 checkBlock(
const std::pair<std::string, boost::shared_ptr<BCs>> &bc,
252 auto full_name = std::string(
"(.*)_") + name + std::string(
"(.*)");
269 getBlockIS(
const std::string block_prefix,
const std::string block_name,
270 const std::string
field_name,
const std::string problem_name,
285 getBlockIS(
const std::string problem_name,
const std::string block_name,
296 static std::pair<std::string, std::string>
298 const std::string prb_name);
308BcManager::removeBlockDOFsOnEntities<BcMeshsetType<DISPLACEMENTSET>>(
309 const std::string problem_name,
const std::string
field_name,
310 bool get_low_dim_ents,
bool block_name_field_prefix,
311 bool is_distributed_mesh);
315BcManager::removeBlockDOFsOnEntities<BcMeshsetType<TEMPERATURESET>>(
316 const std::string problem_name,
const std::string
field_name,
317 bool get_low_dim_ents,
bool block_name_field_prefix,
318 bool is_distributed_mesh);
322 const std::string problem_name,
const std::string
field_name,
323 bool get_low_dim_ents,
bool block_name_field_prefix,
324 bool is_distributed_mesh);
328BcManager::removeBlockDOFsOnEntities<BcVectorMeshsetType<BLOCKSET>>(
329 const std::string problem_name,
const std::string
field_name,
330 bool get_low_dim_ents,
bool block_name_field_prefix,
331 bool is_distributed_mesh);
335BcManager::removeBlockDOFsOnEntities<BcScalarMeshsetType<BLOCKSET>>(
336 const std::string problem_name,
const std::string block_name,
337 const std::string
field_name,
bool get_low_dim_ents,
338 bool is_distributed_mesh);
342BcManager::pushMarkDOFsOnEntities<BcMeshsetType<DISPLACEMENTSET>>(
343 const std::string problem_name,
const std::string
field_name,
344 bool get_low_dim_ents,
bool block_name_field_prefix);
348 const std::string problem_name,
const std::string
field_name,
349 bool get_low_dim_ents,
bool block_name_field_prefix);
353 const std::string problem_name,
const std::string
field_name,
354 bool get_low_dim_ents,
bool block_name_field_prefix);
358 const std::string problem_name,
const std::string
field_name,
359 bool get_low_dim_ents,
bool block_name_field_prefix);
363 const std::string problem_name,
const std::string
field_name,
364 const std::string block_name,
bool get_low_dim_ents);
368 const std::string problem_name,
const std::string
field_name,
369 bool get_low_dim_ents,
bool block_name_field_prefix);
373 const std::string problem_name,
const std::string
field_name,
374 bool get_low_dim_ents,
bool block_name_field_prefix,
375 bool is_distributed_mesh);
379 const std::string problem_name,
const std::string
field_name,
380 bool get_low_dim_ents,
bool block_name_field_prefix);
384 const std::string problem_name,
const std::string
field_name,
385 bool get_low_dim_ents,
bool block_name_field_prefix,
386 bool is_distributed_mesh);
390 const std::string problem_name,
const std::string
field_name,
391 bool get_low_dim_ents,
bool block_name_field_prefix);
395 const std::string problem_name,
const std::string
field_name,
396 bool get_low_dim_ents,
bool block_name_field_prefix,
397 bool is_distributed_mesh);
FTensor::Index< 'i', SPACE_DIM > i
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
constexpr auto field_name
Data structure storing bc markers and atributes.
boost::shared_ptr< HeatFluxCubitBcData > heatFluxBcPtr
boost::shared_ptr< DisplacementCubitBcData > dispBcPtr
std::vector< unsigned char > bcMarkers
std::vector< double > bcAttributes
boost::shared_ptr< TemperatureCubitBcData > tempBcPtr
DEPRECATED auto getBcEdgesPtr()
Simple interface for fast problem set-up.
auto checkBlock(const std::pair< string, boost::shared_ptr< BCs > > &bc, std::regex reg)
check if given boundary condition name is in the map bc element
boost::shared_ptr< std::vector< char unsigned > > BcMarkerPtr
MoFEMErrorCode removeBlockDOFsOnEntities(const std::string problem_name, const std::string field_name, bool get_low_dim_ents=true, bool block_name_field_prefix=false, bool is_distributed_mesh=true)
Mark block DOFs.
MoFEMErrorCode getOptions()
get options
BcMarkerPtr getMergedBlocksMarker(std::vector< std::regex > bc_regex_vec)
Get the Merged Boundary Marker object.
static std::pair< std::string, std::string > extractStringFromBlockId(const std::string block_id, const std::string prb_name)
Extract block name and block name form block id.
MoFEMErrorCode pushMarkDOFsOnEntities(const std::string problem_name, const std::string block_name, const std::string field_name, bool get_low_dim_ents=true)
Mark block DOFs.
auto getMergedBlocksMarker(std::vector< string > bc_names)
Get the Merged Boundary Marker object.
BcMapByBlockName bcMapByBlockName
SmartPetscObj< IS > getBlockIS(const std::string block_prefix, const std::string block_name, const std::string field_name, const std::string problem_name, int lo, int hi, SmartPetscObj< IS > is_expand=SmartPetscObj< IS >())
Get block IS.
MoFEMErrorCode removeBlockDOFsOnEntities(const std::string problem_name, const std::string block_name, const std::string field_name, int lo, int hi, bool get_low_dim_ents=true, bool is_distributed_mesh=true)
Remove DOFs from problem.
virtual ~BcManager()=default
MoFEMErrorCode removeBlockDOFsOnEntities(const std::string problem_name, const std::string block_name, const std::string field_name, bool get_low_dim_ents=true, bool is_distributed_mesh=true)
Mark block DOFs.
std::map< string, boost::shared_ptr< BCs > > BcMapByBlockName
MoFEMErrorCode pushMarkDOFsOnEntities(const std::string problem_name, const std::string field_name, bool get_low_dim_ents=true, bool block_name_field_prefix=false)
Mark block DOFs.
auto getBcStructure(const std::string bc_id)
Get the bc structure object.
auto checkBlock(const std::pair< std::string, boost::shared_ptr< BCs > > &bc, std::string name)
check if given boundary condition name is in the map bc element
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
BcMarkerPtr getMergedBlocksMarker(const std::vector< BcMarkerPtr > &boundary_markers_ptr_vec)
Get the Merged Blocks Marker object.
boost::shared_ptr< BCs > popMarkDOFsOnEntities(const std::string block_name)
Get bc data and remove element.
MoFEMErrorCode pushMarkDOFsOnEntities(const std::string problem_name, const std::string block_name, const std::string field_name, int lo, int hi, bool get_low_dim_ents=true)
Mark block DOFs.
BcMapByBlockName & getBcMapByBlockName()
Get the bc map.
intrusive_ptr for managing petsc objects
base class for all interface classes