00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <DOF_GroupGraph.h>
00037 #include <Vertex.h>
00038 #include <AnalysisModel.h>
00039 #include <FE_Element.h>
00040 #include <DOF_Group.h>
00041 #include <FE_EleIter.h>
00042 #include <DOF_GrpIter.h>
00043
00044
00045 DOF_GroupGraph::DOF_GroupGraph(AnalysisModel &theModel)
00046 :Graph(theModel.getNumDOF_Groups()+START_VERTEX_NUM),
00047 myModel(theModel)
00048 {
00049
00050 int numVertex = myModel.getNumDOF_Groups();
00051
00052 if (numVertex == 0) {
00053 opserr << "WARNING DOF_GroupGraph::DOF_GroupGraph";
00054 opserr << " - 0 vertices, has the Domain been populated?\n";
00055 return;
00056 }
00057
00058 DOF_Group *dofPtr;
00059
00060
00061
00062
00063 DOF_GrpIter &dofIter2 = theModel.getDOFs();
00064 int count = START_VERTEX_NUM;
00065 while ((dofPtr = dofIter2()) != 0) {
00066 int DOF_GroupTag = dofPtr->getTag();
00067 int DOF_GroupNodeTag = dofPtr->getNodeTag();
00068 int numDOF = dofPtr->getNumFreeDOF();
00069 Vertex *vertexPtr = new Vertex(DOF_GroupTag, DOF_GroupNodeTag, 0, numDOF);
00070
00071 if (vertexPtr == 0) {
00072 opserr << "WARNING DOF_GroupGraph::DOF_GroupGraph";
00073 opserr << " - Not Enough Memory to create ";
00074 opserr << count << "th Vertex\n";
00075 return;
00076 }
00077
00078 this->addVertex(vertexPtr);
00079 }
00080
00081
00082
00083
00084
00085 FE_Element *elePtr;
00086 FE_EleIter &eleIter = myModel.getFEs();
00087
00088 while((elePtr = eleIter()) != 0) {
00089 const ID &id = elePtr->getDOFtags();
00090 int size = id.Size();
00091 for (int i=0; i<size; i++) {
00092 int dof1 = id(i);
00093 for (int j=0; j<size; j++)
00094 if (i != j) {
00095 int dof2 = id(j);
00096 this->addEdge(dof1,dof2);
00097 }
00098 }
00099 }
00100 }
00101
00102 DOF_GroupGraph::~DOF_GroupGraph()
00103 {
00104
00105 }
00106
00107