int SingleFPSimple2d::sendSelf(int commitTag, Channel &sChannel) { // send element parameters static Vector data(15); data(0) = this->getTag(); data(1) = Reff; data(2) = kInit; data(3) = shearDistI; data(4) = addRayleigh; data(5) = mass; data(6) = maxIter; data(7) = tol; data(8) = kFactUplift; data(9) = x.Size(); data(10) = y.Size(); data(11) = alphaM; data(12) = betaK; data(13) = betaK0; data(14) = betaKc; sChannel.sendVector(0, commitTag, data); // send the two end nodes sChannel.sendID(0, commitTag, connectedExternalNodes); // send the friction model class tag ID frnClassTag(1); frnClassTag(0) = theFrnMdl->getClassTag(); sChannel.sendID(0, commitTag, frnClassTag); // send the friction model theFrnMdl->sendSelf(commitTag, sChannel); // send the material class tags ID matClassTags(2); for (int i=0; i<2; i++) matClassTags(i) = theMaterials[i]->getClassTag(); sChannel.sendID(0, commitTag, matClassTags); // send the material models for (int i=0; i<2; i++) theMaterials[i]->sendSelf(commitTag, sChannel); // send remaining data if (x.Size() == 3) sChannel.sendVector(0, commitTag, x); if (y.Size() == 3) sChannel.sendVector(0, commitTag, y); return 0; }
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; }