Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
amdis
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Backofen, Rainer
amdis
Commits
2c96156e
Commit
2c96156e
authored
May 11, 2012
by
Thomas Witkowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Blub
parent
a2e41205
Changes
56
Hide whitespace changes
Inline
Side-by-side
Showing
56 changed files
with
493 additions
and
239 deletions
+493
-239
AMDiS/src/parallel/CheckerPartitioner.cc
AMDiS/src/parallel/CheckerPartitioner.cc
+12
-1
AMDiS/src/parallel/CheckerPartitioner.h
AMDiS/src/parallel/CheckerPartitioner.h
+13
-6
AMDiS/src/parallel/DofComm.cc
AMDiS/src/parallel/DofComm.cc
+12
-5
AMDiS/src/parallel/DofComm.h
AMDiS/src/parallel/DofComm.h
+2
-1
AMDiS/src/parallel/MeshDistributor.cc
AMDiS/src/parallel/MeshDistributor.cc
+62
-43
AMDiS/src/parallel/MeshDistributor.h
AMDiS/src/parallel/MeshDistributor.h
+4
-6
AMDiS/src/parallel/MeshLevelData.cc
AMDiS/src/parallel/MeshLevelData.cc
+2
-0
AMDiS/src/parallel/MeshLevelData.h
AMDiS/src/parallel/MeshLevelData.h
+4
-4
AMDiS/src/parallel/ParallelDebug.cc
AMDiS/src/parallel/ParallelDebug.cc
+19
-14
AMDiS/src/parallel/ParallelDebug.h
AMDiS/src/parallel/ParallelDebug.h
+11
-6
AMDiS/src/parallel/PetscSolverFeti.cc
AMDiS/src/parallel/PetscSolverFeti.cc
+90
-59
AMDiS/src/parallel/PetscSolverFeti.h
AMDiS/src/parallel/PetscSolverFeti.h
+5
-1
AMDiS/src/parallel/SubDomainSolver.cc
AMDiS/src/parallel/SubDomainSolver.cc
+143
-24
test/mpi/data/data0004a
test/mpi/data/data0004a
+12
-12
test/mpi/data/data0005/interior_boundary_p0.ser
test/mpi/data/data0005/interior_boundary_p0.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p1.ser
test/mpi/data/data0005/interior_boundary_p1.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p10.ser
test/mpi/data/data0005/interior_boundary_p10.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p11.ser
test/mpi/data/data0005/interior_boundary_p11.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p12.ser
test/mpi/data/data0005/interior_boundary_p12.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p13.ser
test/mpi/data/data0005/interior_boundary_p13.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p14.ser
test/mpi/data/data0005/interior_boundary_p14.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p15.ser
test/mpi/data/data0005/interior_boundary_p15.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p2.ser
test/mpi/data/data0005/interior_boundary_p2.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p3.ser
test/mpi/data/data0005/interior_boundary_p3.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p4.ser
test/mpi/data/data0005/interior_boundary_p4.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p5.ser
test/mpi/data/data0005/interior_boundary_p5.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p6.ser
test/mpi/data/data0005/interior_boundary_p6.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p7.ser
test/mpi/data/data0005/interior_boundary_p7.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p8.ser
test/mpi/data/data0005/interior_boundary_p8.ser
+0
-0
test/mpi/data/data0005/interior_boundary_p9.ser
test/mpi/data/data0005/interior_boundary_p9.ser
+0
-0
test/mpi/data/data0006/dofcomm_level_1.dat
test/mpi/data/data0006/dofcomm_level_1.dat
+8
-8
test/mpi/data/data0006/interior_boundary_p0.ser
test/mpi/data/data0006/interior_boundary_p0.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p1.ser
test/mpi/data/data0006/interior_boundary_p1.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p10.ser
test/mpi/data/data0006/interior_boundary_p10.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p11.ser
test/mpi/data/data0006/interior_boundary_p11.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p12.ser
test/mpi/data/data0006/interior_boundary_p12.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p13.ser
test/mpi/data/data0006/interior_boundary_p13.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p14.ser
test/mpi/data/data0006/interior_boundary_p14.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p15.ser
test/mpi/data/data0006/interior_boundary_p15.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p2.ser
test/mpi/data/data0006/interior_boundary_p2.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p3.ser
test/mpi/data/data0006/interior_boundary_p3.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p4.ser
test/mpi/data/data0006/interior_boundary_p4.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p5.ser
test/mpi/data/data0006/interior_boundary_p5.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p6.ser
test/mpi/data/data0006/interior_boundary_p6.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p7.ser
test/mpi/data/data0006/interior_boundary_p7.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p8.ser
test/mpi/data/data0006/interior_boundary_p8.ser
+0
-0
test/mpi/data/data0006/interior_boundary_p9.ser
test/mpi/data/data0006/interior_boundary_p9.ser
+0
-0
test/mpi/init/test0001.dat.2d
test/mpi/init/test0001.dat.2d
+1
-0
test/mpi/init/test0003.dat.2d
test/mpi/init/test0003.dat.2d
+1
-0
test/mpi/init/test0004.dat.2d
test/mpi/init/test0004.dat.2d
+1
-0
test/mpi/init/test0005.dat.2d
test/mpi/init/test0005.dat.2d
+1
-0
test/mpi/init/test0006.dat.2d
test/mpi/init/test0006.dat.2d
+1
-0
test/mpi/src/test0001.cc
test/mpi/src/test0001.cc
+48
-48
test/mpi/src/test0003.cc
test/mpi/src/test0003.cc
+25
-0
test/mpi/src/test0005.cc
test/mpi/src/test0005.cc
+8
-0
test/mpi/src/test0006.cc
test/mpi/src/test0006.cc
+8
-1
No files found.
AMDiS/src/parallel/CheckerPartitioner.cc
View file @
2c96156e
...
@@ -42,6 +42,11 @@ namespace AMDiS {
...
@@ -42,6 +42,11 @@ namespace AMDiS {
elCounter
,
6
*
static_cast
<
int
>
(
pow
(
mpiSize
,
1.5
)),
mpiSize
);
elCounter
,
6
*
static_cast
<
int
>
(
pow
(
mpiSize
,
1.5
)),
mpiSize
);
}
}
if
(
multilevel
)
{
TEST_EXIT
(
MPI
::
COMM_WORLD
.
Get_size
()
==
16
)
(
"Multilevel partitioning is implemented for 16 nodes only!
\n
"
);
}
int
dim
=
mesh
->
getDim
();
int
dim
=
mesh
->
getDim
();
TraverseStack
stack
;
TraverseStack
stack
;
...
@@ -54,7 +59,13 @@ namespace AMDiS {
...
@@ -54,7 +59,13 @@ namespace AMDiS {
switch
(
mode
)
{
switch
(
mode
)
{
case
0
:
case
0
:
elInRank
=
boxIndex
;
if
(
!
multilevel
)
{
elInRank
=
boxIndex
;
}
else
{
TEST_EXIT_DBG
(
boxIndex
>=
0
&&
boxIndex
<=
15
)(
"Wrong box index!
\n
"
);
int
rs
[
16
]
=
{
0
,
1
,
4
,
5
,
2
,
3
,
6
,
7
,
8
,
9
,
12
,
13
,
10
,
11
,
14
,
15
};
elInRank
=
rs
[
boxIndex
];
}
break
;
break
;
case
1
:
case
1
:
...
...
AMDiS/src/parallel/CheckerPartitioner.h
View file @
2c96156e
...
@@ -38,21 +38,26 @@ namespace AMDiS {
...
@@ -38,21 +38,26 @@ namespace AMDiS {
CheckerPartitioner
(
MPI
::
Intracomm
*
comm
)
CheckerPartitioner
(
MPI
::
Intracomm
*
comm
)
:
MeshPartitioner
(
comm
),
:
MeshPartitioner
(
comm
),
mpiRank
(
mpiComm
->
Get_rank
()),
mpiRank
(
mpiComm
->
Get_rank
()),
mpiSize
(
mpiComm
->
Get_size
())
mpiSize
(
mpiComm
->
Get_size
()),
mode
(
0
),
multilevel
(
false
)
{
{
string
modestr
=
""
;
string
modestr
=
""
;
Parameters
::
get
(
"parallel->partitioner->mode"
,
modestr
);
Parameters
::
get
(
"parallel->partitioner->mode"
,
modestr
);
if
(
modestr
==
""
)
if
(
modestr
==
"x-stripes"
)
mode
=
0
;
else
if
(
modestr
==
"x-stripes"
)
mode
=
1
;
mode
=
1
;
else
if
(
modestr
==
"y-stripes"
)
else
if
(
modestr
==
"y-stripes"
)
mode
=
2
;
mode
=
2
;
else
if
(
modestr
==
"z-stripes"
)
else
if
(
modestr
==
"z-stripes"
)
mode
=
3
;
mode
=
3
;
else
else
if
(
modestr
==
"multilevel"
)
ERROR_EXIT
(
"No partitioner mode
\"
%s
\"
!
\n
"
,
modestr
.
c_str
());
multilevel
=
true
;
else
{
if
(
modestr
!=
""
)
{
ERROR_EXIT
(
"No partitioner mode
\"
%s
\"
!
\n
"
,
modestr
.
c_str
());
}
}
}
}
~
CheckerPartitioner
()
{}
~
CheckerPartitioner
()
{}
...
@@ -77,6 +82,8 @@ namespace AMDiS {
...
@@ -77,6 +82,8 @@ namespace AMDiS {
/// 1: x-stripes: each node gets one x-stripe of boxes
/// 1: x-stripes: each node gets one x-stripe of boxes
/// 2: y-stripes: each node gets one y-stripe of boxes
/// 2: y-stripes: each node gets one y-stripe of boxes
int
mode
;
int
mode
;
bool
multilevel
;
};
};
}
}
...
...
AMDiS/src/parallel/DofComm.cc
View file @
2c96156e
...
@@ -91,22 +91,29 @@ namespace AMDiS {
...
@@ -91,22 +91,29 @@ namespace AMDiS {
int
DofComm
::
getNumberDofs
(
LevelDataType
&
data
,
int
DofComm
::
getNumberDofs
(
LevelDataType
&
data
,
int
level
,
int
level
,
const
FiniteElemSpace
*
feSpace
)
const
FiniteElemSpace
*
feSpace
,
bool
countDouble
)
{
{
FUNCNAME
(
"DofComm::getNumberDofs()"
);
FUNCNAME
(
"DofComm::getNumberDofs()"
);
TEST_EXIT_DBG
(
level
<
data
.
size
())(
"Should not happen!
\n
"
);
TEST_EXIT_DBG
(
level
<
data
.
size
())(
"Should not happen!
\n
"
);
DofContainerSet
dofs
;
DofContainerSet
dofSet
;
DofContainer
dofVec
;
for
(
DataIter
rankIt
=
data
[
level
].
begin
();
for
(
DataIter
rankIt
=
data
[
level
].
begin
();
rankIt
!=
data
[
level
].
end
();
++
rankIt
)
rankIt
!=
data
[
level
].
end
();
++
rankIt
)
for
(
FeMapIter
feIt
=
rankIt
->
second
.
begin
();
for
(
FeMapIter
feIt
=
rankIt
->
second
.
begin
();
feIt
!=
rankIt
->
second
.
end
();
++
feIt
)
feIt
!=
rankIt
->
second
.
end
();
++
feIt
)
if
(
feIt
->
first
==
feSpace
)
if
(
feIt
->
first
==
feSpace
)
dofs
.
insert
(
feIt
->
second
.
begin
(),
feIt
->
second
.
end
());
if
(
countDouble
)
dofVec
.
insert
(
dofVec
.
end
(),
feIt
->
second
.
begin
(),
feIt
->
second
.
end
());
return
static_cast
<
int
>
(
dofs
.
size
());
else
dofSet
.
insert
(
feIt
->
second
.
begin
(),
feIt
->
second
.
end
());
if
(
countDouble
)
return
static_cast
<
int
>
(
dofVec
.
size
());
return
static_cast
<
int
>
(
dofSet
.
size
());
}
}
...
...
AMDiS/src/parallel/DofComm.h
View file @
2c96156e
...
@@ -87,7 +87,8 @@ namespace AMDiS {
...
@@ -87,7 +87,8 @@ namespace AMDiS {
int
getNumberDofs
(
LevelDataType
&
data
,
int
getNumberDofs
(
LevelDataType
&
data
,
int
level
,
int
level
,
const
FiniteElemSpace
*
feSpace
);
const
FiniteElemSpace
*
feSpace
,
bool
countDouble
=
false
);
protected:
protected:
void
createContainer
(
RankToBoundMap
&
boundary
,
LevelDataType
&
data
);
void
createContainer
(
RankToBoundMap
&
boundary
,
LevelDataType
&
data
);
...
...
AMDiS/src/parallel/MeshDistributor.cc
View file @
2c96156e
...
@@ -176,7 +176,8 @@ namespace AMDiS {
...
@@ -176,7 +176,8 @@ namespace AMDiS {
createBoundaryDofs
();
createBoundaryDofs
();
#if (DEBUG != 0)
#if (DEBUG != 0)
ParallelDebug
::
writeDebugFile
(
*
this
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
ParallelDebug
::
writeDebugFile
(
feSpaces
[
feSpaces
.
size
()
-
1
],
dofMap
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
#endif
#endif
initialized
=
true
;
initialized
=
true
;
...
@@ -501,13 +502,18 @@ namespace AMDiS {
...
@@ -501,13 +502,18 @@ namespace AMDiS {
}
}
void
MeshDistributor
::
synchVector
(
SystemVector
&
vec
)
void
MeshDistributor
::
synchVector
(
SystemVector
&
vec
,
int
level
)
{
{
FUNCNAME
(
"MeshDistributor::synchVector()"
);
FUNCNAME
(
"MeshDistributor::synchVector()"
);
StdMpi
<
vector
<
double
>
>
stdMpi
(
mpiComm
);
TEST_EXIT_DBG
(
level
>=
0
&&
level
<=
1
)(
"Wrong level number!
\n
"
);
for
(
DofComm
::
Iterator
it
(
dofComm
.
getSendDofs
());
MPI
::
Intracomm
&
levelComm
=
levelData
.
getMpiComm
(
level
);
DofComm
&
dc
=
(
level
==
0
?
dofComm
:
dofCommSd
);
StdMpi
<
vector
<
double
>
>
stdMpi
(
levelComm
);
for
(
DofComm
::
Iterator
it
(
dc
.
getSendDofs
());
!
it
.
end
();
it
.
nextRank
())
{
!
it
.
end
();
it
.
nextRank
())
{
vector
<
double
>
dofs
;
vector
<
double
>
dofs
;
...
@@ -518,22 +524,33 @@ namespace AMDiS {
...
@@ -518,22 +524,33 @@ namespace AMDiS {
dofs
.
push_back
(
dofVec
[
it
.
getDofIndex
()]);
dofs
.
push_back
(
dofVec
[
it
.
getDofIndex
()]);
}
}
stdMpi
.
send
(
it
.
getRank
(),
dofs
);
int
rank
=
it
.
getRank
();
if
(
level
>
0
)
rank
=
levelData
.
mapRank
(
rank
,
0
,
level
);
stdMpi
.
send
(
rank
,
dofs
);
}
}
for
(
DofComm
::
Iterator
it
(
dofComm
.
getRecvDofs
());
!
it
.
end
();
it
.
nextRank
())
for
(
DofComm
::
Iterator
it
(
dc
.
getRecvDofs
());
!
it
.
end
();
it
.
nextRank
())
{
stdMpi
.
recv
(
it
.
getRank
());
int
rank
=
it
.
getRank
();
if
(
level
>
0
)
rank
=
levelData
.
mapRank
(
rank
,
0
,
level
);
stdMpi
.
recv
(
rank
);
}
stdMpi
.
startCommunication
();
stdMpi
.
startCommunication
();
for
(
DofComm
::
Iterator
it
(
dc
.
getRecvDofs
());
!
it
.
end
();
it
.
nextRank
())
{
int
rank
=
it
.
getRank
();
if
(
level
>
0
)
rank
=
levelData
.
mapRank
(
rank
,
0
,
level
);
for
(
DofComm
::
Iterator
it
(
dofComm
.
getRecvDofs
());
!
it
.
end
();
it
.
nextRank
())
{
int
counter
=
0
;
int
counter
=
0
;
for
(
int
i
=
0
;
i
<
vec
.
getSize
();
i
++
)
{
for
(
int
i
=
0
;
i
<
vec
.
getSize
();
i
++
)
{
DOFVector
<
double
>
&
dofVec
=
*
(
vec
.
getDOFVector
(
i
));
DOFVector
<
double
>
&
dofVec
=
*
(
vec
.
getDOFVector
(
i
));
for
(
it
.
beginDofIter
(
vec
.
getFeSpace
(
i
));
!
it
.
endDofIter
();
it
.
nextDof
())
for
(
it
.
beginDofIter
(
vec
.
getFeSpace
(
i
));
!
it
.
endDofIter
();
it
.
nextDof
())
dofVec
[
it
.
getDofIndex
()]
=
stdMpi
.
getRecvData
(
it
.
getRank
()
)[
counter
++
];
dofVec
[
it
.
getDofIndex
()]
=
0.0
;
//stdMpi.getRecvData(rank
)[counter++];
}
}
}
}
}
}
...
@@ -777,60 +794,60 @@ namespace AMDiS {
...
@@ -777,60 +794,60 @@ namespace AMDiS {
std
::
set
<
int
>
neighbours
;
std
::
set
<
int
>
neighbours
;
switch
(
mpiRank
)
{
switch
(
mpiRank
)
{
case
0
:
case
0
:
neighbours
.
insert
(
1
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
break
;
break
;
case
1
:
case
1
:
neighbours
.
insert
(
0
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
0
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
6
);
break
;
break
;
case
2
:
case
2
:
neighbours
.
insert
(
1
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
0
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
break
;
break
;
case
3
:
case
3
:
neighbours
.
insert
(
2
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
0
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
12
);
break
;
break
;
case
4
:
case
4
:
neighbours
.
insert
(
0
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
5
);
break
;
break
;
case
5
:
case
5
:
neighbours
.
insert
(
0
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
10
);
break
;
break
;
case
6
:
case
6
:
neighbours
.
insert
(
1
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
1
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
1
0
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
1
2
);
neighbours
.
insert
(
13
);
break
;
break
;
case
7
:
case
7
:
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
10
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
12
);
neighbours
.
insert
(
13
);
break
;
break
;
case
8
:
case
8
:
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
12
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
10
);
neighbours
.
insert
(
11
);
break
;
break
;
case
9
:
case
9
:
neighbours
.
insert
(
4
);
neighbours
.
insert
(
5
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
2
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
1
0
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
1
2
);
neighbours
.
insert
(
1
2
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
1
0
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
14
);
break
;
break
;
case
10
:
case
10
:
neighbours
.
insert
(
5
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
15
);
break
;
break
;
case
11
:
case
11
:
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
10
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
15
);
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
12
);
neighbours
.
insert
(
10
);
neighbours
.
insert
(
14
);
break
;
break
;
case
12
:
case
12
:
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
3
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
15
);
break
;
break
;
case
13
:
case
13
:
neighbours
.
insert
(
8
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
10
);
neighbours
.
insert
(
12
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
6
);
neighbours
.
insert
(
7
);
neighbours
.
insert
(
12
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
15
);
break
;
break
;
case
14
:
case
14
:
neighbours
.
insert
(
9
);
neighbours
.
insert
(
1
0
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
15
);
neighbours
.
insert
(
9
);
neighbours
.
insert
(
1
2
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
15
);
break
;
break
;
case
15
:
case
15
:
neighbours
.
insert
(
1
0
);
neighbours
.
insert
(
11
);
neighbours
.
insert
(
14
);
neighbours
.
insert
(
1
2
);
neighbours
.
insert
(
13
);
neighbours
.
insert
(
14
);
break
;
break
;
}
}
...
@@ -844,31 +861,31 @@ namespace AMDiS {
...
@@ -844,31 +861,31 @@ namespace AMDiS {
Parameters
::
get
(
"parallel->multi level test"
,
multiLevelTest
);
Parameters
::
get
(
"parallel->multi level test"
,
multiLevelTest
);
if
(
multiLevelTest
)
{
if
(
multiLevelTest
)
{
switch
(
mpiRank
)
{
switch
(
mpiRank
)
{
case
0
:
case
1
:
case
4
:
case
5
:
case
0
:
case
1
:
case
2
:
case
3
:
{
{
std
::
set
<
int
>
m
;
std
::
set
<
int
>
m
;
m
.
insert
(
0
);
m
.
insert
(
1
);
m
.
insert
(
4
);
m
.
insert
(
5
);
m
.
insert
(
0
);
m
.
insert
(
1
);
m
.
insert
(
2
);
m
.
insert
(
3
);
levelData
.
addLevel
(
m
,
0
);
levelData
.
addLevel
(
m
,
0
);
}
}
break
;
break
;
case
2
:
case
3
:
case
6
:
case
7
:
case
4
:
case
5
:
case
6
:
case
7
:
{
{
std
::
set
<
int
>
m
;
std
::
set
<
int
>
m
;
m
.
insert
(
2
);
m
.
insert
(
3
);
m
.
insert
(
6
);
m
.
insert
(
7
);
m
.
insert
(
4
);
m
.
insert
(
5
);
m
.
insert
(
6
);
m
.
insert
(
7
);
levelData
.
addLevel
(
m
,
1
);
levelData
.
addLevel
(
m
,
1
);
}
}
break
;
break
;
case
8
:
case
9
:
case
1
2
:
case
13
:
case
8
:
case
9
:
case
1
0
:
case
11
:
{
{
std
::
set
<
int
>
m
;
std
::
set
<
int
>
m
;
m
.
insert
(
8
);
m
.
insert
(
9
);
m
.
insert
(
1
2
);
m
.
insert
(
13
);
m
.
insert
(
8
);
m
.
insert
(
9
);
m
.
insert
(
1
0
);
m
.
insert
(
11
);
levelData
.
addLevel
(
m
,
2
);
levelData
.
addLevel
(
m
,
2
);
}
}
break
;
break
;
case
1
0
:
case
11
:
case
14
:
case
15
:
case
1
2
:
case
13
:
case
14
:
case
15
:
{
{
std
::
set
<
int
>
m
;
std
::
set
<
int
>
m
;
m
.
insert
(
1
0
);
m
.
insert
(
11
);
m
.
insert
(
14
);
m
.
insert
(
15
);
m
.
insert
(
1
2
);
m
.
insert
(
13
);
m
.
insert
(
14
);
m
.
insert
(
15
);
levelData
.
addLevel
(
m
,
3
);
levelData
.
addLevel
(
m
,
3
);
}
}
break
;
break
;
...
@@ -1672,7 +1689,8 @@ namespace AMDiS {
...
@@ -1672,7 +1689,8 @@ namespace AMDiS {
debug
::
writeElementIndexMesh
(
mesh
,
debugOutputDir
+
"elementIndex-"
+
debug
::
writeElementIndexMesh
(
mesh
,
debugOutputDir
+
"elementIndex-"
+
lexical_cast
<
string
>
(
mpiRank
)
+
".vtu"
);
lexical_cast
<
string
>
(
mpiRank
)
+
".vtu"
);
ParallelDebug
::
writeDebugFile
(
*
this
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
ParallelDebug
::
writeDebugFile
(
feSpaces
[
feSpaces
.
size
()
-
1
],
dofMap
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
debug
::
testSortedDofs
(
mesh
,
elMap
);
debug
::
testSortedDofs
(
mesh
,
elMap
);
ParallelDebug
::
testCommonDofs
(
*
this
,
true
);
ParallelDebug
::
testCommonDofs
(
*
this
,
true
);
ParallelDebug
::
testGlobalIndexByCoords
(
*
this
);
ParallelDebug
::
testGlobalIndexByCoords
(
*
this
);
...
@@ -1680,7 +1698,8 @@ namespace AMDiS {
...
@@ -1680,7 +1698,8 @@ namespace AMDiS {
int
tmp
=
0
;
int
tmp
=
0
;
Parameters
::
get
(
name
+
"->write parallel debug file"
,
tmp
);
Parameters
::
get
(
name
+
"->write parallel debug file"
,
tmp
);
if
(
tmp
)
if
(
tmp
)
ParallelDebug
::
writeDebugFile
(
*
this
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
ParallelDebug
::
writeDebugFile
(
feSpaces
[
feSpaces
.
size
()
-
1
],
dofMap
,
debugOutputDir
+
"mpi-dbg"
,
"dat"
);
#endif
#endif
}
}
...
...
AMDiS/src/parallel/MeshDistributor.h
View file @
2c96156e
...
@@ -254,12 +254,10 @@ namespace AMDiS {
...
@@ -254,12 +254,10 @@ namespace AMDiS {
stdMpi
.
getRecvData
(
it
.
getRank
())[
it
.
getDofCounter
()];
stdMpi
.
getRecvData
(
it
.
getRank
())[
it
.
getDofCounter
()];
}
}
/** \brief
/// Works in the same way as the function above defined for DOFVectors. Due
* Works in the same way as the function above defined for DOFVectors. Due
/// to performance, this function does not call \ref synchVector for each
* to performance, this function does not call \ref synchVector for each
/// DOFVector, but instead sends all values of all DOFVectors all at once.
* DOFVector, but instead sends all values of all DOFVectors all at once.
void
synchVector
(
SystemVector
&
vec
,
int
level
=
0
);
*/
void
synchVector
(
SystemVector
&
vec
);
void
check3dValidMesh
();
void
check3dValidMesh
();
...
...
AMDiS/src/parallel/MeshLevelData.cc
View file @
2c96156e
...
@@ -70,11 +70,13 @@ namespace AMDiS {
...
@@ -70,11 +70,13 @@ namespace AMDiS {
void
MeshLevelData
::
serialize
(
ostream
&
out
)
void
MeshLevelData
::
serialize
(
ostream
&
out
)
{
{
ERROR_EXIT
(
"Not yet implemented!
\n
"
);
}
}
void
MeshLevelData
::
deserialize
(
istream
&
in
)
void
MeshLevelData
::
deserialize
(
istream
&
in
)
{
{
ERROR_EXIT
(
"Not yet implemented!
\n
"
);
}
}
...
...
AMDiS/src/parallel/MeshLevelData.h
View file @
2c96156e
...
@@ -92,16 +92,16 @@ namespace AMDiS {
...
@@ -92,16 +92,16 @@ namespace AMDiS {
TEST_EXIT_DBG
(
level
==
1
&&
rank
<=
15
)(
"Should not happen!
\n
"
);
TEST_EXIT_DBG
(
level
==
1
&&
rank
<=
15
)(
"Should not happen!
\n
"
);
TEST_EXIT_DBG
(
MPI
::
COMM_WORLD
.
Get_size
()
==
16
)(
"Should not happen!
\n
"
);
TEST_EXIT_DBG
(
MPI
::
COMM_WORLD
.
Get_size
()
==
16
)(
"Should not happen!
\n
"
);
if
(
rank
==
0
||
rank
==
1
||
rank
==
4
||
rank
==
5
)
if
(
rank
==
0
||
rank
==
1
||
rank
==
2
||
rank
==
3
)
return
0
;
return
0
;
if
(
rank
==
2
||
rank
==
3
||
rank
==
6
||
rank
==
7
)
if
(
rank
==
4
||
rank
==
5
||
rank
==
6
||
rank
==
7
)
return
1
;
return
1
;
if
(
rank
==
8
||
rank
==
9
||
rank
==
1
2
||
rank
==
13
)
if
(
rank
==
8
||
rank
==
9
||
rank
==
1
0
||
rank
==
11
)
return
2
;
return
2
;
if
(
rank
==
1
0
||
rank
==
11
||
rank
==
14
||
rank
==
15
)
if
(
rank
==
1
2
||
rank
==
13
||
rank
==
14
||
rank
==
15
)
return
3
;
return
3
;
ERROR_EXIT
(
"Should not happen!
\n
"
);
ERROR_EXIT
(
"Should not happen!
\n
"
);
...
...
AMDiS/src/parallel/ParallelDebug.cc
View file @
2c96156e
...
@@ -758,25 +758,27 @@ namespace AMDiS {
...
@@ -758,25 +758,27 @@ namespace AMDiS {
}
}
void
ParallelDebug
::
writeDebugFile
(
MeshDistributor
&
pdb
,
void
ParallelDebug
::
writeDebugFile
(
const
FiniteElemSpace
*
feSpace
,
string
prefix
,
string
postfix
)
ParallelDofMapping
&
dofMap
,
string
prefix
,
string
postfix
)
{
{
FUNCNAME
(
"ParallelDebug::writeCoordsFile()"
);
FUNCNAME
(
"ParallelDebug::writeCoordsFile()"
);
const
FiniteElemSpace
*
feSpace
=
pdb
.
feSpaces
[
pdb
.
feSpaces
.
size
()
-
1
]
;
Mesh
*
mesh
=
feSpace
->
getMesh
()
;
stringstream
filename
;
stringstream
filename
;
filename
<<
prefix
<<
"-"
<<
pdb
.
mpiRank
<<
"."
<<
postfix
;
filename
<<
prefix
<<
"-"
<<
MPI
::
COMM_WORLD
.
Get_rank
()
<<
"."
<<
postfix
;
DOFVector
<
WorldVector
<
double
>
>
coords
(
feSpace
,
"tmp"
);
DOFVector
<
WorldVector
<
double
>
>
coords
(
feSpace
,
"tmp"
);
pdb
.
mesh
->
getDofIndexCoords
(
feSpace
,
coords
);