full constructor
| 236 | |
| 237 | // full constructor |
| 238 | SSPquad::SSPquad(int tag, int Nd1, int Nd2, int Nd3, int Nd4, NDMaterial &theMat, |
| 239 | const char *type, double thick, double b1, double b2) |
| 240 | :Element(tag,ELE_TAG_SSPquad), |
| 241 | theMaterial(0), |
| 242 | mExternalNodes(SSPQ_NUM_NODE), |
| 243 | mTangentStiffness(SSPQ_NUM_DOF,SSPQ_NUM_DOF), |
| 244 | mInternalForces(SSPQ_NUM_DOF), |
| 245 | Q(SSPQ_NUM_DOF), |
| 246 | mMass(SSPQ_NUM_DOF,SSPQ_NUM_DOF), |
| 247 | mNodeCrd(2,4), |
| 248 | Mmem(3,SSPQ_NUM_DOF), |
| 249 | Kstab(SSPQ_NUM_DOF,SSPQ_NUM_DOF), |
| 250 | mThickness(thick), |
| 251 | applyLoad(0) |
| 252 | { |
| 253 | mExternalNodes(0) = Nd1; |
| 254 | mExternalNodes(1) = Nd2; |
| 255 | mExternalNodes(2) = Nd3; |
| 256 | mExternalNodes(3) = Nd4; |
| 257 | |
| 258 | mThickness = thick; |
| 259 | |
| 260 | b[0] = b1; |
| 261 | b[1] = b2; |
| 262 | |
| 263 | appliedB[0] = 0.0; |
| 264 | appliedB[1] = 0.0; |
| 265 | |
| 266 | // get copy of the material object |
| 267 | NDMaterial *theMatCopy = theMat.getCopy(type); |
| 268 | if (theMatCopy != 0) { |
| 269 | theMaterial = (NDMaterial *)theMatCopy; |
| 270 | } else { |
| 271 | opserr << "SSPquad::SSPquad - failed to get copy of material model\n";; |
| 272 | } |
| 273 | |
| 274 | // check material |
| 275 | if (theMaterial == 0) { |
| 276 | opserr << "SSPquad::SSPquad - failed to allocate material model pointer\n"; |
| 277 | exit(-1); |
| 278 | } |
| 279 | |
| 280 | // check the type |
| 281 | if (strcmp(type,"PlaneStrain") != 0 && strcmp(type,"PlaneStress") != 0) { |
| 282 | opserr << "SSPquad::SSPquad - improper material type: " << type << "for SSPquad\n"; |
| 283 | exit(-1); |
| 284 | } |
| 285 | } |
| 286 | |
| 287 | // null constructor |
| 288 | SSPquad::SSPquad() |