Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Backofen, Rainer
amdis
Commits
643968b8
Commit
643968b8
authored
Jul 29, 2010
by
Thomas Witkowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add missing files.
parent
c81995a9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
275 additions
and
0 deletions
+275
-0
AMDiS/src/parallel/ElementObjectData.cc
AMDiS/src/parallel/ElementObjectData.cc
+39
-0
AMDiS/src/parallel/ElementObjectData.h
AMDiS/src/parallel/ElementObjectData.h
+236
-0
No files found.
AMDiS/src/parallel/ElementObjectData.cc
0 → 100644
View file @
643968b8
#include "ElementObjectData.h"
namespace
AMDiS
{
void
ElementObjects
::
createRankData
()
{
for
(
std
::
map
<
DegreeOfFreedom
,
std
::
vector
<
ElementObjectData
>
>::
iterator
it
=
vertexElements
.
begin
();
it
!=
vertexElements
.
end
();
++
it
)
{
for
(
std
::
vector
<
ElementObjectData
>::
iterator
it2
=
it
->
second
.
begin
();
it2
!=
it
->
second
.
end
();
++
it2
)
{
int
elOwner
=
elementInRank
[
it2
->
elIndex
];
if
(
it2
->
elIndex
>
vertexInRank
[
it
->
first
][
elOwner
].
elIndex
)
vertexInRank
[
it
->
first
][
elOwner
]
=
*
it2
;
}
}
for
(
std
::
map
<
DofEdge
,
std
::
vector
<
ElementObjectData
>
>::
iterator
it
=
edgeElements
.
begin
();
it
!=
edgeElements
.
end
();
++
it
)
{
for
(
std
::
vector
<
ElementObjectData
>::
iterator
it2
=
it
->
second
.
begin
();
it2
!=
it
->
second
.
end
();
++
it2
)
{
int
elOwner
=
elementInRank
[
it2
->
elIndex
];
if
(
it2
->
elIndex
>
edgeInRank
[
it
->
first
][
elOwner
].
elIndex
)
edgeInRank
[
it
->
first
][
elOwner
]
=
*
it2
;
}
}
for
(
std
::
map
<
DofFace
,
std
::
vector
<
ElementObjectData
>
>::
iterator
it
=
faceElements
.
begin
();
it
!=
faceElements
.
end
();
++
it
)
{
for
(
std
::
vector
<
ElementObjectData
>::
iterator
it2
=
it
->
second
.
begin
();
it2
!=
it
->
second
.
end
();
++
it2
)
{
int
elOwner
=
elementInRank
[
it2
->
elIndex
];
if
(
it2
->
elIndex
>
faceInRank
[
it
->
first
][
elOwner
].
elIndex
)
faceInRank
[
it
->
first
][
elOwner
]
=
*
it2
;
}
}
}
}
AMDiS/src/parallel/ElementObjectData.h
0 → 100644
View file @
643968b8
// ============================================================================
// == ==
// == AMDiS - Adaptive multidimensional simulations ==
// == ==
// ============================================================================
// == ==
// == TU Dresden ==
// == ==
// == Institut fr Wissenschaftliches Rechnen ==
// == Zellescher Weg 12-14 ==
// == 01069 Dresden ==
// == germany ==
// == ==
// ============================================================================
// == ==
// == https://gforge.zih.tu-dresden.de/projects/amdis/ ==
// == ==
// ============================================================================
/** \file ElementObjectData.h */
#ifndef AMDIS_ELEMENTOBJECTDATA_H
#define AMDIS_ELEMENTOBJECTDATA_H
#include <map>
#include <vector>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include "Global.h"
#include "Boundary.h"
namespace
AMDiS
{
struct
ElementObjectData
{
ElementObjectData
(
int
a
=
-
1
,
int
b
=
0
,
BoundaryType
c
=
INTERIOR
)
:
elIndex
(
a
),
ithObject
(
b
),
boundaryType
(
c
)
{}
int
elIndex
;
int
ithObject
;
BoundaryType
boundaryType
;
};
class
ElementObjects
{
public:
ElementObjects
(
std
::
map
<
int
,
int
>
vec
)
:
elementInRank
(
vec
),
iterGeoPos
(
CENTER
)
{}
void
addVertex
(
DegreeOfFreedom
vertex
,
int
elIndex
,
int
ith
,
BoundaryType
bound
=
INTERIOR
)
{
vertexElements
[
vertex
].
push_back
(
ElementObjectData
(
elIndex
,
ith
,
bound
));
vertexOwner
[
vertex
]
=
std
::
max
(
vertexOwner
[
vertex
],
elementInRank
[
elIndex
]);
}
void
addEdge
(
DofEdge
edge
,
int
elIndex
,
int
ith
,
BoundaryType
bound
=
INTERIOR
)
{
edgeElements
[
edge
].
push_back
(
ElementObjectData
(
elIndex
,
ith
,
bound
));
edgeOwner
[
edge
]
=
std
::
max
(
edgeOwner
[
edge
],
elementInRank
[
elIndex
]);
}
void
addFace
(
DofFace
face
,
int
elIndex
,
int
ith
,
BoundaryType
bound
=
INTERIOR
)
{
faceElements
[
face
].
push_back
(
ElementObjectData
(
elIndex
,
ith
,
bound
));
faceOwner
[
face
]
=
std
::
max
(
faceOwner
[
face
],
elementInRank
[
elIndex
]);
}
void
createRankData
();
bool
iterate
(
GeoIndex
pos
)
{
if
(
iterGeoPos
==
CENTER
)
{
iterGeoPos
=
pos
;
switch
(
iterGeoPos
)
{
case
VERTEX
:
vertexIter
=
vertexInRank
.
begin
();
break
;
case
EDGE
:
edgeIter
=
edgeInRank
.
begin
();
break
;
case
FACE
:
faceIter
=
faceInRank
.
begin
();
break
;
default:
ERROR_EXIT
(
"Not GeoIndex %d!
\n
"
,
iterGeoPos
);
}
}
else
{
switch
(
iterGeoPos
)
{
case
VERTEX
:
++
vertexIter
;
break
;
case
EDGE
:
++
edgeIter
;
break
;
case
FACE
:
++
faceIter
;
break
;
default:
ERROR_EXIT
(
"Not GeoIndex %d!
\n
"
,
iterGeoPos
);
}
}
switch
(
iterGeoPos
)
{
case
VERTEX
:
if
(
vertexIter
==
vertexInRank
.
end
())
{
iterGeoPos
=
CENTER
;
return
false
;
}
break
;
case
EDGE
:
if
(
edgeIter
==
edgeInRank
.
end
())
{
iterGeoPos
=
CENTER
;
return
false
;
}
break
;
case
FACE
:
if
(
faceIter
==
faceInRank
.
end
())
{
iterGeoPos
=
CENTER
;
return
false
;
}
break
;
default:
ERROR_EXIT
(
"Should not happen!
\n
"
);
}
return
true
;
}
std
::
map
<
int
,
ElementObjectData
>&
getIterateData
()
{
switch
(
iterGeoPos
)
{
case
VERTEX
:
return
vertexIter
->
second
;
break
;
case
EDGE
:
return
edgeIter
->
second
;
break
;
case
FACE
:
return
faceIter
->
second
;
break
;
default:
ERROR_EXIT
(
"Should not happen!
\n
"
);
// Will never be reached, just to avoid compiler warnings.
return
faceIter
->
second
;
}
}
int
getIterateOwner
()
{
switch
(
iterGeoPos
)
{
case
VERTEX
:
return
vertexOwner
[
vertexIter
->
first
];
break
;
case
EDGE
:
return
edgeOwner
[
edgeIter
->
first
];
break
;
case
FACE
:
return
faceOwner
[
faceIter
->
first
];
break
;
default:
ERROR_EXIT
(
"Should not happen!
\n
"
);
// Will never be reached, just to avoid compiler warnings.
return
-
1
;
}
}
int
getOwner
(
DegreeOfFreedom
vertex
)
{
return
vertexOwner
[
vertex
];
}
int
getOwner
(
DofEdge
edge
)
{
return
edgeOwner
[
edge
];
}
int
getOwner
(
DofFace
face
)
{
return
faceOwner
[
face
];
}
std
::
vector
<
ElementObjectData
>&
getElements
(
DegreeOfFreedom
vertex
)
{
return
vertexElements
[
vertex
];
}
std
::
vector
<
ElementObjectData
>&
getElements
(
DofEdge
edge
)
{
return
edgeElements
[
edge
];
}
std
::
vector
<
ElementObjectData
>&
getElements
(
DofFace
face
)
{
return
faceElements
[
face
];
}
private:
std
::
map
<
int
,
int
>
elementInRank
;
std
::
map
<
DegreeOfFreedom
,
std
::
vector
<
ElementObjectData
>
>
vertexElements
;
std
::
map
<
DofEdge
,
std
::
vector
<
ElementObjectData
>
>
edgeElements
;
std
::
map
<
DofFace
,
std
::
vector
<
ElementObjectData
>
>
faceElements
;
std
::
map
<
DegreeOfFreedom
,
int
>
vertexOwner
;
std
::
map
<
DofEdge
,
int
>
edgeOwner
;
std
::
map
<
DofFace
,
int
>
faceOwner
;
std
::
map
<
DegreeOfFreedom
,
std
::
map
<
int
,
ElementObjectData
>
>
vertexInRank
;
std
::
map
<
DofEdge
,
std
::
map
<
int
,
ElementObjectData
>
>
edgeInRank
;
std
::
map
<
DofFace
,
std
::
map
<
int
,
ElementObjectData
>
>
faceInRank
;
std
::
map
<
DegreeOfFreedom
,
std
::
map
<
int
,
ElementObjectData
>
>::
iterator
vertexIter
;
std
::
map
<
DofEdge
,
std
::
map
<
int
,
ElementObjectData
>
>::
iterator
edgeIter
;
std
::
map
<
DofFace
,
std
::
map
<
int
,
ElementObjectData
>
>::
iterator
faceIter
;
GeoIndex
iterGeoPos
;
};
}
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment