60ContactSearchAlgorithm_Surface2FESurface :: createContactPairs()
63 for (
int slave_ce = 1; slave_ce <= this->
slaveContactSurface->giveNumberOfContactElements(); slave_ce++ ) {
66 auto contactPair = std::make_unique<ContactPair>(std::move(cp_slave));
78ContactSearchAlgorithm_Surface2FESurface_3d :: updateContactPairs(
TimeStep *tStep)
85 int closestContactElementId = -1;
91 if(slavePoint->giveContactElementId() == contactElement->giveNumber()) {
101 auto [inElement,localCoords, newGap,normal, t1, t2] = this->
masterContactSurface->findContactPointInElement_3d(slavePoint, contactElement, tStep);
107 if ( closestContactElementId == -1. || newGap < gap ) {
110 normalVector = normal;
111 tangentVector1 = -t1;
112 tangentVector2 = -t2;
113 contactPointLocalCoordinates = localCoords;
114 closestContactElementId = contactElement->giveNumber();
120 if(closestContactElementId) {
121 auto master_point = std::make_unique<FEContactPoint_Master>(this->
masterContactSurface, closestContactElementId, 2, contactPointLocalCoordinates);
122 cp->setMasterContactPoint(std::move(master_point));
123 cp->setNormalGap(gap);
124 cp->setNormalVector(normalVector);
125 cp->setTangentVector1(tangentVector1);
126 cp->setTangentVector2(tangentVector2);
141ContactSearchAlgorithm_Surface2FESurface_2d :: updateContactPairs(
TimeStep *tStep)
148 int closestContactElementId = -1;
149 FloatArray contactPointLocalCoordinates, contactPointGlobalCoordinates;
150 double gap = std::numeric_limits<double>::infinity();
154 if(slavePoint->giveContactElementId() == masterContactElement->giveNumber()) {
165 auto [inElement,localCoords, newGap,normal, t1] = this->
masterContactSurface->findContactPointInElement_2d(slavePoint, masterContactElement, tStep);
171 if ( closestContactElementId == -1. || newGap < gap ) {
174 normalVector = normal;
176 contactPointLocalCoordinates = localCoords;
177 contactPointGlobalCoordinates = globalCoords;
178 closestContactElementId = masterContactElement->giveNumber();
184 if(closestContactElementId) {
185 auto masterContactPoint = std::make_unique<FEContactPoint_Master>(this->
masterContactSurface, closestContactElementId, 1, contactPointLocalCoordinates);
186 cp->setMasterContactPoint(std::move(masterContactPoint));
187 cp->setNormalGap(gap);
188 cp->setNormalVector(normalVector);
189 cp->setTangentVector1(tangentVector1);