11 #ifndef _ESSENTIAL_HEATFLUXCUBITBCDATA_HPP_
12 #define _ESSENTIAL_HEATFLUXCUBITBCDATA_HPP_
16 template <
int FIELD_DIM, AssemblyType A, IntegrationType I,
typename OpBase>
19 template
OpSource<3, FIELD_DIM, SourceBoundaryNormalSpecialization> {
22 template LinearForm<I>::template
OpSource<
26 boost::shared_ptr<HeatFluxCubitBcData> bc_data,
27 boost::shared_ptr<Range> ents_ptr,
28 std::vector<boost::shared_ptr<ScalingMethod>> smv);
35 template <
int FIELD_DIM, AssemblyType A, IntegrationType I,
typename OpBase>
38 boost::shared_ptr<HeatFluxCubitBcData> bc_data,
39 boost::shared_ptr<Range> ents_ptr,
40 std::vector<boost::shared_ptr<ScalingMethod>> smv)
44 vecOfTimeScalingMethods(smv) {
45 heatFlux = -bc_data->data.value1;
46 this->timeScalingFun = [
this](
const double t) {
48 for (
auto &o : vecOfTimeScalingMethods) {
79 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
80 const std::string problem_name, std::string
field_name,
81 boost::shared_ptr<MatrixDouble> field_mat_ptr,
82 std::vector<boost::shared_ptr<ScalingMethod>> smv
92 A>::template LinearForm<I>::template OpBaseTimesVector<
BASE_DIM,
95 auto add_op = [&](
auto &bcs) {
98 if (
auto bc =
m.second->heatFluxBcPtr) {
99 auto &bc_id =
m.first;
101 (boost::format(
"%s_%s_(.*)") % problem_name %
field_name).str();
102 if (std::regex_match(bc_id, std::regex(regex_str))) {
108 pipeline.push_back(
new OpInternal(
110 [](
double,
double,
double) constexpr {
return 1.; },
111 m.second->getBcEntsPtr()));
140 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
141 const std::string problem_name, std::string
field_name) {
148 auto add_op = [&](
auto &bcs) {
150 for (
auto &
m : bcs) {
151 if (
auto bc =
m.second->heatFluxBcPtr) {
152 auto &bc_id =
m.first;
154 (boost::format(
"%s_%s_(.*)") % problem_name %
field_name).str();
155 if (std::regex_match(bc_id, std::regex(regex_str))) {
159 pipeline.push_back(
new OP(
field_name,
m.second->getBcEntsPtr()));
176 #endif //_ESSENTIAL_HEATFLUXCUBITBCDATA_HPP_