Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
iwr
amdis
Commits
d710ef89
Commit
d710ef89
authored
Mar 16, 2011
by
Thomas Witkowski
Browse files
Merge
parent
a4c463df
Changes
4
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/parallel/MeshDistributor.cc
View file @
d710ef89
...
...
@@ -687,7 +687,6 @@ namespace AMDiS {
double
first
=
MPI
::
Wtime
();
// === If mesh has not been changed on all ranks, return. ===
int
recvAllValues
=
0
;
...
...
@@ -803,6 +802,38 @@ namespace AMDiS {
MSG
(
"Imbalancing factor: %.1f\%
\n
"
,
imbalance
);
}
{
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
0
,
Mesh
::
CALL_EL_LEVEL
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
if
(
elInfo
->
getElement
()
->
getIndex
()
==
195
)
{
MSG
(
"FOUND MACRO 195: %d %f %f %f
\n
"
,
elInfo
->
getElement
()
->
getDof
(
2
,
0
),
elInfo
->
getCoord
(
2
)[
0
],
elInfo
->
getCoord
(
2
)[
1
],
elInfo
->
getCoord
(
2
)[
2
]);
}
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
}
{
if
(
mpiRank
==
0
)
{
WorldVector
<
double
>
c
;
mesh
->
getDofIndexCoords
(
9
,
feSpace
,
c
);
MSG
(
"9-COORDS %f %f %f
\n
"
,
c
[
0
],
c
[
1
],
c
[
2
]);
}
if
(
mpiRank
==
2
)
{
WorldVector
<
double
>
c
;
mesh
->
getDofIndexCoords
(
9
,
feSpace
,
c
);
MSG
(
"9-COORDS %f %f %f
\n
"
,
c
[
0
],
c
[
1
],
c
[
2
]);
}
}
}
...
...
@@ -1209,6 +1240,11 @@ namespace AMDiS {
updateInteriorBoundaryInfo
();
updateLocalGlobalNumbering
();
// === Update periodic mapping, if there are periodic boundaries. ===
createPeriodicMap
();
#if (DEBUG != 0)
MSG
(
"AMDiS runs in debug mode, so make some test ...
\n
"
);
...
...
@@ -1217,6 +1253,7 @@ namespace AMDiS {
ParallelDebug
::
testAllElements
(
*
this
);
ParallelDebug
::
testDoubleDofs
(
mesh
);
ParallelDebug
::
testInteriorBoundary
(
*
this
);
ParallelDebug
::
testPeriodicBoundary
(
*
this
);
ParallelDebug
::
printBoundaryInfo
(
*
this
);
MSG
(
"Debug mode tests finished!
\n
"
);
...
...
@@ -1809,6 +1846,8 @@ namespace AMDiS {
for
(
RankToBoundMap
::
iterator
it
=
periodicBoundary
.
boundary
.
begin
();
it
!=
periodicBoundary
.
boundary
.
end
();
++
it
)
{
MSG
(
"PER BOUND WITH RANK %d!
\n
"
,
it
->
first
);
if
(
it
->
first
==
mpiRank
)
{
TEST_EXIT_DBG
(
it
->
second
.
size
()
%
2
==
0
)(
"Should not happen!
\n
"
);
...
...
@@ -1835,6 +1874,8 @@ namespace AMDiS {
DegreeOfFreedom
globalDof1
=
mapLocalGlobalDofs
[
*
(
dofs1
[
j
])];
if
(
periodicDofAssociations
[
globalDof0
].
count
(
type
)
==
0
)
{
MSG
(
"SET A: %d %d <-> %d
\n
"
,
type
,
globalDof0
,
globalDof1
);
periodicDof
[
type
][
globalDof0
]
=
globalDof1
;
periodicDofAssociations
[
globalDof0
].
insert
(
type
);
}
...
...
@@ -1847,10 +1888,20 @@ namespace AMDiS {
for
(
vector
<
AtomicBoundary
>::
iterator
boundIt
=
it
->
second
.
begin
();
boundIt
!=
it
->
second
.
end
();
++
boundIt
)
{
MSG
(
"BOUND %d %d %d - %d %d %d
\n
"
,
boundIt
->
rankObj
.
elIndex
,
boundIt
->
rankObj
.
subObj
,
boundIt
->
rankObj
.
ithObj
,
boundIt
->
neighObj
.
elIndex
,
boundIt
->
neighObj
.
subObj
,
boundIt
->
neighObj
.
ithObj
);
int
nDofs
=
dofs
.
size
();
boundIt
->
rankObj
.
el
->
getVertexDofs
(
feSpace
,
boundIt
->
rankObj
,
dofs
);
boundIt
->
rankObj
.
el
->
getNonVertexDofs
(
feSpace
,
boundIt
->
rankObj
,
dofs
);
for
(
int
i
=
nDofs
;
i
<
dofs
.
size
();
i
++
)
{
MSG
(
" dof %d
\n
"
,
*
(
dofs
[
i
]));
}
for
(
unsigned
int
i
=
0
;
i
<
(
dofs
.
size
()
-
nDofs
);
i
++
)
rankToDofType
[
it
->
first
].
push_back
(
boundIt
->
type
);
}
...
...
@@ -1866,9 +1917,10 @@ namespace AMDiS {
}
stdMpi
.
updateSendDataSize
();
stdMpi
.
startCommunication
();
MSG
(
"---------"
);
// === The rank has received the dofs from the rank on the other side of ===
// === the boundary. Now it can use them to create the mapping between ===
// === the periodic dofs in this rank and the corresponding periodic ===
...
...
@@ -1877,6 +1929,7 @@ namespace AMDiS {
for
(
RankToBoundMap
::
iterator
it
=
periodicBoundary
.
boundary
.
begin
();
it
!=
periodicBoundary
.
boundary
.
end
();
++
it
)
{
MSG
(
"PER BOUND WITH RANK %d!
\n
"
,
it
->
first
);
DofContainer
&
dofs
=
rankPeriodicDofs
[
it
->
first
];
vector
<
int
>&
types
=
rankToDofType
[
it
->
first
];
...
...
@@ -1891,6 +1944,8 @@ namespace AMDiS {
// Check if this global dof with the corresponding boundary type was
// not added before by another periodic boundary from other rank.
if
(
periodicDofAssociations
[
globalDofIndex
].
count
(
type
)
==
0
)
{
MSG
(
"SET B at POS %d: %d %d/%d <-> %d
\n
"
,
i
,
type
,
*
(
dofs
[
i
]),
globalDofIndex
,
mapGlobalDofIndex
);
periodicDof
[
type
][
globalDofIndex
]
=
mapGlobalDofIndex
;
periodicDofAssociations
[
globalDofIndex
].
insert
(
type
);
}
...
...
@@ -1950,6 +2005,9 @@ namespace AMDiS {
periodicDof
[
perIt
->
first
][
dofIt
->
second
]
==
dofIt
->
first
)
(
"Should not happen!
\n
"
);
MSG
(
"SET C: %d %d <-> %d
\n
"
,
perIt
->
first
,
dofIt
->
second
,
dofIt
->
first
);
periodicDof
[
perIt
->
first
][
dofIt
->
second
]
=
dofIt
->
first
;
}
}
...
...
AMDiS/src/parallel/MeshManipulation.cc
View file @
d710ef89
...
...
@@ -141,7 +141,7 @@ namespace AMDiS {
el1
->
getNonVertexDofs
(
feSpace
,
b1
,
dofs1
);
#if (DEBUG != 0)
//
debug::testDofsByCoords(feSpace, dofs0, dofs1);
debug
::
testDofsByCoords
(
feSpace
,
dofs0
,
dofs1
);
#endif
for
(
unsigned
int
i
=
0
;
i
<
dofs0
.
size
();
i
++
)
...
...
@@ -183,7 +183,7 @@ namespace AMDiS {
el1
->
getNonVertexDofs
(
feSpace
,
b1
,
dofs1
);
#if (DEBUG != 0)
//
debug::testDofsByCoords(feSpace, dofs0, dofs1);
debug
::
testDofsByCoords
(
feSpace
,
dofs0
,
dofs1
);
#endif
for
(
unsigned
int
i
=
0
;
i
<
dofs0
.
size
();
i
++
)
...
...
AMDiS/src/parallel/ParallelDebug.cc
View file @
d710ef89
...
...
@@ -595,7 +595,7 @@ namespace AMDiS {
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
VERTEX
)
;
i
++
)
{
WorldVector
<
double
>
&
c
=
elInfo
->
getCoord
(
i
);
if
(
cMap
.
count
(
c
)
==
0
)
{
cMap
[
c
]
=
elInfo
->
getElement
()
->
getDof
(
i
,
0
);
...
...
AMDiS/src/parallel/PetscSolver.cc
View file @
d710ef89
...
...
@@ -77,7 +77,7 @@ namespace AMDiS {
// === Traverse all rows of the dof matrix and insert row wise the values ===
// === to the
pets
c matrix. ===
// === to the
PETS
c matrix. ===
for
(
cursor_type
cursor
=
begin
<
row
>
(
mat
->
getBaseMatrix
()),
cend
=
end
<
row
>
(
mat
->
getBaseMatrix
());
cursor
!=
cend
;
++
cursor
)
{
...
...
@@ -91,6 +91,7 @@ namespace AMDiS {
// === Row DOF index is not periodic. ===
// Calculate PETSc row index.
int
rowIndex
=
globalRowDof
*
dispMult
+
dispAddRow
;
cols
.
clear
();
...
...
@@ -285,7 +286,7 @@ namespace AMDiS {
// Calculate global row index of the dof.
DegreeOfFreedom
globalRowDof
=
meshDistributor
->
mapLocalToGlobal
(
dofIt
.
getDOFIndex
());
// Calculate
pets
c index of the row dof.
// Calculate
PETS
c index of the row dof.
int
index
=
globalRowDof
*
dispMult
+
dispAdd
;
if
(
meshDistributor
->
isPeriodicDof
(
globalRowDof
))
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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