14 #if !defined(KRATOS_CUTTING_UTILITY)
15 #define KRATOS_CUTTING_UTILITY
28 #include <boost/numeric/ublas/matrix.hpp>
29 #include <boost/numeric/ublas/vector.hpp>
30 #include <boost/numeric/ublas/banded.hpp>
31 #include <boost/numeric/ublas/matrix_sparse.hpp>
32 #include <boost/numeric/ublas/triangular.hpp>
33 #include <boost/numeric/ublas/operation.hpp>
34 #include <boost/numeric/ublas/lu.hpp>
102 ModelPart& this_model_part = mr_model_part;
106 double dist_node_neigh;
109 smallest_edge = 1000000000000000000000000000.0;
113 for(
unsigned int i = 0;
i < it->GetGeometry().size() ;
i++)
115 node_coord[0] = geom[
i].X();
116 node_coord[1] = geom[
i].Y();
117 node_coord[2] = geom[
i].Z();
118 for(
unsigned int j = 0;
j < it->GetGeometry().size() ;
j++)
120 neigh_coord[0] = geom[
j].X();
121 neigh_coord[1] = geom[
j].Y();
122 neigh_coord[2] = geom[
j].Z();
123 dist_node_neigh = sqrt( pow((node_coord[0]- neigh_coord[0]),2) + pow((node_coord[1]- neigh_coord[1]),2) + pow((node_coord[2]- neigh_coord[2]),2) ) ;
124 if ((dist_node_neigh<smallest_edge) && (
i!=
j)) smallest_edge=dist_node_neigh;
146 KRATOS_WATCH(
"Generating Cutting plane with the following data:")
153 KRATOS_ERROR <<
"The cut model part was not initialized. "
154 "Please call AddVariablesToCutModelPart before GenerateCut."
160 boost::numeric::ublas::compressed_matrix<int> Coord;
161 ModelPart& this_model_part = mr_model_part;
162 ModelPart& new_model_part = mr_new_model_part;
165 int number_of_triangles = 0;
166 double tolerance = tolerance_factor*smallest_edge;
171 FirstLoop(this_model_part, Coord, versor, Xp, number_of_triangles, Elems_In_Plane, tolerance);
177 GenerateElements (this_model_part, new_model_part, Elems_In_Plane, Coord, versor, plane_number);
198 ModelPart& this_model_part = mr_model_part;
200 ModelPart& new_model_part = mr_new_model_part;
202 std::cout <<
"Adding Skin Conditions to the new model part, added in layer:" << std::endl;
206 int number_of_triangles = 0;
207 int number_of_nodes = 0;
208 int number_of_previous_nodes = 0;
209 int number_of_conditions = 0;
213 KRATOS_ERROR <<
"The cut model part was not initialized. "
214 "Please call AddVariablesToCutModelPart before AddSkinConditions."
224 number_of_conditions = cond_it_end - cond_it_begin;
226 if (new_model_part.
Nodes().size()!=0)
231 number_of_previous_nodes=(it_end_node_new-it_begin_node_new);
232 number_of_triangles=cond_it_end_new - cond_it_begin_new ;
239 std::cout <<
"First Cutting Plane" << std::endl;
243 if (number_of_conditions!=0)
245 for (
unsigned int index=0 ; index != this_model_part.
Nodes().size() ; ++index) Condition_Nodes[index]=0;
250 for(
unsigned int i = 0;
i < i_condition->GetGeometry().size() ;
i++)
253 int position = this_model_part.
Nodes().find(geom[
i].Id()) - it_begin_node_old;
254 Condition_Nodes[position] = -1 ;
259 for (
unsigned int index=0 ; index != this_model_part.
Nodes().size() ; ++index)
261 if (Condition_Nodes[index]==-1)
264 Condition_Nodes[index] = number_of_nodes + number_of_previous_nodes;
266 Node ::Pointer pnode = new_model_part.
CreateNewNode(number_of_nodes+number_of_previous_nodes, it_node->X(), it_node->Y(), it_node->Z());
267 pnode->SetBufferSize(this_model_part.
NodesBegin()->GetBufferSize());
268 pnode->GetValue(FATHER_NODES).resize(0);
269 pnode->GetValue(FATHER_NODES).push_back( Node::WeakPointer( *it_node.base() ) );
270 pnode->GetValue(FATHER_NODES).push_back( Node::WeakPointer( *it_node.base() ) );
271 pnode->
GetValue(WEIGHT_FATHER_NODES) = 1.0;
273 pnode->X0() = it_node->X0();
274 pnode->Y0() = it_node->Y0();
275 pnode->Z0() = it_node->Z0();
287 for(
unsigned int i = 0;
i < i_condition->GetGeometry().size() ;
i++)
289 int position = this_model_part.
Nodes().find(geom[
i].Id()) - it_begin_node_old;
290 triangle_nodes[
i]=Condition_Nodes[position];
293 new_model_part.
Nodes()(triangle_nodes[0]),
294 new_model_part.
Nodes()(triangle_nodes[1]),
295 new_model_part.
Nodes()(triangle_nodes[2])
297 Condition::Pointer p_condition = rReferenceCondition.
Create(number_of_triangles+1, geometry, properties);
298 new_model_part.
Conditions().push_back(p_condition);
299 ++number_of_triangles;
332 Coord.resize(pNodes.
size(), pNodes.
size());
336 std::vector<unsigned int> aux(10000);
340 int index_i =
i->Id() - 1;
342 Coord.push_back(index_i, index_i, -1);
346 inode != neighb_nodes.
end(); inode++)
348 int index_j = inode->Id() - 1;
349 if (index_j > index_i)
355 std::sort(aux.begin(), aux.begin() +
active);
357 for (
unsigned int k = 0;
k <
active;
k++)
359 Coord.push_back(index_i, aux[
k], -1);
368 int number_of_triangles,
DenseVector<int>& Elems_In_Plane,
double tolerance)
378 double dist_node_point;
379 double dist_neigh_point;
385 unsigned int exact_nodes=0;
387 number_of_triangles = 0;
388 int current_element= 0;
390 int number_of_cuts= 0;
398 for(
unsigned int i = 0;
i < it->GetGeometry().size() ;
i++)
401 node_coord[0] = geom[
i].X();
402 node_coord[1] = geom[
i].Y();
403 node_coord[2] = geom[
i].Z();
404 noalias(temp_dist) = node_coord;
406 dist_node_point =
inner_prod(temp_dist,versor);
407 for(
unsigned int j = 0;
j < it->GetGeometry().size() ;
j++)
411 neigh_coord[0] = geom[
j].X();
412 neigh_coord[1] = geom[
j].Y();
413 neigh_coord[2] = geom[
j].Z();
414 noalias(temp_dist) = neigh_coord;
416 dist_neigh_point =
inner_prod(temp_dist,versor);
419 bool isovernode=
false;
421 if (fabs(dist_node_point) < (tolerance))
423 int index_i = geom[
i].
Id() -1 ;
424 Coord(index_i, index_i) = -2;
428 list_matching_nodes[
i]= geom[
i].
Id();
432 if ((dist_node_point*dist_neigh_point) < 0.0 && isovernode==
false && (fabs(dist_neigh_point)>(tolerance)))
434 int index_i = geom[
i].
Id() - 1;
435 int index_j = geom[
j].
Id() - 1;
436 if (index_j > index_i) Coord(index_i, index_j) = -2;
437 else Coord(index_j, index_i) = -2;
445 Elems_In_Plane[current_element-1] = 0 ;
448 if (number_of_cuts == 6)
450 number_of_triangles +=1;
451 Elems_In_Plane[current_element-1] = 1 ;
453 else if (number_of_cuts == 8 )
455 number_of_triangles +=2;
456 Elems_In_Plane[ current_element-1] = 2 ;
461 bool found_fourth_node=
true;
462 for(
unsigned int i = 0;
i < it->GetGeometry().size() ;
i++)
464 found_fourth_node=
true;
465 for (
unsigned int aux_index=0; aux_index!=4; ++aux_index)
467 if (geom[
i].Id()==list_matching_nodes[aux_index] && list_matching_nodes[aux_index]!=0)
469 found_fourth_node=
false;
473 if (found_fourth_node==
true)
475 node_coord[0] = geom[
i].X();
476 node_coord[1] = geom[
i].Y();
477 node_coord[2] = geom[
i].Z();
484 noalias(temp_dist) = node_coord;
486 dist_node_point =
inner_prod(temp_dist,versor);
487 if (dist_node_point>=0.0)
489 if (number_of_cuts == 6)
491 number_of_triangles +=1;
492 Elems_In_Plane[current_element-1] = 1 ;
494 else if (number_of_cuts == 8 )
496 number_of_triangles +=2;
497 Elems_In_Plane[ current_element-1] = 2 ;
514 unsigned int number_of_new_nodes = 0;
516 typedef boost::numeric::ublas::compressed_matrix<int>::iterator1 i1_t;
517 typedef boost::numeric::ublas::compressed_matrix<int>::iterator2 i2_t;
520 for (i1_t i1 = Coord.begin1(); i1 != Coord.end1(); ++i1)
522 for (i2_t i2 = i1.begin(); i2 != i1.end(); ++i2)
524 if (Coord(i2.index1(), i2.index2()) == -2)
526 number_of_new_nodes++;
532 List_New_Nodes.
resize(number_of_new_nodes);
534 if (new_model_part.
Nodes().size()!=0)
539 List_New_Nodes[0]=(it_end_node_new-it_begin_node_new)+1;
541 first_cutting_plane =
false;
545 if (List_New_Nodes.size() > 0)
549 first_cutting_plane =
true;
553 for (
unsigned int i = 1;
i < number_of_new_nodes;
i++)
555 List_New_Nodes[
i] = List_New_Nodes[0] +
i;
559 Position_Node.resize(number_of_new_nodes);
560 unsigned int index = 0;
561 for (i1_t i1 = Coord.begin1(); i1 != Coord.end1(); ++i1)
563 for (i2_t i2 = i1.begin(); i2 != i1.end(); ++i2)
565 if (Coord(i2.index1(), i2.index2()) == -2)
567 Coord(i2.index1(), i2.index2()) = List_New_Nodes[index];
568 Position_Node[index][0] = i2.index1() + 1;
569 Position_Node[index][1] = i2.index2() + 1;
591 double dist_node_point;
594 double dist_node_intersect;
597 Coordinate_New_Node.
resize(Position_Node.size());
601 for (
unsigned int i = 0;
i < Position_Node.size();
i++)
605 const int& node_i = Position_Node[
i][0];
606 const int& node_j = Position_Node[
i][1];
607 auto it_node1 = this_model_part.
Nodes()(node_i);
609 noalias(Coord_Node_1) = it_node1->Coordinates();
610 auto it_node2 = this_model_part.
Nodes()(node_j);
612 noalias(Coord_Node_2) = it_node2->Coordinates();
615 noalias(temp_dist) = Coord_Node_1;
617 dist_node_point =
inner_prod(temp_dist,versor);
618 dist_node_point = fabs (dist_node_point);
620 Xp_1 = Xp - Coord_Node_1;
621 Xp_2 = Coord_Node_2 - Coord_Node_1;
624 if (dist_node_point<=(tolerance)) dist_node_intersect=0.0;
625 weight = (1.0 - dist_node_intersect) ;
628 if (weight > 1.05)
KRATOS_WATCH(
"**** something's wrong! weight higher than 1! ****");
630 for (
unsigned int index=0; index!=3; ++index)
631 if (Position_Node[
i][0]!=Position_Node[
i][1])
632 Coordinate_New_Node[
i][index] = Coord_Node_1[index] + (dist_node_intersect) * (Coord_Node_2[index] - Coord_Node_1[index]);
634 Coordinate_New_Node[
i][index] = Coord_Node_1[index];
636 temp_dist= Coordinate_New_Node[
i] - Xp;
637 dist_node_point =
inner_prod(versor,temp_dist);
639 Node ::Pointer pnode = new_model_part.
CreateNewNode(List_New_Nodes[
i], Coordinate_New_Node[
i][0], Coordinate_New_Node[
i][1], Coordinate_New_Node[
i][2]);
640 pnode->SetBufferSize(this_model_part.
NodesBegin()->GetBufferSize());
645 pnode->GetValue(FATHER_NODES).resize(0);
646 pnode->GetValue(FATHER_NODES).push_back( Node::WeakPointer( it_node1 ) );
647 pnode->GetValue(FATHER_NODES).push_back( Node::WeakPointer( it_node2 ) );
648 pnode->
GetValue(WEIGHT_FATHER_NODES) = weight;
650 pnode->X0() = weight * (it_node1->X0()) + (1.0 - weight) * it_node2->X0();
651 pnode->Y0() = weight * (it_node1->Y0()) + (1.0 - weight) * it_node2->Y0();
652 pnode->Z0() = weight * (it_node1->Z0()) + (1.0 - weight) * it_node2->Z0();
670 unsigned int temp_int;
671 unsigned int first_element=0;
681 if (first_cutting_plane ==
false)
683 first_element=(it_end_new-it_begin_new);
696 int number_of_triangles = 0;
697 int current_element= 0;
698 unsigned int triangle_nodes= 0;
699 bool new_node = false ;
702 for (
unsigned int k=0;
k!=4; ++
k)
704 TriangleNodesArray[
k] = -1;
713 if (Elems_In_Plane[current_element-1] == 1 )
716 for(
unsigned int i = 0;
i < it->GetGeometry().size() ;
i++)
719 for(
unsigned int j = 0;
j < it->GetGeometry().size() ;
j++)
722 int index_i = geom[
i].
Id() - 1;
723 int index_j = geom[
j].
Id() - 1;
724 for (
unsigned int l=0;
l!=3; ++
l)
726 if(TriangleNodesArray[
l]==Coord(index_i, index_j)
727 || Coord(index_i, index_j) <1 )
731 if (new_node && index_i<=index_j)
733 TriangleNodesArray[triangle_nodes]=Coord(index_i, index_j) ;
736 if (triangle_nodes ==3)
break;
738 if (triangle_nodes ==3)
break;
742 noalias(temp_vector1) = it_node1->Coordinates();
744 it_node1 = new_model_part.
Nodes().find(TriangleNodesArray[1]);
745 noalias(temp_vector2) = it_node1->Coordinates();
747 it_node1 = new_model_part.
Nodes().find(TriangleNodesArray[2]);
748 noalias(temp_vector3) = it_node1->Coordinates();
750 temp_vector3 -=temp_vector1;
751 temp_vector2 -=temp_vector1;
758 temp_int= TriangleNodesArray[2];
759 TriangleNodesArray[2] = TriangleNodesArray[1];
760 TriangleNodesArray[1] = temp_int;
765 new_model_part.
Nodes()(TriangleNodesArray[0]),
766 new_model_part.
Nodes()(TriangleNodesArray[1]),
767 new_model_part.
Nodes()(TriangleNodesArray[2])
770 Condition::Pointer p_condition = rReferenceCondition.
Create(number_of_triangles+1+first_element, geom, properties);
771 new_model_part.
Conditions().push_back(p_condition);
772 ++number_of_triangles;
779 if (Elems_In_Plane[current_element-1] == 2)
784 for(
unsigned int i = 0;
i < it->GetGeometry().size() ;
i++)
787 for(
unsigned int j = 0;
j < it->GetGeometry().size() ;
j++)
790 int index_i = geom[
i].
Id() - 1;
791 int index_j = geom[
j].
Id() - 1;
792 for (
unsigned int l=0;
l!=3; ++
l)
794 if(TriangleNodesArray[
l]==Coord(index_i, index_j)
795 || Coord(index_i, index_j) < 1 )
800 if (new_node && index_i<index_j)
802 TriangleNodesArray[triangle_nodes]=Coord(index_i, index_j) ;
805 if (triangle_nodes ==4)
break;
807 if (triangle_nodes ==4)
break;
817 noalias(temp_vector1) = it_node1->Coordinates();
821 for (
int iii=1; iii!=4; ++iii)
824 it_node1=new_model_part.
Nodes().find(TriangleNodesArray[iii]);
825 noalias(temp_vector2) = it_node1->Coordinates();
826 noalias(temp_vector3) = temp_vector2 - temp_vector1;
847 it_node1=new_model_part.
Nodes().find(TriangleNodesArray[jjj]);
848 noalias(temp_vector2) = it_node1->Coordinates();
850 it_node1=new_model_part.
Nodes().find(TriangleNodesArray[kkk]);
851 noalias(temp_vector3) = it_node1->Coordinates();
853 noalias(temp_vector2) -=temp_vector1;
854 noalias(temp_vector3) -=temp_vector1;
862 nodes_for_2triang[0] = TriangleNodesArray[0] ;
863 nodes_for_2triang[1] = TriangleNodesArray[jjj];
864 nodes_for_2triang[2] = TriangleNodesArray[iii];
865 nodes_for_2triang[3] = TriangleNodesArray[iii];
866 nodes_for_2triang[4] = TriangleNodesArray[kkk];
867 nodes_for_2triang[5] = TriangleNodesArray[0];
879 for (
int index=0 ; index !=2 ; ++index)
882 it_node1 = new_model_part.
Nodes().find(nodes_for_2triang[index*3+0]);
883 noalias(temp_vector1) = it_node1->Coordinates();
885 it_node1 = new_model_part.
Nodes().find(nodes_for_2triang[index*3+1]);
886 noalias(temp_vector2) = it_node1->Coordinates();
888 it_node1 = new_model_part.
Nodes().find(nodes_for_2triang[index*3+2]);
889 noalias(temp_vector3) = it_node1->Coordinates();
891 temp_vector3 -=temp_vector1;
892 temp_vector2 -=temp_vector1;
897 temp_int= nodes_for_2triang[index*3+2];
898 nodes_for_2triang[index*3+2] = nodes_for_2triang[index*3+1];
899 nodes_for_2triang[index*3+1] = temp_int;
903 new_model_part.
Nodes()(nodes_for_2triang[index*3+0]),
904 new_model_part.
Nodes()(nodes_for_2triang[index*3+1]),
905 new_model_part.
Nodes()(nodes_for_2triang[index*3+2])
908 Condition::Pointer p_condition = rReferenceCondition.
Create(number_of_triangles+1+first_element, geom, properties);
910 new_model_part.
Conditions().push_back(p_condition);
911 ++number_of_triangles;
938 double* node0_data = it->GetValue(FATHER_NODES)[0].SolutionStepData().Data(0);
939 double* node1_data = it->GetValue(FATHER_NODES)[1].SolutionStepData().Data(0);
940 double weight = it->GetValue(WEIGHT_FATHER_NODES);
941 double* step_data = (it)->SolutionStepData().Data(0);
944 for(
int j= 0;
j< step_data_size;
j++)
946 step_data[
j] = weight*node0_data[
j] + (1.0-weight)*node1_data[
j];
960 double smallest_edge;
961 bool first_cutting_plane;
Base class for all Conditions.
Definition: condition.h:59
virtual Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const
It creates a new condition pointer.
Definition: condition.h:205
CUTTING UTILITY.
Definition: cutting_utility.h:65
void Calculate_Coordinate_And_Insert_New_Nodes_Mod(ModelPart &this_model_part, ModelPart &new_model_part, const DenseVector< array_1d< int, 2 > > &Position_Node, const DenseVector< int > &List_New_Nodes, const array_1d< double, 3 > &versor, const array_1d< double, 3 > &Xp, double tolerance)
************************************************************************************************
Definition: cutting_utility.h:579
PointVector::iterator PointIterator
Definition: cutting_utility.h:79
ModelPart::ElementsContainerType ElementsArrayType
Definition: cutting_utility.h:71
DenseVector< Vector > Vector_Order_Tensor
Definition: cutting_utility.h:74
std::vector< PointType::Pointer > PointVector
Definition: cutting_utility.h:78
void GenerateCut(ModelPart &mr_model_part, ModelPart &mr_new_model_part, const array_1d< double, 3 > &versor, const array_1d< double, 3 > &Xp, int plane_number, double tolerance_factor)
This function Creates cutting planes by creating nodes and conditions (to define the conectivities) i...
Definition: cutting_utility.h:144
void FindSmallestEdge(ModelPart &mr_model_part)
This function Creates cutting planes by creating nodes and conditions (to define the conectivities) i...
Definition: cutting_utility.h:100
void FirstLoop(ModelPart &this_model_part, boost::numeric::ublas::compressed_matrix< int > &Coord, const array_1d< double, 3 > &versor, const array_1d< double, 3 > &Xp, int number_of_triangles, DenseVector< int > &Elems_In_Plane, double tolerance)
Definition: cutting_utility.h:367
void Create_List_Of_New_Nodes_Mod(ModelPart &this_model_part, ModelPart &new_model_part, boost::numeric::ublas::compressed_matrix< int > &Coord, DenseVector< int > &List_New_Nodes, DenseVector< array_1d< int, 2 > > &Position_Node)
************************************************************************************************
Definition: cutting_utility.h:510
void CSR_Row_Matrix_Mod(ModelPart &this_model_part, boost::numeric::ublas::compressed_matrix< int > &Coord)
Definition: cutting_utility.h:329
Node ::Pointer PointPointerType
Definition: cutting_utility.h:77
void AddVariablesToCutModelPart(const ModelPart &rModelPart, ModelPart &rNewModelPart) const
Initialize the solution step data container for the cut model part.
Definition: cutting_utility.h:312
DenseVector< Matrix > Matrix_Order_Tensor
Definition: cutting_utility.h:73
Node PointType
Definition: cutting_utility.h:76
void GenerateElements(ModelPart &this_model_part, ModelPart &new_model_part, DenseVector< int > Elems_In_Plane, boost::numeric::ublas::compressed_matrix< int > &Coord, const array_1d< double, 3 > &versor, int plane_number)
**********************************************************************************
Definition: cutting_utility.h:659
virtual ~CuttingUtility()
Destructor.
Definition: cutting_utility.h:92
CuttingUtility()
Default constructor.
Definition: cutting_utility.h:86
void UpdateCutData(ModelPart &new_model_part, ModelPart &old_model_part)
UPDATECUTDATA: THIS FUNCTION UPDATES THE DATA OF THE NEW MODEL PART READING FROM THE DATA OF THE FATH...
Definition: cutting_utility.h:930
DenseVector< Vector_Order_Tensor > Node_Vector_Order_Tensor
Definition: cutting_utility.h:75
ModelPart::ConditionsContainerType ConditionsArrayType
Definition: cutting_utility.h:72
void AddSkinConditions(ModelPart &mr_model_part, ModelPart &mr_new_model_part, int plane_number)
ADDSKINCONDITIONS: THIS FUNCTION ADDS TO THE NEW MODEL PART THE DATA OF THE CONDITIONS BELONGING TO T...
Definition: cutting_utility.h:196
ModelPart::NodesContainerType NodesArrayType
Definition: cutting_utility.h:70
Geometry base class.
Definition: geometry.h:71
IndexType const & Id() const
Id of this Geometry.
Definition: geometry.h:964
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
iterator begin()
Definition: global_pointers_vector.h:221
iterator end()
Definition: global_pointers_vector.h:229
Definition: amatrix_interface.h:41
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
static const TComponentType & Get(const std::string &rName)
Retrieves a component with the specified name.
Definition: kratos_components.h:114
static T CrossProduct(const T &a, const T &b)
Performs the vector product of the two input vectors a,b.
Definition: math_utils.h:762
PropertiesType::Pointer pGetProperties(IndexType PropertiesId)
Definition: mesh.h:394
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
NodeType::Pointer CreateNewNode(int Id, double x, double y, double z, VariablesList::Pointer pNewVariablesList, IndexType ThisIndex=0)
Definition: model_part.cpp:270
SizeType GetNodalSolutionStepDataSize()
Definition: model_part.h:571
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
ConditionsContainerType & Conditions(IndexType ThisIndex=0)
Definition: model_part.h:1381
void AddNodalSolutionStepVariable(VariableData const &ThisVariable)
Definition: model_part.h:532
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
MeshType & GetMesh(IndexType ThisIndex=0)
Definition: model_part.h:1791
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
VariablesList & GetNodalSolutionStepVariablesList()
Definition: model_part.h:549
This class defines the node.
Definition: node.h:65
A sorted associative container similar to an STL set, but uses a vector to store pointers to its data...
Definition: pointer_vector_set.h:72
ptr_iterator ptr_end()
Returns an iterator pointing to the end of the underlying data container.
Definition: pointer_vector_set.h:404
boost::indirect_iterator< typename TContainerType::iterator > iterator
Definition: pointer_vector_set.h:95
ptr_iterator ptr_begin()
Returns an iterator pointing to the beginning of the underlying data container.
Definition: pointer_vector_set.h:386
size_type size() const
Returns the number of elements in the container.
Definition: pointer_vector_set.h:502
iterator begin()
Returns an iterator pointing to the beginning of the container.
Definition: pointer_vector_set.h:278
iterator end()
Returns an iterator pointing to the end of the container.
Definition: pointer_vector_set.h:314
A three node 3D triangle geometry with linear shape functions.
Definition: triangle_3d_3.h:77
bool Has(const VariableData &rThisVariable) const
Definition: variables_list.h:372
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_WATCH(variable)
Definition: define.h:806
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_ERROR
Definition: exception.h:161
Parameters GetValue(Parameters &rParameters, const std::string &rEntry)
Definition: add_kratos_parameters_to_python.cpp:53
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
active
Definition: generate_frictionless_components_mortar_condition.py:175
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
integer l
Definition: TensorModule.f:17