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
729ab8dc
Commit
729ab8dc
authored
Dec 16, 2010
by
Thomas Witkowski
Browse files
Fixed problem with getRecoveryGradient.
parent
7ab4ab7b
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
AMDiS/src/DOFAdmin.cc
View file @
729ab8dc
...
...
@@ -18,8 +18,8 @@ namespace AMDiS {
DOFAdmin
::
DOFAdmin
(
Mesh
*
m
)
:
mesh
(
m
),
n
rDOF
(
mesh
->
getDim
(),
NO_INIT
),
n
r0DOF
(
mesh
->
getDim
(),
NO_INIT
)
n
Dof
(
mesh
->
getDim
(),
NO_INIT
),
n
PreDof
(
mesh
->
getDim
(),
NO_INIT
)
{
init
();
}
...
...
@@ -28,8 +28,8 @@ namespace AMDiS {
DOFAdmin
::
DOFAdmin
(
Mesh
*
m
,
std
::
string
aName
)
:
name
(
aName
),
mesh
(
m
),
n
rDOF
(
mesh
->
getDim
(),
NO_INIT
),
n
r0DOF
(
mesh
->
getDim
(),
NO_INIT
)
n
Dof
(
mesh
->
getDim
(),
NO_INIT
),
n
PreDof
(
mesh
->
getDim
(),
NO_INIT
)
{
init
();
}
...
...
@@ -62,8 +62,8 @@ namespace AMDiS {
holeCount
=
src
.
holeCount
;
sizeUsed
=
src
.
sizeUsed
;
for
(
int
i
=
0
;
i
<=
mesh
->
getDim
();
i
++
)
{
n
rDOF
[
i
]
=
src
.
n
rDOF
[
i
];
n
r0DOF
[
i
]
=
src
.
n
r0DOF
[
i
];
n
Dof
[
i
]
=
src
.
n
Dof
[
i
];
n
PreDof
[
i
]
=
src
.
n
PreDof
[
i
];
}
dofIndexedList
=
src
.
dofIndexedList
;
dofContainerList
=
src
.
dofContainerList
;
...
...
@@ -142,10 +142,10 @@ namespace AMDiS {
firstHole
=
i
;
}
else
{
// if there is no hole
// enlarge dof-list
enlargeD
OF
Lists
();
enlargeD
of
Lists
();
TEST_EXIT_DBG
(
firstHole
<
static_cast
<
int
>
(
dofFree
.
size
()))
(
"no free entry after enlargeD
OF
Lists
\n
"
);
(
"no free entry after enlargeD
of
Lists
\n
"
);
TEST_EXIT_DBG
(
dofFree
[
firstHole
])(
"no free bit at firstHole
\n
"
);
dofFree
[
firstHole
]
=
false
;
dof
=
firstHole
;
...
...
@@ -161,9 +161,9 @@ namespace AMDiS {
}
void
DOFAdmin
::
enlargeD
OF
Lists
(
int
minsize
)
void
DOFAdmin
::
enlargeD
of
Lists
(
int
minsize
)
{
FUNCNAME
(
"DOFAdmin::enlargeD
OF
Lists()"
);
FUNCNAME
(
"DOFAdmin::enlargeD
of
Lists()"
);
int
old
=
size
;
if
(
minsize
>
0
)
...
...
@@ -316,23 +316,23 @@ namespace AMDiS {
}
void
DOFAdmin
::
setNumberOfD
OF
s
(
int
i
,
int
v
)
void
DOFAdmin
::
setNumberOfD
of
s
(
int
i
,
int
v
)
{
FUNCNAME
(
"DOFAdmin::setNumberOfDOFs()"
);
TEST_EXIT_DBG
(
0
<=
i
&&
4
>
i
)(
"Should not happen!
\n
"
);
n
rDOF
[
i
]
=
v
;
n
Dof
[
i
]
=
v
;
}
void
DOFAdmin
::
setNumberOfPreD
OF
s
(
int
i
,
int
v
)
void
DOFAdmin
::
setNumberOfPreD
of
s
(
int
i
,
int
v
)
{
FUNCNAME
(
"DOFAdmin::setNumberOfPreDOFs()"
);
TEST_EXIT_DBG
(
0
<=
i
&&
4
>
i
)(
"Should not happen!
\n
"
);
n
r0DOF
[
i
]
=
v
;
n
PreDof
[
i
]
=
v
;
}
...
...
@@ -361,8 +361,8 @@ namespace AMDiS {
SerUtil
::
serialize
(
out
,
holeCount
);
SerUtil
::
serialize
(
out
,
sizeUsed
);
n
rDOF
.
serialize
(
out
);
n
r0DOF
.
serialize
(
out
);
n
Dof
.
serialize
(
out
);
n
PreDof
.
serialize
(
out
);
}
...
...
@@ -388,8 +388,8 @@ namespace AMDiS {
SerUtil
::
deserialize
(
in
,
holeCount
);
SerUtil
::
deserialize
(
in
,
sizeUsed
);
n
rDOF
.
deserialize
(
in
);
n
r0DOF
.
deserialize
(
in
);
n
Dof
.
deserialize
(
in
);
n
PreDof
.
deserialize
(
in
);
std
::
list
<
DOFIndexedBase
*>::
iterator
di
;
std
::
list
<
DOFIndexedBase
*>::
iterator
end
=
dofIndexedList
.
end
();
...
...
AMDiS/src/DOFAdmin.h
View file @
729ab8dc
...
...
@@ -66,7 +66,7 @@ namespace AMDiS {
* Enlarges the number of DOFs that can be managed at least to minsize by
* a step size of \ref sizeIncrement.
*/
void
enlargeD
OF
Lists
(
int
minsize
=
0
);
void
enlargeD
of
Lists
(
int
minsize
=
0
);
/// assignment operator
DOFAdmin
&
operator
=
(
const
DOFAdmin
&
);
...
...
@@ -77,7 +77,7 @@ namespace AMDiS {
/// Compares two DOFAdmins by their names.
inline
bool
operator
!=
(
const
DOFAdmin
&
ad
)
const
{
return
!
(
ad
==*
this
);
return
!
(
ad
==
*
this
);
}
/** \brief
...
...
@@ -150,28 +150,28 @@ namespace AMDiS {
return
name
;
}
/// Returns \ref n
rDOF
[i], i.e., the number of dofs for the position i.
/// Returns \ref n
Dof
[i], i.e., the number of dofs for the position i.
inline
const
int
getNumberOfDofs
(
int
i
)
const
{
return
n
rDOF
[
i
];
return
n
Dof
[
i
];
}
/// Returns \ref n
rDOF
/// Returns \ref n
Dof
inline
const
DimVec
<
int
>&
getNumberOfDofs
()
const
{
return
n
rDOF
;
return
n
Dof
;
}
/// Returns \ref n
r0DOF
[i]
inline
const
int
getNumberOfPreD
OF
s
(
int
i
)
const
/// Returns \ref n
PreDof
[i]
inline
const
int
getNumberOfPreD
of
s
(
int
i
)
const
{
return
n
r0DOF
[
i
];
return
n
PreDof
[
i
];
}
/// Returns \ref n
r0DOF
inline
const
DimVec
<
int
>&
getNumberOfPreD
OF
s
()
const
/// Returns \ref n
PreDof
inline
const
DimVec
<
int
>&
getNumberOfPreD
of
s
()
const
{
return
n
r0DOF
;
return
n
PreDof
;
}
/// Returns \ref mesh
...
...
@@ -181,19 +181,19 @@ namespace AMDiS {
}
/// Returns \ref dofFree, the array denoting DOFs to be either free or used.
inline
const
std
::
vector
<
bool
>&
getD
OF
Free
()
const
inline
const
std
::
vector
<
bool
>&
getD
of
Free
()
const
{
return
dofFree
;
}
/// Returns if the given DOF is free.
inline
const
bool
isD
OF
Free
(
int
i
)
const
inline
const
bool
isD
of
Free
(
int
i
)
const
{
return
dofFree
[
i
];
}
/// Sets a DOF to be free or not.
inline
void
setD
OF
Free
(
int
i
,
bool
b
)
inline
void
setD
of
Free
(
int
i
,
bool
b
)
{
dofFree
[
i
]
=
b
;
}
...
...
@@ -224,17 +224,17 @@ namespace AMDiS {
* \{
*/
/// Sets \ref n
rDOF
[i] = v
void
setNumberOfD
OF
s
(
int
i
,
int
v
);
/// Sets \ref n
Dof
[i] = v
void
setNumberOfD
of
s
(
int
i
,
int
v
);
/// Sets all values of \ref n
rDOF
void
setNumberOfD
OF
s
(
DimVec
<
int
>
v
)
/// Sets all values of \ref n
Dof
void
setNumberOfD
of
s
(
DimVec
<
int
>
v
)
{
n
rDOF
=
v
;
n
Dof
=
v
;
}
/// Sets \ref n
r0DOF
[i] = v
void
setNumberOfPreD
OF
s
(
int
i
,
int
v
);
/// Sets \ref n
PreDof
[i] = v
void
setNumberOfPreD
of
s
(
int
i
,
int
v
);
/// Sets \ref name = n
inline
void
setName
(
std
::
string
n
)
...
...
@@ -300,10 +300,10 @@ namespace AMDiS {
* Number of dofs for each position, i.e., vertex, edge, ..., center,
* for this DOFAdmin.
*/
DimVec
<
int
>
n
rDOF
;
DimVec
<
int
>
n
Dof
;
/// Dofs from previous DOFAdmins
DimVec
<
int
>
n
r0DOF
;
DimVec
<
int
>
n
PreDof
;
/// List of all managed DOFIndexed objects.
std
::
list
<
DOFIndexedBase
*>
dofIndexedList
;
...
...
AMDiS/src/DOFVector.cc
View file @
729ab8dc
...
...
@@ -45,7 +45,7 @@ namespace AMDiS {
return
;
Element
*
el
=
list
.
getElement
(
0
);
int
n0
=
feSpace
->
getAdmin
()
->
getNumberOfPreD
OF
s
(
VERTEX
);
int
n0
=
feSpace
->
getAdmin
()
->
getNumberOfPreD
of
s
(
VERTEX
);
DegreeOfFreedom
dof0
=
el
->
getDof
(
0
,
n0
);
DegreeOfFreedom
dof1
=
el
->
getDof
(
1
,
n0
);
DegreeOfFreedom
dof_new
=
el
->
getChild
(
0
)
->
getDof
(
feSpace
->
getMesh
()
->
getDim
(),
n0
);
...
...
@@ -79,8 +79,8 @@ namespace AMDiS {
DOFAdmin
*
admin
=
feSpace
->
getAdmin
();
// count number of nodes and dofs per node
std
::
vector
<
int
>
n
um
NodeDOFs
;
std
::
vector
<
int
>
n
um
NodePreD
OF
s
;
std
::
vector
<
int
>
nNodeDOFs
;
std
::
vector
<
int
>
nNodePreD
of
s
;
std
::
vector
<
DimVec
<
double
>*>
bary
;
int
nNodes
=
0
;
...
...
@@ -89,12 +89,12 @@ namespace AMDiS {
for
(
int
i
=
0
;
i
<
dim
+
1
;
i
++
)
{
GeoIndex
geoIndex
=
INDEX_OF_DIM
(
i
,
dim
);
int
nPositions
=
mesh
->
getGeo
(
geoIndex
);
int
numPreD
OF
s
=
admin
->
getNumberOfPreD
OF
s
(
i
);
int
numPreD
of
s
=
admin
->
getNumberOfPreD
of
s
(
i
);
for
(
int
j
=
0
;
j
<
nPositions
;
j
++
)
{
int
dofs
=
basFcts
->
getNumberOfDofs
(
geoIndex
);
n
um
NodeDOFs
.
push_back
(
dofs
);
nNodeDOFs
.
push_back
(
dofs
);
nDofs
+=
dofs
;
n
um
NodePreD
OF
s
.
push_back
(
numPreD
OF
s
);
nNodePreD
of
s
.
push_back
(
numPreD
of
s
);
}
nNodes
+=
nPositions
;
}
...
...
@@ -120,8 +120,8 @@ namespace AMDiS {
int
localDOFNr
=
0
;
for
(
int
i
=
0
;
i
<
nNodes
;
i
++
)
{
// for all nodes
for
(
int
j
=
0
;
j
<
n
um
NodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
DegreeOfFreedom
dofIndex
=
dof
[
i
][
n
um
NodePreD
OF
s
[
i
]
+
j
];
for
(
int
j
=
0
;
j
<
nNodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
DegreeOfFreedom
dofIndex
=
dof
[
i
][
nNodePreD
of
s
[
i
]
+
j
];
if
(
!
visited
[
dofIndex
])
{
basFcts
->
evalGrdUh
(
*
(
bary
[
localDOFNr
]),
grdLambda
,
localUh
,
&
((
*
result
)[
dofIndex
]));
...
...
@@ -171,7 +171,7 @@ namespace AMDiS {
volume
.
set
(
0.0
);
const
BasisFunction
*
basFcts
=
feSpace
->
getBasisFcts
();
int
nPreD
OF
s
=
feSpace
->
getAdmin
()
->
getNumberOfPreD
OFs
(
0
);
int
nPreD
of
s
=
feSpace
->
getAdmin
()
->
getNumberOfPreD
ofs
(
VERTEX
);
DimVec
<
double
>
bary
(
dim
,
DEFAULT_VALUE
,
(
1.0
/
(
dim
+
1.0
)));
WorldVector
<
double
>
grd
;
...
...
@@ -193,7 +193,7 @@ namespace AMDiS {
basFcts
->
evalGrdUh
(
bary
,
grdLambda
,
localUh
,
&
grd
);
for
(
int
i
=
0
;
i
<
dim
+
1
;
i
++
)
{
DegreeOfFreedom
dofIndex
=
dof
[
i
][
nPreD
OF
s
];
DegreeOfFreedom
dofIndex
=
dof
[
i
][
nPreD
of
s
];
(
*
result
)[
dofIndex
]
+=
grd
*
det
;
volume
[
dofIndex
]
+=
det
;
}
...
...
@@ -640,8 +640,8 @@ namespace AMDiS {
}
// count number of nodes and dofs per node
std
::
vector
<
int
>
n
um
NodeDOFs
;
std
::
vector
<
int
>
n
um
NodePreD
OF
s
;
std
::
vector
<
int
>
nNodeDOFs
;
std
::
vector
<
int
>
nNodePreD
of
s
;
std
::
vector
<
DimVec
<
double
>*>
bary
;
int
nNodes
=
0
;
...
...
@@ -650,12 +650,12 @@ namespace AMDiS {
for
(
int
i
=
0
;
i
<
dim
+
1
;
i
++
)
{
GeoIndex
geoIndex
=
INDEX_OF_DIM
(
i
,
dim
);
int
numPositionNodes
=
mesh
->
getGeo
(
geoIndex
);
int
numPreD
OF
s
=
admin
->
getNumberOfPreD
OF
s
(
i
);
int
numPreD
of
s
=
admin
->
getNumberOfPreD
of
s
(
i
);
for
(
int
j
=
0
;
j
<
numPositionNodes
;
j
++
)
{
int
dofs
=
basFcts
->
getNumberOfDofs
(
geoIndex
);
n
um
NodeDOFs
.
push_back
(
dofs
);
nNodeDOFs
.
push_back
(
dofs
);
nDofs
+=
dofs
;
n
um
NodePreD
OF
s
.
push_back
(
numPreD
OF
s
);
nNodePreD
of
s
.
push_back
(
numPreD
of
s
);
}
nNodes
+=
numPositionNodes
;
}
...
...
@@ -681,8 +681,8 @@ namespace AMDiS {
int
localDOFNr
=
0
;
for
(
int
i
=
0
;
i
<
nNodes
;
i
++
)
{
// for all nodes
for
(
int
j
=
0
;
j
<
n
um
NodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
DegreeOfFreedom
dofIndex
=
dof
[
i
][
n
um
NodePreD
OF
s
[
i
]
+
j
];
for
(
int
j
=
0
;
j
<
nNodeDOFs
[
i
];
j
++
)
{
// for all dofs at this node
DegreeOfFreedom
dofIndex
=
dof
[
i
][
nNodePreD
of
s
[
i
]
+
j
];
if
(
!
visited
[
dofIndex
])
{
basFcts
->
evalGrdUh
(
*
(
bary
[
localDOFNr
]),
grdLambda
,
localUh
,
&
grd
);
...
...
AMDiS/src/DOFVector.hh
View file @
729ab8dc
...
...
@@ -860,7 +860,7 @@ namespace AMDiS {
#pragma omp parallel for schedule(dynamic, 25000) default(shared) private(i)
#endif
for
(
i
=
0
;
i
<
maxI
;
i
++
)
if
(
!
admin
->
isD
OF
Free
(
i
))
if
(
!
admin
->
isD
of
Free
(
i
))
y
[
i
]
+=
alpha
*
x
[
i
];
}
...
...
@@ -926,7 +926,7 @@ namespace AMDiS {
#pragma omp parallel for schedule(dynamic, 25000) default(shared) private(i)
#endif
for
(
i
=
0
;
i
<
maxI
;
i
++
)
if
(
!
admin
->
isD
OF
Free
(
i
))
if
(
!
admin
->
isD
of
Free
(
i
))
y
[
i
]
=
alpha
*
y
[
i
]
+
x
[
i
];
}
...
...
AMDiS/src/Element.cc
View file @
729ab8dc
...
...
@@ -207,7 +207,7 @@ namespace AMDiS {
if
((
nd
=
admin
->
getNumberOfDofs
(
VERTEX
)))
{
int
vertices
=
mesh
->
getGeo
(
VERTEX
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
VERTEX
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
VERTEX
);
n0
=
admin
->
getMesh
()
->
getNode
(
VERTEX
);
for
(
int
i
=
0
;
i
<
vertices
;
i
++
)
changeDofs1
(
admin
,
newDofIndex
,
n0
,
nd0
,
nd
,
i
);
...
...
@@ -216,7 +216,7 @@ namespace AMDiS {
if
(
mesh
->
getDim
()
>
1
)
{
if
((
nd
=
admin
->
getNumberOfDofs
(
EDGE
)))
{
int
edges
=
mesh
->
getGeo
(
EDGE
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
EDGE
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
EDGE
);
n0
=
admin
->
getMesh
()
->
getNode
(
EDGE
);
for
(
int
i
=
0
;
i
<
edges
;
i
++
)
changeDofs1
(
admin
,
newDofIndex
,
n0
,
nd0
,
nd
,
i
);
...
...
@@ -226,7 +226,7 @@ namespace AMDiS {
if
(
mesh
->
getDim
()
==
3
)
{
if
((
nd
=
admin
->
getNumberOfDofs
(
FACE
)))
{
int
faces
=
mesh
->
getGeo
(
FACE
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
FACE
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
FACE
);
n0
=
admin
->
getMesh
()
->
getNode
(
FACE
);
for
(
int
i
=
0
;
i
<
faces
;
i
++
)
changeDofs1
(
admin
,
newDofIndex
,
n0
,
nd0
,
nd
,
i
);
...
...
@@ -234,7 +234,7 @@ namespace AMDiS {
}
if
((
nd
=
admin
->
getNumberOfDofs
(
CENTER
)))
{
nd0
=
admin
->
getNumberOfPreD
OF
s
(
CENTER
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
CENTER
);
n0
=
admin
->
getMesh
()
->
getNode
(
CENTER
);
changeDofs1
(
admin
,
newDofIndex
,
n0
,
nd0
,
nd
,
0
);
}
...
...
@@ -248,7 +248,7 @@ namespace AMDiS {
int
nd
=
admin
->
getNumberOfDofs
(
VERTEX
);
if
(
nd
)
{
int
vertices
=
mesh
->
getGeo
(
VERTEX
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
VERTEX
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
VERTEX
);
n0
=
admin
->
getMesh
()
->
getNode
(
VERTEX
);
for
(
int
i
=
0
;
i
<
vertices
;
i
++
)
changeDofs2
(
n0
,
nd0
,
nd
,
i
);
...
...
@@ -258,7 +258,7 @@ namespace AMDiS {
nd
=
admin
->
getNumberOfDofs
(
EDGE
);
if
(
nd
)
{
int
edges
=
mesh
->
getGeo
(
EDGE
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
EDGE
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
EDGE
);
n0
=
admin
->
getMesh
()
->
getNode
(
EDGE
);
for
(
int
i
=
0
;
i
<
edges
;
i
++
)
changeDofs2
(
n0
,
nd0
,
nd
,
i
);
...
...
@@ -269,7 +269,7 @@ namespace AMDiS {
nd
=
admin
->
getNumberOfDofs
(
FACE
);
if
(
nd
)
{
int
faces
=
mesh
->
getGeo
(
FACE
);
nd0
=
admin
->
getNumberOfPreD
OF
s
(
FACE
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
FACE
);
n0
=
admin
->
getMesh
()
->
getNode
(
FACE
);
for
(
int
i
=
0
;
i
<
faces
;
i
++
)
changeDofs2
(
n0
,
nd0
,
nd
,
i
);
...
...
@@ -278,7 +278,7 @@ namespace AMDiS {
nd
=
admin
->
getNumberOfDofs
(
CENTER
);
if
(
nd
)
{
nd0
=
admin
->
getNumberOfPreD
OF
s
(
CENTER
);
nd0
=
admin
->
getNumberOfPreD
of
s
(
CENTER
);
n0
=
admin
->
getMesh
()
->
getNode
(
CENTER
);
// only one center
changeDofs2
(
n0
,
nd0
,
nd
,
0
);
...
...
AMDiS/src/ElementDofIterator.cc
View file @
729ab8dc
...
...
@@ -30,7 +30,7 @@ namespace AMDiS {
TEST_EXIT_DBG
(
nDofs
!=
0
)(
"Mh, I've to think about this situation!
\n
"
);
// Calculate displacement. Is used if there is more than one dof admin on the mesh.
n0
=
admin
->
getNumberOfPreD
OF
s
(
posIndex
);
n0
=
admin
->
getNumberOfPreD
of
s
(
posIndex
);
// Get first dof index position for vertices.
node0
=
mesh
->
getNode
(
posIndex
);
// Get number of vertices in this dimension.
...
...
@@ -40,6 +40,7 @@ namespace AMDiS {
orderPosition
=
basisFcts
->
orderOfPositionIndices
(
element
,
posIndex
,
0
);
}
bool
ElementDofIterator
::
next
()
{
// First iterate over the dofs of one element (vertex, edge, face).
...
...
@@ -76,7 +77,7 @@ namespace AMDiS {
nElements
=
Global
::
getGeo
(
posIndex
,
dim
);
// Calculate displacement. Is used if there is more than one dof admin on the mesh.
n0
=
admin
->
getNumberOfPreD
OF
s
(
posIndex
);
n0
=
admin
->
getNumberOfPreD
of
s
(
posIndex
);
// Get first dof index position for the geo index position.
node0
=
mesh
->
getNode
(
posIndex
);
...
...
@@ -99,6 +100,7 @@ namespace AMDiS {
return
true
;
}
bool
ElementDofIterator
::
nextStrict
()
{
dofPos
=
nDofs
;
...
...
AMDiS/src/FiniteElemSpace.cc
View file @
729ab8dc
...
...
@@ -47,12 +47,15 @@ namespace AMDiS {
feSpaces
.
push_back
(
this
);
}
FiniteElemSpace
::
FiniteElemSpace
()
{}
FiniteElemSpace
::~
FiniteElemSpace
()
{}
FiniteElemSpace
&
FiniteElemSpace
::
operator
=
(
const
FiniteElemSpace
&
feSpace
)
{
if
(
&
feSpace
==
this
)
...
...
@@ -69,14 +72,13 @@ namespace AMDiS {
return
*
this
;
}
FiniteElemSpace
*
FiniteElemSpace
::
provideFeSpace
(
DOFAdmin
*
admin
,
const
BasisFunction
*
basFcts
,
Mesh
*
mesh
,
std
::
string
name_
)
{
int
numSpaces
=
static_cast
<
int
>
(
feSpaces
.
size
());
for
(
int
i
=
0
;
i
<
numSpaces
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
feSpaces
.
size
();
i
++
)
if
(
feSpaces
[
i
]
->
basFcts
==
basFcts
&&
feSpaces
[
i
]
->
mesh
==
mesh
&&
(
!
admin
||
(
admin
&&
feSpaces
[
i
]
->
admin
==
admin
)))
...
...
@@ -85,6 +87,7 @@ namespace AMDiS {
return
new
FiniteElemSpace
(
admin
,
basFcts
,
mesh
,
name_
);
}
int
FiniteElemSpace
::
calcMemoryUsage
()
{
int
result
=
sizeof
(
FiniteElemSpace
);
...
...
@@ -92,6 +95,7 @@ namespace AMDiS {
return
result
;
}
void
FiniteElemSpace
::
clear
()
{
for
(
int
i
=
0
;
i
<
static_cast
<
int
>
(
feSpaces
.
size
());
i
++
)
{
...
...
AMDiS/src/Lagrange.cc
View file @
729ab8dc
This diff is collapsed.
Click to expand it.
AMDiS/src/Mesh.cc
View file @
729ab8dc
...
...
@@ -69,12 +69,6 @@ namespace AMDiS {
const
int
Mesh
::
MAX_DOF
=
100
;
std
::
map
<
std
::
pair
<
DegreeOfFreedom
,
int
>
,
DegreeOfFreedom
*>
Mesh
::
serializedDOFs
;
struct
delmem
{
DegreeOfFreedom
*
ptr
;
int
len
;
};
Mesh
::
Mesh
(
std
::
string
aName
,
int
dimension
)
:
name
(
aName
),
dim
(
dimension
),
...
...
@@ -131,7 +125,7 @@ namespace AMDiS {
if
(
elementDataPrototype
)
delete
elementDataPrototype
;
for
(
int
i
=
0
;
i
<
static_cast
<
int
>
(
admin
.
size
()
)
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
admin
.
size
();
i
++
)
delete
admin
[
i
];
}
...
...
@@ -405,32 +399,26 @@ namespace AMDiS {
localAdmin
->
setMesh
(
this
);
std
::
vector
<
DOFAdmin
*>::
iterator
dai
=
std
::
find
(
admin
.
begin
(),
admin
.
end
(),
localAdmin
);
TEST_EXIT
(
dai
==
admin
.
end
())
TEST_EXIT
(
std
::
find
(
admin
.
begin
(),
admin
.
end
(),
localAdmin
)
==
admin
.
end
())
(
"admin %s is already associated to mesh %s
\n
"
,
localAdmin
->
getName
().
c_str
(),
this
->
getName
().
c_str
());
// if this will be required, see the untested code in revision < 224
// TEST_EXIT(!initialized)("Adding DOFAdmins to initilized meshes does not work yet!\n");
admin
.
push_back
(
localAdmin
);
nDofEl
=
0
;
localAdmin
->
setNumberOfPreD
OF
s
(
VERTEX
,
nDof
[
VERTEX
]);
localAdmin
->
setNumberOfPreD
of
s
(
VERTEX
,
nDof
[
VERTEX
]);
nDof
[
VERTEX
]
+=
localAdmin
->
getNumberOfDofs
(
VERTEX
);
nDofEl
+=
getGeo
(
VERTEX
)
*
nDof
[
VERTEX
];
if
(
dim
>
1
)
{
localAdmin
->
setNumberOfPreD
OF
s
(
EDGE
,
nDof
[
EDGE
]);
localAdmin
->
setNumberOfPreD
of
s
(
EDGE
,
nDof
[
EDGE
]);
nDof
[
EDGE
]
+=
localAdmin
->
getNumberOfDofs
(
EDGE
);
nDofEl
+=
getGeo
(
EDGE
)
*
nDof
[
EDGE
];
}
localAdmin
->
setNumberOfPreD
OF
s
(
CENTER
,
nDof
[
CENTER
]);
nDof
[
CENTER
]
+=
localAdmin
->
getNumberOfDofs
(
CENTER
);
localAdmin
->
setNumberOfPreD
of
s
(
CENTER
,
nDof
[
CENTER
]);
nDof
[
CENTER
]
+=
localAdmin
->
getNumberOfDofs
(
CENTER
);
nDofEl
+=
nDof
[
CENTER
];
TEST_EXIT_DBG
(
nDof
[
VERTEX
]
>
0
)(
"no vertex dofs
\n
"
);
...
...
@@ -445,7 +433,7 @@ namespace AMDiS {
}
if
(
dim
==
3
)
{
localAdmin
->
setNumberOfPreD
OF
s
(
FACE
,
nDof
[
FACE
]);
localAdmin
->
setNumberOfPreD
of
s
(
FACE
,
nDof
[
FACE
]);
nDof
[
FACE
]
+=
localAdmin
->
getNumberOfDofs
(
FACE
);
nDofEl
+=
getGeo
(
FACE
)
*
nDof
[
FACE
];
node
[
FACE
]
=
nNodeEl
;
...
...
@@ -514,7 +502,7 @@ namespace AMDiS {
TEST_EXIT_DBG
(
localAdmin
)(
"no admin[%d]
\n
"
,
i
);
int
n
=
localAdmin
->
getNumberOfDofs
(
position
);
int
n0
=
localAdmin
->
getNumberOfPreD
OF
s
(
position
);
int
n0
=
localAdmin
->
getNumberOfPreD
of
s
(
position
);
TEST_EXIT_DBG
(
n
+
n0
<=
ndof
)(
"n=%d, n0=%d too large: ndof=%d
\n
"
,
n
,
n0
,
ndof
);
...
...
@@ -557,11 +545,11 @@ namespace AMDiS {
const
DOFAdmin
*
Mesh
::
createDOFAdmin
(
std
::
string
lname
,
DimVec
<
int
>
lnDof
)
{
FUNCNAME
(
"Mesh::createDOFAdmin()"
);
DOFAdmin
*
localAdmin
=
new
DOFAdmin
(
this
,
lname
);
for
(
int
i
=
0
;
i
<
dim
+
1
;
i
++
)
localAdmin
->
setNumberOfD
OF
s
(
i
,
lnDof
[
i
]);
localAdmin
->
setNumberOfD
of
s
(
i
,
lnDof
[
i
]);
addDOFAdmin
(
localAdmin
);
...
...
@@ -612,7 +600,7 @@ namespace AMDiS {
for
(
unsigned
int
i
=
0
;
i
<
admin
.
size
();
i
++
)
{
DOFAdmin
*
localAdmin
=
admin
[
i
];
int
n
=
localAdmin
->
getNumberOfDofs
(
position
);
int
n0
=
localAdmin
->
getNumberOfPreD
OF
s
(
position
);
int
n0
=
localAdmin
->
getNumberOfPreD
of
s
(
position
);
TEST_EXIT_DBG
(
n
+
n0
<=
ndof
)
(
"n = %d, n0 = %d too large: ndof = %d
\n
"
,
n
,
n0
,
ndof
);
...
...
@@ -1221,7 +1209,7 @@ namespace AMDiS {
Mesh
testMesh
(
name
,
dim
);
testMesh
.
setElementDataPrototype
(
new
LeafDataEstimatableVec
(
new
LeafDataCoarsenableVec
));
DOFAdmin
*
localAdmin
=
new
DOFAdmin
(
&
testMesh
,
admin
[
0
]
->
getName
());
localAdmin
->
setNumberOfD
OF
s
(
admin
[
0
]
->
getNumberOfDofs
());
localAdmin
->
setNumberOfD
of
s
(
admin
[
0
]
->
getNumberOfDofs
());
testMesh
.
addDOFAdmin
(
localAdmin
);
MacroInfo
*
testMacroInfo
=
...
...
AMDiS/src/ProblemVec.cc
View file @
729ab8dc
...
...
@@ -45,7 +45,7 @@ namespace AMDiS {
if
(
initFlag
.
isSet
(
CREATE_MESH
)
||
(
!
adoptFlag
.
isSet
(
INIT_MESH
)
&&
(
initFlag
.
isSet
(
INIT_SYSTEM
)
||
initFlag
.
isSet
(
INIT_FE_SPACE
))))
createMesh
();
createMesh
();
if
(
adoptProblem
&&
(
adoptFlag
.
isSet
(
INIT_MESH
)
||
...
...
@@ -66,6 +66,10 @@ namespace AMDiS {
componentMeshes
[
i
]
=
componentMeshes
[
0
];
}
// If the problem adopts the mesh but creates an own FE space.
if
(
initFlag
.
isSet
(
INIT_FE_SPACE
))
{
}