Thyra Version of the Day
Loading...
Searching...
No Matches
Thyra_OperatorVectorTypes.hpp
1// @HEADER
2// *****************************************************************************
3// Thyra: Interfaces and Support for Abstract Numerical Algorithms
4//
5// Copyright 2004 NTESS and the Thyra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef THYRA_OPERATOR_VECTOR_TYPES_HPP
11#define THYRA_OPERATOR_VECTOR_TYPES_HPP
12
13#include "Thyra_ConfigDefs.hpp"
14#include "RTOpPack_Types.hpp"
15#include "Teuchos_Range1D.hpp"
16#include "Teuchos_RCP.hpp"
17#include "Teuchos_FancyOStream.hpp"
18#include "Teuchos_Array.hpp"
19#include "Teuchos_ArrayRCP.hpp"
20#include "Teuchos_ArrayView.hpp"
21#include "Teuchos_Tuple.hpp"
22#include "Teuchos_ParameterList.hpp"
23#include "Teuchos_ScalarTraits.hpp"
24#include "Teuchos_TypeNameTraits.hpp"
25
26
27namespace Thyra {
28
29// Using declarations from Teuchos
30
35using Teuchos::Ptr;
40using Teuchos::RCP;
45using Teuchos::Array;
60using Teuchos::Tuple;
95typedef Teuchos::Ordinal Ordinal;
96
97
106
107
112inline
113const char* toString(EConj conj)
114{
115 switch(conj) {
116 case NONCONJ_ELE: return "NONCONJ_ELE";
117 case CONJ_ELE: return "CONJ_ELE";
118 default: TEUCHOS_TEST_FOR_EXCEPT(true);
119 }
120 // return "BAD"; // Should never be called!
121}
122
123
142
143
148inline
149const char* toString(EOpTransp transp)
150{
151 switch(transp) {
152 case NOTRANS: return "NOTRANS";
153 case CONJ: return "CONJ";
154 case TRANS: return "TRANS";
155 case CONJTRANS: return "CONJTRANS";
156 default: TEUCHOS_TEST_FOR_EXCEPT(true);
157 }
158 // return "BAD"; // Should never be called!
159}
160
161
167inline
169{
170 switch(transp) {
171 case NOTRANS: return NOTRANS;
172 case CONJ: return NOTRANS;
173 case TRANS: return TRANS;
174 case CONJTRANS: return TRANS;
175 default: TEUCHOS_TEST_FOR_EXCEPT(true);
176 }
177 // return NOTRANS; // Will never be called!
178}
179
180
185inline
187{
188 switch(transp) {
189 case NOTRANS: return TRANS;
190 case CONJ: return CONJTRANS;
191 case TRANS: return CONJ;
192 case CONJTRANS: return NOTRANS;
193 default: TEUCHOS_TEST_FOR_EXCEPT(true);
194 }
195 // return NOTRANS; // Will never be called!
196}
197
198
203inline
205{
206 if( trans1 == trans2 )
207 return NOTRANS;
208 if( trans1 == NOTRANS )
209 return trans2;
210 if( trans2 == NOTRANS )
211 return trans1;
212 if( ( trans1 == CONJ && trans2 == TRANS ) || ( trans2 == CONJ && trans1 == TRANS ) )
213 return CONJTRANS;
214 if( ( trans1 == TRANS && trans2 == CONJTRANS ) || ( trans2 == TRANS && trans1 == CONJTRANS ) )
215 return CONJ;
216 if( ( trans1 == CONJ && trans2 == CONJTRANS ) || ( trans2 == CONJ && trans1 == CONJTRANS ) )
217 return TRANS;
218 else
220 // return NOTRANS; // Will never be executed!
221}
222
223
228inline
230{
231 switch(trans) {
232 case NOTRANS: return NONCONJ_ELE;
233 case CONJ: return CONJ_ELE;
234 case TRANS: return NONCONJ_ELE;
235 case CONJTRANS: return CONJ_ELE;
236 default: TEUCHOS_TEST_FOR_EXCEPT(true);
237 }
238 // return NONCONJ_ELE; // Will never be called!
239}
240
245inline
247{
248 switch(conj) {
249 case NONCONJ_ELE: return NOTRANS;
250 case CONJ_ELE: return CONJ;
251 default: TEUCHOS_TEST_FOR_EXCEPT(true);
252 }
253 // return NOTRANS; // Will never be called!
254}
255
256
261inline
263{
264 switch(conj) {
265 case NONCONJ_ELE: return TRANS;
266 case CONJ_ELE: return CONJTRANS;
267 default: TEUCHOS_TEST_FOR_EXCEPT(true);
268 }
269 // return NOTRANS; // Will never be called!
270}
271
281
282
293
294
295namespace Exceptions {
296
297
303class UnInitialized : public std::logic_error
304{public: UnInitialized(const std::string& what_arg)
305 : std::logic_error(what_arg) {}};
306
307
312class IncompatibleVectorSpaces : public std::logic_error
313{public:
314 IncompatibleVectorSpaces(const std::string& what_arg)
315 : std::logic_error(what_arg) {}
316};
317
318
323class OpNotSupported : public std::logic_error
324{public: OpNotSupported(const std::string& what_arg)
325 : std::logic_error(what_arg) {}};
326
327
328} // namespace Exceptions
329
330
331// Fundamental ANA operator/vector interface classes
332
333
334template<class Scalar> class VectorSpaceFactoryBase;
335template<class Scalar> class VectorSpaceBase;
336template<class Scalar> class LinearOpBase;
337template<class Scalar> class MultiVectorBase;
338template<class Scalar> class VectorBase;
339
340
341} // end namespace Thyra
342
343
344#endif // THYRA_OPERATOR_VECTOR_TYPES_HPP
Thrown if vector spaces are incompatible.
Thrown if any member functions are called before initialize() has been called.
Base class for all linear operators.
Interface for a collection of column vectors called a multi-vector.
Abstract interface for finite-dimensional dense vectors.
Abstract interface for objects that represent a space for vectors.
Abstract interface for objects that can create vector spaces of a specified dimension.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
EConj
Enumeration for determining how a linear operator is applied. `*.
EStrideType
Determine if data is unit stride or non-unit stride.
EOpTransp applyTransposeConjToTrans(EConj conj)
Convert from EConj to EOpTransp for forward apply.
EConj transToConj(EOpTransp trans)
Convert from EOpTransp to EConj.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
EViewType
Determines if a view is a direct view of data or a detached copy of data.
Teuchos::Ordinal Ordinal
Type for the dimension of a vector space. `*.
EOpTransp applyConjToTrans(EConj conj)
Convert from EConj to EOpTransp for forward apply.
Teuchos::Range1D Range1D
const char * toString(EConj conj)
Return a string name for a EOpTransp value. `*.
EOpTransp not_trans(EOpTransp transp)
Perform a not operation on an EOpTransp value.
EOpTransp real_trans(EOpTransp transp)
Return NOTRANS or TRANS for real scalar valued operators and this also is used for determining struct...
EOpTransp trans_trans(EOpTransp trans1, EOpTransp trans2)
Combine two transpose arguments.
@ CONJ_ELE
Use the linear operator with conjugate elements.
@ NONCONJ_ELE
Use the linear operator with non-conjugate elements.
@ STRIDE_TYPE_UNIT
The stride between elements in an array is one.
@ STRIDE_TYPE_NONUNIT
The stride between elements in an array is greater than or equal to one.
@ TRANS
Use the transposed operator.
@ NOTRANS
Use the non-transposed operator.
@ CONJTRANS
Use the transposed operator with complex-conjugate clements (same as TRANS for real scalar types).
@ CONJ
Use the non-transposed operator with complex-conjugate elements (same as NOTRANS for real scalar type...
@ VIEW_TYPE_DIRECT
The view is a direct view of data and no copies are made.
@ VIEW_TYPE_DETACHED
The view is a detached copy of the data.
std::string typeName(const T &t)