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
Backofen, Rainer
amdis
Commits
f5e012b5
Commit
f5e012b5
authored
May 02, 2012
by
Thomas Witkowski
Browse files
Small changes and a new test for parallel interior boundaries.
parent
b1357ae4
Changes
38
Show whitespace changes
Inline
Side-by-side
AMDiS/src/AMDiS.h
View file @
f5e012b5
...
...
@@ -142,6 +142,7 @@
#if HAVE_PARALLEL_DOMAIN_AMDIS
#include
"parallel/InteriorBoundary.h"
#include
"parallel/MpiHelper.h"
#include
"parallel/ParallelDebug.h"
#include
"parallel/StdMpi.h"
#if HAVE_PARALLEL_MTL4
...
...
AMDiS/src/BoundaryObject.cc
View file @
f5e012b5
...
...
@@ -135,4 +135,11 @@ namespace AMDiS {
type
==
other
.
type
);
}
bool
AtomicBoundary
::
operator
!=
(
const
AtomicBoundary
&
other
)
const
{
return
(
rankObj
!=
other
.
rankObj
||
neighObj
!=
other
.
neighObj
||
type
!=
other
.
type
);
}
}
AMDiS/src/BoundaryObject.h
View file @
f5e012b5
...
...
@@ -110,6 +110,8 @@ namespace AMDiS {
bool
operator
==
(
const
AtomicBoundary
&
other
)
const
;
bool
operator
!=
(
const
AtomicBoundary
&
other
)
const
;
/// The rank's part of the boundary.
BoundaryObject
rankObj
;
...
...
AMDiS/src/Mesh.cc
View file @
f5e012b5
...
...
@@ -1498,4 +1498,16 @@ namespace AMDiS {
Element
::
deletedDOFs
.
clear
();
}
void
Mesh
::
getElementIndexMap
(
map
<
int
,
Element
*>
&
elIndexMap
)
{
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
this
,
-
1
,
Mesh
::
CALL_EVERY_EL_PREORDER
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
elIndexMap
[
el
->
getIndex
()]
=
el
;
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
}
}
AMDiS/src/Mesh.h
View file @
f5e012b5
...
...
@@ -629,6 +629,10 @@ namespace AMDiS {
}
#endif
/// Creates a map for all elements in mesh that maps from element indices
/// to the corresponding pointers.
void
getElementIndexMap
(
map
<
int
,
Element
*>
&
elIndexMap
);
public:
///
static
const
Flag
FILL_NOTHING
;
...
...
AMDiS/src/Serializer.h
View file @
f5e012b5
...
...
@@ -37,6 +37,8 @@
namespace
AMDiS
{
using
namespace
std
;
template
<
typename
ProblemType
>
class
Serializer
:
public
FileWriterInterface
{
...
...
@@ -64,7 +66,7 @@ namespace AMDiS {
}
Serializer
(
ProblemType
*
prob
,
std
::
string
filename
,
int
writeEveryIth
)
Serializer
(
ProblemType
*
prob
,
string
filename
,
int
writeEveryIth
)
:
name
(
filename
),
problem
(
prob
),
tsModulo
(
writeEveryIth
),
...
...
@@ -119,10 +121,10 @@ namespace AMDiS {
}
#if HAVE_PARALLEL_DOMAIN_AMDIS
filename
+=
".p"
+
boost
::
lexical_cast
<
std
::
string
>
(
MPI
::
COMM_WORLD
.
Get_rank
());
filename
+=
".p"
+
boost
::
lexical_cast
<
string
>
(
MPI
::
COMM_WORLD
.
Get_rank
());
#endif
std
::
ofstream
out
(
filename
.
c_str
());
ofstream
out
(
filename
.
c_str
());
TEST_EXIT
(
out
.
is_open
())(
"Cannot open serialization file!
\n
"
);
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
amdisRevisionNumber
),
sizeof
(
int
));
problem
->
serialize
(
out
);
...
...
@@ -134,7 +136,7 @@ namespace AMDiS {
protected:
/// Name of file to which the problem is serialized.
std
::
string
name
;
string
name
;
/// Pointer to the problem.
ProblemType
*
problem
;
...
...
@@ -159,40 +161,40 @@ namespace AMDiS {
namespace
SerUtil
{
template
<
typename
T
>
void
serialize
(
std
::
ostream
&
out
,
T
&
data
)
void
serialize
(
ostream
&
out
,
T
&
data
)
{
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
data
),
sizeof
(
T
));
}
template
<
typename
T
>
void
deserialize
(
std
::
istream
&
in
,
T
&
data
)
void
deserialize
(
istream
&
in
,
T
&
data
)
{
in
.
read
(
reinterpret_cast
<
char
*>
(
&
data
),
sizeof
(
T
));
}
void
serialize
(
std
::
ostream
&
out
,
DofEdge
&
data
);
void
serialize
(
ostream
&
out
,
DofEdge
&
data
);
void
deserialize
(
std
::
istream
&
in
,
DofEdge
&
data
);
void
deserialize
(
istream
&
in
,
DofEdge
&
data
);
void
serialize
(
std
::
ostream
&
out
,
DofFace
&
data
);
void
serialize
(
ostream
&
out
,
DofFace
&
data
);
void
deserialize
(
std
::
istream
&
in
,
DofFace
&
data
);
void
deserialize
(
istream
&
in
,
DofFace
&
data
);
template
<
typename
T
,
typename
U
>
void
serialize
(
std
::
ostream
&
out
,
std
::
pair
<
T
,
U
>&
data
)
void
serialize
(
ostream
&
out
,
pair
<
T
,
U
>&
data
)
{
serialize
(
out
,
data
.
first
);
serialize
(
out
,
data
.
second
);
}
template
<
typename
T
,
typename
U
>
void
deserialize
(
std
::
istream
&
in
,
std
::
pair
<
T
,
U
>&
data
)
void
deserialize
(
istream
&
in
,
pair
<
T
,
U
>&
data
)
{
deserialize
(
in
,
data
.
first
);
deserialize
(
in
,
data
.
second
);
...
...
@@ -201,11 +203,11 @@ namespace AMDiS {
template
<
typename
T
>
void
serialize
(
std
::
ostream
&
out
,
std
::
vector
<
T
>&
data
)
void
serialize
(
ostream
&
out
,
vector
<
T
>&
data
)
{
int
vecSize
=
data
.
size
();
serialize
(
out
,
vecSize
);
for
(
typename
std
::
vector
<
T
>::
iterator
it
=
data
.
begin
();
for
(
typename
vector
<
T
>::
iterator
it
=
data
.
begin
();
it
!=
data
.
end
();
++
it
)
{
T
v
=
*
it
;
serialize
(
out
,
v
);
...
...
@@ -213,7 +215,7 @@ namespace AMDiS {
}
template
<
typename
T
>
void
deserialize
(
std
::
istream
&
in
,
std
::
vector
<
T
>&
data
)
void
deserialize
(
istream
&
in
,
vector
<
T
>&
data
)
{
data
.
clear
();
...
...
@@ -231,7 +233,7 @@ namespace AMDiS {
template
<
typename
T
>
void
serialize
(
std
::
ostream
&
out
,
std
::
set
<
T
>&
data
)
void
serialize
(
ostream
&
out
,
std
::
set
<
T
>&
data
)
{
int
setSize
=
data
.
size
();
serialize
(
out
,
setSize
);
...
...
@@ -243,7 +245,7 @@ namespace AMDiS {
}
template
<
typename
T
>
void
deserialize
(
std
::
istream
&
in
,
std
::
set
<
T
>&
data
)
void
deserialize
(
istream
&
in
,
std
::
set
<
T
>&
data
)
{
data
.
clear
();
...
...
@@ -260,12 +262,12 @@ namespace AMDiS {
template
<
typename
T1
,
typename
T2
>
void
serialize
(
std
::
ostream
&
out
,
std
::
map
<
T1
,
T2
>&
data
)
void
serialize
(
ostream
&
out
,
map
<
T1
,
T2
>&
data
)
{
int
mapSize
=
data
.
size
();
serialize
(
out
,
mapSize
);
for
(
typename
std
::
map
<
T1
,
T2
>::
iterator
it
=
data
.
begin
();
for
(
typename
map
<
T1
,
T2
>::
iterator
it
=
data
.
begin
();
it
!=
data
.
end
();
++
it
)
{
T1
v1
=
it
->
first
;
T2
v2
=
it
->
second
;
...
...
@@ -275,7 +277,7 @@ namespace AMDiS {
}
template
<
typename
T1
,
typename
T2
>
void
deserialize
(
std
::
istream
&
in
,
std
::
map
<
T1
,
T2
>&
data
)
void
deserialize
(
istream
&
in
,
map
<
T1
,
T2
>&
data
)
{
data
.
clear
();
...
...
AMDiS/src/io/FileWriter.hh
View file @
f5e012b5
AMDiS/src/parallel/DofComm.cc
View file @
f5e012b5
...
...
@@ -18,6 +18,30 @@ namespace AMDiS {
using
namespace
std
;
void
DofComm
::
init
(
int
level
,
MeshLevelData
&
ld
,
vector
<
const
FiniteElemSpace
*>
&
fe
)
{
FUNCNAME
(
"DofComm::init()"
);
meshLevel
=
level
;
levelData
=
&
ld
;
feSpaces
=
fe
;
nLevel
=
levelData
->
getLevelNumber
()
-
meshLevel
;
TEST_EXIT_DBG
(
nLevel
>=
1
)(
"Should not happen!
\n
"
);
sendDofs
.
clear
();
recvDofs
.
clear
();
periodicDofs
.
clear
();
sendDofs
.
resize
(
nLevel
);
recvDofs
.
resize
(
nLevel
);
periodicDofs
.
resize
(
nLevel
);
}
void
DofComm
::
create
(
InteriorBoundary
&
boundary
)
{
createContainer
(
boundary
.
getOwn
(),
sendDofs
);
...
...
@@ -28,6 +52,8 @@ namespace AMDiS {
void
DofComm
::
createContainer
(
RankToBoundMap
&
boundary
,
LevelDataType
&
data
)
{
FUNCNAME
(
"DofComm::createContainer()"
);
// === Fill data. ===
for
(
unsigned
int
i
=
0
;
i
<
feSpaces
.
size
();
i
++
)
...
...
AMDiS/src/parallel/DofComm.h
View file @
f5e012b5
...
...
@@ -38,7 +38,10 @@ namespace AMDiS {
DofComm
()
:
recvDofs
(
1
),
sendDofs
(
1
),
periodicDofs
(
0
)
periodicDofs
(
0
),
meshLevel
(
-
1
),
nLevel
(
0
),
levelData
(
NULL
)
{}
typedef
map
<
const
FiniteElemSpace
*
,
DofContainer
>
FeMapType
;
...
...
@@ -48,23 +51,9 @@ namespace AMDiS {
// meshLevel: map[rank -> map[feSpace -> DofContainer]]
typedef
vector
<
DataType
>
LevelDataType
;
void
init
(
int
n
,
vector
<
const
FiniteElemSpace
*>
&
fe
)
{
FUNCNAME
(
"DofComm::init()"
);
TEST_EXIT_DBG
(
n
>=
1
)(
"Should not happen!
\n
"
);
nLevel
=
n
;
feSpaces
=
fe
;
sendDofs
.
clear
();
recvDofs
.
clear
();
periodicDofs
.
clear
();
sendDofs
.
resize
(
nLevel
);
recvDofs
.
resize
(
nLevel
);
periodicDofs
.
resize
(
nLevel
);
}
void
init
(
int
level
,
MeshLevelData
&
levelData
,
vector
<
const
FiniteElemSpace
*>
&
fe
);
void
create
(
InteriorBoundary
&
boundary
);
...
...
@@ -119,8 +108,12 @@ namespace AMDiS {
/// considered here.
LevelDataType
periodicDofs
;
int
meshLevel
;
int
nLevel
;
MeshLevelData
*
levelData
;
vector
<
const
FiniteElemSpace
*>
feSpaces
;
friend
class
Iterator
;
...
...
AMDiS/src/parallel/ElementObjectDatabase.cc
View file @
f5e012b5
...
...
@@ -579,36 +579,24 @@ namespace AMDiS {
TEST_EXIT_DBG
(
macroElementRankMap
)(
"Should not happen!
\n
"
);
int
owner
=
-
1
;
vector
<
ElementObjectData
>
*
objData
;
switch
(
iterGeoPos
)
{
case
VERTEX
:
{
vector
<
ElementObjectData
>&
vertexData
=
vertexElements
[
vertexIter
->
first
];
for
(
vector
<
ElementObjectData
>::
iterator
it
=
vertexData
.
begin
();
it
!=
vertexData
.
end
();
++
it
)
owner
=
std
::
max
(
owner
,
(
*
macroElementRankMap
)[
it
->
elIndex
]);
}
objData
=
&
(
vertexElements
[
vertexIter
->
first
]);
break
;
case
EDGE
:
{
vector
<
ElementObjectData
>&
edgeData
=
edgeElements
[
edgeIter
->
first
];
for
(
vector
<
ElementObjectData
>::
iterator
it
=
edgeData
.
begin
();
it
!=
edgeData
.
end
();
++
it
)
owner
=
std
::
max
(
owner
,
(
*
macroElementRankMap
)[
it
->
elIndex
]);
}
objData
=
&
(
edgeElements
[
edgeIter
->
first
]);
break
;
case
FACE
:
{
vector
<
ElementObjectData
>&
faceData
=
faceElements
[
faceIter
->
first
];
for
(
vector
<
ElementObjectData
>::
iterator
it
=
faceData
.
begin
();
it
!=
faceData
.
end
();
++
it
)
owner
=
std
::
max
(
owner
,
(
*
macroElementRankMap
)[
it
->
elIndex
]);
}
objData
=
&
(
faceElements
[
faceIter
->
first
]);
break
;
default:
ERROR_EXIT
(
"Should not happen!
\n
"
);
}
for
(
vector
<
ElementObjectData
>::
iterator
it
=
objData
->
begin
();
it
!=
objData
->
end
();
++
it
)
owner
=
std
::
max
(
owner
,
(
*
macroElementRankMap
)[
it
->
elIndex
]);
return
owner
;
}
...
...
@@ -641,10 +629,12 @@ namespace AMDiS {
}
break
;
case
FACE
:
{
vector
<
ElementObjectData
>&
faceData
=
faceElements
[
faceIter
->
first
];
for
(
vector
<
ElementObjectData
>::
iterator
it
=
faceData
.
begin
();
it
!=
faceData
.
end
();
++
it
)
ranksInLevel
[
0
].
insert
((
*
macroElementRankMap
)[
it
->
elIndex
]);
}
break
;
default:
ERROR_EXIT
(
"Should not happen!
\n
"
);
...
...
AMDiS/src/parallel/InteriorBoundary.cc
View file @
f5e012b5
...
...
@@ -19,6 +19,9 @@
namespace
AMDiS
{
using
namespace
std
;
void
InteriorBoundary
::
create
(
MPI
::
Intracomm
&
mpiComm
,
ElementObjectDatabase
&
elObjDb
)
{
...
...
@@ -345,13 +348,19 @@ namespace AMDiS {
}
void
InteriorBoundary
::
serialize
(
std
::
ostream
&
out
)
void
InteriorBoundary
::
serialize
(
ostream
&
out
)
{
FUNCNAME
(
"InteriorBoundary::serialize()"
);
serialize
(
out
,
own
);
serialize
(
out
,
other
);
serialize
(
out
,
periodic
);
}
ERROR_EXIT
(
"REWRITE TO MULTILEVEL STRUCTURE!
\n
"
);
#if 0
void
InteriorBoundary
::
serialize
(
ostream
&
out
,
RankToBoundMap
&
boundary
)
{
FUNCNAME
(
"InteriorBoundary::serialize()"
);
int
mSize
=
boundary
.
size
();
SerUtil
::
serialize
(
out
,
mSize
);
for
(
RankToBoundMap
::
iterator
it
=
boundary
.
begin
();
...
...
@@ -380,18 +389,26 @@ namespace AMDiS {
SerUtil
::
serialize
(
out
,
bound
.
type
);
}
}
#endif
}
void
InteriorBoundary
::
deserialize
(
std
::
istream
&
in
,
std
::
map
<
int
,
Element
*>
&
elIndexMap
)
void
InteriorBoundary
::
deserialize
(
istream
&
in
,
Mesh
*
mesh
)
{
FUNCNAME
(
"InteriorBoundary::deserialize()"
);
map
<
int
,
Element
*>
elIndexMap
;
mesh
->
getElementIndexMap
(
elIndexMap
);
deserialize
(
in
,
own
,
elIndexMap
);
deserialize
(
in
,
other
,
elIndexMap
);
deserialize
(
in
,
periodic
,
elIndexMap
);
}
ERROR_EXIT
(
"REWRITE TO MULTILEVEL STRUCTURE!
\n
"
);
#if 0
void
InteriorBoundary
::
deserialize
(
istream
&
in
,
RankToBoundMap
&
boundary
,
map
<
int
,
Element
*>
&
elIndexMap
)
{
FUNCNAME
(
"InteriorBoundary::deserialize()"
);
int
mSize
=
0
;
SerUtil
::
deserialize
(
in
,
mSize
);
for
(
int
i
=
0
;
i
<
mSize
;
i
++
)
{
...
...
@@ -438,7 +455,6 @@ namespace AMDiS {
bound
.
neighObj
.
el
=
NULL
;
}
}
#endif
}
...
...
@@ -466,7 +482,7 @@ namespace AMDiS {
}
void
InteriorBoundary
::
serializeExcludeList
(
std
::
ostream
&
out
,
void
InteriorBoundary
::
serializeExcludeList
(
ostream
&
out
,
ExcludeList
&
list
)
{
int
size
=
list
.
size
();
...
...
@@ -478,7 +494,7 @@ namespace AMDiS {
}
void
InteriorBoundary
::
deserializeExcludeList
(
std
::
istream
&
in
,
void
InteriorBoundary
::
deserializeExcludeList
(
istream
&
in
,
ExcludeList
&
list
)
{
int
size
=
0
;
...
...
@@ -492,7 +508,7 @@ namespace AMDiS {
SerUtil
::
deserialize
(
in
,
a
);
SerUtil
::
deserialize
(
in
,
b
);
list
.
push_back
(
std
::
make_pair
(
a
,
b
));
list
.
push_back
(
make_pair
(
a
,
b
));
}
}
...
...
AMDiS/src/parallel/InteriorBoundary.h
View file @
f5e012b5
...
...
@@ -44,12 +44,6 @@ namespace AMDiS {
void
create
(
MPI
::
Intracomm
&
mpiComm
,
ElementObjectDatabase
&
elObjDb
);
/// Writes this object to a file.
void
serialize
(
ostream
&
out
);
/// Reads the state of an interior boundary from a file.
void
deserialize
(
istream
&
in
,
map
<
int
,
Element
*>
&
elIndexMap
);
RankToBoundMap
&
getOwn
()
{
return
own
;
...
...
@@ -70,6 +64,12 @@ namespace AMDiS {
return
static_cast
<
bool
>
(
periodic
.
size
());
}
/// Writes this object to a file.
void
serialize
(
ostream
&
out
);
/// Reads the state of an interior boundary from a file.
void
deserialize
(
istream
&
in
,
Mesh
*
mesh
);
private:
AtomicBoundary
&
getNewOwn
(
int
rank
);
...
...
@@ -77,6 +77,12 @@ namespace AMDiS {
AtomicBoundary
&
getNewPeriodic
(
int
rank
);
void
serialize
(
ostream
&
out
,
RankToBoundMap
&
boundary
);
void
deserialize
(
istream
&
in
,
RankToBoundMap
&
boundary
,
map
<
int
,
Element
*>
&
elIndexMap
);
void
serializeExcludeList
(
ostream
&
out
,
ExcludeList
&
list
);
void
deserializeExcludeList
(
istream
&
in
,
ExcludeList
&
list
);
...
...
AMDiS/src/parallel/MeshDistributor.cc
View file @
f5e012b5
...
...
@@ -228,11 +228,7 @@ namespace AMDiS {
createMeshLevelStructure
();
// Create interior boundary information.
createInteriorBoundaryInfo
();
#if (DEBUG != 0)
ParallelDebug
::
printBoundaryInfo
(
*
this
);
#endif
createInteriorBoundary
(
true
);
// === Remove neighbourhood relations due to periodic bounday conditions. ===
...
...
@@ -1438,7 +1434,7 @@ namespace AMDiS {
mesh
->
dofCompress
();
partitioner
->
createPartitionMap
(
partitionMap
);
upd
ateInteriorBoundary
Info
(
);
cre
ateInteriorBoundary
(
false
);
updateLocalGlobalNumbering
();
...
...
@@ -1509,19 +1505,12 @@ namespace AMDiS {
}
void
MeshDistributor
::
createInteriorBoundary
Info
(
)
void
MeshDistributor
::
createInteriorBoundary
(
bool
firstCall
)
{
FUNCNAME
(
"MeshDistributor::createInteriorBoundary
Info
()"
);
FUNCNAME
(
"MeshDistributor::createInteriorBoundary()"
);
if
(
firstCall
)
elObjDb
.
create
(
partitionMap
,
levelData
);
elObjDb
.
updateRankData
();
intBoundary
.
create
(
mpiComm
,
elObjDb
);
}
void
MeshDistributor
::
updateInteriorBoundaryInfo
()
{
FUNCNAME
(
"MeshDistributor::updateInteriorBoundaryInfo()"
);
elObjDb
.
updateRankData
();
intBoundary
.
create
(
mpiComm
,
elObjDb
);
...
...
@@ -1536,16 +1525,17 @@ namespace AMDiS {
{
FUNCNAME
(
"MeshDistributor::createBoundaryDofs()"
);
dofComm
.
init
(
levelData
.
getLevelNumber
(),
feSpaces
);
// === Create DOF communicator. ===
dofComm
.
init
(
0
,
levelData
,
feSpaces
);
dofComm
.
create
(
intBoundary
);
createBoundaryDofInfo
();
if
(
levelData
.
getLevelNumber
()
>
1
)
{
dofCommSd
.
init
(
1
,
levelData
,
feSpaces
);
dofCommSd
.
create
(
intBoundary
);
}
void
MeshDistributor
::
createBoundaryDofInfo
()
{
FUNCNAME
(
"MeshDistributor::createBoundaryDofInfo()"
);
// === If requested, create more information on communication DOFs. ===
if
(
!
createBoundaryDofFlag
.
isSet
(
BOUNDARY_SUBOBJ_SORTED
))
return
;
...
...
@@ -1960,24 +1950,17 @@ namespace AMDiS {
SerUtil
::
deserialize
(
in
,
elemWeights
);
SerUtil
::
deserialize
(
in
,
partitionMap
);
// Create two maps: one from from element indices to the corresponding element
// pointers, and one map from Dof indices to the corresponding dof pointers.
map
<
int
,
Element
*>
elIndexMap
;
// Create a map from DOF indices to the corresponding DOF pointers.
map
<
const
FiniteElemSpace
*
,
map
<
int
,
const
DegreeOfFreedom
*>
>
dofIndexMap
;
for
(
unsigned
int
i
=
0
;
i
<
feSpaces
.
size
();
i
++
)
{
ElementDofIterator
elDofIter
(
feSpaces
[
i
]);
TraverseStack
stack
;
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_
EVERY_EL_PREORDER
);
ElInfo
*
elInfo
=
stack
.
traverseFirst
(
mesh
,
-
1
,
Mesh
::
CALL_
LEAF_EL
);
while
(
elInfo
)
{
Element
*
el
=
elInfo
->
getElement
();
elIndexMap
[
el
->
getIndex
()]
=
el
;
if
(
el
->
isLeaf
())
{
elDofIter
.
reset
(
el
);
elDofIter
.
reset
(
elInfo
->
getElement
());
do
{
dofIndexMap
[
feSpaces
[
i
]][
elDofIter
.
getDof
()]
=
elDofIter
.
getDofPtr
();
}
while
(
elDofIter
.
next
());
}
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
...
...
@@ -1985,7 +1968,7 @@ namespace AMDiS {
elObjDb
.
deserialize
(
in
);
intBoundary
.
deserialize
(
in
,
elIndexMap
);
intBoundary
.
deserialize
(
in
,
mesh
);
dofComm
.
deserialize
(
in
,
dofIndexMap
);
...
...
AMDiS/src/parallel/MeshDistributor.h
View file @
f5e012b5
...
...
@@ -162,6 +162,11 @@ namespace AMDiS {
return
dofComm
;
}
InteriorBoundary
&
getIntBoundary
()
{
return
intBoundary
;
}