本文整理汇总了C++中DOF_Group::getTag方法的典型用法代码示例。如果您正苦于以下问题:C++ DOF_Group::getTag方法的具体用法?C++ DOF_Group::getTag怎么用?C++ DOF_Group::getTag使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DOF_Group
的用法示例。
在下文中一共展示了DOF_Group::getTag方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: theMP
PenaltyMP_FE::PenaltyMP_FE(int tag, Domain &theDomain,
MP_Constraint &TheMP, double Alpha)
:FE_Element(tag, 2,(TheMP.getConstrainedDOFs()).Size()+
(TheMP.getRetainedDOFs()).Size()),
theMP(&TheMP), theConstrainedNode(0) , theRetainedNode(0),
tang(0), resid(0), C(0), alpha(Alpha)
{
int size;
const ID &id1 = theMP->getConstrainedDOFs();
size = id1.Size();
const ID &id2 = theMP->getRetainedDOFs();
size += id2.Size();
tang = new Matrix(size,size);
resid = new Vector(size);
C = new Matrix(id1.Size(),size);
if (tang == 0 || resid == 0 || C == 0 ||
tang->noCols() != size || C->noCols() != size ||
resid->Size() != size) {
opserr << "FATAL PenaltyMP_FE::PenaltyMP_FE() - out of memory\n";
exit(-1);
}
theRetainedNode = theDomain.getNode(theMP->getNodeRetained());
theConstrainedNode = theDomain.getNode(theMP->getNodeConstrained());
if (theRetainedNode == 0 || theConstrainedNode == 0) {
opserr << "FATAL PenaltyMP_FE::PenaltyMP_FE() - Constrained or Retained";
opserr << " Node does not exist in Domain\n";
opserr << theMP->getNodeRetained() << " " << theMP->getNodeConstrained() << endln;
exit(-1);
}
// set up the dof groups tags
DOF_Group *dofGrpPtr = 0;
dofGrpPtr = theRetainedNode->getDOF_GroupPtr();
if (dofGrpPtr != 0)
myDOF_Groups(0) = dofGrpPtr->getTag();
else
opserr << "WARNING PenaltyMP_FE::PenaltyMP_FE() - node no Group yet?\n";
dofGrpPtr = theConstrainedNode->getDOF_GroupPtr();
if (dofGrpPtr != 0)
myDOF_Groups(1) = dofGrpPtr->getTag();
else
opserr << "WARNING PenaltyMP_FE::PenaltyMP_FE() - node no Group yet?\n";
if (theMP->isTimeVarying() == false) {
this->determineTangent();
// we can free up the space taken by C as it is no longer needed
if (C != 0)
delete C;
C = 0;
}
}
示例2: alpha
LagrangeSP_FE::LagrangeSP_FE(int tag, Domain &theDomain, SP_Constraint &TheSP,
DOF_Group &theGroup, double Alpha)
:FE_Element(tag, 2,2),
alpha(Alpha), tang(0), resid(0), theSP(&TheSP), theDofGroup(&theGroup)
{
// create a Matrix and a Vector for the tangent and residual
tang = new Matrix(2,2);
resid = new Vector(2);
if ((tang == 0) || (tang->noCols() == 0) || (resid == 0) ||
(resid->Size() == 0)) {
opserr << "WARNING LagrangeSP_FE::LagrangeSP_FE()";
opserr << "- ran out of memory\n";
exit(-1);
}
// zero the Matrix and Vector
resid->Zero();
tang->Zero();
theNode = theDomain.getNode(theSP->getNodeTag());
if (theNode == 0) {
opserr << "WARNING LagrangeSP_FE::LagrangeSP_FE()";
opserr << "- no asscoiated Node\n";
exit(-1);
}
// set the tangent
(*tang)(0,1) = alpha;
(*tang)(1,0) = alpha;
// set the myDOF_Groups tags indicating the attached id's of the
// DOF_Group objects
DOF_Group *theNodesDOFs = theNode->getDOF_GroupPtr();
if (theNodesDOFs == 0) {
opserr << "WARNING LagrangeSP_FE::LagrangeSP_FE()";
opserr << " - no DOF_Group with Constrained Node\n";
exit(-1);
}
myDOF_Groups(0) = theNodesDOFs->getTag();
myDOF_Groups(1) = theDofGroup->getTag();
}
示例3: constrainedDOFs
// void setID(int index, int value);
// Method to set the correMPonding index of the ID to value.
int
PenaltyMP_FE::setID(void)
{
int result = 0;
// first determine the IDs in myID for those DOFs marked
// as constrained DOFs, this is obtained from the DOF_Group
// associated with the constrained node
DOF_Group *theConstrainedNodesDOFs = theConstrainedNode->getDOF_GroupPtr();
if (theConstrainedNodesDOFs == 0) {
opserr << "WARNING PenaltyMP_FE::setID(void)";
opserr << " - no DOF_Group with Constrained Node\n";
return -2;
}
const ID &constrainedDOFs = theMP->getConstrainedDOFs();
const ID &theConstrainedNodesID = theConstrainedNodesDOFs->getID();
int size1 = constrainedDOFs.Size();
for (int i=0; i<size1; i++) {
int constrained = constrainedDOFs(i);
if (constrained < 0 ||
constrained >= theConstrainedNode->getNumberDOF()) {
opserr << "WARNING PenaltyMP_FE::setID(void) - unknown DOF ";
opserr << constrained << " at Node\n";
myID(i) = -1; // modify so nothing will be added to equations
result = -3;
}
else {
if (constrained >= theConstrainedNodesID.Size()) {
opserr << "WARNING PenaltyMP_FE::setID(void) - ";
opserr << " Nodes DOF_Group too small\n";
myID(i) = -1; // modify so nothing will be added to equations
result = -4;
}
else
myID(i) = theConstrainedNodesID(constrained);
}
}
// now determine the IDs for the retained dof's
DOF_Group *theRetainedNodesDOFs = theRetainedNode->getDOF_GroupPtr();
if (theRetainedNodesDOFs == 0) {
opserr << "WARNING PenaltyMP_FE::setID(void)";
opserr << " - no DOF_Group with Retained Node\n";
return -2;
}
const ID &RetainedDOFs = theMP->getRetainedDOFs();
const ID &theRetainedNodesID = theRetainedNodesDOFs->getID();
int size2 = RetainedDOFs.Size();
for (int j=0; j<size2; j++) {
int retained = RetainedDOFs(j);
if (retained < 0 || retained >= theRetainedNode->getNumberDOF()) {
opserr << "WARNING PenaltyMP_FE::setID(void) - unknown DOF ";
opserr << retained << " at Node\n";
myID(j+size1) = -1; // modify so nothing will be added
result = -3;
}
else {
if (retained >= theRetainedNodesID.Size()) {
opserr << "WARNING PenaltyMP_FE::setID(void) - ";
opserr << " Nodes DOF_Group too small\n";
myID(j+size1) = -1; // modify so nothing will be added
result = -4;
}
else
myID(j+size1) = theRetainedNodesID(retained);
}
}
myDOF_Groups(0) = theConstrainedNodesDOFs->getTag();
myDOF_Groups(1) = theRetainedNodesDOFs->getTag();
return result;
}
示例4: MapOfTaggedObjects
Graph &
AnalysisModel::getDOFGroupGraph(void)
{
if (myGroupGraph == 0) {
int numVertex = this->getNumDOF_Groups();
if (numVertex == 0) {
opserr << "WARNING AnalysisMode::getGroupGraph";
opserr << " - 0 vertices, has the Domain been populated?\n";
exit(-1);
}
// myGroupGraph = new Graph(numVertex);
MapOfTaggedObjects *graphStorage = new MapOfTaggedObjects();
myGroupGraph = new Graph(*graphStorage);
if (numVertex == 0) {
opserr << "WARNING AnalysisMode::getGroupGraph";
opserr << " - out of memory\n";
exit(-1);
}
DOF_Group *dofPtr;
// now create the vertices with a reference equal to the DOF_Group number.
// and a tag which ranges from 0 through numVertex-1
DOF_GrpIter &dofIter2 = this->getDOFs();
int count = START_VERTEX_NUM;
while ((dofPtr = dofIter2()) != 0) {
int DOF_GroupTag = dofPtr->getTag();
int DOF_GroupNodeTag = dofPtr->getNodeTag();
int numDOF = dofPtr->getNumFreeDOF();
Vertex *vertexPtr = new Vertex(DOF_GroupTag, DOF_GroupNodeTag, 0, numDOF);
if (vertexPtr == 0) {
opserr << "WARNING DOF_GroupGraph::DOF_GroupGraph";
opserr << " - Not Enough Memory to create ";
opserr << count << "th Vertex\n";
return *myGroupGraph;
}
myGroupGraph->addVertex(vertexPtr);
}
// now add the edges, by looping over the Elements, getting their
// IDs and adding edges between DOFs for equation numbers >= START_EQN_NUM
FE_Element *elePtr;
FE_EleIter &eleIter = this->getFEs();
while((elePtr = eleIter()) != 0) {
const ID &id = elePtr->getDOFtags();
int size = id.Size();
for (int i=0; i<size; i++) {
int dof1 = id(i);
for (int j=0; j<size; j++)
if (i != j) {
int dof2 = id(j);
myGroupGraph->addEdge(dof1,dof2);
}
}
}
}
return *myGroupGraph;
}