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

Method addPDeltaForces

SRC/element/twoNodeLink/LinearElasticSpring.cpp:1184–1274  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1182
1183
1184void LinearElasticSpring::addPDeltaForces(Vector &pLocal, const Vector& qBasic)
1185{
1186 int dirID;
1187 double N = 0.0;
1188 double deltal1 = 0.0;
1189 double deltal2 = 0.0;
1190
1191 for (int i=0; i<numDIR; i++) {
1192 dirID = dir(i); // direction 0 to 5;
1193
1194 // get axial force and local disp differences
1195 if (dirID == 0)
1196 N = qBasic(i);
1197 else if (dirID == 1 && numDIM > 1)
1198 deltal1 = ul(1+numDOF/2) - ul(1);
1199 else if (dirID == 2 && numDIM > 2)
1200 deltal2 = ul(2+numDOF/2) - ul(2);
1201 }
1202
1203 if (N != 0.0 && (deltal1 != 0.0 || deltal2 != 0.0)) {
1204 for (int i=0; i<numDIR; i++) {
1205 dirID = dir(i); // direction 0 to 5;
1206
1207 // switch on dimensionality of element
1208 switch (elemType) {
1209 case D2N4:
1210 if (dirID == 1) {
1211 double VpDelta = N*deltal1/L;
1212 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1213 pLocal(1) -= VpDelta;
1214 pLocal(3) += VpDelta;
1215 }
1216 break;
1217 case D2N6:
1218 if (dirID == 1) {
1219 double VpDelta = N*deltal1/L;
1220 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1221 pLocal(1) -= VpDelta;
1222 pLocal(4) += VpDelta;
1223 }
1224 else if (dirID == 2) {
1225 double MpDelta = N*deltal1;
1226 pLocal(2) += Mratio(2)*MpDelta;
1227 pLocal(5) += Mratio(3)*MpDelta;
1228 }
1229 break;
1230 case D3N6:
1231 if (dirID == 1) {
1232 double VpDelta = N*deltal1/L;
1233 VpDelta *= 1.0-Mratio(2)-Mratio(3);
1234 pLocal(1) -= VpDelta;
1235 pLocal(4) += VpDelta;
1236 }
1237 else if (dirID == 2) {
1238 double VpDelta = N*deltal2/L;
1239 VpDelta *= 1.0-Mratio(0)-Mratio(1);
1240 pLocal(2) -= VpDelta;
1241 pLocal(5) += VpDelta;

Callers 2

getResponseMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected