209 std::vector<MeshLib::Element*>& vec_matrix_elements,
210 std::vector<int>& vec_fracture_mat_IDs,
211 std::vector<std::vector<MeshLib::Element*>>& vec_fracture_elements,
212 std::vector<std::vector<MeshLib::Element*>>& vec_fracture_matrix_elements,
213 std::vector<std::vector<MeshLib::Node*>>& vec_fracture_nodes,
214 std::vector<std::pair<std::size_t, std::vector<int>>>&
215 vec_branch_nodeID_matIDs,
216 std::vector<std::pair<std::size_t, std::vector<int>>>&
217 vec_junction_nodeID_matIDs)
219 IsCrackTip isCrackTip(mesh);
223 std::vector<MeshLib::Element*> all_fracture_elements;
228 vec_matrix_elements.push_back(e);
232 all_fracture_elements.push_back(e);
235 DBUG(
"-> found total {:d} matrix elements and {:d} fracture elements",
236 vec_matrix_elements.size(), all_fracture_elements.size());
239 auto const material_ids = materialIDs(mesh);
242 OGS_FATAL(
"Could not access MaterialIDs property from mesh.");
244 transform(cbegin(all_fracture_elements), cend(all_fracture_elements),
245 back_inserter(vec_fracture_mat_IDs),
246 [&material_ids](
auto const* e)
247 {
return (*material_ids)[e->getID()]; });
250 DBUG(
"-> found {:d} fracture material groups", vec_fracture_mat_IDs.size());
253 vec_fracture_elements.resize(vec_fracture_mat_IDs.size());
254 for (
unsigned frac_id = 0; frac_id < vec_fracture_mat_IDs.size(); frac_id++)
256 const auto frac_mat_id = vec_fracture_mat_IDs[frac_id];
257 std::vector<MeshLib::Element*>& vec_elements =
258 vec_fracture_elements[frac_id];
259 std::copy_if(all_fracture_elements.begin(), all_fracture_elements.end(),
260 std::back_inserter(vec_elements),
262 { return (*material_ids)[e->getID()] == frac_mat_id; });
263 DBUG(
"-> found {:d} elements on the fracture {:d}", vec_elements.size(),
268 vec_fracture_nodes.resize(vec_fracture_mat_IDs.size());
269 for (
unsigned frac_id = 0; frac_id < vec_fracture_mat_IDs.size(); frac_id++)
271 std::vector<MeshLib::Node*>& vec_nodes = vec_fracture_nodes[frac_id];
274 for (
unsigned i = 0; i < e->getNumberOfNodes(); i++)
276 if (isCrackTip(*e->getNode(i)))
280 vec_nodes.push_back(
const_cast<MeshLib::Node*
>(e->getNode(i)));
285 DBUG(
"-> found {:d} nodes on the fracture {:d}", vec_nodes.size(),
290 std::vector<std::vector<MeshLib::Element*>> intersected_fracture_elements;
291 findFracutreIntersections(mesh, vec_fracture_mat_IDs, vec_fracture_nodes,
292 intersected_fracture_elements,
293 vec_branch_nodeID_matIDs,
294 vec_junction_nodeID_matIDs);
298 for (
unsigned fid = 0; fid < vec_fracture_elements.size(); fid++)
300 auto const& fracture_elements = vec_fracture_elements[fid];
301 std::vector<MeshLib::Element*> vec_ele;
307 for (
unsigned i = 0; i < e->getNumberOfBaseNodes(); i++)
310 if (isCrackTip(*node))
314 auto const& elements_connected_to_node =
316 for (
unsigned j = 0; j < elements_connected_to_node.size(); j++)
319 if (elements_connected_to_node[j]->getDimension() <
325 elements_connected_to_node[j]));
333 std::copy(fracture_elements.begin(), fracture_elements.end(),
334 std::back_inserter(vec_ele));
336 std::copy(intersected_fracture_elements[fid].begin(),
337 intersected_fracture_elements[fid].end(),
338 std::back_inserter(vec_ele));
340 vec_fracture_matrix_elements.push_back(vec_ele);
void getFractureMatrixDataInMesh(MeshLib::Mesh const &mesh, std::vector< MeshLib::Element * > &vec_matrix_elements, std::vector< int > &vec_fracture_mat_IDs, std::vector< std::vector< MeshLib::Element * > > &vec_fracture_elements, std::vector< std::vector< MeshLib::Element * > > &vec_fracture_matrix_elements, std::vector< std::vector< MeshLib::Node * > > &vec_fracture_nodes, std::vector< std::pair< std::size_t, std::vector< int > > > &vec_branch_nodeID_matIDs, std::vector< std::pair< std::size_t, std::vector< int > > > &vec_junction_nodeID_matIDs)