00001 /* ****************************************************************** ** 00002 ** OpenSees - Open System for Earthquake Engineering Simulation ** 00003 ** Pacific Earthquake Engineering Research Center ** 00004 ** ** 00005 ** ** 00006 ** (C) Copyright 1999, The Regents of the University of California ** 00007 ** All Rights Reserved. ** 00008 ** ** 00009 ** Commercial use of this program without express permission of the ** 00010 ** University of California, Berkeley, is strictly prohibited. See ** 00011 ** file 'COPYRIGHT' in main directory for information on usage and ** 00012 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. ** 00013 ** ** 00014 ** Developed by: ** 00015 ** Frank McKenna (fmckenna@ce.berkeley.edu) ** 00016 ** Gregory L. Fenves (fenves@ce.berkeley.edu) ** 00017 ** Filip C. Filippou (filippou@ce.berkeley.edu) ** 00018 ** ** 00019 ** ****************************************************************** */ 00020 00021 // $Revision: 1.2 $ 00022 // $Date: 2001/05/26 06:21:59 $ 00023 // $Source: /usr/local/cvs/OpenSees/SRC/analysis/model/AnalysisModel.h,v $ 00024 00025 00026 #ifndef AnalysisModel_h 00027 #define AnalysisModel_h 00028 00029 // File: ~/analysis/model/AnalysisModel.h 00030 // 00031 // Written: fmk 00032 // Created: 9/96 00033 // Revision: A 00034 // 00035 // Description: This file contains the class definition for AnalysisModel. 00036 // AnalysisModel is a container class. This class is responsible for holding 00037 // and providing access to the FE_Element and DOF_Group objects that the 00038 // ConstraintHandler creates. It is also responsible for updating the 00039 // response quantities at the DOF_Groups and for triggering methods 00040 // in the associated Domain. 00041 // 00042 // What: "@(#) AnalysisModel.h, revA" 00043 00044 #ifndef _bool_h 00045 #include <bool.h> 00046 #endif 00047 00048 #include <SimpleDOF_Iter.h> 00049 #include <SimpleFE_Iter.h> 00050 00051 #include <MovableObject.h> 00052 00053 #include <Domain.h> 00054 #include <FE_EleIter.h> 00055 #include <DOF_GrpIter.h> 00056 #include <Graph.h> 00057 #include <FE_Element.h> 00058 #include <DOF_Group.h> 00059 #include <Vector.h> 00060 #include <DOF_Graph.h> 00061 #include <DOF_GroupGraph.h> 00062 #include <FEM_ObjectBroker.h> 00063 00090 class AnalysisModel: public MovableObject 00091 { 00092 public: 00100 AnalysisModel(); 00101 00107 AnalysisModel(int classTag); 00108 00117 virtual ~AnalysisModel(); 00118 00119 00121 virtual bool addFE_Element(FE_Element *theFE_Ele); 00123 virtual bool addDOF_Group(DOF_Group *theDOF_Grp); 00124 00126 virtual void clearAll(void); 00127 00129 virtual int getNumDOF_Groups(void) const; 00131 virtual DOF_Group *getDOF_GroupPtr(int tag); 00133 virtual FE_EleIter &getFEs(); 00135 virtual DOF_GrpIter &getDOFs(); 00136 00138 virtual void setNumEqn(int) ; 00140 virtual int getNumEqn(void) const ; 00142 virtual Graph &getDOFGraph(void); 00144 virtual Graph &getDOFGroupGraph(void); 00145 00146 // methods to update the response quantities at the DOF_Groups, 00148 virtual void setResponse(const Vector &disp, 00149 const Vector &vel, 00150 const Vector &accel); 00152 virtual void setDisp(const Vector &disp); 00154 virtual void setVel(const Vector &vel); 00156 virtual void setAccel(const Vector &vel); 00157 00159 virtual void incrDisp(const Vector &disp); 00161 virtual void incrVel(const Vector &vel); 00163 virtual void incrAccel(const Vector &vel); 00164 00166 virtual void setNumEigenvectors(int numEigenvectors); 00168 virtual void setEigenvector(int mode, const Vector &); 00170 virtual void setEigenvalues(const Vector &); 00171 00173 virtual void setLinks(Domain &theDomain); 00174 00176 virtual void applyLoadDomain(double pseudoTime); 00178 virtual void updateDomain(void); 00180 virtual int commitDomain(void); 00182 virtual int revertDomainToLastCommit(void); 00184 virtual double getCurrentDomainTime(void); 00186 virtual void setCurrentDomainTime(double newTime); 00187 00189 virtual int sendSelf(int commitTag, Channel &theChannel); 00191 virtual int recvSelf(int commitTag, Channel &theChannel, 00192 FEM_ObjectBroker &theBroker); 00193 00195 friend #include <SimpleFE_Iter.h> 00196 friend #include <SimpleDOF_Iter.h> 00197 00198 Domain *getDomainPtr(void) const; 00199 00200 protected: 00201 00202 00203 private: 00205 Domain *myDomain; 00207 DOF_Graph *myDOFGraph; 00209 DOF_GroupGraph *myGroupGraph; 00210 00212 int numFE_Ele; 00213 int numDOF_Grp; 00214 int numEqn; 00215 00216 int sizeEle; 00217 int sizeDOF; 00218 00219 FE_Element **theFEs; 00220 DOF_Group **theDOFs; 00221 00222 SimpleFE_Iter theFEiter; 00224 SimpleDOF_Iter theDOFiter; 00225 00226 }; 00227 00228 #endif