| 1182 | |
| 1183 | |
| 1184 | void 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; |
no outgoing calls
no test coverage detected