30 #ifndef PTRARRAY3DBASE_H 31 #define PTRARRAY3DBASE_H 33 #include "xc_utils/src/kernel/CommandEntity.h" 34 #include "xc_utils/src/geom/pos_vec/Array3dBoxConstRef.h" 35 #include "xc_utils/src/geom/pos_vec/ConstantILayerConstRef.h" 36 #include "xc_utils/src/geom/pos_vec/ConstantJLayerConstRef.h" 37 #include "xc_utils/src/geom/pos_vec/ConstantKLayerConstRef.h" 38 #include "xc_utils/src/geom/pos_vec/IRowConstRef.h" 39 #include "xc_utils/src/geom/pos_vec/JRowConstRef.h" 40 #include "xc_utils/src/geom/pos_vec/KRowConstRef.h" 41 #include "xc_utils/src/geom/pos_vec/Array3dBoxVarRef.h" 42 #include "xc_utils/src/geom/pos_vec/ConstantILayerVarRef.h" 43 #include "xc_utils/src/geom/pos_vec/ConstantJLayerVarRef.h" 44 #include "xc_utils/src/geom/pos_vec/ConstantKLayerVarRef.h" 45 #include "xc_utils/src/geom/pos_vec/IRowVarRef.h" 46 #include "xc_utils/src/geom/pos_vec/JRowVarRef.h" 47 #include "xc_utils/src/geom/pos_vec/KRowVarRef.h" 54 template <
class PtrArray>
58 typedef typename PtrArray::value_type value_type;
59 typedef typename PtrArray::reference reference;
60 typedef typename PtrArray::const_reference const_reference;
61 typedef typename std::vector<PtrArray>::iterator iterator;
62 typedef typename std::vector<PtrArray>::const_iterator const_iterator;
64 typedef Array3dBoxConstRef<PtrArray3dBase<PtrArray> > box_const_ref;
65 typedef ConstantILayerConstRef<PtrArray3dBase<PtrArray> > constant_i_layer_const_ref;
66 typedef ConstantJLayerConstRef<PtrArray3dBase<PtrArray> > constant_j_layer_const_ref;
67 typedef ConstantKLayerConstRef<PtrArray3dBase<PtrArray> > constant_k_layer_const_ref;
68 typedef IRowConstRef<PtrArray3dBase<PtrArray> > const_ref_i_row;
69 typedef JRowConstRef<PtrArray3dBase<PtrArray> > const_ref_j_row;
70 typedef KRowConstRef<PtrArray3dBase<PtrArray> > const_ref_k_row;
72 typedef Array3dBoxVarRef<PtrArray3dBase<PtrArray> > box_var_ref;
73 typedef ConstantILayerVarRef<PtrArray3dBase<PtrArray> > constant_i_layer_variable_ref;
74 typedef ConstantJLayerVarRef<PtrArray3dBase<PtrArray> > constant_j_layer_variable_ref;
75 typedef ConstantKLayerVarRef<PtrArray3dBase<PtrArray> > constant_k_layer_variable_ref;
76 typedef IRowVarRef<PtrArray3dBase<PtrArray> > var_ref_i_row;
77 typedef JRowVarRef<PtrArray3dBase<PtrArray> > var_ref_j_row;
78 typedef KRowVarRef<PtrArray3dBase<PtrArray> > var_ref_k_row;
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 getNumberOfLayers(
void)
const;
91 size_t getNumberOfRows(
void)
const;
92 size_t getNumberOfColumns(
void)
const;
93 size_t GetDim(
void)
const;
101 bool Null(
void)
const;
105 void dim(
const size_t &,
const size_t &,
const size_t &);
107 const PtrArray &
operator()(
const size_t &layer)
const;
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 &);
119 box_const_ref getBoxConstRef(
size_t layer=1,
size_t f=1,
size_t c=1)
const;
120 box_const_ref getBoxConstRef(
const Array3dRange &rango)
const;
122 constant_i_layer_const_ref getConstantILayerConstRef(
size_t layer=1,
size_t f=1,
size_t c=1)
const;
123 constant_i_layer_const_ref getConstantILayerConstRef(
size_t layer,
const RangoIndice &,
const RangoIndice &)
const;
124 constant_j_layer_const_ref getConstantJLayerConstRef(
size_t f=1,
size_t layer=1,
size_t c=1)
const;
125 constant_j_layer_const_ref getConstantJLayerConstRef(
const RangoIndice &,
const size_t &f,
const RangoIndice &)
const;
126 constant_k_layer_const_ref getConstantKLayerConstRef(
size_t c=1,
size_t layer=1,
size_t f=1)
const;
127 constant_k_layer_const_ref getConstantKLayerConstRef(
const RangoIndice &,
const RangoIndice &,
const size_t &)
const;
129 const_ref_i_row getIRowConstRef(
size_t f=1,
size_t c=1)
const;
130 const_ref_i_row getIRowConstRef(
const RangoIndice &,
const size_t &f,
const size_t &c)
const;
131 const_ref_j_row getJRowConstRef(
size_t layer=1,
size_t c=1)
const;
132 const_ref_j_row getJRowConstRef(
const size_t &layer,
const RangoIndice &,
const size_t &c)
const;
133 const_ref_k_row getKRowConstRef(
size_t layer=1,
size_t f=1)
const;
134 const_ref_k_row getKRowConstRef(
const size_t &layer,
const size_t &f,
const RangoIndice &)
const;
136 box_var_ref getBoxVarRef(
size_t layer=1,
size_t f=1,
size_t c=1);
137 box_var_ref getBoxVarRef(
const Array3dRange &);
139 constant_i_layer_variable_ref getConstantILayerVarRef(
size_t layer=1,
size_t f=1,
size_t c=1);
140 constant_i_layer_variable_ref getConstantILayerVarRef(
const size_t &layer,
const RangoIndice &,
const RangoIndice &);
141 constant_j_layer_variable_ref getConstantJLayerVarRef(
size_t f=1,
size_t layer=1,
size_t c=1);
142 constant_j_layer_variable_ref getConstantJLayerVarRef(
const RangoIndice &,
const size_t &f,
const RangoIndice &);
143 constant_k_layer_variable_ref getConstantKLayerVarRef(
size_t c=1,
size_t layer=1,
size_t f=1);
144 constant_k_layer_variable_ref getConstantKLayerVarRef(
const RangoIndice &,
const RangoIndice &,
const size_t &c);
146 var_ref_i_row getVarRefIRow(
size_t f=1,
size_t c=1);
147 var_ref_i_row getVarRefIRow(
const RangoIndice &,
const size_t &f,
const size_t &c);
148 var_ref_j_row getVarRefJRow(
size_t layer=1,
size_t c=1);
149 var_ref_j_row getVarRefJRow(
const size_t &layer,
const RangoIndice &,
const size_t &c);
150 var_ref_k_row getVarRefKRow(
size_t layer=1,
size_t f=1);
151 var_ref_k_row getVarRefKRow(
const size_t &layer,
const size_t &f,
const RangoIndice &);
169 template <
class PtrArray>
171 :
std::vector<PtrArray>(n_layers), CommandEntity()
172 { set_owner_matrices(); }
175 template <
class PtrArray>
177 :
std::vector<PtrArray>(n_layers,m), CommandEntity()
178 { set_owner_matrices(); }
181 template <
class PtrArray>
183 :
std::vector<PtrArray>(n_layers), CommandEntity()
185 for(
size_t i=0;i<n_layers;i++)
186 (*
this)[i]= PtrArray(n_rows,cols);
187 set_owner_matrices();
191 template <
class PtrArray>
194 for(iterator i=this->begin();i!=this->end();i++)
201 { this->resize(nLayers,nRows,numberOfColumns,
nullptr); }
204 template <
class PtrArray>
207 std::vector<PtrArray>::resize(n_layers);
208 set_owner_matrices();
212 template <
class PtrArray>
215 std::vector<PtrArray>::resize(n_layers);
216 for(
size_t i= 0;i<n_layers;i++)
217 (*
this)[i].resize(n_rows,cols,v);
218 set_owner_matrices();
221 template <
class PtrArray>
224 if(layer<=getNumberOfLayers())
231 template <
class PtrArray>
233 {
return this->size(); }
235 template <
class PtrArray>
240 retval= (*this)[0].getNumberOfRows();
243 template <
class PtrArray>
248 retval= (*this)[0].getNumberOfColumns();
251 template <
class PtrArray>
255 if(this->size()>1) retval++;
256 if(this->getNumberOfRows()>1) retval++;
257 if(this->getNumberOfColumns()>1) retval++;
262 template <
class PtrArray>
265 const size_t sz= this->size();
270 const PtrArray &layer= (*this)(1);
271 return sz*layer.getNumberOfRows()*layer.getNumberOfColumns();
276 template <
class PtrArray>
282 return (*
this)[0].
Null();
286 template <
class PtrArray>
294 const size_t numberOfLayers= this->getNumberOfLayers();
295 for(
size_t i=0;i<numberOfLayers;i++)
296 if((*
this)[i].Null())
306 template <
class PtrArray>
309 std::vector<PtrArray>::clear();
310 CommandEntity::clearPyProps();
315 template <
class PtrArray>
318 if((this->getNumberOfRows()>1) || (this->getNumberOfColumns()>1))
return false;
323 template <
class PtrArray>
326 if((this->getNumberOfLayers()>1) || (this->getNumberOfColumns()>1))
return false;
331 template <
class PtrArray>
334 if((this->getNumberOfLayers()>1) || (this->getNumberOfRows()>1))
return false;
339 template <
class PtrArray>
341 {
return (this->getNumberOfLayers()==1); }
344 template <
class PtrArray>
346 {
return (this->getNumberOfRows()==1); }
349 template <
class PtrArray>
351 {
return (this->getNumberOfColumns()==1); }
354 template <
class PtrArray>
356 {
return (*
this)[i-1]; }
359 template <
class PtrArray>
361 {
return (*
this)[i-1]; }
364 template <
class PtrArray>
368 template <
class PtrArray>
372 return operator()(i,1,1);
374 return operator()(1,i,1);
376 return operator()(1,1,i);
379 std::cerr <<
"PtrArray3dBase::getAtI; the set is not one-dimensional." << std::endl;
380 return operator()(1,1,1);
384 template <
class PtrArray>
387 typename PtrArray3dBase<PtrArray>::value_type retval=
nullptr;
388 if(this->check_range(i,j,k))
389 retval= (*this)(i,j,k);
393 template <
class PtrArray>
397 template <
class PtrArray>
402 if(isIConstantLayer())
403 return operator()(1,i,j);
404 else if(isJConstantLayer())
405 return operator()(i,1,j);
406 else if(isKConstantLayer())
407 return operator()(i,j,1);
410 std::cerr << getClassName() <<
"::" << __FUNCTION__
411 <<
"; the node set is not bidimensional." << std::endl;
416 template <
class PtrArray>
418 {
return box_const_ref(*
this,layer,f,c); }
419 template <
class PtrArray>
421 {
return box_const_ref(*
this,rango); }
423 template <
class PtrArray>
425 {
return constant_i_layer_const_ref(*
this,layer,f,c); }
426 template <
class PtrArray>
428 {
return constant_i_layer_const_ref(*
this,layer,row_range,column_range); }
429 template <
class PtrArray>
431 {
return constant_j_layer_const_ref(*
this,layer,f,c); }
432 template <
class PtrArray>
434 {
return constant_j_layer_const_ref(*
this,layer_range,f,column_range); }
435 template <
class PtrArray>
437 {
return constant_k_layer_const_ref(*
this,c,layer,f); }
438 template <
class PtrArray>
440 {
return constant_k_layer_const_ref(*
this,layer_range,row_range,c); }
442 template <
class PtrArray>
444 {
return const_ref_i_row(*
this,f,c); }
445 template <
class PtrArray>
447 {
return const_ref_i_row(*
this,layer_range,f,c); }
448 template <
class PtrArray>
450 {
return const_ref_j_row(*
this,layer,c); }
451 template <
class PtrArray>
453 {
return const_ref_j_row(*
this,layer,row_range,c); }
454 template <
class PtrArray>
456 {
return const_ref_k_row(*
this,layer,f); }
457 template <
class PtrArray>
459 {
return const_ref_k_row(*
this,layer,f,column_range); }
461 template <
class PtrArray>
463 {
return box_var_ref(*
this,layer,f,c); }
464 template <
class PtrArray>
466 {
return box_var_ref(*
this,rango); }
468 template <
class PtrArray>
470 {
return constant_i_layer_variable_ref(*
this,layer,f,c); }
471 template <
class PtrArray>
473 {
return constant_i_layer_variable_ref(*
this,layer,row_range,rcols); }
474 template <
class PtrArray>
476 {
return constant_j_layer_variable_ref(*
this,layer,f,c); }
477 template <
class PtrArray>
479 {
return constant_j_layer_variable_ref(*
this,layer_range,f,rcols); }
480 template <
class PtrArray>
482 {
return constant_k_layer_variable_ref(*
this,c,layer,f); }
483 template <
class PtrArray>
485 {
return constant_k_layer_variable_ref(*
this,layer_range,row_range,c); }
487 template <
class PtrArray>
489 {
return var_ref_i_row(*
this,f,c); }
490 template <
class PtrArray>
492 {
return var_ref_i_row(*
this,layer_range,f,c); }
493 template <
class PtrArray>
495 {
return var_ref_j_row(*
this,layer,c); }
496 template <
class PtrArray>
498 {
return var_ref_j_row(*
this,layer,row_range,c); }
499 template <
class PtrArray>
501 {
return var_ref_k_row(*
this,layer,f); }
502 template <
class PtrArray>
504 {
return var_ref_k_row(*
this,layer,f,rcols); }
507 template <
class PtrArray>
510 const size_t numberOfLayers= otra.getNumberOfLayers();
511 const size_t numberOfRows= otra.getNumberOfRows();
512 const size_t numberOfColumns= otra.getNumberOfColumns();
513 if((numberOfLayers+layer_offset)>getNumberOfLayers())
515 std::cerr << getClassName() <<
"::" << __FUNCTION__
516 <<
"; layer index out of range." << std::endl;
519 if((numberOfRows+row_offset)>this->getNumberOfRows())
521 std::cerr << getClassName() <<
"::" << __FUNCTION__
522 <<
"; row index out of range." << std::endl;
525 if((numberOfColumns+offset_col)>this->getNumberOfColumns())
527 std::cerr << getClassName() <<
"::" << __FUNCTION__
528 <<
"; column index out of range." << std::endl;
531 for(
size_t i=1;i<=numberOfLayers;i++)
532 for(
size_t j=1;j<=numberOfRows;j++)
533 for(
size_t k=1;k<=numberOfColumns;k++)
534 (*
this)(layer_offset+i,row_offset+j,offset_col+k)= otra(i,j,k);
539 template <
class PtrArray>
541 {
return (*
this)(c).getTagsObjs(); }
544 template <
class PtrArray>
547 const size_t numCols= this->getNumberOfColumns();
548 std::vector<int> retval;
549 for(
size_t k= 1;k<=numCols;k++)
550 retval[k-1]= (*
this)(c,f,k)->getTag();
555 template <
class PtrArray>
558 const size_t num_layers= this->getNumberOfLayers();
559 const size_t numCols= this->getNumberOfColumns();
560 m_int retval(num_layers,numCols);
561 for(
size_t i= 1;i<=num_layers;i++)
562 for(
size_t k= 1;k<=numCols;k++)
563 retval(i,k)= (*this)(i,f,k)->getTag();
564 return retval.getVector();
568 template <
class PtrArray>
571 const size_t n_rows= this->getNumberOfRows();
572 std::vector<int> retval(n_rows);
573 for(
size_t j= 1;j<=n_rows;j++)
574 retval[j-1]= (*
this)(layer,j,c)->getTag();
579 template <
class PtrArray>
582 const size_t num_layers= this->getNumberOfLayers();
583 const size_t n_rows= this->getNumberOfRows();
584 m_int retval(num_layers,n_rows);
585 for(
size_t i= 1;i<=num_layers;i++)
586 for(
size_t j= 1;j<=n_rows;j++)
587 retval(i,j)= (*this)(i,j,c)->getTag();
588 return retval.getVector();
592 template <
class PtrArray>
594 {
return (*
this)(c).getObjsInteriores(); }
597 template <
class PtrArray>
600 const size_t numCols= this->getNumberOfColumns();
601 std::vector<int> retval(numCols);
602 for(
size_t k= 1;k<=numCols;k++)
603 retval[k-1]= (*
this)(c,f,k)->getTag();
608 template <
class PtrArray>
611 const size_t num_layers= this->getNumberOfLayers();
612 const size_t numCols= getNumberOfColumns();
613 m_int retval(num_layers-2,numCols-2);
614 for(
size_t i= 2;i<num_layers;i++)
615 for(
size_t k= 2;k<numCols;k++)
616 retval(i-1,k-1)= (*this)(i,f,k)->getTag();
617 return retval.getVector();
621 template <
class PtrArray>
624 const size_t n_rows= this->getNumberOfRows();
625 std::vector<int> retval(n_rows-2);
626 for(
size_t j= 2;j<n_rows;j++)
627 retval[j-2]= (*
this)(layer,j,c)->getTag();
632 template <
class PtrArray>
635 const size_t num_layers= this->getNumberOfLayers();
636 const size_t n_rows= this->getNumberOfRows();
637 m_int retval(num_layers-2,n_rows-2);
638 for(
size_t i= 2;i<num_layers;i++)
639 for(
size_t j= 2;j<n_rows;j++)
640 retval(i-1,j-1)= (*this)(i,j,c)->getTag();
641 return retval.getVector();
645 template <
class PtrArray>
648 std::cerr <<
"deprecated; use python" << std::endl;
649 std::vector<int> retval;
650 const size_t num_layers= this->getNumberOfLayers();
652 retval= (*this)(1).getTagsInteriorObjs();
655 const size_t n_rows= this->getNumberOfRows();
657 retval= getRowsInteriorObjectsTags(1);
660 const size_t numCols= this->getNumberOfColumns();
662 retval= getColumnsInteriorObjectsTags(1);
664 for(
size_t i= 2;i<num_layers;i++)
666 std::vector<int> tmp= getLayerInteriorObjectsTags(i);
667 retval.insert(retval.end(),tmp.begin(),tmp.end());
void dim(const size_t &, const size_t &, const size_t &)
Matrix dimensions.
Definition: PtrArray3dBase.h:200
std::vector< int > getColumnObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the column.
Definition: PtrArray3dBase.h:569
void putBox(size_t layer_offset, size_t row_offset, size_t offset_col, const PtrArray3dBase< PtrArray > &otra)
Put in the array the array argument.
Definition: PtrArray3dBase.h:508
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:622
bool isIConstantLayer(void) const
Returns true if the indexes that vary are los J y K.
Definition: PtrArray3dBase.h:340
bool isJRow(void) const
Returns true if only index J varies.
Definition: PtrArray3dBase.h:324
bool isKConstantLayer(void) const
Returns true if the indexes that vary are los I y J.
Definition: PtrArray3dBase.h:350
bool Null(void) const
Returns true if it's empty or the pointers are null.
Definition: PtrArray3dBase.h:277
std::vector< int > getRowsInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th rows interior.
Definition: PtrArray3dBase.h:609
void resize(const size_t &)
Resize the array.
Definition: PtrArray3dBase.h:205
bool isIRow(void) const
Returns true if only index I varies.
Definition: PtrArray3dBase.h:316
std::vector< int > getRowObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the row.
Definition: PtrArray3dBase.h:545
std::vector< int > getRowInteriorObjectsTags(const size_t &, const size_t &)
Return the identifiers of the objects in the row interior.
Definition: PtrArray3dBase.h:598
void clearAll(void)
Clears all.
Definition: PtrArray3dBase.h:307
void set_owner_matrices(void)
Sets the owner for the matrices.
Definition: PtrArray3dBase.h:192
bool isJConstantLayer(void) const
Returns true if the indexes that vary are los I y K.
Definition: PtrArray3dBase.h:345
std::vector< int > getLayerInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the layer interior.
Definition: PtrArray3dBase.h:593
std::vector< int > getColumnsInteriorObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th columns interior.
Definition: PtrArray3dBase.h:633
std::vector< int > getColumnsObjectsTags(const size_t &)
Return the identifiers of the objects in the c-th columns.
Definition: PtrArray3dBase.h:580
bool HasNull(void) const
Returns true if it's empty or some of the pointers are null.
Definition: PtrArray3dBase.h:287
std::vector< int > getRowsObjectsTags(const size_t &)
Return the identifiers of the objects in the f-th rows.
Definition: PtrArray3dBase.h:556
size_t NumPtrs(void) const
Return the number of elements of the array.
Definition: PtrArray3dBase.h:263
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:34
const PtrArray & operator()(const size_t &layer) const
Return the i-th layer.
Definition: PtrArray3dBase.h:355
bool isKRow(void) const
Returns true if only index K varies.
Definition: PtrArray3dBase.h:332
std::vector< int > getLayerObjectsTags(const size_t &)
Return the identifiers of the objects in the layer.
Definition: PtrArray3dBase.h:540
std::vector< int > getTagsInteriorObjs(void)
Return the tabs of the inerior elements.
Definition: PtrArray3dBase.h:646
Three-dimensional array of object pointers.
Definition: PtrArray3dBase.h:55
PtrArray3dBase(const size_t &n_layers=0)
Default constructor.
Definition: PtrArray3dBase.h:170