Epetra Package Browser (Single Doxygen Collection)
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Epetra_OskiMultiVector.cpp
Go to the documentation of this file.
1
2
//@HEADER
3
// ************************************************************************
4
//
5
// Epetra: Linear Algebra Services Package
6
// Copyright 2011 Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39
//
40
// ************************************************************************
41
//@HEADER
42
43
#include "
Epetra_ConfigDefs.h
"
44
45
#ifdef HAVE_OSKI
46
#ifdef HAVE_EPETRA_TEUCHOS
47
#include "
Epetra_OskiMultiVector.h
"
48
49
//=============================================================================
50
51
Epetra_OskiMultiVector::Epetra_OskiMultiVector
(
const
Epetra_OskiMultiVector
& Source)
52
:
Epetra_MultiVector
(Source),
53
Epetra_View_(Source.Epetra_View_),
54
Copy_Created_(Source.Copy_Created_) {
55
Oski_View_ = oski_CopyVecView(Source.
Oski_View_
);
56
}
57
58
Epetra_OskiMultiVector::Epetra_OskiMultiVector
(
const
Epetra_MultiVector
& Source)
59
:
Epetra_MultiVector
(Source),
60
Epetra_View_(&Source),
61
Copy_Created_(false) {
62
double
* A;
63
double
** Aptr;
64
int
LDA;
65
int
* LDAptr;
66
LDAptr =
new
int
[1];
67
Aptr =
new
double
*[1];
68
if
(Source.
ConstantStride
() || (Source.
NumVectors
() == 1)) {
69
if(Source.ExtractView(Aptr, LDAptr))
70
std::cerr <<
"Extract view failed\n"
;
71
else
72
Oski_View_ = oski_CreateMultiVecView(*Aptr, Source.MyLength(), Source.NumVectors(), LAYOUT_COLMAJ, *LDAptr);
73
}
74
else
{
75
Copy_Created_ = true;
76
LDA = Source.MyLength();
77
A = new double[LDA*Source.NumVectors()];
78
if(Source.ExtractCopy(A, LDA))
79
std::cerr <<
"Extract copy failed\n"
;
80
else
81
Oski_View_ = oski_CreateMultiVecView(A, Source.MyLength(), Source.NumVectors(), LAYOUT_COLMAJ, LDA);
82
}
83
delete
[] LDAptr;
84
delete
[] Aptr;
85
}
86
87
Epetra_OskiMultiVector::~Epetra_OskiMultiVector
() {
88
if
(oski_DestroyVecView(
Oski_View_
))
89
std::cerr <<
"Vector destroy failed\n"
;
90
}
91
92
bool
Epetra_OskiMultiVector::Copy_Created
()
const
{
93
return
Copy_Created_
;
94
}
95
96
oski_vecview_t
Epetra_OskiMultiVector::Oski_View
()
const
{
97
return
Oski_View_
;
98
}
99
100
const
Epetra_MultiVector
*
Epetra_OskiMultiVector::Epetra_View
()
const
{
101
return
Epetra_View_
;
102
}
103
104
Epetra_OskiMultiVector
&
Epetra_OskiMultiVector::operator =
(
const
Epetra_OskiMultiVector
& Source) {
105
Epetra_View_
= Source.
Epetra_View_
;
106
Oski_View_
= Source.
Oski_View_
;
107
Copy_Created_
= Source.
Copy_Created_
;
108
return
(*
this
);
109
}
110
111
#endif
112
#endif
Epetra_ConfigDefs.h
Epetra_OskiMultiVector.h
Epetra_MultiVector
Epetra_MultiVector: A class for constructing and using dense multi-vectors, vectors and matrices in p...
Definition
Epetra_MultiVector.h:184
Epetra_MultiVector::NumVectors
int NumVectors() const
Returns the number of vectors in the multi-vector.
Definition
Epetra_MultiVector.h:925
Epetra_MultiVector::ConstantStride
bool ConstantStride() const
Returns true if this multi-vector has constant stride between vectors.
Definition
Epetra_MultiVector.h:940
Epetra_OskiMultiVector
Epetra_OskiMultiVector: A class for constructing and using dense Oski multi-vectors on a single proce...
Definition
Epetra_OskiMultiVector.h:66
Epetra_OskiMultiVector::Copy_Created_
bool Copy_Created_
Definition
Epetra_OskiMultiVector.h:110
Epetra_OskiMultiVector::Copy_Created
bool Copy_Created() const
Returns true if a deep copy of the multi-vector was created by the constructor.
Epetra_OskiMultiVector::~Epetra_OskiMultiVector
virtual ~Epetra_OskiMultiVector()
Destructor.
Epetra_OskiMultiVector::Epetra_OskiMultiVector
Epetra_OskiMultiVector(const Epetra_OskiMultiVector &Source)
Copy constructor.
Epetra_OskiMultiVector::Oski_View
oski_vecview_t Oski_View() const
Returns the Oski portion of the Multi-Vector.
Epetra_OskiMultiVector::operator=
Epetra_OskiMultiVector & operator=(const Epetra_OskiMultiVector &Source)
Sets this equal to Source.
Epetra_OskiMultiVector::Oski_View_
oski_vecview_t Oski_View_
Definition
Epetra_OskiMultiVector.h:109
Epetra_OskiMultiVector::Epetra_View_
const Epetra_MultiVector * Epetra_View_
Definition
Epetra_OskiMultiVector.h:108
Epetra_OskiMultiVector::Epetra_View
const Epetra_MultiVector * Epetra_View() const
Returns the Epetra portion of the Multi-Vector.
Generated by
1.17.0