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
Aland, Sebastian
amdis
Commits
8dcb7520
Commit
8dcb7520
authored
Jul 01, 2009
by
Thomas Witkowski
Browse files
Work on pdd.
parent
6fd5f942
Changes
2
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/ParallelDomainProblem.cc
View file @
8dcb7520
...
@@ -68,6 +68,10 @@ namespace AMDiS {
...
@@ -68,6 +68,10 @@ namespace AMDiS {
// and now partition the mesh
// and now partition the mesh
partitionMesh
(
adaptInfo
);
partitionMesh
(
adaptInfo
);
#if (DEBUG != 0)
ElementIdxToDofs
elMap
;
DbgCreateElementMap
(
elMap
);
#endif
// === Create new global and local DOF numbering. ===
// === Create new global and local DOF numbering. ===
...
@@ -86,9 +90,12 @@ namespace AMDiS {
...
@@ -86,9 +90,12 @@ namespace AMDiS {
createInteriorBoundaryInfo
(
rankDOFs
,
boundaryDOFs
);
createInteriorBoundaryInfo
(
rankDOFs
,
boundaryDOFs
);
#if (DEBUG != 0)
#if (DEBUG != 0)
DbgTestElementMap
(
elMap
);
DbgTestInteriorBoundary
();
DbgTestInteriorBoundary
();
#endif
#endif
exit
(
0
);
// === Remove all macro elements that are not part of the rank partition. ===
// === Remove all macro elements that are not part of the rank partition. ===
removeMacroElements
();
removeMacroElements
();
...
@@ -638,7 +645,7 @@ namespace AMDiS {
...
@@ -638,7 +645,7 @@ namespace AMDiS {
mapGlobalLocalDOFs
[
rstart
+
i
]
=
i
;
mapGlobalLocalDOFs
[
rstart
+
i
]
=
i
;
isRankDOF
[
i
]
=
true
;
isRankDOF
[
i
]
=
true
;
}
}
#if 0
// === Change dof indices at boundary from other ranks. ===
// === Change dof indices at boundary from other ranks. ===
// Within this small data structure we track which dof index was already changed.
// Within this small data structure we track which dof index was already changed.
...
@@ -690,6 +697,7 @@ namespace AMDiS {
...
@@ -690,6 +697,7 @@ namespace AMDiS {
delete [] recvBuffers[i];
delete [] recvBuffers[i];
}
}
#endif
}
}
...
@@ -1082,9 +1090,63 @@ namespace AMDiS {
...
@@ -1082,9 +1090,63 @@ namespace AMDiS {
}
}
}
}
sort
(
rankDOFs
.
begin
(),
rankDOFs
.
end
(),
cmpDofsByValue
);
}
}
void
ParallelDomainBase
::
DbgCreateElementMap
(
ElementIdxToDofs
&
elMap
)
{
FUNCNAME
(
"ParallelDomainBase::DbgCreateElementMap()"
);
TEST_EXIT
(
mesh
->
getDim
()
==
2
)(
"Works only for 2d!
\n
"
);
elMap
.
clear
();
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
if
(
mpiRank
==
0
)
std
::
cout
<<
"EL = "
<<
el
->
getIndex
()
<<
std
::
endl
;
orderDOFs
(
el
->
getDOF
(
0
),
el
->
getDOF
(
1
),
el
->
getDOF
(
2
),
elMap
[
el
->
getIndex
()]);
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
}
void
ParallelDomainBase
::
DbgTestElementMap
(
ElementIdxToDofs
&
elMap
)
{
FUNCNAME
(
"ParallelDomainbase::DbgTestElementMap()"
);
TEST_EXIT
(
mesh
->
getDim
()
==
2
)(
"Works only for 2d!
\n
"
);
DofContainer
vec
(
3
);
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_LEAF_EL
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
if
(
mpiRank
==
0
)
std
::
cout
<<
"EL = "
<<
el
->
getIndex
()
<<
std
::
endl
;
orderDOFs
(
el
->
getDOF
(
0
),
el
->
getDOF
(
1
),
el
->
getDOF
(
2
),
vec
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
if
(
elMap
[
el
->
getIndex
()][
i
]
!=
vec
[
i
])
{
std
::
cout
<<
"[DBG "
<<
mpiRank
<<
"]: Wrong new dof numeration in element = "
<<
el
->
getIndex
()
<<
std
::
endl
;
std
::
cout
<<
"[DBG "
<<
mpiRank
<<
"]: Old numeration was: "
;
for
(
int
j
=
0
;
j
<
3
;
j
++
)
std
::
cout
<<
elMap
[
el
->
getIndex
()][
j
]
<<
" = "
<<
*
(
elMap
[
el
->
getIndex
()][
j
])
<<
" "
;
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"[DBG "
<<
mpiRank
<<
"]: New numeration is: "
;
for
(
int
j
=
0
;
j
<
3
;
j
++
)
std
::
cout
<<
vec
[
j
]
<<
" = "
<<
*
(
vec
[
j
])
<<
" "
;
std
::
cout
<<
std
::
endl
;
ERROR_EXIT
(
"WRONG NEW DOF NUMERATION!
\n
"
);
}
}
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
}
void
ParallelDomainBase
::
DbgTestInteriorBoundary
()
void
ParallelDomainBase
::
DbgTestInteriorBoundary
()
{
{
FUNCNAME
(
"ParallelDomainBase::DbgTestInteriorBoundary()"
);
FUNCNAME
(
"ParallelDomainBase::DbgTestInteriorBoundary()"
);
...
...
AMDiS/src/ParallelDomainProblem.h
View file @
8dcb7520
...
@@ -70,6 +70,8 @@ namespace AMDiS {
...
@@ -70,6 +70,8 @@ namespace AMDiS {
/// Forward type (it maps rank numbers to the interior boundary objects).
/// Forward type (it maps rank numbers to the interior boundary objects).
typedef
InteriorBoundary
::
RankToBoundMap
RankToBoundMap
;
typedef
InteriorBoundary
::
RankToBoundMap
RankToBoundMap
;
typedef
std
::
map
<
int
,
DofContainer
>
ElementIdxToDofs
;
public:
public:
ParallelDomainBase
(
const
std
::
string
&
name
,
ParallelDomainBase
(
const
std
::
string
&
name
,
ProblemIterationInterface
*
iterationIF
,
ProblemIterationInterface
*
iterationIF
,
...
@@ -202,6 +204,9 @@ namespace AMDiS {
...
@@ -202,6 +204,9 @@ namespace AMDiS {
DofContainer
&
rankDOFs
,
DofContainer
&
rankDOFs
,
DofToRank
&
boundaryDOFs
);
DofToRank
&
boundaryDOFs
);
void
DbgCreateElementMap
(
ElementIdxToDofs
&
elMap
);
void
DbgTestElementMap
(
ElementIdxToDofs
&
elMap
);
void
DbgTestInteriorBoundary
();
void
DbgTestInteriorBoundary
();
...
@@ -213,6 +218,42 @@ namespace AMDiS {
...
@@ -213,6 +218,42 @@ namespace AMDiS {
*/
*/
void
DbgTestCommonDofs
();
void
DbgTestCommonDofs
();
inline
void
orderDOFs
(
const
DegreeOfFreedom
*
dof1
,
const
DegreeOfFreedom
*
dof2
,
const
DegreeOfFreedom
*
dof3
,
DofContainer
&
vec
)
{
vec
.
resize
(
3
);
if
(
mpiRank
==
0
)
std
::
cout
<<
"DOFS are: "
<<
dof1
<<
" = "
<<
*
dof1
<<
" "
<<
dof2
<<
" = "
<<
*
dof2
<<
" "
<<
dof3
<<
" = "
<<
*
dof3
<<
" "
<<
std
::
endl
;
if
(
*
dof1
<
*
dof2
&&
*
dof1
<
*
dof3
)
vec
[
0
]
=
dof1
;
else
if
(
*
dof2
<
*
dof1
&&
*
dof2
<
*
dof3
)
vec
[
0
]
=
dof2
;
else
vec
[
0
]
=
dof3
;
if
(
*
dof1
>
*
dof2
&&
*
dof1
>
*
dof3
)
vec
[
2
]
=
dof1
;
else
if
(
*
dof2
>
*
dof1
&&
*
dof2
>
*
dof3
)
vec
[
2
]
=
dof2
;
else
vec
[
2
]
=
dof3
;
if
(
dof1
!=
vec
[
0
]
&&
dof1
!=
vec
[
2
])
vec
[
1
]
=
dof1
;
else
if
(
dof2
!=
vec
[
0
]
&&
dof2
!=
vec
[
2
])
vec
[
1
]
=
dof2
;
else
vec
[
1
]
=
dof3
;
}
protected:
protected:
///
///
ProblemIterationInterface
*
iterationIF
;
ProblemIterationInterface
*
iterationIF
;
...
@@ -326,6 +367,11 @@ namespace AMDiS {
...
@@ -326,6 +367,11 @@ namespace AMDiS {
DofToBool
isRankDOF
;
DofToBool
isRankDOF
;
};
};
bool
cmpDofsByValue
(
const
DegreeOfFreedom
*
dof1
,
const
DegreeOfFreedom
*
dof2
)
{
return
(
*
dof1
<
*
dof2
);
}
class
ParallelDomainScal
:
public
ParallelDomainBase
class
ParallelDomainScal
:
public
ParallelDomainBase
{
{
public:
public:
...
...
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