MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / addPDeltaForces

Method addPDeltaForces

SRC/element/twoNodeLink/TwoNodeLink.cpp:1578–1668  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1576
1577
1578void TwoNodeLink::addPDeltaForces(Vector &pLocal, const Vector& qBasic)
1579{
1580 int dirID;
1581 double N = 0.0;
1582 double deltal1 = 0.0;
1583 double deltal2 = 0.0;
1584
1585 for (int i=0; i<numDIR; i++) {
1586 dirID = (*dir)(i); // direction 0 to 5;
1587
1588 // get axial force and local disp differences
1589 if (dirID == 0)
1590 N = qBasic(i);
1591 else if (dirID == 1 && numDIM > 1)
1592 deltal1 = ul(1+numDOF/2) - ul(1);
1593 else if (dirID == 2 && numDIM > 2)
1594 deltal2 = ul(2+numDOF/2) - ul(2);
1595 }
1596
1597 if (N != 0.0 && (deltal1 != 0.0 || deltal2 != 0.0)) {
1598 for (int i=0; i<numDIR; i++) {
1599 dirID = (*dir)(i); // direction 0 to 5;
1600
1601 // switch on dimensionality of element
1602 switch (elemType) {
1603 case D2N4:
1604 if (dirID == 1) {
1605 double VpDelta = N*deltal1/L;
1606 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1607 pLocal(1) -= VpDelta;
1608 pLocal(3) += VpDelta;
1609 }
1610 break;
1611 case D2N6:
1612 if (dirID == 1) {
1613 double VpDelta = N*deltal1/L;
1614 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1615 pLocal(1) -= VpDelta;
1616 pLocal(4) += VpDelta;
1617 }
1618 else if (dirID == 2) {
1619 double MpDelta = N*deltal1;
1620 pLocal(2) += Mratio(2)*MpDelta;
1621 pLocal(5) += Mratio(3)*MpDelta;
1622 }
1623 break;
1624 case D3N6:
1625 if (dirID == 1) {
1626 double VpDelta = N*deltal1/L;
1627 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1628 pLocal(1) -= VpDelta;
1629 pLocal(4) += VpDelta;
1630 }
1631 else if (dirID == 2) {
1632 double VpDelta = N*deltal2/L;
1633 VpDelta *= 1.0-Mratio(0)-Mratio(1);
1634 pLocal(2) -= VpDelta;
1635 pLocal(5) += VpDelta;

Callers 2

getResponseMethod · 0.95
TwoNodeLink.cppFile · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected