21 {
24
25 if (
auto fe_method_ptr =
fePtr.lock()) {
26
29 const auto problem_name = fe_method_ptr->problemPtr->getName();
30
31 for (auto bc : bc_mng->getBcMapByBlockName()) {
32 if (auto disp_bc = bc.second->dispBcPtr) {
33
34 auto &bc_id = bc.first;
35
36 auto regex_str = (boost::format("%s_(.*)") % problem_name).str();
37 if (std::regex_match(bc_id, std::regex(regex_str))) {
38
41
45 };
46 const auto nb_field_coeffs = get_field_coeffs(
field_name);
47
49 << "Apply EssentialPreProc<DisplacementCubitBcData>: "
50 << problem_name <<
"_" <<
field_name <<
"_" << block_name;
51
53 int coeff;
54 std::array<std::vector<double>, 3> coords;
55 int idx;
56
57 auto lambda = [&](boost::shared_ptr<FieldEntity> field_entity_ptr) {
60 field_entity_ptr->getEntFieldData()[coeff] =
61 coords[coeff][idx] +
v;
62 ++idx;
63 } else {
64 field_entity_ptr->getEntFieldData()[coeff] =
v;
65 }
67 };
68
69 auto verts = bc.second->bcEnts.subset_by_type(MBVERTEX);
71 for (auto d : {0, 1, 2})
72 coords[d].resize(verts.size());
74 &*coords[1].begin(),
75 &*coords[2].begin());
76 }
77
78 if (disp_bc->data.flag1) {
79 v = disp_bc->data.value1;
81 v *= s->getScale(fe_method_ptr->ts_t);
82 }
83 idx = 0;
84 coeff = 0;
86 }
87 if (disp_bc->data.flag2 && nb_field_coeffs > 1) {
88 v = disp_bc->data.value2;
90 v *= s->getScale(fe_method_ptr->ts_t);
91 }
92 idx = 0;
93 coeff = 1;
95 }
96 if (disp_bc->data.flag3 && nb_field_coeffs > 2) {
97 v = disp_bc->data.value3;
99 v *= s->getScale(fe_method_ptr->ts_t);
100 }
101 idx = 0;
102 coeff = 2;
104 }
105 }
106 }
107 }
108
109 } else {
111 "Can not lock shared pointer");
112 }
113
115}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
virtual const Field * get_field_structure(const std::string &name, enum MoFEMTypes bh=MF_EXIST) const =0
get field structure
#define MOFEM_LOG(channel, severity)
Log.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
const double v
phase velocity of light in medium (cm/ns)
constexpr auto field_name
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.
virtual moab::Interface & get_moab()=0
FieldCoefficientsNumber getNbOfCoeffs() const
Get number of field coefficients.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.