本文整理汇总了C++中FEM_ObjectBroker::getNewSection方法的典型用法代码示例。如果您正苦于以下问题:C++ FEM_ObjectBroker::getNewSection方法的具体用法?C++ FEM_ObjectBroker::getNewSection怎么用?C++ FEM_ObjectBroker::getNewSection使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FEM_ObjectBroker
的用法示例。
在下文中一共展示了FEM_ObjectBroker::getNewSection方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: data
//.........这里部分代码省略.........
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;
}
示例2: data
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;
}
示例3: idData
int ShellMITC9::recvSelf (int commitTag,Channel &theChannel,
FEM_ObjectBroker &theBroker)
{
int res = 0;
int dataTag = this->getDbTag();
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 ShellMITC9::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);
static Vector vectData(5);
res += theChannel.recvVector(dataTag, commitTag, vectData);
if (res < 0) {
opserr << "WARNING ShellMITC9::sendSelf() - " << this->getTag() << " failed to send ID\n";
return res;
}
Ktt = vectData(0);
alphaM = vectData(1);
betaK = vectData(2);
betaK0 = vectData(3);
betaKc = vectData(4);
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.getNewSection(matClassTag);
if (materialPointers[i] == 0) {
opserr << "ShellMITC9::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 << "ShellMITC9::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.getNewSection(matClassTag);
if (materialPointers[i] == 0) {
opserr << "ShellMITC9::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 << "ShellMITC9::recvSelf() - material " << i << "failed to recv itself\n";
return res;
}
}
}
return res;
}
示例4: data
//.........这里部分代码省略.........
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;
}
示例5: idData
int
ZeroLengthSection::recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker)
{
int res = 0;
int dataTag = this->getDbTag();
// ZeroLengthSection creates an ID, receives the ID and then sets the
// internal data with the data in the ID
static ID idData(9);
res += theChannel.recvID(dataTag, commitTag, idData);
if (res < 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to receive ID data\n";
return res;
}
res += theChannel.recvMatrix(dataTag, commitTag, transformation);
if (res < 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to receive transformation Matrix\n";
return res;
}
this->setTag(idData(0));
dimension = idData(1);
numDOF = idData(2);
connectedExternalNodes(0) = idData(4);
connectedExternalNodes(1) = idData(5);
useRayleighDamping =idData(8);
// Check that there is correct number of materials, reallocate if needed
if (order != idData(3)) {
order = idData(3);
// Allocate transformation matrix
if (A != 0)
delete A;
A = new Matrix(order, numDOF);
if (A == 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to allocate transformation Matrix\n";
exit(-1);
}
// Allocate section deformation vector
if (v != 0)
delete v;
v = new Vector(order);
if (v == 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to allocate deformation Vector\n";
exit(-1);
}
if (numDOF == 6) {
P = &P6;
K = &K6;
}
else {
P = &P12;
K = &K12;
}
}
int secClassTag = idData(6);
// If null, get a new one from the broker
if (theSection == 0)
theSection = theBroker.getNewSection(secClassTag);
// If wrong type, get a new one from the broker
if (theSection->getClassTag() != secClassTag) {
delete theSection;
theSection = theBroker.getNewSection(secClassTag);
}
// Check if either allocation failed from broker
if (theSection == 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to allocate new Section\n";
return -1;
}
// Receive the section
theSection->setDbTag(idData(7));
res += theSection->recvSelf(commitTag, theChannel, theBroker);
if (res < 0) {
opserr << "ZeroLengthSection::recvSelf -- failed to receive Section\n";
return res;
}
return res;
}