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 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 PlateFromPlaneStressMaterialThermal::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 << "PlateFromPlaneStressMaterialThermal::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.getNewNDMaterial(matClassTag); if (theMat == 0) { opserr << "PlateFromPlaneStressMaterialThermal::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 << "PlateFromPlaneStressMaterialThermal::sendSelf() - failed to receive vector data" << endln; return res; } gmod = vecData(0); // now receive the materials data res = theMat->recvSelf(commitTag, theChannel, theBroker); if (res < 0) opserr << "PlateFromPlaneStressMaterialThermal::sendSelf() - failed to receive material1" << endln; return res; }
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; }
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 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 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 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 GenericSectionNd::recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; static ID data(5); // Receive the data ID res += theChannel.recvID(this->getDbTag(), cTag, data); if (res < 0) { g3ErrorHandler->warning("%s -- could not receive data ID", "GenericSectionNd::recvSelf"); return res; } this->setTag(data(0)); order = data(1); otherDbTag = data(2); // Check if section ID code is null or wrong size, reallocate if so if (code == 0) code = new ID(order); else if (code->Size() != order) { delete code; code = new ID(order); } if (code == 0) { g3ErrorHandler->warning("%s -- could not allocate new code ID", "GenericSectionNd::recvSelf"); return -1; } // Receive the code ID res += theChannel.recvID(otherDbTag, cTag, *code); if (res < 0) { g3ErrorHandler->warning("%s -- could not receive code ID", "GenericSectionNd::recvSelf"); return res; } int classTag = data(3); // Check if the material is null; if so, get a new one if (theModel == 0) theModel = theBroker.getNewNDMaterial(classTag); // Check that the material is of the right type; if not, delete // the current one and get a new one of the right type else if (theModel->getClassTag() != classTag) { delete theModel; theModel = theBroker.getNewNDMaterial(classTag); } // Check if either allocation failed if (theModel == 0) { g3ErrorHandler->warning("%s -- could not get an NDMaterial", "GenericSectionNd::recvSelf"); return -1; } // Now, receive the material theModel->setDbTag(data(4)); res += theModel->recvSelf(cTag, theChannel, theBroker); if (res < 0) { g3ErrorHandler->warning("%s -- could not receive NDMaterial", "GenericSectionNd::recvSelf"); return res; } return res; }
int SSPquad::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // SSPquad creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(10); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING SSPquad::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); mThickness = data(1); b[0] = data(2); b[1] = data(3); // SSPquad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, mExternalNodes); if (res < 0) { opserr << "WARNING SSPquad::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } // finally, SSPquad 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); alphaM = data(6); betaK = data(7); betaK0 = data(8); betaKc = data(9); // 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 = (NDMaterial *)theMatCopy; if (theMaterial == 0) { opserr << "WARNING SSPquad::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 SSPquad::recvSelf() - " << this->getTag() << " failed to receive its Material\n"; return -3; } return 0; }
int ZeroLengthND::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // ZeroLengthND creates an ID, receives the ID and then sets the // internal data with the data in the ID static ID idData(11); res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "ZeroLengtHND::recvSelf -- failed to receive ID data\n"; return res; } res += theChannel.recvMatrix(dataTag, commitTag, transformation); if (res < 0) { opserr << "zeroLengthND::revbSelf -- failed to receive transformation Matrix\n"; return res; } this->setTag(idData(0)); dimension = idData(1); numDOF = idData(2); connectedExternalNodes(0) = idData(5); connectedExternalNodes(1) = idData(6); if (order != idData(3)) { order = idData(3); // Allocate transformation matrix if (A != 0) delete A; A = new Matrix(order, numDOF); if (numDOF == 6) { K = &K6; P = &P6; } else { K = &K12; P = &P12; } if (order == 2) v = &v2; else v = &v3; } int classTag = idData(7); // If null, get a new one from the broker if (theNDMaterial == 0) theNDMaterial = theBroker.getNewNDMaterial(classTag); // If wrong type, get a new one from the broker if (theNDMaterial->getClassTag() != classTag) { delete theNDMaterial; theNDMaterial = theBroker.getNewNDMaterial(classTag); } // Check if either allocation failed from broker if (theNDMaterial == 0) { opserr << "ZeroLengthND:: -- failed to allocate new NDMaterial\n"; return -1; } // Receive the NDMaterial theNDMaterial->setDbTag(idData(8)); res += theNDMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "ZeroLengthND:: -- failed to receive NDMaterial\n"; return res; } // Receive the UniaxialMaterial, if present if (idData(4) == 1) { classTag = idData(9); // If null, get a new one from the broker if (the1DMaterial == 0) the1DMaterial = theBroker.getNewUniaxialMaterial(classTag); // If wrong type, get a new one from the broker if (the1DMaterial->getClassTag() != classTag) { delete the1DMaterial; the1DMaterial = theBroker.getNewUniaxialMaterial(classTag); } // Check if either allocation failed from broker if (the1DMaterial == 0) { opserr << "ZeroLengthND:: -- failed to allocate new UniaxialMaterial\n"; return -1; } // Receive the UniaxialMaterial the1DMaterial->setDbTag(idData(10)); res += the1DMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "ZeroLengthND:: -- failed to receive UniaxialMaterial\n"; return res; } } return res; }
int BbarBrick::recvSelf (int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); static ID idData(25); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING BbarBrick::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } this->setTag(idData(24)); // recv damping & body forces coefficients static Vector dData(7); if (theChannel.recvVector(dataTag, commitTag, dData) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to recv double data\n"; return -1; } alphaM = dData(0); betaK = dData(1); betaK0 = dData(2); betaKc = dData(3); b[0] = dData(4); b[1] = dData(5); b[2] = dData(6); connectedExternalNodes(0) = idData(16); connectedExternalNodes(1) = idData(17); connectedExternalNodes(2) = idData(18); connectedExternalNodes(3) = idData(19); connectedExternalNodes(4) = idData(20); connectedExternalNodes(5) = idData(21); connectedExternalNodes(6) = idData(22); connectedExternalNodes(7) = idData(23); if (materialPointers[0] == 0) { for (int i = 0; i < 8; i++) { int matClassTag = idData(i); int matDbTag = idData(i+8); // Allocate new material with the sent class tag materialPointers[i] = theBroker.getNewNDMaterial(matClassTag); if (materialPointers[i] == 0) { opserr << "BbarBrick::recvSelf() - Broker could not create NDMaterial of class type" << matClassTag << endln; exit(-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; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (int i = 0; i < 8; i++) { int matClassTag = idData(i); int matDbTag = idData(i+8); // 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 << "BbarBrick::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 << "NLBeamColumn3d::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int Tri31::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); // Tri31 creates a Vector, receives the Vector and then sets the // internal data with the data in the Vector static Vector data(10); res += theChannel.recvVector(dataTag, commitTag, data); if (res < 0) { opserr << "WARNING Tri31::recvSelf() - failed to receive Vector\n"; return res; } this->setTag((int)data(0)); thickness = data(1); b[0] = data(3); b[1] = data(4); pressure = data(5); alphaM = data(6); betaK = data(7); betaK0 = data(8); betaKc = data(9); static ID idData(2*numgp+numnodes+1); // Tri31 now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING Tri31::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } int count = 2*numgp; connectedExternalNodes(0) = idData(count); count += 1; connectedExternalNodes(1) = idData(count); count += 1; connectedExternalNodes(2) = idData(count); if (theMaterial == 0) { // Allocate new materials theMaterial = new NDMaterial *[numgp]; if (theMaterial == 0) { opserr << "Tri31::recvSelf() - Could not allocate NDMaterial* array\n"; return -1; } for (int i = 0; i < numgp; i++) { int matClassTag = idData(i); int matDbTag = idData(i+numgp); // Allocate new material with the sent class tag theMaterial[i] = theBroker.getNewNDMaterial(matClassTag); if (theMaterial[i] == 0) { opserr << "Tri31::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; } } } // materials exist , ensure materials of correct type and recvSelf on them else { for (int i = 0; i < numgp; i++) { int matClassTag = idData(i); int matDbTag = idData(i+numgp); // 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 << "NLBeamColumn3d::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 << "NLBeamColumn3d::recvSelf() - material " << i << "failed to recv itself\n"; return res; } } } return res; }
int NDFiber2d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { // // get tag and material info from an ID // int res = 0; int dbTag = this->getDbTag(); static ID idData(3); res += theChannel.recvID(dbTag, commitTag, idData); if (res < 0) { opserr << "NDFiber2d::recvSelf - failed to receive ID data\n"; return res; } this->setTag(idData(0)); // // get area from a vector received from channel // static Vector dData(2); res += theChannel.recvVector(dbTag, commitTag, dData); if (res < 0) { opserr << "NDFiber2d::recvSelf - failed to receive Vector data\n"; return res; } area = dData(0); y = dData(1); // // 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 << "NDFiber2d::recvSelf() - " << "failed to get a NDMaterial of type " << matClassTag << endln; return -1; } } // set the materials dbTag and invoke recvSelf on the material theMaterial->setDbTag(idData(2)); // now invoke recvSelf on the material res += theMaterial->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "NDFiber2d::recvSelf() - the material failed in recvSelf()\n"; return res; } return res; }
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 TimoshenkoSection2d::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; static ID data(3); int dbTag = this->getDbTag(); res += theChannel.recvID(dbTag, commitTag, data); if (res < 0) { opserr << "TimoshenkoSection2d::recvSelf - failed to recv ID data\n"; return res; } this->setTag(data(0)); // recv data about materials objects, classTag and dbTag if (data(1) != 0) { ID materialData(2*data(1)); res += theChannel.recvID(dbTag, commitTag, materialData); if (res < 0) { opserr << "TimoshenkoSection2d::recvSelf - failed to recv material data\n"; return res; } // if current arrays not of correct size, release old and resize if (theMaterials == 0 || numFibers != data(1)) { // delete old stuff if outa date if (theMaterials != 0) { for (int i=0; i<numFibers; i++) delete theMaterials[i]; delete [] theMaterials; if (matData != 0) delete [] matData; matData = 0; theMaterials = 0; } // create memory to hold material pointers and fiber data numFibers = data(1); if (numFibers != 0) { theMaterials = new NDMaterial *[numFibers]; if (theMaterials == 0) { opserr <<"TimoshenkoSection2d::recvSelf -- failed to allocate Material pointers\n"; exit(-1); } for (int j=0; j<numFibers; j++) theMaterials[j] = 0; matData = new double [numFibers*3]; if (matData == 0) { opserr <<"TimoshenkoSection2d::recvSelf -- failed to allocate double array for material data\n"; exit(-1); } } } Vector fiberData(matData, 3*numFibers); res += theChannel.recvVector(dbTag, commitTag, fiberData); if (res < 0) { opserr << "TimoshenkoSection2d::recvSelf - failed to recv material data\n"; return res; } int i; for (i=0; i<numFibers; i++) { int classTag = materialData(2*i); dbTag = materialData(2*i+1); // if material pointed to is blank or not of corrcet type, // release old and create a new one if (theMaterials[i] == 0) theMaterials[i] = theBroker.getNewNDMaterial(classTag); else if (theMaterials[i]->getClassTag() != classTag) { delete theMaterials[i]; theMaterials[i] = theBroker.getNewNDMaterial(classTag); } if (theMaterials[i] == 0) { opserr <<"TimoshenkoSection2d::recvSelf -- failed to allocate double array for material data\n"; exit(-1); } theMaterials[i]->setDbTag(dbTag); res += theMaterials[i]->recvSelf(commitTag, theChannel, theBroker); } double Qz = 0.0; double Qy = 0.0; double A = 0.0; double yLoc, zLoc, Area; // Recompute centroid for (i = 0; i < numFibers; i++) { yLoc = matData[3*i]; zLoc = matData[3*i+1]; Area = matData[3*i+2]; A += Area; Qz += yLoc*Area; Qy += zLoc*Area; } yBar = Qz/A; zBar = Qy/A; } 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 MembranePlateFiberSection::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker) { int res = 0; int dataTag = this->getDbTag(); static ID idData(2*numFibers+1); // Quad now receives the tags of its four external nodes res += theChannel.recvID(dataTag, commitTag, idData); if (res < 0) { opserr << "WARNING MembranePlateFiberSection::recvSelf() - " << this->getTag() << " failed to receive ID\n"; return res; } this->setTag(idData(2*numFibers)); int i; if (theFibers[0] == 0) { for (i = 0; i < numFibers; i++) { int matClassTag = idData(i); int matDbTag = idData(i+numFibers); // Allocate new material with the sent class tag theFibers[i] = theBroker.getNewNDMaterial(matClassTag); if (theFibers[i] == 0) { opserr << "MembranePlateFiberSection::recvSelf() - " << "Broker could not create NDMaterial of class type " << matClassTag << endln; return -1; } // Now receive materials into the newly allocated space theFibers[i]->setDbTag(matDbTag); res += theFibers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "MembranePlateFiber::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 < numFibers; i++) { int matClassTag = idData(i); int matDbTag = idData(i+numFibers); // Check that material is of the right type; if not, // delete it and create a new one of the right type if (theFibers[i]->getClassTag() != matClassTag) { delete theFibers[i]; theFibers[i] = theBroker.getNewNDMaterial(matClassTag); if (theFibers[i] == 0) { opserr << "MembranePlateFiberSection::recvSelf() - " << "Broker could not create NDMaterial of class type" << matClassTag << endln; exit(-1); } } // Receive the material theFibers[i]->setDbTag(matDbTag); res += theFibers[i]->recvSelf(commitTag, theChannel, theBroker); if (res < 0) { opserr << "MembranePlateFiberSection::recvSelf() - material " << i << ", failed to recv itself\n"; return res; } } } return res; }