XC Open source finite element analysis program
TritrizPtrBase.h
1 //----------------------------------------------------------------------------
2 // XC program; finite element analysis code
3 // for structural analysis and design.
4 //
5 // Copyright (C) Luis Claudio Pérez Tato
6 //
7 // This program derives from OpenSees <http://opensees.berkeley.edu>
8 // developed by the «Pacific earthquake engineering research center».
9 //
10 // Except for the restrictions that may arise from the copyright
11 // of the original program (see copyright_opensees.txt)
12 // XC is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This software is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
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 //TritrizPtrBase.h
28 //Vector de matrices de puntos
29 
30 #ifndef TRITRIZPTRBASE_H
31 #define TRITRIZPTRBASE_H
32 
33 #include "xc_utils/src/nucleo/EntCmd.h"
34 #include "xc_utils/src/geom/pos_vec/ConstRefCajaTritriz.h"
35 #include "xc_utils/src/geom/pos_vec/ConstRefCapaICte.h"
36 #include "xc_utils/src/geom/pos_vec/ConstRefCapaJCte.h"
37 #include "xc_utils/src/geom/pos_vec/ConstRefCapaKCte.h"
38 #include "xc_utils/src/geom/pos_vec/ConstRefFilaI.h"
39 #include "xc_utils/src/geom/pos_vec/ConstRefFilaJ.h"
40 #include "xc_utils/src/geom/pos_vec/ConstRefFilaK.h"
41 #include "xc_utils/src/geom/pos_vec/VarRefCajaTritriz.h"
42 #include "xc_utils/src/geom/pos_vec/VarRefCapaICte.h"
43 #include "xc_utils/src/geom/pos_vec/VarRefCapaJCte.h"
44 #include "xc_utils/src/geom/pos_vec/VarRefCapaKCte.h"
45 #include "xc_utils/src/geom/pos_vec/VarRefFilaI.h"
46 #include "xc_utils/src/geom/pos_vec/VarRefFilaJ.h"
47 #include "xc_utils/src/geom/pos_vec/VarRefFilaK.h"
48 
49 namespace XC{
50 
54 template <class MatrizPtr>
55 class TritrizPtrBase: public std::vector<MatrizPtr>, public EntCmd
56  {
57  public:
58  typedef typename MatrizPtr::value_type value_type;
59  typedef typename MatrizPtr::reference reference;
60  typedef typename MatrizPtr::const_reference const_reference;
61  typedef typename std::vector<MatrizPtr>::iterator iterator;
62  typedef typename std::vector<MatrizPtr>::const_iterator const_iterator;
63 
64  typedef ConstRefCajaTritriz<TritrizPtrBase<MatrizPtr> > const_ref_caja;
65  typedef ConstRefCapaICte<TritrizPtrBase<MatrizPtr> > const_ref_capa_i_cte;
66  typedef ConstRefCapaJCte<TritrizPtrBase<MatrizPtr> > const_ref_capa_j_cte;
67  typedef ConstRefCapaKCte<TritrizPtrBase<MatrizPtr> > const_ref_capa_k_cte;
68  typedef ConstRefFilaI<TritrizPtrBase<MatrizPtr> > const_ref_fila_i;
69  typedef ConstRefFilaJ<TritrizPtrBase<MatrizPtr> > const_ref_fila_j;
70  typedef ConstRefFilaK<TritrizPtrBase<MatrizPtr> > const_ref_fila_k;
71 
72  typedef VarRefCajaTritriz<TritrizPtrBase<MatrizPtr> > var_ref_caja;
73  typedef VarRefCapaICte<TritrizPtrBase<MatrizPtr> > var_ref_capa_i_cte;
74  typedef VarRefCapaJCte<TritrizPtrBase<MatrizPtr> > var_ref_capa_j_cte;
75  typedef VarRefCapaKCte<TritrizPtrBase<MatrizPtr> > var_ref_capa_k_cte;
76  typedef VarRefFilaI<TritrizPtrBase<MatrizPtr> > var_ref_fila_i;
77  typedef VarRefFilaJ<TritrizPtrBase<MatrizPtr> > var_ref_fila_j;
78  typedef VarRefFilaK<TritrizPtrBase<MatrizPtr> > var_ref_fila_k;
79  protected:
80  void set_owner_matrices(void);
81 
82  public:
83  TritrizPtrBase(const size_t &capas= 0);
84  TritrizPtrBase(const size_t &capas,const MatrizPtr &);
85  TritrizPtrBase(const size_t &,const size_t &,const size_t &);
86 
87  bool check_range(const size_t &,const size_t &,const size_t &) const;
88  void resize(const size_t &);
89  void resize(const size_t &,const size_t &,const size_t &,const value_type &v= value_type());
90  size_t GetCapas(void) const;
91  size_t getNumFilas(void) const;
92  size_t getNumCols(void) const;
93  size_t GetDim(void) const;
94  bool EsFilaI(void) const;
95  bool EsFilaJ(void) const;
96  bool EsFilaK(void) const;
97  bool EsCapaICte(void) const;
98  bool EsCapaJCte(void) const;
99  bool EsCapaKCte(void) const;
100  size_t NumPtrs(void) const;
101  bool Null(void) const;
102  bool HasNull(void) const;
103  void clearAll(void);
104 
105  void dim(const size_t &,const size_t &,const size_t &);
106 
107  const MatrizPtr &operator()(const size_t &capa) const;
108  MatrizPtr &operator()(const size_t &capa);
109  inline const_reference operator()(const size_t &i,const size_t &j,const size_t &k) const
110  { return ((*this)(i))(j,k); }
111  inline reference operator()(const size_t &i,const size_t &j,const size_t &k)
112  { return ((*this)(i))(j,k); }
113  reference getAtI(const size_t &i);
114  const_reference getAtI(const size_t &) const;
115  reference getAtIJ(const size_t &,const size_t &);
116  const_reference getAtIJ(const size_t &,const size_t &) const;
117  value_type getAtIJK(const size_t &,const size_t &,const size_t &);
118 
119  const_ref_caja GetConstRefCaja(size_t capa=1,size_t f=1, size_t c=1) const;
120  const_ref_caja GetConstRefCaja(const RangoTritriz &rango) const;
121 
122  const_ref_capa_i_cte GetConstRefCapaICte(size_t capa=1,size_t f=1, size_t c=1) const;
123  const_ref_capa_i_cte GetConstRefCapaICte(size_t capa,const RangoIndice &,const RangoIndice &) const;
124  const_ref_capa_j_cte GetConstRefCapaJCte(size_t f=1,size_t capa=1, size_t c=1) const;
125  const_ref_capa_j_cte GetConstRefCapaJCte(const RangoIndice &,const size_t &f,const RangoIndice &) const;
126  const_ref_capa_k_cte GetConstRefCapaKCte(size_t c=1,size_t capa=1, size_t f=1) const;
127  const_ref_capa_k_cte GetConstRefCapaKCte(const RangoIndice &,const RangoIndice &,const size_t &) const;
128 
129  const_ref_fila_i GetConstRefFilaI(size_t f=1,size_t c=1) const;
130  const_ref_fila_i GetConstRefFilaI(const RangoIndice &,const size_t &f,const size_t &c) const;
131  const_ref_fila_j GetConstRefFilaJ(size_t capa=1,size_t c=1) const;
132  const_ref_fila_j GetConstRefFilaJ(const size_t &capa,const RangoIndice &,const size_t &c) const;
133  const_ref_fila_k GetConstRefFilaK(size_t capa=1,size_t f=1) const;
134  const_ref_fila_k GetConstRefFilaK(const size_t &capa,const size_t &f,const RangoIndice &) const;
135 
136  var_ref_caja GetVarRefCaja(size_t capa=1,size_t f=1, size_t c=1);
137  var_ref_caja GetVarRefCaja(const RangoTritriz &);
138 
139  var_ref_capa_i_cte GetVarRefCapaICte(size_t capa=1,size_t f=1, size_t c=1);
140  var_ref_capa_i_cte GetVarRefCapaICte(const size_t &capa,const RangoIndice &,const RangoIndice &);
141  var_ref_capa_j_cte GetVarRefCapaJCte(size_t f=1,size_t capa=1, size_t c=1);
142  var_ref_capa_j_cte GetVarRefCapaJCte(const RangoIndice &,const size_t &f,const RangoIndice &);
143  var_ref_capa_k_cte GetVarRefCapaKCte(size_t c=1,size_t capa=1, size_t f=1);
144  var_ref_capa_k_cte GetVarRefCapaKCte(const RangoIndice &,const RangoIndice &,const size_t &c);
145 
146  var_ref_fila_i GetVarRefFilaI(size_t f=1,size_t c=1);
147  var_ref_fila_i GetVarRefFilaI(const RangoIndice &,const size_t &f,const size_t &c);
148  var_ref_fila_j GetVarRefFilaJ(size_t capa=1,size_t c=1);
149  var_ref_fila_j GetVarRefFilaJ(const size_t &capa,const RangoIndice &,const size_t &c);
150  var_ref_fila_k GetVarRefFilaK(size_t capa=1,size_t f=1);
151  var_ref_fila_k GetVarRefFilaK(const size_t &capa,const size_t &f,const RangoIndice &);
152 
153  void PutCaja(size_t offset_capa,size_t offset_fila,size_t offset_col,const TritrizPtrBase<MatrizPtr> &otra);
154 
155  std::vector<int> getTagsObjsCapa(const size_t &);
156  std::vector<int> getTagsObjsFila(const size_t &,const size_t &);
157  std::vector<int> getTagsObjsFilas(const size_t &);
158  std::vector<int> getTagsObjsColumna(const size_t &,const size_t &);
159  std::vector<int> getTagsObjsColumnas(const size_t &);
160  std::vector<int> getTagsObjsInterioresCapa(const size_t &);
161  std::vector<int> getTagsObjsInterioresFila(const size_t &,const size_t &);
162  std::vector<int> getTagsObjsInterioresFilas(const size_t &);
163  std::vector<int> getTagsObjsInterioresColumna(const size_t &,const size_t &);
164  std::vector<int> getTagsObjsInterioresColumnas(const size_t &);
165  std::vector<int> getTagsInteriorObjs(void);
166  };
167 
169 template <class MatrizPtr>
171  : std::vector<MatrizPtr>(capas), EntCmd()
172  { set_owner_matrices(); }
173 
175 template <class MatrizPtr>
176 TritrizPtrBase<MatrizPtr>::TritrizPtrBase(const size_t &capas,const MatrizPtr &m)
177  : std::vector<MatrizPtr>(capas,m), EntCmd()
178  { set_owner_matrices(); }
179 
181 template <class MatrizPtr>
182 TritrizPtrBase<MatrizPtr>::TritrizPtrBase(const size_t &capas,const size_t &filas,const size_t &cols)
183  : std::vector<MatrizPtr>(capas), EntCmd()
184  {
185  for(size_t i=0;i<capas;i++)
186  (*this)[i]= MatrizPtr(filas,cols);
188  }
189 
191 template <class MatrizPtr>
193  {
194  for(iterator i=this->begin();i!=this->end();i++)
195  i->set_owner(this);
196  }
197 
199 template <class T>
200 void XC::TritrizPtrBase<T>::dim(const size_t &nLayers,const size_t &nRows,const size_t &nCols)
201  { this->resize(nLayers,nRows,nCols,nullptr); }
202 
204 template <class MatrizPtr>
205 void TritrizPtrBase<MatrizPtr>::resize(const size_t &capas)
206  {
207  std::vector<MatrizPtr>::resize(capas);
209  }
210 
212 template <class MatrizPtr>
213 void TritrizPtrBase<MatrizPtr>::resize(const size_t &capas,const size_t &filas,const size_t &cols,const value_type &v)
214  {
215  std::vector<MatrizPtr>::resize(capas);
216  for(size_t i= 0;i<capas;i++)
217  (*this)[i].resize(filas,cols,v);
219  }
220 
221 template <class MatrizPtr>
222 bool TritrizPtrBase<MatrizPtr>::check_range(const size_t &capa,const size_t &fila,const size_t &col) const
223  {
224  if(capa<=GetCapas())
225  return TritrizPtrBase<MatrizPtr>::operator()(capa).CheckIndices(fila,col);
226  else
227  return false;
228  }
229 
230 
231 template <class MatrizPtr>
232 size_t TritrizPtrBase<MatrizPtr>::GetCapas(void) const
233  { return this->size(); }
234 
235 template <class MatrizPtr>
237  {
238  size_t retval= 0;
239  if(this->size())
240  retval= (*this)[0].getNumFilas();
241  return retval;
242  }
243 template <class MatrizPtr>
244 size_t TritrizPtrBase<MatrizPtr>::getNumCols(void) const
245  {
246  size_t retval= 0;
247  if(this->size())
248  retval= (*this)[0].getNumCols();
249  return retval;
250  }
251 template <class MatrizPtr>
252 size_t TritrizPtrBase<MatrizPtr>::GetDim(void) const
253  {
254  size_t retval= 0;
255  if(this->size()>1) retval++;
256  if(this->getNumFilas()>1) retval++;
257  if(this->getNumCols()>1) retval++;
258  return retval;
259  }
260 
262 template <class MatrizPtr>
264  {
265  const size_t sz= this->size();
266  if(sz<1)
267  return 0;
268  else
269  {
270  const MatrizPtr &capa= (*this)(1);
271  return sz*capa.getNumFilas()*capa.getNumCols();
272  }
273  }
274 
276 template <class MatrizPtr>
278  {
279  if(this->empty())
280  return true;
281  else
282  return (*this)[0].Null();
283  }
284 
286 template <class MatrizPtr>
288  {
289  bool retval= false;
290  if(this->empty())
291  retval= true;
292  else
293  {
294  const size_t ncapas= this->GetCapas();
295  for(size_t i=0;i<ncapas;i++)
296  if((*this)[i].Null())
297  {
298  retval= true;
299  break;
300  }
301  }
302  return retval;
303  }
304 
306 template <class MatrizPtr>
308  {
309  std::vector<MatrizPtr>::clear();
310  EntCmd::clearPyProps();
311  }
312 
313 
315 template <class MatrizPtr>
317  {
318  if((this->getNumFilas()>1) || (this->getNumCols()>1)) return false;
319  return true;
320  }
321 
323 template <class MatrizPtr>
325  {
326  if((this->GetCapas()>1) || (this->getNumCols()>1)) return false;
327  return true;
328  }
329 
331 template <class MatrizPtr>
333  {
334  if((this->GetCapas()>1) || (this->getNumFilas()>1)) return false;
335  return true;
336  }
337 
339 template <class MatrizPtr>
341  { return (this->GetCapas()==1); }
342 
344 template <class MatrizPtr>
346  { return (this->getNumFilas()==1); }
347 
349 template <class MatrizPtr>
351  { return (this->getNumCols()==1); }
352 
354 template <class MatrizPtr>
355 const MatrizPtr &TritrizPtrBase<MatrizPtr>::operator()(const size_t &capa) const
356  { return (*this)[capa-1]; }
357 
359 template <class MatrizPtr>
360 MatrizPtr &TritrizPtrBase<MatrizPtr>::operator()(const size_t &capa)
361  { return (*this)[capa-1]; }
362 
363 
364 template <class MatrizPtr>
365 typename TritrizPtrBase<MatrizPtr>::reference TritrizPtrBase<MatrizPtr>::getAtI(const size_t &i)
366  { return const_cast<reference>(static_cast<const TritrizPtrBase<MatrizPtr> &>(*this).getAtI(i)); }
367 
368 template <class MatrizPtr>
369 typename TritrizPtrBase<MatrizPtr>::const_reference TritrizPtrBase<MatrizPtr>::getAtI(const size_t &i) const
370  {
371  if(EsFilaI())
372  return operator()(i,1,1);
373  else if(EsFilaJ())
374  return operator()(1,i,1);
375  else if(EsFilaK())
376  return operator()(1,1,i);
377  else
378  {
379  std::cerr << "TritrizPtrBase::getAtI; the set is not one-dimensional." << std::endl;
380  return operator()(1,1,1);
381  }
382  }
383 
384 template <class MatrizPtr>
385 typename TritrizPtrBase<MatrizPtr>::value_type TritrizPtrBase<MatrizPtr>::getAtIJK(const size_t &i,const size_t &j,const size_t &k)
386  {
387  typename TritrizPtrBase<MatrizPtr>::value_type retval= nullptr;
388  if(this->check_range(i,j,k))
389  retval= (*this)(i,j,k);
390  return retval;
391  }
392 
393 template <class MatrizPtr>
394 typename TritrizPtrBase<MatrizPtr>::reference TritrizPtrBase<MatrizPtr>::getAtIJ(const size_t &i, const size_t &j)
395  { return const_cast<reference>(static_cast<const TritrizPtrBase<MatrizPtr> &>(*this).getAtIJ(i)); }
396 
397 template <class MatrizPtr>
398 typename TritrizPtrBase<MatrizPtr>::const_reference TritrizPtrBase<MatrizPtr>::getAtIJ(const size_t &i, const size_t &j) const
399  {
400  //XXX We still need to get the layer
401  // (It will not necessarily be the first one).
402  if(EsCapaICte())
403  return operator()(1,i,j);
404  else if(EsCapaJCte())
405  return operator()(i,1,j);
406  else if(EsCapaKCte())
407  return operator()(i,j,1);
408  else
409  {
410  std::cerr << nombre_clase() << "::" << __FUNCTION__
411  << "; the node set is not bidimensional." << std::endl;
412  return nullptr;
413  }
414  }
415 
416 template <class MatrizPtr>
417 typename TritrizPtrBase<MatrizPtr>::const_ref_caja TritrizPtrBase<MatrizPtr>::GetConstRefCaja(size_t capa,size_t f, size_t c) const
418  { return const_ref_caja(*this,capa,f,c); }
419 template <class MatrizPtr>
420 typename TritrizPtrBase<MatrizPtr>::const_ref_caja TritrizPtrBase<MatrizPtr>::GetConstRefCaja(const RangoTritriz &rango) const
421  { return const_ref_caja(*this,rango); }
422 
423 template <class MatrizPtr>
424 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_i_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaICte(size_t capa,size_t f, size_t c) const
425  { return const_ref_capa_i_cte(*this,capa,f,c); }
426 template <class MatrizPtr>
427 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_i_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaICte(size_t capa,const RangoIndice &rango_filas,const RangoIndice &rango_cols) const
428  { return const_ref_capa_i_cte(*this,capa,rango_filas,rango_cols); }
429 template <class MatrizPtr>
430 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_j_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaJCte(size_t f,size_t capa, size_t c) const
431  { return const_ref_capa_j_cte(*this,capa,f,c); }
432 template <class MatrizPtr>
433 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_j_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaJCte(const RangoIndice &rango_capas,const size_t &f,const RangoIndice &rango_cols) const
434  { return const_ref_capa_j_cte(*this,rango_capas,f,rango_cols); }
435 template <class MatrizPtr>
436 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_k_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaKCte(size_t c,size_t capa, size_t f) const
437  { return const_ref_capa_k_cte(*this,c,capa,f); }
438 template <class MatrizPtr>
439 typename TritrizPtrBase<MatrizPtr>::const_ref_capa_k_cte TritrizPtrBase<MatrizPtr>::GetConstRefCapaKCte(const RangoIndice &rango_capas, const RangoIndice &rango_filas, const size_t &c) const
440  { return const_ref_capa_k_cte(*this,rango_capas,rango_filas,c); }
441 
442 template <class MatrizPtr>
443 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_i TritrizPtrBase<MatrizPtr>::GetConstRefFilaI(size_t f,size_t c) const
444  { return const_ref_fila_i(*this,f,c); }
445 template <class MatrizPtr>
446 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_i TritrizPtrBase<MatrizPtr>::GetConstRefFilaI(const RangoIndice &rango_capas,const size_t &f,const size_t &c) const
447  { return const_ref_fila_i(*this,rango_capas,f,c); }
448 template <class MatrizPtr>
449 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_j TritrizPtrBase<MatrizPtr>::GetConstRefFilaJ(size_t capa,size_t c) const
450  { return const_ref_fila_j(*this,capa,c); }
451 template <class MatrizPtr>
452 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_j TritrizPtrBase<MatrizPtr>::GetConstRefFilaJ(const size_t &capa,const RangoIndice &rango_filas,const size_t &c) const
453  { return const_ref_fila_j(*this,capa,rango_filas,c); }
454 template <class MatrizPtr>
455 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_k TritrizPtrBase<MatrizPtr>::GetConstRefFilaK(size_t capa,size_t f) const
456  { return const_ref_fila_k(*this,capa,f); }
457 template <class MatrizPtr>
458 typename TritrizPtrBase<MatrizPtr>::const_ref_fila_k TritrizPtrBase<MatrizPtr>::GetConstRefFilaK(const size_t &capa,const size_t &f,const RangoIndice &rango_cols) const
459  { return const_ref_fila_k(*this,capa,f,rango_cols); }
460 
461 template <class MatrizPtr>
462 typename TritrizPtrBase<MatrizPtr>::var_ref_caja TritrizPtrBase<MatrizPtr>::GetVarRefCaja(size_t capa,size_t f, size_t c)
463  { return var_ref_caja(*this,capa,f,c); }
464 template <class MatrizPtr>
465 typename TritrizPtrBase<MatrizPtr>::var_ref_caja TritrizPtrBase<MatrizPtr>::GetVarRefCaja(const RangoTritriz &rango)
466  { return var_ref_caja(*this,rango); }
467 
468 template <class MatrizPtr>
469 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_i_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaICte(size_t capa,size_t f, size_t c)
470  { return var_ref_capa_i_cte(*this,capa,f,c); }
471 template <class MatrizPtr>
472 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_i_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaICte(const size_t &capa,const RangoIndice &rfilas,const RangoIndice &rcols)
473  { return var_ref_capa_i_cte(*this,capa,rfilas,rcols); }
474 template <class MatrizPtr>
475 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_j_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaJCte(size_t f,size_t capa, size_t c)
476  { return var_ref_capa_j_cte(*this,capa,f,c); }
477 template <class MatrizPtr>
478 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_j_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaJCte(const RangoIndice &rcapas,const size_t &f,const RangoIndice &rcols)
479  { return var_ref_capa_j_cte(*this,rcapas,f,rcols); }
480 template <class MatrizPtr>
481 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_k_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaKCte(size_t c,size_t capa, size_t f)
482  { return var_ref_capa_k_cte(*this,c,capa,f); }
483 template <class MatrizPtr>
484 typename TritrizPtrBase<MatrizPtr>::var_ref_capa_k_cte TritrizPtrBase<MatrizPtr>::GetVarRefCapaKCte(const RangoIndice &rcapas, const RangoIndice &rfilas,const size_t &c)
485  { return var_ref_capa_k_cte(*this,rcapas,rfilas,c); }
486 
487 template <class MatrizPtr>
488 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_i TritrizPtrBase<MatrizPtr>::GetVarRefFilaI(size_t f,size_t c)
489  { return var_ref_fila_i(*this,f,c); }
490 template <class MatrizPtr>
491 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_i TritrizPtrBase<MatrizPtr>::GetVarRefFilaI(const RangoIndice &rcapas,const size_t &f,const size_t &c)
492  { return var_ref_fila_i(*this,rcapas,f,c); }
493 template <class MatrizPtr>
494 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_j TritrizPtrBase<MatrizPtr>::GetVarRefFilaJ(size_t capa,size_t c)
495  { return var_ref_fila_j(*this,capa,c); }
496 template <class MatrizPtr>
497 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_j TritrizPtrBase<MatrizPtr>::GetVarRefFilaJ(const size_t &capa,const RangoIndice &rfilas,const size_t &c)
498  { return var_ref_fila_j(*this,capa,rfilas,c); }
499 template <class MatrizPtr>
500 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_k TritrizPtrBase<MatrizPtr>::GetVarRefFilaK(size_t capa,size_t f)
501  { return var_ref_fila_k(*this,capa,f); }
502 template <class MatrizPtr>
503 typename TritrizPtrBase<MatrizPtr>::var_ref_fila_k TritrizPtrBase<MatrizPtr>::GetVarRefFilaK(const size_t &capa,const size_t &f,const RangoIndice &rcols)
504  { return var_ref_fila_k(*this,capa,f,rcols); }
505 
507 template <class MatrizPtr>
508 void TritrizPtrBase<MatrizPtr>::PutCaja(size_t offset_capa,size_t offset_fila,size_t offset_col,const TritrizPtrBase<MatrizPtr> &otra)
509  {
510  const size_t ncapas= otra.GetCapas();
511  const size_t nfilas= otra.getNumFilas();
512  const size_t ncols= otra.getNumCols();
513  if((ncapas+offset_capa)>GetCapas())
514  {
515  std::cerr << "TritrizPtrNod::PutCaja; layer index out of range." << std::endl;
516  return;
517  }
518  if((nfilas+offset_fila)>this->getNumFilas())
519  {
520  std::cerr << "TritrizPtrNod::PutCaja; row index out of range." << std::endl;
521  return;
522  }
523  if((ncols+offset_col)>this->getNumCols())
524  {
525  std::cerr << "TritrizPtrNod::PutCaja; column index out of range." << std::endl;
526  return;
527  }
528  for(size_t i=1;i<=ncapas;i++)
529  for(size_t j=1;j<=nfilas;j++)
530  for(size_t k=1;k<=ncols;k++)
531  (*this)(offset_capa+i,offset_fila+j,offset_col+k)= otra(i,j,k);
532  }
533 
534 
536 template <class MatrizPtr>
537 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsCapa(const size_t &c)
538  { return (*this)(c).getTagsObjs(); }
539 
541 template <class MatrizPtr>
542 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsFila(const size_t &c,const size_t &f)
543  {
544  const size_t numCols= this->getNumCols();
545  std::vector<int> retval;
546  for(size_t k= 1;k<=numCols;k++)
547  retval[k-1]= (*this)(c,f,k)->getTag();
548  return retval;
549  }
550 
552 template <class MatrizPtr>
553 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsFilas(const size_t &f)
554  {
555  const size_t numCapas= this->GetCapas();
556  const size_t numCols= this->getNumCols();
557  m_int retval(numCapas,numCols);
558  for(size_t i= 1;i<=numCapas;i++)
559  for(size_t k= 1;k<=numCols;k++)
560  retval(i,k)= (*this)(i,f,k)->getTag();
561  return retval.getVector();
562  }
563 
565 template <class MatrizPtr>
566 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsColumna(const size_t &capa,const size_t &c)
567  {
568  const size_t numFilas= this->getNumFilas();
569  std::vector<int> retval(numFilas);
570  for(size_t j= 1;j<=numFilas;j++)
571  retval[j-1]= (*this)(capa,j,c)->getTag();
572  return retval;
573  }
574 
576 template <class MatrizPtr>
577 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsColumnas(const size_t &c)
578  {
579  const size_t numCapas= this->GetCapas();
580  const size_t numFilas= this->getNumFilas();
581  m_int retval(numCapas,numFilas);
582  for(size_t i= 1;i<=numCapas;i++)
583  for(size_t j= 1;j<=numFilas;j++)
584  retval(i,j)= (*this)(i,j,c)->getTag();
585  return retval.getVector();
586  }
587 
589 template <class MatrizPtr>
591  { return (*this)(c).getObjsInteriores(); }
592 
594 template <class MatrizPtr>
595 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsInterioresFila(const size_t &c,const size_t &f)
596  {
597  const size_t numCols= this->getNumCols();
598  std::vector<int> retval(numCols);
599  for(size_t k= 1;k<=numCols;k++)
600  retval[k-1]= (*this)(c,f,k)->getTag();
601  return retval;
602  }
603 
605 template <class MatrizPtr>
607  {
608  const size_t numCapas= this->GetCapas();
609  const size_t numCols= getNumCols();
610  m_int retval(numCapas-2,numCols-2);
611  for(size_t i= 2;i<numCapas;i++)
612  for(size_t k= 2;k<numCols;k++)
613  retval(i-1,k-1)= (*this)(i,f,k)->getTag();
614  return retval.getVector();
615  }
616 
618 template <class MatrizPtr>
619 std::vector<int> TritrizPtrBase<MatrizPtr>::getTagsObjsInterioresColumna(const size_t &capa,const size_t &c)
620  {
621  const size_t numFilas= this->getNumFilas();
622  std::vector<int> retval(numFilas-2);
623  for(size_t j= 2;j<numFilas;j++)
624  retval[j-2]= (*this)(capa,j,c)->getTag();
625  return retval;
626  }
627 
629 template <class MatrizPtr>
631  {
632  const size_t numCapas= this->GetCapas();
633  const size_t numFilas= this->getNumFilas();
634  m_int retval(numCapas-2,numFilas-2);
635  for(size_t i= 2;i<numCapas;i++)
636  for(size_t j= 2;j<numFilas;j++)
637  retval(i-1,j-1)= (*this)(i,j,c)->getTag();
638  return retval.getVector();
639  }
640 
642 template <class MatrizPtr>
644  {
645  std::cerr << "deprecated; use python" << std::endl;
646  std::vector<int> retval;
647  const size_t numCapas= this->GetCapas();
648  if(numCapas==1)
649  retval= (*this)(1).getTagsInteriorObjs();
650  else
651  {
652  const size_t numFilas= this->getNumFilas();
653  if(numFilas==1)
654  retval= getTagsObjsInterioresFilas(1);
655  else
656  {
657  const size_t numCols= this->getNumCols();
658  if(numCols==1)
660  else
661  for(size_t i= 2;i<numCapas;i++)
662  {
663  std::vector<int> tmp= getTagsObjsInterioresCapa(i);
664  retval.insert(retval.end(),tmp.begin(),tmp.end());
665  }
666  }
667  }
668  return retval;
669  }
670 
671 } //end of XC namespace.
672 
673 #endif
std::vector< int > getTagsObjsInterioresColumna(const size_t &, const size_t &)
Returns the identifiers of the objects in the c-th column interior.
Definition: TritrizPtrBase.h:619
bool EsFilaJ(void) const
Returns true if only index J varies.
Definition: TritrizPtrBase.h:324
std::vector< int > getTagsObjsColumnas(const size_t &)
Returns the identifiers of the objects in the c-th columns.
Definition: TritrizPtrBase.h:577
std::vector< int > getTagsInteriorObjs(void)
Returns the tabs of the inerior elements.
Definition: TritrizPtrBase.h:643
std::vector< int > getTagsObjsFila(const size_t &, const size_t &)
Returns the identifiers of the objects in the row.
Definition: TritrizPtrBase.h:542
std::vector< int > getTagsObjsInterioresCapa(const size_t &)
Returns the identifiers of the objects in the layer interior.
Definition: TritrizPtrBase.h:590
std::vector< int > getTagsObjsInterioresFila(const size_t &, const size_t &)
Returns the identifiers of the objects in the row interior.
Definition: TritrizPtrBase.h:595
void set_owner_matrices(void)
Asigna el propietario a las matrices del contenedor.
Definition: TritrizPtrBase.h:192
std::vector< int > getTagsObjsInterioresColumnas(const size_t &)
Returns the identifiers of the objects in the c-th columns interior.
Definition: TritrizPtrBase.h:630
void PutCaja(size_t offset_capa, size_t offset_fila, size_t offset_col, const TritrizPtrBase< MatrizPtr > &otra)
Coloca en la tritriz la being passed as parameter.
Definition: TritrizPtrBase.h:508
std::vector< int > getTagsObjsFilas(const size_t &)
Returns the identifiers of the objects in the f-th rows.
Definition: TritrizPtrBase.h:553
bool EsCapaICte(void) const
Returns true if the indexes that vary are los J y K.
Definition: TritrizPtrBase.h:340
std::vector< int > getTagsObjsInterioresFilas(const size_t &)
Returns the identifiers of the objects in the c-th rows interior.
Definition: TritrizPtrBase.h:606
bool EsCapaJCte(void) const
Returns true if the indexes that vary are los I y K.
Definition: TritrizPtrBase.h:345
bool EsFilaK(void) const
Returns true if only index K varies.
Definition: TritrizPtrBase.h:332
TritrizPtrBase(const size_t &capas=0)
Default constructor.
Definition: TritrizPtrBase.h:170
bool EsFilaI(void) const
Returns true if only index I varies.
Definition: TritrizPtrBase.h:316
std::vector< int > getTagsObjsCapa(const size_t &)
Returns the identifiers of the objects in the layer.
Definition: TritrizPtrBase.h:537
std::vector< int > getTagsObjsColumna(const size_t &, const size_t &)
Returns the identifiers of the objects in the column.
Definition: TritrizPtrBase.h:566
void clearAll(void)
Clears all.
Definition: TritrizPtrBase.h:307
void resize(const size_t &)
Cambia el size of tritriz.
Definition: TritrizPtrBase.h:205
size_t NumPtrs(void) const
Returns the number of elements de la tritriz.
Definition: TritrizPtrBase.h:263
bool Null(void) const
Returns true if it&#39;s empty or the pointers are null.
Definition: TritrizPtrBase.h:277
bool EsCapaKCte(void) const
Returns true if the indexes that vary are los I y J.
Definition: TritrizPtrBase.h:350
================================================================================
Definition: ContinuaReprComponent.h:34
void dim(const size_t &, const size_t &, const size_t &)
Matrix dimensions.
Definition: TritrizPtrBase.h:200
"Tritriz" de pointers to objetos.
Definition: TritrizPtrBase.h:55
const MatrizPtr & operator()(const size_t &capa) const
Return the capa which index is being passed as parameter.
Definition: TritrizPtrBase.h:355
bool HasNull(void) const
Returns true if it&#39;s empty or some of the pointers are null.
Definition: TritrizPtrBase.h:287