xc
PtrArray3dBase.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 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program.
26 // If not, see <http://www.gnu.org/licenses/>.
27 //----------------------------------------------------------------------------
28 //PtrArray3dBase.h
29 //Pointers in an array of matrices
30 
31 #ifndef PTRARRAY3DBASE_H
32 #define PTRARRAY3DBASE_H
33 
34 #include "utility/matrices/3d_arrays/Array3dBase.h"
35 #include "utility/kernel/CommandEntity.h"
36 
37 namespace XC{
38 
42 template <class PtrArray>
43 class PtrArray3dBase: public Array3dBase<PtrArray>, public CommandEntity
44  {
45  protected:
46  void set_owner_matrices(void);
47 
48  public:
49  typedef typename Array3dBase<PtrArray>::value_type value_type;
50  typedef typename Array3dBase<PtrArray>::iterator iterator;
51  PtrArray3dBase(const size_t &n_layers= 0);
52  PtrArray3dBase(const size_t &n_layers,const PtrArray &);
53  PtrArray3dBase(const size_t &,const size_t &,const size_t &);
54 
55  void resize(const size_t &);
56  void resize(const size_t &,const size_t &,const size_t &,const value_type &v= value_type());
57  size_t NumPtrs(void) const;
58  void clearAll(void);
59 
60  void dim(const size_t &,const size_t &,const size_t &);
61 
62  std::vector<int> getLayerObjectsTags(const size_t &);
63  std::vector<int> getRowObjectsTags(const size_t &,const size_t &);
64  std::vector<int> getRowsObjectsTags(const size_t &);
65  std::vector<int> getColumnObjectsTags(const size_t &,const size_t &);
66  std::vector<int> getColumnsObjectsTags(const size_t &);
67  std::vector<int> getLayerInteriorObjectsTags(const size_t &);
68  std::vector<int> getRowInteriorObjectsTags(const size_t &,const size_t &);
69  std::vector<int> getRowsInteriorObjectsTags(const size_t &);
70  std::vector<int> getColumnInteriorObjectsTags(const size_t &,const size_t &);
71  std::vector<int> getColumnsInteriorObjectsTags(const size_t &);
72  std::vector<int> getTagsInteriorObjs(void);
73  };
74 
76 template <class PtrArray>
78  : Array3dBase<PtrArray>(n_layers), CommandEntity()
79  { set_owner_matrices(); }
80 
82 template <class PtrArray>
83 PtrArray3dBase<PtrArray>::PtrArray3dBase(const size_t &n_layers,const PtrArray &m)
84  : Array3dBase<PtrArray>(n_layers,m), CommandEntity()
85  { set_owner_matrices(); }
86 
88 template <class PtrArray>
89 PtrArray3dBase<PtrArray>::PtrArray3dBase(const size_t &n_layers,const size_t &n_rows,const size_t &n_cols)
90  : Array3dBase<PtrArray>(n_layers,n_rows,n_cols,nullptr), CommandEntity()
91  {
92  set_owner_matrices();
93  }
94 
96 template <class PtrArray>
98  {
99  for(iterator i=this->begin();i!=this->end();i++)
100  i->set_owner(this);
101  }
102 
104 template <class PtrArray>
105 void XC::PtrArray3dBase<PtrArray>::dim(const size_t &nLayers,const size_t &nRows,const size_t &numberOfColumns)
106  { Array3dBase<PtrArray>::dim(nLayers,nRows,numberOfColumns,nullptr); }
107 
109 template <class PtrArray>
110 void PtrArray3dBase<PtrArray>::resize(const size_t &n_layers)
111  {
113  set_owner_matrices();
114  }
116 template <class PtrArray>
117 void PtrArray3dBase<PtrArray>::resize(const size_t &n_layers,const size_t &n_rows,const size_t &n_cols,const value_type &v)
118  {
119  Array3dBase<PtrArray>::resize(n_layers,n_rows,n_cols);
120  set_owner_matrices();
121  }
122 
124 template <class PtrArray>
127 
129 template <class PtrArray>
131  {
134  }
135 
136 
138 template <class PtrArray>
139 std::vector<int> PtrArray3dBase<PtrArray>::getLayerObjectsTags(const size_t &c)
140  { return (*this)(c).getTagsObjs(); }
141 
143 template <class PtrArray>
144 std::vector<int> PtrArray3dBase<PtrArray>::getRowObjectsTags(const size_t &c,const size_t &f)
145  {
146  const size_t numCols= this->getNumberOfColumns();
147  std::vector<int> retval;
148  for(size_t k= 1;k<=numCols;k++)
149  retval[k-1]= (*this)(c,f,k)->getTag();
150  return retval;
151  }
152 
154 template <class PtrArray>
155 std::vector<int> PtrArray3dBase<PtrArray>::getRowsObjectsTags(const size_t &f)
156  {
157  const size_t num_layers= this->getNumberOfLayers();
158  const size_t numCols= this->getNumberOfColumns();
159  m_int retval(num_layers,numCols);
160  for(size_t i= 1;i<=num_layers;i++)
161  for(size_t k= 1;k<=numCols;k++)
162  retval(i,k)= (*this)(i,f,k)->getTag();
163  return retval.getVector();
164  }
165 
167 template <class PtrArray>
168 std::vector<int> PtrArray3dBase<PtrArray>::getColumnObjectsTags(const size_t &layer,const size_t &c)
169  {
170  const size_t n_rows= this->getNumberOfRows();
171  std::vector<int> retval(n_rows);
172  for(size_t j= 1;j<=n_rows;j++)
173  retval[j-1]= (*this)(layer,j,c)->getTag();
174  return retval;
175  }
176 
178 template <class PtrArray>
179 std::vector<int> PtrArray3dBase<PtrArray>::getColumnsObjectsTags(const size_t &c)
180  {
181  const size_t num_layers= this->getNumberOfLayers();
182  const size_t n_rows= this->getNumberOfRows();
183  m_int retval(num_layers,n_rows);
184  for(size_t i= 1;i<=num_layers;i++)
185  for(size_t j= 1;j<=n_rows;j++)
186  retval(i,j)= (*this)(i,j,c)->getTag();
187  return retval.getVector();
188  }
189 
191 template <class PtrArray>
193  { return (*this)(c).getObjsInteriores(); }
194 
196 template <class PtrArray>
197 std::vector<int> PtrArray3dBase<PtrArray>::getRowInteriorObjectsTags(const size_t &c,const size_t &f)
198  {
199  const size_t numCols= this->getNumberOfColumns();
200  std::vector<int> retval(numCols);
201  for(size_t k= 1;k<=numCols;k++)
202  retval[k-1]= (*this)(c,f,k)->getTag();
203  return retval;
204  }
205 
207 template <class PtrArray>
209  {
210  const size_t num_layers= this->getNumberOfLayers();
211  const size_t numCols= this->getNumberOfColumns();
212  m_int retval(num_layers-2,numCols-2);
213  for(size_t i= 2;i<num_layers;i++)
214  for(size_t k= 2;k<numCols;k++)
215  retval(i-1,k-1)= (*this)(i,f,k)->getTag();
216  return retval.getVector();
217  }
218 
220 template <class PtrArray>
221 std::vector<int> PtrArray3dBase<PtrArray>::getColumnInteriorObjectsTags(const size_t &layer,const size_t &c)
222  {
223  const size_t n_rows= this->getNumberOfRows();
224  std::vector<int> retval(n_rows-2);
225  for(size_t j= 2;j<n_rows;j++)
226  retval[j-2]= (*this)(layer,j,c)->getTag();
227  return retval;
228  }
229 
231 template <class PtrArray>
233  {
234  const size_t num_layers= this->getNumberOfLayers();
235  const size_t n_rows= this->getNumberOfRows();
236  m_int retval(num_layers-2,n_rows-2);
237  for(size_t i= 2;i<num_layers;i++)
238  for(size_t j= 2;j<n_rows;j++)
239  retval(i-1,j-1)= (*this)(i,j,c)->getTag();
240  return retval.getVector();
241  }
242 
244 template <class PtrArray>
246  {
247  std::cerr << "deprecated; use python" << std::endl;
248  std::vector<int> retval;
249  const size_t num_layers= this->getNumberOfLayers();
250  if(num_layers==1)
251  retval= (*this)(1).getTagsInteriorObjs();
252  else
253  {
254  const size_t n_rows= this->getNumberOfRows();
255  if(n_rows==1)
256  retval= getRowsInteriorObjectsTags(1);
257  else
258  {
259  const size_t numCols= this->getNumberOfColumns();
260  if(numCols==1)
261  retval= getColumnsInteriorObjectsTags(1);
262  else
263  for(size_t i= 2;i<num_layers;i++)
264  {
265  std::vector<int> tmp= getLayerInteriorObjectsTags(i);
266  retval.insert(retval.end(),tmp.begin(),tmp.end());
267  }
268  }
269  }
270  return retval;
271  }
272 
273 } //end of XC namespace.
274 
275 #endif
void dim(const size_t &, const size_t &, const size_t &, const value_type &default_value=value_type())
Matrix dimensions.
Definition: Array3dBase.h:183
void clear(void)
Clears container.
Definition: Array3dBase.h:303
std::vector< int > getColumnObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the column.
Definition: PtrArray3dBase.h:168
Matrix which element type has estructura de anillo respecto a las operaciones + y *...
Definition: ZMatrix.h:37
std::vector< int > getColumnInteriorObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the c-th column interior.
Definition: PtrArray3dBase.h:221
std::vector< int > getRowsInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th rows interior.
Definition: PtrArray3dBase.h:208
void resize(const size_t &)
Resize the array.
Definition: PtrArray3dBase.h:110
std::vector< int > getRowObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the row.
Definition: PtrArray3dBase.h:144
std::vector< int > getRowInteriorObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the row interior.
Definition: PtrArray3dBase.h:197
void clearAll(void)
Clears all.
Definition: PtrArray3dBase.h:130
void set_owner_matrices(void)
Sets the owner for the matrices.
Definition: PtrArray3dBase.h:97
std::vector< int > getLayerInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the layer interior.
Definition: PtrArray3dBase.h:192
Objet that can execute python scripts.
Definition: CommandEntity.h:40
size_t getNumberOfComponents(void) const
Return the number of components in the container.
Definition: Array3dBase.h:235
std::vector< int > getColumnsInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th columns interior.
Definition: PtrArray3dBase.h:232
std::vector< int > getColumnsObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th columns.
Definition: PtrArray3dBase.h:179
std::vector< int > getRowsObjectsTags(const size_t &)
Return the identifiers of the objects in the f-th rows.
Definition: PtrArray3dBase.h:155
size_t NumPtrs(void) const
Return the number of elements of the array.
Definition: PtrArray3dBase.h:125
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
void dim(const size_t &, const size_t &, const size_t &)
Matrix dimensions.
Definition: PtrArray3dBase.h:105
arrays3d
Definition: Array3dBase.h:51
void clearPyProps(void)
Clear python properties map.
Definition: EntityWithProperties.cc:33
std::vector< int > getLayerObjectsTags(const size_t &)
Return the identifiers of the objects in the layer.
Definition: PtrArray3dBase.h:139
std::vector< int > getTagsInteriorObjs(void)
Return the tabs of the inerior elements.
Definition: PtrArray3dBase.h:245
void resize(const size_t &)
Resize the array.
Definition: Array3dBase.h:188
Three-dimensional array of object pointers.
Definition: PtrArray3dBase.h:43
PtrArray3dBase(const size_t &n_layers=0)
Default constructor.
Definition: PtrArray3dBase.h:77