44 #ifndef RTOPPACK_TYPES_HPP
45 #define RTOPPACK_TYPES_HPP
101 {
public:
UnknownError(
const std::string& what_arg) : std::logic_error(what_arg) {}};
104 {
public:
InvalidUsage(
const std::string& what_arg) : std::logic_error(what_arg) {}};
107 {
public:
InvalidNumVecs(
const std::string& what_arg) : std::logic_error(what_arg) {}};
143 template<
class Scalar>
156 {
initialize(globalOffset_in, subDim_in, values_in, stride_in); }
172 subDim_in*std::abs(Teuchos::as<int>(stride_in)) - 1 <= values_in.
upperOffset());
246 template<
class Scalar>
287 template<
class Scalar>
294 for(
int i = 0; i < sv.
subDim(); ++i ) {
304 template<
class Scalar>
305 std::ostream& operator<<(std::ostream &out, const ConstSubVectorView<Scalar> &sv)
309 <<
"globalOffset="<<sv.globalOffset()
310 <<
",subDim="<<sv.subDim()
311 <<
",values="<<sv.values()
312 <<
",stride="<<sv.stride()
344 template<
class Scalar>
361 initialize(globalOffset_in, subDim_in, colOffset_in, numSubCols_in, values_in,
472 template<
class Scalar>
482 Teuchos::arcp<Scalar>(numRows_in*numCols_in), numRows_in)
491 colOffset_in, numSubCols_in, values_in, leadingDim_in)
505 subDim_in, colOffset_in, numSubCols_in, values_in, leadingDim_in);
510 return Teuchos::arcp_const_cast<Scalar>(
534 template<
class Scalar>
544 (*msmv)(i,j) = smv(i,j);
565 template <
class Scalar,
class ConcreteObj>
572 {
return Scalar::this_type_is_missing_a_specialization(); }
575 {
return Scalar::this_type_is_missing_a_specialization(); }
578 {
return Scalar::this_type_is_missing_a_specialization(); }
587 Scalar::this_type_is_missing_a_specialization(obj);
597 *obj = Scalar::this_type_is_missing_a_specialization();
606 template <
class Scalar>
625 assertInput(primitiveObjs, indexObjs, charObjs);
626 primitiveObjs[0] = obj;
636 assertInput(primitiveObjs, indexObjs, charObjs);
637 *obj = primitiveObjs[0];
648 || charObjs.
size()!=0 );
659 template <
class Scalar>
680 assertInput(primitiveObjs, indexObjs, charObjs);
691 assertInput(primitiveObjs, indexObjs, charObjs);
703 || charObjs.
size()!=0 );
709 #if defined(HAVE_COMPLEX) && defined(HAVE_TEUCHOS_COMPLEX)
715 template <
class Scalar>
716 class PrimitiveTypeTraits<std::complex<Scalar>, std::complex<Scalar> > {
719 typedef PrimitiveTypeTraits<Scalar,Scalar> ScalarPrimitiveTypeTraits;
721 typedef typename ScalarPrimitiveTypeTraits::primitiveType
primitiveType;
724 {
return 2*ScalarPrimitiveTypeTraits::numPrimitiveObjs(); }
731 const std::complex<Scalar> &obj,
732 const ArrayView<primitiveType> &primitiveObjs,
733 const ArrayView<index_type> &indexObjs,
734 const ArrayView<char> &charObjs
738 const int numScalarPrimitiveObjs =
739 ScalarPrimitiveTypeTraits::numPrimitiveObjs();
740 assertInput(primitiveObjs, indexObjs, charObjs);
741 ScalarPrimitiveTypeTraits::extractPrimitiveObjs(
742 obj.real(), primitiveObjs(0,numScalarPrimitiveObjs),
null,
null );
743 ScalarPrimitiveTypeTraits::extractPrimitiveObjs(
744 obj.imag(), primitiveObjs(numScalarPrimitiveObjs,numScalarPrimitiveObjs),
null,
null );
748 const ArrayView<const primitiveType> &primitiveObjs,
749 const ArrayView<const index_type> &indexObjs,
750 const ArrayView<const char> &charObjs,
751 const Ptr<std::complex<Scalar> > &obj
755 using Teuchos::outArg;
756 assertInput(primitiveObjs, indexObjs, charObjs);
757 const int numScalarPrimitiveObjs =
758 ScalarPrimitiveTypeTraits::numPrimitiveObjs();
760 ScalarPrimitiveTypeTraits::loadPrimitiveObjs(
761 primitiveObjs(0,numScalarPrimitiveObjs), null, null,
763 ScalarPrimitiveTypeTraits::loadPrimitiveObjs(
764 primitiveObjs(numScalarPrimitiveObjs,numScalarPrimitiveObjs), null, null,
766 *obj = std::complex<Scalar>( real, imag );
769 static void assertInput(
770 const ArrayView<const primitiveType> &primitiveObjs,
771 const ArrayView<const index_type> &indexObjs,
772 const ArrayView<const char> &charObjs
777 primitiveObjs.size()!=2*ScalarPrimitiveTypeTraits::numPrimitiveObjs()
778 || indexObjs.size()!=0
779 || charObjs.size()!=0 );
788 template <
class Scalar>
789 class PrimitiveTypeTraits<std::complex<Scalar>, Scalar> {
792 typedef PrimitiveTypeTraits<Scalar,Scalar> ScalarPrimitiveTypeTraits;
794 typedef typename ScalarPrimitiveTypeTraits::primitiveType
primitiveType;
797 {
return ScalarPrimitiveTypeTraits::numPrimitiveObjs(); }
805 const ArrayView<primitiveType> &primitiveObjs,
806 const ArrayView<index_type> &indexObjs,
807 const ArrayView<char> &charObjs
811 assertInput(primitiveObjs, indexObjs, charObjs);
812 ScalarPrimitiveTypeTraits::extractPrimitiveObjs(
813 obj, primitiveObjs, null, null );
817 const ArrayView<const primitiveType> &primitiveObjs,
818 const ArrayView<const index_type> &indexObjs,
819 const ArrayView<const char> &charObjs,
820 const Ptr<Scalar > &obj
824 assertInput(primitiveObjs, indexObjs, charObjs);
825 ScalarPrimitiveTypeTraits::loadPrimitiveObjs(
826 primitiveObjs, null, null, obj );
829 static void assertInput(
830 const ArrayView<const primitiveType> &primitiveObjs,
831 const ArrayView<const index_type> &indexObjs,
832 const ArrayView<const char> &charObjs
837 primitiveObjs.size()!=ScalarPrimitiveTypeTraits::numPrimitiveObjs()
838 || indexObjs.size()!=0
839 || charObjs.size()!=0 );
845 #endif // defined(HAVE_COMPLEX) && defined(HAVE_TEUCHOS_COMPLEX)
855 template<
class Scalar>
class RTOpT;
861 #endif // RTOPPACK_TYPES_HPP
ConstSubMultiVectorView(Ordinal globalOffset_in, Ordinal subDim_in, Ordinal colOffset_in, Ordinal numSubCols_in, const ArrayRCP< const Scalar > &values_in, Ordinal leadingDim_in)
ArrayRCP< const Scalar > values_
Ordinal colOffset() const
Ordinal numSubCols() const
bool is_null(const boost::shared_ptr< T > &p)
ConstSubMultiVectorView()
ArrayRCP< T > persistingView(size_type lowerOffset, size_type size) const
static int numPrimitiveObjs()
static void extractPrimitiveObjs(const Scalar &obj, const ArrayView< primitiveType > &primitiveObjs, const ArrayView< index_type > &indexObjs, const ArrayView< char > &charObjs)
Class for a changeable sub-vector.
SubMultiVectorView(const SubMultiVectorView< Scalar > &smv)
void assign_entries(const Ptr< const SubVectorView< Scalar > > &msv, const ConstSubVectorView< Scalar > &sv)
static void loadPrimitiveObjs(const ArrayView< const primitiveType > &primitiveObjs, const ArrayView< const index_type > &indexObjs, const ArrayView< const char > &charObjs, const Ptr< Scalar > &obj)
size_type upperOffset() const
Teuchos_Ordinal index_type
IncompatibleVecs(const std::string &what_arg)
const ArrayRCP< Scalar > values() const
const ArrayRCP< const Scalar >::iterator valuesBegin() const
ConstSubVectorView(Ordinal globalOffset_in, Ordinal subDim_in, const ArrayRCP< const Scalar > &values_in, ptrdiff_t stride_in)
static int numIndexObjs()
SubMultiVectorView(Ordinal globalOffset_in, Ordinal subDim_in, Ordinal colOffset_in, Ordinal numSubCols_in, const ArrayRCP< Scalar > &values_in, Ordinal leadingDim_in)
Class for a non-changeable sub-vector.
Ordinal globalOffset() const
SubVectorView(const ArrayRCP< Scalar > &values_in)
InvalidNumVecs(const std::string &what_arg)
SubMultiVectorView(Ordinal numRows_in, Ordinal numCols_in)
#define TEUCHOS_ASSERT_IN_RANGE_UPPER_EXCLUSIVE(index, lower_inclusive, upper_exclusive)
Scalar & operator()(Ordinal i) const
Zero-based indexing (Preconditions: values()!=NULL && (0 <= i < subDim())).
static int numIndexObjs()
const ArrayRCP< Scalar > values() const
SubVectorView(Ordinal subDim_in)
TEUCHOS_ORDINAL_TYPE Teuchos_Ordinal
Specialization where the scalar type is the same as the concrete object type.
static void assertInput(const ArrayView< const primitiveType > &primitiveObjs, const ArrayView< const index_type > &indexObjs, const ArrayView< const char > &charObjs)
A templated traits class for decomposing object into an array of primitive objects.
Ordinal leadingDim() const
UnknownError(const std::string &what_arg)
static int numPrimitiveObjs()
SubVectorView(const SubVectorView< Scalar > &sv)
Class for a changeable sub-vector.
static void assertInput(const ArrayView< const primitiveType > &primitiveObjs, const ArrayView< const index_type > &indexObjs, const ArrayView< const char > &charObjs)
SubVectorView< Scalar > col(const Ordinal j) const
Return a SubVectorView view of the jth sub-column (Preconditions: values()!=NULL && && (0<=j<numSubCo...
SubVectorView(Ordinal globalOffset_in, Ordinal subDim_in, const ArrayRCP< Scalar > &values_in, ptrdiff_t stride_in)
void initialize(Ordinal globalOffset_in, Ordinal subDim_in, Ordinal colOffset_in, Ordinal numSubCols_in, const ArrayRCP< Scalar > &values_in, Ordinal leadingDim_in)
void initialize(Ordinal globalOffset_in, Ordinal subDim_in, const ArrayRCP< Scalar > &values_in, ptrdiff_t stride_in)
size_type lowerOffset() const
const Scalar & operator[](Ordinal i) const
Zero-based indexing (Preconditions: values()!=NULL && (0 <= i < subDim())).
static void extractPrimitiveObjs(const Scalar &obj, const ArrayView< primitiveType > &primitiveObjs, const ArrayView< index_type > &indexObjs, const ArrayView< char > &charObjs)
void setGlobalOffset(Ordinal globalOffset_in)
ArrayRCP< const Scalar > values_
InvalidNumTargVecs(const std::string &what_arg)
ConstSubVectorView(const ConstSubVectorView< Scalar > &sv)
Ordinal globalOffset() const
static int numIndexObjs()
void setGlobalOffset(Ordinal globalOffset_in)
ConstSubVectorView(const ArrayRCP< const Scalar > &values_in)
const ArrayRCP< const Scalar > values() const
basic_FancyOStream< char > FancyOStream
static int numPrimitiveObjs()
InvalidUsage(const std::string &what_arg)
Class for a non-changeable sub-multi-vector (submatrix).
ScalarPrimitiveTypeTraits::primitiveType primitiveType
void initialize(Ordinal globalOffset_in, Ordinal subDim_in, Ordinal colOffset_in, Ordinal numSubCols_in, const ArrayRCP< const Scalar > &values_in, Ordinal leadingDim_in)
static void loadPrimitiveObjs(const ArrayView< const primitiveType > &primitiveObjs, const ArrayView< const index_type > &indexObjs, const ArrayView< const char > &charObjs, const Ptr< index_type > &obj)
static void loadPrimitiveObjs(const ArrayView< const primitiveType > &primitiveObjs, const ArrayView< const index_type > &indexObjs, const ArrayView< const char > &charObjs, const Ptr< Scalar > &obj)
const Scalar & operator()(Ordinal i) const
Zero-based indexing (Preconditions: values()!=NULL && (0 <= i < subDim())).
ConstSubVectorView< Scalar > col(const Ordinal j) const
Return a ConstSubVectorView view of the jth sub-column (Preconditions: values()!=NULL && (0<=j<numSub...
PrimitiveTypeTraits< Scalar, Scalar > ScalarPrimitiveTypeTraits
#define TEUCHOS_ASSERT(assertion_test)
#define TEUCHOS_ASSERT_EQUALITY(val1, val2)
static void extractPrimitiveObjs(const index_type &obj, const ArrayView< primitiveType > &primitiveObjs, const ArrayView< index_type > &indexObjs, const ArrayView< char > &charObjs)
IncompatibleReductObj(const std::string &what_arg)
Scalar & operator[](Ordinal i) const
Zero-based indexing (Preconditions: values()!=NULL && (0 <= i < subDim())).
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
ConstSubMultiVectorView(const ConstSubMultiVectorView< Scalar > &smv)
const ArrayRCP< const Scalar > values() const
Scalar & operator()(Ordinal i, Ordinal j) const
Zero-based indexing (Preconditions: values()!=NULL && (0<=i< subDim()) && (0<=j<numSubCols()).
const Scalar & operator()(Ordinal i, Ordinal j) const
Zero-based indexing (Preconditions: values()!=NULL && (0<=i<subDim()) && (0<=j< numSubCols()).
void initialize(Ordinal globalOffset_in, Ordinal subDim_in, const ArrayRCP< const Scalar > &values_in, ptrdiff_t stride_in)