14 #ifndef SLIDING_EDGE_PROCESS_H
15 #define SLIDING_EDGE_PROCESS_H
62 Parameters InputParameters):mrModelPart(rModelPart),mParameters(InputParameters)
67 "constraint_name" : "LinearMasterSlaveConstraint",
68 "master_sub_model_part_name" : "master_connect",
69 "slave_sub_model_part_name" : "slave_connect",
70 "variable_names" : ["DISPLACEMENT_Y","DISPLACEMENT_Z"],
71 "reform_every_step" : true,
73 "angled_initial_line" : false,
79 KRATOS_ERROR_IF(mParameters["angled_initial_line"].GetBool() && mParameters[
"follow_line"].GetBool())
80 <<
"either 'angled_initial_line' or 'follow_line' or both 'false'" << std::endl;
90 if (mParameters[
"reform_every_step"].GetBool())
104 if (mParameters[
"reform_every_step"].GetBool())
117 const int bucket_size = mParameters[
"bucket_size"].
GetInt();
121 NodeVector master_node_list(r_nodes_master.size());
124 KDTree::Pointer search_tree =
127 const int max_number_of_neighbors = 2;
129 for(
NodeType& node_i : r_nodes_slave)
131 double neighbor_search_radius = mParameters[
"neighbor_search_radius"].
GetDouble();
133 NodeVector neighbor_nodes( max_number_of_neighbors );
134 DoubleVector resulting_squared_distances( max_number_of_neighbors );
136 neighbor_nodes.clear();
137 resulting_squared_distances.clear();
139 number_of_neighbors = search_tree->SearchInRadius( node_i,
140 neighbor_search_radius,
141 neighbor_nodes.begin(),
142 resulting_squared_distances.begin(),
143 max_number_of_neighbors );
145 if (mParameters[
"must_find_neighbor"].GetBool())
147 if (number_of_neighbors<1)
149 KRATOS_ERROR <<
"found no neighbor for slave node " << node_i.Id() <<
" " << node_i.Coordinates() << std::endl;
153 if (number_of_neighbors>0)
155 if(mParameters[
"debug_info"].GetBool()) std::cout <<
"nr.ne.: " << number_of_neighbors << std::endl;
156 DoubleVector list_of_weights( number_of_neighbors, 0.0 );
160 if(mParameters[
"angled_initial_line"].GetBool())
176 rMasterNodeList.resize(r_nodes.size());
177 auto i_begin = master_model_part.
NodesBegin();
182 rMasterNodeList[
i] = pnode;
189 const double numerical_limit = std::numeric_limits<double>::epsilon();
190 double total_nodal_distance = 0.00;
192 if (rNumberOfNeighbors == 1) rNodalNeighborWeights[0] = 1.00;
195 if (std::abs(rResultingSquaredDistances[0])<numerical_limit) rNodalNeighborWeights[0] = 1.00;
196 else if (std::abs(rResultingSquaredDistances[1])<numerical_limit) rNodalNeighborWeights[1] = 1.00;
199 for (
SizeType i=0;
i<rNumberOfNeighbors;++
i) total_nodal_distance+=std::sqrt(rResultingSquaredDistances[
i]);
203 double current_weight = std::sqrt(rResultingSquaredDistances[rNumberOfNeighbors-(
i+1)])/total_nodal_distance;
204 (current_weight>numerical_limit) ? (rNodalNeighborWeights[
i]=current_weight) : (rNodalNeighborWeights[
i]=0.00);
218 const double numerical_limit = std::numeric_limits<double>::epsilon();
221 if (rNumberOfNeighbors<2)
223 for(
SizeType dof_iterator=0;dof_iterator<mParameters[
"variable_names"].
size();++dof_iterator)
225 const auto& current_dof =
228 for(
SizeType master_iterator =0;master_iterator<rNumberOfNeighbors;++master_iterator)
234 r_nodes_master[rNeighborNodes[master_iterator]->Id()],current_dof,r_nodes_slave[rCurrentSlaveNode.
Id()],
235 current_dof,rNodalNeighborWeights[master_iterator],0.0);
237 p_current_constraint->Set(TO_ERASE);
240 if(mParameters[
"debug_info"].GetBool()){
241 std::cout << rNeighborNodes[master_iterator]->Id()
242 <<
"-----" << rCurrentSlaveNode.
Id() <<
"-----" << rNodalNeighborWeights[master_iterator]
243 <<
" ::: " << mParameters[
"variable_names"][dof_iterator].
GetString() << std::endl;
249 else if (rNumberOfNeighbors==2)
251 const auto node_i = rNeighborNodes[0];
252 const auto node_j = rNeighborNodes[1];
258 const double dx = (node_j->FastGetSolutionStepValue(DISPLACEMENT_X)+node_j->X0()) -
259 (node_i->FastGetSolutionStepValue(DISPLACEMENT_X)+node_i->X0());
260 const double dy = (node_j->FastGetSolutionStepValue(DISPLACEMENT_Y)+node_j->Y0()) -
261 (node_i->FastGetSolutionStepValue(DISPLACEMENT_Y)+node_i->Y0());
262 const double dz = (node_j->FastGetSolutionStepValue(DISPLACEMENT_Z)+node_j->Z0()) -
263 (node_i->FastGetSolutionStepValue(DISPLACEMENT_Z)+node_i->Z0());
266 if (std::abs(dx)>numerical_limit)
270 mParameters[
"constraint_set_name"].GetString(),
current_id,
271 r_nodes_slave[rCurrentSlaveNode.
Id()],
272 check_dof_x,r_nodes_slave[rCurrentSlaveNode.
Id()],
273 check_dof_y,dy/dx,0.0);
274 p_current_constraint->Set(TO_ERASE);
278 mParameters[
"constraint_set_name"].GetString(),
current_id,
279 r_nodes_slave[rCurrentSlaveNode.
Id()],
280 check_dof_x,r_nodes_slave[rCurrentSlaveNode.
Id()],
281 check_dof_z,dz/dx,0.0);
282 p_current_constraint->Set(TO_ERASE);
284 else if (std::abs(dy)>numerical_limit)
288 mParameters[
"constraint_set_name"].GetString(),
current_id,
289 r_nodes_slave[rCurrentSlaveNode.
Id()],
290 check_dof_y,r_nodes_slave[rCurrentSlaveNode.
Id()],
291 check_dof_x,dx/dy,0.0);
292 p_current_constraint->Set(TO_ERASE);
296 mParameters[
"constraint_set_name"].GetString(),
current_id,
297 r_nodes_slave[rCurrentSlaveNode.
Id()],
298 check_dof_y,r_nodes_slave[rCurrentSlaveNode.
Id()],
299 check_dof_z,dz/dy,0.0);
300 p_current_constraint->Set(TO_ERASE);
302 else if (std::abs(dz)>numerical_limit)
306 mParameters[
"constraint_set_name"].GetString(),
current_id,
307 r_nodes_slave[rCurrentSlaveNode.
Id()],
308 check_dof_z,r_nodes_slave[rCurrentSlaveNode.
Id()],
309 check_dof_x,dx/dz,0.0);
310 p_current_constraint->Set(TO_ERASE);
314 mParameters[
"constraint_set_name"].GetString(),
current_id,
315 r_nodes_slave[rCurrentSlaveNode.
Id()],
316 check_dof_z,r_nodes_slave[rCurrentSlaveNode.
Id()],
317 check_dof_y,dy/dz,0.0);
318 p_current_constraint->Set(TO_ERASE);
320 else KRATOS_ERROR <<
"sliding edge is a point for slave node " << rCurrentSlaveNode.
Id() << std::endl;
323 else KRATOS_ERROR <<
"maximal 2 neighbors allowed for slave node " << rCurrentSlaveNode.
Id() << std::endl;
336 for(
SizeType dof_iterator=0;dof_iterator<mParameters[
"variable_names"].
size();++dof_iterator)
338 const auto& current_dof =
341 for(
SizeType master_iterator =0;master_iterator<rNumberOfNeighbors;++master_iterator)
347 r_nodes_master[rNeighborNodes[master_iterator]->Id()],current_dof,r_nodes_slave[rCurrentSlaveNode.
Id()],
348 current_dof,rNodalNeighborWeights[master_iterator],0.0);
350 p_current_constraint->Set(TO_ERASE);
353 if(mParameters[
"debug_info"].GetBool()){
354 std::cout << rNeighborNodes[master_iterator]->Id()
355 <<
"-----" << rCurrentSlaveNode.
Id() <<
"-----" << rNodalNeighborWeights[master_iterator]
356 <<
" ::: " << mParameters[
"variable_names"][dof_iterator].
GetString() << std::endl;
375 double distance = 1e12;
376 double distance_i = 0.0;
377 std::vector<std::size_t> neighbour_ids = {0,0};
381 for(
NodeType& node_j : r_nodes_master)
384 if (distance_i<distance)
387 neighbour_ids[0] = node_j.Id();
390 weights[0] = distance;
393 for(
NodeType& node_j : r_nodes_master)
395 if (node_j.Id()==neighbour_ids[0])
continue;
398 if (distance_i<distance)
401 neighbour_ids[1] = node_j.Id();
404 weights[1] = distance;
405 const double total_distance = weights[0]+weights[1];
406 weights[0] = 1.0 - (weights[0]/total_distance);
407 weights[1] = 1.0 - (weights[1]/total_distance);
410 if (mParameters[
"debug_info"].GetBool())
415 std::cout <<
"_________________________" << std::endl;
417 return neighbour_ids;
441 const int max_number_of_neighbours = 2;
443 for(
NodeType& node_i : r_nodes_slave)
445 std::vector<double> nodal_weights = {0.0,0.0};
447 NodeVector neighbour_nodes( max_number_of_neighbours );
448 neighbour_nodes[0] = master_model_part.
pGetNode(neighbour_node_ids[0]);
449 neighbour_nodes[1] = master_model_part.
pGetNode(neighbour_node_ids[1]);
453 if(mParameters[
"angled_initial_line"].GetBool())
456 else if(mParameters[
"follow_line"].GetBool())
475 const double numerical_limit = std::numeric_limits<double>::epsilon();
478 const auto node_i = rNeighborNodes[0];
479 const auto node_j = rNeighborNodes[1];
485 const double ua = node_i->FastGetSolutionStepValue(DISPLACEMENT_X);
486 const double va = node_i->FastGetSolutionStepValue(DISPLACEMENT_Y);
487 const double wa = node_i->FastGetSolutionStepValue(DISPLACEMENT_Z);
489 const double ub = node_j->FastGetSolutionStepValue(DISPLACEMENT_X);
490 const double vb = node_j->FastGetSolutionStepValue(DISPLACEMENT_Y);
491 const double wb = node_j->FastGetSolutionStepValue(DISPLACEMENT_Z);
497 const double xa = node_i->X0();
498 const double ya = node_i->Y0();
499 const double za = node_i->Z0();
501 const double xb = node_j->X0();
502 const double yb = node_j->Y0();
503 const double zb = node_j->Z0();
505 const double xs = rCurrentSlaveNode.
X0();
506 const double ys = rCurrentSlaveNode.
Y0();
507 const double zs = rCurrentSlaveNode.
Z0();
509 const double dx = xb+ub-xa-ua;
510 const double dy = yb+vb-ya-va;
511 const double dz = zb+wb-za-wa;
521 if (std::abs(dx)>numerical_limit)
523 double constant = (ya-
ys) - (xa*(yb-ya)/dx) + (
xs*(yb-ya)/dx);
525 double weight_i = 1.0 + (xa/dx) - (
xs/dx);
528 mParameters[
"constraint_set_name"].GetString(),
current_id,
529 r_nodes_master[node_i->Id()],
531 r_nodes_slave[rCurrentSlaveNode.
Id()],
535 p_current_constraint_1->Set(TO_ERASE);
537 weight_i = -1.0*dy/dx;
540 mParameters[
"constraint_set_name"].GetString(),
current_id,
541 r_nodes_master[node_i->Id()],
543 r_nodes_slave[rCurrentSlaveNode.
Id()],
547 p_current_constraint_2->Set(TO_ERASE);
550 weight_i = (
xs/dx) - (xa/dx);
553 mParameters[
"constraint_set_name"].GetString(),
current_id,
554 r_nodes_master[node_j->Id()],
556 r_nodes_slave[rCurrentSlaveNode.
Id()],
560 p_current_constraint_3->Set(TO_ERASE);
563 weight_i = 1.0*dy/dx;
566 mParameters[
"constraint_set_name"].GetString(),
current_id,
567 r_nodes_slave[rCurrentSlaveNode.
Id()],
569 r_nodes_slave[rCurrentSlaveNode.
Id()],
573 p_current_constraint_4->Set(TO_ERASE);
579 constant = (za-zs) - (xa*(zb-za)/dx) + (
xs*(zb-za)/dx);
581 weight_i = 1.0 + (xa/dx) - (
xs/dx);
584 mParameters[
"constraint_set_name"].GetString(),
current_id,
585 r_nodes_master[node_i->Id()],
587 r_nodes_slave[rCurrentSlaveNode.
Id()],
591 p_current_constraint_5->Set(TO_ERASE);
593 weight_i = -1.0*dz/dx;
596 mParameters[
"constraint_set_name"].GetString(),
current_id,
597 r_nodes_master[node_i->Id()],
599 r_nodes_slave[rCurrentSlaveNode.
Id()],
603 p_current_constraint_6->Set(TO_ERASE);
606 weight_i = (
xs/dx) - (xa/dx);
609 mParameters[
"constraint_set_name"].GetString(),
current_id,
610 r_nodes_master[node_j->Id()],
612 r_nodes_slave[rCurrentSlaveNode.
Id()],
616 p_current_constraint_7->Set(TO_ERASE);
619 weight_i = 1.0*dz/dx;
622 mParameters[
"constraint_set_name"].GetString(),
current_id,
623 r_nodes_slave[rCurrentSlaveNode.
Id()],
625 r_nodes_slave[rCurrentSlaveNode.
Id()],
629 p_current_constraint_8->Set(TO_ERASE);
632 else if (std::abs(dy)>numerical_limit)
634 double constant = (xa-
xs) - (ya*(xb-xa)/dy) + (
ys*(xb-xa)/dy);
636 double weight_i = 1.0 + (ya/dy) - (
ys/dy);
639 mParameters[
"constraint_set_name"].GetString(),
current_id,
640 r_nodes_master[node_i->Id()],
642 r_nodes_slave[rCurrentSlaveNode.
Id()],
646 p_current_constraint_1->Set(TO_ERASE);
648 weight_i = -1.0*dx/dy;
651 mParameters[
"constraint_set_name"].GetString(),
current_id,
652 r_nodes_master[node_i->Id()],
654 r_nodes_slave[rCurrentSlaveNode.
Id()],
658 p_current_constraint_2->Set(TO_ERASE);
661 weight_i = (
ys/dy) - (ya/dy);
664 mParameters[
"constraint_set_name"].GetString(),
current_id,
665 r_nodes_master[node_j->Id()],
667 r_nodes_slave[rCurrentSlaveNode.
Id()],
671 p_current_constraint_3->Set(TO_ERASE);
674 weight_i = 1.0*dx/dy;
677 mParameters[
"constraint_set_name"].GetString(),
current_id,
678 r_nodes_slave[rCurrentSlaveNode.
Id()],
680 r_nodes_slave[rCurrentSlaveNode.
Id()],
684 p_current_constraint_4->Set(TO_ERASE);
687 constant = (za-zs) - (ya*(zb-za)/dy) + (
ys*(zb-za)/dy);
689 weight_i = 1.0 + (ya/dy) - (
ys/dy);
692 mParameters[
"constraint_set_name"].GetString(),
current_id,
693 r_nodes_master[node_i->Id()],
695 r_nodes_slave[rCurrentSlaveNode.
Id()],
699 p_current_constraint_5->Set(TO_ERASE);
701 weight_i = -1.0*dz/dy;
704 mParameters[
"constraint_set_name"].GetString(),
current_id,
705 r_nodes_master[node_i->Id()],
707 r_nodes_slave[rCurrentSlaveNode.
Id()],
711 p_current_constraint_6->Set(TO_ERASE);
714 weight_i = (
ys/dy) - (ya/dy);
717 mParameters[
"constraint_set_name"].GetString(),
current_id,
718 r_nodes_master[node_j->Id()],
720 r_nodes_slave[rCurrentSlaveNode.
Id()],
724 p_current_constraint_7->Set(TO_ERASE);
727 weight_i = 1.0*dz/dy;
730 mParameters[
"constraint_set_name"].GetString(),
current_id,
731 r_nodes_slave[rCurrentSlaveNode.
Id()],
733 r_nodes_slave[rCurrentSlaveNode.
Id()],
737 p_current_constraint_8->Set(TO_ERASE);
739 else if (std::abs(dz)>numerical_limit)
741 double constant = (xa-
xs) - (za*(xb-xa)/dz) + (zs*(xb-xa)/dz);
743 double weight_i = 1.0 + (za/dz) - (zs/dz);
746 mParameters[
"constraint_set_name"].GetString(),
current_id,
747 r_nodes_master[node_i->Id()],
749 r_nodes_slave[rCurrentSlaveNode.
Id()],
753 p_current_constraint_1->Set(TO_ERASE);
755 weight_i = -1.0*dx/dz;
758 mParameters[
"constraint_set_name"].GetString(),
current_id,
759 r_nodes_master[node_i->Id()],
761 r_nodes_slave[rCurrentSlaveNode.
Id()],
765 p_current_constraint_2->Set(TO_ERASE);
768 weight_i = (zs/dz) - (za/dz);
771 mParameters[
"constraint_set_name"].GetString(),
current_id,
772 r_nodes_master[node_j->Id()],
774 r_nodes_slave[rCurrentSlaveNode.
Id()],
778 p_current_constraint_3->Set(TO_ERASE);
781 weight_i = 1.0*dx/dz;
784 mParameters[
"constraint_set_name"].GetString(),
current_id,
785 r_nodes_slave[rCurrentSlaveNode.
Id()],
787 r_nodes_slave[rCurrentSlaveNode.
Id()],
791 p_current_constraint_4->Set(TO_ERASE);
797 constant = (ya-
ys) - (za*(yb-ya)/dz) + (zs*(yb-ya)/dz);
799 weight_i = 1.0 + (za/dz) - (zs/dz);
802 mParameters[
"constraint_set_name"].GetString(),
current_id,
803 r_nodes_master[node_i->Id()],
805 r_nodes_slave[rCurrentSlaveNode.
Id()],
809 p_current_constraint_5->Set(TO_ERASE);
811 weight_i = -1.0*dy/dz;
814 mParameters[
"constraint_set_name"].GetString(),
current_id,
815 r_nodes_master[node_i->Id()],
817 r_nodes_slave[rCurrentSlaveNode.
Id()],
821 p_current_constraint_6->Set(TO_ERASE);
824 weight_i = (zs/dz) - (za/dz);
827 mParameters[
"constraint_set_name"].GetString(),
current_id,
828 r_nodes_master[node_j->Id()],
830 r_nodes_slave[rCurrentSlaveNode.
Id()],
834 p_current_constraint_7->Set(TO_ERASE);
837 weight_i = 1.0*dy/dz;
840 mParameters[
"constraint_set_name"].GetString(),
current_id,
841 r_nodes_slave[rCurrentSlaveNode.
Id()],
843 r_nodes_slave[rCurrentSlaveNode.
Id()],
847 p_current_constraint_8->Set(TO_ERASE);
849 else KRATOS_ERROR <<
"sliding edge is a point for slave node " << rCurrentSlaveNode.
Id() << std::endl;
860 bool mIsInitialized =
false;
Short class definition.
Definition: bucket.h:57
static const TComponentType & Get(const std::string &rName)
Retrieves a component with the specified name.
Definition: kratos_components.h:114
static double Norm3(const TVectorType &a)
Calculates the norm of vector "a" which is assumed to be of size 3.
Definition: math_utils.h:691
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
void RemoveMasterSlaveConstraintsFromAllLevels(Flags IdentifierFlag=TO_ERASE)
It erases all constraints identified by "IdentifierFlag" by removing the pointer.
Definition: model_part.cpp:1411
std::size_t IndexType
Pointer definition of ModelPart.
Definition: model_part.h:105
SizeType NumberOfMasterSlaveConstraints(IndexType ThisIndex=0) const
Definition: model_part.h:649
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
NodeType::Pointer pGetNode(IndexType NodeId, IndexType ThisIndex=0)
Definition: model_part.h:421
MeshType::NodesContainerType NodesContainerType
Nodes container. Which is a vector set of nodes with their Id's as key.
Definition: model_part.h:128
MasterSlaveConstraint::Pointer CreateNewMasterSlaveConstraint(const std::string &ConstraintName, IndexType Id, DofsVectorType &rMasterDofsVector, DofsVectorType &rSlaveDofsVector, const MatrixType &RelationMatrix, const VectorType &ConstantVector, IndexType ThisIndex=0)
Creates a new master-slave constraint in the current modelpart.
Definition: model_part.cpp:1234
ModelPart & GetSubModelPart(std::string const &SubModelPartName)
Definition: model_part.cpp:2029
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
This class defines the node.
Definition: node.h:65
TVariableType::Type & FastGetSolutionStepValue(const TVariableType &rThisVariable)
Definition: node.h:435
IndexType Id() const
Definition: node.h:262
double & Z0()
Definition: node.h:576
double & X0()
Definition: node.h:568
double & Y0()
Definition: node.h:572
const PointType & GetInitialPosition() const
Definition: node.h:559
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
double GetDouble() const
This method returns the double contained in the current Parameter.
Definition: kratos_parameters.cpp:657
int GetInt() const
This method returns the integer contained in the current Parameter.
Definition: kratos_parameters.cpp:666
void ValidateAndAssignDefaults(const Parameters &rDefaultParameters)
This function is designed to verify that the parameters under testing match the form prescribed by th...
Definition: kratos_parameters.cpp:1306
SizeType size() const
This method returns the total size of the current array parameter.
Definition: kratos_parameters.cpp:993
std::string GetString() const
This method returns the string contained in the current Parameter.
Definition: kratos_parameters.cpp:684
CoordinatesArrayType const & Coordinates() const
Definition: point.h:215
The base class for all processes in Kratos.
Definition: process.h:49
Definition: sliding_edge_process.h:38
DoubleVector::iterator DoubleVectorIterator
Definition: sliding_edge_process.h:47
ModelPart::MasterSlaveConstraintType::Pointer ConstraintPointer
Definition: sliding_edge_process.h:50
void CoupleSlaveToNeighborMasterNodesLineEquation(const NodeType &rCurrentSlaveNode, const NodeVector &rNeighborNodes, const DoubleVector &rNodalNeighborWeights, const SizeType &rNumberOfNeighbors)
Definition: sliding_edge_process.h:467
void CalculateNodalWeights(const DoubleVector &rResultingSquaredDistances, DoubleVector &rNodalNeighborWeights, const SizeType &rNumberOfNeighbors)
Definition: sliding_edge_process.h:186
void CoupleModelParts()
Definition: sliding_edge_process.h:112
void CoupleModelPartsCustom()
Definition: sliding_edge_process.h:433
double GetNodalDistance(const NodeType &node_i, const NodeType &node_j)
Definition: sliding_edge_process.h:421
void SetmIsInitialized(const bool &check)
Definition: sliding_edge_process.h:363
std::vector< NodeTypePointer > NodeVector
Definition: sliding_edge_process.h:43
std::size_t SizeType
Definition: sliding_edge_process.h:48
void ExecuteInitializeSolutionStep() override
This function will be executed at every time step BEFORE performing the solve phase.
Definition: sliding_edge_process.h:85
bool GetmIsInitialized() const
Definition: sliding_edge_process.h:364
std::vector< std::size_t > FindNearestNeighboursCustom(const NodeType &node_i, std::vector< double > &weights)
Definition: sliding_edge_process.h:368
SlidingEdgeProcess(ModelPart &rModelPart, Parameters InputParameters)
Constructor.
Definition: sliding_edge_process.h:61
void CoupleSlaveToNeighborMasterNodes(const NodeType &rCurrentSlaveNode, const NodeVector &rNeighborNodes, const DoubleVector &rNodalNeighborWeights, const SizeType &rNumberOfNeighbors)
Definition: sliding_edge_process.h:326
Bucket< 3, NodeType, NodeVector, NodeTypePointer, NodeIterator, DoubleVectorIterator > BucketType
Definition: sliding_edge_process.h:53
Tree< KDTreePartition< BucketType > > KDTree
Definition: sliding_edge_process.h:54
void CoupleSlaveToNeighborMasterNodesInitialAngledLine(const NodeType &rCurrentSlaveNode, const NodeVector &rNeighborNodes, const DoubleVector &rNodalNeighborWeights, const SizeType &rNumberOfNeighbors)
Definition: sliding_edge_process.h:210
ModelPart::NodesContainerType NodesArrayType
Definition: sliding_edge_process.h:44
void ExecuteFinalizeSolutionStep() override
This function will be executed at every time step AFTER performing the solve phase.
Definition: sliding_edge_process.h:101
Node ::Pointer NodeTypePointer
Definition: sliding_edge_process.h:42
void CreateListOfNodesOfMasterSubModelPart(NodeVector &rMasterNodeList)
Definition: sliding_edge_process.h:171
Variable< double > VariableType
Definition: sliding_edge_process.h:49
std::vector< double > DoubleVector
Definition: sliding_edge_process.h:46
std::vector< NodeTypePointer >::iterator NodeIterator
Definition: sliding_edge_process.h:45
KRATOS_CLASS_POINTER_DEFINITION(SlidingEdgeProcess)
Pointer definition of ApplyMultipointConstraintsProcess.
Node NodeType
Definition: sliding_edge_process.h:41
A generic tree data structure for spatial partitioning.
Definition: tree.h:190
#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
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::shared_ptr< T > shared_ptr
Definition: smart_pointers.h:27
int current_id
Output settings end ####.
Definition: script.py:194
xs
Definition: sp_statistics.py:65
ys
Definition: sp_statistics.py:66
integer i
Definition: TensorModule.f:17
integer l
Definition: TensorModule.f:17