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
amdis
amdis-core
Commits
69292946
Commit
69292946
authored
Oct 02, 2018
by
Praetorius, Simon
Browse files
changed interface of problemStat for grid adaption
parent
280450a6
Changes
11
Hide whitespace changes
Inline
Side-by-side
examples/convection_diffusion.cc
View file @
69292946
...
...
@@ -35,7 +35,7 @@ int main(int argc, char** argv)
prob
.
addDirichletBC
(
predicate
,
0
,
0
,
dbcValues
);
AdaptInfo
adaptInfo
(
"adapt"
);
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
prob
.
solve
(
adaptInfo
);
prob
.
writeFiles
(
adaptInfo
,
true
);
...
...
examples/ellipt.cc
View file @
69292946
...
...
@@ -61,7 +61,7 @@ int main(int argc, char** argv)
h
=
std
::
max
(
h
,
e
.
geometry
().
volume
());
widths
.
push_back
(
h
);
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
prob
.
solve
(
adaptInfo
);
double
errorL2
=
integrate
(
sqr
(
g
-
prob
.
getSolution
(
_0
)),
gridView
,
6
);
...
...
examples/stokes0.cc
View file @
69292946
...
...
@@ -78,7 +78,7 @@ int main(int argc, char** argv)
AdaptInfo
adaptInfo
(
"adapt"
);
// assemble and solve system
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
#ifdef DEBUG_MTL
// write matrix to file
...
...
examples/stokes1.cc
View file @
69292946
...
...
@@ -79,7 +79,7 @@ int main(int argc, char** argv)
AdaptInfo
adaptInfo
(
"adapt"
);
// assemble and solve system
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
#ifdef DEBUG_MTL
// write matrix to file
...
...
examples/stokes3.cc
View file @
69292946
...
...
@@ -62,7 +62,7 @@ int main(int argc, char** argv)
AdaptInfo
adaptInfo
(
"adapt"
);
// assemble and solve system
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
prob
.
solve
(
adaptInfo
);
...
...
examples/vecellipt.cc
View file @
69292946
...
...
@@ -40,7 +40,7 @@ int main(int argc, char** argv)
auto
dbcValues
=
[](
auto
const
&
x
){
return
0.0
;
};
// set value
prob
.
addDirichletBC
(
predicate
,
1
,
1
,
dbcValues
);
prob
.
buildAfter
Coarsen
(
adaptInfo
,
Flag
(
0
));
prob
.
buildAfter
Adapt
(
adaptInfo
,
Flag
(
0
));
#ifdef DEBUG_MTL
// write matrix to file
...
...
src/amdis/ProblemInstatBase.hpp
View file @
69292946
...
...
@@ -43,14 +43,8 @@ namespace AMDiS
/// Implementation of \ref ProblemStatBase::estimate().
virtual
void
estimate
(
AdaptInfo
&
)
override
{
/* by default, do nothing */
}
/// Implementation of \ref ProblemStatBase::buildBeforeRefine().
virtual
void
buildBeforeRefine
(
AdaptInfo
&
,
Flag
)
override
{
/* by default, do nothing */
}
/// Implementation of \ref ProblemStatBase::buildBeforeCoarsen().
virtual
void
buildBeforeCoarsen
(
AdaptInfo
&
,
Flag
)
override
{
/* by default, do nothing */
}
/// Implementation of \ref ProblemStatBase::buildAfterCoarsen().
virtual
void
buildAfterCoarsen
(
AdaptInfo
&
,
Flag
,
bool
,
bool
)
override
{
/* by default, do nothing */
}
/// Implementation of \ref ProblemStatBase::buildAfterAdapt().
virtual
void
buildAfterAdapt
(
AdaptInfo
&
,
Flag
,
bool
,
bool
)
override
{
/* by default, do nothing */
}
/// Implementation of \ref ProblemStatBase::markElements().
virtual
Flag
markElements
(
AdaptInfo
&
)
override
...
...
@@ -59,13 +53,7 @@ namespace AMDiS
}
/// Implementation of \ref ProblemStatBase::refineMesh().
virtual
Flag
refineMesh
(
AdaptInfo
&
)
override
{
return
0
;
}
/// Implementation of \ref ProblemStatBase::coarsenMesh().
virtual
Flag
coarsenMesh
(
AdaptInfo
&
)
override
virtual
Flag
adaptGrid
(
AdaptInfo
&
)
override
{
return
0
;
}
...
...
src/amdis/ProblemStat.hpp
View file @
69292946
...
...
@@ -147,10 +147,10 @@ namespace AMDiS
bool
storeMatrixData
=
false
)
override
;
/// Implementation of \ref ProblemStatBase::buildAfterCoarse
virtual
void
buildAfter
Coarsen
(
AdaptInfo
&
adaptInfo
,
Flag
flag
,
bool
asmMatrix
=
true
,
bool
asmVector
=
true
)
override
;
virtual
void
buildAfter
Adapt
(
AdaptInfo
&
adaptInfo
,
Flag
flag
,
bool
asmMatrix
=
true
,
bool
asmVector
=
true
)
override
;
/// Writes output files.
void
writeFiles
(
AdaptInfo
&
adaptInfo
,
bool
force
=
false
);
...
...
@@ -319,20 +319,11 @@ namespace AMDiS
return
StandardProblemIteration
::
oneIteration
(
adaptInfo
,
toDo
);
}
/// Implementation of \ref ProblemStatBase::buildBeforeRefine.
virtual
void
buildBeforeRefine
(
AdaptInfo
&
,
Flag
)
override
{
/* Does nothing. */
}
/// Implementation of \ref ProblemStatBase::buildBeforeCoarsen.
virtual
void
buildBeforeCoarsen
(
AdaptInfo
&
,
Flag
)
override
{
/* Does nothing. */
}
/// Implementation of \ref ProblemStatBase::estimate.
virtual
void
estimate
(
AdaptInfo
&
adaptInfo
)
override
{
/* Does nothing. */
}
/// Implementation of \ref ProblemStatBase::refineMesh.
virtual
Flag
refineMesh
(
AdaptInfo
&
adaptInfo
)
override
{
return
0
;
}
/// Implementation of \ref ProblemStatBase::coarsenMesh.
virtual
Flag
coarsenMesh
(
AdaptInfo
&
adaptInfo
)
override
{
return
0
;
}
virtual
Flag
adaptGrid
(
AdaptInfo
&
adaptInfo
)
override
;
/// Implementation of \ref ProblemStatBase::markElements.
virtual
Flag
markElements
(
AdaptInfo
&
adaptInfo
)
override
;
...
...
src/amdis/ProblemStat.inc.hpp
View file @
69292946
...
...
@@ -13,7 +13,6 @@
#include
<amdis/LocalAssembler.hpp>
#include
<amdis/GridFunctionOperator.hpp>
#include
<amdis/common/Loops.hpp>
// #include <amdis/Estimator.hpp>
namespace
AMDiS
{
...
...
@@ -324,18 +323,32 @@ Flag ProblemStat<Traits>::markElements(AdaptInfo& adaptInfo)
}
template
<
class
Traits
>
Flag
ProblemStat
<
Traits
>::
adaptGrid
(
AdaptInfo
&
adaptInfo
)
{
Dune
::
Timer
t
;
grid_
->
preAdapt
();
grid_
->
adapt
();
globalBasis_
->
update
(
gridView
());
grid_
->
postAdapt
();
msg
(
"Grid adaption needed {} seconds"
,
t
.
elapsed
());
return
0
;
}
template
<
class
Traits
>
void
ProblemStat
<
Traits
>::
buildAfter
Coarsen
(
AdaptInfo
&
/*adaptInfo*/
,
Flag
/*flag*/
,
bool
asmMatrix
,
bool
asmVector
)
buildAfter
Adapt
(
AdaptInfo
&
/*adaptInfo*/
,
Flag
/*flag*/
,
bool
asmMatrix
,
bool
asmVector
)
{
Dune
::
Timer
t
;
Assembler
<
Traits
>
assembler
(
*
globalBasis_
,
matrixOperators_
,
rhsOperators_
,
constraints_
);
auto
gv
=
grid_
->
leafGridView
();
globalBasis_
->
update
(
gv
);
assembler
.
assemble
(
*
systemMatrix_
,
*
solution_
,
*
rhs_
,
asmMatrix
,
asmVector
);
msg
(
"buildAfter
Coarsen
needed {} seconds"
,
t
.
elapsed
());
msg
(
"buildAfter
Adapt
needed {} seconds"
,
t
.
elapsed
());
}
...
...
src/amdis/ProblemStatBase.hpp
View file @
69292946
...
...
@@ -64,25 +64,16 @@ namespace AMDiS
/// Marks mesh elements for refinement and coarsening.
virtual
Flag
markElements
(
AdaptInfo
&
adaptInfo
)
=
0
;
/// Assembling of system matrices and vectors before refinement.
virtual
void
buildBeforeRefine
(
AdaptInfo
&
adaptInfo
,
Flag
flag
)
=
0
;
/// Assembling of system matrices and vectors before coarsening.
virtual
void
buildBeforeCoarsen
(
AdaptInfo
&
adaptInfo
,
Flag
flag
)
=
0
;
/** \brief
* Assembling of system matrices and vectors after coarsening.
* By the last two parameters, assembling can be restricted to either
* matrices or vectors only.
*/
virtual
void
buildAfter
Coarsen
(
AdaptInfo
&
adaptInfo
,
Flag
flag
,
virtual
void
buildAfter
Adapt
(
AdaptInfo
&
adaptInfo
,
Flag
flag
,
bool
assembleMatrix
,
bool
assembleVector
)
=
0
;
/// Refinement of the mesh.
virtual
Flag
refineMesh
(
AdaptInfo
&
adaptInfo
)
=
0
;
/// Coarsening of the mesh.
virtual
Flag
coarsenMesh
(
AdaptInfo
&
adaptInfo
)
=
0
;
/// Refinement/coarsening of the grid.
virtual
Flag
adaptGrid
(
AdaptInfo
&
adaptInfo
)
=
0
;
/** \brief
* Solves the assembled system. The result is an approximative solution.
...
...
src/amdis/StandardProblemIteration.cpp
View file @
69292946
...
...
@@ -66,25 +66,14 @@ namespace AMDiS
else
markFlag
=
3
;
if
(
toDo
.
isSet
(
BUILD
))
problem_
.
buildBeforeRefine
(
adaptInfo
,
markFlag
);
// refine
if
(
toDo
.
isSet
(
ADAPT
)
&&
markFlag
.
isSet
(
MESH_REFINED
))
flag
=
problem_
.
refineMesh
(
adaptInfo
);
if
(
toDo
.
isSet
(
BUILD
))
problem_
.
buildBeforeCoarsen
(
adaptInfo
,
markFlag
);
// coarsen
if
(
toDo
.
isSet
(
ADAPT
)
&&
markFlag
.
isSet
(
MESH_COARSENED
))
flag
|=
problem_
.
coarsenMesh
(
adaptInfo
);
if
(
toDo
.
isSet
(
ADAPT
)
&&
(
markFlag
.
isSet
(
MESH_REFINED
)
||
markFlag
.
isSet
(
MESH_COARSENED
)))
flag
|=
problem_
.
adaptGrid
(
adaptInfo
);
if
(
toDo
.
isSet
(
BUILD
))
problem_
.
buildAfter
Coarsen
(
adaptInfo
,
markFlag
,
true
,
true
);
problem_
.
buildAfter
Adapt
(
adaptInfo
,
markFlag
,
true
,
true
);
if
(
toDo
.
isSet
(
BUILD_RHS
))
problem_
.
buildAfter
Coarsen
(
adaptInfo
,
markFlag
,
false
,
true
);
problem_
.
buildAfter
Adapt
(
adaptInfo
,
markFlag
,
false
,
true
);
return
flag
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment