FEI
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
base
fei_ConnectivityBlock.cpp
1
/*--------------------------------------------------------------------*/
2
/* Copyright 2005 Sandia Corporation. */
3
/* Under the terms of Contract DE-AC04-94AL85000, there is a */
4
/* non-exclusive license for use of this work by or on behalf */
5
/* of the U.S. Government. Export of this program may require */
6
/* a license from the United States Government. */
7
/*--------------------------------------------------------------------*/
8
9
#include <fei_macros.hpp>
10
11
#include <fei_defs.h>
12
13
#include <fei_Pattern.hpp>
14
15
#include <fei_ConnectivityBlock.hpp>
16
17
#undef fei_file
18
#define fei_file "fei_ConnectivityBlock.cpp"
19
#include <fei_ErrMacros.hpp>
20
21
//----------------------------------------------------------------------------
22
fei::ConnectivityBlock::ConnectivityBlock
(
int
blockID,
23
fei::Pattern
* pattern,
24
int
numConnectivities)
25
: blockID_(blockID),
26
pattern_(pattern),
27
colPattern_(NULL),
28
isSymmetric_(true),
29
isDiagonal_(false),
30
connIDsOffsetMap_(),
31
connectivityOffsets_(),
32
numRecordsPerConnectivity_(pattern->getNumIDs()),
33
connectivities_(pattern->getNumIDs()*numConnectivities),
34
numRecordsPerColConnectivity_(0),
35
colConnectivities_(),
36
fieldID_(-99),
37
haveFieldID_(false)
38
{
39
}
40
41
//----------------------------------------------------------------------------
42
fei::ConnectivityBlock::ConnectivityBlock
(
int
blockID,
43
fei::Pattern
* rowpattern,
44
fei::Pattern
* colpattern,
45
int
numConnectivities)
46
: blockID_(blockID),
47
pattern_(rowpattern),
48
colPattern_(colpattern),
49
isSymmetric_(false),
50
isDiagonal_(false),
51
connIDsOffsetMap_(),
52
connectivityOffsets_(),
53
numRecordsPerConnectivity_(rowpattern->getNumIDs()),
54
connectivities_(rowpattern->getNumIDs()*numConnectivities),
55
numRecordsPerColConnectivity_(colpattern->getNumIDs()),
56
colConnectivities_(colpattern->getNumIDs()*numConnectivities),
57
fieldID_(-99),
58
haveFieldID_(false)
59
{
60
}
61
62
//----------------------------------------------------------------------------
63
fei::ConnectivityBlock::ConnectivityBlock
(
int
numRowIDs,
64
const
int
* rowIDs,
65
const
int
* rowOffsets,
66
bool
offsets_are_lengths)
67
: blockID_(-1),
68
pattern_(NULL),
69
colPattern_(NULL),
70
isSymmetric_(false),
71
isDiagonal_(false),
72
connIDsOffsetMap_(),
73
connectivityOffsets_(),
74
numRecordsPerConnectivity_(0),
75
connectivities_(),
76
numRecordsPerColConnectivity_(0),
77
colConnectivities_(),
78
fieldID_(-99),
79
haveFieldID_(false)
80
{
81
connectivities_.resize(numRowIDs);
82
connectivityOffsets_.resize(numRowIDs+1);
83
84
int
clen = 0;
85
if
(offsets_are_lengths) {
86
int
sum = 0;
87
for
(
int
ii=0; ii<numRowIDs; ++ii) {
88
sum += rowOffsets[ii];
89
}
90
clen = sum;
91
}
92
else
clen = rowOffsets[numRowIDs];
93
94
colConnectivities_.resize(clen);
95
96
int
i;
97
if
(offsets_are_lengths) {
98
int
offset = 0;
99
for
(i=0; i<numRowIDs; ++i) {
100
connIDsOffsetMap_[rowIDs[i]] = i;
101
connectivityOffsets_[i] = offset;
102
offset += rowOffsets[i];
103
}
104
connectivityOffsets_[numRowIDs] = offset;
105
}
106
else
{
107
for
(i=0; i<numRowIDs; ++i) {
108
connIDsOffsetMap_[rowIDs[i]] = i;
109
connectivityOffsets_[i] = rowOffsets[i];
110
}
111
connectivityOffsets_[numRowIDs] = rowOffsets[numRowIDs];
112
}
113
}
114
115
//----------------------------------------------------------------------------
116
fei::ConnectivityBlock::ConnectivityBlock
(
int
fldID,
117
int
numRowIDs,
118
const
int
* rowIDs,
119
const
int
* rowOffsets,
120
bool
offsets_are_lengths)
121
: blockID_(-1),
122
pattern_(NULL),
123
colPattern_(NULL),
124
isSymmetric_(false),
125
isDiagonal_(false),
126
connIDsOffsetMap_(),
127
connectivityOffsets_(),
128
numRecordsPerConnectivity_(0),
129
connectivities_(),
130
numRecordsPerColConnectivity_(0),
131
colConnectivities_(),
132
fieldID_(fldID),
133
haveFieldID_(true)
134
{
135
connectivities_.resize(numRowIDs);
136
connectivityOffsets_.resize(numRowIDs+1);
137
138
int
clen = 0;
139
if
(offsets_are_lengths) {
140
int
sum = 0;
141
for
(
int
ii=0; ii<numRowIDs; ++ii) {
142
sum += rowOffsets[ii];
143
}
144
clen = sum;
145
}
146
else
clen = rowOffsets[numRowIDs];
147
148
colConnectivities_.resize(clen);
149
150
int
i;
151
if
(offsets_are_lengths) {
152
int
offset = 0;
153
for
(i=0; i<numRowIDs; ++i) {
154
connIDsOffsetMap_[rowIDs[i]] = i;
155
connectivityOffsets_[i] = offset;
156
offset += rowOffsets[i];
157
}
158
connectivityOffsets_[numRowIDs] = offset;
159
}
160
else
{
161
for
(i=0; i<numRowIDs+1; ++i) {
162
connIDsOffsetMap_[rowIDs[i]] = i;
163
connectivityOffsets_[i] = rowOffsets[i];
164
}
165
connectivityOffsets_[numRowIDs] = rowOffsets[numRowIDs];
166
}
167
}
168
169
//----------------------------------------------------------------------------
170
fei::ConnectivityBlock::~ConnectivityBlock
()
171
{
172
}
173
174
//----------------------------------------------------------------------------
175
const
int
*
fei::ConnectivityBlock::getRowConnectivity
(
int
ID)
const
176
{
177
std::map<int,int>::const_iterator
178
iter = connIDsOffsetMap_.find(ID);
179
if
(iter == connIDsOffsetMap_.end()) {
180
return
(NULL);
181
}
182
183
int
ind = iter->second;
184
const
int
* ptr = &connectivities_[0];
185
return
( ptr + ind*numRecordsPerConnectivity_);
186
}
187
188
//----------------------------------------------------------------------------
189
int
*
fei::ConnectivityBlock::getRowConnectivity
(
int
ID)
190
{
191
std::map<int,int>::const_iterator
192
iter = connIDsOffsetMap_.find(ID);
193
if
(iter == connIDsOffsetMap_.end()) {
194
return
(NULL);
195
}
196
197
int
ind = iter->second;
198
int
* ptr = &connectivities_[0];
199
return
( ptr + ind*numRecordsPerConnectivity_);
200
}
201
202
//----------------------------------------------------------------------------
203
const
int
*
fei::ConnectivityBlock::getColConnectivity
(
int
ID)
const
204
{
205
std::map<int,int>::const_iterator
206
iter = connIDsOffsetMap_.find(ID);
207
if
(iter == connIDsOffsetMap_.end()) {
208
return
(NULL);
209
}
210
211
int
ind = iter->second;
212
const
int
* ptr = &colConnectivities_[0];
213
return
(ptr+ind*numRecordsPerColConnectivity_);
214
}
215
216
//----------------------------------------------------------------------------
217
int
*
fei::ConnectivityBlock::getColConnectivity
(
int
ID)
218
{
219
std::map<int,int>::const_iterator
220
iter = connIDsOffsetMap_.find(ID);
221
if
(iter == connIDsOffsetMap_.end()) {
222
return
(NULL);
223
}
224
225
int
ind = iter->second;
226
int
* ptr = &colConnectivities_[0];
227
return
(ptr+ind*numRecordsPerColConnectivity_);
228
}
229
fei::ConnectivityBlock::getColConnectivity
const int * getColConnectivity(int ID) const
Definition
fei_ConnectivityBlock.cpp:203
fei::ConnectivityBlock::ConnectivityBlock
ConnectivityBlock(int blockID, fei::Pattern *pattern, int numConnectivities)
Definition
fei_ConnectivityBlock.cpp:22
fei::ConnectivityBlock::getRowConnectivity
const int * getRowConnectivity(int ID) const
Definition
fei_ConnectivityBlock.cpp:175
fei::ConnectivityBlock::~ConnectivityBlock
virtual ~ConnectivityBlock()
Definition
fei_ConnectivityBlock.cpp:170
fei::Pattern
Definition
fei_Pattern.hpp:29
Generated by
1.17.0