7#ifndef __BCMANAGER_HPP__
8#define __BCMANAGER_HPP__
37 struct BCs : boost::enable_shared_from_this<BCs> {
42 boost::shared_ptr<DisplacementCubitBcData>
dispBcPtr;
43 boost::shared_ptr<TemperatureCubitBcData>
tempBcPtr;
49 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
53 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
57 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>>;
217 std::vector<std::regex> reg_vec(bc_names.size());
218 for (
int i = 0;
i != bc_names.size(); ++
i) {
219 auto full_name = std::string(
"(.*)_") + bc_names[
i] + std::string(
"(.*)");
220 reg_vec[
i] = std::regex(full_name);
239 std::vector<std::regex> reg_vec(bc_names.size());
240 for (
int i = 0;
i != bc_names.size(); ++
i) {
241 auto full_name = std::string(
"(.*)_") + bc_names[
i] + std::string(
"(.*)");
242 reg_vec[
i] = std::regex(full_name);
253 const std::vector<BcMarkerPtr> &boundary_markers_ptr_vec);
262 inline auto checkBlock(
const std::pair<
string, boost::shared_ptr<BCs>> &bc,
264 return std::regex_match(bc.first, reg);
274 checkBlock(
const std::pair<std::string, boost::shared_ptr<BCs>> &bc,
276 auto full_name = std::string(
"(.*)_") + name + std::string(
"(.*)");
293 getBlockIS(
const std::string block_prefix,
const std::string block_name,
294 const std::string
field_name,
const std::string problem_name,
309 getBlockIS(
const std::string problem_name,
const std::string block_name,
320 static std::pair<std::string, std::string>
322 const std::string prb_name);
332BcManager::removeBlockDOFsOnEntities<BcMeshsetType<DISPLACEMENTSET>>(
333 const std::string problem_name,
const std::string
field_name,
334 bool get_low_dim_ents,
bool block_name_field_prefix,
335 bool is_distributed_mesh);
339BcManager::removeBlockDOFsOnEntities<BcMeshsetType<TEMPERATURESET>>(
340 const std::string problem_name,
const std::string
field_name,
341 bool get_low_dim_ents,
bool block_name_field_prefix,
342 bool is_distributed_mesh);
346 const std::string problem_name,
const std::string
field_name,
347 bool get_low_dim_ents,
bool block_name_field_prefix,
348 bool is_distributed_mesh);
352BcManager::removeBlockDOFsOnEntities<BcDisplacementMeshsetType<BLOCKSET>>(
353 const std::string problem_name,
const std::string
field_name,
354 bool get_low_dim_ents,
bool block_name_field_prefix,
355 bool is_distributed_mesh);
359BcManager::removeBlockDOFsOnEntities<BcScalarMeshsetType<BLOCKSET>>(
360 const std::string problem_name,
const std::string block_name,
361 const std::string
field_name,
bool get_low_dim_ents,
362 bool is_distributed_mesh);
366BcManager::pushMarkDOFsOnEntities<BcMeshsetType<DISPLACEMENTSET>>(
367 const std::string problem_name,
const std::string
field_name,
368 bool get_low_dim_ents,
bool block_name_field_prefix);
372 const std::string problem_name,
const std::string
field_name,
373 bool get_low_dim_ents,
bool block_name_field_prefix);
377 const std::string problem_name,
const std::string
field_name,
378 bool get_low_dim_ents,
bool block_name_field_prefix);
382BcManager::pushMarkDOFsOnEntities<BcDisplacementMeshsetType<BLOCKSET>>(
383 const std::string problem_name,
const std::string
field_name,
384 bool get_low_dim_ents,
bool block_name_field_prefix);
388 const std::string problem_name,
const std::string
field_name,
389 const std::string block_name,
bool get_low_dim_ents);
393 const std::string problem_name,
const std::string
field_name,
394 bool get_low_dim_ents,
bool block_name_field_prefix);
398 const std::string problem_name,
const std::string
field_name,
399 bool get_low_dim_ents,
bool block_name_field_prefix,
400 bool is_distributed_mesh);
404 const std::string problem_name,
const std::string
field_name,
405 bool get_low_dim_ents,
bool block_name_field_prefix);
409 const std::string problem_name,
const std::string
field_name,
410 bool get_low_dim_ents,
bool block_name_field_prefix,
411 bool is_distributed_mesh);
415 const std::string problem_name,
const std::string
field_name,
416 bool get_low_dim_ents,
bool block_name_field_prefix);
420 const std::string problem_name,
const std::string
field_name,
421 bool get_low_dim_ents,
bool block_name_field_prefix,
422 bool is_distributed_mesh);
426 const std::string problem_name,
const std::string
field_name,
427 bool get_low_dim_ents,
bool block_name_field_prefix);
431 const std::string problem_name,
const std::string
field_name,
432 bool get_low_dim_ents,
bool block_name_field_prefix);
436 const std::string problem_name,
const std::string
field_name,
437 bool get_low_dim_ents,
bool block_name_field_prefix);
441 const std::string problem_name,
const std::string
field_name,
442 bool get_low_dim_ents,
bool block_name_field_prefix,
443 bool is_distributed_mesh);
447BcManager::removeBlockDOFsOnEntities<BcForceMeshsetType<BLOCKSET>>(
448 const std::string problem_name,
const std::string
field_name,
449 bool get_low_dim_ents,
bool block_name_field_prefix,
450 bool is_distributed_mesh);
454 const std::string problem_name,
const std::string
field_name,
455 bool get_low_dim_ents,
bool block_name_field_prefix,
456 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< ForceCubitBcData > forceBcPtr
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.
Range getMergedBlocksRange(std::vector< std::regex > bc_regex_vec)
Merge block ranges.
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 getMergedBlocksRange(std::vector< string > bc_names)
Merge block ranges.
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