int SingleFPSimple2d::recvSelf(int commitTag, Channel &rChannel, FEM_ObjectBroker &theBroker) { // delete material memory for (int i=0; i<2; i++) if (theMaterials[i] != 0) delete theMaterials[i]; // receive element parameters static Vector data(11); rChannel.recvVector(0, commitTag, data); this->setTag((int)data(0)); R = data(1); h = data(2); uy = data(3); shearDistI = data(4); addRayleigh = (int)data(5); mass = data(6); maxIter = (int)data(7); tol = data(8); // receive the two end nodes rChannel.recvID(0, commitTag, connectedExternalNodes); // receive the friction model class tag ID frnClassTag(1); rChannel.recvID(0, commitTag, frnClassTag); // receive the friction model theFrnMdl = theBroker.getNewFrictionModel(frnClassTag(0)); if (theFrnMdl == 0) { opserr << "SingleFPSimple2d::recvSelf() - " << "failed to get blank friction model.\n"; return -1; } theFrnMdl->recvSelf(commitTag, rChannel, theBroker); // receive the material class tags ID matClassTags(2); rChannel.recvID(0, commitTag, matClassTags); // receive the material models for (int i=0; i<2; i++) { theMaterials[i] = theBroker.getNewUniaxialMaterial(matClassTags(i)); if (theMaterials[i] == 0) { opserr << "SingleFPSimple2d::recvSelf() - " << "failed to get blank uniaxial material.\n"; return -2; } theMaterials[i]->recvSelf(commitTag, rChannel, theBroker); } // receive remaining data if ((int)data(9) == 3) { x.resize(3); rChannel.recvVector(0, commitTag, x); } if ((int)data(10) == 3) { y.resize(3); rChannel.recvVector(0, commitTag, y); } // initialize initial stiffness matrix kbInit.Zero(); kbInit(0,0) = theMaterials[0]->getInitialTangent(); kbInit(1,1) = kbInit(0,0)*DBL_EPSILON; kbInit(2,2) = theMaterials[1]->getInitialTangent(); // initialize other variables this->revertToStart(); return 0; }