FEI
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
support-Trilinos
fei_Aztec_Map.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
#ifndef _fei_Aztec_Map_hpp_
44
#define _fei_Aztec_Map_hpp_
45
46
47
#include <vector>
48
49
//
50
// Aztec_Map is a wrapper that encapsulates the general
51
// information needed to describe the layout of an Aztec matrix or
52
// vector structure. It is a companion/support class that goes with
53
// the three data class wrappers Aztec_LSVector, AztecDMSR_Matrix and
54
// AztecDVBR_Matrix (the Aztec_BlockMap specialization is also
55
// required for DVBR).
56
//
57
// Aztec_Map allows the storage and retrieval of information such as
58
// local and global sizes, the MPI communicator, and the proc_config array.
59
//
60
namespace
fei_trilinos {
61
62
class
Aztec_Map {
63
64
public
:
65
Aztec_Map(
int
globalSize,
int
N_update,
const
int
* update,
int
localOffset,
66
MPI_Comm comm);
67
68
Aztec_Map(
const
Aztec_Map& map);
// copy constructor
69
virtual
~Aztec_Map(
void
);
70
71
virtual
const
int
& localSize()
const
{
return
(localSize_);}
72
virtual
const
int
& globalSize()
const
{
return
(globalSize_);}
73
virtual
const
int
& localOffset()
const
{
return
(localOffset_);}
74
75
int
* getUpdate()
76
{
77
return
update.size()>0 ? &update[0] : NULL;
78
}
79
80
virtual
MPI_Comm getCommunicator()
const
{
return
(comm_);}
81
82
virtual
int
* getProcConfig()
83
{
84
return
proc_config.size()>0 ? &proc_config[0] : NULL;
85
}
86
87
std::vector<int> proc_config;
88
std::vector<int> update;
89
int
* external;
90
int
* update_index;
91
int
* extern_index;
92
int
* data_org;
93
std::vector<int> orderingUpdate;
94
95
bool
az_transformed;
96
97
int
getTransformedEqn(
int
eqn)
const
{
98
if
(az_transformed ==
true
) {
99
return
eqn<N_update_ ? update[orderingUpdate[eqn]] : external[eqn-N_update_];
100
}
101
return
eqn;
102
}
103
104
bool
inUpdate(
int
globalIndex,
int
& localIndex)
const
105
{
106
localIndex = globalIndex - localOffset_;
107
if
(localIndex<0 || localIndex>=localSize_) {
108
localIndex = -1;
109
return
false
;
110
}
111
if
(az_transformed ==
true
) {
112
localIndex = update_index[localIndex];
113
}
114
return
true
;
115
}
116
117
private
:
118
void
checkInput();
119
120
int
globalSize_;
121
int
localSize_;
122
int
localOffset_;
123
int
N_update_;
124
125
MPI_Comm comm_;
126
};
127
128
}
//namespace fei_trilinos
129
130
#endif
131
Generated by
1.17.0