xc
FEM_ObjectBroker.h
1 // -*-c++-*-
2 //----------------------------------------------------------------------------
3 // XC program; finite element analysis code
4 // for structural analysis and design.
5 //
6 // Copyright (C) Luis C. Pérez Tato
7 //
8 // This program derives from OpenSees <http://opensees.berkeley.edu>
9 // developed by the «Pacific earthquake engineering research center».
10 //
11 // Except for the restrictions that may arise from the copyright
12 // of the original program (see copyright_opensees.txt)
13 // software es libre: usted puede redistribuirlo y/o modificarlo
14 // under the terms of the GNU General Public License published by
15 // the Free Software Foundation, either version 3 of the License, or
16 // (at your option) any later version.
17 //
18 // This software is distributed in the hope that it will be useful, but
19 // WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
21 // GNU General Public License for more details.
22 //
23 // You should have received a copy of the GNU General Public License
24 // junto a este programa.
25 // If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------------
27 /* ****************************************************************** **
28 ** OpenSees - Open System for Earthquake Engineering Simulation **
29 ** Pacific Earthquake Engineering Research Center **
30 ** **
31 ** **
32 ** (C) Copyright 1999, The Regents of the University of California **
33 ** All Rights Reserved. **
34 ** **
35 ** Commercial use of this program without express permission of the **
36 ** University of California, Berkeley, is strictly prohibited. See **
37 ** file 'COPYRIGHT' in main directory for information on usage and **
38 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
39 ** **
40 ** Developed by: **
41 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
42 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
43 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
44 ** **
45 ** ****************************************************************** */
46 
47 // $Revision: 1.5 $
48 // $Date: 2005/11/22 19:40:05 $
49 // $Source: /usr/local/cvs/OpenSees/SRC/actor/objectBroker/FEM_ObjectBroker.h,v $
50 
51 
52 // Written: fmk
53 // Revision: A
54 //
55 // Purpose: This file contains the class definition for FEM_ObjectBroker.
56 // FEM_ObjectBroker is is an object broker class for the finite element
57 // method. All methods are virtual to allow for subclasses; which can be
58 // used by programmers when introducing new subclasses of the main objects.
59 //
60 // What: "@(#) FEM_ObjectBroker.h, revA"
61 
62 #ifndef FEM_ObjectBroker_h
63 #define FEM_ObjectBroker_h
64 
65 #include "utility/actor/objectBroker/ObjectBroker.h"
66 #include <string>
67 
68 class CommandEntity;
69 
70 namespace XC {
71 class Channel;
72 
73 class TaggedObject;
74 class GraphNumberer;
75 class Vertex;
76 
77 class Element;
78 class Node;
79 class MFreedom_Constraint;
80 class MRMFreedom_Constraint;
81 class SFreedom_Constraint;
82 class NodeLocker;
83 class NodalLoad;
84 class ElementalLoad;
85 class ElementEdgeLoad;
86 class LoadPattern;
87 class LoadCombination;
88 class TimeSeries;
89 class TimeSeriesIntegrator;
90 
91 class Matrix;
92 class Vector;
93 class ID;
94 class Subdomain;
95 class ConstraintHandler;
96 class DOF_Numberer;
97 class AnalysisModel;
98 class EquiSolnAlgo;
99 class DomainDecompAlgo;
100 class StaticIntegrator;
101 class TransientIntegrator;
102 class IncrementalIntegrator;
103 
104 class LinearSOE;
105 class EigenSOE;
106 class DomainSolver;
107 class DomainDecompositionAnalysis;
108 class LinearSOESolver;
109 class PartitionedModelBuilder;
110 class LineSearch;
111 
112 class CrdTransf;
113 class CrdTransf2d;
114 class CrdTransf3d;
115 class ShellCrdTransf3dBase;
116 
117 class BeamIntegration;
118 
119 class UniaxialMaterial;
120 class SectionForceDeformation;
121 class NDMaterial;
122 class Material;
123 class Fiber;
124 class FrictionModel;
125 
126 class ConvergenceTest;
127 class SectionForceDeformation;
128 
129 class DataOutputHandler;
130 class Recorder;
131 
132 class Actor;
133 
134 class Parameter;
135 
136 class MovableObject;
137 class GroundMotion;
138 
140 //
152  {
153  private:
154  LinearSOESolver *lastLinearSolver;
155  DomainSolver *lastDomainSolver;
156  public:
158 
159  virtual Actor* getNewActor(int classTag, Channel *theChannel);
160 
162 
163  virtual GraphNumberer *getPtrNewGraphNumberer(int classTag);
164  virtual Vertex *getNewVertex(int classTag);
165 
166  // methods to get new modeling class objects
167  virtual Element *getNewElement(int classTag);
168  virtual Node *getNewNode(int classTag);
169  virtual MFreedom_Constraint *getNewMP(int classTag);
170  virtual MRMFreedom_Constraint *getNewMRMP(int classTag);
171  virtual SFreedom_Constraint *getNewSP(int classTag);
172  virtual NodalLoad *getNewNodalLoad(int classTag);
173  virtual ElementalLoad *getNewElementalLoad(int classTag);
174 
175  virtual CrdTransf2d *getNewCrdTransf2d(int classTag);
176  virtual CrdTransf3d *getNewCrdTransf3d(int classTag);
177  CrdTransf *getNewCrdTransf(int classTag);
179 
180  virtual BeamIntegration *getNewBeamIntegration(int classTag);
181 
182  virtual UniaxialMaterial *getNewUniaxialMaterial(int classTag);
183  virtual SectionForceDeformation *getNewSection(int classTag);
184  virtual NDMaterial *getNewNDMaterial(int classTag);
185  virtual Fiber *getNewFiber(int classTag);
186  virtual FrictionModel *getNewFrictionModel(int classTag);
187  virtual Material *getNewMaterial(int classTag);
188 
189  virtual ConvergenceTest *getNewConvergenceTest(CommandEntity *owr,int classTag);
190  virtual NodeLocker *getNewNodeLocker(int classTag);
191  virtual LoadPattern *getNewLoadPattern(int classTag);
192  virtual LoadCombination *getNewLoadCombination(int classTag);
193  virtual GroundMotion *getNewGroundMotion(int classTag);
194  virtual TimeSeries *getNewTimeSeries(int classTag);
195  virtual TimeSeriesIntegrator *getNewTimeSeriesIntegrator(int classTag);
196 
197  // matrix vector and id objects
198  virtual Matrix *getPtrNewMatrix(int classTag, int noRows, int noCols);
199  virtual Vector *getPtrNewVector(int classTag, int size);
200  virtual ID *getPtrNewID(int classTag, int size);
201 
202  // methods for output objects
203  virtual DataOutputHandler *getPtrNewDataOutputHandler(int classTag);
204  virtual Recorder *getPtrNewRecorder(int classTag);
205 
206 
207  // methods to get new analysis objects
208  virtual ConstraintHandler *getNewConstraintHandler(int classTag);
209  virtual DOF_Numberer *getNewNumberer(int classTag);
210  virtual AnalysisModel *getNewAnalysisModel(int classTag);
211  virtual LineSearch *getLineSearch(int classTag);
212  virtual EquiSolnAlgo *getNewEquiSolnAlgo(int classTag);
213  virtual DomainDecompAlgo *getNewDomainDecompAlgo(int classTag);
214  virtual StaticIntegrator *getNewStaticIntegrator(int classTag);
215  virtual TransientIntegrator *getNewTransientIntegrator(int classTag);
216  virtual IncrementalIntegrator *getNewIncrementalIntegrator(int classTag);
217 
218  virtual LinearSOE *getNewLinearSOE(int classTagSOE, int classTagSolver);
219  virtual EigenSOE *getNewEigenSOE(int classTagSOE);
220  virtual LinearSOESolver *getNewLinearSolver(void);
221 
222  virtual LinearSOE *getPtrNewDDLinearSOE(int classTagSOE,int classTagDDSolver);
223  virtual DomainSolver *getNewDomainSolver(void);
224 
225  virtual DomainDecompositionAnalysis *getNewDomainDecompAnalysis(int classTag, Subdomain &theDomain);
226 
227  virtual Subdomain *getSubdomainPtr(int classTag);
228 
229  Parameter *getParameter(int classTag);
230 
231  virtual int addUniaxialMaterial(int classTag, const std::string &, const std::string &, UniaxialMaterial *(*)(void));
232 
233  boost::python::dict getPyDict(void) const;
234  void setPyDict(const boost::python::dict &);
235  };
236 
237 TaggedObject *get_new_tagged_object(const std::string &className, const int &classTag);
238 MovableObject *get_new_movable_object(const std::string &className, const int &classTag);
239 } // end of XC namespace
240 
241 #endif
242 
243 
virtual Node * getNewNode(int classTag)
Broke a node from its class tag.
Definition: FEM_ObjectBroker.cpp:275
Base class for force deformation section models.
Definition: SectionForceDeformation.h:88
{staticFormTaylor} {equation}
Definition: StaticIntegrator.h:138
virtual TransientIntegrator * getNewTransientIntegrator(int classTag)
Broke a TransientIntegrator object from its class tag.
Definition: FEM_ObjectBroker.cpp:1264
Base class for DOF numbererers.
Definition: DOF_Numberer.h:94
virtual ConvergenceTest * getNewConvergenceTest(CommandEntity *owr, int classTag)
Broke a Convergence test object from its class tag.
Definition: FEM_ObjectBroker.cpp:827
virtual LoadPattern * getNewLoadPattern(int classTag)
Broke a LoadPattern object from its class tag.
Definition: FEM_ObjectBroker.cpp:863
virtual IncrementalIntegrator * getNewIncrementalIntegrator(int classTag)
Broke a IncrementalIntegrator object from its class tag.
Definition: FEM_ObjectBroker.cpp:1297
Float vector abstraction.
Definition: Vector.h:94
Domain enclosed in another domain.
Definition: Subdomain.h:102
virtual DataOutputHandler * getPtrNewDataOutputHandler(int classTag)
Broke a DataOutputHandler object from its class tag.
Definition: FEM_ObjectBroker.cpp:1024
virtual DomainDecompositionAnalysis * getNewDomainDecompAnalysis(int classTag, Subdomain &theDomain)
Broke a DomainDecompositionAnalysis object from its class tag.
Definition: FEM_ObjectBroker.cpp:1684
Vertex of a graph.
Definition: Vertex.h:80
virtual EquiSolnAlgo * getNewEquiSolnAlgo(int classTag)
Broke a EquiSolnAlgo object from its class tag.
Definition: FEM_ObjectBroker.cpp:1158
virtual BeamIntegration * getNewBeamIntegration(int classTag)
Return a beam integration scheme from the tag argument.
Definition: FEM_ObjectBroker.cpp:475
virtual ID * getPtrNewID(int classTag, int size)
Broke an ID object pointer from its class tag and its size.
Definition: FEM_ObjectBroker.cpp:999
ConstraintHandlers enforce the single and multi freedom constraints that exist in the domain by creat...
Definition: ConstraintHandler.h:93
Base class for eigenproblem systems of equations.
Definition: EigenSOE.h:64
Linear system of equations.
Definition: LinearSOE.h:92
virtual Vector * getPtrNewVector(int classTag, int size)
Broke a vector object pointer from its class tag and its size.
Definition: FEM_ObjectBroker.cpp:980
TaggedObject * get_new_tagged_object(const std::string &className, const int &classTag)
Creates a new tagged object whose class is determined by the given class name and class tag...
Definition: FEM_ObjectBroker.cpp:1812
Object that can move between processes.
Definition: MovableObject.h:100
CrdTransf provides the abstraction of a frame coordinate transformation.
Definition: CrdTransf.h:88
An Recorder object is used in the program to store/restore information at each commit().
Definition: Recorder.h:87
virtual FrictionModel * getNewFrictionModel(int classTag)
Broke a FrictionModel object from its class tag.
Definition: FEM_ObjectBroker.cpp:807
MovableObject * get_new_movable_object(const std::string &className, const int &classTag)
Creates a new movable object whose class is determined by the given class name and class tag...
Definition: FEM_ObjectBroker.cpp:1846
Base class for uniaxial materials.
Definition: UniaxialMaterial.h:93
CrdTransf * getNewCrdTransf(int classTag)
Broke a CrdTransf object from its class tag.
Definition: FEM_ObjectBroker.cpp:448
virtual Matrix * getPtrNewMatrix(int classTag, int noRows, int noCols)
Broke a matrix object pointer from its class tag and its size.
Definition: FEM_ObjectBroker.cpp:962
Solution algorithm for domain decomposition analysis.
Definition: DomainDecompAlgo.h:89
Base class for materials.
Definition: Material.h:93
virtual MFreedom_Constraint * getNewMP(int classTag)
Broke a MFreedom_Constraint object from its class tag.
Definition: FEM_ObjectBroker.cpp:291
FEM_ObjectBroker is is an object broker class for the finite element method.
Definition: FEM_ObjectBroker.h:151
Vector of integers.
Definition: ID.h:95
virtual ElementalLoad * getNewElementalLoad(int classTag)
Broke a ElementalLoad object from its class tag.
Definition: FEM_ObjectBroker.cpp:365
Base class for object brokers.
Definition: ObjectBroker.h:79
virtual LoadCombination * getNewLoadCombination(int classTag)
Broke a LoadCombination object from its class tag.
Definition: FEM_ObjectBroker.cpp:883
A load pattern is the spatial distribution as well as its variation in time of a specific set of forc...
Definition: LoadPattern.h:97
virtual Subdomain * getSubdomainPtr(int classTag)
Broke a Subdomain object from its class tag.
Definition: FEM_ObjectBroker.cpp:1709
virtual DomainSolver * getNewDomainSolver(void)
Broke a DomainSolver object from its class tag.
Definition: FEM_ObjectBroker.cpp:1646
virtual LineSearch * getLineSearch(int classTag)
Broke a LineSearch object from its class tag.
Definition: FEM_ObjectBroker.cpp:1193
Base class for the finite elements.
Definition: Element.h:112
virtual TimeSeries * getNewTimeSeries(int classTag)
Broke a time series object from its class tag.
Definition: FEM_ObjectBroker.cpp:918
virtual LinearSOE * getPtrNewDDLinearSOE(int classTagSOE, int classTagDDSolver)
Broke a LinearSOE object from its class tag.
Definition: FEM_ObjectBroker.cpp:1650
Base class for 2D coordinate transformation.
Definition: CrdTransf2d.h:78
Base class for 3D coordinate transformations.
Definition: ShellCrdTransf3dBase.h:49
virtual Recorder * getPtrNewRecorder(int classTag)
Broke a recorde object from its class tag.
Definition: FEM_ObjectBroker.cpp:1047
virtual UniaxialMaterial * getNewUniaxialMaterial(int classTag)
Broke a UniaxialMaterial object from its class tag.
Definition: FEM_ObjectBroker.cpp:541
virtual MRMFreedom_Constraint * getNewMRMP(int classTag)
Broke a MRMFreedom_Constraint object from its class tag.
Definition: FEM_ObjectBroker.cpp:309
Section fiber.
Definition: Fiber.h:90
virtual LinearSOE * getNewLinearSOE(int classTagSOE, int classTagSolver)
Broke a LinearSOE object from its class tag.
Definition: FEM_ObjectBroker.cpp:1326
Used when performing a domain decomposition analysis.
Definition: DomainDecompositionAnalysis.h:91
virtual Fiber * getNewFiber(int classTag)
Broke a Fiber object from its class tag.
Definition: FEM_ObjectBroker.cpp:789
virtual StaticIntegrator * getNewStaticIntegrator(int classTag)
Broke a StaticIntegrator object from its class tag.
Definition: FEM_ObjectBroker.cpp:1236
Container for FE_Element and DOF_Group objects created by the constraint handler. ...
Definition: AnalysisModel.h:134
virtual SFreedom_Constraint * getNewSP(int classTag)
Broke a SFreedom_Constraint object from its class tag.
Definition: FEM_ObjectBroker.cpp:326
virtual NDMaterial * getNewNDMaterial(int classTag)
Broke a NDMaterial object from its class tag.
Definition: FEM_ObjectBroker.cpp:728
virtual NodeLocker * getNewNodeLocker(int classTag)
Broke a NodeLocker object from its class tag.
Definition: FEM_ObjectBroker.cpp:847
Single freedom constraint.
Definition: SFreedom_Constraint.h:85
virtual GroundMotion * getNewGroundMotion(int classTag)
Broke a ground motion object from its class tag.
Definition: FEM_ObjectBroker.cpp:899
Base class for ground motions.
Definition: GroundMotion.h:84
Base class for integration on beam elements.
Definition: BeamIntegration.h:80
Objet that can execute python scripts.
Definition: CommandEntity.h:40
Time integration of time series.
Definition: TimeSeriesIntegrator.h:75
virtual EigenSOE * getNewEigenSOE(int classTagSOE)
Broke an EigenSOE object from its class tag.
Definition: FEM_ObjectBroker.cpp:1610
IncrementalIntegrator is an algorithmic class for setting up the finite element equations in an incre...
Definition: IncrementalIntegrator.h:100
virtual Actor * getNewActor(int classTag, Channel *theChannel)
Creates a new actor with the class tag being passed as parameter.
Definition: FEM_ObjectBroker.cpp:96
Base class for friction models.
Definition: FrictionModel.h:83
Channel is an abstract base class which defines the channel interface.
Definition: Channel.h:92
Base class for solution algorithms.
Definition: EquiSolnAlgo.h:91
virtual Material * getNewMaterial(int classTag)
Broke a Material object from its class tag.
Definition: FEM_ObjectBroker.cpp:776
virtual AnalysisModel * getNewAnalysisModel(int classTag)
Broke a AnalysisModel object from its class tag.
Definition: FEM_ObjectBroker.cpp:1140
Base class for 2D and 3D materials.
Definition: NDMaterial.h:101
virtual TimeSeriesIntegrator * getNewTimeSeriesIntegrator(int classTag)
Broke a time series object from its class tag.
Definition: FEM_ObjectBroker.cpp:944
convergence test.
Definition: ConvergenceTest.h:81
virtual ConstraintHandler * getNewConstraintHandler(int classTag)
Broke a ConstraintHandler object from its class tag.
Definition: FEM_ObjectBroker.cpp:1084
Numberer for problem&#39;s degrees of freedom.
Definition: GraphNumberer.h:86
virtual DOF_Numberer * getNewNumberer(int classTag)
Broke a DOF_Numberer object from its class tag.
Definition: FEM_ObjectBroker.cpp:1112
Multiple retained nodes constraint.
Definition: MRMFreedom_Constraint.h:59
Object idenfied by an integer (tag).
Definition: TaggedObject.h:92
virtual Element * getNewElement(int classTag)
Broke a Element object from its class tag.
Definition: FEM_ObjectBroker.cpp:178
Single freedom constraints that make part of a load pattern.
Definition: NodeLocker.h:45
Base class for line search algorithms.
Definition: LineSearch.h:87
The PartitionedModelBuilder class is an abstract class.
Definition: PartitionedModelBuilder.h:87
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
Base class of the solvers for linear system of equations.
Definition: LinearSOESolver.h:87
Time variation of loads.
Definition: TimeSeries.h:85
Remote object associated with a shadow (local) object.
Definition: Actor.h:105
Matrix of floats.
Definition: Matrix.h:111
used to solve a system of equations and to do static condensation operations on the linear system of ...
Definition: DomainSolver.h:83
Multi-freedom constraint.
Definition: MFreedom_Constraint.h:113
virtual PartitionedModelBuilder * getPtrNewPartitionedModelBuilder(Subdomain &theSub, int classTag)
Creates a new PartitionedModelBuilder de la clase cuyo tag being passed as parameter.
Definition: FEM_ObjectBroker.cpp:116
Parameter.
Definition: Parameter.h:68
virtual GraphNumberer * getPtrNewGraphNumberer(int classTag)
Broke a GraphNumberer object from its class tag.
Definition: FEM_ObjectBroker.cpp:136
Base class for loads over elements.
Definition: ElementalLoad.h:79
virtual CrdTransf2d * getNewCrdTransf2d(int classTag)
Broke a CrdTransf2d object from its class tag.
Definition: FEM_ObjectBroker.cpp:408
boost::python::dict getPyDict(void) const
Return a Python dictionary with the object members values.
Definition: FEM_ObjectBroker.cpp:1793
Base class for load pattern combinations (1.5*selfWeight+1.0*permanentLoad+1.6*trafficLoad ...
Definition: LoadCombination.h:45
Parameter * getParameter(int classTag)
Broke a Parameter object from its class tag.
Definition: FEM_ObjectBroker.cpp:1718
virtual Vertex * getNewVertex(int classTag)
Broke a Vertex object from its class tag.
Definition: FEM_ObjectBroker.cpp:156
ShellCrdTransf3dBase * getNewShellCrdTransf3d(int classTag)
Broke a ShellCrdTransf3dBase object from its class tag.
Definition: FEM_ObjectBroker.cpp:459
Mesh node.
Definition: Node.h:111
virtual CrdTransf3d * getNewCrdTransf3d(int classTag)
Broke a CrdTransf3d object from its class tag.
Definition: FEM_ObjectBroker.cpp:428
Load over a node.
Definition: NodalLoad.h:83
Base class for data output handlers.
Definition: DataOutputHandler.h:69
virtual SectionForceDeformation * getNewSection(int classTag)
Broke a SectionForceDeformation object from its class tag.
Definition: FEM_ObjectBroker.cpp:670
virtual DomainDecompAlgo * getNewDomainDecompAlgo(int classTag)
Broke a DomainDecompAlgo object from its class tag.
Definition: FEM_ObjectBroker.cpp:1218
virtual NodalLoad * getNewNodalLoad(int classTag)
Broke a nodal load from its class identifier.
Definition: FEM_ObjectBroker.cpp:348
Base class for 3D coordinate transformation.
Definition: CrdTransf3d.h:81
void setPyDict(const boost::python::dict &)
Set the values of the object members from a Python dictionary.
Definition: FEM_ObjectBroker.cpp:1801