| 1275 | |
| 1276 | |
| 1277 | void LinearElasticSpring::addPDeltaStiff(Matrix &kLocal, const Vector& qBasic) |
| 1278 | { |
| 1279 | int dirID; |
| 1280 | double N = 0.0; |
| 1281 | |
| 1282 | // get axial force |
| 1283 | for (int i=0; i<numDIR; i++) { |
| 1284 | if (dir(i) == 0) |
| 1285 | N = qBasic(i); |
| 1286 | } |
| 1287 | |
| 1288 | if (N != 0.0) { |
| 1289 | for (int i=0; i<numDIR; i++) { |
| 1290 | dirID = dir(i); // direction 0 to 5; |
| 1291 | |
| 1292 | // switch on dimensionality of element |
| 1293 | switch (elemType) { |
| 1294 | case D2N4: |
| 1295 | if (dirID == 1) { |
| 1296 | double NoverL = N/L; |
| 1297 | NoverL *= 1.0-Mratio(2)-Mratio(3); |
| 1298 | kLocal(1,1) += NoverL; |
| 1299 | kLocal(1,3) -= NoverL; |
| 1300 | kLocal(3,1) -= NoverL; |
| 1301 | kLocal(3,3) += NoverL; |
| 1302 | } |
| 1303 | break; |
| 1304 | case D2N6: |
| 1305 | if (dirID == 1) { |
| 1306 | double NoverL = N/L; |
| 1307 | NoverL *= 1.0-Mratio(2)-Mratio(3); |
| 1308 | kLocal(1,1) += NoverL; |
| 1309 | kLocal(1,4) -= NoverL; |
| 1310 | kLocal(4,1) -= NoverL; |
| 1311 | kLocal(4,4) += NoverL; |
| 1312 | } |
| 1313 | else if (dirID == 2) { |
| 1314 | kLocal(2,1) -= Mratio(2)*N; |
| 1315 | kLocal(2,4) += Mratio(2)*N; |
| 1316 | kLocal(5,1) -= Mratio(3)*N; |
| 1317 | kLocal(5,4) += Mratio(3)*N; |
| 1318 | } |
| 1319 | break; |
| 1320 | case D3N6: |
| 1321 | if (dirID == 1) { |
| 1322 | double NoverL = N/L; |
| 1323 | NoverL *= 1.0-Mratio(2)-Mratio(3); |
| 1324 | kLocal(1,1) += NoverL; |
| 1325 | kLocal(1,4) -= NoverL; |
| 1326 | kLocal(4,1) -= NoverL; |
| 1327 | kLocal(4,4) += NoverL; |
| 1328 | } |
| 1329 | else if (dirID == 2) { |
| 1330 | double NoverL = N/L; |
| 1331 | NoverL *= 1.0-Mratio(0)-Mratio(1); |
| 1332 | kLocal(2,2) += NoverL; |
| 1333 | kLocal(2,5) -= NoverL; |
| 1334 | kLocal(5,2) -= NoverL; |
no outgoing calls
no test coverage detected