int ElasticBeam3d::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; static Vector data(17); res += theChannel.recvVector(this->getDbTag(), cTag, data); if (res < 0) { opserr << "ElasticBeam3d::recvSelf -- could not receive data Vector\n"; return res; } A = data(0); E = data(1); G = data(2); Jx = data(3); Iy = data(4); Iz = data(5); rho = data(6); cMass = (int)data(7); this->setTag((int)data(8)); connectedExternalNodes(0) = (int)data(9); connectedExternalNodes(1) = (int)data(10); alphaM = data(13); betaK = data(14); betaK0 = data(15); betaKc = data(16); // Check if the CoordTransf is null; if so, get a new one int crdTag = (int)data(11); if (theCoordTransf == 0) { theCoordTransf = theBroker.getNewCrdTransf(crdTag); if (theCoordTransf == 0) { opserr << "ElasticBeam3d::recvSelf -- could not get a CrdTransf3d\n"; exit(-1); } } // Check that the CoordTransf is of the right type; if not, delete // the current one and get a new one of the right type if (theCoordTransf->getClassTag() != crdTag) { delete theCoordTransf; theCoordTransf = theBroker.getNewCrdTransf(crdTag); if (theCoordTransf == 0) { opserr << "ElasticBeam3d::recvSelf -- could not get a CrdTransf3d\n"; exit(-1); } } // Now, receive the CoordTransf theCoordTransf->setDbTag((int)data(12)); res += theCoordTransf->recvSelf(cTag, theChannel, theBroker); if (res < 0) { opserr << "ElasticBeam3d::recvSelf -- could not receive CoordTransf\n"; return res; } return res; }
int NewtonLineSearch::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { static ID data(1); if (theChannel.recvID(0, cTag, data) < 0) { opserr << "NewtonLineSearch::recvSelf(int cTag, Channel &theChannel) - failed to recv data\n"; return -1; } int lineSearchClassTag = data(0); if (theLineSearch == 0 || theLineSearch->getClassTag() != lineSearchClassTag) { if (theLineSearch != 0) delete theLineSearch; theLineSearch = theBroker.getLineSearch(lineSearchClassTag); if (theLineSearch == 0) { opserr << "NewtonLineSearch::recvSelf(int cTag, Channel &theChannel) - failed to obtain a LineSerach object\n"; return -1; } } if (theLineSearch->recvSelf(cTag, theChannel, theBroker) < 0) { opserr << "NewtonLineSearch::recvSelf(int cTag, Channel &theChannel) - failed to recv the LineSerach object\n"; return -1; } return 0; }
int CorotTruss::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res; int dataTag = this->getDbTag(); // truss creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(7); res = theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING Truss::recvSelf() - failed to receive Vector\n"; return -1; } this->setTag((int)data(0)); numDIM = (int)data(1); numDOF = (int)data(2); A = data(3); rho = data(6); // truss now receives the tags of it's two external nodes res = theChannel.recvID(dataTag, commitTag, connectedExternalNodes); if (res < 0) { opserr << "WARNING Truss::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return -2; } // finally truss creates a material object of the correct type, // sets its database tag and asks this new object to recveive itself. int matClass = (int)data(4); int matDb = (int)data(5); // check if we have a material object already & if we do if of right type if ((theMaterial == 0) || (theMaterial->getClassTag() != matClass)) { // if old one .. delete it if (theMaterial != 0) delete theMaterial; // create a new material object theMaterial = theBroker.getNewUniaxialMaterial(matClass); if (theMaterial == 0) { opserr << "WARNING Truss::recvSelf() - " << this->getTag() << "failed to get a blank Material of type: " << matClass << endln; return -3; } } theMaterial->setDbTag(matDb); // note: we set the dbTag before we receive the material res = theMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "WARNING Truss::recvSelf() - " << this->getTag() << " failed to receive its Material\n"; return -3; } return 0; }
int PeriodicNewton::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { static ID data(3); int result; int dataTag = this->getDbTag(); result = theChannel.recvID(dataTag, cTag, data); if (result != 0) { opserr << "PeriodicNewton::recvSelf() - failed to receive ID\n"; return result; } int ctType = data(0); int ctDb = data(1); maxCount = data(2); theTest = theBroker.getNewConvergenceTest(ctType); theTest->setDbTag(ctDb); result = theTest->recvSelf(cTag, theChannel, theBroker); if (result != 0) { opserr << "PeriodicNewton::recvSelf() - failed to recv CTest object\n"; return result; } return 0; }
int BeamContact2Dp::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // BeamContact2Dp creates a vector, receives the vector, and then sets the internal // data with the data in the vector static Vector data(6); res = theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING BeamContact2Dp::recvSelf() - failed to receive Vector\n"; return -1; } this->setTag((int)data(0)); mRadius = data(1); mPenalty = data(2); mIniContact = (int)data(3); // BeamContact2Dp now receives the tags of its four external nodes res = theChannel.recvID(dataTag, commitTag, mExternalNodes); if (res < 0) { opserr << "WARNING BeamContact2Dp::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return -2; } // finally, BeamContact2Dp creates a material object of the correct type, sets its // database tag, and asks this new object to receive itself int matClass = (int)data(4); int matDb = (int)data(5); // check if material object exists and that it is the right type if ((theMaterial == 0) || (theMaterial->getClassTag() != matClass)) { // if old one, delete it if (theMaterial != 0) delete theMaterial; // create new material object NDMaterial *theMatCopy = theBroker.getNewNDMaterial(matClass); theMaterial = (ContactMaterial2D *)theMatCopy; if (theMaterial == 0) { opserr << "WARNING BeamContact2Dp::recvSelf() - " << this->getTag() << " failed to get a blank Material of type " << matClass << endln; return -3; } } // NOTE: we set the dbTag before we receive the material theMaterial->setDbTag(matDb); res = theMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "WARNING BeamContact2Dp::recvSelf() - " << this->getTag() << " failed to receive its Material\n"; return -3; } return 0; }
int PathIndependentMaterial::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; static ID classTags(3); int dbTag = this->getDbTag(); res = theChannel.recvID(dbTag, cTag, classTags); if (res < 0) { opserr << "PathIndependentMaterial::recvSelf -- could not receive ID\n"; return res; } this->setTag(int(classTags(2))); // Check if the material is null; if so, get a new one if (theMaterial == 0) { theMaterial = theBroker.getNewUniaxialMaterial(classTags(0)); if (theMaterial == 0) { opserr << " PathIndependentMaterial::recvSelf -- could not get a UniaxialMaterial\n"; return -1; } } // Check that the material is of the right type; if not, delete // the current one and get a new one of the right type if (theMaterial->getClassTag() != classTags(0)) { delete theMaterial; theMaterial = theBroker.getNewUniaxialMaterial(classTags(0)); if (theMaterial == 0) { opserr << "PathIndependentMaterial::recvSelf -- could not get a UniaxialMaterial\n"; exit(-1); } } // Now, receive the material theMaterial->setDbTag(classTags(1)); res += theMaterial->recvSelf(cTag, theChannel, theBroker); if (res < 0) { opserr << "PathIndependentMaterial::recvSelf -- could not receive UniaxialMaterial\n"; return res; } return res; }
int ElastomericBearing2d::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(9); rChannel.recvVector(0, commitTag, data); this->setTag((int)data(0)); k0 = data(1); qYield = data(2); k2 = data(3); shearDistI = data(4); addRayleigh = (int)data(5); mass = data(6); double ke = k0 + k2; // receive the two end nodes rChannel.recvID(0, commitTag, connectedExternalNodes); // 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 << "ElastomericBearing2d::recvSelf() - " << "failed to get blank uniaxial material.\n"; return -2; } theMaterials[i]->recvSelf(commitTag, rChannel, theBroker); } // receive remaining data if ((int)data(7) == 3) { x.resize(3); rChannel.recvVector(0, commitTag, x); } if ((int)data(8) == 3) { y.resize(3); rChannel.recvVector(0, commitTag, y); } // initialize initial stiffness matrix kbInit.Zero(); kbInit(0,0) = theMaterials[0]->getInitialTangent(); kbInit(1,1) = ke; kbInit(2,2) = theMaterials[1]->getInitialTangent(); // initialize other variables this->revertToStart(); return 0; }
int CoupledZeroLength::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // CoupledZeroLength creates an ID, receives the ID and then sets the // internal data with the data in the ID static ID idData(10); res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "CoupledZeroLength::recvSelf -- failed to receive ID data\n"; return res; } res += theChannel.recvMatrix(dataTag, commitTag, transformation); if (res < 0) { opserr << "CoupledZeroLength::recvSelf -- failed to receive transformation Matrix\n"; return res; } this->setTag(idData(0)); dimension = idData(1); numDOF = idData(2); connectedExternalNodes(0) = idData(3); connectedExternalNodes(1) = idData(4); useRayleighDamping = idData(5); dirn1 = idData(6); dirn1 = idData(7); int matDbTag = idData(8); int matClassTag = idData(9); // If null, get a new one from the broker if (theMaterial == 0 || theMaterial->getClassTag() != matClassTag) { if (theMaterial != 0) delete theMaterial; theMaterial = theBroker.getNewUniaxialMaterial(matClassTag); if (theMaterial == 0) { opserr << "CoupledZeroLength::recvSelf -- failed to allocate new Material " << endln; return -1; } } // Receive the materials theMaterial->setDbTag(matDbTag); res = theMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "CoupledZeroLength::recvSelf -- failed to receive new Material1d " << endln; } return res; }
int BeamFiberMaterial2d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; // recv an id containg the tag and associated materials class and db tags static ID idData(3); res = theChannel.sendID(this->getDbTag(), commitTag, idData); if (res < 0) { opserr << "BeamFiberMaterial2d::sendSelf() - failed to send id data\n"; return res; } this->setTag(idData(0)); int matClassTag = idData(1); // if the associated material has not yet been created or is of the wrong type // create a new material for recvSelf later if (theMaterial == 0 || theMaterial->getClassTag() != matClassTag) { if (theMaterial != 0) delete theMaterial; theMaterial = theBroker.getNewNDMaterial(matClassTag); if (theMaterial == 0) { opserr << "BeamFiberMaterial2d::recvSelf() - failed to get a material of type: " << matClassTag << endln; return -1; } } theMaterial->setDbTag(idData(2)); // recv a vector containing strains and set the strains static Vector vecData(4); res = theChannel.recvVector(this->getDbTag(), commitTag, vecData); if (res < 0) { opserr << "BeamFiberMaterial2d::sendSelf() - failed to send vector data\n"; return res; } Cstrain22 = vecData(0); Cstrain33 = vecData(1); Cgamma31 = vecData(2); Cgamma23 = vecData(3); Tstrain22 = Cstrain22; Tstrain33 = Cstrain33; Tgamma31 = Cgamma31; Tgamma23 = Cgamma23; // now receive the materials data res = theMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) opserr << "BeamFiberMaterial2d::sendSelf() - failed to send vector material\n"; return res; }
int MinMaxMaterial::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int dbTag = this->getDbTag(); static ID dataID(3); if (theChannel.recvID(dbTag, cTag, dataID) < 0) { opserr << "MinMaxMaterial::recvSelf() - failed to get the ID\n"; return -1; } this->setTag(int(dataID(0))); // as no way to change material, don't have to check classTag of the material if (theMaterial == 0) { int matClassTag = int(dataID(1)); theMaterial = theBroker.getNewUniaxialMaterial(matClassTag); if (theMaterial == 0) { opserr << "MinMaxMaterial::recvSelf() - failed to create Material with classTag " << dataID(0) << endln; return -2; } } theMaterial->setDbTag(dataID(2)); static Vector dataVec(3); if (theChannel.recvVector(dbTag, cTag, dataVec) < 0) { opserr << "MinMaxMaterial::recvSelf() - failed to get the Vector\n"; return -3; } minStrain = dataVec(0); maxStrain = dataVec(1); if (dataVec(2) == 1.0) Cfailed = true; else Cfailed = false; Tfailed = Cfailed; if (theMaterial->recvSelf(cTag, theChannel, theBroker) < 0) { opserr << "MinMaxMaterial::recvSelf() - failed to get the Material\n"; return -4; } return 0; }
int PlateRebarMaterial::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // recv an id containg the tag and associated materials class and db tags static ID idData(3); res = theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "PlateRebarMaterial::sendSelf() - failed to receive id data" << endln; return res; } this->setTag(idData(0)); int matClassTag = idData(1); if (theMat->getClassTag() != matClassTag) { if (theMat != 0) delete theMat; theMat = theBroker.getNewUniaxialMaterial(matClassTag); if (theMat == 0) { opserr << "PlateRebarMaterial::recvSelf() - failed to get a material of type: " << matClassTag << endln; return -1; } } theMat->setDbTag(idData(2)); static Vector vecData(1); res = theChannel.recvVector(dataTag, commitTag, vecData); if (res < 0) { opserr << "PlateRebarMaterial::sendSelf() - failed to receive vector data" << endln; return res; } angle = vecData(0); double rang = angle * 0.0174532925; c = cos(rang); s = sin(rang); // now receive the materials data res = theMat->recvSelf(commitTag, theChannel, theBroker); if (res < 0) opserr << "PlateRebarMaterial::sendSelf() - failed to receive material1" << endln; return res; }
int UniformExcitation::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int dbTag = this->getDbTag(); static Vector data(6); int res = theChannel.recvVector(dbTag, commitTag, data); if (res < 0) { opserr << "UniformExcitation::recvSelf() - channel failed to recv data\n"; return res; } this->setTag(data(0)); theDof = data(1); vel0 = data(2); fact = data(5); int motionClassTag = data(3); int motionDbTag = data(4); if (theMotion == 0 || theMotion->getClassTag() != motionClassTag) { if (theMotion != 0) delete theMotion; theMotion = theBroker.getNewGroundMotion(motionClassTag); if (theMotion == 0) { opserr << "UniformExcitation::recvSelf() - could not create a grond motion\n"; return -3; } // have to set the motion in EarthquakePattern base class if (numMotions == 0) this->addMotion(*theMotion); else theMotions[0] = theMotion; } theMotion->setDbTag(motionDbTag); res = theMotion->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "UniformExcitation::recvSelf() - motion could not receive itself \n"; return res; } return 0; }
int NineNodeMixedQuad::recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); static ID idData(28); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING NineNodeMixedQuad::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } this->setTag(idData(18)); connectedExternalNodes(0) = idData(19); connectedExternalNodes(1) = idData(20); connectedExternalNodes(2) = idData(21); connectedExternalNodes(3) = idData(22); connectedExternalNodes(4) = idData(23); connectedExternalNodes(5) = idData(24); connectedExternalNodes(6) = idData(25); connectedExternalNodes(7) = idData(26); connectedExternalNodes(8) = idData(27); int i; if (materialPointers[0] == 0) { for (i = 0; i < 9; i++) { int matClassTag = idData(i); int matDbTag = idData(i+9); // Allocate new material with the sent class tag materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "NineNodeMixedQuad::recvSelf() - Broker could not create NDMaterial of class type" << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NineNodeMixedQuad::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // Number of materials is the same, receive materials into current space else { for (i = 0; i < 9; i++) { int matClassTag = idData(i); int matDbTag = idData(i+9); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (materialPointers[i]->getClassTag() != matClassTag) { delete materialPointers[i]; materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "NineNodeMixedQuad::recvSelf() - Broker could not create NDMaterial of class type" << matClassTag << endln; exit(-1); } } // Receive the material materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NineNodeMixedQuad::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int RAReinforcedConcretePlateFiber::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // Quad creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(9); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING RAReinforcedConcretePlateFiber::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); rho = data(1); angle1 = data(2); angle2 = data(3); rou1 = data(4); rou2 = data(5); fpc = data(6); fy = data(7); E0 = data(8); static ID idData(8); // now receives the tags of its materials res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING RAReinforcedConcretePlateFiber::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } if (theMaterial == 0) { // Allocate new materials theMaterial = new UniaxialMaterial *[4]; if (theMaterial == 0) { opserr << "RAReinforcedConcretePlateFiber::recvSelf() - Could not allocate UniaxialMaterial* array\n"; return -1; } for (int i = 0; i < 4; i++) { int matClassTag = idData(i); int matDbTag = idData(i+4); // Allocate new material with the sent class tag theMaterial[i] = theBroker.getNewUniaxialMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "RAReinforcedConcretePlateFiber::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "RAReinforcedConcretePlateFiber::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (int i = 0; i < 4; i++) { int matClassTag = idData(i); int matDbTag = idData(i+4); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (theMaterial[i]->getClassTag() != matClassTag) { delete theMaterial[i]; theMaterial[i] = theBroker.getNewUniaxialMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "RAReinforcedConcretePlateFiber::recvSelf() - material " << i << "failed to create\n"; return -1; } } // Receive the material theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "RAReinforcedConcretePlateFiber::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int DispBeamColumn2d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { // // receive the integer data containing tag, numSections and coord transformation info // int dbTag = this->getDbTag(); int i; static Vector data(14); if (theChannel.recvVector(dbTag, commitTag, data) < 0) { opserr << "DispBeamColumn2d::recvSelf() - failed to recv data Vector\n"; return -1; } this->setTag((int)data(0)); connectedExternalNodes(0) = (int)data(1); connectedExternalNodes(1) = (int)data(2); int nSect = (int)data(3); int crdTransfClassTag = (int)data(4); int crdTransfDbTag = (int)data(5); int beamIntClassTag = (int)data(6); int beamIntDbTag = (int)data(7); rho = data(8); cMass = (int)data(9); alphaM = data(10); betaK = data(11); betaK0 = data(12); betaKc = data(13); // create a new crdTransf object if one needed if (crdTransf == 0 || crdTransf->getClassTag() != crdTransfClassTag) { if (crdTransf != 0) delete crdTransf; crdTransf = theBroker.getNewCrdTransf(crdTransfClassTag); if (crdTransf == 0) { opserr << "DispBeamColumn2d::recvSelf() - failed to obtain a CrdTrans object with classTag " << crdTransfClassTag << endln; return -2; } } crdTransf->setDbTag(crdTransfDbTag); // invoke recvSelf on the crdTransf object if (crdTransf->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to recv crdTranf\n"; return -3; } // create a new beamInt object if one needed if (beamInt == 0 || beamInt->getClassTag() != beamIntClassTag) { if (beamInt != 0) delete beamInt; beamInt = theBroker.getNewBeamIntegration(beamIntClassTag); if (beamInt == 0) { opserr << "DispBeamColumn2d::recvSelf() - failed to obtain the beam integration object with classTag" << beamIntClassTag << endln; exit(-1); } } beamInt->setDbTag(beamIntDbTag); // invoke recvSelf on the beamInt object if (beamInt->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to recv beam integration\n"; return -3; } // // recv an ID for the sections containing each sections dbTag and classTag // ID idSections(2*nSect); int loc = 0; if (theChannel.recvID(dbTag, commitTag, idSections) < 0) { opserr << "DispBeamColumn2d::recvSelf() - failed to recv ID data\n"; return -1; } // // now receive the sections // if (numSections != nSect) { // // we do not have correct number of sections, must delete the old and create // new ones before can recvSelf on the sections // // delete the old if (numSections != 0) { for (int i=0; i<numSections; i++) delete theSections[i]; delete [] theSections; } // create a new array to hold pointers theSections = new SectionForceDeformation *[nSect]; if (theSections == 0) { opserr << "DispBeamColumn2d::recvSelf() - out of memory creating sections array of size " << nSect << endln; return -1; } // create a section and recvSelf on it numSections = nSect; loc = 0; for (i=0; i<numSections; i++) { int sectClassTag = idSections(loc); int sectDbTag = idSections(loc+1); loc += 2; theSections[i] = theBroker.getNewSection(sectClassTag); if (theSections[i] == 0) { opserr << "DispBeamColumn2d::recvSelf() - Broker could not create Section of class type " << sectClassTag << endln; exit(-1); } theSections[i]->setDbTag(sectDbTag); if (theSections[i]->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "DispBeamColumn2d::recvSelf() - section " << i << " failed to recv itself\n"; return -1; } } } else { // // for each existing section, check it is of correct type // (if not delete old & create a new one) then recvSelf on it // loc = 0; for (i=0; i<numSections; i++) { int sectClassTag = idSections(loc); int sectDbTag = idSections(loc+1); loc += 2; // check of correct type if (theSections[i]->getClassTag() != sectClassTag) { // delete the old section[i] and create a new one delete theSections[i]; theSections[i] = theBroker.getNewSection(sectClassTag); if (theSections[i] == 0) { opserr << "DispBeamColumn2d::recvSelf() - Broker could not create Section of class type " << sectClassTag << endln; exit(-1); } } // recvSelf on it theSections[i]->setDbTag(sectDbTag); if (theSections[i]->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "DispBeamColumn2d::recvSelf() - section " << i << " failed to recv itself\n"; return -1; } } } return 0; }
int ConstantPressureVolumeQuad :: recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); static ID idData(14); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING ConstantPressureVolumeQuad::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } this->setTag(idData(8)); connectedExternalNodes(0) = idData(9); connectedExternalNodes(1) = idData(10); connectedExternalNodes(2) = idData(11); connectedExternalNodes(3) = idData(12); int i; if (idData(13) == 1) { // recv damping coefficients static Vector dData(4); if (theChannel.recvVector(dataTag, commitTag, dData) < 0) { opserr << "EnahancesQuad::sendSelf() - failed to recv double data\n"; return -1; } alphaM = dData(0); betaK = dData(1); betaK0 = dData(2); betaKc = dData(3); } if (materialPointers[0] == 0) { for (i = 0; i < 4; i++) { int matClassTag = idData(i); int matDbTag = idData(i+4); // Allocate new material with the sent class tag materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "ConstantPressureVolumeQuad::recvSelf() - " << "Broker could not create NDMaterial of class type" << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NLBeamColumn3d::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // Number of materials is the same, receive materials into current space else { for (i = 0; i < 4; i++) { int matClassTag = idData(i); int matDbTag = idData(i+4); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (materialPointers[i]->getClassTag() != matClassTag) { delete materialPointers[i]; materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "ConstantPressureVolumeQuad::recvSelf() - " << "Broker could not create NDMaterial of class type" << matClassTag << endln; exit(-1); } } // Receive the material materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "ConstantPressureVolumeQuad::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int EnvelopeNodeRecorder::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { addColumnInfo = 1; if (theChannel.isDatastore() == 1) { opserr << "EnvelopeNodeRecorder::sendSelf() - does not send data to a datastore\n"; return -1; } static ID idData(6); if (theChannel.recvID(0, commitTag, idData) < 0) { opserr << "EnvelopeNodeRecorder::recvSelf() - failed to send idData\n"; return -1; } int numDOFs = idData(0); int numNodes = idData(1); dataFlag = idData(3); this->setTag(idData(5)); if (idData(4) == 1) echoTimeFlag = true; else echoTimeFlag = false; // // get the DOF ID data // if (theDofs == 0 || theDofs->Size() != numDOFs) { if (theDofs != 0) delete theDofs; if (numDOFs != 0) { theDofs = new ID(numDOFs); if (theDofs == 0 || theDofs->Size() != numDOFs) { opserr << "EnvelopeNodeRecorder::recvSelf() - out of memory\n"; return -1; } } } if (theDofs != 0) if (theChannel.recvID(0, commitTag, *theDofs) < 0) { opserr << "EnvelopeNodeRecorder::recvSelf() - failed to recv dof data\n"; return -1; } // // get the NODAL tag data // if (theNodalTags == 0 || theNodalTags->Size() != numNodes) { if (theNodalTags != 0) delete theNodalTags; if (numNodes != 0) { theNodalTags = new ID(numNodes); if (theNodalTags == 0 || theNodalTags->Size() != numNodes) { opserr << "EnvelopeNodeRecorder::recvSelf() - out of memory\n"; return -1; } } } if (theNodalTags != 0) if (theChannel.recvID(0, commitTag, *theNodalTags) < 0) { opserr << "EnvelopeNodeRecorder::recvSelf() - failed to recv dof data\n"; return -1; } static Vector data(2); if (theChannel.recvVector(0, commitTag, data) < 0) { opserr << "EnvelopeNodeRecorder::sendSelf() - failed to receive data\n"; return -1; } deltaT = data(0); nextTimeStampToRecord = data(1); if (theHandler != 0) delete theHandler; theHandler = theBroker.getPtrNewStream(idData(2)); if (theHandler == 0) { opserr << "EnvelopeNodeRecorder::sendSelf() - failed to get a data output handler\n"; return -1; } if (theHandler->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "EnvelopeNodeRecorder::sendSelf() - failed to send the DataOutputHandler\n"; return -1; } 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; }
int NodeRecorder::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { addColumnInfo = 1; if (theChannel.isDatastore() == 1) { opserr << "NodeRecorder::sendSelf() - does not send data to a datastore\n"; return -1; } static ID idData(8); if (theChannel.recvID(0, commitTag, idData) < 0) { opserr << "NodeRecorder::recvSelf() - failed to send idData\n"; return -1; } int numDOFs = idData(0); int numNodes = idData(1); this->setTag(idData(6)); if (idData(3) == 1) echoTimeFlag = true; else echoTimeFlag = false; dataFlag = idData(4); sensitivity = idData(5); // // get the DOF ID data // if (theDofs == 0 || theDofs->Size() != numDOFs) { if (theDofs != 0) delete theDofs; if (numDOFs != 0) { theDofs = new ID(numDOFs); if (theDofs == 0 || theDofs->Size() != numDOFs) { opserr << "NodeRecorder::recvSelf() - out of memory\n"; return -1; } } } if (theDofs != 0) if (theChannel.recvID(0, commitTag, *theDofs) < 0) { opserr << "NodeRecorder::recvSelf() - failed to recv dof data\n"; return -1; } // // get the NODAL tag data // if (theNodalTags == 0 || theNodalTags->Size() != numNodes) { if (theNodalTags != 0) delete theNodalTags; if (numNodes != 0) { theNodalTags = new ID(numNodes); if (theNodalTags == 0 || theNodalTags->Size() != numNodes) { opserr << "NodeRecorder::recvSelf() - out of memory\n"; return -1; } } } if (theNodalTags != 0) if (theChannel.recvID(0, commitTag, *theNodalTags) < 0) { opserr << "NodeRecorder::recvSelf() - failed to recv dof data\n"; return -1; } static Vector data(2); if (theChannel.recvVector(0, commitTag, data) < 0) { opserr << "NodeRecorder::sendSelf() - failed to receive data\n"; return -1; } deltaT = data(0); nextTimeStampToRecord = data(1); if (theOutputHandler != 0) delete theOutputHandler; theOutputHandler = theBroker.getPtrNewStream(idData(2)); if (theOutputHandler == 0) { opserr << "NodeRecorder::sendSelf() - failed to get a data output handler\n"; return -1; } if (theOutputHandler->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "NodeRecorder::sendSelf() - failed to send the DataOutputHandler\n"; return -1; } if (idData[7] == 1) { timeSeriesValues = new double [numDOFs]; for (int i=0; i<numDOFs; i++) timeSeriesValues[i] = 0.0; theTimeSeries = new TimeSeries *[numDOFs]; ID timeSeriesTags(numDOFs); if (theChannel.recvID(0, commitTag, timeSeriesTags) < 0) { opserr << "EnvelopeNodeRecorder::recvSelf() - failed to recv time series tags\n"; return -1; } for (int i=0; i<numDOFs; i++) { if (timeSeriesTags[i] == -1) theTimeSeries[i] = 0; else { theTimeSeries[i] = theBroker.getNewTimeSeries(timeSeriesTags(i)); if (theTimeSeries[i]->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "EnvelopeNodeRecorder::recvSelf() - time series failed in recv\n"; return -1; } } } } return 0; }
int ParallelMaterial::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; static ID data(3); int dbTag = this->getDbTag(); res = theChannel.recvID(dbTag, cTag, data); if (res < 0) { opserr << "ParallelMaterial::recvSelf() - failed to receive data\n"; return res; } this->setTag(int(data(0))); int numMaterialsSent = int(data(1)); if (numMaterials != numMaterialsSent) { numMaterials = numMaterialsSent; if (theModels != 0) { for (int i=0; i<numMaterials; i++) delete theModels[i]; delete [] theModels; } theModels = new UniaxialMaterial *[numMaterials]; if (theModels == 0) { opserr << "FATAL ParallelMaterial::recvSelf() - ran out of memory"; opserr << " for array of size: " << numMaterials << "\n"; return -2; } for (int i=0; i<numMaterials; i++) theModels[i] = 0; } if (data(2) == 1) { theFactors = new Vector(numMaterials); res = theChannel.recvVector(dbTag, cTag, *theFactors); if (res < 0) { opserr << "ParallelMaterial::recvSelf() - failed to receive factors\n"; return res; } } // create and receive an ID for the classTags and dbTags of the local // MaterialModel objects ID classTags(numMaterials*2); res = theChannel.recvID(dbTag, cTag, classTags); if (res < 0) { opserr << "ParallelMaterial::recvSelf() - failed to receive classTags\n"; return res; } // now for each of the MaterialModel objects, create a new object // and invoke recvSelf() on it for (int i=0; i<numMaterials; i++) { int matClassTag = classTags(i); if (theModels[i] == 0 || theModels[i]->getClassTag() != matClassTag) { if (theModels[i] == 0) delete theModels[i]; UniaxialMaterial *theMaterialModel = theBroker.getNewUniaxialMaterial(matClassTag); if (theMaterialModel != 0) { theModels[i] = theMaterialModel; theMaterialModel->setDbTag(classTags(i+numMaterials)); } else { opserr << "FATAL ParallelMaterial::recvSelf() "; opserr << " could not get a UniaxialMaterial \n"; exit(-1); } } theModels[i]->recvSelf(cTag, theChannel, theBroker); } return 0; }
int TrussSection::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res; int dataTag = this->getDbTag(); // truss creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(11); res = theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING TrussSection::recvSelf() - failed to receive Vector\n"; return -1; } this->setTag((int)data(0)); dimension = (int)data(1); numDOF = (int)data(2); rho = data(5); doRayleighDamping = (int)data(6); cMass = (int)data(7); initialDisp = new double[dimension]; for (int i=0; i<dimension; i++) initialDisp[i] = 0.0; int initial = 0; for (int i=0; i<dimension; i++) { if (data(8+i) != 0.0) { initial = 1; } } if (initial != 0) { for (int i=0; i<dimension; i++) { initialDisp[i] = data(8+i); } } // truss now receives the tags of it's two external nodes res = theChannel.recvID(dataTag, commitTag, connectedExternalNodes); if (res < 0) { opserr << "WARNING TrussSection::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return -2; } // finally truss creates a new section object of the correct type, // sets its database tag and asks this new object to recveive itself. int sectClass = (int)data(3); int sectDb = (int)data(4); // Get new section if null if (theSection == 0) theSection = theBroker.getNewSection(sectClass); // Check that section is of right type else if (theSection->getClassTag() != sectClass) { delete theSection; theSection = theBroker.getNewSection(sectClass); } // Check if either allocation failed if (theSection == 0) { opserr << "WARNING TrussSection::recvSelf() - " << this->getTag() << " failed to get a blank Section of type " << sectClass << endln; return -3; } theSection->setDbTag(sectDb); // note: we set the dbTag before we receive the Section res = theSection->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "WARNING TrussSection::recvSelf() - " << this->getTag() << " failed to receive its Section\n"; return -3; } return 0; }
int BiaxialFiber3d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { // // get tag and material info from an ID // static ID idData(3); int dbTag = this->getDbTag(); if (theChannel.recvID(dbTag, commitTag, idData) < 0) { opserr << "BiaxialFiber3d::recvSelf() - failed to recv ID data\n"; return -1; } this->setTag(idData(0)); // // get area and position datafrom a vector // static Vector dData(4); if (theChannel.recvVector(dbTag, commitTag, dData) < 0) { opserr << "BiaxialFiber3d::recvSelf() - failed to recv Vector data\n"; return -2; } area = dData(0); as[0] = dData(1); as[1] = dData(2); R = dData(3); // // now we do the material stuff // int matClassTag = idData(1); // if we have a material, check it is of correct type if (theMaterial != 0) { if (matClassTag != theMaterial->getClassTag()) { delete theMaterial; theMaterial = 0; } } // if no material we need to get one, // NOTE: not an else if in case deleted in if above if (theMaterial == 0) { theMaterial = theBroker.getNewNDMaterial(matClassTag); if (theMaterial == 0) { opserr << "BiaxialFiber3d::recvSelf() - " << "failed to get a UniaxialMaterial of type "<< matClassTag << endln; return -3; } } // set the materials dbTag and invoke recvSelf on the material theMaterial->setDbTag(idData(2)); // now invoke recvSelf on the material if (theMaterial->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "BiaxialFiber3d::recvSelf() - the material failed in recvSelf()\n"; return -4; } return 0; }
int PileToe3D::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res; int dataTag = this->getDbTag(); // PileToe3D creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(6); res = theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr <<"WARNING PileToe3D::recvSelf() - failed to receive Vector\n"; return -1; } this->setTag((int)data(0)); mRadius = data(1); mSubgradeCoeff = data(2); mCC = data(3); MyTag = (int)data(0); // PileToe3D now receives the tags of it's one external node res = theChannel.recvID(dataTag, commitTag, externalNodes); if (res < 0) { opserr <<"WARNING PileToe3D::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return -2; } // PileToe3D now receives the tags of it's two beam external nodes res = theChannel.recvID(dataTag, commitTag, externalBNodes); if (res < 0) { opserr <<"WARNING PileToe3D::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return -2; } int crdClass = (int)data(4); int crdDb = (int)data(5); // check if we have a material object already & if we do if of right type if ((crdTransf == 0) || (crdTransf->getClassTag() != crdClass)) { // if old one .. delete it if (crdTransf != 0) delete crdTransf; // create a new material object crdTransf = theBroker.getNewCrdTransf(crdClass); if (crdTransf == 0) { opserr <<"WARNING PileToe3D::recvSelf() - " << this->getTag() << " failed to get a blank CrdTransf of type " << crdClass << endln; return -3; } } crdTransf->setDbTag(crdDb); // note: we set the dbTag before we receive the material res = crdTransf->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr <<"WARNING PileToe3D::recvSelf() - "<< this->getTag() << "failed to receive its Material\n"; return -3; } return 0; }
int SectionAggregator::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; // Create an ID and receive tag and section order static ID data(5); res += theChannel.recvID(this->getDbTag(), cTag, data); if (res < 0) { opserr << "SectionAggregator::recvSelf -- could not receive data ID\n"; return res; } this->setTag(data(0)); otherDbTag = data(1); int order = data(2); int theSectionOrder = data(3); numMats = data(4); if (order > 0) { if (e == 0 || e->Size() != order) { if (e != 0) { delete e; delete s; delete ks; delete fs; delete theCode; } e = new Vector(workArea, order); s = new Vector(&workArea[maxOrder], order); ks = new Matrix(&workArea[2*maxOrder], order, order); fs = new Matrix(&workArea[maxOrder*(maxOrder+2)], order, order); theCode = new ID(codeArea, order); } } if (numMats > 0) { if (matCodes == 0 || matCodes->Size() != numMats) { if (matCodes != 0) delete matCodes; matCodes = new ID(numMats); } } // Determine how many classTags there are and allocate ID vector int numTags = (theSectionOrder == 0) ? numMats : numMats + 1; ID classTags(numTags*2 + numMats); // Receive the material class and db tags res += theChannel.recvID(otherDbTag, cTag, classTags); if (res < 0) { opserr << "SectionAggregator::recvSelf -- could not receive classTags ID\n"; return res; } // Check if null pointer, allocate if so if (theAdditions == 0) { theAdditions = new UniaxialMaterial *[numMats]; if (theAdditions == 0) { opserr << "SectionAggregator::recvSelf -- could not allocate UniaxialMaterial array\n"; return -1; } // Set pointers to null ... will get allocated by theBroker for (int j = 0; j < numMats; j++) theAdditions[j] = 0; } // Loop over the UniaxialMaterials int i, classTag; for (i = 0; i < numMats; i++) { classTag = classTags(i); // Check if the UniaxialMaterial is null; if so, get a new one if (theAdditions[i] == 0) theAdditions[i] = theBroker.getNewUniaxialMaterial(classTag); // Check that the UniaxialMaterial is of the right type; if not, delete // the current one and get a new one of the right type else if (theAdditions[i]->getClassTag() != classTag) { delete theAdditions[i]; theAdditions[i] = theBroker.getNewUniaxialMaterial(classTag); } // Check if either allocation failed if (theAdditions[i] == 0) { opserr << "SectionAggregator::recvSelf -- could not get UniaxialMaterial, i = " << i << endln; return -1; } // Now, receive the UniaxialMaterial theAdditions[i]->setDbTag(classTags(i+numTags)); res += theAdditions[i]->recvSelf(cTag, theChannel, theBroker); if (res < 0) { opserr << "SectionAggregator::recvSelf -- could not receive UniaxialMaterial, i = " << i << endln; return res; } } // If there is no Section to receive, return if (theSectionOrder == 0) return res; classTag = classTags(numTags-1); // Check if the Section is null; if so, get a new one if (theSection == 0) theSection = theBroker.getNewSection(classTag); // Check that the Section is of the right type; if not, delete // the current one and get a new one of the right type else if (theSection->getClassTag() != classTag) { delete theSection; theSection = theBroker.getNewSection(classTag); } // Check if either allocation failed if (theSection == 0) { opserr << "SectionAggregator::recvSelf -- could not get a SectionForceDeformation\n"; return -1; } // Now, receive the Section theSection->setDbTag(classTags(2*numTags-1)); res += theSection->recvSelf(cTag, theChannel, theBroker); if (res < 0) { opserr << "SectionAggregator::recvSelf -- could not receive SectionForceDeformation\n"; return res; } // Fill in the section code int j = 2*numTags; for (i = 0; i < numMats; i++, j++) (*matCodes)(i) = classTags(j); return res; }
int NineFourNodeQuadUP::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // Quad creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(7); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING NineFourNodeQuadUP::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); thickness = data(1); rho = data(2); b[0] = data(3); b[1] = data(4); //pressure = data(5); kc = data(6); perm[0] = data(7); perm[1] = data(8); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, connectedExternalNodes); if (res < 0) { opserr << "WARNING NineFourNodeQuadUP::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } // Quad now receives the ids of its materials int newOrder = (int)data(9); int numMats = newOrder; ID classTags(2*numMats); res += theChannel.recvID(dataTag, commitTag, classTags); if (res < 0) { opserr << "NineFourNodeQuadUP::recvSelf() - failed to recv ID data\n"; return res; } int i; // If the number of materials (quadrature order) is not the same, // delete the old materials, allocate new ones and then receive if (9 != newOrder) { // Delete the materials for (i = 0; i < 9; i++) { if (theMaterial[i]) delete theMaterial[i]; } if (theMaterial) delete [] theMaterial; // Allocate new materials theMaterial = new NDMaterial *[9]; if (theMaterial == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - Could not allocate NDMaterial* array\n"; return -1; } for (i = 0; i < 9; i++) { int matClassTag = classTags(i); int matDbTag = classTags(i+numMats); // Allocate new material with the sent class tag theMaterial[i] = theBroker.getNewNDMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - Broker could not create NDMaterial of class type" << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NLBeamColumn3d::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // Number of materials is the same, receive materials into current space else { for (i = 0; i < 9; i++) { int matClassTag = classTags(i); int matDbTag = classTags(i+numMats); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (theMaterial[i]->getClassTag() != matClassTag) { delete theMaterial[i]; theMaterial[i] = theBroker.getNewNDMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; exit(-1); } } // Receive the material theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NineFourNodeQuadUP::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int NineFourNodeQuadUP::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // Quad creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(13); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING NineFourNodeQuadUP::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); thickness = data(1); rho = data(2); b[0] = data(3); b[1] = data(4); //double pressure = data(5); // surface loading not implemented. alphaM = data(6); betaK = data(7); betaK0 = data(8); betaKc = data(9); kc = data(10); perm[0] = data(11); perm[1] = data(12); static ID idData(27); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING NineFourNodeQuadUP::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } for( int i = 0; i < 9; i++) connectedExternalNodes(i) = idData(18+i); if (theMaterial == 0) { // Allocate new materials theMaterial = new NDMaterial *[nintu]; if (theMaterial == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - Could not allocate NDMaterial* array\n"; return -1; } for (int i = 0; i < 9; i++) { int matClassTag = idData(i); int matDbTag = idData(i+9); // Allocate new material with the sent class tag theMaterial[i] = theBroker.getNewNDMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NineFourNodeQuadUP::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (int i = 0; i < 9; i++) { int matClassTag = idData(i); int matDbTag = idData(i+9); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (theMaterial[i]->getClassTag() != matClassTag) { delete theMaterial[i]; theMaterial[i] = theBroker.getNewNDMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "NineFourNodeQuadUP::recvSelf() - material " << i << "failed to create\n"; return -1; } } // Receive the material theMaterial[i]->setDbTag(matDbTag); res += theMaterial[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NineFourNodeQuadUP::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int Twenty_Node_Brick::recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); static ID idData(75); // now receives the tags of its 20 external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING Twenty_Node_Brick::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } this->setTag(idData(74)); int i; for( i = 0; i < 20; i++) connectedExternalNodes(i) = idData(54+i); if (materialPointers[0] == 0) { for (i = 0; i < nintu; i++) { int matClassTag = idData(i); int matDbTag = idData(i+nintu); // Allocate new material with the sent class tag materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "Twenty_Node_Brick::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "Twenty_Node_Brick::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (i = 0; i < nintu; i++) { int matClassTag = idData(i); int matDbTag = idData(i+nintu); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (materialPointers[i]->getClassTag() != matClassTag) { delete materialPointers[i]; materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "Twenty_Node_Brick::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; exit(-1); } materialPointers[i]->setDbTag(matDbTag); } // Receive the material res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "Twenty_Node_Brick::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int Timoshenko2d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { // receive the integer data containing tag, numSections and coord transformation info int dbTag = this->getDbTag(); int i; static ID idData(7); // one bigger than needed so no clash with section ID if (theChannel.recvID(dbTag, commitTag, idData) < 0) { opserr << "Timoshenko2d::recvSelf() - failed to recv ID data\n"; return -1; } this->setTag(idData(0)); connectedExternalNodes(0) = idData(1); connectedExternalNodes(1) = idData(2); int crdTransfClassTag = idData(4); int crdTransfDbTag = idData(5); // create a new crdTransf object if one needed if (crdTransf == 0 || crdTransf->getClassTag() != crdTransfClassTag) { if (crdTransf != 0) delete crdTransf; crdTransf = theBroker.getNewCrdTransf(crdTransfClassTag); if (crdTransf == 0) { opserr << "Timoshenko2d::recvSelf() - failed to obtain a CrdTrans object with classTag " << crdTransfClassTag << endln; return -2; } } crdTransf->setDbTag(crdTransfDbTag); // invoke recvSelf on the crdTransf object if (crdTransf->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "Timoshenko2d::sendSelf() - failed to recv crdTranf\n"; return -3; } // // recv an ID for the sections containing each sections dbTag and classTag // ID idSections(2*idData(3)); int loc = 0; if (theChannel.recvID(dbTag, commitTag, idSections) < 0) { opserr << "Timoshenko2d::recvSelf() - failed to recv ID data\n"; return -1; } // now receive the sections if (numSections != idData(3)) { // // we do not have correct number of sections, must delete the old and create // new ones before can recvSelf on the sections // // delete the old if (numSections != 0) { for (i=0; i<numSections; i++) delete theSections[i]; delete [] theSections; } // create a new array to hold pointers theSections = new SectionForceDeformation *[idData(3)]; if (theSections == 0) { opserr << "Timoshenko2d::recvSelf() - out of memory creating sections array of size " << idData(3) << endln; return -1; } // create a section and recvSelf on it numSections = idData(3); loc = 0; for (i=0; i<numSections; i++) { int sectClassTag = idSections(loc); int sectDbTag = idSections(loc+1); loc += 2; //switch (sectClassTag) { //default: opserr << "Timoshenko2d::recvSelf() --default secTag at sec " << i+1 << endln; theSections[i] = new FiberSection2d(); // break; //} if (theSections[i] == 0) { opserr << "Timoshenko2d::recvSelf() - Broker could not create Section of class type " << sectClassTag << endln; exit(-1); } theSections[i]->setDbTag(sectDbTag); if (theSections[i]->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "Timoshenko2d::recvSelf() - section " << i << " failed to recv itself\n"; return -1; } } } else { // for each existing section, check it is of correct type // (if not delete old & create a new one) then recvSelf on it loc = 0; for (i=0; i<numSections; i++) { int sectClassTag = idSections(loc); int sectDbTag = idSections(loc+1); loc += 2; // check of correct type if (theSections[i]->getClassTag() != sectClassTag) { // delete the old section[i] and create a new one delete theSections[i]; //switch (sectClassTag) { //default: opserr << "Timoshenko2d::recvSelf() --default secTag at sec " << i+1 << endln; theSections[i] = new FiberSection2d(); // break; //} if (theSections[i] == 0) { opserr << "Timoshenko2d::recvSelf() - Broker could not create Section of class type " << sectClassTag << endln; exit(-1); } } // recvSelf on it theSections[i]->setDbTag(sectDbTag); if (theSections[i]->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "Timoshenko2d::recvSelf() - section " << i << " failed to recv itself\n"; return -1; } } } return 0; }
int EnvelopeElementRecorder::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { addColumnInfo = 1; if (theChannel.isDatastore() == 1) { opserr << "EnvelopeElementRecorder::recvSelf() - does not recv data to a datastore\n"; return -1; } if (responseArgs != 0) { for (int i=0; i<numArgs; i++) delete [] responseArgs[i]; delete [] responseArgs; } // // into an ID of size 2 recv eleID size and length of all responseArgs // static ID idData(7); if (theChannel.recvID(0, commitTag, idData) < 0) { opserr << "EnvelopeElementRecorder::recvSelf() - failed to recv idData\n"; return -1; } int eleSize = idData(0); numArgs = idData(1); int msgLength = idData(2); numDOF = idData(6); this->setTag(idData(5)); if (idData(4) == 1) echoTimeFlag = true; else echoTimeFlag = false; numEle = eleSize; static Vector dData(1); if (theChannel.recvVector(0, commitTag, dData) < 0) { opserr << "EnvelopeElementRecorder::recvSelf() - failed to recv dData\n"; return -1; } deltaT = dData(1); // // resize & recv the eleID // if (eleSize != 0) { eleID = new ID(eleSize); if (eleID == 0) { opserr << "ElementRecorder::recvSelf() - failed to recv idData\n"; return -1; } if (theChannel.recvID(0, commitTag, *eleID) < 0) { opserr << "ElementRecorder::recvSelf() - failed to recv idData\n"; return -1; } } // // resize & recv the dof // if (numDOF != 0) { dof = new ID(numDOF); if (dof == 0) { opserr << "ElementRecorder::recvSelf() - failed to create dof\n"; return -1; } if (theChannel.recvID(0, commitTag, *dof) < 0) { opserr << "ElementRecorder::recvSelf() - failed to recv dof\n"; return -1; } } // // recv the single char array of element response args // if (msgLength == 0) { opserr << "EnvelopeElementRecorder::recvSelf() - 0 sized string for responses\n"; return -1; } char *allResponseArgs = new char[msgLength]; if (allResponseArgs == 0) { opserr << "EnvelopeElementRecorder::recvSelf() - out of memory\n"; return -1; } Message theMessage(allResponseArgs, msgLength); if (theChannel.recvMsg(0, commitTag, theMessage) < 0) { opserr << "EnvelopeElementRecorder::recvSelf() - failed to recv message\n"; return -1; } // // now break this single array into many // responseArgs = new char *[numArgs]; if (responseArgs == 0) { opserr << "EnvelopeElementRecorder::recvSelf() - out of memory\n"; return -1; } char *currentLoc = allResponseArgs; for (int j=0; j<numArgs; j++) { int argLength = strlen(currentLoc)+1; responseArgs[j] = new char[argLength]; if (responseArgs[j] == 0) { opserr << "EnvelopeElementRecorder::recvSelf() - out of memory\n"; return -1; } strcpy(responseArgs[j], currentLoc); currentLoc += argLength; } // // create a new handler object and invoke recvSelf() on it // if (theHandler != 0) delete theHandler; theHandler = theBroker.getPtrNewStream(idData(3)); if (theHandler == 0) { opserr << "NodeRecorder::sendSelf() - failed to get a data output handler\n"; return -1; } if (theHandler->recvSelf(commitTag, theChannel, theBroker) < 0) { opserr << "NodeRecorder::sendSelf() - failed to send the DataOutputHandler\n"; return -1; } // // clean up & return success // delete [] allResponseArgs; return 0; }
int TwentyEightNodeBrickUP::recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // TwentyEightNodeBrickUP creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(13); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING TwentyEightNodeBrickUP::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); rho = data(1); b[0] = data(2); b[1] = data(3); b[2] = data(4); alphaM = data(5); betaK = data(6); betaK0 = data(7); betaKc = data(8); kc = data(9); perm[0] = data(10); perm[1] = data(11); perm[2] = data(12); static ID idData(74); // TwentyEightNodeBrickUP now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING TwentyEightNodeBrickUP::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } int i; for( i = 0; i < 20; i++) connectedExternalNodes(i) = idData(54+i); if (materialPointers == 0) { // Allocate new materials materialPointers = new NDMaterial* [nintu]; if (materialPointers == 0) { opserr << "TwentyEightNodeBrickUP::recvSelf() - Could not allocate NDMaterial array\n"; return -1; } for (i = 0; i < nintu; i++) { int matClassTag = idData(i); int matDbTag = idData(i+nintu); // Allocate new material with the sent class tag materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "TwentyEightNodeBrickUP::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "TwentyEightNodeBrickUP::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (i = 0; i < nintu; i++) { int matClassTag = idData(i); int matDbTag = idData(i+nintu); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (materialPointers[i]->getClassTag() != matClassTag) { delete materialPointers[i]; materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "TwentyEightNodeBrickUP::recvSelf() - Broker could not create NDMaterial of class type " << matClassTag << endln; exit(-1); } } // Receive the material materialPointers[i]->setDbTag(matDbTag); res += materialPointers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "TwentyEightNodeBrickUP::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }