11 #if !defined(KRATOS_REFINE_CONDITIONS_IN_CONTACT_MESHER_PROCESS_H_INCLUDED )
12 #define KRATOS_REFINE_CONDITIONS_IN_CONTACT_MESHER_PROCESS_H_INCLUDED
114 std::vector<SpatialBoundingBox::Pointer> mRigidWalls,
150 std::cout<<
" [ REFINE BOUNDARY : "<<std::endl;
162 if( (
mrRemesh.
Refine->RefiningOptions.Is(MesherUtilities::REFINE_INSERT_NODES) ||
mrRemesh.
Refine->RefiningOptions.Is(MesherUtilities::REFINE_ADD_NODES)) &&
mrRemesh.
Refine->RefiningOptions.Is(MesherUtilities::REFINE_BOUNDARY) )
165 std::vector<Point > list_of_points;
166 std::vector<Condition*> list_of_conditions;
172 list_of_points.reserve(conditions_size);
173 list_of_conditions.reserve(conditions_size);
175 RefineContactBoundary(
mrModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
177 RefineOtherBoundary(
mrModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
179 BuildNewConditions(
mrModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
189 list_of_points.reserve(conditions_size);
190 list_of_conditions.reserve(conditions_size);
192 RefineContactBoundary(rModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
194 RefineOtherBoundary(rModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
196 BuildNewConditions(rModelPart, list_of_points, list_of_conditions, LocalRefineInfo);
198 CleanConditionsAndFlags(rModelPart);
211 std::cout<<
" [ CONDITIONS ( inserted : "<<
mrRemesh.
Info->InsertedBoundaryConditions<<
" ) ]"<<std::endl;
212 std::cout<<
" [ NODES ( inserted : "<<
mrRemesh.
Info->InsertedBoundaryNodes<<
" ) ]"<<std::endl;
216 std::cout<<
" REFINE BOUNDARY ]; "<<std::endl;
238 std::string
Info()
const override
240 return "RefineConditionsInContactMesherProcess";
246 rOStream <<
"RefineConditionsInContactMesherProcess";
270 std::vector<SpatialBoundingBox::Pointer> mRigidWalls;
279 void CleanConditionsAndFlags(
ModelPart& rModelPart)
287 TemporaryConditions.swap(rModelPart.
Conditions());
289 for(ModelPart::ConditionsContainerType::iterator ic = TemporaryConditions.begin(); ic!= TemporaryConditions.end(); ic++)
292 for(
unsigned int i=0;
i<rGeometry.
size(); ++
i)
294 rGeometry[
i].Reset(TO_SPLIT);
297 if(ic->IsNot(TO_ERASE)){
314 void BuildNewConditions( ModelPart& rModelPart, std::vector<Point >& list_of_points, std::vector<Condition*>& list_of_conditions, RefineCounters& rLocalRefineInfo )
327 Node new_point(0,0.0,0.0,0.0);
331 for(
unsigned int i = 0;
i<list_of_points.size(); ++
i)
333 id = initial_node_size+
i;
335 double&
x= list_of_points[
i].X();
336 double&
y= list_of_points[
i].Y();
338 Node::Pointer pnode = rModelPart.CreateNewNode(
id,
x,
y,
z);
340 pnode->SetBufferSize(rModelPart.NodesBegin()->GetBufferSize() );
346 Geometry< Node >& rConditionGeometry = list_of_conditions[
i]->GetGeometry();
350 for(Node::DofsContainerType::iterator iii = reference_dofs.begin(); iii != reference_dofs.end(); ++iii)
355 if( rConditionGeometry[0].IsFixed(rDof.GetVariable()) && rConditionGeometry[1].IsFixed(rDof.GetVariable()) )
356 (p_new_dof)->FixDof();
362 VariablesList& variables_list = rModelPart.GetNodalSolutionStepVariablesList();
365 PointsArray.push_back( rConditionGeometry(0) );
366 PointsArray.push_back( rConditionGeometry(1) );
368 Geometry<Node > geom( PointsArray );
370 std::vector<double>
N(2);
374 MeshDataTransferUtilities DataTransferUtilities;
375 DataTransferUtilities.Interpolate( geom,
N, variables_list, pnode);
381 pnode->Set(BOUNDARY);
382 pnode->Set(NEW_ENTITY);
385 double& nodal_h = pnode->FastGetSolutionStepValue(NODAL_H);
389 const array_1d<double,3> ZeroNormal(3,0.0);
391 noalias(pnode->GetSolutionStepValue(NORMAL)) = list_of_conditions[
i]->GetValue(NORMAL);
395 array_1d<double, 3 > & ContactForceNormal1 = rConditionGeometry[0].FastGetSolutionStepValue(CONTACT_FORCE);
396 array_1d<double, 3 > & ContactForceNormal2 = rConditionGeometry[1].FastGetSolutionStepValue(CONTACT_FORCE);
397 if(
norm_2(ContactForceNormal1)==0 ||
norm_2(ContactForceNormal2)==0)
398 noalias(pnode->FastGetSolutionStepValue(CONTACT_FORCE)) = ZeroNormal;
401 const array_1d<double,3>& disp = pnode->FastGetSolutionStepValue(DISPLACEMENT);
402 pnode->X0() = pnode->X() - disp[0];
403 pnode->Y0() = pnode->Y() - disp[1];
404 pnode->Z0() = pnode->Z() - disp[2];
412 face1.push_back(rConditionGeometry(0));
413 face1.push_back(pnode);
415 face2.push_back(pnode);
416 face2.push_back(rConditionGeometry(1));
418 id = initial_cond_size+(
i*2);
420 ConditionType::Pointer pcond1 = list_of_conditions[
i]->Clone(
id, face1);
422 id = initial_cond_size+(
i*2+1);
423 ConditionType::Pointer pcond2 = list_of_conditions[
i]->Clone(
id, face2);
426 pcond1->Set(NEW_ENTITY);
427 pcond2->Set(NEW_ENTITY);
429 pcond1->SetValue(MASTER_NODES, list_of_conditions[
i]->
GetValue(MASTER_NODES) );
430 pcond1->SetValue(NORMAL, list_of_conditions[
i]->
GetValue(NORMAL) );
431 pcond1->SetValue(CAUCHY_STRESS_VECTOR,list_of_conditions[
i]->
GetValue(CAUCHY_STRESS_VECTOR));
432 pcond1->SetValue(DEFORMATION_GRADIENT,list_of_conditions[
i]->
GetValue(DEFORMATION_GRADIENT));
434 pcond2->SetValue(MASTER_NODES, list_of_conditions[
i]->
GetValue(MASTER_NODES) );
435 pcond2->SetValue(NORMAL, list_of_conditions[
i]->
GetValue(NORMAL) );
436 pcond2->SetValue(CAUCHY_STRESS_VECTOR,list_of_conditions[
i]->
GetValue(CAUCHY_STRESS_VECTOR));
437 pcond2->SetValue(DEFORMATION_GRADIENT,list_of_conditions[
i]->
GetValue(DEFORMATION_GRADIENT));
442 rModelPart.AddCondition(pcond1);
446 rModelPart.AddCondition(pcond2);
459 bool RefineContactBoundary(ModelPart& rModelPart, std::vector<Point >& list_of_points, std::vector<Condition*>& list_of_conditions, RefineCounters& rLocalRefineInfo )
469 double factor_for_tip_radius = 0.2;
470 double factor_for_non_tip_side = 3.0;
472 double size_for_tip_contact_side = 0.4 *
mrRemesh.
Refine->CriticalSide;
473 double size_for_non_tip_contact_side = 2.0 *
mrRemesh.
Refine->CriticalSide;
480 unsigned int nodes_on_wall_tip = 0;
481 double ContactFace = 0;
482 for(ModelPart::ConditionsContainerType::iterator i_cond =rModelPart.ConditionsBegin(); i_cond!= rModelPart.ConditionsEnd(); i_cond++)
484 if( i_cond->Is(CONTACT) && i_cond->GetGeometry().size() == 1 ){
488 if(
int(ContactFace) == 2 ){
490 i_cond->GetGeometry()[0].Set(TO_SPLIT);
491 nodes_on_wall_tip ++;
499 std::cout <<
" [ NODES ON WALL TIP: ( " <<nodes_on_wall_tip <<
" ) ]"<<std::endl;
512 double tool_radius = 0;
513 double side_length = 0;
515 bool size_insert =
false;
516 bool radius_insert =
false;
517 bool contact_active =
false;
519 bool contact_semi_active =
false;
520 bool tool_project =
false;
522 std::vector<bool> semi_active_nodes;
523 Node new_point(0,0.0,0.0,0.0);
530 radius_insert =
false;
531 tool_project =
false;
532 contact_active =
false;
537 Geometry< Node > rConditionGeometry;
538 array_1d<double,3> tip_center;
543 if( ic->Is(CONTACT) )
547 bool condition_found =
false;
553 if( MasterCondition->IsNot(TO_ERASE) ){
556 rConditionGeometry = MasterCondition->GetGeometry();
559 if( MasterNode.SolutionStepsDataHas( WALL_TIP_RADIUS ) )
562 tool_radius = MasterNode.FastGetSolutionStepValue( WALL_TIP_RADIUS );
563 tip_center = MasterNode.FastGetSolutionStepValue( WALL_REFERENCE_POINT );
566 array_1d<double, 3 >
radius;
567 radius[0]=rConditionGeometry[0].X()-tip_center[0];
568 radius[1]=rConditionGeometry[0].Y()-tip_center[1];
569 radius[2]=rConditionGeometry[0].Z()-tip_center[2];
572 radius[0]=rConditionGeometry[1].X()-tip_center[0];
573 radius[1]=rConditionGeometry[1].Y()-tip_center[1];
574 radius[2]=rConditionGeometry[1].Z()-tip_center[2];
583 if( (1-factor_for_tip_radius)*tool_radius < distance1 && distance1 < (1+factor_for_tip_radius)*tool_radius )
584 rConditionGeometry[0].Set(TO_SPLIT);
586 if( (1-factor_for_tip_radius)*tool_radius < distance2 && distance2 < (1+factor_for_tip_radius)*tool_radius )
587 rConditionGeometry[1].Set(TO_SPLIT);
596 rLocalRefineInfo.number_of_active_contacts ++;
604 if( side_length > size_for_tip_contact_side ){
607 if( ((1-factor_for_tip_radius)*tool_radius < distance1 && (1-factor_for_tip_radius)*tool_radius < distance2) &&
608 (distance1 < (1+factor_for_tip_radius)*tool_radius && distance2 < (1+factor_for_tip_radius)*tool_radius) )
610 radius_insert =
true;
627 radius_insert =
false;
657 double& nodal_h1 = rConditionGeometry[0].FastGetSolutionStepValue(NODAL_H);
658 double& nodal_h2 = rConditionGeometry[1].FastGetSolutionStepValue(NODAL_H);
659 double& nodal_h0 = MasterNode.FastGetSolutionStepValue( NODAL_H );
661 double side =
norm_2(rConditionGeometry[0]-rConditionGeometry[1]);
668 bool candidate =
false;
669 if( ((nodal_h1+nodal_h2)*0.5) > factor_for_non_tip_side * nodal_h0 ){
673 if( (side > size_for_non_tip_contact_side ) && candidate ){
680 if( radius_insert || size_insert )
685 new_point.X() = 0.5*( rConditionGeometry[1].X() + rConditionGeometry[0].X() );
686 new_point.Y() = 0.5*( rConditionGeometry[1].Y() + rConditionGeometry[0].Y() );
687 new_point.Z() = 0.5*( rConditionGeometry[1].Z() + rConditionGeometry[0].Z() );
690 new_point.SetId(ic->Id());
692 Condition* ContactMasterCondition = ic->GetValue(MASTER_CONDITION).get();
695 if( (rConditionGeometry[0].
Is(TO_SPLIT) && rConditionGeometry[1].Is(TO_SPLIT)) )
698 if( (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].Is(TO_SPLIT)) && contact_active)
705 if(new_point.Y()<(tip_center[1]) && new_point.Y()>(tip_center[1]-tool_radius)){
710 array_1d<double,3> tip_normal = tip_center-new_point;
712 if(
norm_2(tip_normal)<tool_radius*0.95){
713 tip_normal -= (tool_radius/
norm_2(tip_normal)) * tip_normal;
714 if(
norm_2(tip_normal)<tool_radius*0.05)
715 new_point += tip_normal;
724 rLocalRefineInfo.number_contact_tip_insertions++;
726 rLocalRefineInfo.number_contact_size_insertions++;
729 ContactMasterCondition->Set(TO_ERASE);
730 list_of_points.push_back(new_point);
731 list_of_conditions.push_back(ContactMasterCondition);
735 rLocalRefineInfo.number_of_contacts ++;
743 rLocalRefineInfo.number_of_contact_conditions ++;
760 bool RefineOtherBoundary(ModelPart& rModelPart, std::vector<Point >& list_of_points, std::vector<Condition*>& list_of_conditions, RefineCounters& rLocalRefineInfo )
765 ProcessInfo& CurrentProcessInfo = rModelPart.GetProcessInfo();
770 double factor_for_tip_radius = 0.20;
772 double size_for_wall_tip_contact_side = 0.50 *
mrRemesh.
Refine->CriticalSide;
773 double size_for_wall_semi_tip_contact_side = 0.75 *
mrRemesh.
Refine->CriticalSide;
774 double size_for_wall_non_tip_contact_side = 1.50 *
mrRemesh.
Refine->CriticalSide;
777 double size_for_energy_side = 1.50 *
mrRemesh.
Refine->CriticalSide;
778 double size_for_non_contact_side = 3.50 *
mrRemesh.
Refine->CriticalSide;
781 double tool_radius= 0;
782 double side_length= 0;
783 double plastic_power=0;
785 bool radius_insert =
false;
786 bool energy_insert =
false;
787 bool mesh_size_insert =
false;
788 bool contact_active =
false;
789 bool contact_semi_active =
false;
790 bool tool_project =
false;
792 Node new_point(0,0.0,0.0,0.0);
794 std::vector<bool> semi_active_nodes;
798 double cond_counter=0;
799 for(ModelPart::ConditionsContainerType::iterator ic = rModelPart.ConditionsBegin(); ic!= rModelPart.ConditionsEnd(); ic++)
802 bool refine_candidate =
false;
804 if( ic->Is(BOUNDARY) )
805 refine_candidate =
true;
807 refine_candidate =
false;
810 refine_candidate =
true;
814 if( refine_candidate ){
821 if( refine_candidate ){
823 radius_insert =
false;
824 energy_insert =
false;
825 mesh_size_insert =
false;
826 tool_project =
false;
827 contact_active =
false;
828 contact_semi_active =
false;
835 Geometry< Node > rConditionGeometry;
836 array_1d<double,3> tip_center;
838 if( ic->IsNot(TO_ERASE) ){
849 rConditionGeometry = ic->GetGeometry();
855 if( contact_active ){
859 if( side_length > size_for_wall_tip_contact_side ){
862 if(rConditionGeometry[0].
Is(TO_SPLIT) && rConditionGeometry[1].
Is(TO_SPLIT)){
865 else if (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].
Is(TO_SPLIT)){
866 if( side_length > size_for_wall_tip_contact_side ){
871 bool on_radius =
false;
873 if( on_tip && mRigidWalls.size() ){
876 if( rConditionGeometry[0].
Is(TO_SPLIT) ){
878 Point[0] = rConditionGeometry[0].X();
879 Point[1] = rConditionGeometry[0].Y();
880 Point[2] = rConditionGeometry[0].Z();
884 else if( rConditionGeometry[1].
Is(TO_SPLIT) ){
886 Point[0] = rConditionGeometry[1].X();
887 Point[1] = rConditionGeometry[1].Y();
888 Point[2] = rConditionGeometry[1].Z();
899 ProcessInfo& CurrentProcessInfo = rModelPart.GetProcessInfo();
900 double Time = CurrentProcessInfo[TIME];
901 for(
unsigned int i = 0;
i <mRigidWalls.size(); ++
i )
903 if(mRigidWalls[
i]->IsInside( Point, Time ) ){
904 tool_radius =mRigidWalls[
i]->GetRadius(Point);
905 tip_center =mRigidWalls[
i]->GetCenter(Point);
913 if( on_radius && on_tip )
915 Node center (0,tip_center[0],tip_center[1],tip_center[2]);
916 array_1d<double, 3 >
radius;
917 radius[0]=rConditionGeometry[0].X()-center.X();
918 radius[1]=rConditionGeometry[0].Y()-center.Y();
919 radius[2]=rConditionGeometry[0].Z()-center.Z();
923 radius[0]=rConditionGeometry[1].X()-center.X();
924 radius[1]=rConditionGeometry[1].Y()-center.Y();
925 radius[2]=rConditionGeometry[1].Z()-center.Z();
930 if( ((1-factor_for_tip_radius)*tool_radius < distance1 && (1-factor_for_tip_radius)*tool_radius < distance2) &&
931 (distance1 < (1+factor_for_tip_radius)*tool_radius && distance2 < (1+factor_for_tip_radius)*tool_radius) )
933 radius_insert =
true;
954 unsigned int vsize=ic->GetValue(MASTER_ELEMENTS).size();
956 if (!radius_insert &&
mrRemesh.
Refine->RefiningOptions.Is(MesherUtilities::REFINE_BOUNDARY_ON_THRESHOLD) && vsize>0){
958 Element& MasterElement = ic->GetValue(MASTER_ELEMENTS)[vsize-1];
961 std::vector<double> Value(1);
963 MasterElement.GetValueOnIntegrationPoints(
mrRemesh.
Refine->GetThresholdVariable(),Value,CurrentProcessInfo);
966 Geometry<Node >& pGeom = MasterElement.GetGeometry();
967 plastic_power = Value[0] * pGeom.Area();
987 if( plastic_power >
mrRemesh.
Refine->ReferenceThreshold * pGeom.Area() && side_length > size_for_energy_side )
989 energy_insert =
true;
1006 if( (!radius_insert || !energy_insert) && vsize>0 ){
1008 Element& MasterElement = ic->GetValue(MASTER_ELEMENTS)[vsize-1];
1013 Geometry<Node >& vertices = MasterElement.GetGeometry();
1023 double critical_side_size = 0;
1025 bool on_tip =
false;
1026 if( contact_semi_active ){
1028 if (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].
Is(TO_SPLIT))
1031 if( on_tip ==
true )
1032 critical_side_size = size_for_wall_semi_tip_contact_side;
1034 critical_side_size = size_for_wall_non_tip_contact_side;
1039 else if( contact_active ){
1041 if (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].
Is(TO_SPLIT))
1044 if( on_tip ==
true )
1045 critical_side_size = size_for_wall_semi_tip_contact_side;
1047 critical_side_size = size_for_wall_non_tip_contact_side;
1052 critical_side_size = size_for_non_contact_side;
1057 if( !accepted && !contact_semi_active && !contact_active && side_length > critical_side_size )
1059 mesh_size_insert =
true;
1063 else if( contact_semi_active && side_length > critical_side_size )
1065 mesh_size_insert =
true;
1070 else if( contact_active && side_length > critical_side_size )
1072 mesh_size_insert =
true;
1087 if( radius_insert || energy_insert || mesh_size_insert )
1092 new_point.X() = 0.5*( rConditionGeometry[1].X() + rConditionGeometry[0].X() );
1093 new_point.Y() = 0.5*( rConditionGeometry[1].Y() + rConditionGeometry[0].Y() );
1094 new_point.Z() = 0.5*( rConditionGeometry[1].Z() + rConditionGeometry[0].Z() );
1097 std::cout<<
" radius_insert "<<radius_insert<<
" energy_insert "<<energy_insert<<
" mesh_size_insert "<<mesh_size_insert<<std::endl;
1098 std::cout<<
" NEW NODE "<<new_point<<std::endl;
1101 new_point.SetId(ic->Id());
1105 if( (rConditionGeometry[0].
Is(TO_SPLIT) && rConditionGeometry[1].Is(TO_SPLIT)) )
1106 tool_project =
true;
1108 if( (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].Is(TO_SPLIT)) && contact_active)
1109 tool_project =
true;
1111 if( (rConditionGeometry[0].
Is(TO_SPLIT) || rConditionGeometry[1].Is(TO_SPLIT)) && contact_semi_active)
1112 tool_project =
true;
1114 bool on_radius =
false;
1116 if( tool_project && mRigidWalls.size() ){
1119 if( rConditionGeometry[0].
Is(TO_SPLIT) ){
1121 Point[0] = rConditionGeometry[0].X();
1122 Point[1] = rConditionGeometry[0].Y();
1123 Point[2] = rConditionGeometry[0].Z();
1127 else if( rConditionGeometry[1].
Is(TO_SPLIT) ){
1129 Point[0] = rConditionGeometry[1].X();
1130 Point[1] = rConditionGeometry[1].Y();
1131 Point[2] = rConditionGeometry[1].Z();
1142 ProcessInfo& CurrentProcessInfo = rModelPart.GetProcessInfo();
1143 double Time = CurrentProcessInfo[TIME];
1144 for(
unsigned int i = 0;
i <mRigidWalls.size(); ++
i )
1146 if(mRigidWalls[
i]->IsInside( Point, Time ) ){
1147 tool_radius =mRigidWalls[
i]->GetRadius(Point);
1148 tip_center =mRigidWalls[
i]->GetCenter(Point);
1159 if(new_point.Y()<(tip_center[1]) && new_point.Y()>(tip_center[1]-tool_radius)){
1161 array_1d<double,3> tip_normal = tip_center-new_point;
1163 if(
norm_2(tip_normal)<tool_radius){
1165 tip_normal -= (tool_radius/
norm_2(tip_normal)) * tip_normal;
1167 if(
norm_2(tip_normal)<tool_radius*0.08)
1168 new_point += tip_normal;
1174 std::cout<<
" TOOL PROJECT::on radius "<<new_point<<std::endl;
1183 rLocalRefineInfo.number_of_tip_bounds ++;
1185 rLocalRefineInfo.number_of_energy_bounds ++;
1186 if(mesh_size_insert)
1187 rLocalRefineInfo.number_of_exterior_bounds++;
1192 std::cout<<
" INSERTED NODE "<<new_point<<std::endl;
1194 list_of_points.push_back(new_point);
1195 list_of_conditions.push_back((*(ic.base())).get());
1219 std::cout<<
" Condition "<<ic->Id()<<
" Released "<<std::endl;
1266 rOStream << std::endl;
Base class for all Conditions.
Definition: condition.h:59
Geometry< NodeType >::PointsArrayType NodesArrayType
definition of nodes container type, redefined from GeometryType
Definition: condition.h:86
Dof * Pointer
Pointer definition of Dof.
Definition: dof.h:93
void FreeDof()
Definition: dof.h:345
bool Is(Flags const &rOther) const
Definition: flags.h:274
Geometry base class.
Definition: geometry.h:71
SizeType size() const
Definition: geometry.h:518
static double CalculateSideLength(PointType &P1, PointType &P2)
Definition: mesher_utilities.hpp:1073
bool CheckContactActive(GeometryType &rConditionGeometry, bool &rSemiActiveContact, std::vector< bool > &rSemiActiveNodes)
Definition: mesher_utilities.cpp:1847
Condition::Pointer FindMasterCondition(Condition::Pointer &pCondition, ModelPart::ConditionsContainerType &rModelConditions, bool &condition_found)
Definition: mesher_utilities.cpp:1642
bool CheckConditionInBox(Condition::Pointer &pCondition, SpatialBoundingBox &rRefiningBox, ProcessInfo &rCurrentProcessInfo)
Definition: mesher_utilities.cpp:1559
bool AlphaShape(double AlphaParameter, Geometry< Node > &rGeometry, const unsigned int dimension)
Definition: mesher_utilities.cpp:1182
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
MeshType::ConditionsContainerType ConditionsContainerType
Condintions container. A vector set of Conditions with their Id's as key.
Definition: model_part.h:183
ConditionIterator ConditionsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1361
std::string & Name()
Definition: model_part.h:1811
ConditionsContainerType & Conditions(IndexType ThisIndex=0)
Definition: model_part.h:1381
void AddCondition(ConditionType::Pointer pNewCondition, IndexType ThisIndex=0)
Definition: model_part.cpp:1436
SizeType NumberOfConditions(IndexType ThisIndex=0) const
Definition: model_part.h:1218
ModelPart & GetSubModelPart(std::string const &SubModelPartName)
Definition: model_part.cpp:2029
SizeType NumberOfNodes(IndexType ThisIndex=0) const
Definition: model_part.h:341
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
ConditionIterator ConditionsEnd(IndexType ThisIndex=0)
Definition: model_part.h:1371
This class defines the node.
Definition: node.h:65
Dof< double > DofType
Dof type.
Definition: node.h:83
std::vector< std::unique_ptr< Dof< double > >> DofsContainerType
The DoF container type definition.
Definition: node.h:92
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
void reserve(size_type dim)
Definition: pointer_vector.h:319
boost::indirect_iterator< typename TContainerType::iterator > iterator
Definition: pointer_vector_set.h:95
size_type size() const
Returns the number of elements in the container.
Definition: pointer_vector_set.h:502
boost::indirect_iterator< typename TContainerType::const_iterator > const_iterator
Definition: pointer_vector_set.h:96
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
Refine Mesh Boundary Process.
Definition: refine_conditions_mesher_process.hpp:50
int mEchoLevel
Definition: refine_conditions_mesher_process.hpp:222
MesherUtilities mMesherUtilities
Definition: refine_conditions_mesher_process.hpp:220
MesherUtilities::MeshingParameters & mrRemesh
Definition: refine_conditions_mesher_process.hpp:218
ModelPart & mrModelPart
Definition: refine_conditions_mesher_process.hpp:216
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
z
Definition: GenerateWind.py:163
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
TExpressionType::data_type norm_2(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression)
Definition: amatrix_interface.h:625
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
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
y
Other simbols definition.
Definition: generate_axisymmetric_navier_stokes_element.py:54
float radius
Definition: mesh_to_mdpa_converter.py:18
def Alpha(n, j)
Definition: quadrature.py:93
N
Definition: sensitivityMatrix.py:29
x
Definition: sensitivityMatrix.py:49
integer i
Definition: TensorModule.f:17
Definition: mesher_utilities.hpp:631
MeshingInfoParameters::Pointer Info
Definition: mesher_utilities.hpp:681
Flags Options
Definition: mesher_utilities.hpp:645
RefiningParameters::Pointer Refine
Definition: mesher_utilities.hpp:684
std::string SubModelPartName
Definition: mesher_utilities.hpp:642