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 DispBeamColumn2d::sendSelf(int commitTag, Channel &theChannel) { // place the integer data into an ID int dbTag = this->getDbTag(); int i, j; int loc = 0; static Vector data(14); data(0) = this->getTag(); data(1) = connectedExternalNodes(0); data(2) = connectedExternalNodes(1); data(3) = numSections; data(4) = crdTransf->getClassTag(); int crdTransfDbTag = crdTransf->getDbTag(); if (crdTransfDbTag == 0) { crdTransfDbTag = theChannel.getDbTag(); if (crdTransfDbTag != 0) crdTransf->setDbTag(crdTransfDbTag); } data(5) = crdTransfDbTag; data(6) = beamInt->getClassTag(); int beamIntDbTag = beamInt->getDbTag(); if (beamIntDbTag == 0) { beamIntDbTag = theChannel.getDbTag(); if (beamIntDbTag != 0) beamInt->setDbTag(beamIntDbTag); } data(7) = beamIntDbTag; data(8) = rho; data(9) = cMass; data(10) = alphaM; data(11) = betaK; data(12) = betaK0; data(13) = betaKc; if (theChannel.sendVector(dbTag, commitTag, data) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to send data Vector\n"; return -1; } // send the coordinate transformation if (crdTransf->sendSelf(commitTag, theChannel) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to send crdTranf\n"; return -1; } // send the beam integration if (beamInt->sendSelf(commitTag, theChannel) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to send beamInt\n"; return -1; } // // send an ID for the sections containing each sections dbTag and classTag // if section ha no dbTag get one and assign it // ID idSections(2*numSections); loc = 0; for (i = 0; i<numSections; i++) { int sectClassTag = theSections[i]->getClassTag(); int sectDbTag = theSections[i]->getDbTag(); if (sectDbTag == 0) { sectDbTag = theChannel.getDbTag(); theSections[i]->setDbTag(sectDbTag); } idSections(loc) = sectClassTag; idSections(loc+1) = sectDbTag; loc += 2; } if (theChannel.sendID(dbTag, commitTag, idSections) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to send ID data\n"; return -1; } // // send the sections // for (j = 0; j<numSections; j++) { if (theSections[j]->sendSelf(commitTag, theChannel) < 0) { opserr << "DispBeamColumn2d::sendSelf() - section " << j << "failed to send itself\n"; return -1; } } return 0; }
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 DispBeamColumn2dWithSensitivity::sendSelf(int commitTag, Channel &theChannel) { // place the integer data into an ID int dbTag = this->getDbTag(); int i, j; int loc = 0; static ID idData(7); // one bigger than needed so no clash later idData(0) = this->getTag(); idData(1) = connectedExternalNodes(0); idData(2) = connectedExternalNodes(1); idData(3) = numSections; idData(4) = crdTransf->getClassTag(); int crdTransfDbTag = crdTransf->getDbTag(); if (crdTransfDbTag == 0) { crdTransfDbTag = theChannel.getDbTag(); if (crdTransfDbTag != 0) crdTransf->setDbTag(crdTransfDbTag); } idData(5) = crdTransfDbTag; if (alphaM != 0 || betaK != 0 || betaK0 != 0 || betaKc != 0) idData(6) = 1; else idData(6) = 0; if (theChannel.sendID(dbTag, commitTag, idData) < 0) { opserr << "DispBeamColumn2dWithSensitivity::sendSelf() - failed to send ID data\n"; return -1; } if (idData(6) == 1) { // send damping coefficients static Vector dData(4); dData(0) = alphaM; dData(1) = betaK; dData(2) = betaK0; dData(3) = betaKc; if (theChannel.sendVector(dbTag, commitTag, dData) < 0) { opserr << "DispBeamColumn2d::sendSelf() - failed to send double data\n"; return -1; } } // send the coordinate transformation if (crdTransf->sendSelf(commitTag, theChannel) < 0) { opserr << "DispBeamColumn2dWithSensitivity::sendSelf() - failed to send crdTranf\n"; return -1; } // // send an ID for the sections containing each sections dbTag and classTag // if section ha no dbTag get one and assign it // ID idSections(2*numSections); loc = 0; for (i = 0; i<numSections; i++) { int sectClassTag = theSections[i]->getClassTag(); int sectDbTag = theSections[i]->getDbTag(); if (sectDbTag == 0) { sectDbTag = theChannel.getDbTag(); theSections[i]->setDbTag(sectDbTag); } idSections(loc) = sectClassTag; idSections(loc+1) = sectDbTag; loc += 2; } if (theChannel.sendID(dbTag, commitTag, idSections) < 0) { opserr << "DispBeamColumn2dWithSensitivity::sendSelf() - failed to send ID data\n"; return -1; } // // send the sections // for (j = 0; j<numSections; j++) { if (theSections[j]->sendSelf(commitTag, theChannel) < 0) { opserr << "DispBeamColumn2dWithSensitivity::sendSelf() - section " << j << "failed to send itself\n"; return -1; } } return 0; }
int Timoshenko2d::sendSelf(int commitTag, Channel &theChannel) { // place the integer data into an ID int dbTag = this->getDbTag(); int i, j; int loc = 0; static ID idData(7); // one bigger than needed so no clash later idData(0) = this->getTag(); idData(1) = connectedExternalNodes(0); idData(2) = connectedExternalNodes(1); idData(3) = numSections; idData(4) = crdTransf->getClassTag(); int crdTransfDbTag = crdTransf->getDbTag(); if (crdTransfDbTag == 0) { crdTransfDbTag = theChannel.getDbTag(); if (crdTransfDbTag != 0) crdTransf->setDbTag(crdTransfDbTag); } idData(5) = crdTransfDbTag; if (theChannel.sendID(dbTag, commitTag, idData) < 0) { opserr << "Timoshenko2d::sendSelf() - failed to send ID data\n"; return -1; } // send the coordinate transformation if (crdTransf->sendSelf(commitTag, theChannel) < 0) { opserr << "Timoshenko2d::sendSelf() - failed to send crdTranf\n"; return -1; } // // send an ID for the sections containing each sections dbTag and classTag // if section ha no dbTag get one and assign it // ID idSections(2*numSections); loc = 0; for (i = 0; i<numSections; i++) { int sectClassTag = theSections[i]->getClassTag(); int sectDbTag = theSections[i]->getDbTag(); if (sectDbTag == 0) { sectDbTag = theChannel.getDbTag(); theSections[i]->setDbTag(sectDbTag); } idSections(loc) = sectClassTag; idSections(loc+1) = sectDbTag; loc += 2; } if (theChannel.sendID(dbTag, commitTag, idSections) < 0) { opserr << "Timoshenko2d::sendSelf() - failed to send ID data\n"; return -1; } // send the sections for (j = 0; j<numSections; j++) { if (theSections[j]->sendSelf(commitTag, theChannel) < 0) { opserr << "Timoshenko2d::sendSelf() - section " << j << "failed to send itself\n"; return -1; } } return 0; }