59 template<
class Scalar,
int ArrayTypeId>
64 data_.assign(right.
data_.begin(),right.
data_.end());
70 data_ptr_ = data_.begin();
80 template<
class Scalar,
int ArrayTypeId>
84 using Teuchos::Ordinal;
85 #ifdef HAVE_INTREPID_DEBUG 86 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim0), std::invalid_argument,
87 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative dimension.");
90 dimensions_.resize(as<Ordinal>(1));
91 dimensions_[0] = dim0_;
92 data_.assign(as<Ordinal>(dim0_), as<Scalar>(0));
93 data_ptr_ = data_.begin();
98 template<
class Scalar,
int ArrayTypeId>
100 const int dim1) : dim0_(dim0), dim1_(dim1), dim2_(0), dim3_(0), dim4_(0)
103 using Teuchos::Ordinal;
104 #ifdef HAVE_INTREPID_DEBUG 105 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim0), std::invalid_argument,
106 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 1st dimension.");
107 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim1), std::invalid_argument,
108 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 2nd dimension.");
111 dimensions_.resize(2);
112 dimensions_[0] = dim0_;
113 dimensions_[1] = dim1_;
114 data_.assign(as<Ordinal>(dim0_*dim1_), as<Scalar>(0));
115 data_ptr_ = data_.begin();
120 template<
class Scalar,
int ArrayTypeId>
123 const int dim2) : dim0_(dim0), dim1_(dim1), dim2_(dim2), dim3_(0), dim4_(0)
126 using Teuchos::Ordinal;
127 #ifdef HAVE_INTREPID_DEBUG 128 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim0), std::invalid_argument,
129 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 1st dimension.");
130 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim1), std::invalid_argument,
131 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 2nd dimension.");
132 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim2), std::invalid_argument,
133 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 3rd dimension.");
135 dimensions_.resize(3);
136 dimensions_[0] = dim0_;
137 dimensions_[1] = dim1_;
138 dimensions_[2] = dim2_;
139 data_.assign(as<Ordinal>(dim0_*dim1_*dim2_), as<Scalar>(0));
140 data_ptr_ = data_.begin();
145 template<
class Scalar,
int ArrayTypeId>
149 const int dim3) : dim0_(dim0), dim1_(dim1), dim2_(dim2), dim3_(dim3), dim4_(0)
152 using Teuchos::Ordinal;
153 #ifdef HAVE_INTREPID_DEBUG 154 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim0), std::invalid_argument,
155 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 1st dimension.");
156 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim1), std::invalid_argument,
157 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 2nd dimension.");
158 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim2), std::invalid_argument,
159 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 3rd dimension.");
160 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim3), std::invalid_argument,
161 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 4th dimension.");
163 dimensions_.resize(4);
164 dimensions_[0] = dim0_;
165 dimensions_[1] = dim1_;
166 dimensions_[2] = dim2_;
167 dimensions_[3] = dim3_;
168 data_.assign(as<Ordinal>(dim0_*dim1_*dim2_*dim3_), as<Scalar>(0));
169 data_ptr_ = data_.begin();
174 template<
class Scalar,
int ArrayTypeId>
179 const int dim4) : dim0_(dim0), dim1_(dim1), dim2_(dim2), dim3_(dim3), dim4_(dim4)
182 using Teuchos::Ordinal;
183 #ifdef HAVE_INTREPID_DEBUG 184 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim0), std::invalid_argument,
185 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 1st dimension.");
186 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim1), std::invalid_argument,
187 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 2nd dimension.");
188 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim2), std::invalid_argument,
189 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 3rd dimension.");
190 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim3), std::invalid_argument,
191 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 4th dimension.");
192 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dim4), std::invalid_argument,
193 ">>> ERROR (FieldContainer): FieldContainer cannot have a negative 5th dimension.");
195 dimensions_.resize(5);
196 dimensions_[0] = dim0_;
197 dimensions_[1] = dim1_;
198 dimensions_[2] = dim2_;
199 dimensions_[3] = dim3_;
200 dimensions_[4] = dim4_;
201 data_.assign(as<Ordinal>(dim0_*dim1_*dim2_*dim3_*dim4_), as<Scalar>(0));
202 data_ptr_ = data_.begin();
207 template<
class Scalar,
int ArrayTypeId>
210 #ifdef HAVE_INTREPID_DEBUG 213 for(
int dim = 0; dim < dimensionsArray.size(); dim++) {
214 TEUCHOS_TEST_FOR_EXCEPTION( (0 > dimensionsArray[dim] ), std::invalid_argument,
215 ">>> ERROR (FieldContainer): One or more negative dimensions");
220 dimensions_.assign(dimensionsArray.begin(),dimensionsArray.end());
223 unsigned int theRank = dimensions_.size();
226 dim0_ = dimensions_[0];
234 dim0_ = dimensions_[0];
235 dim1_ = dimensions_[1];
242 dim0_ = dimensions_[0];
243 dim1_ = dimensions_[1];
244 dim2_ = dimensions_[2];
250 dim0_ = dimensions_[0];
251 dim1_ = dimensions_[1];
252 dim2_ = dimensions_[2];
253 dim3_ = dimensions_[3];
259 dim0_ = dimensions_[0];
260 dim1_ = dimensions_[1];
261 dim2_ = dimensions_[2];
262 dim3_ = dimensions_[3];
263 dim4_ = dimensions_[4];
267 data_.assign(
this -> size(), (Scalar)0);
268 data_ptr_ = data_.begin();
274 template<
class Scalar,
int ArrayTypeId>
276 const Teuchos::ArrayView<Scalar>& data) {
279 dimensions_.assign(dimensionsArray.begin(),dimensionsArray.end());
282 unsigned int theRank = dimensions_.
size();
293 dim0_ = dimensions_[0];
301 dim0_ = dimensions_[0];
302 dim1_ = dimensions_[1];
309 dim0_ = dimensions_[0];
310 dim1_ = dimensions_[1];
311 dim2_ = dimensions_[2];
317 dim0_ = dimensions_[0];
318 dim1_ = dimensions_[1];
319 dim2_ = dimensions_[2];
320 dim3_ = dimensions_[3];
326 dim0_ = dimensions_[0];
327 dim1_ = dimensions_[1];
328 dim2_ = dimensions_[2];
329 dim3_ = dimensions_[3];
330 dim4_ = dimensions_[4];
334 #ifdef HAVE_INTREPID_DEBUG 335 TEUCHOS_TEST_FOR_EXCEPTION( ( (
int)data.size() !=
this -> size() ),
336 std::invalid_argument,
337 ">>> ERROR (FieldContainer): Size of input data does not match size of this container.");
341 data_.assign(data.begin(),data.end());
342 data_ptr_ = data_.begin();
347 template<
class Scalar,
int ArrayTypeId>
349 const Teuchos::ArrayRCP<Scalar>& data) {
352 dimensions_.assign(dimensionsArray.begin(),dimensionsArray.end());
355 unsigned int theRank = dimensions_.
size();
366 dim0_ = dimensions_[0];
374 dim0_ = dimensions_[0];
375 dim1_ = dimensions_[1];
382 dim0_ = dimensions_[0];
383 dim1_ = dimensions_[1];
384 dim2_ = dimensions_[2];
390 dim0_ = dimensions_[0];
391 dim1_ = dimensions_[1];
392 dim2_ = dimensions_[2];
393 dim3_ = dimensions_[3];
399 dim0_ = dimensions_[0];
400 dim1_ = dimensions_[1];
401 dim2_ = dimensions_[2];
402 dim3_ = dimensions_[3];
403 dim4_ = dimensions_[4];
407 #ifdef HAVE_INTREPID_DEBUG 408 TEUCHOS_TEST_FOR_EXCEPTION( ( (
int)data.size() !=
this -> size() ),
409 std::invalid_argument,
410 ">>> ERROR (FieldContainer): Size of input data does not match size of this container.");
415 data_ptr_ = data_.begin();
420 template<
class Scalar,
int ArrayTypeId>
423 const bool deep_copy,
424 const bool owns_mem) {
427 dimensions_.assign(dimensionsArray.begin(),dimensionsArray.end());
430 unsigned int theRank = dimensions_.
size();
441 dim0_ = dimensions_[0];
449 dim0_ = dimensions_[0];
450 dim1_ = dimensions_[1];
457 dim0_ = dimensions_[0];
458 dim1_ = dimensions_[1];
459 dim2_ = dimensions_[2];
465 dim0_ = dimensions_[0];
466 dim1_ = dimensions_[1];
467 dim2_ = dimensions_[2];
468 dim3_ = dimensions_[3];
474 dim0_ = dimensions_[0];
475 dim1_ = dimensions_[1];
476 dim2_ = dimensions_[2];
477 dim3_ = dimensions_[3];
478 dim4_ = dimensions_[4];
483 Teuchos::ArrayRCP<Scalar> arrayrcp = Teuchos::arcp<Scalar>(data, 0,
this -> size(),
false);
484 data_.deepCopy(arrayrcp());
485 data_ptr_ = data_.begin();
488 data_ = Teuchos::arcp<Scalar>(data, 0,
this -> size(), owns_mem);
489 data_ptr_ = data_.begin();
495 template<
class Scalar,
int ArrayTypeId>
497 const bool deep_copy,
498 const bool owns_mem) {
501 dimensions_.
resize(data.rank());
504 unsigned int theRank = dimensions_.size();
507 dimensions_[0] = data.dimension(0);
508 dim0_ = dimensions_[0];
516 dimensions_[0] = data.dimension(0);
517 dimensions_[1] = data.dimension(1);
518 dim0_ = dimensions_[0];
519 dim1_ = dimensions_[1];
526 dimensions_[0] = data.dimension(0);
527 dimensions_[1] = data.dimension(1);
528 dimensions_[2] = data.dimension(2);
529 dim0_ = dimensions_[0];
530 dim1_ = dimensions_[1];
531 dim2_ = dimensions_[2];
537 dimensions_[0] = data.dimension(0);
538 dimensions_[1] = data.dimension(1);
539 dimensions_[2] = data.dimension(2);
540 dimensions_[3] = data.dimension(3);
541 dim0_ = dimensions_[0];
542 dim1_ = dimensions_[1];
543 dim2_ = dimensions_[2];
544 dim3_ = dimensions_[3];
549 dimensions_[0] = data.dimension(0);
550 dimensions_[1] = data.dimension(1);
551 dimensions_[2] = data.dimension(2);
552 dimensions_[3] = data.dimension(3);
553 dimensions_[4] = data.dimension(4);
554 dim0_ = dimensions_[0];
555 dim1_ = dimensions_[1];
556 dim2_ = dimensions_[2];
557 dim3_ = dimensions_[3];
558 dim4_ = dimensions_[4];
562 for (
int i=0; i<data.rank(); i++) {
563 dimensions_[i] = data.dimension(i);
565 dim0_ = dimensions_[0];
566 dim1_ = dimensions_[1];
567 dim2_ = dimensions_[2];
568 dim3_ = dimensions_[3];
569 dim4_ = dimensions_[4];
574 Teuchos::ArrayRCP<Scalar> arrayrcp = Teuchos::arcp<Scalar>(data.contiguous_data(), 0,
this -> size(),
false);
575 data_.deepCopy(arrayrcp());
576 data_ptr_ = data_.begin();
579 data_ = Teuchos::arcp<Scalar>(data.contiguous_data(), 0,
this -> size(), owns_mem);
580 data_ptr_ = data_.begin();
593 template<
class Scalar,
int ArrayTypeId>
595 return dimensions_.
size();
600 template<
class Scalar,
int ArrayTypeId>
607 const int theRank = dimensions_.
size ();
619 theSize *= dim1_*dim2_*dim3_*dim4_;
623 theSize *= dim1_*dim2_*dim3_;
627 theSize *= dim1_*dim2_;
639 for (
int r = 1; r < theRank; ++r) {
640 theSize *= dimensions_[r];
649 template<
class Scalar,
int ArrayTypeId>
650 template<
class Vector>
652 dimVec.assign(dimensions_.begin(),dimensions_.end());
657 template<
class Scalar,
int ArrayTypeId>
659 #ifdef HAVE_INTREPID_DEBUG 660 TEUCHOS_TEST_FOR_EXCEPTION( (0 > whichDim), std::invalid_argument,
661 ">>> ERROR (FieldContainer): dimension order cannot be negative");
662 TEUCHOS_TEST_FOR_EXCEPTION( (whichDim >=
this -> rank() ), std::invalid_argument,
663 ">>> ERROR (FieldContainer): dimension order cannot exceed rank of the container");
665 return dimensions_[whichDim];
670 template<
class Scalar,
int ArrayTypeId>
672 #ifdef HAVE_INTREPID_DEBUG 673 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 1), std::invalid_argument,
674 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
675 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || ( i0 >= dim0_) ), std::invalid_argument,
676 ">>> ERROR (FieldContainer): index is out of range.");
683 template<
class Scalar,
int ArrayTypeId>
685 const int i1)
const {
686 #ifdef HAVE_INTREPID_DEBUG 687 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 2), std::invalid_argument,
688 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
689 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || ( i0 >= dim0_) ), std::invalid_argument,
690 ">>> ERROR (FieldContainer): 1st index is out of range.");
691 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
692 ">>> ERROR (FieldContainer): 2nd index is out of range.");
694 return i0*dim1_ + i1;
699 template<
class Scalar,
int ArrayTypeId>
702 const int i2)
const {
703 #ifdef HAVE_INTREPID_DEBUG 704 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 3), std::invalid_argument,
705 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
706 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || ( i0 >= dim0_) ), std::invalid_argument,
707 ">>> ERROR (FieldContainer): 1st index is out of range.");
708 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
709 ">>> ERROR (FieldContainer): 2nd index is out of range.");
710 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
711 ">>> ERROR (FieldContainer): 3rd index is out of range.");
713 return (i0*dim1_ + i1)*dim2_ + i2;
718 template<
class Scalar,
int ArrayTypeId>
722 const int i3)
const {
723 #ifdef HAVE_INTREPID_DEBUG 724 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 4), std::invalid_argument,
725 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
726 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || ( i0 >= dim0_) ), std::invalid_argument,
727 ">>> ERROR (FieldContainer): 1st index is out of range.");
728 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
729 ">>> ERROR (FieldContainer): 2nd index is out of range.");
730 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
731 ">>> ERROR (FieldContainer): 3rd index is out of range.");
732 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
733 ">>> ERROR (FieldContainer): 4th index is out of range.");
735 return ( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3;
740 template<
class Scalar,
int ArrayTypeId>
745 const int i4)
const {
746 #ifdef HAVE_INTREPID_DEBUG 747 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 5), std::invalid_argument,
748 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
749 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || ( i0 >= dim0_) ), std::invalid_argument,
750 ">>> ERROR (FieldContainer): 1st index is out of range.");
751 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
752 ">>> ERROR (FieldContainer): 2nd index is out of range.");
753 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
754 ">>> ERROR (FieldContainer): 3rd index is out of range.");
755 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
756 ">>> ERROR (FieldContainer): 4th index is out of range.");
757 TEUCHOS_TEST_FOR_EXCEPTION( ( (i4 < 0) || (i4 >= dim4_) ), std::invalid_argument,
758 ">>> ERROR (FieldContainer): 5th index is out of range.");
760 return ( ( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3 )*dim4_ + i4;
766 template<
class Scalar,
int ArrayTypeId>
769 #ifdef HAVE_INTREPID_DEBUG 771 TEUCHOS_TEST_FOR_EXCEPTION( ( multiIndex.size() != dimensions_.size() ),
772 std::invalid_argument,
773 ">>> ERROR (FieldContainer): Number of multi-indices does not match rank of container.");
774 TEUCHOS_TEST_FOR_EXCEPTION( ( ( multiIndex[0] < 0) || ( multiIndex[0] >= dim0_) ),
775 std::invalid_argument,
776 ">>> ERROR (FieldContainer): 1st index is out of range.");
779 int theRank = dimensions_.size();
785 #ifdef HAVE_INTREPID_DEBUG 786 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[4] < 0) || (multiIndex[4] >= dim4_) ),
787 std::invalid_argument,
788 ">>> ERROR (FieldContainer): 5th index is out of range.");
789 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[3] < 0) || (multiIndex[3] >= dim3_) ),
790 std::invalid_argument,
791 ">>> ERROR (FieldContainer): 4th index is out of range.");
792 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[2] < 0) || (multiIndex[2] >= dim2_) ),
793 std::invalid_argument,
794 ">>> ERROR (FieldContainer): 3rd index is out of range.");
795 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[1] < 0) || (multiIndex[1] >= dim1_) ),
796 std::invalid_argument,
797 ">>> ERROR (FieldContainer): 2nd index is out of range.");
799 address = (((multiIndex[0]*dim1_ + multiIndex[1])*dim2_ + multiIndex[2])*dim3_ + multiIndex[3])*dim4_ + multiIndex[4];
803 #ifdef HAVE_INTREPID_DEBUG 804 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[3] < 0) || (multiIndex[3] >= dim3_) ),
805 std::invalid_argument,
806 ">>> ERROR (FieldContainer): 4th index is out of range.");
807 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[2] < 0) || (multiIndex[2] >= dim2_) ),
808 std::invalid_argument,
809 ">>> ERROR (FieldContainer): 3rd index is out of range.");
810 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[1] < 0) || (multiIndex[1] >= dim1_) ),
811 std::invalid_argument,
812 ">>> ERROR (FieldContainer): 2nd index is out of range.");
814 address = ((multiIndex[0]*dim1_ + multiIndex[1])*dim2_ + multiIndex[2])*dim3_ + multiIndex[3];
818 #ifdef HAVE_INTREPID_DEBUG 819 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[2] < 0) || (multiIndex[2] >= dim2_) ),
820 std::invalid_argument,
821 ">>> ERROR (FieldContainer): 3rd index is out of range.");
822 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[1] < 0) || (multiIndex[1] >= dim1_) ),
823 std::invalid_argument,
824 ">>> ERROR (FieldContainer): 2nd index is out of range.");
826 address = (multiIndex[0]*dim1_ + multiIndex[1])*dim2_ + multiIndex[2];
830 #ifdef HAVE_INTREPID_DEBUG 831 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[1] < 0) || (multiIndex[1] >= dim1_) ),
832 std::invalid_argument,
833 ">>> ERROR (FieldContainer): 2nd index is out of range.");
835 address = multiIndex[0]*dim1_ + multiIndex[1];
839 address = multiIndex[0];
845 address = multiIndex[0];
846 for (
int r = 0; r < theRank - 1; r++){
847 #ifdef HAVE_INTREPID_DEBUG 848 TEUCHOS_TEST_FOR_EXCEPTION( ( (multiIndex[r+1] < 0) || (multiIndex[r+1] >= dimensions_[r+1]) ),
849 std::invalid_argument,
850 ">>> ERROR (FieldContainer): Multi-index component out of range.");
853 address = address*dimensions_[r+1] + multiIndex[r+1];
862 template<
class Scalar,
int ArrayTypeId>
864 const int valueEnum)
const 866 #ifdef HAVE_INTREPID_DEBUG 867 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 1), std::invalid_argument,
868 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
869 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
870 std::invalid_argument,
871 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
878 template<
class Scalar,
int ArrayTypeId>
881 const int valueEnum)
const 883 #ifdef HAVE_INTREPID_DEBUG 884 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 2), std::invalid_argument,
885 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
886 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
887 std::invalid_argument,
888 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
891 i0 = valueEnum/dim1_;
892 i1 = valueEnum - i0*dim1_;
897 template<
class Scalar,
int ArrayTypeId>
901 const int valueEnum)
const 903 #ifdef HAVE_INTREPID_DEBUG 904 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 3), std::invalid_argument,
905 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
906 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
907 std::invalid_argument,
908 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
910 int tempDim = dim1_*dim2_;
911 int tempEnu = valueEnum;
912 i0 = tempEnu/tempDim;
914 tempEnu -= i0*tempDim;
916 i1 = tempEnu/tempDim;
918 tempEnu -= i1*tempDim;
920 i2 = tempEnu/tempDim;
925 template<
class Scalar,
int ArrayTypeId>
930 const int valueEnum)
const 932 #ifdef HAVE_INTREPID_DEBUG 933 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 4), std::invalid_argument,
934 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
935 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
936 std::invalid_argument,
937 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
939 int tempDim = dim1_*dim2_*dim3_;
940 int tempEnu = valueEnum;
941 i0 = tempEnu/tempDim;
943 tempEnu -= i0*tempDim;
945 i1 = tempEnu/tempDim;
947 tempEnu -= i1*tempDim;
949 i2 = tempEnu/tempDim;
951 tempEnu -= i2*tempDim;
953 i3 = tempEnu/tempDim;
959 template<
class Scalar,
int ArrayTypeId>
965 const int valueEnum)
const 967 #ifdef HAVE_INTREPID_DEBUG 968 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 5), std::invalid_argument,
969 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
970 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
971 std::invalid_argument,
972 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
974 int tempDim = dim1_*dim2_*dim3_*dim4_;
975 int tempEnu = valueEnum;
976 i0 = tempEnu/tempDim;
978 tempEnu -= i0*tempDim;
980 i1 = tempEnu/tempDim;
982 tempEnu -= i1*tempDim;
984 i2 = tempEnu/tempDim;
986 tempEnu -= i2*tempDim;
988 i3 = tempEnu/tempDim;
990 tempEnu -= i3*tempDim;
992 i4 = tempEnu/tempDim;
997 template<
class Scalar,
int ArrayTypeId>
998 template<
class Vector>
1000 const int valueEnum)
const 1004 #ifdef HAVE_INTREPID_DEBUG 1005 TEUCHOS_TEST_FOR_EXCEPTION( ( (valueEnum < 0) || (valueEnum >= (
int)data_.size()) ),
1006 std::invalid_argument,
1007 ">>> ERROR (FieldContainer): Value enumeration is out of range.");
1011 const int theRank = dimensions_.
size ();
1012 multiIndex.resize (theRank);
1015 int temp_enum = valueEnum;
1019 for (
int r = 1; r < theRank; ++r) {
1020 temp_range *= dimensions_[r];
1024 multiIndex[0] = temp_enum/temp_range;
1028 for (
int r = 1; r < theRank - 1; ++r) {
1029 temp_enum -= multiIndex[r-1]*temp_range;
1030 temp_range /= dimensions_[r];
1031 multiIndex[r] = temp_enum/temp_range;
1037 multiIndex[theRank - 1] = temp_enum - multiIndex[theRank - 2] * temp_range;
1047 template<
class Scalar,
int ArrayTypeId>
1060 data_ptr_ = data_.begin();
1065 template<
class Scalar,
int ArrayTypeId>
1069 if( newDimensions.size() == 0) {
1077 data_ptr_ = data_.begin();
1082 dimensions_.assign(newDimensions.begin(),newDimensions.end());
1085 unsigned int theRank = dimensions_.size();
1088 dim0_ = dimensions_[0];
1096 dim0_ = dimensions_[0];
1097 dim1_ = dimensions_[1];
1104 dim0_ = dimensions_[0];
1105 dim1_ = dimensions_[1];
1106 dim2_ = dimensions_[2];
1112 dim0_ = dimensions_[0];
1113 dim1_ = dimensions_[1];
1114 dim2_ = dimensions_[2];
1115 dim3_ = dimensions_[3];
1121 dim0_ = dimensions_[0];
1122 dim1_ = dimensions_[1];
1123 dim2_ = dimensions_[2];
1124 dim3_ = dimensions_[3];
1125 dim4_ = dimensions_[4];
1129 data_.resize(
this -> size());
1130 data_ptr_ = data_.begin();
1136 template<
class Scalar,
int ArrayTypeId>
1144 dimensions_[0] = dim0_;
1145 data_.resize(dim0_);
1146 data_ptr_ = data_.begin();
1151 template<
class Scalar,
int ArrayTypeId>
1160 dimensions_[0] = dim0_;
1161 dimensions_[1] = dim1_;
1162 data_.resize(dim0_*dim1_);
1163 data_ptr_ = data_.begin();
1168 template<
class Scalar,
int ArrayTypeId>
1178 dimensions_[0] = dim0_;
1179 dimensions_[1] = dim1_;
1180 dimensions_[2] = dim2_;
1181 data_.resize(dim0_*dim1_*dim2_);
1182 data_ptr_ = data_.begin();
1187 template<
class Scalar,
int ArrayTypeId>
1198 dimensions_[0] = dim0_;
1199 dimensions_[1] = dim1_;
1200 dimensions_[2] = dim2_;
1201 dimensions_[3] = dim3_;
1202 data_.resize(dim0_*dim1_*dim2_*dim3_);
1203 data_ptr_ = data_.begin();
1208 template<
class Scalar,
int ArrayTypeId>
1220 dimensions_[0] = dim0_;
1221 dimensions_[1] = dim1_;
1222 dimensions_[2] = dim2_;
1223 dimensions_[3] = dim3_;
1224 dimensions_[4] = dim4_;
1225 data_.resize(dim0_*dim1_*dim2_*dim3_*dim4_);
1226 data_ptr_ = data_.begin();
1231 template<
class Scalar,
int ArrayTypeId>
1236 int newRank = dimensions_.size();
1241 dim0_ = dimensions_[0];
1249 dim0_ = dimensions_[0];
1250 dim1_ = dimensions_[1];
1257 dim0_ = dimensions_[0];
1258 dim1_ = dimensions_[1];
1259 dim2_ = dimensions_[2];
1265 dim0_ = dimensions_[0];
1266 dim1_ = dimensions_[1];
1267 dim2_ = dimensions_[2];
1268 dim3_ = dimensions_[3];
1274 dim0_ = dimensions_[0];
1275 dim1_ = dimensions_[1];
1276 dim2_ = dimensions_[2];
1277 dim3_ = dimensions_[3];
1278 dim4_ = dimensions_[4];
1282 data_.resize(this->size());
1283 data_ptr_ = data_.begin();
1287 template<
class Scalar,
int ArrayTypeId>
1289 const int numFields,
1290 const EFunctionSpace spaceType,
1292 const int spaceDim) {
1294 #ifdef HAVE_INTREPID_DEBUG 1295 TEUCHOS_TEST_FOR_EXCEPTION( ( numPoints < 0),
1296 std::invalid_argument,
1297 ">>> ERROR (FieldContainer): Number of points cannot be negative!");
1298 TEUCHOS_TEST_FOR_EXCEPTION( ( numFields < 0),
1299 std::invalid_argument,
1300 ">>> ERROR (FieldContainer): Number of fields cannot be negative!");
1301 TEUCHOS_TEST_FOR_EXCEPTION( !( (1 <= spaceDim ) && ( spaceDim <= 3 ) ),
1302 std::invalid_argument,
1303 ">>> ERROR (FieldContainer): Invalid space dimension.");
1308 const int operatorRank =
getOperatorRank(spaceType,operatorType,spaceDim);
1311 const int theRank = 1 + 1 + fieldRank + operatorRank;
1314 Teuchos::Array<int> newDimensions (theRank);
1317 newDimensions[0] = numPoints;
1318 newDimensions[1] = numFields;
1321 switch (operatorType) {
1323 case OPERATOR_VALUE:
1330 for (
int i = 0; i < fieldRank + operatorRank; ++i) {
1331 newDimensions[2 + i] = spaceDim;
1346 for(
int i = 0; i < fieldRank; i++){
1347 newDimensions[2 + i] = spaceDim;
1356 TEUCHOS_TEST_FOR_EXCEPTION(
1358 ">>> ERROR (FieldContainer): Invalid operator type");
1362 this->resize (newDimensions);
1373 template<
class Scalar,
int ArrayTypeId>
1375 for (
int i=0; i < this->size(); i++) {
1382 template<
class Scalar,
int ArrayTypeId>
1384 return data_[
this -> getEnumeration(multiIndex)];
1389 template<
class Scalar,
int ArrayTypeId>
1391 const Teuchos::Array<int>& multiIndex) {
1392 data_[
this -> getEnumeration(multiIndex)] = dataValue;
1397 template<
class Scalar,
int ArrayTypeId>
1400 data_[order] = dataValue;
1405 template<
class Scalar,
int ArrayTypeId>
1407 #ifdef HAVE_INTREPID_DEBUG 1408 TEUCHOS_TEST_FOR_EXCEPTION( (dataArray.size() != (data_.size()) ),
1409 std::invalid_argument,
1410 ">>> ERROR (FieldContainer): Size of argument does not match the size of container.");
1412 data_.assign(dataArray.begin(),dataArray.end());
1413 data_ptr_ = data_.begin();
1418 template<
class Scalar,
int ArrayTypeId>
1422 #ifdef HAVE_INTREPID_DEBUG 1423 TEUCHOS_TEST_FOR_EXCEPTION( (numData !=
this -> size() ), std::invalid_argument,
1424 ">>> ERROR (FieldContainer): Number of data does not match the size of container.");
1427 data_.assign(dataPtr, dataPtr + numData);
1428 data_ptr_ = data_.begin();
1433 template<
class Scalar,
int ArrayTypeId>
1436 #ifdef HAVE_INTREPID_DEBUG 1437 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 1), std::invalid_argument,
1438 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1439 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1440 ">>> ERROR (FieldContainer): index is out of range.");
1442 return data_ptr_[i0];
1446 template<
class Scalar,
int ArrayTypeId>
1449 #ifdef HAVE_INTREPID_DEBUG 1450 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 1), std::invalid_argument,
1451 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1452 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1453 ">>> ERROR (FieldContainer): index is out of range.");
1455 return data_ptr_[i0];
1460 template<
class Scalar,
int ArrayTypeId>
1464 #ifdef HAVE_INTREPID_DEBUG 1465 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 2), std::invalid_argument,
1466 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1467 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1468 ">>> ERROR (FieldContainer): 1st index is out of range.");
1469 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1470 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1472 return data_ptr_[i0*dim1_ + i1];
1476 template<
class Scalar,
int ArrayTypeId>
1480 #ifdef HAVE_INTREPID_DEBUG 1481 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 2), std::invalid_argument,
1482 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1483 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1484 ">>> ERROR (FieldContainer): 1st index is out of range.");
1485 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1486 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1488 return data_ptr_[i0*dim1_ + i1];
1493 template<
class Scalar,
int ArrayTypeId>
1498 #ifdef HAVE_INTREPID_DEBUG 1499 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 3), std::invalid_argument,
1500 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1501 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1502 ">>> ERROR (FieldContainer): 1st index is out of range.");
1503 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1504 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1505 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1506 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1508 return data_ptr_[(i0*dim1_ + i1)*dim2_ + i2];
1511 template<
class Scalar,
int ArrayTypeId>
1516 #ifdef HAVE_INTREPID_DEBUG 1517 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 3), std::invalid_argument,
1518 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1519 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1520 ">>> ERROR (FieldContainer): 1st index is out of range.");
1521 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1522 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1523 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1524 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1526 return data_ptr_[(i0*dim1_ + i1)*dim2_ + i2];
1531 template<
class Scalar,
int ArrayTypeId>
1535 const int i3)
const {
1536 #ifdef HAVE_INTREPID_DEBUG 1537 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 4), std::invalid_argument,
1538 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1539 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1540 ">>> ERROR (FieldContainer): 1st index is out of range.");
1541 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1542 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1543 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1544 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1545 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
1546 ">>> ERROR (FieldContainer): 4th index is out of range.");
1548 return data_ptr_[( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3];
1552 template<
class Scalar,
int ArrayTypeId>
1557 #ifdef HAVE_INTREPID_DEBUG 1558 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 4), std::invalid_argument,
1559 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1560 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1561 ">>> ERROR (FieldContainer): 1st index is out of range.");
1562 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1563 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1564 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1565 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1566 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
1567 ">>> ERROR (FieldContainer): 4th index is out of range.");
1569 return data_ptr_[( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3];
1574 template<
class Scalar,
int ArrayTypeId>
1579 const int i4)
const {
1580 #ifdef HAVE_INTREPID_DEBUG 1581 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 5), std::invalid_argument,
1582 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1583 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1584 ">>> ERROR (FieldContainer): 1st index is out of range.");
1585 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1586 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1587 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1588 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1589 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
1590 ">>> ERROR (FieldContainer): 4th index is out of range.");
1591 TEUCHOS_TEST_FOR_EXCEPTION( ( (i4 < 0) || (i4 >= dim4_) ), std::invalid_argument,
1592 ">>> ERROR (FieldContainer): 5th index is out of range.");
1594 return data_ptr_[( ( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3 )*dim4_ + i4];
1597 template<
class Scalar,
int ArrayTypeId>
1603 #ifdef HAVE_INTREPID_DEBUG 1604 TEUCHOS_TEST_FOR_EXCEPTION( (
this -> rank() != 5), std::invalid_argument,
1605 ">>> ERROR (FieldContainer): Number of indices does not match rank of the container.");
1606 TEUCHOS_TEST_FOR_EXCEPTION( ( (i0 < 0) || (i0 >= dim0_) ), std::invalid_argument,
1607 ">>> ERROR (FieldContainer): 1st index is out of range.");
1608 TEUCHOS_TEST_FOR_EXCEPTION( ( (i1 < 0) || (i1 >= dim1_) ), std::invalid_argument,
1609 ">>> ERROR (FieldContainer): 2nd index is out of range.");
1610 TEUCHOS_TEST_FOR_EXCEPTION( ( (i2 < 0) || (i2 >= dim2_) ), std::invalid_argument,
1611 ">>> ERROR (FieldContainer): 3rd index is out of range.");
1612 TEUCHOS_TEST_FOR_EXCEPTION( ( (i3 < 0) || (i3 >= dim3_) ), std::invalid_argument,
1613 ">>> ERROR (FieldContainer): 4th index is out of range.");
1614 TEUCHOS_TEST_FOR_EXCEPTION( ( (i4 < 0) || (i4 >= dim4_) ), std::invalid_argument,
1615 ">>> ERROR (FieldContainer): 5th index is out of range.");
1617 return data_ptr_[( ( (i0*dim1_ + i1 )*dim2_ + i2 )*dim3_ + i3 )*dim4_ + i4];
1622 template<
class Scalar,
int ArrayTypeId>
1624 #ifdef HAVE_INTREPID_DEBUG 1625 TEUCHOS_TEST_FOR_EXCEPTION( ( (address < 0) || (address >= (
int)data_.size() ) ),
1626 std::invalid_argument,
1627 ">>> ERROR (FieldContainer): Specified address is out of range.");
1629 return data_ptr_[address];
1634 template<
class Scalar,
int ArrayTypeId>
1636 #ifdef HAVE_INTREPID_DEBUG 1637 TEUCHOS_TEST_FOR_EXCEPTION( ( (address < 0) || (address >= (
int)data_.size() ) ),
1638 std::invalid_argument,
1639 ">>> ERROR (FieldContainer): Specified address is out of range.");
1641 return data_ptr_[address];
1646 template<
class Scalar,
int ArrayTypeId>
1649 #ifdef HAVE_INTREPID_DEBUG 1650 TEUCHOS_TEST_FOR_EXCEPTION( (
this == &right ),
1651 std::invalid_argument,
1652 ">>> ERROR (FieldContainer): Invalid right-hand side to '='. Self-assignment prohibited.");
1654 dim0_ = right.
dim0_;
1655 dim1_ = right.
dim1_;
1656 dim2_ = right.
dim2_;
1657 dim3_ = right.
dim3_;
1658 dim4_ = right.
dim4_;
1659 data_.deepCopy(right.
data_());
1660 data_ptr_ = data_.begin();
1673 template<
class Scalar,
int ArrayTypeId>
1674 std::ostream& operator << (std::ostream& os, const FieldContainer<Scalar, ArrayTypeId>& container) {
1677 Teuchos::oblackholestream oldFormatState;
1678 oldFormatState.copyfmt(os);
1680 os.setf(std::ios_base::scientific, std::ios_base::floatfield);
1681 os.setf(std::ios_base::right);
1682 int myprec = os.precision();
1684 int size = container.size();
1685 int rank = container.rank();
1686 Teuchos::Array<int> multiIndex(rank);
1687 Teuchos::Array<int> dimensions;
1688 container.dimensions(dimensions);
1690 os<<
"===============================================================================\n"\
1691 <<
"\t Container size = " << size <<
"\n" 1692 <<
"\t Container rank = " << rank <<
"\n" ;
1694 if( (rank == 0 ) && (size == 0) ) {
1695 os<<
"====================================================================================\n"\
1696 <<
"| *** This is an empty container **** |\n";
1699 os<<
"\t Dimensions = ";
1701 for(
int r = 0; r < rank; r++){
1702 os <<
" (" << dimensions[r] <<
") ";
1706 os<<
"====================================================================================\n"\
1707 <<
"| Multi-index Enumeration Value |\n"\
1708 <<
"====================================================================================\n";
1711 for(
int address = 0; address < size; address++){
1712 container.getMultiIndex(multiIndex,address);
1713 std::ostringstream mistring;
1714 for(
int r = 0; r < rank; r++){
1715 mistring << multiIndex[r] << std::dec <<
" ";
1717 os.setf(std::ios::right, std::ios::adjustfield);
1718 os << std::setw(27) << mistring.str();
1719 os << std::setw(20) << address;
1721 os.setf(std::ios::left, std::ios::adjustfield);
1722 os << std::setw(myprec+8) << container[address] <<
"\n";
1725 os<<
"====================================================================================\n\n";
1728 os.copyfmt(oldFormatState);
int dim3_
4th dimension of the array
Teuchos::Array< int > dimensions_
Array to store dimensions (dimensions) for the multi-indices. Admissible range (dimension) for the k-...
int size() const
Returns size of the FieldContainer defined as the product of its dimensions.
int dim1_
2nd dimension of the array
int dim2_
3rd dimension of the array
Teuchos::ArrayRCP< Scalar > data_
Array to store the multi-indexed quantity.
void dimensions(Vector &dimensions) const
Returns array with the dimensions of the container.
int getOperatorRank(const EFunctionSpace spaceType, const EOperator operatorType, const int spaceDim)
Returns rank of an operator.
EOperator
Enumeration of primitive operators available in Intrepid. Primitive operators act on reconstructed fu...
int getFieldRank(const EFunctionSpace spaceType)
Returns the rank of fields in a function space of the specified type.
Implementation of a templated lexicographical container for a multi-indexed scalar quantity...
int getDkCardinality(const EOperator operatorType, const int spaceDim)
Returns cardinality of Dk, i.e., the number of all derivatives of order k.
void resize(const int dim0)
Resizes FieldContainer to a rank-1 container with the specified dimension, initialized by 0...
FieldContainer()
Default constructor.
int isValidOperator(const EOperator operatorType)
Verifies validity of an operator enum.
int dim0_
1st dimension of the array
int dim4_
5th dimension of the array