Skip to content
GitLab
Menu
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
ab48be0c
Commit
ab48be0c
authored
Sep 08, 2008
by
Thomas Witkowski
Browse files
* On the way to independent meshes ...
parent
b0afa1f1
Changes
22
Hide whitespace changes
Inline
Side-by-side
AMDiS/bin/Makefile.am
View file @
ab48be0c
...
...
@@ -197,7 +197,6 @@ $(SOURCE_DIR)/ElInfo2d.cc \
$(SOURCE_DIR)
/ElInfo3d.cc
\
$(SOURCE_DIR)
/FiniteElemSpace.cc
\
$(SOURCE_DIR)
/FixVec.cc
\
$(SOURCE_DIR)
/Flag.cc
\
$(SOURCE_DIR)
/Global.cc
\
$(SOURCE_DIR)
/Lagrange.cc
\
$(SOURCE_DIR)
/Line.cc
\
...
...
AMDiS/bin/Makefile.in
View file @
ab48be0c
...
...
@@ -227,11 +227,11 @@ am__libamdis_la_SOURCES_DIST = $(PARALLEL_DIR)/ConditionalEstimator.h \
$(SOURCE_DIR)/Element.cc $(SOURCE_DIR)/ElInfo1d.cc \
$(SOURCE_DIR)/ElInfo2d.cc $(SOURCE_DIR)/ElInfo3d.cc \
$(SOURCE_DIR)/FiniteElemSpace.cc $(SOURCE_DIR)/FixVec.cc \
$(SOURCE_DIR)
/
Flag
.cc
$(SOURCE_DIR)
/
Global
.cc
\
$(SOURCE_DIR)
/L
agrang
e.cc
$(SOURCE_DIR)
/
Line
.cc
\
$(SOURCE_DIR)
/Macro
Element
.cc
$(SOURCE_DIR)
/
MacroWri
ter.cc
\
$(SOURCE_DIR)
/Paramet
ers
.cc
$(SOURCE_DIR)
/
Parametric
.cc
\
$(SOURCE_DIR)
/Quadrature.cc
$(SOURCE_DIR)
/RCNeighbourList.cc
\
$(SOURCE_DIR)/
Global
.cc $(SOURCE_DIR)/
Lagrange
.cc \
$(SOURCE_DIR)/L
in
e.cc $(SOURCE_DIR)/
MacroElement
.cc \
$(SOURCE_DIR)/Macro
Writer
.cc $(SOURCE_DIR)/
Parame
ter
s
.cc \
$(SOURCE_DIR)/Paramet
ric
.cc $(SOURCE_DIR)/
Quadrature
.cc \
$(SOURCE_DIR)/RCNeighbourList.cc \
$(SOURCE_DIR)/RefinementManager.cc \
$(SOURCE_DIR)/RefinementManager1d.cc \
$(SOURCE_DIR)/RefinementManager2d.cc \
...
...
@@ -303,11 +303,11 @@ am_libamdis_la_OBJECTS = $(am__objects_1) \
libamdis_la-Element.lo libamdis_la-ElInfo1d.lo \
libamdis_la-ElInfo2d.lo libamdis_la-ElInfo3d.lo \
libamdis_la-FiniteElemSpace.lo libamdis_la-FixVec.lo \
libamdis_la-
Flag
.lo libamdis_la-
Global
.lo
\
libamdis_la-L
agrang
e.lo libamdis_la-
Line
.lo
\
libamdis_la-Macro
Element
.lo libamdis_la-
MacroWri
ter.lo
\
libamdis_la-Paramet
ers
.lo libamdis_la-
Parametric
.lo
\
libamdis_la-Quadrature.lo
libamdis_la-RCNeighbourList.lo
\
libamdis_la-
Global
.lo libamdis_la-
Lagrange
.lo \
libamdis_la-L
in
e.lo libamdis_la-
MacroElement
.lo \
libamdis_la-Macro
Writer
.lo libamdis_la-
Parame
ter
s
.lo \
libamdis_la-Paramet
ric
.lo libamdis_la-
Quadrature
.lo \
libamdis_la-RCNeighbourList.lo \
libamdis_la-RefinementManager.lo \
libamdis_la-RefinementManager1d.lo \
libamdis_la-RefinementManager2d.lo \
...
...
@@ -640,7 +640,6 @@ $(SOURCE_DIR)/ElInfo2d.cc \
$(SOURCE_DIR)/ElInfo3d.cc \
$(SOURCE_DIR)/FiniteElemSpace.cc \
$(SOURCE_DIR)/FixVec.cc \
$(SOURCE_DIR)
/Flag.cc
\
$(SOURCE_DIR)/Global.cc \
$(SOURCE_DIR)/Lagrange.cc \
$(SOURCE_DIR)/Line.cc \
...
...
@@ -804,7 +803,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-FiniteElemSpace.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-FirstOrderAssembler.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-FixVec.Plo@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@./$(DEPDIR)/libamdis_la-Flag.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-GNUPlotWriter.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-GSSmoother.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Global.Plo@am__quote@
...
...
@@ -1487,13 +1485,6 @@ libamdis_la-FixVec.lo: $(SOURCE_DIR)/FixVec.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-FixVec.lo `test -f '$(SOURCE_DIR)/FixVec.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/FixVec.cc
libamdis_la-Flag.lo
:
$(SOURCE_DIR)/Flag.cc
@am__fastdepCXX_TRUE@
if
$(LIBTOOL)
--tag
=
CXX
--mode
=
compile
$(CXX)
$(DEFS)
$(DEFAULT_INCLUDES)
$(INCLUDES)
$(AM_CPPFLAGS)
$(CPPFLAGS)
$(libamdis_la_CXXFLAGS)
$(CXXFLAGS)
-MT
libamdis_la-Flag.lo
-MD
-MP
-MF
"
$(DEPDIR)
/libamdis_la-Flag.Tpo"
-c
-o
libamdis_la-Flag.lo
`
test
-f
'
$(SOURCE_DIR)
/Flag.cc'
||
echo
'
$(srcdir)
/'
`
$(SOURCE_DIR)
/Flag.cc
;
\
@am__fastdepCXX_TRUE@
then
mv
-f
"
$(DEPDIR)
/libamdis_la-Flag.Tpo"
"
$(DEPDIR)
/libamdis_la-Flag.Plo"
;
else
rm
-f
"
$(DEPDIR)
/libamdis_la-Flag.Tpo"
;
exit
1
;
fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@
source
=
'
$(SOURCE_DIR)
/Flag.cc'
object
=
'libamdis_la-Flag.lo'
libtool
=
yes
@AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@
DEPDIR
=
$(DEPDIR)
$(CXXDEPMODE)
$(depcomp)
@AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@
$(LIBTOOL)
--tag
=
CXX
--mode
=
compile
$(CXX)
$(DEFS)
$(DEFAULT_INCLUDES)
$(INCLUDES)
$(AM_CPPFLAGS)
$(CPPFLAGS)
$(libamdis_la_CXXFLAGS)
$(CXXFLAGS)
-c
-o
libamdis_la-Flag.lo
`
test
-f
'
$(SOURCE_DIR)
/Flag.cc'
||
echo
'
$(srcdir)
/'
`
$(SOURCE_DIR)
/Flag.cc
libamdis_la-Global.lo: $(SOURCE_DIR)/Global.cc
@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-Global.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-Global.Tpo" -c -o libamdis_la-Global.lo `test -f '$(SOURCE_DIR)/Global.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/Global.cc; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libamdis_la-Global.Tpo" "$(DEPDIR)/libamdis_la-Global.Plo"; else rm -f "$(DEPDIR)/libamdis_la-Global.Tpo"; exit 1; fi
...
...
AMDiS/src/Assembler.cc
View file @
ab48be0c
...
...
@@ -131,7 +131,7 @@ namespace AMDiS {
if
(
zeroOrderAssembler
)
{
zeroOrderAssembler
->
calculateElementMatrix
(
rowElInfo
,
mat
);
}
if
(
rememberElMat
&&
userMat
)
{
axpy
(
factor
,
*
elementMatrix
,
*
userMat
);
}
...
...
AMDiS/src/CoarseningManager2d.cc
View file @
ab48be0c
...
...
@@ -80,123 +80,58 @@ namespace AMDiS {
DegreeOfFreedom
*
dof
[
3
];
dof
[
0
]
=
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDOF
(
2
));
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
dof
[
1
]
=
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDOF
(
3
));
dof
[
2
]
=
const_cast
<
int
*>
(
el
->
getChild
(
1
)
->
getDOF
(
4
));
}
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
dof
[
1
]
=
const_cast
<
int
*>
(
el
->
getChild
(
0
)
->
getDOF
(
3
));
dof
[
2
]
=
const_cast
<
int
*>
(
el
->
getChild
(
1
)
->
getDOF
(
4
));
}
int
node
=
mesh
->
getNode
(
EDGE
);
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
/****************************************************************************/
/* get new dof on el at the midpoint of the coarsening edge */
/****************************************************************************/
if
(
!
el
->
getDOF
(
node
+
2
))
{
el
->
setDOF
(
node
+
2
,
mesh
->
getDOF
(
EDGE
));
if
(
neigh
)
{
// // periodic boundary ?
// if(el->getDOF(0) != neigh->getDOF(0) &&
// el->getDOF(1) != neigh->getDOF(0))
// {
// neigh->setDOF(node+2, mesh->getDOF(EDGE));
// } else {
neigh
->
setDOF
(
node
+
2
,
const_cast
<
int
*>
(
el
->
getDOF
(
node
+
2
)));
// }
}
}
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
/****************************************************************************/
/* get new dof on el at the midpoint of the coarsening edge */
/****************************************************************************/
if
(
!
el
->
getDOF
(
node
+
2
))
{
el
->
setDOF
(
node
+
2
,
mesh
->
getDOF
(
EDGE
));
if
(
neigh
)
{
neigh
->
setDOF
(
node
+
2
,
const_cast
<
int
*>
(
el
->
getDOF
(
node
+
2
)));
}
}
// // periodic boundary?
// DegreeOfFreedom *neighDOF[3] = {NULL, NULL, NULL};
// RCNeighbourList *periodicCoarsenList = NULL;
// int n_neigh_periodic;
// if(neigh &&
// (neigh->getDOF(0) != el->getDOF(1)) &&
// (neigh->getDOF(0) != el->getDOF(0)))
// {
// neighDOF[0] = const_cast<int*>(neigh->getChild(0)->getDOF(2));
// if (mesh->getNumberOfDOFs(EDGE)) {
// neighDOF[1] = const_cast<int*>(neigh->getChild(0)->getDOF(3));
// neighDOF[2] = const_cast<int*>(neigh->getChild(1)->getDOF(4));
// if (!neigh->getDOF(node+2)) {
// neigh->setDOF(node+2, mesh->getDOF(EDGE));
// }
// }
// DegreeOfFreedom *edge[2] = {
// const_cast<DegreeOfFreedom*>(el->getDOF(0)),
// const_cast<DegreeOfFreedom*>(el->getDOF(1))
// };
// DegreeOfFreedom *periodicEdge[2] = {
// const_cast<DegreeOfFreedom*>(neigh->getDOF(0)),
// const_cast<DegreeOfFreedom*>(neigh->getDOF(1))
// };
// periodicCoarsenList = coarsenList->periodicSplit(edge,
// &n_neigh,
// periodicEdge,
// &n_neigh_periodic);
// }
}
if
(
mesh
->
getNumberOfDOFs
(
EDGE
)
||
mesh
->
getNumberOfDOFs
(
CENTER
))
{
coarsenList
->
addDOFParents
(
n_neigh
);
// if(periodicCoarsenList) {
// periodicCoarsenList->addDOFParents(n_neigh_periodic);
// }
}
/****************************************************************************/
/* restrict dof vectors to the parents on the patch */
/****************************************************************************/
int
iadmin
;
int
nrAdmin
=
mesh
->
getNumberOfDOFAdmin
();
for
(
iadmin
=
0
;
iadmin
<
nrAdmin
;
iadmin
++
)
{
for
(
int
iadmin
=
0
;
iadmin
<
nrAdmin
;
iadmin
++
)
{
std
::
list
<
DOFIndexedBase
*>::
iterator
it
;
DOFAdmin
*
admin
=
const_cast
<
DOFAdmin
*>
(
&
mesh
->
getDOFAdmin
(
iadmin
));
std
::
list
<
DOFIndexedBase
*>::
iterator
end
=
admin
->
endDOFIndexed
();
for
(
it
=
admin
->
beginDOFIndexed
();
it
!=
end
;
++
it
)
{
for
(
it
=
admin
->
beginDOFIndexed
();
it
!=
end
;
++
it
)
{
(
*
it
)
->
coarseRestrict
(
*
coarsenList
,
n_neigh
);
// if(periodicCoarsenList) {
// (*it)->coarseRestrict(*periodicCoarsenList, n_neigh_periodic);
// }
}
}
// if(periodicCoarsenList) DELETE periodicCoarsenList;
coarsenTriangle
(
el
);
if
(
neigh
)
coarsenTriangle
(
neigh
);
if
(
neigh
)
coarsenTriangle
(
neigh
);
/****************************************************************************/
/* now, remove those dofs in the coarcening edge */
/****************************************************************************/
mesh
->
freeDOF
(
dof
[
0
],
VERTEX
);
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
mesh
->
freeDOF
(
dof
[
1
],
EDGE
);
mesh
->
freeDOF
(
dof
[
2
],
EDGE
);
}
if
(
mesh
->
getNumberOfDOFs
(
EDGE
))
{
mesh
->
freeDOF
(
dof
[
1
],
EDGE
);
mesh
->
freeDOF
(
dof
[
2
],
EDGE
);
}
mesh
->
incrementNumberOfVertices
(
-
1
);
mesh
->
incrementNumberOfEdges
(
-
1
);
// // periodic boundary?
// if(neigh &&
// (neigh->getDOF(0) != el->getDOF(1)) &&
// (neigh->getDOF(0) != el->getDOF(0)))
// {
// mesh->freeDOF(neighDOF[0], VERTEX);
// if (mesh->getNumberOfDOFs(EDGE)) {
// mesh->freeDOF(neighDOF[1], EDGE);
// mesh->freeDOF(neighDOF[2], EDGE);
// }
// mesh->incrementNumberOfVertices(-1);
// mesh->incrementNumberOfEdges(-1);
// }
return
;
}
...
...
AMDiS/src/DOFAdmin.cc
View file @
ab48be0c
...
...
@@ -86,20 +86,21 @@ namespace AMDiS {
std
::
list
<
DOFIndexedBase
*>::
iterator
di
;
std
::
list
<
DOFIndexedBase
*>::
iterator
end
=
dofIndexedList
.
end
();
for
(
di
=
dofIndexedList
.
begin
();
di
!=
end
;
++
di
)
{
for
(
di
=
dofIndexedList
.
begin
();
di
!=
end
;
++
di
)
{
(
*
di
)
->
freeDOFContent
(
dof
);
}
std
::
list
<
DOFContainer
*>::
iterator
dc
;
std
::
list
<
DOFContainer
*>::
iterator
dcend
=
dofContainerList
.
end
();
for
(
dc
=
dofContainerList
.
begin
();
dc
!=
dcend
;
++
dc
)
{
for
(
dc
=
dofContainerList
.
begin
();
dc
!=
dcend
;
++
dc
)
{
(
*
dc
)
->
freeDOFIndex
(
dof
);
}
dofFree
[
dof
]
=
true
;
if
(
static_cast
<
int
>
(
firstHole
)
>
dof
)
firstHole
=
dof
;
if
(
static_cast
<
int
>
(
firstHole
)
>
dof
)
firstHole
=
dof
;
usedCount
--
;
holeCount
++
;
...
...
@@ -109,7 +110,7 @@ namespace AMDiS {
int
DOFAdmin
::
getDOFIndex
()
{
FUNCNAME
(
"DOFAdmin::getDOFIndex"
);
FUNCNAME
(
"DOFAdmin::getDOFIndex
()
"
);
int
dof
=
0
;
// if there is a hole
...
...
@@ -120,8 +121,8 @@ namespace AMDiS {
dof
=
firstHole
;
// search new hole
int
dfsize
=
static_cast
<
int
>
(
dofFree
.
size
());
int
i
=
0
;
for
(
i
=
firstHole
+
1
;
i
<
dfsize
;
i
++
)
{
int
i
=
firstHole
+
1
;
for
(;
i
<
dfsize
;
i
++
)
{
if
(
dofFree
[
i
])
{
break
;
}
...
...
@@ -152,7 +153,7 @@ namespace AMDiS {
void
DOFAdmin
::
enlargeDOFLists
(
int
minsize
)
{
FUNCNAME
(
"DOFAdmin::enlargeDOFLists"
);
FUNCNAME
(
"DOFAdmin::enlargeDOFLists
()
"
);
int
old
=
size
;
if
(
minsize
>
0
)
{
...
...
AMDiS/src/DOFAdmin.h
View file @
ab48be0c
...
...
@@ -271,12 +271,16 @@ namespace AMDiS {
/** \brief
* Sets \ref name = n
*/
inline
void
setName
(
const
std
::
string
&
n
)
{
name
=
n
;
};
inline
void
setName
(
const
std
::
string
&
n
)
{
name
=
n
;
};
/** \brief
* Sets \ref mesh = m
*/
inline
void
setMesh
(
Mesh
*
m
)
{
mesh
=
m
;
};
inline
void
setMesh
(
Mesh
*
m
)
{
mesh
=
m
;
};
/** \} */
...
...
AMDiS/src/DualTraverse.cc
View file @
ab48be0c
...
...
@@ -69,7 +69,7 @@ namespace AMDiS {
return
false
;
}
rest
_
=
1.0
;
rest
=
1.0
;
bool
accepted
=
check
(
elInfo1
,
elInfo2
,
elInfoSmall
,
elInfoLarge
);
...
...
@@ -83,6 +83,8 @@ namespace AMDiS {
return
traverseNext
(
elInfo1
,
elInfo2
,
elInfoSmall
,
elInfoLarge
);
}
fillSubElInfo
(
*
elInfo1
,
*
elInfo2
,
*
elInfoSmall
,
*
elInfoLarge
);
return
true
;
}
...
...
@@ -92,12 +94,12 @@ namespace AMDiS {
ElInfo
**
elInfoLarge
)
{
// call standard traverse
if
(
inc1
_
)
{
if
(
inc1
)
{
do
{
*
elInfo1
=
stack1
.
traverseNext
(
*
elInfo1
);
}
while
(
*
elInfo1
!=
NULL
&&
skipEl1
(
*
elInfo1
));
}
while
(
*
elInfo1
!=
NULL
&&
skipEl1
(
*
elInfo1
));
}
if
(
inc2
_
)
{
if
(
inc2
)
{
do
{
*
elInfo2
=
stack2
.
traverseNext
(
*
elInfo2
);
}
while
(
*
elInfo2
!=
NULL
&&
skipEl2
(
*
elInfo2
));
...
...
@@ -120,7 +122,9 @@ namespace AMDiS {
(
callLeafElLevel2_
&&
!
(
*
elInfo2
)
->
getElement
()
->
isLeaf
()))
{
return
traverseNext
(
elInfo1
,
elInfo2
,
elInfoSmall
,
elInfoLarge
);
}
fillSubElInfo
(
*
elInfo1
,
*
elInfo2
,
*
elInfoSmall
,
*
elInfoLarge
);
return
true
;
}
...
...
@@ -139,22 +143,39 @@ namespace AMDiS {
*
elInfo1
:
*
elInfo2
;
int
smallLevel
=
(
*
elInfoSmall
)
->
getLevel
();
int
largeLevel
=
(
*
elInfoLarge
)
->
getLevel
();
// update rest
rest
_
-=
1.0
/
(
1
<<
(
small
Level
-
large
Level
));
rest
-=
1.0
/
(
1
<<
(
(
*
elInfoSmall
)
->
get
Level
()
-
(
*
elInfoLarge
)
->
get
Level
()
));
if
(
rest
_
<
1e-32
)
{
if
(
rest
<
1e-32
)
{
// large element finished -> increment both elements
rest
_
=
1.0
;
inc1
_
=
true
;
inc2
_
=
true
;
rest
=
1.0
;
inc1
=
true
;
inc2
=
true
;
}
else
{
// increment only small element
inc1
_
=
(
*
elInfo1
==
*
elInfoSmall
)
?
true
:
false
;
inc2
_
=
(
*
elInfo2
==
*
elInfoSmall
)
?
true
:
false
;
inc1
=
(
*
elInfo1
==
*
elInfoSmall
)
?
true
:
false
;
inc2
=
(
*
elInfo2
==
*
elInfoSmall
)
?
true
:
false
;
}
}
void
DualTraverse
::
fillSubElInfo
(
ElInfo
*
elInfo1
,
ElInfo
*
elInfo2
,
ElInfo
*
elInfoSmall
,
ElInfo
*
elInfoLarge
)
{
if
(
!
fillSubElemInfo
)
return
;
VectorOfFixVecs
<
DimVec
<
double
>
>
*
subCoords
=
elInfoSmall
->
getSubElemCoords
();
if
(
!
subCoords
)
{
subCoords
=
NEW
VectorOfFixVecs
<
DimVec
<
double
>
>
(
1
,
2
,
NO_INIT
);
}
if
(
elInfo1
==
elInfoSmall
)
{
stack1
.
getCoordsInElem
(
elInfo2
,
subCoords
);
}
else
{
stack2
.
getCoordsInElem
(
elInfo1
,
subCoords
);
}
elInfoSmall
->
setSubElemCoords
(
subCoords
);
}
}
AMDiS/src/DualTraverse.h
View file @
ab48be0c
...
...
@@ -43,7 +43,11 @@ namespace AMDiS {
public:
MEMORY_MANAGED
(
DualTraverse
);
virtual
~
DualTraverse
()
{};
DualTraverse
()
:
fillSubElemInfo
(
false
)
{};
~
DualTraverse
()
{};
/** \brief
* Start dual traversal
...
...
@@ -67,23 +71,27 @@ namespace AMDiS {
ElInfo
**
elInfoSmall
,
ElInfo
**
elInfoLarge
);
virtual
bool
skipEl1
(
ElInfo
*
elInfo
)
{
bool
skipEl1
(
ElInfo
*
elInfo
)
{
return
false
;
}
;
}
virtual
bool
skipEl2
(
ElInfo
*
elInfo
)
{
bool
skipEl2
(
ElInfo
*
elInfo
)
{
return
false
;
}
;
}
virtual
bool
check
(
ElInfo
**
elInfo1
,
ElInfo
**
elInfo2
,
ElInfo
**
elInfoSmall
,
ElInfo
**
elInfoLarge
)
bool
check
(
ElInfo
**
elInfo1
,
ElInfo
**
elInfo2
,
ElInfo
**
elInfoSmall
,
ElInfo
**
elInfoLarge
)
{
prepareNextStep
(
elInfo1
,
elInfo2
,
elInfoSmall
,
elInfoLarge
);
return
true
;
}
;
}
inline
void
setFillSubElemInfo
(
bool
b
)
{
fillSubElemInfo
=
b
;
}
protected:
/** \brief
* Determines smaller and larger element, determines which element(s) has to
...
...
@@ -94,6 +102,11 @@ namespace AMDiS {
ElInfo
**
elInfoSmall
,
ElInfo
**
elInfoLarge
);
void
fillSubElInfo
(
ElInfo
*
elInfo1
,
ElInfo
*
elInfo2
,
ElInfo
*
elInfoSmall
,
ElInfo
*
elInfoLarge
);
protected:
/** \brief
* stack for mesh 1
...
...
@@ -109,17 +122,17 @@ namespace AMDiS {
* used to determine whether all small elements belonging to the large
* element are traversed.
*/
double
rest
_
;
double
rest
;
/** \brief
* true is element 1 should be incremented (set in prepareNextStep())
*/
bool
inc1
_
;
bool
inc1
;
/** \brief
* true is element 2 should be incremented (set in prepareNextStep())
*/
bool
inc2
_
;
bool
inc2
;
/** \brief
* for level traverse of mesh 1
...
...
@@ -140,6 +153,8 @@ namespace AMDiS {
* for leaf element level traverse of mesh 2
*/
bool
callLeafElLevel2_
;
bool
fillSubElemInfo
;
};
}
...
...
AMDiS/src/ElInfo.cc
View file @
ab48be0c
...
...
@@ -22,6 +22,7 @@ namespace AMDiS {
element_
(
NULL
),
parent_
(
NULL
),
macroElement_
(
NULL
),
subElemCoords
(
NULL
),
coord_
(
mesh_
->
getDim
(),
NO_INIT
),
boundary_
(
mesh_
->
getDim
(),
DEFAULT_VALUE
,
INTERIOR
),
projection_
(
mesh_
->
getDim
(),
NO_INIT
),
...
...
@@ -29,7 +30,9 @@ namespace AMDiS {
neighbour_
(
mesh_
->
getDim
(),
NO_INIT
),
neighbourCoord_
(
mesh_
->
getDim
(),
NO_INIT
),
oppVertex_
(
mesh_
->
getDim
(),
NO_INIT
),
grdLambda_
(
mesh_
->
getDim
(),
NO_INIT
)
grdLambda_
(
mesh_
->
getDim
(),
NO_INIT
),
level_
(
0
),
iChild
(
0
)
{
projection_
.
set
(
NULL
);
...
...
@@ -42,6 +45,9 @@ namespace AMDiS {
ElInfo
::~
ElInfo
()
{
if
(
subElemCoords
)
{
DELETE
subElemCoords
;
}
}
...
...
AMDiS/src/ElInfo.h
View file @
ab48be0c
...
...
@@ -90,6 +90,8 @@ namespace AMDiS {
parent_
=
rhs
.
parent_
;
macroElement_
=
rhs
.
macroElement_
;
fillFlag_
=
rhs
.
fillFlag_
;
level_
=
rhs
.
level_
;
iChild
=
rhs
.
iChild
;
coord_
=
rhs
.
coord_
;
boundary_
=
rhs
.
boundary_
;
oppCoord_
=
rhs
.
oppCoord_
;
...
...
@@ -147,6 +149,12 @@ namespace AMDiS {
return
level_
;
};
/** \brief
* Get ElInfo's \ref iChild
*/
inline
int
getIChild
()
const
{
return
iChild
;
};
/** \brief
* Get ElInfo's \ref coord_[i]. This is a WorldVector<double> filled with the
...
...
@@ -204,7 +212,7 @@ namespace AMDiS {
*/
inline
Element
*
getNeighbour
(
int
i
)
const
{
return
neighbour_
[
i
];
}
;
}
/** \brief
* Get ElInfo's \ref neighbourCoord_[i]
...
...
@@ -218,39 +226,43 @@ namespace AMDiS {
*/
inline
unsigned
char
getOppVertex
(
int
i
)
const
{
return
oppVertex_
[
i
];
}
;
}
virtual
int
getSideOfNeighbour
(
int
i
)
{
return
oppVertex_
[
i
];
}
;
}
/** \brief
* Get ElInfo's \ref det_
*/
inline
double
getDet
()
const
{
return
det_
;
}
;
}
/** \brief
* Returns \ref grdLambda_
*/
inline
const
DimVec
<
WorldVector
<
double
>
>&
getGrdLambda
()
const
{
return
grdLambda_
;
}
;
}
/** \brief
* Returns \ref projection_[i]
*/
inline
Projection
*
getProjection
(
int
i
)
const
{
return
projection_
[
i
];
}
;
}
/** \brief
* Returns \ref parametric_
*/
inline
bool
getParametric
()
{
return
parametric_
;
};
}
inline
VectorOfFixVecs
<
DimVec
<
double
>
>
*
getSubElemCoords
()
{
return
subElemCoords
;
}
/** \} */
...
...
@@ -321,28 +333,32 @@ namespace AMDiS {
*/
inline
void
setBoundary
(
int
i
,
BoundaryType
t
)
{
boundary_
[
i
]
=
newBound
(
boundary_
[
i
],
t
);
}
;
}
/** \brief
* Set \ref projection_[i] = p
*/
inline
void
setProjection
(
int
i
,
Projection
*
p
)
{
projection_
[
i
]
=
p
;
}
;
}
/** \brief
* Set \ref det_ = d
*/
inline
void
setDet
(
double
d
)
{
det_
=
d
;
}
;
}
/** \brief
* Set \ref parametric_ = param
*/
inline
void
setParametric
(
bool
param
)
{
parametric_
=
param
;
};
}