| 291 | |
| 292 | |
| 293 | void PressureIndependMultiYield::elast2Plast(void) |
| 294 | { |
| 295 | int loadStage = loadStagex[matN]; |
| 296 | double frictionAngle = frictionAnglex[matN]; |
| 297 | int numOfSurfaces = numOfSurfacesx[matN]; |
| 298 | |
| 299 | if (loadStage != 1 || e2p == 1) return; |
| 300 | e2p = 1; |
| 301 | |
| 302 | if (currentStress.volume() > 0. && frictionAngle > 0.) { |
| 303 | //opserr << "WARNING:PressureIndependMultiYield::elast2Plast(): material in tension." << endln; |
| 304 | currentStress.setData(currentStress.deviator(),0); |
| 305 | } |
| 306 | |
| 307 | paramScaling(); // scale surface parameters corresponding to initial confinement |
| 308 | |
| 309 | // Active surface is 0, return |
| 310 | if (currentStress.deviatorLength() == 0.) return; |
| 311 | |
| 312 | // Find active surface |
| 313 | while (yieldFunc(currentStress, committedSurfaces, ++committedActiveSurf) > 0) { |
| 314 | if (committedActiveSurf == numOfSurfaces) { |
| 315 | //opserr <<"WARNING:PressureIndependMultiYield::elast2Plast(): stress out of failure surface"<<endln; |
| 316 | deviatorScaling(currentStress, committedSurfaces, numOfSurfaces); |
| 317 | initSurfaceUpdate(); |
| 318 | return; |
| 319 | } |
| 320 | } |
| 321 | committedActiveSurf--; |
| 322 | initSurfaceUpdate(); |
| 323 | } |
| 324 | |
| 325 | |
| 326 | int PressureIndependMultiYield::setTrialStrain (const Vector &strain) |
nothing calls this directly
no test coverage detected