FEI Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
base
fei_ConnectivityBlock.cpp
Go to the documentation of this file.
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::connectivities_
std::vector< int > connectivities_
Definition
fei_ConnectivityBlock.hpp:136
fei::ConnectivityBlock::colPattern_
fei::Pattern * colPattern_
Definition
fei_ConnectivityBlock.hpp:127
fei::ConnectivityBlock::numRecordsPerColConnectivity_
int numRecordsPerColConnectivity_
Definition
fei_ConnectivityBlock.hpp:137
fei::ConnectivityBlock::connIDsOffsetMap_
std::map< int, int > connIDsOffsetMap_
Definition
fei_ConnectivityBlock.hpp:131
fei::ConnectivityBlock::colConnectivities_
std::vector< int > colConnectivities_
Definition
fei_ConnectivityBlock.hpp:138
fei::ConnectivityBlock::getColConnectivity
const int * getColConnectivity(int ID) const
Definition
fei_ConnectivityBlock.cpp:203
fei::ConnectivityBlock::haveFieldID_
bool haveFieldID_
Definition
fei_ConnectivityBlock.hpp:141
fei::ConnectivityBlock::isSymmetric_
bool isSymmetric_
Definition
fei_ConnectivityBlock.hpp:128
fei::ConnectivityBlock::ConnectivityBlock
ConnectivityBlock(int blockID, fei::Pattern *pattern, int numConnectivities)
Definition
fei_ConnectivityBlock.cpp:22
fei::ConnectivityBlock::blockID_
int blockID_
Definition
fei_ConnectivityBlock.hpp:125
fei::ConnectivityBlock::getRowConnectivity
const int * getRowConnectivity(int ID) const
Definition
fei_ConnectivityBlock.cpp:175
fei::ConnectivityBlock::isDiagonal_
bool isDiagonal_
Definition
fei_ConnectivityBlock.hpp:129
fei::ConnectivityBlock::connectivityOffsets_
std::vector< int > connectivityOffsets_
Definition
fei_ConnectivityBlock.hpp:133
fei::ConnectivityBlock::~ConnectivityBlock
virtual ~ConnectivityBlock()
Definition
fei_ConnectivityBlock.cpp:170
fei::ConnectivityBlock::fieldID_
int fieldID_
Definition
fei_ConnectivityBlock.hpp:140
fei::ConnectivityBlock::pattern_
fei::Pattern * pattern_
Definition
fei_ConnectivityBlock.hpp:126
fei::ConnectivityBlock::numRecordsPerConnectivity_
int numRecordsPerConnectivity_
Definition
fei_ConnectivityBlock.hpp:135
fei::Pattern
Definition
fei_Pattern.hpp:29
fei_ConnectivityBlock.hpp
fei_ErrMacros.hpp
fei_Pattern.hpp
fei_defs.h
fei_macros.hpp
Generated by
1.17.0