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
b3de56bb
Commit
b3de56bb
authored
Nov 26, 2010
by
Thomas Witkowski
Browse files
Code refactoring and work on parallelization.
parent
739be0ef
Changes
26
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/ArhWriter.cc
View file @
b3de56bb
...
...
@@ -53,7 +53,7 @@ namespace AMDiS {
file
.
write
(
reinterpret_cast
<
char
*>
(
&
nValueVectors
),
4
);
uint32_t
nAllValues
=
(
vecs
.
size
()
>
0
?
vecs
[
0
]
->
getFeSpace
()
->
getAdmin
()
->
getUsedD
OF
s
()
:
0
);
(
vecs
.
size
()
>
0
?
vecs
[
0
]
->
getFeSpace
()
->
getAdmin
()
->
getUsedD
of
s
()
:
0
);
file
.
write
(
reinterpret_cast
<
char
*>
(
&
nAllValues
),
4
);
MeshStructure
elementStructure
;
...
...
AMDiS/src/BasisFunction.cc
View file @
b3de56bb
...
...
@@ -143,7 +143,7 @@ namespace AMDiS {
}
int
BasisFunction
::
getNumberOfD
OF
s
(
int
i
)
const
int
BasisFunction
::
getNumberOfD
of
s
(
int
i
)
const
{
return
(
*
nDOF
)[
i
];
}
...
...
AMDiS/src/BasisFunction.h
View file @
b3de56bb
...
...
@@ -161,10 +161,10 @@ namespace AMDiS {
}
/// Returns \ref nDOF[i]
int
getNumberOfD
OF
s
(
int
i
)
const
;
int
getNumberOfD
of
s
(
int
i
)
const
;
/// Returns \ref nDOF
inline
DimVec
<
int
>*
getNumberOfD
OF
s
()
const
inline
DimVec
<
int
>*
getNumberOfD
of
s
()
const
{
return
nDOF
;
}
...
...
AMDiS/src/CoarseningManager1d.cc
View file @
b3de56bb
...
...
@@ -68,13 +68,13 @@ namespace AMDiS {
/*--- hand DOFs from children to parent, and add DOF at center ---*/
/*--------------------------------------------------------------------------*/
if
(
mesh
->
getNumberOfD
OF
s
(
VERTEX
)
&&
!
mesh
->
queryCoarseDOFs
())
{
if
(
mesh
->
getNumberOfD
of
s
(
VERTEX
)
&&
!
mesh
->
queryCoarseDOFs
())
{
int
node
=
mesh
->
getNode
(
VERTEX
);
parent
->
setDof
(
node
+
0
,
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
node
+
0
)));
parent
->
setDof
(
node
+
1
,
const_cast
<
int
*>
(
child
[
1
]
->
getDof
(
node
+
1
)));
}
if
(
mesh
->
getNumberOfD
OF
s
(
CENTER
)
&&
!
mesh
->
queryCoarseDOFs
())
{
if
(
mesh
->
getNumberOfD
of
s
(
CENTER
)
&&
!
mesh
->
queryCoarseDOFs
())
{
parent
->
setDof
(
mesh
->
getNode
(
CENTER
),
mesh
->
getDof
(
CENTER
));
}
...
...
@@ -89,7 +89,7 @@ namespace AMDiS {
int
nrAdmin
=
mesh
->
getNumberOfDOFAdmin
();
for
(
iadmin
=
0
;
iadmin
<
nrAdmin
;
iadmin
++
)
{
std
::
list
<
DOFIndexedBase
*>::
iterator
it
;
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
(
mesh
->
getD
OF
Admin
(
iadmin
)));
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
(
mesh
->
getD
of
Admin
(
iadmin
)));
std
::
list
<
DOFIndexedBase
*>::
iterator
end
=
admin
->
endDOFIndexed
();
for
(
it
=
admin
->
beginDOFIndexed
();
it
!=
end
;
++
it
)
(
*
it
)
->
coarseRestrict
(
coarsenList
,
1
);
...
...
@@ -100,12 +100,12 @@ namespace AMDiS {
/*--- remove all DOFs of children that are not used anymore ---*/
/*--------------------------------------------------------------------------*/
if
(
mesh
->
getNumberOfD
OF
s
(
VERTEX
))
/*--- midpoint of parent ---*/
if
(
mesh
->
getNumberOfD
of
s
(
VERTEX
))
/*--- midpoint of parent ---*/
{
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
1
]
->
getDof
(
mesh
->
getNode
(
VERTEX
))),
VERTEX
);
}
if
(
mesh
->
getNumberOfD
OF
s
(
CENTER
))
/*--- center of the children ---*/
if
(
mesh
->
getNumberOfD
of
s
(
CENTER
))
/*--- center of the children ---*/
{
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
mesh
->
getNode
(
CENTER
))),
CENTER
);
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
1
]
->
getDof
(
mesh
->
getNode
(
CENTER
))),
CENTER
);
...
...
AMDiS/src/CoarseningManager2d.cc
View file @
b3de56bb
...
...
@@ -30,11 +30,11 @@ namespace AMDiS {
el
->
getIndex
(),
child
[
0
]
->
getIndex
(),
child
[
1
]
->
getIndex
());
// remove dof from common edge of child[0] and child[1]
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
4
)),
EDGE
);
// remove dof from the barycenters of child[0] and child[1]
if
(
mesh
->
getNumberOfD
OF
s
(
CENTER
))
{
if
(
mesh
->
getNumberOfD
of
s
(
CENTER
))
{
int
node
=
mesh
->
getNode
(
CENTER
);
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
node
)),
CENTER
);
...
...
@@ -72,14 +72,14 @@ namespace AMDiS {
DegreeOfFreedom
*
dof
[
3
];
dof
[
0
]
=
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDof
(
2
));
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
dof
[
1
]
=
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDof
(
3
));
dof
[
2
]
=
const_cast
<
int
*>
(
el
->
getChild
(
1
)
->
getDof
(
4
));
}
else
{
dof
[
1
]
=
dof
[
2
]
=
0
;
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
int
node
=
mesh
->
getNode
(
EDGE
);
// get new dof on el at the midpoint of the coarsening edge
...
...
@@ -90,14 +90,14 @@ namespace AMDiS {
}
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
)
||
mesh
->
getNumberOfD
OF
s
(
CENTER
))
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
)
||
mesh
->
getNumberOfD
of
s
(
CENTER
))
coarsenList
->
addDOFParents
(
n_neigh
);
// restrict dof vectors to the parents on the patch
int
nrAdmin
=
mesh
->
getNumberOfDOFAdmin
();
for
(
int
iadmin
=
0
;
iadmin
<
nrAdmin
;
iadmin
++
)
{
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
mesh
->
getD
OF
Admin
(
iadmin
));
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
mesh
->
getD
of
Admin
(
iadmin
));
for
(
std
::
list
<
DOFIndexedBase
*>::
iterator
it
=
admin
->
beginDOFIndexed
();
it
!=
admin
->
endDOFIndexed
();
++
it
)
(
*
it
)
->
coarseRestrict
(
*
coarsenList
,
n_neigh
);
...
...
@@ -111,7 +111,7 @@ namespace AMDiS {
// now, remove those dofs in the coarcening edge
mesh
->
freeDof
(
dof
[
0
],
VERTEX
);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
mesh
->
freeDof
(
dof
[
1
],
EDGE
);
mesh
->
freeDof
(
dof
[
2
],
EDGE
);
}
...
...
AMDiS/src/CoarseningManager3d.cc
View file @
b3de56bb
...
...
@@ -133,11 +133,11 @@ namespace AMDiS {
/* boundary face or neigh has been coarsend: free the dof's in the face */
/****************************************************************************/
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
node
=
mesh
->
getNode
(
EDGE
)
+
Tetrahedron
::
nChildEdge
[
el_type
][
0
][
dir
];
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
node
)),
EDGE
);
}
if
(
mesh
->
getNumberOfD
OF
s
(
FACE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
FACE
))
{
node
=
mesh
->
getNode
(
FACE
)
+
Tetrahedron
::
nChildFace
[
el_type
][
0
][
dir
];
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
node
)),
FACE
);
node
=
mesh
->
getNode
(
FACE
)
+
Tetrahedron
::
nChildFace
[
el_type
][
1
][
dir
];
...
...
@@ -151,13 +151,13 @@ namespace AMDiS {
/* child[1] and at the two barycenter */
/****************************************************************************/
if
(
mesh
->
getNumberOfD
OF
s
(
FACE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
FACE
))
{
node
=
mesh
->
getNode
(
FACE
);
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
0
]
->
getDof
(
node
)),
FACE
);
}
if
(
mesh
->
getNumberOfD
OF
s
(
CENTER
))
{
if
(
mesh
->
getNumberOfD
of
s
(
CENTER
))
{
node
=
mesh
->
getNode
(
CENTER
);
for
(
i
=
0
;
i
<
2
;
i
++
)
mesh
->
freeDof
(
const_cast
<
int
*>
(
child
[
i
]
->
getDof
(
node
)),
CENTER
);
...
...
@@ -318,7 +318,7 @@ namespace AMDiS {
int
i
,
node
;
DegreeOfFreedom
*
dof
;
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
/****************************************************************************/
/* get dof for coarsening edge */
/****************************************************************************/
...
...
@@ -329,9 +329,9 @@ namespace AMDiS {
dof
=
NULL
;
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
)
||
mesh
->
getNumberOfD
OF
s
(
FACE
)
||
mesh
->
getNumberOfD
OF
s
(
CENTER
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
)
||
mesh
->
getNumberOfD
of
s
(
FACE
)
||
mesh
->
getNumberOfD
of
s
(
CENTER
))
{
for
(
i
=
0
;
i
<
n_neigh
;
i
++
)
coarsenList
->
addDOFParent
(
i
,
dof
);
}
...
...
@@ -344,7 +344,7 @@ namespace AMDiS {
int
nrAdmin
=
mesh
->
getNumberOfDOFAdmin
();
for
(
int
iadmin
=
0
;
iadmin
<
nrAdmin
;
iadmin
++
)
{
std
::
list
<
DOFIndexedBase
*>::
iterator
it
;
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
mesh
->
getD
OF
Admin
(
iadmin
));
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
mesh
->
getD
of
Admin
(
iadmin
));
std
::
list
<
DOFIndexedBase
*>::
iterator
end
=
admin
->
endDOFIndexed
();
for
(
it
=
admin
->
beginDOFIndexed
();
it
!=
end
;
++
it
)
(
*
it
)
->
coarseRestrict
(
*
coarsenList
,
n_neigh
);
...
...
@@ -359,7 +359,7 @@ namespace AMDiS {
mesh
->
freeDof
(
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDof
(
3
)),
VERTEX
);
mesh
->
incrementNumberOfVertices
(
-
1
);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
node
=
mesh
->
getNode
(
EDGE
)
+
2
;
mesh
->
freeDof
(
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDof
(
node
)),
EDGE
);
mesh
->
freeDof
(
const_cast
<
int
*>
(
el
->
getChild
(
1
)
->
getDof
(
node
)),
EDGE
);
...
...
AMDiS/src/DOFAdmin.h
View file @
b3de56bb
...
...
@@ -133,7 +133,7 @@ namespace AMDiS {
}
/// Returns \ref usedCount
inline
const
int
getUsedD
OF
s
()
const
inline
const
int
getUsedD
of
s
()
const
{
return
usedCount
;
}
...
...
@@ -151,13 +151,13 @@ namespace AMDiS {
}
/// Returns \ref nrDOF[i], i.e., the number of dofs for the position i.
inline
const
int
getNumberOfD
OF
s
(
int
i
)
const
inline
const
int
getNumberOfD
of
s
(
int
i
)
const
{
return
nrDOF
[
i
];
}
/// Returns \ref nrDOF
inline
const
DimVec
<
int
>&
getNumberOfD
OF
s
()
const
inline
const
DimVec
<
int
>&
getNumberOfD
of
s
()
const
{
return
nrDOF
;
}
...
...
AMDiS/src/DOFVector.cc
View file @
b3de56bb
...
...
@@ -91,7 +91,7 @@ namespace AMDiS {
int
nPositions
=
mesh
->
getGeo
(
geoIndex
);
int
numPreDOFs
=
admin
->
getNumberOfPreDOFs
(
i
);
for
(
int
j
=
0
;
j
<
nPositions
;
j
++
)
{
int
dofs
=
basFcts
->
getNumberOfD
OF
s
(
geoIndex
);
int
dofs
=
basFcts
->
getNumberOfD
of
s
(
geoIndex
);
numNodeDOFs
.
push_back
(
dofs
);
nDofs
+=
dofs
;
numNodePreDOFs
.
push_back
(
numPreDOFs
);
...
...
@@ -651,7 +651,7 @@ namespace AMDiS {
int
numPositionNodes
=
mesh
->
getGeo
(
geoIndex
);
int
numPreDOFs
=
admin
->
getNumberOfPreDOFs
(
i
);
for
(
int
j
=
0
;
j
<
numPositionNodes
;
j
++
)
{
int
dofs
=
basFcts
->
getNumberOfD
OF
s
(
geoIndex
);
int
dofs
=
basFcts
->
getNumberOfD
of
s
(
geoIndex
);
numNodeDOFs
.
push_back
(
dofs
);
nDofs
+=
dofs
;
numNodePreDOFs
.
push_back
(
numPreDOFs
);
...
...
AMDiS/src/DataCollector.cc
View file @
b3de56bb
...
...
@@ -208,6 +208,9 @@ namespace AMDiS {
DegreeOfFreedom
vertexDOF
;
WorldVector
<
double
>
vertexCoords
;
MSG
(
"ELEMENT: %d
\n
"
,
elInfo
->
getElement
()
->
getIndex
());
MSG
(
"DOFs: %d %d %d
\n
"
,
dof
[
0
][
0
],
dof
[
1
][
0
],
dof
[
2
][
0
]);
// create ElementInfo
ElementInfo
elementInfo
(
dim
);
...
...
AMDiS/src/Element.cc
View file @
b3de56bb
...
...
@@ -102,7 +102,7 @@ namespace AMDiS {
int
ndof
=
0
;
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
ndof
+=
mesh
->
getD
OF
Admin
(
i
).
getNumberOfD
OF
s
(
position
);
ndof
+=
mesh
->
getD
of
Admin
(
i
).
getNumberOfD
of
s
(
position
);
if
(
ndof
>
0
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
position
);
i
++
)
{
...
...
@@ -158,7 +158,7 @@ namespace AMDiS {
int
ndof
=
0
;
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
ndof
+=
mesh
->
getD
OF
Admin
(
i
).
getNumberOfD
OF
s
(
position
);
ndof
+=
mesh
->
getD
of
Admin
(
i
).
getNumberOfD
of
s
(
position
);
if
(
ndof
>
0
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
position
);
i
++
)
{
...
...
@@ -226,7 +226,7 @@ namespace AMDiS {
int
edges
=
mesh
->
getGeo
(
EDGE
);
int
faces
=
mesh
->
getGeo
(
FACE
);
if
((
nd
=
admin
->
getNumberOfD
OF
s
(
VERTEX
)))
{
if
((
nd
=
admin
->
getNumberOfD
of
s
(
VERTEX
)))
{
nd0
=
admin
->
getNumberOfPreDOFs
(
VERTEX
);
n0
=
admin
->
getMesh
()
->
getNode
(
VERTEX
);
for
(
int
i
=
0
;
i
<
vertices
;
i
++
)
{
...
...
@@ -235,7 +235,7 @@ namespace AMDiS {
}
if
(
mesh
->
getDim
()
>
1
)
{
if
((
nd
=
admin
->
getNumberOfD
OF
s
(
EDGE
)))
{
if
((
nd
=
admin
->
getNumberOfD
of
s
(
EDGE
)))
{
nd0
=
admin
->
getNumberOfPreDOFs
(
EDGE
);
n0
=
admin
->
getMesh
()
->
getNode
(
EDGE
);
for
(
int
i
=
0
;
i
<
edges
;
i
++
)
{
...
...
@@ -245,7 +245,7 @@ namespace AMDiS {
}
if
(
mesh
->
getDim
()
==
3
)
{
if
((
nd
=
admin
->
getNumberOfD
OF
s
(
FACE
)))
{
if
((
nd
=
admin
->
getNumberOfD
of
s
(
FACE
)))
{
nd0
=
admin
->
getNumberOfPreDOFs
(
FACE
);
n0
=
admin
->
getMesh
()
->
getNode
(
FACE
);
for
(
int
i
=
0
;
i
<
faces
;
i
++
)
{
...
...
@@ -254,7 +254,7 @@ namespace AMDiS {
}
}
if
((
nd
=
admin
->
getNumberOfD
OF
s
(
CENTER
)))
{
if
((
nd
=
admin
->
getNumberOfD
of
s
(
CENTER
)))
{
nd0
=
admin
->
getNumberOfPreDOFs
(
CENTER
);
n0
=
admin
->
getMesh
()
->
getNode
(
CENTER
);
int
i
=
0
;
/* only one center */
...
...
@@ -271,7 +271,7 @@ namespace AMDiS {
int
edges
=
mesh
->
getGeo
(
EDGE
);
int
faces
=
mesh
->
getGeo
(
FACE
);
int
nd
=
admin
->
getNumberOfD
OF
s
(
VERTEX
);
int
nd
=
admin
->
getNumberOfD
of
s
(
VERTEX
);
if
(
nd
)
{
nd0
=
admin
->
getNumberOfPreDOFs
(
VERTEX
);
n0
=
admin
->
getMesh
()
->
getNode
(
VERTEX
);
...
...
@@ -281,7 +281,7 @@ namespace AMDiS {
}
if
(
mesh
->
getDim
()
>
1
)
{
nd
=
admin
->
getNumberOfD
OF
s
(
EDGE
);
nd
=
admin
->
getNumberOfD
of
s
(
EDGE
);
if
(
nd
)
{
nd0
=
admin
->
getNumberOfPreDOFs
(
EDGE
);
n0
=
admin
->
getMesh
()
->
getNode
(
EDGE
);
...
...
@@ -292,7 +292,7 @@ namespace AMDiS {
}
if
(
mesh
->
getDim
()
==
3
)
{
nd
=
admin
->
getNumberOfD
OF
s
(
FACE
);
nd
=
admin
->
getNumberOfD
of
s
(
FACE
);
if
(
nd
)
{
nd0
=
admin
->
getNumberOfPreDOFs
(
FACE
);
n0
=
admin
->
getMesh
()
->
getNode
(
FACE
);
...
...
@@ -302,7 +302,7 @@ namespace AMDiS {
}
}
nd
=
admin
->
getNumberOfD
OF
s
(
CENTER
);
nd
=
admin
->
getNumberOfD
of
s
(
CENTER
);
if
(
nd
)
{
nd0
=
admin
->
getNumberOfPreDOFs
(
CENTER
);
n0
=
admin
->
getMesh
()
->
getNode
(
CENTER
);
...
...
@@ -400,7 +400,7 @@ namespace AMDiS {
int
ndof
=
0
;
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
ndof
+=
mesh
->
getD
OF
Admin
(
i
).
getNumberOfD
OF
s
(
position
);
ndof
+=
mesh
->
getD
of
Admin
(
i
).
getNumberOfD
of
s
(
position
);
if
(
ndof
>
0
)
{
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
position
);
i
++
)
{
...
...
AMDiS/src/ElementDofIterator.cc
View file @
b3de56bb
...
...
@@ -25,7 +25,7 @@ namespace AMDiS {
// Get geo index of vertices in the given dimension.
posIndex
=
INDEX_OF_DIM
(
pos
,
dim
);
// Get number of dofs per vertex (should be one in all cases).
nDofs
=
admin
->
getNumberOfD
OF
s
(
posIndex
);
nDofs
=
admin
->
getNumberOfD
of
s
(
posIndex
);
TEST_EXIT_DBG
(
nDofs
!=
0
)(
"Mh, I've to think about this situation!
\n
"
);
...
...
@@ -65,7 +65,7 @@ namespace AMDiS {
// Get geo index posistion.
posIndex
=
INDEX_OF_DIM
(
pos
,
dim
);
// Get number of dofs in this position.
nDofs
=
admin
->
getNumberOfD
OF
s
(
posIndex
);
nDofs
=
admin
->
getNumberOfD
of
s
(
posIndex
);
}
while
(
nDofs
==
0
&&
pos
<
dim
);
if
(
nDofs
>
0
&&
pos
<=
dim
)
{
...
...
AMDiS/src/FiniteElemSpace.cc
View file @
b3de56bb
...
...
@@ -26,13 +26,13 @@ namespace AMDiS {
if
(
!
admin
)
{
const
DOFAdmin
*
admin_local
=
NULL
;
const
DimVec
<
int
>
*
ndof
=
NULL
;
ndof
=
basFcts
->
getNumberOfD
OF
s
();
ndof
=
basFcts
->
getNumberOfD
of
s
();
TEST_EXIT
(
ndof
)(
"no n_dof or basFcts->n_dof
\n
"
);
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfDOFAdmin
();
i
++
)
{
admin_local
=
&
(
mesh
->
getD
OF
Admin
(
i
));
admin_local
=
&
(
mesh
->
getD
of
Admin
(
i
));
int
j
=
0
;
for
(;
j
<=
mesh
->
getDim
();
j
++
)
if
(
admin_local
->
getNumberOfD
OF
s
(
j
)
!=
(
*
ndof
)[
j
])
if
(
admin_local
->
getNumberOfD
of
s
(
j
)
!=
(
*
ndof
)[
j
])
break
;
if
(
j
>
mesh
->
getDim
())
break
;
...
...
@@ -60,10 +60,10 @@ namespace AMDiS {
mesh
=
new
Mesh
(
feSpace
.
mesh
->
getName
(),
feSpace
.
mesh
->
getDim
());
*
mesh
=
*
(
feSpace
.
mesh
);
admin
=
&
(
const_cast
<
DOFAdmin
&>
(
mesh
->
getD
OF
Admin
(
0
)));
admin
=
&
(
const_cast
<
DOFAdmin
&>
(
mesh
->
getD
of
Admin
(
0
)));
basFcts
=
feSpace
.
basFcts
;
TEST_EXIT
(
feSpace
.
admin
==
&
(
feSpace
.
mesh
->
getD
OF
Admin
(
0
)))
TEST_EXIT
(
feSpace
.
admin
==
&
(
feSpace
.
mesh
->
getD
of
Admin
(
0
)))
(
"Gut, dass muss ich mir noch mal ueberlegen!
\n
"
);
return
*
this
;
...
...
AMDiS/src/Lagrange.cc
View file @
b3de56bb
...
...
@@ -192,7 +192,7 @@ namespace AMDiS {
(
*
ndofDimDegree
[
dim
][
degree
])[
VERTEX
]
=
0
;
for
(
int
i
=
1
;
i
<
dim
+
1
;
i
++
)
{
nBasFcts
=
getNumberOfD
OF
s
(
i
,
degree
);
nBasFcts
=
getNumberOfD
of
s
(
i
,
degree
);
(
*
ndofDimDegree
[
dim
][
degree
])[
INDEX_OF_DIM
(
i
,
dim
)]
=
nBasFcts
;
for
(
int
j
=
0
;
j
<
i
;
j
++
)
{
(
*
ndofDimDegree
[
dim
][
degree
])[
INDEX_OF_DIM
(
i
,
dim
)]
-=
...
...
@@ -674,7 +674,7 @@ namespace AMDiS {
}
}
int
Lagrange
::
getNumberOfD
OF
s
(
int
dim
,
int
degree
)
int
Lagrange
::
getNumberOfD
of
s
(
int
dim
,
int
degree
)
{
int
result
=
0
;
for
(
int
i
=
0
;
i
<=
degree
;
i
++
)
...
...
@@ -936,7 +936,7 @@ namespace AMDiS {
for
(
int
pos
=
0
,
j
=
0
;
pos
<=
dim
;
pos
++
)
{
posIndex
=
INDEX_OF_DIM
(
pos
,
dim
);
nrDOFs
=
admin
->
getNumberOfD
OF
s
(
posIndex
);
nrDOFs
=
admin
->
getNumberOfD
of
s
(
posIndex
);
if
(
nrDOFs
)
{
n0
=
admin
->
getNumberOfPreDOFs
(
posIndex
);
...
...
@@ -968,7 +968,7 @@ namespace AMDiS {
for
(
int
pos
=
0
,
j
=
0
;
pos
<=
dim
;
pos
++
)
{
posIndex
=
INDEX_OF_DIM
(
pos
,
dim
);
nrDOFs
=
admin
->
getNumberOfD
OF
s
(
posIndex
);
nrDOFs
=
admin
->
getNumberOfD
of
s
(
posIndex
);
if
(
nrDOFs
)
{
n0
=
admin
->
getNumberOfPreDOFs
(
posIndex
);
...
...
AMDiS/src/Lagrange.h
View file @
b3de56bb
...
...
@@ -165,7 +165,7 @@ namespace AMDiS {
int
positionIndex
)
const
;
/// Calculates the number of DOFs needed for Lagrange of the given dim and degree.
static
int
getNumberOfD
OF
s
(
int
dim
,
int
degree
);
static
int
getNumberOfD
of
s
(
int
dim
,
int
degree
);
private:
/// barycentric coordinates of the locations of all basis functions
...
...
AMDiS/src/MacroReader.cc
View file @
b3de56bb
...
...
@@ -284,7 +284,7 @@ namespace AMDiS {
macroInfo
->
fillBoundaryInfo
(
mesh
);
if
(
mesh
->
getNumberOfD
OF
s
(
CENTER
))
{
if
(
mesh
->
getNumberOfD
of
s
(
CENTER
))
{
for
(
int
i
=
0
;
i
<
mesh
->
getNumberOfMacros
();
i
++
)
const_cast
<
Element
*>
(
mel
[
i
]
->
getElement
())
->
setDof
(
mesh
->
getNode
(
CENTER
),
mesh
->
getDof
(
CENTER
));
...
...
@@ -444,7 +444,7 @@ namespace AMDiS {
mesh
->
incrementNumberOfEdges
(
1
);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
dof
=
mesh
->
getDof
(
EDGE
);
el
->
setDof
(
lnode
+
i
,
dof
);
...
...
@@ -505,7 +505,7 @@ namespace AMDiS {
mesh
->
incrementNumberOfFaces
(
1
);
if
(
mesh
->
getNumberOfD
OF
s
(
FACE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
FACE
))
{
TEST_EXIT
(
!
(
*
(
mel
+
i
))
->
getElement
()
->
getDof
(
lnode
+
k
))
(
"dof %d on element %d already set
\n
"
,
lnode
+
k
,
(
*
(
mel
+
i
))
->
getIndex
());
...
...
@@ -696,7 +696,7 @@ namespace AMDiS {
list_bound
[
0
]
=
&
(
mel
->
boundary
[
mesh
->
getGeo
(
FACE
)
+
edge_no
]);
list_project
[
0
]
=
&
(
mel
->
projection
[
mesh
->
getGeo
(
FACE
)
+
edge_no
]);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
node
=
mesh
->
getNode
(
EDGE
);
if
(
el
->
getDof
(
node
+
edge_no
))
{
/****************************************************************************/
...
...
@@ -742,12 +742,12 @@ namespace AMDiS {
break
;
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
TEST_EXIT
(
nei
->
index
>
mel_index
)
(
"neighbour index %d < element index %d
\n
"
,
nei
->
getIndex
(),
mel_index
);
}
if
(
!
mesh
->
getNumberOfD
OF
s
(
EDGE
)
&&
nei
->
getIndex
()
<
mel_index
)
if
(
!
mesh
->
getNumberOfD
of
s
(
EDGE
)
&&
nei
->
getIndex
()
<
mel_index
)
return
false
;
edge_no
=
Tetrahedron
::
edgeOfDofs
[
j
][
k
];
...
...
@@ -761,7 +761,7 @@ namespace AMDiS {
list_project
[(
*
n_neigh
)
++
]
=
&
(
nei
->
projection
[
mesh
->
getGeo
(
FACE
)
+
edge_no
]);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
nei
->
element
->
setDof
(
node
+
edge_no
,
edge_dof
);
if
(
next_el
[
edge_no
][
0
]
!=
opp_v
)
{
...
...
@@ -823,7 +823,7 @@ namespace AMDiS {
if
(
j
==
4
||
k
==
4
)
return
false
;
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
TEST_EXIT
(
nei
->
getIndex
()
>
mel_index
)
(
"neighbour index %d < element index %d
\n
"
,
nei
->
getIndex
(),
mel_index
);
...
...
@@ -839,7 +839,7 @@ namespace AMDiS {
list_bound
[(
*
n_neigh
)]
=
&
(
nei
->
boundary
[
mesh
->
getGeo
(
FACE
)
+
edge_no
]);
list_project
[(
*
n_neigh
)
++
]
=
&
(
nei
->
projection
[
mesh
->
getGeo
(
FACE
)
+
edge_no
]);
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
TEST_EXIT
(
!
nei
->
getElement
()
->
getDof
(
node
+
edge_no
))
(
"dof %d on element %d is already set, but not on element %d
\n
"
,
node
+
edge_no
,
nei
->
getIndex
(),
mel_index
);
...
...
@@ -964,7 +964,7 @@ namespace AMDiS {
me
->
setOppVertex
(
2
,
macr
->
getOppVertex
(
1
));
if
(
mesh
->
getNumberOfD
OF
s
(
VERTEX
))
{
/* Ecken */
if
(
mesh
->
getNumberOfD
of
s
(
VERTEX
))
{
/* Ecken */
n0
=
mesh
->
getNode
(
VERTEX
);
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
,
d
[
n0
+
2
]);
...
...
@@ -972,7 +972,7 @@ namespace AMDiS {
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
+
2
,
d
[
n0
+
1
]);
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
/* Kanten */
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
/* Kanten */
n0
=
mesh
->
getNode
(
EDGE
);
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
,
d
[
n0
+
2
]);
...
...
@@ -1000,7 +1000,7 @@ namespace AMDiS {
me
->
setOppVertex
(
1
,
macr
->
getOppVertex
(
2
));
me
->
setOppVertex
(
2
,
macr
->
getOppVertex
(
0
));
if
(
mesh
->
getNumberOfD
OF
s
(
VERTEX
))
{
/* Ecken */
if
(
mesh
->
getNumberOfD
of
s
(
VERTEX
))
{
/* Ecken */
n0
=
mesh
->
getNode
(
VERTEX
);
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
,
d
[
n0
+
1
]);
...
...
@@ -1008,7 +1008,7 @@ namespace AMDiS {
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
+
2
,
d
[
n0
]);
}
if
(
mesh
->
getNumberOfD
OF
s
(
EDGE
))
{
/* Kanten */
if
(
mesh
->
getNumberOfD
of
s
(
EDGE
))
{
/* Kanten */
n0
=
mesh
->
getNode
(
EDGE
);
const_cast
<
Element
*>
(
me
->
getElement
())
->
setDof
(
n0
,
d
[
n0
+
1
]);
...
...
@@ -1240,9 +1240,9 @@ namespace AMDiS {
TEST
(
nused
+
nfree
==
localAdmin
->
getSize
())
(
"nused = %d, nfree = %d, admin.size = %d ????
\n
"
,
nused
,
nfree
,
localAdmin
->
getSize
());
TEST
(
nused
==
localAdmin
->
getUsedD
OF
s
())
TEST
(
nused
==
localAdmin
->
getUsedD
of
s
())
(
"nused = %d, admin.used_count = %d ?????
\n
"
,
nused
,
localAdmin
->
getUsedD
OF
s
());
nused
,
localAdmin
->
getUsedD
of
s
());
}
}
...
...
@@ -1337,19 +1337,19 @@ namespace AMDiS {
FUNCNAME
(
"MacroReader::basicDOFCheckFct()"
);
Element
*
el
=
elinfo
->
getElement
();
const
DOFAdmin
&
admin
=
mesh
->
getD
OF
Admin
(
iadmin
);
const
DOFAdmin
&
admin
=
mesh
->
getD
of
Admin
(
iadmin
);
const
Element
*
neig
;
const
DegreeOfFreedom
*
dof
;
if
(
0
==
mesh
->
dof_used
.
size
())
return
;
int
ndof
=
admin
.
getNumberOfD
OF
s
(
VERTEX
);
int
ndof
=
admin
.
getNumberOfD
of
s
(
VERTEX
);
if
(
ndof
)
{
int
j0
=
admin
.
getNumberOfPreDOFs
(
VERTEX
);
TEST_EXIT
(
j0
+
ndof
<=
mesh
->
getNumberOfD
OF
s
(
VERTEX
))
TEST_EXIT
(
j0
+
ndof
<=
mesh
->
getNumberOfD
of
s
(
VERTEX
))
(
"admin.getNumberOfPreDOFs(VERTEX) %d + nDOF %d > mesh->nDOF %d
\n
"
,
j0
,
ndof
,
mesh
->
getNumberOfD
OF
s
(
VERTEX
));
j0
,
ndof
,
mesh
->
getNumberOfD
of
s
(
VERTEX
));
int
i0
=
mesh
->
getNode
(
VERTEX
);
for
(
int
i
=
0
;
i
<
mesh
->
getGeo
(
VERTEX
);
i
++
)
{
if
((
dof
=
el
->
getDof
(
i0
+
i
))
==
NULL
)
{
...
...
@@ -1368,13 +1368,13 @@ namespace AMDiS {
if
(
mesh
->
getDim
()
>
1
)
{
ndof
=
admin
.
getNumberOfD
OF
s
(
EDGE
);
ndof
=
admin
.
getNumberOfD
of
s
(
EDGE
);
if
(
ndof
)
{
int
j0
=
admin
.
getNumberOfPreDOFs
(
EDGE
);
TEST_EXIT
(
j0
+
ndof
<=
mesh
->
getNumberOfD
OF
s
(
EDGE
))