00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TSF_CORE_OPERATOR_VECTOR_TYPES_HPP
00030 #define TSF_CORE_OPERATOR_VECTOR_TYPES_HPP
00031
00032 #include "RTOpPack_Types.hpp"
00033 #include "Thyra_Range1D.hpp"
00034 #include "Teuchos_RefCountPtr.hpp"
00035
00036 namespace Thyra {
00037
00042
00043
00044
00045
00046
00048 typedef RTOp_index_type Index;
00049
00051 typedef RangePack::Range1D Range1D;
00052
00055 enum EConj {
00056 NONCONJ_ELE
00057 ,CONJ_ELE
00058 };
00059
00062 inline
00063 const char* toString(EConj conj)
00064 {
00065 switch(conj) {
00066 case NONCONJ_ELE: return "NONCONJ_ELE";
00067 case CONJ_ELE: return "CONJ_ELE";
00068 default: TEST_FOR_EXCEPT(true);
00069 }
00070 return "BAD";
00071 }
00072
00076 enum ETransp {
00077 NOTRANS
00078 ,CONJ
00079 ,TRANS
00080 ,CONJTRANS
00081 };
00082
00085 inline
00086 const char* toString(ETransp transp)
00087 {
00088 switch(transp) {
00089 case NOTRANS: return "NOTRANS";
00090 case CONJ: return "CONJ";
00091 case TRANS: return "TRANS";
00092 case CONJTRANS: return "CONJTRANS";
00093 default: TEST_FOR_EXCEPT(true);
00094 }
00095 return "BAD";
00096 }
00097
00101 inline
00102 ETransp real_trans(ETransp transp)
00103 {
00104 switch(transp) {
00105 case NOTRANS: return NOTRANS;
00106 case CONJ: return NOTRANS;
00107 case TRANS: return TRANS;
00108 case CONJTRANS: return TRANS;
00109 default: TEST_FOR_EXCEPT(true);
00110 }
00111 return NOTRANS;
00112 }
00113
00116 inline
00117 ETransp not_trans( ETransp transp )
00118 {
00119 switch(transp) {
00120 case NOTRANS: return TRANS;
00121 case CONJ: return CONJTRANS;
00122 case TRANS: return CONJ;
00123 case CONJTRANS: return NOTRANS;
00124 default: TEST_FOR_EXCEPT(true);
00125 }
00126 return NOTRANS;
00127 }
00128
00131 inline
00132 ETransp trans_trans( ETransp trans1, ETransp trans2 )
00133 {
00134 if( trans1 == trans2 )
00135 return NOTRANS;
00136 if( trans1 == NOTRANS )
00137 return trans2;
00138 if( trans2 == NOTRANS )
00139 return trans1;
00140 if( ( trans1 == CONJ && trans2 == TRANS ) || ( trans2 == CONJ && trans1 == TRANS ) )
00141 return CONJTRANS;
00142 if( ( trans1 == TRANS && trans2 == CONJTRANS ) || ( trans2 == TRANS && trans1 == CONJTRANS ) )
00143 return CONJ;
00144 if( ( trans1 == CONJ && trans2 == CONJTRANS ) || ( trans2 == CONJ && trans1 == CONJTRANS ) )
00145 return TRANS;
00146 else
00147 TEST_FOR_EXCEPT(true);
00148 return NOTRANS;
00149 }
00150
00153 inline
00154 EConj transToConj( ETransp trans )
00155 {
00156 switch(trans) {
00157 case NOTRANS: return NONCONJ_ELE;
00158 case CONJ: return CONJ_ELE;
00159 case TRANS: return NONCONJ_ELE;
00160 case CONJTRANS: return CONJ_ELE;
00161 default: TEST_FOR_EXCEPT(true);
00162 }
00163 return NONCONJ_ELE;
00164 }
00165
00168 inline
00169 ETransp applyConjToTrans( EConj conj ) {
00170 switch(conj) {
00171 case NONCONJ_ELE: return NOTRANS;
00172 case CONJ_ELE: return CONJ;
00173 default: TEST_FOR_EXCEPT(true);
00174 }
00175 return NOTRANS;
00176 }
00177
00180 inline
00181 ETransp applyTransposeConjToTrans( EConj conj ) {
00182 switch(conj) {
00183 case NONCONJ_ELE: return TRANS;
00184 case CONJ_ELE: return CONJTRANS;
00185 default: TEST_FOR_EXCEPT(true);
00186 }
00187 return NOTRANS;
00188 }
00189
00191
00192 namespace Exceptions {
00193
00198
00200 class UnInitialized : public std::logic_error
00201 {public: UnInitialized(const std::string& what_arg) : std::logic_error(what_arg) {}};
00202
00204 class IncompatibleVectorSpaces : public std::logic_error
00205 {public:
00206 IncompatibleVectorSpaces(const std::string& what_arg) : std::logic_error(what_arg) {}
00207
00208 };
00209
00211 class OpNotSupported : public std::logic_error
00212 {public: OpNotSupported(const std::string& what_arg) : std::logic_error(what_arg) {}};
00213
00215
00216 }
00217
00218
00219
00220
00221
00222
00223
00224 template<class Scalar> class VectorSpaceFactoryBase;
00225 template<class Scalar> class VectorSpaceBase;
00226 template<class RangeScalar, class DomainScalar = RangeScalar> class LinearOpBase;
00227 template<class Scalar> class MultiVectorBase;
00228 template<class Scalar> class VectorBase;
00229
00230
00231
00232 template<class Scalar> class ScalarProdBase;
00233 template<class Scalar> class ScalarProdVectorSpaceBase;
00234 template<class RangeScalar, class DomainScalar = RangeScalar> class EuclideanLinearOpBase;
00235 template<class Scalar> class SerialVectorSpaceBase;
00236 template<class Scalar> class SerialVectorBase;
00237
00238
00239
00240 template<class Scalar> class EuclideanScalarProd;
00241 template<class Scalar> class LinearOpScalarProd;
00242 template<class Scalar> class SerialVectorSpaceFactoryStd;
00243 template<class Scalar> class SerialVectorSpaceStd;
00244 template<class Scalar> class SerialVectorStd;
00245 template<class Scalar> class SerialMultiVectorStd;
00246 template<class Scalar> class MultiVectorCols;
00247 template<class Scalar> class VectorMultiVector;
00248
00249 }
00250
00251 #endif // TSF_CORE_OPERATOR_VECTOR_TYPES_HPP