7#ifndef __BCMANAGER_HPP__
8#define __BCMANAGER_HPP__
41 struct BCs : boost::enable_shared_from_this<BCs> {
46 using DofsView = std::vector<boost::weak_ptr<NumeredDofEntity>>;
49 boost::shared_ptr<DisplacementCubitBcData>
dispBcPtr;
50 boost::shared_ptr<TemperatureCubitBcData>
tempBcPtr;
57 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
61 return boost::shared_ptr<Range>(shared_from_this(), &
bcEnts);
65 return boost::shared_ptr<std::vector<unsigned char>>(shared_from_this(),
87 const std::string block_name,
103 const std::string block_name,
106 bool is_distributed_mesh =
true);
121 const std::string block_name,
123 int hi,
bool get_low_dim_ents =
true,
124 bool is_distributed_mesh =
true);
139 const std::string block_name,
141 int hi,
bool get_low_dim_ents =
true);
154 template <
typename T>
157 bool get_low_dim_ents =
true,
158 bool block_name_field_prefix =
false,
159 bool is_distributed_mesh =
true);
170 template <
typename T>
173 bool get_low_dim_ents =
true,
174 bool block_name_field_prefix =
false);
187 template <
typename T>
189 const std::string block_name,
191 bool get_low_dim_ents =
true,
192 bool is_distributed_mesh =
true);
203 template <
typename T>
205 const std::string block_name,
207 bool get_low_dim_ents =
true);
224 using BcMarkerPtr = boost::shared_ptr<std::vector<char unsigned>>;
257 std::vector<std::regex> reg_vec(bc_names.size());
258 for (
int i = 0;
i != bc_names.size(); ++
i) {
259 auto full_name = std::string(
"(.*)_") + bc_names[
i] + std::string(
"(.*)");
260 reg_vec[
i] = std::regex(full_name);
279 std::vector<std::regex> reg_vec(bc_names.size());
280 for (
int i = 0;
i != bc_names.size(); ++
i) {
281 auto full_name = std::string(
"(.*)_") + bc_names[
i] + std::string(
"(.*)");
282 reg_vec[
i] = std::regex(full_name);
293 const std::vector<BcMarkerPtr> &boundary_markers_ptr_vec);
302 inline auto checkBlock(
const std::pair<
string, boost::shared_ptr<BCs>> &bc,
304 return std::regex_match(bc.first, reg);
314 checkBlock(
const std::pair<std::string, boost::shared_ptr<BCs>> &bc,
316 auto full_name = std::string(
"(.*)_") + name + std::string(
"(.*)");
333 getBlockIS(
const std::string block_prefix,
const std::string block_name,
334 const std::string
field_name,
const std::string problem_name,
349 getBlockIS(
const std::string problem_name,
const std::string block_name,
360 static std::pair<std::string, std::string>
362 const std::string prb_name);
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);
380 const std::string problem_name,
const std::string
field_name,
381 bool get_low_dim_ents,
bool block_name_field_prefix,
382 bool is_distributed_mesh);
386 const std::string problem_name,
const std::string
field_name,
387 bool get_low_dim_ents,
bool block_name_field_prefix,
388 bool is_distributed_mesh);
393 const std::string problem_name,
const std::string
field_name,
394 bool get_low_dim_ents,
bool block_name_field_prefix,
395 bool is_distributed_mesh);
400 const std::string problem_name,
const std::string block_name,
401 const std::string
field_name,
bool get_low_dim_ents,
402 bool is_distributed_mesh);
407 const std::string problem_name,
const std::string
field_name,
408 bool get_low_dim_ents,
bool block_name_field_prefix);
412 const std::string problem_name,
const std::string
field_name,
413 bool get_low_dim_ents,
bool block_name_field_prefix);
417 const std::string problem_name,
const std::string
field_name,
418 bool get_low_dim_ents,
bool block_name_field_prefix);
423 const std::string problem_name,
const std::string
field_name,
424 bool get_low_dim_ents,
bool block_name_field_prefix);
428 const std::string problem_name,
const std::string
field_name,
429 const std::string block_name,
bool get_low_dim_ents);
433 const std::string problem_name,
const std::string
field_name,
434 bool get_low_dim_ents,
bool block_name_field_prefix);
438 const std::string problem_name,
const std::string
field_name,
439 bool get_low_dim_ents,
bool block_name_field_prefix,
440 bool is_distributed_mesh);
444 const std::string problem_name,
const std::string
field_name,
445 bool get_low_dim_ents,
bool block_name_field_prefix);
449 const std::string problem_name,
const std::string
field_name,
450 bool get_low_dim_ents,
bool block_name_field_prefix,
451 bool is_distributed_mesh);
455 const std::string problem_name,
const std::string
field_name,
456 bool get_low_dim_ents,
bool block_name_field_prefix);
460 const std::string problem_name,
const std::string
field_name,
461 bool get_low_dim_ents,
bool block_name_field_prefix,
462 bool is_distributed_mesh);
466 const std::string problem_name,
const std::string
field_name,
467 bool get_low_dim_ents,
bool block_name_field_prefix);
471 const std::string problem_name,
const std::string
field_name,
472 bool get_low_dim_ents,
bool block_name_field_prefix);
476 const std::string problem_name,
const std::string
field_name,
477 bool get_low_dim_ents,
bool block_name_field_prefix);
481 const std::string problem_name,
const std::string
field_name,
482 bool get_low_dim_ents,
bool block_name_field_prefix,
483 bool is_distributed_mesh);
488 const std::string problem_name,
const std::string
field_name,
489 bool get_low_dim_ents,
bool block_name_field_prefix,
490 bool is_distributed_mesh);
494 const std::string problem_name,
const std::string
field_name,
495 bool get_low_dim_ents,
bool block_name_field_prefix,
496 bool is_distributed_mesh);
501 const std::string problem_name,
const std::string
field_name,
502 bool get_low_dim_ents,
bool block_name_field_prefix);
507 const std::string problem_name,
const std::string
field_name,
508 bool get_low_dim_ents,
bool block_name_field_prefix);
513 const std::string problem_name,
const std::string
field_name,
514 bool get_low_dim_ents,
bool block_name_field_prefix);
518 const std::string problem_name,
const std::string
field_name,
519 bool get_low_dim_ents,
bool block_name_field_prefix);
524 const std::string problem_name,
const std::string
field_name,
525 bool get_low_dim_ents,
bool block_name_field_prefix);
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< PressureCubitBcData > pressureBcPtr
boost::shared_ptr< TemperatureCubitBcData > tempBcPtr
boost::shared_ptr< DofsView > dofsViewPtr
std::vector< boost::weak_ptr< NumeredDofEntity > > DofsView
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
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.
MoFEMErrorCode removeSideDOFs(const std::string problem_name, const std::string block_name, const std::string field_name, int bridge_dim, int lo, int hi, bool is_distributed_mesh=true)
Remove side DOFs.
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.
BcManager(const MoFEM::Core &core)
MoFEMErrorCode pushMarkSideDofs(const std::string problem_name, const std::string block_name, const std::string field_name, int bridge_dim, int lo, int hi)
Mark side DOFs.
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.
boost::shared_ptr< std::vector< char unsigned > > BcMarkerPtr
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
std::map< string, boost::shared_ptr< BCs > > BcMapByBlockName
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