| 279 | } |
| 280 | |
| 281 | void |
| 282 | SSPquadUP::setDomain(Domain *theDomain) |
| 283 | { |
| 284 | theNodes[0] = theDomain->getNode(mExternalNodes(0)); |
| 285 | theNodes[1] = theDomain->getNode(mExternalNodes(1)); |
| 286 | theNodes[2] = theDomain->getNode(mExternalNodes(2)); |
| 287 | theNodes[3] = theDomain->getNode(mExternalNodes(3)); |
| 288 | |
| 289 | for (int i = 0; i < 4; i++) { |
| 290 | if (theNodes[i] == 0) { |
| 291 | return; // don't go any further - otherwise segmentation fault |
| 292 | } |
| 293 | } |
| 294 | |
| 295 | // initialize coordinate vectors |
| 296 | const Vector &mIcrd_1 = theNodes[0]->getCrds(); |
| 297 | const Vector &mIcrd_2 = theNodes[1]->getCrds(); |
| 298 | const Vector &mIcrd_3 = theNodes[2]->getCrds(); |
| 299 | const Vector &mIcrd_4 = theNodes[3]->getCrds(); |
| 300 | |
| 301 | // coordinate matrix |
| 302 | mNodeCrd(0,0) = mIcrd_1(0); |
| 303 | mNodeCrd(1,0) = mIcrd_1(1); |
| 304 | mNodeCrd(0,1) = mIcrd_2(0); |
| 305 | mNodeCrd(1,1) = mIcrd_2(1); |
| 306 | mNodeCrd(0,2) = mIcrd_3(0); |
| 307 | mNodeCrd(1,2) = mIcrd_3(1); |
| 308 | mNodeCrd(0,3) = mIcrd_4(0); |
| 309 | mNodeCrd(1,3) = mIcrd_4(1); |
| 310 | |
| 311 | // establish jacobian terms |
| 312 | J0 = ((mNodeCrd(0,1)-mNodeCrd(0,3))*(mNodeCrd(1,2)-mNodeCrd(1,0))+(mNodeCrd(0,2)-mNodeCrd(0,0))*(mNodeCrd(1,3)-mNodeCrd(1,1)))/8; |
| 313 | J1 = ((mNodeCrd(0,1)-mNodeCrd(0,0))*(mNodeCrd(1,2)-mNodeCrd(1,3))+(mNodeCrd(0,2)-mNodeCrd(0,3))*(mNodeCrd(1,0)-mNodeCrd(1,1)))/24; |
| 314 | J2 = ((mNodeCrd(0,0)-mNodeCrd(0,3))*(mNodeCrd(1,2)-mNodeCrd(1,1))+(mNodeCrd(0,2)-mNodeCrd(0,1))*(mNodeCrd(1,3)-mNodeCrd(1,0)))/24; |
| 315 | |
| 316 | // establish stabilization terms (based on initial material tangent, only need to compute once) |
| 317 | GetStab(); |
| 318 | |
| 319 | // establish mass matrix for solid phase (constant, only need to compute once) |
| 320 | GetSolidMass(); |
| 321 | |
| 322 | // establish permeability matrix (constant, only need to compute once) |
| 323 | GetPermeabilityMatrix(); |
| 324 | |
| 325 | //LM change |
| 326 | // Compute consistent nodal loads due to surface pressure (at any side) |
| 327 | this->setPressureLoadAtNodes(); |
| 328 | //LM change |
| 329 | |
| 330 | // call the base-class method |
| 331 | this->DomainComponent::setDomain(theDomain); |
| 332 | } |
| 333 | |
| 334 | int |
| 335 | SSPquadUP::commitState(void) |
nothing calls this directly
no test coverage detected