FEI
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
support-Trilinos
fei_VectorTraits_Aztec.hpp
1
/*
2
// @HEADER
3
// ************************************************************************
4
// FEI: Finite Element Interface to Linear Solvers
5
// Copyright (2005) Sandia Corporation.
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the
8
// 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 Alan Williams (william@sandia.gov)
38
//
39
// ************************************************************************
40
// @HEADER
41
*/
42
43
44
#ifndef _fei_VectorTraits_Aztec_h_
45
#define _fei_VectorTraits_Aztec_h_
46
47
#ifdef HAVE_FEI_AZTECOO
48
49
//
50
//IMPORTANT NOTE: Make sure that wherever this file is included from, it
51
//appears BEFORE any include of fei_base.hpp or fei_Vector.hpp !!!
52
//
53
#include <fei_VectorTraits.hpp>
54
#include <fei_Include_Trilinos.hpp>
55
56
namespace
fei
{
63
template
<>
64
struct
VectorTraits
<Aztec_LSVector> {
65
static
const
char
*
typeName
()
66
{
return
(
"fei::Aztec_LSVector"
); }
67
68
static
int
setValues
(Aztec_LSVector* vec,
int
firstLocalOffset,
69
double
scalar,
bool
isSolnVector=
false
)
70
{
71
return
( vec->put(scalar) );
72
}
73
74
//note that incoming indices are point-entry indices, not block-indices.
75
static
int
putValuesIn
(Aztec_LSVector* vec,
76
int
firstLocalOffset,
77
int
numValues,
78
const
int
* indices,
79
const
double
* values,
80
bool
sum_into,
81
bool
isSolnVector=
false
,
82
int
/*vectorIndex=0*/
)
83
{
84
double
* localVecValues = vec->startPointer();
85
if
(sum_into) {
86
for
(
int
i=0; i<numValues; ++i) {
87
localVecValues[indices[i]-firstLocalOffset] += values[i];
88
}
89
}
90
else
{
91
for
(
int
i=0; i<numValues; ++i) {
92
localVecValues[indices[i]-firstLocalOffset] = values[i];
93
}
94
}
95
return
(0);
96
}
97
98
//note that incoming indices are point-entry indices, not block-indices.
99
static
int
copyOut
(Aztec_LSVector* vec,
100
int
firstLocalOffset,
101
int
numValues,
const
int
* indices,
double
* values,
102
bool
isSolnVector=
false
,
103
int
vectorIndex=0)
104
{
105
double
* localVecValues = vec->startPointer();
106
for
(
int
i=0; i<numValues; ++i) {
107
values[i] = localVecValues[indices[i]-firstLocalOffset];
108
}
109
110
return
(0);
111
}
112
113
static
double
*
getLocalCoefsPtr
(Aztec_LSVector* vec,
114
bool
isSolnVector=
false
,
115
int
vectorIndex=0)
116
{
117
return
(vec->startPointer());
118
}
119
120
static
int
update
(Aztec_LSVector* vec,
121
double
a,
122
const
Aztec_LSVector* x,
123
double
b)
124
{
125
vec->scale(b);
126
vec->addVec(a, x);
127
return
(0);
128
}
129
130
};
//struct VectorTraits<Aztec_LSVector>
131
}
//namespace fei
132
133
#endif
//HAVE_FEI_AZTECOO
134
135
#endif
// _fei_VectorTraits_Aztec_hpp_
fei
Definition
fei_ArrayUtils.hpp:16
fei::VectorTraits
Definition
fei_VectorTraits.hpp:52
fei::VectorTraits::getLocalCoefsPtr
static double * getLocalCoefsPtr(T *vec, bool isSolnVector=false, int vectorIndex=0)
fei::VectorTraits::update
static int update(T *vec, double a, const T *x, double b)
fei::VectorTraits::typeName
static const char * typeName()
fei::VectorTraits::putValuesIn
static int putValuesIn(T *vec, int firstLocalOffset, int numValues, const int *indices, const double *values, bool sum_into, bool isSolnVector=false, int vectorIndex=0)
fei::VectorTraits::setValues
static int setValues(T *vec, int firstLocalOffset, double scalar, bool isSolnVector=false)
fei::VectorTraits::copyOut
static int copyOut(T *vec, int firstLocalOffset, int numValues, const int *indices, double *values, bool isSolnVector=false, int vectorIndex=0)
Generated by
1.17.0