10 #if !defined(KRATOS_REMOVE_MESH_NODES_FOR_FLUIDS_PROCESS_H_INCLUDED)
11 #define KRATOS_REMOVE_MESH_NODES_FOR_FLUIDS_PROCESS_H_INCLUDED
80 : mrModelPart(rModelPart),
81 mrRemesh(rRemeshingParameters)
83 KRATOS_INFO(
"RemoveMeshNodesForFluidsProcess") <<
" activated " << std::endl;
113 std::cout <<
" [ REMOVE CLOSE NODES: " << std::endl;
117 SizeType boundary_nodes_removed = 0;
118 SizeType nodes_removed_inlet_zone = 0;
121 if (mrRemesh.
Refine->RemovingOptions.Is(MesherUtilities::REMOVE_NODES))
123 bool some_node_is_removed =
false;
126 std::cout <<
" REMOVE_NODES is TRUE " << std::endl;
128 if (mrRemesh.
Refine->RemovingOptions.Is(MesherUtilities::REMOVE_NODES_ON_DISTANCE))
131 std::cout <<
" REMOVE_NODES_ON_DISTANCE is TRUE " << std::endl;
133 some_node_is_removed = RemoveNodesOnDistance(inside_nodes_removed, boundary_nodes_removed, nodes_removed_inlet_zone);
137 this->CleanRemovedNodes(mrModelPart);
141 mrRemesh.
Info->RemovedNodes += inside_nodes_removed + boundary_nodes_removed - nodes_removed_inlet_zone;
142 int distance_remove = inside_nodes_removed + boundary_nodes_removed;
146 std::cout <<
" [ NODES ( removed : " << mrRemesh.
Info->RemovedNodes <<
" ) ]" << std::endl;
147 std::cout <<
" [ Distance(removed: " << distance_remove <<
"; inside: " << inside_nodes_removed <<
"; boundary: " << boundary_nodes_removed <<
") ]" << std::endl;
148 std::cout <<
" REMOVE CLOSE NODES ]; " << std::endl;
167 std::string
Info()
const override
169 return "RemoveMeshNodesForFluidsProcess";
175 rOStream <<
"RemoveMeshNodesForFluidsProcess";
211 void CleanRemovedNodes(
ModelPart &rModelPart)
217 temporal_nodes.reserve(rModelPart.
Nodes().size());
219 temporal_nodes.swap(rModelPart.
Nodes());
221 for (ModelPart::NodesContainerType::iterator i_node = temporal_nodes.begin(); i_node != temporal_nodes.end(); i_node++)
223 if (i_node->IsNot(TO_ERASE))
228 if (boundingBox ==
true && i_node->IsNot(RIGID))
230 const ProcessInfo &rCurrentProcessInfo = mrModelPart.GetProcessInfo();
231 double currentTime = rCurrentProcessInfo[TIME];
234 if (currentTime > initialTime && currentTime < finalTime)
238 if (i_node->X() < BoundingBoxLowerPoint[0] || i_node->Y() < BoundingBoxLowerPoint[1] || i_node->Z() < BoundingBoxLowerPoint[2] ||
239 i_node->X() > BoundingBoxUpperPoint[0] || i_node->Y() > BoundingBoxUpperPoint[1] || i_node->Z() > BoundingBoxUpperPoint[2])
241 i_node->Set(TO_ERASE);
245 (rModelPart.
Nodes()).push_back(*(i_node.base()));
250 (rModelPart.
Nodes()).push_back(*(i_node.base()));
255 (rModelPart.
Nodes()).push_back(*(i_node.base()));
262 rModelPart.
Nodes().Sort();
270 bool RemoveNodesOnDistance(
SizeType &inside_nodes_removed,
276 const SizeType dimension = mrModelPart.ElementsBegin()->GetGeometry().WorkingSpaceDimension();
278 bool some_node_is_removed =
false;
284 std::vector<Node::Pointer> list_of_nodes;
285 list_of_nodes.reserve(mrModelPart.NumberOfNodes());
286 for (ModelPart::NodesContainerType::iterator i_node = mrModelPart.NodesBegin(); i_node != mrModelPart.NodesEnd(); i_node++)
288 (list_of_nodes).push_back(*(i_node.base()));
291 KdtreeType nodes_tree(list_of_nodes.begin(), list_of_nodes.end(), bucket_size);
295 std::vector<Node::Pointer> neighbours(num_neighbours);
296 std::vector<double> neighbour_distances(num_neighbours);
300 Node work_point(0, 0.0, 0.0, 0.0);
303 const ProcessInfo &rCurrentProcessInfo = mrModelPart.GetProcessInfo();
304 const double currentTime = rCurrentProcessInfo[TIME];
305 double meshSize = mrRemesh.
Refine->CriticalRadius;
307 bool refiningBox =
false;
316 const SizeType principalModelPartId = rCurrentProcessInfo[MAIN_MATERIAL_PROPERTY];
317 for (ModelPart::ElementsContainerType::const_iterator ie = mrModelPart.ElementsBegin();
318 ie != mrModelPart.ElementsEnd(); ie++)
322 for (
SizeType i = 0;
i < ie->GetGeometry().size();
i++)
324 if ((ie->GetGeometry()[
i].Is(RIGID) && ie->GetGeometry()[
i].IsNot(PFEMFlags::LAGRANGIAN_INLET)) || ie->GetGeometry()[
i].Is(SOLID) || ie->GetGeometry()[
i].Is(PFEMFlags::EULERIAN_INLET))
332 EraseCriticalNodes2D(ie->GetGeometry(), inside_nodes_removed, nodes_removed_inlet_zone);
337 EraseCriticalNodes3D(ie->GetGeometry(), inside_nodes_removed, nodes_removed_inlet_zone, rigidNodes);
341 for (ModelPart::NodesContainerType::const_iterator in = mrModelPart.NodesBegin(); in != mrModelPart.NodesEnd(); in++)
344 const SizeType propertyIdNode = in->FastGetSolutionStepValue(PROPERTY_ID);
345 meshSize = mrRemesh.
Refine->CriticalRadius;
346 double rigidNodeLocalMeshSize = 0;
347 double rigidNodeMeshCounter = 0;
354 rigidNodeLocalMeshSize += rN[
i].FastGetSolutionStepValue(NODAL_H_WALL);
355 rigidNodeMeshCounter += 1.0;
359 if (refiningBox ==
true)
361 array_1d<double, 3> NodeCoordinates = in->Coordinates();
364 bool insideTransitionZone =
false;
369 bool insideTransitionZone =
false;
374 if (rigidNodeMeshCounter > 0)
376 const double rigidWallMeshSize = rigidNodeLocalMeshSize / rigidNodeMeshCounter;
377 const double ratio = rigidWallMeshSize / meshSize;
378 const double tolerance = 2.0;
379 if (ratio > tolerance)
382 meshSize += 0.5 * rigidWallMeshSize;
386 const double size_for_distance_boundary = 0.6 * meshSize;
387 const double size_for_wall_tip_contact_side = 0.15 * mrRemesh.
Refine->CriticalSide;
389 if (in->Is(TO_ERASE))
391 some_node_is_removed =
true;
393 bool on_contact_tip =
false;
395 if (in->Is(TO_SPLIT) || in->Is(CONTACT))
396 on_contact_tip =
true;
398 if (in->IsNot(NEW_ENTITY) && in->IsNot(INLET) && in->IsNot(ISOLATED) && in->IsNot(RIGID) && in->IsNot(SOLID))
402 bool inletElement =
false;
403 bool interfaceElement =
false;
406 work_point[0] = in->X();
407 work_point[1] = in->Y();
408 work_point[2] = in->Z();
410 if (in->Is(FREE_SURFACE))
414 radius = 0.475 * meshSize;
420 if ((nn)->
Is(RIGID) || (nn)->
Is(SOLID))
424 if ((nn)->
Is(TO_ERASE))
429 if (countRigid == neighb_nodes.size())
439 const SizeType propertyIdSecondNode = (nn)->FastGetSolutionStepValue(PROPERTY_ID);
440 if ((nn)->Is(FREE_SURFACE))
442 freeSurfaceNeighNodes++;
444 if ((nn)->Is(TO_ERASE))
448 if ((nn)->Is(PFEMFlags::EULERIAN_INLET))
452 if (propertyIdNode != propertyIdSecondNode && (nn)->IsNot(RIGID))
454 interfaceElement =
true;
459 if (freeSurfaceNeighNodes > 1)
463 else if (interfaceElement ==
true)
471 n_points_in_radius = nodes_tree.SearchInRadius(work_point,
radius, neighbours.begin(), neighbour_distances.begin(), num_neighbours);
473 if (n_points_in_radius > 1 && neighErasedNodes == 0 && in->IsNot(INLET))
476 if (in->IsNot(RIGID) && in->IsNot(SOLID) && in->IsNot(ISOLATED))
478 if (mrRemesh.
Refine->RemovingOptions.Is(MesherUtilities::REMOVE_NODES_ON_DISTANCE))
481 if (in->IsNot(FREE_SURFACE) && in->IsNot(RIGID) && freeSurfaceNeighNodes ==
dimension)
484 array_1d<double, 3> sumOfCoordinates = in->Coordinates();
485 array_1d<double, 3> sumOfCurrentVelocities = in->FastGetSolutionStepValue(VELOCITY, 0);
486 array_1d<double, 3> sumOfPreviousVelocities = in->FastGetSolutionStepValue(VELOCITY, 1);
487 double sumOfPressures = in->FastGetSolutionStepValue(PRESSURE, 0);
493 noalias(sumOfCoordinates) += (nn)->Coordinates();
494 noalias(sumOfCurrentVelocities) += (nn)->FastGetSolutionStepValue(VELOCITY, 0);
495 noalias(sumOfPreviousVelocities) += (nn)->FastGetSolutionStepValue(VELOCITY, 1);
496 sumOfPressures += (nn)->FastGetSolutionStepValue(PRESSURE, 0);
498 in->X() = sumOfCoordinates[0] /
counter;
499 in->Y() = sumOfCoordinates[1] /
counter;
500 in->X0() = sumOfCoordinates[0] /
counter;
501 in->Y0() = sumOfCoordinates[1] /
counter;
502 in->FastGetSolutionStepValue(DISPLACEMENT_X, 0) = 0;
503 in->FastGetSolutionStepValue(DISPLACEMENT_Y, 0) = 0;
504 in->FastGetSolutionStepValue(DISPLACEMENT_X, 1) = 0;
505 in->FastGetSolutionStepValue(DISPLACEMENT_Y, 1) = 0;
506 in->FastGetSolutionStepValue(VELOCITY_X, 0) = sumOfCurrentVelocities[0] /
counter;
507 in->FastGetSolutionStepValue(VELOCITY_Y, 0) = sumOfCurrentVelocities[1] /
counter;
508 in->FastGetSolutionStepValue(VELOCITY_X, 1) = sumOfPreviousVelocities[0] /
counter;
509 in->FastGetSolutionStepValue(VELOCITY_Y, 1) = sumOfPreviousVelocities[1] /
counter;
510 in->FastGetSolutionStepValue(PRESSURE, 0) = sumOfPressures /
counter;
513 in->Z() = sumOfCoordinates[2] /
counter;
514 in->Z0() = sumOfCoordinates[2] /
counter;
515 in->FastGetSolutionStepValue(DISPLACEMENT_Z, 0) = 0;
516 in->FastGetSolutionStepValue(DISPLACEMENT_Z, 1) = 0;
517 in->FastGetSolutionStepValue(VELOCITY_Z, 0) = sumOfCurrentVelocities[2] /
counter;
518 in->FastGetSolutionStepValue(VELOCITY_Z, 1) = sumOfPreviousVelocities[2] /
counter;
524 some_node_is_removed =
true;
525 inside_nodes_removed++;
528 nodes_removed_inlet_zone++;
530 if (propertyIdNode != principalModelPartId)
532 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
541 for (std::vector<Node::Pointer>::iterator nn = neighbours.begin(); nn != neighbours.begin() + n_points_in_radius; nn++)
543 bool nn_on_contact_tip =
false;
545 if ((*nn)->Is(TO_SPLIT) || (*nn)->Is(CONTACT))
546 nn_on_contact_tip =
true;
548 if ((*nn)->Is(BOUNDARY) && !nn_on_contact_tip && neighbour_distances[
k] < size_for_distance_boundary && neighbour_distances[
k] > 0.0)
550 if ((*nn)->IsNot(TO_ERASE))
556 if ((*nn)->Is(BOUNDARY) && nn_on_contact_tip && neighbour_distances[
k] < size_for_wall_tip_contact_side)
558 if ((*nn)->IsNot(TO_ERASE))
566 if (
counter > 1 && in->IsNot(RIGID) && in->IsNot(SOLID) && in->IsNot(NEW_ENTITY) && !on_contact_tip)
570 std::cout <<
" Removed Boundary Node [" << in->Id() <<
"] on Distance " << std::endl;
571 some_node_is_removed =
true;
572 boundary_nodes_removed++;
574 if (propertyIdNode != principalModelPartId)
576 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
584 if (boundary_nodes_removed > 0 || inside_nodes_removed>0)
586 some_node_is_removed =
true;
591 std::cout <<
"boundary_nodes_removed " << boundary_nodes_removed << std::endl;
592 std::cout <<
"inside_nodes_removed " << inside_nodes_removed << std::endl;
594 return some_node_is_removed;
604 double safetyCoefficient2D = 0.5;
605 double elementVolume = eElement.Area();
606 SizeType numNodes = eElement.size();
608 const ProcessInfo &rCurrentProcessInfo = mrModelPart.GetProcessInfo();
609 const SizeType principalModelPartId = rCurrentProcessInfo[MAIN_MATERIAL_PROPERTY];
611 array_1d<double, 3> Edges(3, 0.0);
612 array_1d<SizeType, 3> FirstEdgeNode(3, 0);
613 array_1d<SizeType, 3> SecondEdgeNode(3, 0);
614 double wallLength = 0;
615 array_1d<double, 3> CoorDifference = eElement[1].Coordinates() - eElement[0].Coordinates();
616 double SquaredLength = CoorDifference[0] * CoorDifference[0] + CoorDifference[1] * CoorDifference[1];
617 Edges[0] = std::sqrt(SquaredLength);
618 FirstEdgeNode[0] = 0;
619 SecondEdgeNode[0] = 1;
620 if (eElement[0].
Is(RIGID) && eElement[1].
Is(RIGID))
622 wallLength = Edges[0];
624 bool inletElement =
false;
625 if (eElement[0].
Is(PFEMFlags::EULERIAN_INLET) || eElement[1].
Is(PFEMFlags::EULERIAN_INLET) || eElement[2].
Is(PFEMFlags::EULERIAN_INLET))
634 noalias(CoorDifference) = eElement[
i].Coordinates() - eElement[
j].Coordinates();
635 SquaredLength = CoorDifference[0] * CoorDifference[0] + CoorDifference[1] * CoorDifference[1];
637 Edges[
counter] = std::sqrt(SquaredLength);
640 if (eElement[
i].
Is(RIGID) && eElement[
j].
Is(RIGID) && Edges[
counter] > wallLength)
650 if (eElement[
i].
IsNot(RIGID) && eElement[
i].
IsNot(TO_ERASE) && eElement[
i].
IsNot(SOLID) && eElement[
i].
IsNot(ISOLATED))
652 double height = elementVolume * 2.0 / wallLength;
655 if (eElement[
i].
Is(FREE_SURFACE))
662 if ((nn)->
Is(RIGID) || (nn)->
Is(SOLID))
666 if ((nn)->
Is(FREE_SURFACE) && (nn)->
IsNot(RIGID) && (nn)->
IsNot(SOLID))
671 if ((countRigid + countFreeSurface) == neighb_nodes.size() && countRigid > 0)
673 safetyCoefficient2D = 0.25;
678 if (height < (0.5 * safetyCoefficient2D * wallLength))
680 eElement[
i].Set(TO_ERASE);
681 inside_nodes_removed++;
685 nodes_removed_inlet_zone++;
688 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
689 if (propertyIdNode != principalModelPartId)
691 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
697 bool longDamBreak =
false;
698 if (longDamBreak ==
true)
702 if (eElement[
i].
Is(FREE_SURFACE) && eElement[
i].
IsNot(RIGID))
705 GlobalPointersVector<Element> &neighb_elems = eElement[
i].GetValue(NEIGHBOUR_ELEMENTS);
706 GlobalPointersVector<Node> &neighb_nodes = eElement[
i].GetValue(NEIGHBOUR_NODES);
708 if (neighb_elems.size() < 2)
710 eElement[
i].Set(TO_ERASE);
711 std::cout <<
"erased an isolated element node" << std::endl;
712 inside_nodes_removed++;
715 nodes_removed_inlet_zone++;
718 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
719 if (propertyIdNode != principalModelPartId)
721 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
726 if (neighb_nodes.size() < 4)
730 if (neighb_nodes[
j].
IsNot(FREE_SURFACE) && neighb_nodes[
j].
IsNot(RIGID))
734 if (
j == (neighb_nodes.size() - 1))
736 eElement[
i].Set(TO_ERASE);
737 std::cout <<
"_________________________ erased an isolated element node" << std::endl;
738 inside_nodes_removed++;
742 nodes_removed_inlet_zone++;
745 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
746 if (propertyIdNode != principalModelPartId)
748 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
765 double safetyCoefficient3D = 0.6;
767 const ProcessInfo &rCurrentProcessInfo = mrModelPart.GetProcessInfo();
768 SizeType principalModelPartId = rCurrentProcessInfo[MAIN_MATERIAL_PROPERTY];
771 SizeType numNodes = eElement.size();
772 double elementVolume = eElement.Volume();
773 double criticalVolume = 0.1 * mrRemesh.
Refine->MeanVolume;
775 std::vector<array_1d<double, 3>> rigidNodesCoordinates;
776 std::vector<array_1d<double, 3>> rigidNodesNormals;
777 array_1d<double, 3> notRigidNodeCoordinates(3, 0.0);
779 rigidNodesCoordinates.resize(3);
780 rigidNodesNormals.resize(3);
781 double baricenterX = 0.25 * (eElement[0].X() + eElement[1].X() + eElement[2].X() + eElement[3].X());
782 double baricenterY = 0.25 * (eElement[0].Y() + eElement[1].Y() + eElement[2].Y() + eElement[3].Y());
783 double baricenterZ = 0.25 * (eElement[0].Z() + eElement[1].Z() + eElement[2].Z() + eElement[3].Z());
786 double currentTime = rCurrentProcessInfo[TIME];
787 for (
SizeType index = 0; index < numberOfRefiningBoxes; index++)
793 if (refiningBox ==
true && currentTime > initialTime && currentTime < finalTime)
800 if (baricenterX > RefiningBoxMinimumPoint[0] && baricenterX < RefiningBoxMaximumPoint[0] &&
801 baricenterY > RefiningBoxMinimumPoint[1] && baricenterY < RefiningBoxMaximumPoint[1] &&
802 baricenterZ > RefiningBoxMinimumPoint[2] && baricenterZ < RefiningBoxMaximumPoint[2])
804 criticalVolume = 0.01 * (std::pow(mrRemesh.
RefiningBoxMeshSize[index], 3) / (6.0 * std::sqrt(2)));
806 else if ((baricenterX < RefiningBoxMinimumPoint[0] && baricenterX > minExternalPoint[0]) || (baricenterX > RefiningBoxMaximumPoint[0] && baricenterX < maxExternalPoint[0]) ||
807 (baricenterY < RefiningBoxMinimumPoint[1] && baricenterY > minExternalPoint[1]) || (baricenterY > RefiningBoxMaximumPoint[1] && baricenterY < maxExternalPoint[1]) ||
808 (baricenterZ < RefiningBoxMinimumPoint[2] && baricenterZ > minExternalPoint[2]) || (baricenterZ > RefiningBoxMaximumPoint[2] && baricenterZ < maxExternalPoint[2]))
810 criticalVolume = 0.005 * (std::pow(meanMeshSize, 3) / (6.0 * std::sqrt(2)));
811 safetyCoefficient3D *= 0.5;
815 criticalVolume = 0.01 * (std::pow(meanMeshSize, 3) / (6.0 * std::sqrt(2)));
820 bool inletElement =
false;
821 if (eElement[0].
Is(PFEMFlags::EULERIAN_INLET) || eElement[1].Is(PFEMFlags::EULERIAN_INLET) || eElement[2].Is(PFEMFlags::EULERIAN_INLET) || eElement[3].Is(PFEMFlags::EULERIAN_INLET))
827 array_1d<double, 3> WallBaricenter =
ZeroVector(3);
831 if (eElement[
i].
Is(FREE_SURFACE))
837 if (eElement[
i].
Is(RIGID))
839 WallBaricenter += eElement[
i].Coordinates() / 3.0;
840 rigidNodesCoordinates[rigidNode] = eElement[
i].Coordinates();
841 rigidNodesNormals[rigidNode] = eElement[
i].FastGetSolutionStepValue(NORMAL);
846 notRigidNodeCoordinates = eElement[
i].Coordinates();
850 if (elementVolume < criticalVolume)
853 if (eElement[
i].
IsNot(RIGID) && eElement[
i].
IsNot(SOLID) && eElement[
i].
IsNot(TO_ERASE))
855 eElement[
i].Set(TO_ERASE);
857 std::cout <<
"erase this layer node because it may be potentially dangerous and pass through the solid contour" << std::endl;
858 inside_nodes_removed++;
862 nodes_removed_inlet_zone++;
865 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
866 if (propertyIdNode != principalModelPartId)
868 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
873 double wallNodeDistance = -1;
874 if (rigidNode == 3 && eElement[notRigidNodeId].
IsNot(TO_ERASE))
880 a1 = (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[0][1]) * (rigidNodesCoordinates[2][2] - rigidNodesCoordinates[0][2]) - (rigidNodesCoordinates[2][1] - rigidNodesCoordinates[0][1]) * (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[0][2]);
881 b1 = (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[0][2]) * (rigidNodesCoordinates[2][0] - rigidNodesCoordinates[0][0]) - (rigidNodesCoordinates[2][2] - rigidNodesCoordinates[0][2]) * (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[0][0]);
882 c1 = (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[0][0]) * (rigidNodesCoordinates[2][1] - rigidNodesCoordinates[0][1]) - (rigidNodesCoordinates[2][0] - rigidNodesCoordinates[0][0]) * (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[0][1]);
886 a2 = (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[0][1]) * (notRigidNodeCoordinates[2] - rigidNodesCoordinates[0][2]) - (notRigidNodeCoordinates[1] - rigidNodesCoordinates[0][1]) * (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[0][2]);
887 b2 = (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[0][2]) * (notRigidNodeCoordinates[0] - rigidNodesCoordinates[0][0]) - (notRigidNodeCoordinates[2] - rigidNodesCoordinates[0][2]) * (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[0][0]);
888 c2 = (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[0][0]) * (notRigidNodeCoordinates[1] - rigidNodesCoordinates[0][1]) - (notRigidNodeCoordinates[0] - rigidNodesCoordinates[0][0]) * (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[0][1]);
892 a3 = (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[2][1]) * (notRigidNodeCoordinates[2] - rigidNodesCoordinates[2][2]) - (notRigidNodeCoordinates[1] - rigidNodesCoordinates[2][1]) * (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[2][2]);
893 b3 = (rigidNodesCoordinates[1][2] - rigidNodesCoordinates[2][2]) * (notRigidNodeCoordinates[0] - rigidNodesCoordinates[2][0]) - (notRigidNodeCoordinates[2] - rigidNodesCoordinates[2][2]) * (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[2][0]);
894 c3 = (rigidNodesCoordinates[1][0] - rigidNodesCoordinates[2][0]) * (notRigidNodeCoordinates[1] - rigidNodesCoordinates[2][1]) - (notRigidNodeCoordinates[0] - rigidNodesCoordinates[2][0]) * (rigidNodesCoordinates[1][1] - rigidNodesCoordinates[2][1]);
898 a4 = (rigidNodesCoordinates[0][1] - rigidNodesCoordinates[2][1]) * (notRigidNodeCoordinates[2] - rigidNodesCoordinates[2][2]) - (notRigidNodeCoordinates[1] - rigidNodesCoordinates[2][1]) * (rigidNodesCoordinates[0][2] - rigidNodesCoordinates[2][2]);
899 b4 = (rigidNodesCoordinates[0][2] - rigidNodesCoordinates[2][2]) * (notRigidNodeCoordinates[0] - rigidNodesCoordinates[2][0]) - (notRigidNodeCoordinates[2] - rigidNodesCoordinates[2][2]) * (rigidNodesCoordinates[0][0] - rigidNodesCoordinates[2][0]);
900 c4 = (rigidNodesCoordinates[0][0] - rigidNodesCoordinates[2][0]) * (notRigidNodeCoordinates[1] - rigidNodesCoordinates[2][1]) - (notRigidNodeCoordinates[0] - rigidNodesCoordinates[2][0]) * (rigidNodesCoordinates[0][1] - rigidNodesCoordinates[2][1]);
903 double cosAngle12 = (a1 * a2 + b1 * b2 + c1 * c2) / (std::sqrt(std::pow(a1, 2) + std::pow(b1, 2) + std::pow(c1, 2)) * std::sqrt(std::pow(a2, 2) + std::pow(b2, 2) + std::pow(c2, 2)));
904 double cosAngle13 = (a1 * a3 + b1 * b3 + c1 * c3) / (std::sqrt(std::pow(a1, 2) + std::pow(b1, 2) + std::pow(c1, 2)) * std::sqrt(std::pow(a3, 2) + std::pow(b3, 2) + std::pow(c3, 2)));
905 double cosAngle14 = (a1 * a4 + b1 * b4 + c1 * c4) / (std::sqrt(std::pow(a1, 2) + std::pow(b1, 2) + std::pow(c1, 2)) * std::sqrt(std::pow(a4, 2) + std::pow(b4, 2) + std::pow(c4, 2)));
908 double cosAngleBetweenNormals01 = (rigidNodesNormals[0][0] * rigidNodesNormals[1][0] + rigidNodesNormals[0][1] * rigidNodesNormals[1][1]) /
909 (std::sqrt(std::pow(rigidNodesNormals[0][0], 2) + std::pow(rigidNodesNormals[0][1], 2)) *
910 std::sqrt(std::pow(rigidNodesNormals[1][0], 2) + std::pow(rigidNodesNormals[1][1], 2)));
911 double cosAngleBetweenNormals02 = (rigidNodesNormals[0][0] * rigidNodesNormals[2][0] + rigidNodesNormals[0][1] * rigidNodesNormals[2][1]) /
912 (std::sqrt(std::pow(rigidNodesNormals[0][0], 2) + std::pow(rigidNodesNormals[0][1], 2)) *
913 std::sqrt(std::pow(rigidNodesNormals[2][0], 2) + std::pow(rigidNodesNormals[2][1], 2)));
914 double cosAngleBetweenNormals12 = (rigidNodesNormals[1][0] * rigidNodesNormals[2][0] + rigidNodesNormals[1][1] * rigidNodesNormals[2][1]) /
915 (std::sqrt(std::pow(rigidNodesNormals[1][0], 2) + std::pow(rigidNodesNormals[1][1], 2)) *
916 std::sqrt(std::pow(rigidNodesNormals[2][0], 2) + std::pow(rigidNodesNormals[2][1], 2)));
918 if ((std::abs(cosAngle12) > 0.995 || std::abs(cosAngle13) > 0.995 || std::abs(cosAngle14) > 0.995) && (cosAngleBetweenNormals01 > 0.99 && cosAngleBetweenNormals02 > 0.99 && cosAngleBetweenNormals12 > 0.99))
920 eElement[notRigidNodeId].Set(TO_ERASE);
921 inside_nodes_removed++;
925 nodes_removed_inlet_zone++;
928 const SizeType propertyIdNode = eElement[notRigidNodeId].FastGetSolutionStepValue(PROPERTY_ID);
929 if (propertyIdNode != principalModelPartId)
931 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
935 double pwdDistance = 0.0f;
936 for (std::size_t
i = 0;
i < 3;
i++)
938 pwdDistance += std::pow(eElement[notRigidNodeId].Coordinates()[
i] - WallBaricenter[
i], 2);
940 wallNodeDistance = std::sqrt(pwdDistance);
943 bool longDamBreak =
false;
944 if (longDamBreak ==
true && freeSurfaceNodes > 2 && rigidNodes > 1)
948 if (eElement[
i].
Is(FREE_SURFACE) && eElement[
i].
IsNot(RIGID))
951 GlobalPointersVector<Element> &neighb_elems = eElement[
i].GetValue(NEIGHBOUR_ELEMENTS);
952 GlobalPointersVector<Node> &neighb_nodes = eElement[
i].GetValue(NEIGHBOUR_NODES);
954 if (neighb_elems.size() < 2)
956 eElement[
i].Set(TO_ERASE);
957 inside_nodes_removed++;
961 nodes_removed_inlet_zone++;
964 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
965 if (propertyIdNode != principalModelPartId)
967 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
972 if (neighb_nodes.size() < 10)
977 if (neighb_nodes[
j].
Is(FREE_SURFACE) && neighb_nodes[
j].
IsNot(RIGID))
979 freeSurfaceNodesNeigh++;
981 if (neighb_nodes[
j].
IsNot(FREE_SURFACE) && neighb_nodes[
j].
IsNot(RIGID) && neighb_nodes[
j].
IsNot(TO_ERASE))
985 if (
j == (neighb_nodes.size() - 1) && freeSurfaceNodesNeigh < 2)
987 eElement[
i].Set(TO_ERASE);
988 inside_nodes_removed++;
992 nodes_removed_inlet_zone++;
995 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
996 if (propertyIdNode != principalModelPartId)
998 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
1005 for (
SizeType j = 0;
j < neighb_nodes.size();
j++)
1007 if (neighb_nodes[
j].
IsNot(RIGID))
1011 if (
j == (neighb_nodes.size() - 1))
1013 eElement[
i].Set(TO_ERASE);
1014 inside_nodes_removed++;
1018 nodes_removed_inlet_zone++;
1021 const SizeType propertyIdNode = eElement[
i].FastGetSolutionStepValue(PROPERTY_ID);
1022 if (propertyIdNode != principalModelPartId)
1024 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
1034 array_1d<double, 6> Edges(6, 0.0);
1035 array_1d<SizeType, 6> FirstEdgeNode(6, 0);
1036 array_1d<SizeType, 6> SecondEdgeNode(6, 0);
1037 double wallLength = 0;
1040 array_1d<double, 3> CoorDifference = eElement[1].Coordinates() - eElement[0].Coordinates();
1042 double SquaredLength = CoorDifference[0] * CoorDifference[0] +
1043 CoorDifference[1] * CoorDifference[1] +
1044 CoorDifference[2] * CoorDifference[2];
1045 Edges[0] = std::sqrt(SquaredLength);
1046 double minimumLength = Edges[0] * 10.0;
1047 FirstEdgeNode[0] = 0;
1048 SecondEdgeNode[0] = 1;
1049 int erasableNode = -1;
1050 if (eElement[0].
Is(RIGID) && eElement[1].
Is(RIGID))
1052 wallLength = Edges[0];
1054 if ((eElement[0].
Is(RIGID) && eElement[1].
IsNot(RIGID)) ||
1055 (eElement[1].
Is(RIGID) && eElement[0].
IsNot(RIGID)))
1057 minimumLength = Edges[0];
1058 if (eElement[0].
IsNot(RIGID))
1072 noalias(CoorDifference) = eElement[
i].Coordinates() - eElement[
j].Coordinates();
1074 SquaredLength = CoorDifference[0] * CoorDifference[0] +
1075 CoorDifference[1] * CoorDifference[1] +
1076 CoorDifference[2] * CoorDifference[2];
1078 Edges[
counter] = std::sqrt(SquaredLength);
1081 if (eElement[
i].
Is(RIGID) && eElement[
j].
Is(RIGID) && (wallLength == 0 || Edges[
counter] > wallLength))
1085 if (((eElement[
i].
Is(RIGID) && eElement[
j].
IsNot(RIGID)) ||
1086 (eElement[
j].
Is(RIGID) && eElement[
i].
IsNot(RIGID))) &&
1087 eElement[
i].
IsNot(TO_ERASE) && eElement[
j].
IsNot(TO_ERASE) &&
1088 (Edges[
counter] < minimumLength || minimumLength == 0))
1090 minimumLength = Edges[
counter];
1091 if (eElement[
i].
IsNot(RIGID))
1106 if (eElement[
i].
IsNot(RIGID) && eElement[
i].
IsNot(TO_ERASE) && eElement[
i].
IsNot(SOLID) && eElement[
i].
IsNot(ISOLATED))
1109 if (eElement[
i].
Is(FREE_SURFACE))
1116 if ((nn)->
Is(RIGID) || (nn)->
Is(SOLID))
1120 if ((nn)->
Is(FREE_SURFACE) && (nn)->
IsNot(RIGID) && (nn)->
IsNot(SOLID))
1125 if ((countRigid + countFreeSurface) == neighb_nodes.size() && countRigid > 0)
1127 safetyCoefficient3D = 0.25;
1133 if ((minimumLength < (0.35 * wallLength) || (wallNodeDistance < (0.25 * wallLength) && wallNodeDistance > 0)) && erasableNode > -1)
1135 if (eElement[erasableNode].
IsNot(RIGID) && eElement[erasableNode].
IsNot(TO_ERASE) && eElement[erasableNode].
IsNot(SOLID) && eElement[erasableNode].
IsNot(ISOLATED) && eElement[erasableNode].
IsNot(FREE_SURFACE))
1137 eElement[erasableNode].Set(TO_ERASE);
1138 inside_nodes_removed++;
1142 nodes_removed_inlet_zone++;
1144 const SizeType propertyIdNode = eElement[erasableNode].FastGetSolutionStepValue(PROPERTY_ID);
1145 if (propertyIdNode != principalModelPartId)
1147 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
1158 const ProcessInfo &rCurrentProcessInfo = mrModelPart.GetProcessInfo();
1159 double currentTime = rCurrentProcessInfo[TIME];
1160 double deltaTime = rCurrentProcessInfo[DELTA_TIME];
1161 if (freeSurfaceNodes == 0 && currentTime > 2.0 * deltaTime)
1163 safetyCoefficient3D *= 0.7;
1165 if (currentTime < 2.0 * deltaTime)
1167 safetyCoefficient3D *= 1.05;
1170 if (((eElement[FirstEdgeNode[
i]].
Is(RIGID) && eElement[SecondEdgeNode[
i]].
IsNot(RIGID)) ||
1171 (eElement[SecondEdgeNode[
i]].
Is(RIGID) && eElement[FirstEdgeNode[
i]].
IsNot(RIGID))) &&
1172 eElement[FirstEdgeNode[
i]].
IsNot(TO_ERASE) &&
1173 eElement[SecondEdgeNode[
i]].
IsNot(TO_ERASE) &&
1174 Edges[
i] < safetyCoefficient3D * wallLength)
1176 if (eElement[FirstEdgeNode[
i]].
IsNot(RIGID) && eElement[FirstEdgeNode[
i]].
IsNot(SOLID) && eElement[FirstEdgeNode[
i]].
IsNot(TO_ERASE) && eElement[FirstEdgeNode[
i]].
IsNot(ISOLATED))
1179 eElement[FirstEdgeNode[
i]].Set(TO_ERASE);
1180 inside_nodes_removed++;
1184 nodes_removed_inlet_zone++;
1187 const SizeType propertyIdNode = eElement[FirstEdgeNode[
i]].FastGetSolutionStepValue(PROPERTY_ID);
1188 if (propertyIdNode != principalModelPartId)
1190 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
1193 else if (eElement[SecondEdgeNode[
i]].
IsNot(RIGID) && eElement[SecondEdgeNode[
i]].
IsNot(SOLID) && eElement[SecondEdgeNode[
i]].
IsNot(TO_ERASE) && eElement[SecondEdgeNode[
i]].
IsNot(ISOLATED))
1195 eElement[SecondEdgeNode[
i]].Set(TO_ERASE);
1196 inside_nodes_removed++;
1200 nodes_removed_inlet_zone++;
1203 const SizeType propertyIdNode = eElement[SecondEdgeNode[
i]].FastGetSolutionStepValue(PROPERTY_ID);
1204 if (propertyIdNode != principalModelPartId)
1206 mrRemesh.
Info->BalancePrincipalSecondaryPartsNodes += -1;
1215 bool CheckForMovingLayerNodes(Node &CheckedNode,
const double wallLength)
1218 const SizeType dimension = mrModelPart.ElementsBegin()->GetGeometry().WorkingSpaceDimension();
1221 bool eraseNode =
true;
1222 double maxSquaredDistance = 0;
1226 if ((nn)->
IsNot(RIGID) && (nn)->
IsNot(SOLID))
1229 array_1d<double, 3> CoorNeighDifference = CheckedNode.Coordinates() - (nn)->Coordinates();
1230 double squaredDistance = CoorNeighDifference[0] * CoorNeighDifference[0] + CoorNeighDifference[1] * CoorNeighDifference[1];
1233 squaredDistance += CoorNeighDifference[2] * CoorNeighDifference[2];
1235 if (squaredDistance > maxSquaredDistance)
1238 maxSquaredDistance = squaredDistance;
1244 double maxNeighDistance = std::sqrt(maxSquaredDistance);
1245 if (maxNeighDistance > wallLength && wallLength > 0)
1252 SizeType idMaster = CheckedNode.GetId();
1254 InterpolateFromTwoNodes(idMaster, idMaster, idSlave);
1255 std::vector<double> NewCoordinates(3);
1256 NewCoordinates[0] = (CheckedNode.X() + (
j)->
X()) * 0.5;
1257 NewCoordinates[1] = (CheckedNode.Y() + (
j)->
Y()) * 0.5;
1258 CheckedNode.X() = NewCoordinates[0];
1259 CheckedNode.Y() = NewCoordinates[1];
1260 CheckedNode.X0() = NewCoordinates[0];
1261 CheckedNode.Y0() = NewCoordinates[1];
1262 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_X, 0) = 0;
1263 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_Y, 0) = 0;
1264 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_X, 1) = 0;
1265 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_Y, 1) = 0;
1268 NewCoordinates[2] = (CheckedNode.Z() + (
j)->
Z()) * 0.5;
1269 CheckedNode.Z() = NewCoordinates[2];
1270 CheckedNode.Z0() = NewCoordinates[2];
1271 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_Z, 0) = 0;
1272 CheckedNode.FastGetSolutionStepValue(DISPLACEMENT_Z, 1) = 0;
1290 Node::Pointer MasterNode = mrModelPart.pGetNode(idMaster);
1291 Node::Pointer SlaveNode1 = mrModelPart.pGetNode(idSlave1);
1292 Node::Pointer SlaveNode2 = mrModelPart.pGetNode(idSlave2);
1294 VariablesList &rVariablesList = mrModelPart.GetNodalSolutionStepVariablesList();
1296 SizeType buffer_size = MasterNode->GetBufferSize();
1302 std::string variable_name = i_variable->Name();
1303 if (KratosComponents<Variable<double>>::
Has(variable_name))
1306 const Variable<double> &variable = KratosComponents<Variable<double>>::Get(variable_name);
1310 double &node_data = MasterNode->FastGetSolutionStepValue(variable,
step);
1312 double node0_data = SlaveNode1->FastGetSolutionStepValue(variable,
step);
1313 double node1_data = SlaveNode2->FastGetSolutionStepValue(variable,
step);
1315 node_data = (0.5 * node0_data + 0.5 * node1_data);
1318 else if (KratosComponents<Variable<array_1d<double, 3>>>::
Has(variable_name))
1321 const Variable<array_1d<double, 3>> &variable = KratosComponents<Variable<array_1d<double, 3>>>::Get(variable_name);
1325 array_1d<double, 3> &node_data = MasterNode->FastGetSolutionStepValue(variable,
step);
1326 const array_1d<double, 3> &node0_data = SlaveNode1->FastGetSolutionStepValue(variable,
step);
1327 const array_1d<double, 3> &node1_data = SlaveNode2->FastGetSolutionStepValue(variable,
step);
1328 noalias(node_data) = (0.5 * node0_data + 0.5 * node1_data);
1331 else if (KratosComponents<Variable<int>>::
Has(variable_name))
1336 else if (KratosComponents<Variable<bool>>::
Has(variable_name))
1341 else if (KratosComponents<Variable<Matrix>>::
Has(variable_name))
1344 const Variable<Matrix> &variable = KratosComponents<Variable<Matrix>>::Get(variable_name);
1348 Matrix &node_data = MasterNode->FastGetSolutionStepValue(variable,
step);
1350 Matrix &node0_data = SlaveNode1->FastGetSolutionStepValue(variable,
step);
1351 Matrix &node1_data = SlaveNode2->FastGetSolutionStepValue(variable,
step);
1353 if (node_data.size1() > 0 && node_data.size2())
1355 if (node_data.size1() == node0_data.size1() && node_data.size2() == node0_data.size2() &&
1356 node_data.size1() == node1_data.size1() && node_data.size2() == node1_data.size2())
1358 noalias(node_data) = (0.5 * node0_data + 0.5 * node1_data);
1363 else if (KratosComponents<Variable<Vector>>::
Has(variable_name))
1366 const Variable<Vector> &variable = KratosComponents<Variable<Vector>>::Get(variable_name);
1370 Vector &node_data = MasterNode->FastGetSolutionStepValue(variable,
step);
1372 Vector &node0_data = SlaveNode1->FastGetSolutionStepValue(variable,
step);
1373 Vector &node1_data = SlaveNode2->FastGetSolutionStepValue(variable,
step);
1375 if (node_data.size() > 0)
1377 if (node_data.size() == node0_data.size() &&
1378 node_data.size() == node1_data.size())
1380 noalias(node_data) = (0.5 * node0_data + 0.5 * node1_data);
1421 rOStream << std::endl;
Short class definition.
Definition: bucket.h:57
Base class for all Conditions.
Definition: condition.h:59
Geometry< NodeType > GeometryType
definition of the geometry type with given NodeType
Definition: element.h:83
bool Is(Flags const &rOther) const
Definition: flags.h:274
bool IsNot(Flags const &rOther) const
Definition: flags.h:291
Geometry base class.
Definition: geometry.h:71
PointerVector< TPointType > PointsArrayType
Definition: geometry.h:118
This class is a vector which stores global pointers.
Definition: global_pointers_vector.h:61
boost::indirect_iterator< typename TContainerType::iterator > iterator
Definition: global_pointers_vector.h:79
The base class for processes passed to the solution scheme.
Definition: mesher_process.hpp:37
Short class definition.
Definition: mesher_utilities.hpp:49
void DefineMeshSizeInTransitionZones2D(MeshingParameters &rMeshingVariables, double currentTime, array_1d< double, 3 > NodeCoordinates, double &meanMeshSize, bool &insideTransitionZone)
Definition: mesher_utilities.cpp:2153
void DefineMeshSizeInTransitionZones3D(MeshingParameters &rMeshingVariables, double currentTime, array_1d< double, 3 > NodeCoordinates, double &meanMeshSize, bool &insideTransitionZone)
Definition: mesher_utilities.cpp:2311
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
MeshType::NodesContainerType NodesContainerType
Nodes container. Which is a vector set of nodes with their Id's as key.
Definition: model_part.h:128
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
Remove Mesh Nodes Process for 2D and 3D cases.
Definition: remove_mesh_nodes_for_fluids_process.hpp:55
ConditionType::GeometryType GeometryType
Definition: remove_mesh_nodes_for_fluids_process.hpp:65
RemoveMeshNodesForFluidsProcess(ModelPart &rModelPart, MesherUtilities::MeshingParameters &rRemeshingParameters, int EchoLevel)
Default constructor.
Definition: remove_mesh_nodes_for_fluids_process.hpp:77
GlobalPointersVector< Element > ElementWeakPtrVectorType
Definition: remove_mesh_nodes_for_fluids_process.hpp:70
std::string Info() const override
Turn back information as a string.
Definition: remove_mesh_nodes_for_fluids_process.hpp:167
Tree< KDTreePartition< BucketType > > KdtreeType
Definition: remove_mesh_nodes_for_fluids_process.hpp:67
ModelPart::MeshType::GeometryType::PointsArrayType PointsArrayType
Definition: remove_mesh_nodes_for_fluids_process.hpp:68
std::size_t SizeType
Definition: remove_mesh_nodes_for_fluids_process.hpp:71
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: remove_mesh_nodes_for_fluids_process.hpp:173
virtual ~RemoveMeshNodesForFluidsProcess()
Destructor.
Definition: remove_mesh_nodes_for_fluids_process.hpp:89
GlobalPointersVector< Node > NodeWeakPtrVectorType
Definition: remove_mesh_nodes_for_fluids_process.hpp:69
KRATOS_CLASS_POINTER_DEFINITION(RemoveMeshNodesForFluidsProcess)
Pointer definition of Process.
ModelPart::ConditionType ConditionType
Definition: remove_mesh_nodes_for_fluids_process.hpp:63
void Execute() override
Execute method is used to execute the Process algorithms.
Definition: remove_mesh_nodes_for_fluids_process.hpp:106
Bucket< 3, Node, std::vector< Node::Pointer >, Node::Pointer, std::vector< Node::Pointer >::iterator, std::vector< double >::iterator > BucketType
Definition: remove_mesh_nodes_for_fluids_process.hpp:66
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: remove_mesh_nodes_for_fluids_process.hpp:179
ModelPart::PropertiesType PropertiesType
Definition: remove_mesh_nodes_for_fluids_process.hpp:64
void operator()()
This operator is provided to call the process as a function and simply calls the Execute method.
Definition: remove_mesh_nodes_for_fluids_process.hpp:96
A generic tree data structure for spatial partitioning.
Definition: tree.h:190
boost::indirect_iterator< VariablesContainerType::const_iterator > const_iterator
Definition: variables_list.h:77
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_INFO(label)
Definition: logger.h:250
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
bool Has(const std::string &ModelerName)
Checks if the modeler is registered.
Definition: modeler_factory.cpp:24
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
Internals::Matrix< double, AMatrix::dynamic, AMatrix::dynamic > Matrix
Definition: amatrix_interface.h:470
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
ProcessInfo
Definition: edgebased_PureConvection.py:116
int step
Definition: face_heat.py:88
int dimension
Definition: isotropic_damage_automatic_differentiation.py:123
float radius
Definition: mesh_to_mdpa_converter.py:18
int k
Definition: quadrature.py:595
int j
Definition: quadrature.py:648
int counter
Definition: script_THERMAL_CORRECT.py:218
integer i
Definition: TensorModule.f:17
Definition: mesher_utilities.hpp:631
MeshingInfoParameters::Pointer Info
Definition: mesher_utilities.hpp:681
RefiningParameters::Pointer Refine
Definition: mesher_utilities.hpp:684
std::vector< array_1d< double, 3 > > RefiningBoxShiftedMaximumPoint
Definition: mesher_utilities.hpp:713
std::vector< double > RefiningBoxMeshSize
Definition: mesher_utilities.hpp:707
double BoundingBoxInitialTime
Definition: mesher_utilities.hpp:699
std::vector< double > RefiningBoxFinalTime
Definition: mesher_utilities.hpp:706
bool UseBoundingBox
Definition: mesher_utilities.hpp:698
double BoundingBoxFinalTime
Definition: mesher_utilities.hpp:700
std::vector< bool > UseRefiningBox
Definition: mesher_utilities.hpp:704
array_1d< double, 3 > BoundingBoxUpperPoint
Definition: mesher_utilities.hpp:702
array_1d< double, 3 > BoundingBoxLowerPoint
Definition: mesher_utilities.hpp:701
Flags ExecutionOptions
Definition: mesher_utilities.hpp:648
std::vector< array_1d< double, 3 > > RefiningBoxMinimumPoint
Definition: mesher_utilities.hpp:709
std::vector< double > RefiningBoxInitialTime
Definition: mesher_utilities.hpp:705
std::vector< array_1d< double, 3 > > RefiningBoxMaximumPoint
Definition: mesher_utilities.hpp:710
std::vector< array_1d< double, 3 > > RefiningBoxShiftedMinimumPoint
Definition: mesher_utilities.hpp:712