[FAQ] Gap calculation in node node contact.

Includes point to point/edge/face and edge to edge contacts

[FAQ] Gap calculation in node node contact.

Postby zhouxinwei » Wed May 16, 2018 8:00 pm

Many of our users are asking what will happen if the two nodes overlap (i.e. sum to two radii is bigger than the center-to-center distance) at time zero.

In MARS, when a node-node contact is created, a variable called Distance At Contact (dac) is calculated as:
Code: Select all
    // tk1, tk2 are the contact thickness set via input for node list 1 and node list 2, respectively
    dac = max(n1->getRad(), tk1) +  max(n2->getRad(), tk2);
    dst = n1->calcDist(n2); // distance between two nodes (center to center)
    if (!adc) // adc is false by default
        dac = min(dac, dst);

So, if the two nodes overlap at time zero, dac is set to the current distance (dac == dst holds).

When MARS evaluates the forces within the contact object, it first checks if nodes are close enough:
Code: Select all
    // dst: distance between two nodes (center to center)
    real gap = dst - dac;
    if (gap > cdd) { // cdd: contact detection distance via input
        remove();
        return;
    } else if (gap >= 0.) {
        csv[0] = 0.;
        return;
    }

From the second code segment, the contact gap is checked against dac. Therefore, if the two nodes overlap at time zero, in the first step, dst == dac holds, and the contact is inactive.

This logic is implemented to prevent a model from exploding at time zero.
zhouxinwei
 
Posts: 208
Joined: Thu Jul 09, 2015 7:12 pm

Return to Contacts

Who is online

Users browsing this forum: No registered users and 1 guest

cron