FEI Package Browser (Single Doxygen Collection)
Version of the Day
support-Trilinos
fei_Aztec_Map.hpp
Go to the documentation of this file.
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
fei_trilinos::Aztec_Map::globalSize_
int globalSize_
Definition:
fei_Aztec_Map.hpp:120
fei_trilinos::Aztec_Map::update_index
int * update_index
Definition:
fei_Aztec_Map.hpp:90
fei_trilinos::Aztec_Map::N_update_
int N_update_
Definition:
fei_Aztec_Map.hpp:123
fei_trilinos::Aztec_Map::data_org
int * data_org
Definition:
fei_Aztec_Map.hpp:92
fei_trilinos::Aztec_Map::proc_config
std::vector< int > proc_config
Definition:
fei_Aztec_Map.hpp:87
fei_trilinos
Definition:
fei_Aztec_BlockMap.hpp:59
fei_trilinos::Aztec_Map::localSize_
int localSize_
Definition:
fei_Aztec_Map.hpp:121
fei_trilinos::Aztec_Map::~Aztec_Map
virtual ~Aztec_Map(void)
fei_trilinos::Aztec_Map::comm_
MPI_Comm comm_
Definition:
fei_Aztec_Map.hpp:125
fei_trilinos::Aztec_Map::inUpdate
bool inUpdate(int globalIndex, int &localIndex) const
Definition:
fei_Aztec_Map.hpp:104
fei_trilinos::Aztec_Map::getProcConfig
virtual int * getProcConfig()
Definition:
fei_Aztec_Map.hpp:82
fei_trilinos::Aztec_Map::external
int * external
Definition:
fei_Aztec_Map.hpp:89
fei_trilinos::Aztec_Map::getTransformedEqn
int getTransformedEqn(int eqn) const
Definition:
fei_Aztec_Map.hpp:97
fei_trilinos::Aztec_Map::az_transformed
bool az_transformed
Definition:
fei_Aztec_Map.hpp:95
fei_trilinos::Aztec_Map::extern_index
int * extern_index
Definition:
fei_Aztec_Map.hpp:91
fei_trilinos::Aztec_Map::checkInput
void checkInput()
fei_trilinos::Aztec_Map::localSize
virtual const int & localSize() const
Definition:
fei_Aztec_Map.hpp:71
fei_trilinos::Aztec_Map::Aztec_Map
Aztec_Map(int globalSize, int N_update, const int *update, int localOffset, MPI_Comm comm)
fei_trilinos::Aztec_Map::getUpdate
int * getUpdate()
Definition:
fei_Aztec_Map.hpp:75
fei_trilinos::Aztec_Map::orderingUpdate
std::vector< int > orderingUpdate
Definition:
fei_Aztec_Map.hpp:93
fei_trilinos::Aztec_Map::globalSize
virtual const int & globalSize() const
Definition:
fei_Aztec_Map.hpp:72
MPI_Comm
#define MPI_Comm
Definition:
fei_mpi.h:56
fei_trilinos::Aztec_Map::localOffset_
int localOffset_
Definition:
fei_Aztec_Map.hpp:122
fei_trilinos::Aztec_Map::localOffset
virtual const int & localOffset() const
Definition:
fei_Aztec_Map.hpp:73
fei_trilinos::Aztec_Map
Definition:
fei_Aztec_Map.hpp:62
fei_trilinos::Aztec_Map::getCommunicator
virtual MPI_Comm getCommunicator() const
Definition:
fei_Aztec_Map.hpp:80
fei_trilinos::Aztec_Map::update
std::vector< int > update
Definition:
fei_Aztec_Map.hpp:88
Generated by
1.8.16