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 Damping;
118 
119 class BeamIntegration;
120 
121 class UniaxialMaterial;
122 class SectionForceDeformation;
123 class NDMaterial;
124 class Material;
125 class Fiber;
126 class FrictionModel;
127 
128 class ConvergenceTest;
129 class SectionForceDeformation;
130 
131 class DataOutputHandler;
132 class Recorder;
133 
134 class Actor;
135 
136 class Parameter;
137 
138 class MovableObject;
139 class GroundMotion;
140 
142 //
154  {
155  private:
156  LinearSOESolver *lastLinearSolver;
157  DomainSolver *lastDomainSolver;
158  public:
160 
161  virtual Actor* getNewActor(int classTag, Channel *theChannel);
162 
164 
165  virtual GraphNumberer *getPtrNewGraphNumberer(int classTag);
166  virtual Vertex *getNewVertex(int classTag);
167 
168  // methods to get new modeling class objects
169  virtual Element *getNewElement(int classTag);
170  virtual Node *getNewNode(int classTag);
171  virtual MFreedom_Constraint *getNewMP(int classTag);
172  virtual MRMFreedom_Constraint *getNewMRMP(int classTag);
173  virtual SFreedom_Constraint *getNewSP(int classTag);
174  virtual NodalLoad *getNewNodalLoad(int classTag);
175  virtual ElementalLoad *getNewElementalLoad(int classTag);
176 
177  virtual CrdTransf2d *getNewCrdTransf2d(int classTag);
178  virtual CrdTransf3d *getNewCrdTransf3d(int classTag);
179  CrdTransf *getNewCrdTransf(int classTag);
181 
182  virtual BeamIntegration *getNewBeamIntegration(int classTag);
183 
184  virtual UniaxialMaterial *getNewUniaxialMaterial(int classTag);
185  virtual SectionForceDeformation *getNewSection(int classTag);
186  virtual NDMaterial *getNewNDMaterial(int classTag);
187  virtual Fiber *getNewFiber(int classTag);
188  virtual FrictionModel *getNewFrictionModel(int classTag);
189  virtual Material *getNewMaterial(int classTag);
190  virtual Damping *getNewDamping(int classTag);
191 
192  virtual ConvergenceTest *getNewConvergenceTest(CommandEntity *owr,int classTag);
193  virtual NodeLocker *getNewNodeLocker(int classTag);
194  virtual LoadPattern *getNewLoadPattern(int classTag);
195  virtual LoadCombination *getNewLoadCombination(int classTag);
196  virtual GroundMotion *getNewGroundMotion(int classTag);
197  virtual TimeSeries *getNewTimeSeries(int classTag);
198  virtual TimeSeriesIntegrator *getNewTimeSeriesIntegrator(int classTag);
199 
200  // matrix vector and id objects
201  virtual Matrix *getPtrNewMatrix(int classTag, int noRows, int noCols);
202  virtual Vector *getPtrNewVector(int classTag, int size);
203  virtual ID *getPtrNewID(int classTag, int size);
204 
205  // methods for output objects
206  virtual DataOutputHandler *getPtrNewDataOutputHandler(int classTag);
207  virtual Recorder *getPtrNewRecorder(int classTag);
208 
209 
210  // methods to get new analysis objects
211  virtual ConstraintHandler *getNewConstraintHandler(int classTag);
212  virtual DOF_Numberer *getNewNumberer(int classTag);
213  virtual AnalysisModel *getNewAnalysisModel(int classTag);
214  virtual LineSearch *getLineSearch(int classTag);
215  virtual EquiSolnAlgo *getNewEquiSolnAlgo(int classTag);
216  virtual DomainDecompAlgo *getNewDomainDecompAlgo(int classTag);
217  virtual StaticIntegrator *getNewStaticIntegrator(int classTag);
218  virtual TransientIntegrator *getNewTransientIntegrator(int classTag);
219  virtual IncrementalIntegrator *getNewIncrementalIntegrator(int classTag);
220 
221  virtual LinearSOE *getNewLinearSOE(int classTagSOE, int classTagSolver);
222  virtual EigenSOE *getNewEigenSOE(int classTagSOE);
223  virtual LinearSOESolver *getNewLinearSolver(void);
224 
225  virtual LinearSOE *getPtrNewDDLinearSOE(int classTagSOE,int classTagDDSolver);
226  virtual DomainSolver *getNewDomainSolver(void);
227 
228  virtual DomainDecompositionAnalysis *getNewDomainDecompAnalysis(int classTag, Subdomain &theDomain);
229 
230  virtual Subdomain *getSubdomainPtr(int classTag);
231 
232  Parameter *getParameter(int classTag);
233 
234  virtual int addUniaxialMaterial(int classTag, const std::string &, const std::string &, UniaxialMaterial *(*)(void));
235 
236  boost::python::dict getPyDict(void) const;
237  void setPyDict(const boost::python::dict &);
238  };
239 
240 TaggedObject *get_new_tagged_object(const std::string &className, const int &classTag);
241 MovableObject *get_new_movable_object(const std::string &className, const int &classTag);
242 } // end of XC namespace
243 
244 #endif
245 
246 
virtual Node * getNewNode(int classTag)
Broke a node from its class tag.
Definition: FEM_ObjectBroker.cpp:276
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:1327
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:890
virtual LoadPattern * getNewLoadPattern(int classTag)
Broke a LoadPattern object from its class tag.
Definition: FEM_ObjectBroker.cpp:926
virtual IncrementalIntegrator * getNewIncrementalIntegrator(int classTag)
Broke a IncrementalIntegrator object from its class tag.
Definition: FEM_ObjectBroker.cpp:1360
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:1087
virtual DomainDecompositionAnalysis * getNewDomainDecompAnalysis(int classTag, Subdomain &theDomain)
Broke a DomainDecompositionAnalysis object from its class tag.
Definition: FEM_ObjectBroker.cpp:1747
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:1221
virtual BeamIntegration * getNewBeamIntegration(int classTag)
Return a beam integration scheme from the tag argument.
Definition: FEM_ObjectBroker.cpp:497
virtual ID * getPtrNewID(int classTag, int size)
Broke an ID object pointer from its class tag and its size.
Definition: FEM_ObjectBroker.cpp:1062
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:1043
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:1875
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:870
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:1913
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:470
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:1025
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:292
FEM_ObjectBroker is is an object broker class for the finite element method.
Definition: FEM_ObjectBroker.h:153
Vector of integers.
Definition: ID.h:95
virtual ElementalLoad * getNewElementalLoad(int classTag)
Broke a ElementalLoad object from its class tag.
Definition: FEM_ObjectBroker.cpp:383
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:946
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:1772
virtual DomainSolver * getNewDomainSolver(void)
Broke a DomainSolver object from its class tag.
Definition: FEM_ObjectBroker.cpp:1709
virtual LineSearch * getLineSearch(int classTag)
Broke a LineSearch object from its class tag.
Definition: FEM_ObjectBroker.cpp:1256
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:981
virtual LinearSOE * getPtrNewDDLinearSOE(int classTagSOE, int classTagDDSolver)
Broke a LinearSOE object from its class tag.
Definition: FEM_ObjectBroker.cpp:1713
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:1110
virtual UniaxialMaterial * getNewUniaxialMaterial(int classTag)
Broke a UniaxialMaterial object from its class tag.
Definition: FEM_ObjectBroker.cpp:563
virtual MRMFreedom_Constraint * getNewMRMP(int classTag)
Broke a MRMFreedom_Constraint object from its class tag.
Definition: FEM_ObjectBroker.cpp:326
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:1389
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:852
virtual StaticIntegrator * getNewStaticIntegrator(int classTag)
Broke a StaticIntegrator object from its class tag.
Definition: FEM_ObjectBroker.cpp:1299
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:344
virtual NDMaterial * getNewNDMaterial(int classTag)
Broke a NDMaterial object from its class tag.
Definition: FEM_ObjectBroker.cpp:762
virtual NodeLocker * getNewNodeLocker(int classTag)
Broke a NodeLocker object from its class tag.
Definition: FEM_ObjectBroker.cpp:910
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:962
Base class for ground motions.
Definition: GroundMotion.h:84
Base class for integration on beam elements.
Definition: BeamIntegration.h:81
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:1673
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:97
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:810
virtual AnalysisModel * getNewAnalysisModel(int classTag)
Broke a AnalysisModel object from its class tag.
Definition: FEM_ObjectBroker.cpp:1203
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:1007
convergence test.
Definition: ConvergenceTest.h:81
virtual ConstraintHandler * getNewConstraintHandler(int classTag)
Broke a ConstraintHandler object from its class tag.
Definition: FEM_ObjectBroker.cpp:1147
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:1175
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:179
Definition: Damping.h:83
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:117
Parameter.
Definition: Parameter.h:68
virtual GraphNumberer * getPtrNewGraphNumberer(int classTag)
Broke a GraphNumberer object from its class tag.
Definition: FEM_ObjectBroker.cpp:137
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:430
boost::python::dict getPyDict(void) const
Return a Python dictionary with the object members values.
Definition: FEM_ObjectBroker.cpp:1856
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:1781
virtual Vertex * getNewVertex(int classTag)
Broke a Vertex object from its class tag.
Definition: FEM_ObjectBroker.cpp:157
ShellCrdTransf3dBase * getNewShellCrdTransf3d(int classTag)
Broke a ShellCrdTransf3dBase object from its class tag.
Definition: FEM_ObjectBroker.cpp:481
Mesh node.
Definition: Node.h:112
virtual CrdTransf3d * getNewCrdTransf3d(int classTag)
Broke a CrdTransf3d object from its class tag.
Definition: FEM_ObjectBroker.cpp:450
Load over a node.
Definition: NodalLoad.h:83
virtual Damping * getNewDamping(int classTag)
Broke a Damping object from its class tag.
Definition: FEM_ObjectBroker.cpp:823
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:698
virtual DomainDecompAlgo * getNewDomainDecompAlgo(int classTag)
Broke a DomainDecompAlgo object from its class tag.
Definition: FEM_ObjectBroker.cpp:1281
virtual NodalLoad * getNewNodalLoad(int classTag)
Broke a nodal load from its class identifier.
Definition: FEM_ObjectBroker.cpp:366
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:1864