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
00037
00038
00039 #ifndef Domain_h
00040 #define Domain_h
00041
00042 #include <iostream.h>
00043 #include <Vector.h>
00044
00045 #ifndef _bool_h
00046 #include <bool.h>
00047 #endif
00048
00049 #include <Element.h>
00050 #include <Node.h>
00051 #include <SP_Constraint.h>
00052 #include <MP_Constraint.h>
00053 #include <NodalLoad.h>
00054 #include <ElementalLoad.h>
00055 #include <LoadPattern.h>
00056
00057 #include <ElementIter.h>
00058 #include <NodeIter.h>
00059 #include <SP_ConstraintIter.h>
00060 #include <MP_ConstraintIter.h>
00061 #include <LoadPatternIter.h>
00062
00063 #include <SingleDomEleIter.h>
00064 #include <SingleDomNodIter.h>
00065 #include <SingleDomSP_Iter.h>
00066 #include <SingleDomMP_Iter.h>
00067 #include <SingleDomAllSP_Iter.h>
00068
00069 #include <Recorder.h>
00070 #include <Graph.h>
00071 #include <NodeGraph.h>
00072 #include <ElementGraph.h>
00073 #include <Channel.h>
00074 #include <FEM_ObjectBroker.h>
00075
00076 #include <TaggedObjectStorage.h>
00077
00107 class Domain
00108 {
00109 public:
00119 Domain();
00120
00131 Domain(int numNodes, int numElements, int numSPs, int numMPs,
00132
00133 int numLoadPatterns);
00134
00138 Domain(TaggedObjectStorage &theNodesStorage,
00139
00140 TaggedObjectStorage &theElementsStorage,
00141 TaggedObjectStorage &theMPsStorage,
00142 TaggedObjectStorage &theSPsStorage,
00143 TaggedObjectStorage &theLoadPatternsStorage);
00144
00153 Domain(TaggedObjectStorage &theStorageType);
00154
00155
00165 virtual ~Domain();
00166
00167
00169 virtual bool addElement(Element *);
00182 virtual bool addNode(Node *);
00183
00185 virtual bool addSP_Constraint(SP_Constraint *);
00186
00188 virtual bool addMP_Constraint(MP_Constraint *);
00190 virtual bool addLoadPattern(LoadPattern *);
00191
00193 virtual bool addSP_Constraint(SP_Constraint *, int loadPatternTag);
00195 virtual bool addNodalLoad(NodalLoad *, int loadPatternTag);
00197 virtual bool addElementalLoad(ElementalLoad *, int loadPatternTag);
00198
00200 virtual void clearAll(void);
00202 virtual Element *removeElement(int tag);
00204 virtual Node *removeNode(int tag);
00206 virtual SP_Constraint *removeSP_Constraint(int tag);
00208 virtual MP_Constraint *removeMP_Constraint(int tag);
00210 virtual LoadPattern *removeLoadPattern(int loadTag);
00211
00213 virtual NodalLoad *removeNodalLoad(int tag, int loadPattern);
00215 virtual ElementalLoad *removeElementalLoad(int tag, int loadPattern);
00217 virtual SP_Constraint *removeSP_Constraint(int tag, int loadPattern);
00218
00220 virtual ElementIter &getElements();
00222 virtual NodeIter &getNodes();
00224 virtual SP_ConstraintIter &getSPs();
00226 virtual MP_ConstraintIter &getMPs();
00228 virtual LoadPatternIter &getLoadPatterns();
00230 virtual SP_ConstraintIter &getDomainAndLoadPatternSPs();
00231
00233 virtual Element *getElement(int tag);
00235 virtual Node *getNode(int tag);
00237 virtual SP_Constraint *getSP_Constraint(int tag);
00239 virtual MP_Constraint *getMP_Constraint(int tag);
00241 virtual LoadPattern *getLoadPattern(int tag);
00242
00244 virtual double getCurrentTime(void) const;
00246 virtual int getNumElements(void) const;
00248 virtual int getNumNodes(void) const;
00250 virtual int getNumSPs(void) const;
00252 virtual int getNumMPs(void) const;
00254 virtual int getNumLoadPatterns(void) const;
00256 virtual const Vector &getPhysicalBounds(void);
00257
00259 virtual Graph &getElementGraph(void);
00261 virtual Graph &getNodeGraph(void);
00262
00264 virtual void setCommitTag(int newTag);
00266 virtual void setCurrentTime(double newTime);
00268 virtual void setCommittedTime(double newTime);
00270 virtual void applyLoad(double pseudoTime);
00272 virtual void setLoadConstant(void);
00274 virtual int initialize(void);
00275
00277 virtual int commit(void);
00279 virtual int revertToLastCommit(void);
00281 virtual int revertToStart(void);
00283 virtual int update(void);
00284
00285
00287 virtual int setEigenvalues(const Vector &theEigenvalues);
00289 virtual const Vector &getEigenvalues(void);
00291 virtual double getTimeEigenvaluesSet(void);
00292
00294 virtual int hasDomainChanged(void);
00296 virtual void setDomainChangeStamp(int newStamp);
00297
00299 virtual int addRecorder(Recorder &theRecorder);
00301 virtual int playback(int cTag);
00303 virtual int removeRecorders(void);
00304
00306 virtual void Print(ostream &s, int flag =0);
00308 friend ostream &operator<<(ostream &s, Domain &M);
00309
00311 virtual int sendSelf(int commitTag, Channel &theChannel);
00313 virtual int recvSelf(int commitTag, Channel &theChannel,
00314 FEM_ObjectBroker &theBroker);
00315
00316 protected:
00318 virtual void domainChange(void);
00320 virtual int buildEleGraph(Graph *theEleGraph);
00322 virtual int buildNodeGraph(Graph *theNodeGraph);
00323
00324 private:
00326 double currentTime;
00327 double committedTime;
00328 int currentGeoTag;
00329 bool hasDomainChangedFlag;
00330 int theDbTag;
00331 int lastGeoSendTag;
00332 int dbEle, dbNod, dbSPs, dbMPs, dbLPs;
00333
00334 bool eleGraphBuiltFlag;
00336 bool nodeGraphBuiltFlag;
00337
00339 Graph *theNodeGraph;
00341 Graph *theElementGraph;
00342
00344 TaggedObjectStorage *theElements;
00346 TaggedObjectStorage *theNodes;
00348 TaggedObjectStorage *theSPs;
00350 TaggedObjectStorage *theMPs;
00352 TaggedObjectStorage *theLoadPatterns;
00353
00355 SingleDomEleIter *theEleIter;
00357 SingleDomNodIter *theNodIter;
00359 SingleDomSP_Iter *theSP_Iter;
00361 SingleDomMP_Iter *theMP_Iter;
00363 LoadPatternIter *theLoadPatternIter;
00365 SingleDomAllSP_Iter *allSP_Iter;
00366
00368 Recorder **theRecorders;
00370 int numRecorders;
00372 int commitTag;
00373
00375 Vector theBounds;
00376
00378 Vector *theEigenvalues;
00380 double theEigenvalueSetTime;
00381 };
00382
00383 #endif
00384
00385