xc
SetMeshComp.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 // XC is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU General Public License as 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 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 // GNU General Public License for more details.
22 //
23 // You should have received a copy of the GNU General Public License
24 // along with this program.
25 // If not, see <http://www.gnu.org/licenses/>.
26 //----------------------------------------------------------------------------
27 //SetMeshComp.h
28 
29 #ifndef SETMESHCOMP_H
30 #define SETMESHCOMP_H
31 
32 #include "SetBase.h"
33 #include "DqPtrs.h"
34 #include "DqPtrsNode.h"
35 #include "DqPtrsElem.h"
36 #include "DqPtrsConstraint.h"
37 #include <set>
38 
39 class Pos3d;
41 class Plane;
42 
43 namespace XC {
44 class TrfGeom;
45 class SFreedom_Constraint;
46 class ID;
47 class Element;
48 class Node;
49 class Constraint;
50 
59 class SetMeshComp: public SetBase
60  {
61  protected:
62  template <class L>
63  static void numerate_list(L &l);
64  void numerate(void);
65  public:
66  //Nodes.
67  typedef DqPtrsNode::iterator nod_iterator;
68  typedef DqPtrsNode::const_iterator nod_const_iterator;
69 
70  //Elements.
71  typedef DqPtrsElem::iterator elem_iterator;
72  typedef DqPtrsElem::const_iterator elem_const_iterator;
73 
74  //Constraints.
76  typedef DqPtrsConstraint::iterator constraint_iterator;
77  typedef DqPtrsConstraint::const_iterator constraint_const_iterator;
78 
79  private:
80  DqPtrsNode nodes;
81  DqPtrsElem elements;
82  lst_ptr_constraints constraints;
83 
84  protected:
85  void extend_lists(const SetMeshComp &);
86  void substract_lists(const SetMeshComp &);
87  void intersect_lists(const SetMeshComp &);
88  void copy_lists(const SetMeshComp &);
89 
90  void clearAll(void);
91 
92  DbTagData &getDbTagData(void) const;
93  int sendData(Communicator &);
94  int recvData(const Communicator &);
95 
96 
97  void calc_resisting_force(void);
98 
99  void move(const Vector3d &);
100  public:
101  SetMeshComp(const std::string &nmb="",Preprocessor *preprocessor= nullptr);
102  SetMeshComp(const SetMeshComp &);
103  ~SetMeshComp(void);
104 
109 
110  void extend(const DqPtrsNode &);
111  void extend(const DqPtrsElem &);
112  void extend(const lst_ptr_constraints &);
113  void extend(const SetMeshComp &);
114  void substract(const DqPtrsNode &);
115  void substract(const DqPtrsElem &);
116  void substract(const lst_ptr_constraints &);
117  void substract(const SetMeshComp &);
118 
119  std::string getStrName(void) const;
120  void newName(const std::string &);
121  void rename(const std::string &);
122 
124  size_t getNumberOfNodes(void) const
125  { return nodes.size(); }
127  void addNode(Node *nPtr);
129  virtual const DqPtrsNode &getNodes(void) const
130  { return nodes; }
132  virtual DqPtrsNode &getNodes(void)
133  { return nodes; }
135  void setNodes(const DqPtrsNode &nds)
136  { nodes= nds; }
138  void clearNodes(void)
139  { nodes.clearAll(); }
140  void sel_nodes_from_list(const ID &);
141  bool In(const Node *) const;
142  bool isCloserThan(const Pos3d &, const double &) const;
143  bool remove(Node *);
144  SetMeshComp pickNodesInside(const std::string &, const GeomObj3d &, const double &tol= 0.0);
145  SetMeshComp pickNodesInside(const std::string &, const GeomObj2d &, const double &tol= 0.0);
146  BND3d Bnd(const double &) const;
147 
149  size_t getNumberOfElements(void) const
150  { return elements.size(); }
152  void addElement(Element *);
154  virtual const DqPtrsElem &getElements(void) const
155  { return elements; }
157  virtual DqPtrsElem &getElements(void)
158  { return elements; }
160  void setElements(const DqPtrsElem &els)
161  { elements= els; }
163  void clearElements(void)
164  { elements.clearAll(); }
165  void sel_elements_from_list(const ID &tags);
166  bool In(const Element *) const;
167  bool isCloserThan(const GeomObj::list_Pos3d &, const double &) const;
168  bool remove(Element *);
169  SetMeshComp pickElemsInside(const std::string &, const GeomObj3d &, const double &tol= 0.0);
170  SetMeshComp pickElemsInside(const std::string &, const GeomObj2d &, const double &tol= 0.0);
171  SetMeshComp pickElemsCrossing(const std::string &, const GeomObj3d &, const double &tol= 0.0);
172  SetMeshComp pickElemsCrossing(const std::string &, const GeomObj2d &, const double &tol= 0.0);
173  SetMeshComp pickElemsOfType(const std::string &, const std::string &);
174  SetMeshComp pickElemsOfDimension(const std::string &, const size_t &);
175  inline boost::python::list getElementTypesPy(void) const
176  { return elements.getTypesPy(); }
177  inline boost::python::list getElementDimensionsPy(void) const
178  { return elements.getDimensionsPy(); }
179  inline boost::python::list getElementMaterialNamesPy(void) const
180  { return elements.getMaterialNamesPy(); }
181  SetMeshComp pickElemsOfMaterial(const std::string &, const std::string &);
182 
184  size_t getNumberOfConstraints(void) const
185  { return constraints.size(); }
187  void addConstraint(Constraint *);
188  bool remove(Constraint *);
190  virtual const DqPtrsConstraint &getConstraints(void) const
191  { return constraints; }
194  { return constraints; }
197  { constraints= cts; }
199  void clearConstraints(void)
200  { constraints.clearAll(); }
201  void sel_constraints_from_list(const ID &tags, const ID &types);
202 
203  void appendFromGeomEntity(const SetBase &);
204 
205  void clear(void);
206  bool empty(void) const;
207 
208  void fix(const SFreedom_Constraint &);
209 
210  //nod_iterator nodes_begin(void);
211  nod_const_iterator nodes_begin(void) const;
212  //nod_iterator nodes_end(void);
213  nod_const_iterator nodes_end(void) const;
214  Node *findNode(const int &tag);
215  const Node *findNode(const int &tag) const;
216  bool InNodeTag(const int) const;
217  bool InNodeTags(const ID &) const;
218  std::set<int> getNodeTags(void) const;
219  std::set<int> getElementTags(void) const;
220  std::set<int> getConstraintTags(void) const;
221  Node *getNearestNode(const Pos3d &p);
222  const Node *getNearestNode(const Pos3d &p) const;
223 
224 
225  elem_iterator elem_begin(void);
226  elem_const_iterator elem_begin(void) const;
227  elem_iterator elem_end(void);
228  elem_const_iterator elem_end(void) const;
229  Element *findElement(const int &);
230  const Element *findElement(const int &) const;
231  Element *getNearestElement(const Pos3d &);
232  const Element *getNearestElement(const Pos3d &) const;
233 
234  void kill_elements(void);
235  void alive_elements(void);
236  size_t getNumDeadElements(void) const;
237  size_t getNumLiveElements(void) const;
238  size_t getNumDeadNodes(void) const;
239  size_t getNumLiveNodes(void) const;
240 
241  constraint_iterator constraints_begin(void);
242  constraint_const_iterator constraints_begin(void) const;
243  constraint_iterator constraints_end(void);
244  constraint_const_iterator constraints_end(void) const;
245  Constraint *buscaConstraint(const int &tag);
246  const Constraint *buscaConstraint(const int &tag) const;
247 
248  void fillUpwards(void);
249  void fillDownwards(void);
250 
251  virtual void Transform(const TrfGeom &trf);
252 
253  SlidingVectorsSystem3d getResistingSlidingVectorsSystem3d(const Plane &,const Pos3d &,const double &,const bool &) const;
254  Matrix getTangentStiff(const Node &);
255  Matrix getInitialStiff(const Node &);
256 
257  void createInertiaLoads(const Vector &);
258 
259  // mass distribution
260  Matrix getTotalMass(void) const;
261  double getTotalMassComponent(const int &) const;
262 
263  virtual int sendSelf(Communicator &);
264  virtual int recvSelf(const Communicator &);
265 
266  SetMeshComp operator+(const SetMeshComp &) const;
267  SetMeshComp operator-(const SetMeshComp &) const;
268  SetMeshComp operator*(const SetMeshComp &) const;
269 
270  boost::python::dict getPyDict(void) const;
271  void setPyDict(const boost::python::dict &);
272  };
273 
274 
276 template <class L>
278  {
279  size_t idx= 0;
280  typedef typename L::iterator iterator;
281  typedef typename L::reference reference;
282  for(iterator i= l.begin();i!=l.end();i++,idx++)
283  {
284  reference ptr= *i;
285  ptr->set_index(idx);
286  }
287  }
288 
289 } //end of XC namespace
290 #endif
Element * findElement(const int &)
Returns (if it exists) a pointer to the node identified by the tag being passed as parameter...
Definition: SetMeshComp.cc:386
Node * getNearestNode(const Pos3d &p)
Returns the node closest to the point being passed as parameter.
Definition: SetMeshComp.cc:570
void alive_elements(void)
Reactivates the elements.
Definition: SetMeshComp.cc:458
Pointers to node container.
Definition: DqPtrsNode.h:53
Float vector abstraction.
Definition: Vector.h:94
Element * getNearestElement(const Pos3d &)
Returns the element closest to the point being passed as parameter.
Definition: SetMeshComp.cc:585
SetMeshComp & operator*=(const SetMeshComp &)
*= operator (intersection).
Definition: SetMeshComp.cc:93
Matrix getTotalMass(void) const
Return the total mass matrix.
Definition: SetMeshComp.cc:535
~SetMeshComp(void)
Destructor.
Definition: SetMeshComp.cc:911
void createInertiaLoads(const Vector &)
Creates the inertia load that corresponds to the acceleration argument.
Definition: SetMeshComp.cc:528
void sel_constraints_from_list(const ID &tags, const ID &types)
Select the constraints identified by the tags.
Definition: SetMeshComp.cc:828
Base class for position lists.
Definition: PolyPos.h:35
Communication parameters between processes.
Definition: Communicator.h:66
void kill_elements(void)
Deactivates the elements.
Definition: SetMeshComp.cc:454
SetMeshComp pickElemsInside(const std::string &, const GeomObj3d &, const double &tol=0.0)
Return a new set that contains the elements that lie inside of the geometric object.
Definition: SetMeshComp.cc:732
Finite element model generation tools.
Definition: Preprocessor.h:59
std::string getStrName(void) const
Return a copy of the object name.
Definition: SetMeshComp.cc:105
constraint_iterator constraints_begin(void)
Returns an iterator which points to principio de la lista de constraints.
Definition: SetMeshComp.cc:372
void clearNodes(void)
Clears out the nodes.
Definition: SetMeshComp.h:138
virtual void Transform(const TrfGeom &trf)
Aplies the transformation to the positions of the nodes.
Definition: SetMeshComp.cc:321
boost::python::list getDimensionsPy(void) const
Return the dimensions of the elements.
Definition: DqPtrsElem.cc:550
void substract(const DqPtrsNode &)
Appends to this set the nodes from the argument.
Definition: SetMeshComp.cc:160
void extend(const DqPtrsNode &)
Appends to this set the nodes from the argument.
Definition: SetMeshComp.cc:144
void setElements(const DqPtrsElem &els)
Sets the elements.
Definition: SetMeshComp.h:160
BND3d Bnd(const double &) const
Return the nodes current position boundary.
Definition: SetMeshComp.cc:696
virtual int recvSelf(const Communicator &)
Receives object through the communicator argument.
Definition: SetMeshComp.cc:931
size_t getNumLiveElements(void) const
Returns the number of active elements.
Definition: SetMeshComp.cc:437
SetMeshComp operator-(const SetMeshComp &) const
Return the difference.
Definition: SetMeshComp.cc:962
SetMeshComp pickElemsOfMaterial(const std::string &, const std::string &)
Return a new set that contains the elements who have the material being passed as parameter...
Definition: SetMeshComp.cc:813
Vector that stores the dbTags of the class members.
Definition: DbTagData.h:44
SetMeshComp pickElemsOfType(const std::string &, const std::string &)
Return a new set that contains the elements that match the type.
Definition: SetMeshComp.cc:787
void clearAll(void)
Clears out the list of pointers and erases the properties of the object (if any). ...
Definition: DqPtrsKDTree.h:175
void fix(const SFreedom_Constraint &)
Applies the single freedom constraint being passed as parameter to the nodes.
Definition: SetMeshComp.cc:325
void addElement(Element *)
Adds an element.
Definition: SetMeshComp.cc:254
Vector of integers.
Definition: ID.h:95
Plane in a three-dimensional space.
Definition: Plane.h:49
bool empty(void) const
Return true if the set is empty.
Definition: SetMeshComp.cc:236
Base de las clases Set y SetEstruct.
Definition: SetBase.h:51
double getTotalMassComponent(const int &) const
Return the total mass matrix component for the DOF argument.
Definition: SetMeshComp.cc:543
Base class for the finite elements.
Definition: Element.h:112
size_t getNumberOfConstraints(void) const
Returns the number of constraints.
Definition: SetMeshComp.h:184
boost::python::dict getPyDict(void) const
Return a Python dictionary with the object members values.
Definition: SetMeshComp.cc:978
size_t getNumDeadNodes(void) const
Returns the number of inactive nodes.
Definition: SetMeshComp.cc:450
Set of mesh components (nodes, elements and constraints).
Definition: SetMeshComp.h:59
SetMeshComp pickNodesInside(const std::string &, const GeomObj3d &, const double &tol=0.0)
Return a new set that contains the nodes that lie insiof the geometric object.
Definition: SetMeshComp.cc:670
Base class for the two-dimensional geometric objects.
Definition: GeomObj2d.h:37
SetMeshComp pickElemsCrossing(const std::string &, const GeomObj3d &, const double &tol=0.0)
Return a new set with the elements that cross (i.e.
Definition: SetMeshComp.cc:774
DqPtrsConstraint::const_iterator constraint_const_iterator
Iterator over the set de constraints.
Definition: SetMeshComp.h:77
bool isCloserThan(const Pos3d &, const double &) const
Return true if the distance to the given point is smaller than the given one.
Definition: SetMeshComp.cc:265
void move(const Vector3d &)
Moves the nodes.
Definition: SetMeshComp.cc:317
DqPtrsElem::const_iterator elem_const_iterator
Iterator over the element set.
Definition: SetMeshComp.h:72
void appendFromGeomEntity(const SetBase &)
Appends to this set the objects the nodes and elements from the set being passed as parameter...
Definition: SetMeshComp.cc:214
virtual const DqPtrsConstraint & getConstraints(void) const
Return the constraints container.
Definition: SetMeshComp.h:190
SetMeshComp operator*(const SetMeshComp &) const
Return the intersection.
Definition: SetMeshComp.cc:970
SetMeshComp operator+(const SetMeshComp &) const
Return the union of both objects.
Definition: SetMeshComp.cc:954
Constraint * buscaConstraint(const int &tag)
Returns, if it exists, a pointer to the constraint which tag is being passed as parameter.
Definition: SetMeshComp.cc:396
int sendData(Communicator &)
Send members through the communicator argument.
Definition: SetMeshComp.cc:883
bool In(const Node *) const
Returns true if the node belongs to the set.
Definition: SetMeshComp.cc:258
void clearAll(void)
Clears all objects from the set.
Definition: SetMeshComp.cc:241
bool InNodeTag(const int) const
Returns true if the node with the tag being passed as parameter, belongs to the set.
Definition: SetMeshComp.cc:557
nod_const_iterator nodes_begin(void) const
Returns an iterator that points to the first item of the node container.
Definition: SetMeshComp.cc:339
void sel_nodes_from_list(const ID &)
Select the nodes identified by the tags being passed as parameters.
Definition: SetMeshComp.cc:648
bool InNodeTags(const ID &) const
Returns true if the nodes, with the tags being passed as parameter, belongs to the set...
Definition: SetMeshComp.cc:562
virtual const DqPtrsElem & getElements(void) const
Returns the element container.
Definition: SetMeshComp.h:154
void addConstraint(Constraint *)
Adds a constraint.
Definition: SetMeshComp.cc:822
virtual const DqPtrsNode & getNodes(void) const
Return the node container.
Definition: SetMeshComp.h:129
Single freedom constraint.
Definition: SFreedom_Constraint.h:85
void newName(const std::string &)
Set the object name.
Definition: SetMeshComp.cc:109
void intersect_lists(const SetMeshComp &)
Remove the objects that doesn&#39;t also belong to the argument.
Definition: SetMeshComp.cc:201
constraint_iterator constraints_end(void)
Returns an iterator apuntando tras el final de la lista de constraints.
Definition: SetMeshComp.cc:378
void fillUpwards(void)
Appends to this set the objects that make reference to one or more of the objects that already are in...
Definition: SetMeshComp.cc:621
void setPyDict(const boost::python::dict &)
Set the values of the object members from a Python dictionary.
Definition: SetMeshComp.cc:1032
Matrix getTangentStiff(const Node &)
Return the contribution of the elements to the tangent stiffness of the node argument.
Definition: SetMeshComp.cc:514
void substract_lists(const SetMeshComp &)
Remove the objects of the argument.
Definition: SetMeshComp.cc:193
SetMeshComp pickElemsOfDimension(const std::string &, const size_t &)
Return a new set that contains the elements of the specified dimension.
Definition: SetMeshComp.cc:800
DqPtrsNode::iterator nod_iterator
Iterator over the node set.
Definition: SetMeshComp.h:67
void setNodes(const DqPtrsNode &nds)
Sets the nodes.
Definition: SetMeshComp.h:135
DbTagData & getDbTagData(void) const
Returns a vector to store the dbTags of the class members.
Definition: SetMeshComp.cc:876
Matrix getInitialStiff(const Node &)
Return the contribution of the elements to the tangent stiffness of the node argument.
Definition: SetMeshComp.cc:523
"boundary" en tres dimensiones.
Definition: BND3d.h:34
void clearElements(void)
Clears out the elements.
Definition: SetMeshComp.h:163
std::set< int > getNodeTags(void) const
Returns node tags.
Definition: SetMeshComp.cc:566
nod_const_iterator nodes_end(void) const
Returns an iterator that points to the past-the-end item in the node container.
Definition: SetMeshComp.cc:345
void clearAll(void)
Clears out the list of pointers and erases the properties of the object (if any). ...
Definition: DqPtrs.h:203
void addNode(Node *nPtr)
Appends a node.
Definition: SetMeshComp.cc:250
SetMeshComp & operator-=(const SetMeshComp &)
-= operator.
Definition: SetMeshComp.cc:81
void extend_lists(const SetMeshComp &)
Appends to this set the objects from the argument set.
Definition: SetMeshComp.cc:185
SetMeshComp(const std::string &nmb="", Preprocessor *preprocessor=nullptr)
Constructor.
Definition: SetMeshComp.cc:52
void fillDownwards(void)
Appends to the set being passed as parameter the nodes that touch any of the elements of the set...
Definition: SetMeshComp.cc:606
size_t getNumLiveNodes(void) const
Returns the number of active nodes.
Definition: SetMeshComp.cc:445
Geometric transformation that can be applied to the components of a set.
Definition: TrfGeom.h:48
DqPtrsConstraint lst_ptr_constraints
Set of constraints.
Definition: SetMeshComp.h:75
Node * findNode(const int &tag)
Returns (if it exists) a pointer to the node which tag is being passed as parameter.
Definition: SetMeshComp.cc:350
virtual DqPtrsElem & getElements(void)
Returns the elements container.
Definition: SetMeshComp.h:157
virtual int sendSelf(Communicator &)
Sends object through the communicator argument.
Definition: SetMeshComp.cc:915
boost::python::list getTypesPy(void) const
Return the types (class names) of the elements.
Definition: DqPtrsElem.cc:526
boost::python::list getMaterialNamesPy(void) const
Return the names of the materials in a python list.
Definition: DqPtrsElem.cc:503
std::set< int > getElementTags(void) const
Returns the element tags.
Definition: SetMeshComp.cc:581
void calc_resisting_force(void)
Compute the internal forces on each element.
Definition: SetMeshComp.cc:462
std::set< int > getConstraintTags(void) const
Returns the tags de los constraints.
Definition: SetMeshComp.cc:596
Posición en tres dimensiones.
Definition: Pos3d.h:44
int recvData(const Communicator &)
Receives members through the communicator argument.
Definition: SetMeshComp.cc:895
static void numerate_list(L &l)
Set indices to the object to allow its use in VTK.
Definition: SetMeshComp.h:277
Sliding vectors system en un espacio tridimensional.
Definition: SlidingVectorsSystem3d.h:39
void rename(const std::string &)
Rename object.
Definition: SetMeshComp.cc:113
void clearConstraints(void)
Clears out the constraints.
Definition: SetMeshComp.h:199
size_t getNumberOfElements(void) const
Returns the number of elements.
Definition: SetMeshComp.h:149
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
size_t getNumberOfNodes(void) const
Returns the number of nodes.
Definition: SetMeshComp.h:124
Constraint pointers deque.
Definition: DqPtrsConstraint.h:46
Matrix of floats.
Definition: Matrix.h:111
void clear(void)
Clears all the objects of the lists.
Definition: SetMeshComp.cc:227
void numerate(void)
Assigns index to each object in the set (nodes,elements,points...) to be able to use them in VTK...
Definition: SetMeshComp.cc:309
virtual DqPtrsNode & getNodes(void)
Return the nodes container.
Definition: SetMeshComp.h:132
Base class for model constraints.
Definition: Constraint.h:48
void sel_elements_from_list(const ID &tags)
Selects the elements identified by the tags being passed as parameters.
Definition: SetMeshComp.cc:710
SlidingVectorsSystem3d getResistingSlidingVectorsSystem3d(const Plane &, const Pos3d &, const double &, const bool &) const
Return the resultant of the forces over the nodes near to the plane, of the elements behind the plane...
Definition: SetMeshComp.cc:467
size_t getNumDeadElements(void) const
Returns the number of inactive elements.
Definition: SetMeshComp.cc:441
void copy_lists(const SetMeshComp &)
Copy (into this set) the lists from the set being passed as parameter.
Definition: SetMeshComp.cc:133
Mesh node.
Definition: Node.h:111
SetMeshComp & operator=(const SetMeshComp &)
Assignment operator.
Definition: SetMeshComp.cc:61
DqPtrsConstraint::iterator constraint_iterator
Iterator over the set de constraints.
Definition: SetMeshComp.h:76
void setConstraints(const DqPtrsConstraint &cts)
Sets the constraints.
Definition: SetMeshComp.h:196
Pointer to element container.
Definition: DqPtrsElem.h:51
virtual DqPtrsConstraint & getConstraints(void)
Return the constraints container.
Definition: SetMeshComp.h:193
Vector en tres dimensiones.
Definition: Vector3d.h:39
SetMeshComp & operator+=(const SetMeshComp &)
+= operator.
Definition: SetMeshComp.cc:69
DqPtrsElem::iterator elem_iterator
Iterator over the element set.
Definition: SetMeshComp.h:71
Clase base para los objetos en tres dimensiones.
Definition: GeomObj3d.h:43
DqPtrsNode::const_iterator nod_const_iterator
Iterator over the node set.
Definition: SetMeshComp.h:68