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
45b07a0a
Commit
45b07a0a
authored
Aug 26, 2008
by
Thomas Witkowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* Faster VTK file writing
* Faster serialization of all objects
parent
167413c4
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
249 additions
and
230 deletions
+249
-230
AMDiS/src/AdaptInfo.cc
AMDiS/src/AdaptInfo.cc
+6
-6
AMDiS/src/AdaptInfo.h
AMDiS/src/AdaptInfo.h
+6
-6
AMDiS/src/AdaptInstationary.cc
AMDiS/src/AdaptInstationary.cc
+9
-9
AMDiS/src/DOFAdmin.cc
AMDiS/src/DOFAdmin.cc
+4
-2
AMDiS/src/DataCollector.cc
AMDiS/src/DataCollector.cc
+46
-39
AMDiS/src/DataCollector.h
AMDiS/src/DataCollector.h
+20
-15
AMDiS/src/Element.cc
AMDiS/src/Element.cc
+24
-26
AMDiS/src/ElementData.cc
AMDiS/src/ElementData.cc
+6
-6
AMDiS/src/ElementData.h
AMDiS/src/ElementData.h
+5
-5
AMDiS/src/MacroElement.cc
AMDiS/src/MacroElement.cc
+9
-8
AMDiS/src/Mesh.cc
AMDiS/src/Mesh.cc
+33
-27
AMDiS/src/ProblemScal.cc
AMDiS/src/ProblemScal.cc
+10
-10
AMDiS/src/ProblemScal.h
AMDiS/src/ProblemScal.h
+7
-7
AMDiS/src/ProblemVec.h
AMDiS/src/ProblemVec.h
+22
-22
AMDiS/src/VtkWriter.cc
AMDiS/src/VtkWriter.cc
+35
-35
AMDiS/src/VtkWriter.h
AMDiS/src/VtkWriter.h
+7
-7
No files found.
AMDiS/src/AdaptInfo.cc
View file @
45b07a0a
...
...
@@ -11,13 +11,13 @@ namespace AMDiS {
char
number
[
5
];
for
(
int
i
=
oldSize
;
i
<
newSize
;
i
++
)
{
sprintf
(
number
,
"[%d]"
,
i
);
scalContents
[
i
]
=
new
ScalContent
(
name
+
::
std
::
string
(
number
));
scalContents
[
i
]
=
new
ScalContent
(
name
+
std
::
string
(
number
));
}
}
}
void
AdaptInfo
::
serialize
(
::
std
::
ostream
&
out
)
{
out
<<
name
<<
::
std
::
endl
;
void
AdaptInfo
::
serialize
(
std
::
ostream
&
out
)
{
out
<<
name
<<
"
\n
"
;
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
maxSpaceIteration
),
sizeof
(
int
));
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
spaceIteration
),
sizeof
(
int
));
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
timestepIteration
),
sizeof
(
int
));
...
...
@@ -63,9 +63,9 @@ namespace AMDiS {
}
}
void
AdaptInfo
::
deserialize
(
::
std
::
istream
&
in
)
{
void
AdaptInfo
::
deserialize
(
std
::
istream
&
in
)
{
in
>>
name
;
in
.
get
();
// because of
::
std::endl in serialization
in
.
get
();
// because of std::endl in serialization
in
.
read
(
reinterpret_cast
<
char
*>
(
&
maxSpaceIteration
),
sizeof
(
int
));
in
.
read
(
reinterpret_cast
<
char
*>
(
&
spaceIteration
),
sizeof
(
int
));
...
...
@@ -91,7 +91,7 @@ namespace AMDiS {
// if (!scalContents[i]) {
char
number
[
5
];
sprintf
(
number
,
"[%d]"
,
i
);
scalContents
[
i
]
=
new
ScalContent
(
name
+
::
std
::
string
(
number
));
scalContents
[
i
]
=
new
ScalContent
(
name
+
std
::
string
(
number
));
// }
in
.
read
(
reinterpret_cast
<
char
*>
(
&
(
scalContents
[
i
]
->
est_sum
)),
sizeof
(
double
));
...
...
AMDiS/src/AdaptInfo.h
View file @
45b07a0a
...
...
@@ -52,7 +52,7 @@ namespace AMDiS {
/** \brief
* Constructor.
*/
ScalContent
(
::
std
::
string
prefix
)
ScalContent
(
std
::
string
prefix
)
:
est_sum
(
0.0
),
est_t_sum
(
0.0
),
est_max
(
0.0
),
...
...
@@ -150,7 +150,7 @@ namespace AMDiS {
/** \brief
* Constructor.
*/
AdaptInfo
(
::
std
::
string
name_
,
int
size
=
1
)
AdaptInfo
(
std
::
string
name_
,
int
size
=
1
)
:
name
(
name_
),
spaceIteration
(
-
1
),
maxSpaceIteration
(
-
1
),
...
...
@@ -189,7 +189,7 @@ namespace AMDiS {
char
number
[
5
];
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
sprintf
(
number
,
"[%d]"
,
i
);
scalContents
[
i
]
=
new
ScalContent
(
name
+
::
std
::
string
(
number
));
scalContents
[
i
]
=
new
ScalContent
(
name
+
std
::
string
(
number
));
}
}
};
...
...
@@ -713,15 +713,15 @@ namespace AMDiS {
}
// ===== Serialiazable implementation =====
void
serialize
(
::
std
::
ostream
&
out
);
void
serialize
(
std
::
ostream
&
out
);
void
deserialize
(
::
std
::
istream
&
in
);
void
deserialize
(
std
::
istream
&
in
);
protected:
/** \brief
* Name.
*/
::
std
::
string
name
;
std
::
string
name
;
/** \brief
* Current space iteration
...
...
AMDiS/src/AdaptInstationary.cc
View file @
45b07a0a
...
...
@@ -30,7 +30,7 @@ namespace AMDiS {
}
// Check if the problem should be deserialized because of the -rs parameter.
::
std
::
string
serializationFilename
=
""
;
std
::
string
serializationFilename
=
""
;
GET_PARAMETER
(
0
,
"argv->rs"
,
&
serializationFilename
);
if
(
serializationFilename
.
compare
(
""
))
{
...
...
@@ -38,7 +38,7 @@ namespace AMDiS {
// serialization file mentioned in the used init file.
MSG
(
"Deserialization from file: %s
\n
"
,
queueSerializationFilename_
.
c_str
());
::
std
::
ifstream
in
(
queueSerializationFilename_
.
c_str
());
std
::
ifstream
in
(
queueSerializationFilename_
.
c_str
());
deserialize
(
in
);
in
.
close
();
...
...
@@ -54,14 +54,14 @@ namespace AMDiS {
&
readSerializationWithAdaptInfo
);
if
(
readSerialization
&&
readSerializationWithAdaptInfo
)
{
::
std
::
string
serializationFilename
=
""
;
std
::
string
serializationFilename
=
""
;
GET_PARAMETER
(
0
,
(
*
problemStat
).
getName
()
+
"->input->serialization filename"
,
&
serializationFilename
);
TEST_EXIT
(
serializationFilename
!=
""
)(
"no serialization file
\n
"
);
MSG
(
"Deserialization with AdaptInfo from file: %s
\n
"
,
serializationFilename
.
c_str
());
::
std
::
ifstream
in
(
serializationFilename
.
c_str
());
std
::
ifstream
in
(
serializationFilename
.
c_str
());
deserialize
(
in
);
in
.
close
();
}
...
...
@@ -243,7 +243,7 @@ namespace AMDiS {
return
errorCode
;
}
void
AdaptInstationary
::
initialize
(
const
::
std
::
string
&
aName
)
void
AdaptInstationary
::
initialize
(
const
std
::
string
&
aName
)
{
FUNCNAME
(
"AdaptInstationary::initialize()"
);
...
...
@@ -264,7 +264,7 @@ namespace AMDiS {
return
;
}
void
AdaptInstationary
::
serialize
(
::
std
::
ostream
&
out
)
void
AdaptInstationary
::
serialize
(
std
::
ostream
&
out
)
{
FUNCNAME
(
"AdaptInstationary::serialize()"
);
...
...
@@ -275,7 +275,7 @@ namespace AMDiS {
}
}
void
AdaptInstationary
::
deserialize
(
::
std
::
istream
&
in
)
void
AdaptInstationary
::
deserialize
(
std
::
istream
&
in
)
{
FUNCNAME
(
"AdaptInstationary::deserialize()"
);
...
...
@@ -305,7 +305,7 @@ namespace AMDiS {
}
// Calculate the avarage of the last iterations.
::
std
::
queue
<
int
>
tmpQueue
=
lastIterationsDuration_
;
std
::
queue
<
int
>
tmpQueue
=
lastIterationsDuration_
;
int
avrgLastIterations
=
0
;
while
(
!
tmpQueue
.
empty
())
{
avrgLastIterations
+=
tmpQueue
.
front
();
...
...
@@ -315,7 +315,7 @@ namespace AMDiS {
// Check if there is enough time for a further iteration.
if
(
initialTimestamp_
+
queueRuntime_
-
currentTimestamp
<
avrgLastIterations
*
2
)
{
::
std
::
ofstream
out
(
queueSerializationFilename_
.
c_str
());
std
::
ofstream
out
(
queueSerializationFilename_
.
c_str
());
serialize
(
out
);
out
.
close
();
...
...
AMDiS/src/DOFAdmin.cc
View file @
45b07a0a
...
...
@@ -26,7 +26,9 @@ namespace AMDiS {
:
mesh
(
m
),
nrDOF
(
mesh
->
getDim
(),
NO_INIT
),
nr0DOF
(
mesh
->
getDim
(),
NO_INIT
)
{
init
();
}
{
init
();
}
DOFAdmin
::
DOFAdmin
(
Mesh
*
m
,
std
::
string
aName
)
:
name
(
aName
),
...
...
@@ -317,7 +319,7 @@ namespace AMDiS {
void
DOFAdmin
::
serialize
(
std
::
ostream
&
out
)
{
// write name
out
<<
name
<<
std
::
endl
;
out
<<
name
<<
"
\n
"
;
// write dofFree
int
s
=
static_cast
<
int
>
(
dofFree
.
size
());
...
...
AMDiS/src/DataCollector.cc
View file @
45b07a0a
...
...
@@ -25,10 +25,10 @@ namespace AMDiS {
localAdmin_
=
const_cast
<
DOFAdmin
*>
(
feSpace
->
getAdmin
());
// === create vertex info vector ===
vertexInfos_
=
NEW
DOFVector
<
::
std
::
list
<
VertexInfo
>
>
(
feSpace
,
"vertex infos"
);
vertexInfos_
=
NEW
DOFVector
<
std
::
list
<
VertexInfo
>
>
(
feSpace
,
"vertex infos"
);
interpPointInd_
=
NEW
DOFVector
<
int
>
(
feSpace
,
"interpolation point indices"
);
interpPointCoords_
=
NEW
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>
(
feSpace
,
"interpolation point coordinates"
);
dofCoords_
=
NEW
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>
(
feSpace
,
"dof coords"
);
interpPointCoords_
=
NEW
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>
(
feSpace
,
"interpolation point coordinates"
);
dofCoords_
=
NEW
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>
(
feSpace
,
"dof coords"
);
dim_
=
mesh_
->
getDim
();
...
...
@@ -46,7 +46,9 @@ namespace AMDiS {
elementDataCollected_
=
false
;
valueDataCollected_
=
false
;
periodicDataCollected_
=
false
;
}
vertexCoords
=
NEW
WorldVector
<
double
>
;
}
DataCollector
::~
DataCollector
()
{
...
...
@@ -54,6 +56,7 @@ namespace AMDiS {
DELETE
interpPointInd_
;
DELETE
interpPointCoords_
;
DELETE
dofCoords_
;
DELETE
vertexCoords
;
}
void
DataCollector
::
fillAllData
()
...
...
@@ -120,7 +123,7 @@ namespace AMDiS {
basisFcts_
=
const_cast
<
BasisFunction
*>
(
feSpace_
->
getBasisFcts
());
nBasisFcts_
=
basisFcts_
->
getNumber
();
localDOFs_
=
GET_MEMORY
(
DegreeOfFreedom
,
b
asisFcts_
->
getNumber
()
);
localDOFs_
=
GET_MEMORY
(
DegreeOfFreedom
,
nB
asisFcts_
);
TraverseStack
stack
;
...
...
@@ -134,25 +137,29 @@ namespace AMDiS {
addValueData
(
elInfo
);
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
// Remove all interpolation marks and, instead, set to each
// interpolation point its continous index starting from 0.
int
i
=
0
;
for
(
intPointIt
.
reset
();
!
intPointIt
.
end
();
++
intPointIt
)
{
if
(
*
intPointIt
==
-
3
)
{
*
intPointIt
=
i
++
;
}
}
// Traverse elements to create interpolation values.
elInfo
=
stack
.
traverseFirst
(
mesh_
,
level_
,
traverseFlag_
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
if
(
!
writeElem_
||
writeElem_
(
elInfo
))
addInterpData
(
elInfo
);
elInfo
=
stack
.
traverseNext
(
elInfo
);
// If there are interpolation points, add them to the corresponding
// data array.
if
(
nInterpPoints_
>
0
)
{
// Remove all interpolation marks and, instead, set to each
// interpolation point its continous index starting from 0.
int
i
=
0
;
for
(
intPointIt
.
reset
();
!
intPointIt
.
end
();
++
intPointIt
)
{
if
(
*
intPointIt
==
-
3
)
{
*
intPointIt
=
i
++
;
}
}
// Traverse elements to create interpolation values.
elInfo
=
stack
.
traverseFirst
(
mesh_
,
level_
,
traverseFlag_
|
Mesh
::
FILL_COORDS
);
while
(
elInfo
)
{
if
(
!
writeElem_
||
writeElem_
(
elInfo
))
addInterpData
(
elInfo
);
elInfo
=
stack
.
traverseNext
(
elInfo
);
}
}
FREE_MEMORY
(
localDOFs_
,
DegreeOfFreedom
,
feSpace_
->
getBasisFcts
()
->
getNumber
()
);
FREE_MEMORY
(
localDOFs_
,
DegreeOfFreedom
,
nBasisFcts_
);
valueDataCollected_
=
true
;
return
(
0
);
...
...
@@ -245,7 +252,7 @@ namespace AMDiS {
vertexDOF
=
dof
[
i
][
nPreDofs_
];
// search for coords at this dof
::
std
::
list
<
VertexInfo
>::
iterator
it
=
std
::
list
<
VertexInfo
>::
iterator
it
=
find
((
*
vertexInfos_
)[
vertexDOF
].
begin
(),
(
*
vertexInfos_
)[
vertexDOF
].
end
(),
vertexCoords
);
...
...
@@ -289,7 +296,7 @@ namespace AMDiS {
FUNCNAME
(
"DataCollector::addValueData()"
);
basisFcts_
->
getLocalIndices
(
elInfo
->
getElement
(),
localAdmin_
,
localDOFs_
);
WorldVector
<
double
>
vertexCoords
;
//
WorldVector<double> vertexCoords;
// First, traverse all DOFs at the vertices of the element, determine
// their coordinates and add them to the corresponding entry in dofCoords_.
...
...
@@ -299,18 +306,18 @@ namespace AMDiS {
(
*
interpPointInd_
)[
dofi
]
=
-
2
;
// mark as vertex
// get coords of this vertex
vertexCoords
=
elInfo
->
getCoord
(
i
);
*
vertexCoords
=
elInfo
->
getCoord
(
i
);
// search for coords at this dof
::
std
::
list
<
WorldVector
<
double
>
>::
iterator
it
=
std
::
list
<
WorldVector
<
double
>
>::
iterator
it
=
find
((
*
dofCoords_
)[
dofi
].
begin
(),
(
*
dofCoords_
)[
dofi
].
end
(),
vertexCoords
);
*
vertexCoords
);
// coords not yet in list?
if
(
it
==
(
*
dofCoords_
)[
dofi
].
end
())
{
// add new coords to list
(
*
dofCoords_
)[
dofi
].
push_back
(
vertexCoords
);
(
*
dofCoords_
)[
dofi
].
push_back
(
*
vertexCoords
);
}
}
...
...
@@ -322,7 +329,7 @@ namespace AMDiS {
for
(
int
i
=
mesh_
->
getGeo
(
VERTEX
);
i
<
nBasisFcts_
;
i
++
)
{
DegreeOfFreedom
dofi
=
localDOFs_
[
i
];
elInfo
->
coordToWorld
(
*
basisFcts_
->
getCoords
(
i
),
&
vertexCoords
);
elInfo
->
coordToWorld
(
*
basisFcts_
->
getCoords
(
i
),
vertexCoords
);
if
((
*
interpPointInd_
)[
dofi
]
==
-
1
)
{
// mark as interpolation point
...
...
@@ -330,13 +337,13 @@ namespace AMDiS {
// search for interpolation point coordinates, and insert them to the
// dof-entry, if not contained in the list
::
std
::
list
<
WorldVector
<
double
>
>::
iterator
it
=
std
::
list
<
WorldVector
<
double
>
>::
iterator
it
=
find
((
*
interpPointCoords_
)[
dofi
].
begin
(),
(
*
interpPointCoords_
)[
dofi
].
end
(),
vertexCoords
);
*
vertexCoords
);
if
(
it
==
(
*
interpPointCoords_
)[
dofi
].
end
())
{
(
*
interpPointCoords_
)[
dofi
].
push_back
(
vertexCoords
);
(
*
interpPointCoords_
)[
dofi
].
push_back
(
*
vertexCoords
);
nInterpPoints_
++
;
}
}
...
...
@@ -355,7 +362,7 @@ namespace AMDiS {
for
(
int
i
=
mesh_
->
getGeo
(
VERTEX
);
i
<
nBasisFcts_
;
i
++
)
{
elemInterpPoints
.
push_back
((
*
interpPointInd_
)[
localDOFs_
[
i
]]);
}
interpPoints_
.
push_back
(
elemInterpPoints
);
return
(
0
);
...
...
@@ -370,7 +377,7 @@ namespace AMDiS {
getElementData
(
PERIODIC
));
if
(
ldp
)
{
::
std
::
list
<
LeafDataPeriodic
::
PeriodicInfo
>::
iterator
it
;
std
::
list
<
LeafDataPeriodic
::
PeriodicInfo
>::
iterator
it
;
for
(
it
=
dynamic_cast
<
LeafDataPeriodic
*>
(
ldp
)
->
getInfoList
().
begin
();
it
!=
dynamic_cast
<
LeafDataPeriodic
*>
(
ldp
)
->
getInfoList
().
end
();
...
...
@@ -422,7 +429,7 @@ namespace AMDiS {
return
(
0
);
}
::
std
::
list
<
ElementInfo
>*
DataCollector
::
getElementInfos
()
std
::
list
<
ElementInfo
>*
DataCollector
::
getElementInfos
()
{
if
(
!
elementDataCollected_
)
{
startCollectingElementData
();
...
...
@@ -431,7 +438,7 @@ namespace AMDiS {
return
&
elements_
;
}
DOFVector
<
::
std
::
list
<
VertexInfo
>
>*
DataCollector
::
getVertexInfos
()
DOFVector
<
std
::
list
<
VertexInfo
>
>*
DataCollector
::
getVertexInfos
()
{
if
(
!
elementDataCollected_
)
{
startCollectingElementData
();
...
...
@@ -440,7 +447,7 @@ namespace AMDiS {
return
vertexInfos_
;
}
::
std
::
list
<
PeriodicInfo
>*
DataCollector
::
getPeriodicInfos
()
std
::
list
<
PeriodicInfo
>*
DataCollector
::
getPeriodicInfos
()
{
if
(
!
periodicDataCollected_
)
{
startCollectingPeriodicData
();
...
...
@@ -504,7 +511,7 @@ namespace AMDiS {
return
values_
;
}
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>*
DataCollector
::
getDofCoords
()
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>*
DataCollector
::
getDofCoords
()
{
if
(
!
valueDataCollected_
)
{
startCollectingValueData
();
...
...
@@ -522,7 +529,7 @@ namespace AMDiS {
return
interpPointInd_
;
}
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>*
DataCollector
::
getInterpPointCoords
()
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>*
DataCollector
::
getInterpPointCoords
()
{
if
(
!
valueDataCollected_
)
{
startCollectingValueData
();
...
...
@@ -531,7 +538,7 @@ namespace AMDiS {
return
interpPointCoords_
;
}
::
std
::
vector
<
::
std
::
vector
<
int
>
>*
DataCollector
::
getInterpPoints
()
std
::
vector
<
std
::
vector
<
int
>
>*
DataCollector
::
getInterpPoints
()
{
if
(
!
valueDataCollected_
)
{
startCollectingValueData
();
...
...
AMDiS/src/DataCollector.h
View file @
45b07a0a
...
...
@@ -69,12 +69,12 @@ namespace AMDiS {
/** \brief
* Returns list with element information.
*/
::
std
::
list
<
ElementInfo
>*
getElementInfos
();
std
::
list
<
ElementInfo
>*
getElementInfos
();
/** \brief
* Returns vector with vertex information.
*/
DOFVector
<
::
std
::
list
<
VertexInfo
>
>*
getVertexInfos
();
DOFVector
<
std
::
list
<
VertexInfo
>
>*
getVertexInfos
();
/** \brief
* Returns the finite element space of the problem.
...
...
@@ -89,7 +89,7 @@ namespace AMDiS {
/** \brief
* Returns vector with information about dof coordinates.
*/
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>*
getDofCoords
();
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>*
getDofCoords
();
/** \brief
* Returns vector with information about interpolation
...
...
@@ -100,17 +100,17 @@ namespace AMDiS {
/** \brief
*
*/
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>*
getInterpPointCoords
();
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>*
getInterpPointCoords
();
/** \brief
* Returns list of interpolation point information.
*/
::
std
::
vector
<
::
std
::
vector
<
int
>
>*
getInterpPoints
();
std
::
vector
<
std
::
vector
<
int
>
>*
getInterpPoints
();
/** \brief
* Returns list of information about periodics.
*/
::
std
::
list
<
PeriodicInfo
>*
getPeriodicInfos
();
std
::
list
<
PeriodicInfo
>*
getPeriodicInfos
();
/** \brief
* Returns the number of vertices.
...
...
@@ -241,7 +241,7 @@ namespace AMDiS {
/** \brief
* Maps internal element indices to global output indices.
*/
::
std
::
map
<
int
,
int
>
outputIndices_
;
std
::
map
<
int
,
int
>
outputIndices_
;
/** \brief
* Global interpolation point indexing
...
...
@@ -251,39 +251,39 @@ namespace AMDiS {
/** \brief
* Stores for each simplex the interpolation points.
*/
::
std
::
vector
<
::
std
::
vector
<
int
>
>
interpPoints_
;
std
::
vector
<
std
::
vector
<
int
>
>
interpPoints_
;
/** \brief
* Stores for each DOF a list of its coordinates. If there are now periodic
* boundaries than there is also only one coordinate per DOF.
*/
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>
*
interpPointCoords_
;
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>
*
interpPointCoords_
;
/** \brief
* list of coords for each dof
*/
DOFVector
<
::
std
::
list
<
WorldVector
<
double
>
>
>
*
dofCoords_
;
DOFVector
<
std
::
list
<
WorldVector
<
double
>
>
>
*
dofCoords_
;
/** \brief
* List that stores an ElementInfo for each element.
*/
::
std
::
list
<
ElementInfo
>
elements_
;
std
::
list
<
ElementInfo
>
elements_
;
/** \brief
* List stat stores information about all periodics.
*/
::
std
::
list
<
PeriodicInfo
>
periodicInfos_
;
std
::
list
<
PeriodicInfo
>
periodicInfos_
;
/** \brief
* Stores a list of vertex infos for each dof.
*/
DOFVector
<
::
std
::
list
<
VertexInfo
>
>
*
vertexInfos_
;
DOFVector
<
std
::
list
<
VertexInfo
>
>
*
vertexInfos_
;
/** \brief
* periodicConnections[i][j] stores whether the connection at side j of
* the element with output index i has already been written.
*/
::
std
::
vector
<
DimVec
<
bool
>
>
periodicConnections_
;
std
::
vector
<
DimVec
<
bool
>
>
periodicConnections_
;
/** \brief
* Stores if element data was collected before.
...
...
@@ -316,9 +316,14 @@ namespace AMDiS {
BasisFunction
*
basisFcts_
;
/** \brief
* Temporar
u
variable used in functions addValueData() and addInterpData().
* Temporar
y
variable used in functions addValueData() and addInterpData().
*/
int
nBasisFcts_
;
/** \brief
* Temporary variable used in function \ref addValueData.
*/
WorldVector
<
double
>
*
vertexCoords
;
};
}
...
...
AMDiS/src/Element.cc
View file @
45b07a0a
...
...
@@ -252,39 +252,37 @@ namespace AMDiS {
};
}
void
Element
::
serialize
(
::
std
::
ostream
&
out
)
void
Element
::
serialize
(
std
::
ostream
&
out
)
{
// write children
if
(
child
[
0
])
{
out
<<
child
[
0
]
->
getTypeName
()
<<
::
std
::
endl
;
out
<<
child
[
0
]
->
getTypeName
()
<<
"
\n
"
;
child
[
0
]
->
serialize
(
out
);
child
[
1
]
->
serialize
(
out
);
}
else
{
out
<<
"NULL
"
<<
::
std
::
endl
;
out
<<
"NULL
\n
"
;
}
// write dofs
int
dim
=
mesh
->
getDim
();
int
nodes
=
mesh
->
getNumberOfNodes
();
int
j
=
0
;
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
nodes
),
sizeof
(
int
));
int
i
,
j
=
0
,
ndof
,
pos
;
for
(
pos
=
0
;
pos
<=
dim
;
pos
++
)
{
for
(
int
pos
=
0
;
pos
<=
dim
;
pos
++
)
{
GeoIndex
position
=
INDEX_OF_DIM
(
pos
,
dim
);
int
ndof
=
0
;
ndof
=
0
;
for
(
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
{
const
DOFAdmin
*
localAdmin
=
&
mesh
->
getDOFAdmin
(
i
);
TEST_EXIT_DBG
(
localAdmin
)(
"no admin[%d]
\n
"
,
i
);
ndof
+=
localAdmin
->
getNumberOfDOFs
(
position
);
}
if
(
ndof
>
0
)
{
for
(
i
=
0
;
i
<
mesh
->
getGeo
(
position
);
i
++
)
{
if
(
dof
[
j
]
!=
NULL
)
{
if
(
Mesh
::
serializedDOFs
[
dof
[
j
][
0
]]
==
NULL
)
{
if
(
ndof
>
0
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
position
);
i
++
)
{
if
(
dof
[
j
]
!=
NULL
)
{
if
(
Mesh
::
serializedDOFs
[
dof
[
j
][
0
]]
==
NULL
)
{
Mesh
::
serializedDOFs
[
dof
[
j
][
0
]]
=
dof
[
j
];
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
ndof
),
sizeof
(
int
));
out
.
write
(
reinterpret_cast
<
const
char
*>
(
dof
[
j
]),
...
...
@@ -310,40 +308,40 @@ namespace AMDiS {
out
.
write
(
reinterpret_cast
<
const
char
*>
(
&
mark
),
sizeof
(
signed
char
));
// write newCoord
if
(
newCoord
)
{
out
<<
"WorldVector
"
<<
::
std
::
endl
;
if
(
newCoord
)
{
out
<<
"WorldVector
\n
"
;
newCoord
->
serialize
(
out
);
}
else
{
out
<<
"NULL
"
<<
::
std
::
endl
;
out
<<
"NULL
\n
"
;
}
// write element data
if
(
elementData
)
{
out
<<
elementData
->
getTypeName
()
<<
::
std
::
endl
;
if
(
elementData
)
{
out
<<
elementData
->
getTypeName
()
<<
"
\n
"
;
elementData
->
serialize
(
out
);
}
else
{
out
<<
"NULL
"
<<
::
std
::
endl
;
out
<<
"NULL
\n
"
;
}
}
void
Element
::
deserialize
(
::
std
::
istream
&
in
)
void
Element
::
deserialize
(
std
::
istream
&
in
)
{
::
std
::
string
typeName
;
std
::
string
typeName
;
// read children
in
>>
typeName
;
in
.
get
();
if
(
typeName
!=
"NULL"
)
{
if
(
typeName
==
"Line"
)
{
if
(
typeName
!=
"NULL"
)
{
if
(
typeName
==
"Line"
)
{
child
[
0
]
=
new
Line
(
NULL
);
child
[
1
]
=
new
Line
(
NULL
);
};
if
(
typeName
==
"Triangle"
)
{
if
(
typeName
==
"Triangle"
)
{
child
[
0
]
=
new
Triangle
(
NULL
);
child
[
1
]
=
new
Triangle
(
NULL
);
};
if
(
typeName
==
"Tetrahedron"
)
{
if
(
typeName
==
"Tetrahedron"
)
{