44 void init(
int branch_id_,
size_t branch_internal_id_,
size_t first_node_id_of_branch_) {
45 branch_id = branch_id_;
46 branch_internal_id = branch_internal_id_;
47 first_node_id_of_branch = first_node_id_of_branch_;
52 void set_subcase_id(
const int subcase_id_) { subcase_id = subcase_id_; }
54 int get_subcase_id()
const {
return subcase_id; }
56 Domain& get_domain() {
return parent.get_domain(); }
60 size_t get_branch_internal_id()
const {
return branch_internal_id; }
62 bool have_temperature()
const {
63 auto it = node_temp_map.find(subcase_id);
64 return (it != node_temp_map.end() && !it->second.empty());
67 bool get_material_temperature(
69 b2linalg::Vector<double, b2linalg::Vdense_constref> nodes_interpolation,
70 const size_t nb_thickness_interpolation,
const double thickness_interpolation[],
71 const double time,
double& temperature,
double& d_temperature_d_time)
const {
73 d_temperature_d_time = 0;
74 auto it = node_temp_map.find(subcase_id);
75 if (it == node_temp_map.end() || it->second.empty()) {
return false; }
76 const NodeTempVector& node_temp_vector = it->second;
78 std::pair<size_t, Node* const*> nodes = element->
get_nodes();
79 for (
size_t k = 0; k != node_temp_vector.size(); ++k) {
80 const NodeTemp& nt = node_temp_vector[k];
81 if (nt.stage_number < current_stage) {
continue; }
84 if (nt.stage_number > current_stage) {
88 scale = nt.scalef->value(time);
89 scale_d = nt.scalef->d_value(time);
93 if (nt.values.size1() < nb_thickness_interpolation) {
94 Exception() <<
"Number of temperature values per node "
98 for (
size_t j = 0; j != nodes.first; ++j) {
99 const size_t jj = nodes.second[j]->get_id() - first_node_id_of_branch;
100 for (
size_t i = 0; i != nb_thickness_interpolation; ++i) {
102 thickness_interpolation[i] * nodes_interpolation[j] * nt.values(i, jj);
103 temperature += f * scale;
104 d_temperature_d_time += f * scale_d;
116 b2linalg::Matrix<double, b2linalg::Mrectangle> values;
117 TimeFunction* scalef;
120 typedef std::vector<NodeTemp> NodeTempVector;
121 typedef std::map<int, NodeTempVector> NodeTempVectorMap;
124 size_t branch_internal_id{};
125 size_t first_node_id_of_branch{};
129 NodeTempVectorMap node_temp_map;
Definition b2domain_property.H:28
A in-core implementation of the b2dbv3::Domain. All the Element, Node and ElementProperty objects are...
Definition b2domain_database.H:62