EpetraExt
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
transform
EpetraExt_Transform.h
Go to the documentation of this file.
1
//@HEADER
2
// ***********************************************************************
3
//
4
// EpetraExt: Epetra Extended - Linear Algebra Services Package
5
// Copyright (2011) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
//@HEADER
41
42
//-----------------------------------------------------------------------
43
// EpetraExt_Transform.h
44
//-----------------------------------------------------------------------
45
46
#ifndef EPETRAEXT_TRANSFORM_H
47
#define EPETRAEXT_TRANSFORM_H
48
49
#include <
EpetraExt_ConfigDefs.h
>
50
51
#include <Teuchos_RCP.hpp>
52
53
namespace
EpetraExt
{
54
56
62
63
template
<
typename
T,
typename
U>
64
class
Transform
65
{
66
public
:
67
70
71
typedef
T
OriginalType
;
72
typedef
T*
OriginalTypePtr
;
73
typedef
Teuchos::RCP<T>
OriginalTypeRCP
;
74
typedef
T&
OriginalTypeRef
;
75
76
typedef
U
NewType
;
77
typedef
U*
NewTypePtr
;
78
typedef
Teuchos::RCP<U>
NewTypeRCP
;
79
typedef
U&
NewTypeRef
;
80
82
84
virtual
~Transform
() {}
85
88
90
106
virtual
NewTypeRef
operator()
(
OriginalTypeRef
orig ) = 0;
107
109
124
virtual
bool
fwd
() = 0;
125
127
141
virtual
bool
rvs
() = 0;
142
144
148
150
166
virtual
bool
analyze
(
OriginalTypeRef
orig );
167
169
182
virtual
NewTypeRef
construct
();
183
185
199
virtual
bool
isConstructed
();
200
202
203
protected
:
204
206
211
Transform
()
212
:
origObj_
(0),
213
newObj_
(0)
214
{}
215
216
OriginalTypePtr
origObj_
;
217
218
NewTypePtr
newObj_
;
219
220
private
:
221
Transform
(
const
Transform<T,U>
& src)
222
:
origObj_
(src.
origObj_
),
newObj_
(src.
newObj_
) {}
223
224
Transform<T,U>
& operator=(
const
Transform<T,U>
& src)
225
{
226
//not currently supported
227
abort();
228
return
(*
this
);
229
}
230
231
};
// end class Transform
232
233
template
<
typename
T,
typename
U>
234
bool
235
Transform<T,U>::
236
analyze
(
OriginalTypeRef
orig )
237
{
238
origObj_
= &orig;
239
newObj_
= &((*this)( *origObj_ ));
240
return
true
;
241
}
242
243
template
<
typename
T,
typename
U>
244
typename
Transform<T,U>::NewTypeRef
245
Transform<T,U>::
246
construct
()
247
{
248
return
*
newObj_
;
249
}
250
251
template
<
typename
T,
typename
U>
252
bool
253
Transform<T,U>::
254
isConstructed
()
255
{
256
return
(
newObj_
!= 0 );
257
}
258
259
template
<
typename
T,
typename
U>
260
class
StructuralTransform
:
public
Transform
<T,U>
261
{
262
public
:
263
bool
fwd
() {
return
true
; }
264
bool
rvs
() {
return
true
; }
265
266
virtual
~StructuralTransform
() {}
267
};
268
269
template
<
typename
T>
270
class
SameTypeTransform
:
public
Transform
<T,T>
271
{
272
public
:
273
typedef
T
TransformType
;
274
typedef
T*
TransformTypePtr
;
275
typedef
T&
TransformTypeRef
;
276
277
virtual
~SameTypeTransform
() {}
278
};
279
280
template
<
typename
T>
281
class
StructuralSameTypeTransform
:
public
SameTypeTransform
<T>
282
{
283
public
:
284
bool
fwd
() {
return
true
; }
285
bool
rvs
() {
return
true
; }
286
287
virtual
~StructuralSameTypeTransform
() {}
288
};
289
290
template
<
typename
T>
291
class
InPlaceTransform
:
public
SameTypeTransform
<T>
292
{
293
public
:
294
typename
Transform<T,T>::NewTypeRef
295
operator()
296
(
typename
Transform<T,T>::OriginalTypeRef
orig )
297
{ this->origObj_ = &orig;
298
this->newObj_ = &orig;
299
return
orig;
300
}
301
302
virtual
~InPlaceTransform
() {}
303
};
304
305
template
<
typename
T>
306
class
ViewTransform
:
public
SameTypeTransform
<T>
307
{
308
public
:
309
bool
fwd
() {
return
true
; }
310
bool
rvs
() {
return
true
; }
311
312
virtual
~ViewTransform
() {}
313
};
314
315
}
//namespace EpetraExt
316
317
#endif
//EPETRAEXT_TRANSFORM_H
EpetraExt_ConfigDefs.h
EpetraExt::InPlaceTransform
Definition
EpetraExt_Transform.h:292
EpetraExt::InPlaceTransform::~InPlaceTransform
virtual ~InPlaceTransform()
Definition
EpetraExt_Transform.h:302
EpetraExt::SameTypeTransform
Definition
EpetraExt_Transform.h:271
EpetraExt::TransformTypeRef::TransformTypePtr
T * TransformTypePtr
Definition
EpetraExt_Transform.h:274
EpetraExt::TransformTypeRef::TransformTypeRef
T & TransformTypeRef
Definition
EpetraExt_Transform.h:275
EpetraExt::TransformTypeRef::TransformType
T TransformType
Definition
EpetraExt_Transform.h:273
EpetraExt::SameTypeTransform::~SameTypeTransform
virtual ~SameTypeTransform()
Definition
EpetraExt_Transform.h:277
EpetraExt::StructuralSameTypeTransform
Definition
EpetraExt_Transform.h:282
EpetraExt::StructuralSameTypeTransform::rvs
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
Definition
EpetraExt_Transform.h:285
EpetraExt::StructuralSameTypeTransform::fwd
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
Definition
EpetraExt_Transform.h:284
EpetraExt::StructuralSameTypeTransform::~StructuralSameTypeTransform
virtual ~StructuralSameTypeTransform()
Definition
EpetraExt_Transform.h:287
EpetraExt::StructuralTransform
Definition
EpetraExt_Transform.h:261
EpetraExt::StructuralTransform::~StructuralTransform
virtual ~StructuralTransform()
Definition
EpetraExt_Transform.h:266
EpetraExt::StructuralTransform::rvs
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
Definition
EpetraExt_Transform.h:264
EpetraExt::StructuralTransform::fwd
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
Definition
EpetraExt_Transform.h:263
EpetraExt::Transform
Base Class for all Epetra Transform Operators.
Definition
EpetraExt_Transform.h:65
EpetraExt::Transform::OriginalTypeRCP
Teuchos::RCP< T > OriginalTypeRCP
Definition
EpetraExt_Transform.h:73
EpetraExt::Transform::~Transform
virtual ~Transform()
Definition
EpetraExt_Transform.h:84
EpetraExt::Transform::OriginalType
T OriginalType
Definition
EpetraExt_Transform.h:71
EpetraExt::Transform::Transform
Transform()
Default constructor, protected to allow only derived classes to use.
Definition
EpetraExt_Transform.h:211
EpetraExt::Transform::OriginalTypePtr
T * OriginalTypePtr
Definition
EpetraExt_Transform.h:72
EpetraExt::Transform::OriginalTypeRef
T & OriginalTypeRef
Definition
EpetraExt_Transform.h:74
EpetraExt::Transform::rvs
virtual bool rvs()=0
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
EpetraExt::Transform::NewTypeRCP
Teuchos::RCP< U > NewTypeRCP
Definition
EpetraExt_Transform.h:78
EpetraExt::Transform::analyze
virtual bool analyze(OriginalTypeRef orig)
Initial analysis phase of transform.
Definition
EpetraExt_Transform.h:236
EpetraExt::Transform::newObj_
NewTypePtr newObj_
Definition
EpetraExt_Transform.h:218
EpetraExt::Transform::construct
virtual NewTypeRef construct()
Construction of new object as a result of the transform.
Definition
EpetraExt_Transform.h:246
EpetraExt::Transform::NewType
U NewType
Definition
EpetraExt_Transform.h:76
EpetraExt::Transform::origObj_
OriginalTypePtr origObj_
Definition
EpetraExt_Transform.h:216
EpetraExt::Transform::isConstructed
virtual bool isConstructed()
Check for whether transformed object has been constructed.
Definition
EpetraExt_Transform.h:254
EpetraExt::Transform::fwd
virtual bool fwd()=0
Forward transfer of data from orig object input in the operator() method call to the new object creat...
EpetraExt::Transform::NewTypeRef
U & NewTypeRef
Definition
EpetraExt_Transform.h:79
EpetraExt::Transform::operator()
virtual NewTypeRef operator()(OriginalTypeRef orig)=0
Analysis of transform operation on original object and construction of new object.
EpetraExt::Transform::NewTypePtr
U * NewTypePtr
Definition
EpetraExt_Transform.h:77
EpetraExt::ViewTransform
Definition
EpetraExt_Transform.h:307
EpetraExt::ViewTransform::~ViewTransform
virtual ~ViewTransform()
Definition
EpetraExt_Transform.h:312
EpetraExt::ViewTransform::fwd
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
Definition
EpetraExt_Transform.h:309
EpetraExt::ViewTransform::rvs
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
Definition
EpetraExt_Transform.h:310
EpetraExt
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
Definition
EpetraExt_BlockCrsMatrix.cpp:46
Generated by
1.17.0