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
Praetorius, Simon
dune-amdis
Commits
e4baaf0f
Commit
e4baaf0f
authored
Dec 28, 2017
by
Praetorius, Simon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
assembler clened up, functors added
parent
3db71639
Changes
82
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
82 changed files
with
2210 additions
and
2042 deletions
+2210
-2042
CMakeLists.txt
CMakeLists.txt
+25
-2
cmake/modules/AMDiSCXXFeatures.cmake
cmake/modules/AMDiSCXXFeatures.cmake
+33
-0
cmake/modules/AmdisMacros.cmake
cmake/modules/AmdisMacros.cmake
+2
-0
config.h.cmake
config.h.cmake
+7
-1
dune/amdis/AdaptInfo.hpp
dune/amdis/AdaptInfo.hpp
+1
-1
dune/amdis/Assembler.inc.hpp
dune/amdis/Assembler.inc.hpp
+1
-1
dune/amdis/CMakeLists.txt
dune/amdis/CMakeLists.txt
+22
-81
dune/amdis/GridFunctionOperator.hpp
dune/amdis/GridFunctionOperator.hpp
+70
-66
dune/amdis/GridFunctions.hpp
dune/amdis/GridFunctions.hpp
+8
-0
dune/amdis/Initfile.hpp
dune/amdis/Initfile.hpp
+1
-1
dune/amdis/LocalAssembler.hpp
dune/amdis/LocalAssembler.hpp
+1
-1
dune/amdis/Operations.hpp
dune/amdis/Operations.hpp
+8
-0
dune/amdis/Operators.hpp
dune/amdis/Operators.hpp
+18
-18
dune/amdis/ProblemStat.hpp
dune/amdis/ProblemStat.hpp
+3
-16
dune/amdis/ProblemStat.inc.hpp
dune/amdis/ProblemStat.inc.hpp
+14
-29
dune/amdis/Terms.hpp
dune/amdis/Terms.hpp
+0
-6
dune/amdis/assembler/CMakeLists.txt
dune/amdis/assembler/CMakeLists.txt
+21
-0
dune/amdis/assembler/FirstOrderDivTestvecTrial.hpp
dune/amdis/assembler/FirstOrderDivTestvecTrial.hpp
+9
-6
dune/amdis/assembler/FirstOrderGradTestTrial.hpp
dune/amdis/assembler/FirstOrderGradTestTrial.hpp
+6
-6
dune/amdis/assembler/FirstOrderGradTestTrialvec.hpp
dune/amdis/assembler/FirstOrderGradTestTrialvec.hpp
+6
-6
dune/amdis/assembler/FirstOrderPartialTestTrial.hpp
dune/amdis/assembler/FirstOrderPartialTestTrial.hpp
+6
-6
dune/amdis/assembler/FirstOrderTestDivTrialvec.hpp
dune/amdis/assembler/FirstOrderTestDivTrialvec.hpp
+10
-12
dune/amdis/assembler/FirstOrderTestGradTrial.hpp
dune/amdis/assembler/FirstOrderTestGradTrial.hpp
+11
-13
dune/amdis/assembler/FirstOrderTestPartialTrial.hpp
dune/amdis/assembler/FirstOrderTestPartialTrial.hpp
+11
-13
dune/amdis/assembler/FirstOrderTestvecGradTrial.hpp
dune/amdis/assembler/FirstOrderTestvecGradTrial.hpp
+10
-12
dune/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp
dune/amdis/assembler/SecondOrderDivTestvecDivTrialvec.hpp
+11
-15
dune/amdis/assembler/SecondOrderGradTestGradTrial.hpp
dune/amdis/assembler/SecondOrderGradTestGradTrial.hpp
+17
-23
dune/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp
dune/amdis/assembler/SecondOrderPartialTestPartialTrial.hpp
+11
-13
dune/amdis/assembler/ZeroOrderTest.hpp
dune/amdis/assembler/ZeroOrderTest.hpp
+10
-12
dune/amdis/assembler/ZeroOrderTestTrial.hpp
dune/amdis/assembler/ZeroOrderTestTrial.hpp
+14
-21
dune/amdis/assembler/ZeroOrderTestTrialvec.hpp
dune/amdis/assembler/ZeroOrderTestTrialvec.hpp
+13
-14
dune/amdis/assembler/ZeroOrderTestvec.hpp
dune/amdis/assembler/ZeroOrderTestvec.hpp
+12
-13
dune/amdis/assembler/ZeroOrderTestvecTrial.hpp
dune/amdis/assembler/ZeroOrderTestvecTrial.hpp
+6
-6
dune/amdis/assembler/ZeroOrderTestvecTrialvec.hpp
dune/amdis/assembler/ZeroOrderTestvecTrialvec.hpp
+15
-21
dune/amdis/common/Assigner.hpp
dune/amdis/common/Assigner.hpp
+53
-0
dune/amdis/common/CMakeLists.txt
dune/amdis/common/CMakeLists.txt
+21
-0
dune/amdis/common/Concepts.hpp
dune/amdis/common/Concepts.hpp
+14
-0
dune/amdis/common/FieldMatVec.hpp
dune/amdis/common/FieldMatVec.hpp
+8
-7
dune/amdis/common/Math.hpp
dune/amdis/common/Math.hpp
+52
-3
dune/amdis/common/Mpl.hpp
dune/amdis/common/Mpl.hpp
+3
-0
dune/amdis/common/Operations.hpp
dune/amdis/common/Operations.hpp
+0
-287
dune/amdis/common/TupleUtility.hpp
dune/amdis/common/TupleUtility.hpp
+1
-0
dune/amdis/common/ValueCategory.hpp
dune/amdis/common/ValueCategory.hpp
+1
-1
dune/amdis/gridfunctions/AnalyticGridFunction.hpp
dune/amdis/gridfunctions/AnalyticGridFunction.hpp
+105
-67
dune/amdis/gridfunctions/CMakeLists.txt
dune/amdis/gridfunctions/CMakeLists.txt
+14
-0
dune/amdis/gridfunctions/ConstantGridFunction.hpp
dune/amdis/gridfunctions/ConstantGridFunction.hpp
+78
-18
dune/amdis/gridfunctions/CoordsGridFunction.hpp
dune/amdis/gridfunctions/CoordsGridFunction.hpp
+83
-69
dune/amdis/gridfunctions/DOFVectorView.hpp
dune/amdis/gridfunctions/DOFVectorView.hpp
+17
-7
dune/amdis/gridfunctions/DOFVectorView.inc.hpp
dune/amdis/gridfunctions/DOFVectorView.inc.hpp
+2
-0
dune/amdis/gridfunctions/DerivativeGridFunction.hpp
dune/amdis/gridfunctions/DerivativeGridFunction.hpp
+33
-10
dune/amdis/gridfunctions/FunctorGridFunction.hpp
dune/amdis/gridfunctions/FunctorGridFunction.hpp
+175
-120
dune/amdis/gridfunctions/GridFunctionConcepts.hpp
dune/amdis/gridfunctions/GridFunctionConcepts.hpp
+25
-8
dune/amdis/gridfunctions/Integrate.hpp
dune/amdis/gridfunctions/Integrate.hpp
+35
-0
dune/amdis/gridfunctions/OperationsGridFunction.hpp
dune/amdis/gridfunctions/OperationsGridFunction.hpp
+90
-10
dune/amdis/io/CMakeLists.txt
dune/amdis/io/CMakeLists.txt
+5
-0
dune/amdis/linear_algebra/CMakeLists.txt
dune/amdis/linear_algebra/CMakeLists.txt
+29
-0
dune/amdis/linear_algebra/istl/CMakeLists.txt
dune/amdis/linear_algebra/istl/CMakeLists.txt
+17
-0
dune/amdis/linear_algebra/mtl/CMakeLists.txt
dune/amdis/linear_algebra/mtl/CMakeLists.txt
+24
-0
dune/amdis/operations/Arithmetic.hpp
dune/amdis/operations/Arithmetic.hpp
+256
-0
dune/amdis/operations/Basic.hpp
dune/amdis/operations/Basic.hpp
+127
-0
dune/amdis/operations/CMakeLists.txt
dune/amdis/operations/CMakeLists.txt
+10
-0
dune/amdis/operations/CMath.hpp
dune/amdis/operations/CMath.hpp
+136
-0
dune/amdis/operations/Composer.hpp
dune/amdis/operations/Composer.hpp
+116
-0
dune/amdis/operations/FieldMatVec.hpp
dune/amdis/operations/FieldMatVec.hpp
+85
-0
dune/amdis/operations/MaxMin.hpp
dune/amdis/operations/MaxMin.hpp
+80
-0
dune/amdis/terms/ConstantTerm.hpp
dune/amdis/terms/ConstantTerm.hpp
+0
-58
dune/amdis/terms/CoordsTerm.hpp
dune/amdis/terms/CoordsTerm.hpp
+0
-153
dune/amdis/terms/DOFVectorTerm.hpp
dune/amdis/terms/DOFVectorTerm.hpp
+0
-331
dune/amdis/terms/ExpressionBase.hpp
dune/amdis/terms/ExpressionBase.hpp
+0
-29
dune/amdis/terms/FunctorTerm.hpp
dune/amdis/terms/FunctorTerm.hpp
+0
-105
dune/amdis/terms/GridViewExpression.hpp
dune/amdis/terms/GridViewExpression.hpp
+0
-56
dune/amdis/terms/Interpolation.hpp
dune/amdis/terms/Interpolation.hpp
+0
-47
dune/amdis/terms/LocalExpression.hpp
dune/amdis/terms/LocalExpression.hpp
+0
-78
dune/amdis/terms/TermGenerator.hpp
dune/amdis/terms/TermGenerator.hpp
+0
-117
dune/amdis/utility/CMakeLists.txt
dune/amdis/utility/CMakeLists.txt
+21
-0
dune/amdis/utility/GetDegree.hpp
dune/amdis/utility/GetDegree.hpp
+1
-1
src/CMakeLists.txt
src/CMakeLists.txt
+2
-2
src/ellipt.cc
src/ellipt.cc
+0
-1
src/expressions.cc
src/expressions.cc
+76
-18
src/heat.cc
src/heat.cc
+2
-2
src/stokes1.cc
src/stokes1.cc
+0
-1
src/vecellipt.cc
src/vecellipt.cc
+0
-1
No files found.
CMakeLists.txt
View file @
e4baaf0f
cmake_minimum_required
(
VERSION 3.1
)
project
(
dune-amdis CXX
)
set
(
CXX_MAX_STANDARD 14 CACHE BOOL
""
FORCE
)
#
set(CXX_MAX_STANDARD 14 CACHE BOOL "" FORCE)
if
(
NOT
(
dune-common_DIR OR dune-common_ROOT OR
"
${
CMAKE_PREFIX_PATH
}
"
MATCHES
".*dune-common.*"
))
...
...
@@ -20,11 +20,34 @@ include(DuneMacros)
# start a dune project with information from dune.module
dune_project
()
dune_enable_all_packages
()
dune_enable_all_packages
(
MODULE_LIBRARIES amdis
)
include
(
AmdisMacros
)
add_subdirectory
(
"src"
)
add_subdirectory
(
"dune"
)
add_subdirectory
(
"doc"
)
add_subdirectory
(
"cmake/modules"
)
# some additional packages and flags
add_dune_alberta_flags
(
"amdis"
OBJECT USE_GENERIC
)
target_compile_definitions
(
"amdis"
PUBLIC AMDIS_BACKEND_MTL=1
)
target_compile_options
(
"amdis"
PUBLIC -ftemplate-backtrace-limit=0 -Wall -pedantic -Wno-unused-parameter
)
find_package
(
MTL REQUIRED
PATHS /usr/local/lib/mtl4 /opt/sources/mtl4 /opt/development/mtl4
)
if
(
MTL_FOUND
)
target_include_directories
(
"amdis"
PUBLIC
${
MTL_INCLUDE_DIRS
}
)
set
(
CXX_ELEVEN_FEATURE_LIST
"MOVE"
"AUTO"
"RANGEDFOR"
"INITLIST"
"STATICASSERT"
"DEFAULTIMPL"
)
foreach
(
feature
${
CXX_ELEVEN_FEATURE_LIST
}
)
target_compile_definitions
(
"amdis"
PUBLIC MTL_WITH_
${
feature
}
)
endforeach
()
if
(
HAVE_UMFPACK OR ENABLE_SUITESPARSE OR SuiteSparse_FOUND
)
target_compile_definitions
(
"amdis"
PUBLIC MTL_HAS_UMFPACK
)
endif
()
endif
(
MTL_FOUND
)
# finalize the dune project, e.g. generating config.h etc.
finalize_dune_project
(
GENERATE_CONFIG_H_CMAKE
)
cmake/modules/AMDiSCXXFeatures.cmake
0 → 100644
View file @
e4baaf0f
#include(CheckIncludeFileCXX)
include
(
CheckCXXSourceCompiles
)
#include(CheckCXXSymbolExists)
# fold expressions (a + ...)
check_cxx_source_compiles
(
"
template <class... Args>
int f(Args... args)
{
return (args + ...);
}
int main()
{
f(0,1,2,3,4,5);
}
"
AMDIS_HAS_CXX_FOLD_EXPRESSION
)
check_cxx_source_compiles
(
"
template <int I>
auto f()
{
if constexpr(I == 0)
return double{1.0};
else
return int{0};
}
int main()
{
return f<1>();
}
"
AMDIS_HAS_CXX_CONSTEXPR_IF
)
\ No newline at end of file
cmake/modules/AmdisMacros.cmake
View file @
e4baaf0f
# File for module specific CMake tests.
include
(
AMDiSCXXFeatures
)
\ No newline at end of file
config.h.cmake
View file @
e4baaf0f
...
...
@@ -40,6 +40,12 @@
/* Define to the revision of amdis */
#define AMDIS_VERSION_REVISION @AMDIS_VERSION_REVISION@
/* end amdis
/* some detected compiler features may be used in AMDiS */
#cmakedefine AMDIS_HAS_CXX_FOLD_EXPRESSIONS 1
#cmakedefine AMDIS_HAS_CXX_CONSTEXPR_IF 1
/* end dune-amdis
Everything below here will be overwritten
*/
dune/amdis/AdaptInfo.hpp
View file @
e4baaf0f
...
...
@@ -9,7 +9,7 @@
// AMDiS includes
#include <dune/amdis/Output.hpp>
#include <dune/amdis/Math.hpp>
#include <dune/amdis/
common/
Math.hpp>
namespace
AMDiS
{
...
...
dune/amdis/Assembler.inc.hpp
View file @
e4baaf0f
...
...
@@ -4,7 +4,7 @@
#include <dune/amdis/utility/TreePath.hpp>
#include <dune/amdis/utility/Visitor.hpp>
#include <dune/amdis/Math.hpp>
#include <dune/amdis/
common/
Math.hpp>
namespace
AMDiS
{
...
...
dune/amdis/CMakeLists.txt
View file @
e4baaf0f
#install headers
dune_
add_
library
(
"duneamdis"
NO_EXPORT
dune_library
_add_sources
(
amdis SOURCES
AdaptBase.cpp
AdaptInfo.cpp
AdaptInstationary.cpp
...
...
@@ -11,33 +11,7 @@ dune_add_library("duneamdis" NO_EXPORT
# ProblemInstat.cpp
ProblemStat.cpp
StandardProblemIteration.cpp
#linear_algebra/istl/SystemMatrix.cpp
#linear_algebra/istl/SystemVector.cpp
linear_algebra/mtl/SystemMatrix.cpp
linear_algebra/mtl/SystemVector.cpp
utility/Filesystem.cpp
)
add_dune_alberta_flags
(
"duneamdis"
OBJECT USE_GENERIC
)
target_compile_definitions
(
"duneamdis"
PUBLIC AMDIS_BACKEND_MTL=1
)
target_compile_options
(
"duneamdis"
PUBLIC -ftemplate-backtrace-limit=0 -Wall -pedantic -Wno-unused-parameter
)
find_package
(
MTL REQUIRED
PATHS /usr/local/lib/mtl4
)
if
(
MTL_FOUND
)
target_include_directories
(
"duneamdis"
PUBLIC
${
MTL_INCLUDE_DIRS
}
)
# target_link_libraries("duneamdis" PUBLIC ${MTL_LIBRARIES})
# target_compile_options("duneamdis" PUBLIC ${MTL_CXX_DEFINITIONS})
set
(
CXX_ELEVEN_FEATURE_LIST
"MOVE"
"AUTO"
"RANGEDFOR"
"INITLIST"
"STATICASSERT"
"DEFAULTIMPL"
)
foreach
(
feature
${
CXX_ELEVEN_FEATURE_LIST
}
)
target_compile_definitions
(
"duneamdis"
PUBLIC MTL_WITH_
${
feature
}
)
endforeach
()
if
(
HAVE_UMFPACK OR ENABLE_SUITESPARSE OR SuiteSparse_FOUND
)
target_compile_definitions
(
"duneamdis"
PUBLIC MTL_HAS_UMFPACK
)
endif
()
endif
(
MTL_FOUND
)
)
install
(
FILES
AdaptBase.hpp
...
...
@@ -45,73 +19,40 @@ install(FILES
AdaptInstationary.hpp
AdaptStationary.hpp
AMDiS.hpp
Assembler.hpp
Assembler.inc.hpp
ContextGeometry.hpp
CreatorInterface.hpp
CreatorMap.hpp
DirichletBC.hpp
DirichletBC.inc.hpp
FileWriter.hpp
Flag.hpp
GridFunctionOperator.hpp
GridFunctions.hpp
Initfile.hpp
LinearAlgebra.hpp
Lo
g
.hpp
Math
.hpp
Lo
calAssembler
.hpp
LocalAssemblerBase
.hpp
Mesh.hpp
OperatorEvaluation.hpp
Operator.hpp
Operator.inc.hpp
OperatorTermBase.hpp
OperatorTerm.hpp
ProblemInstatBase.hpp
Operators.hpp
Output.hpp
ProblemInstat.hpp
ProblemInstat.inc.hpp
ProblemInstatBase.hpp
ProblemInterationInterface.hpp
ProblemStatBase.hpp
ProblemStat.hpp
ProblemStat.inc.hpp
ProblemStatBase.hpp
ProblemStatTraits.hpp
ProblemTimeInterface.hpp
StandardProblemIteration.hpp
TermGenerator.hpp
common/ConceptsBase.hpp
common/ClonablePtr.hpp
common/IndexSeq.hpp
common/Literals.hpp
common/Loops.hpp
common/Mpl.hpp
common/ScalarTypes.hpp
common/Timer.hpp
common/Traits.hpp
common/TupleUtility.hpp
common/Utility.hpp
common/ValueCategory.hpp
linear_algebra/LinearAlgebraBse.hpp
linear_algebra/LinearSolverInterface.hpp
linear_algebra/PreconditionerInterface.hpp
linear_algebra/RunnerInterface.hpp
linear_algebra/SolverInfo.hpp
linear_algebra/istl/DOFMatrix.hpp
linear_algebra/istl/DOFVector.hpp
linear_algebra/istl/ISTL_Preconditioner.hpp
linear_algebra/istl/ISTLRunner.hpp
linear_algebra/istl/ISTL_Solver.hpp
linear_algebra/istl/LinearSolver.hpp
linear_algebra/istl/Preconditioner.hpp
linear_algebra/istl/SystemMatrix.hpp
linear_algebra/istl/SystemVector.hpp
linear_algebra/mtl/BITL_Preconditioner.hpp
linear_algebra/mtl/BITL_Solver.hpp
linear_algebra/mtl/BlockMTLMatrix.hpp
linear_algebra/mtl/BlockMTLVector.hpp
linear_algebra/mtl/Copy.hpp
linear_algebra/mtl/DOFMatrix.hpp
linear_algebra/mtl/DOFVector.hpp
linear_algebra/mtl/ITL_Preconditioner.hpp
linear_algebra/mtl/ITL_Solver.hpp
linear_algebra/mtl/KrylovRunner.hpp
linear_algebra/mtl/LinearSolver.hpp
linear_algebra/mtl/Mapper.hpp
linear_algebra/mtl/MTLDenseVector.hpp
linear_algebra/mtl/Preconditioner.hpp
linear_algebra/mtl/SystemMatrix.hpp
linear_algebra/mtl/SystemVector.hpp
linear_algebra/mtl/UmfpackRunner.hpp
DESTINATION
${
CMAKE_INSTALL_INCLUDEDIR
}
/dune/amdis
)
add_subdirectory
(
"assembler"
)
add_subdirectory
(
"common"
)
add_subdirectory
(
"gridfunctions"
)
add_subdirectory
(
"io"
)
add_subdirectory
(
"linear_algebra"
)
add_subdirectory
(
"operations"
)
add_subdirectory
(
"utility"
)
\ No newline at end of file
dune/amdis/Operator
Base
.hpp
→
dune/amdis/
GridFunction
Operator.hpp
View file @
e4baaf0f
#pragma once
#include <cassert>
#include <type_traits>
#include <dune/amdis/
terms/TermGenerator
.hpp>
#include <dune/amdis/
gridfunctions/GridFunctionConcepts
.hpp>
#include <dune/amdis/utility/GetDegree.hpp>
namespace
AMDiS
{
template
<
class
Expr
>
class
Express
ionOperatorBase
template
<
class
GridFunction
>
class
GridFunct
ionOperatorBase
{
using
LocalFunction
=
decltype
(
localFunction
(
std
::
declval
<
GridFunction
>
()));
using
Element
=
typename
GridFunction
::
EntitySet
::
Element
;
using
Geometry
=
typename
Element
::
Geometry
;
using
LocalCoordinate
=
typename
GridFunction
::
EntitySet
::
LocalCoordinate
;
public:
/// \brief Constructor. Stores a copy of `expr`.
/**
...
...
@@ -17,8 +24,9 @@ namespace AMDiS
* \ref ExpressionBase, and stores a copy. Additionally, it gets the
* differentiation order, to calculate the quadrature degree in \ref getDegree.
**/
ExpressionOperatorBase
(
Expr
const
&
expr
,
int
order
)
:
expr_
(
expr
)
GridFunctionOperatorBase
(
GridFunction
const
&
gridFct
,
int
order
)
:
gridFct_
(
gridFct
)
,
localFct_
(
localFunction
(
gridFct_
))
,
order_
(
order
)
{}
...
...
@@ -28,13 +36,12 @@ namespace AMDiS
* Since all operators need geometry information, the `Element::Geometry`
* object `geometry` is created once, during grid traversal, and passed in.
*
* By default, it binds the \ref
expr
_ to the `element`.
* By default, it binds the \ref
localFct
_ to the `element`.
**/
template
<
class
Element
,
class
Geometry
>
void
bind
(
Element
const
&
element
,
Geometry
const
&
geometry
)
{
if
(
!
bound_
)
{
expr
_
.
bind
(
element
);
localFct
_
.
bind
(
element
);
isSimplex_
=
geometry
.
type
().
isSimplex
();
isAffine_
=
geometry
.
affine
();
bound_
=
true
;
...
...
@@ -45,32 +52,14 @@ namespace AMDiS
void
unbind
()
{
bound_
=
false
;
initSize_
=
0
;
expr_
.
unbind
();
}
/// \brief Evaluate expression at quadrature points.
/**
* Initialization at all points `quad[iq].position()` where
* `iq` in `[0, quad.size())`.
*
* \param context Container for localContext, localGeometry and geometry, see \ref LocalAssembler
* \param quad Liste of evaluations points. Follows interface of \ref Dune::QuadratureRule
**/
template
<
class
Context
,
class
Quad
>
void
init
(
Context
const
&
context
,
Quad
const
&
quad
)
{
if
(
initSize_
!=
quad
.
size
())
{
expr_
.
init
(
context
,
quad
);
initSize_
=
quad
.
size
();
}
localFct_
.
unbind
();
}
/// Return expressions iq'th value. Must be initialized in \ref init before.
auto
eval
(
std
::
size_t
iq
)
const
auto
coefficient
(
LocalCoordinate
const
&
local
)
const
{
assert
(
initSize_
>
0u
);
return
expr_
[
iq
]
;
assert
(
bound_
);
return
localFct_
(
local
)
;
}
...
...
@@ -86,9 +75,9 @@ namespace AMDiS
assert
(
bound_
);
int
psiDegree
=
getPolynomialDegree
(
node
);
int
term
Degree
=
expr_
.
getDegree
(
);
int
coeff
Degree
=
order
(
localFct_
);
int
degree
=
psiDegree
+
term
Degree
;
int
degree
=
psiDegree
+
coeff
Degree
;
if
(
isSimplex_
)
degree
-=
order_
;
if
(
isAffine_
)
...
...
@@ -111,9 +100,9 @@ namespace AMDiS
int
psiDegree
=
getPolynomialDegree
(
rowNode
);
int
phiDegree
=
getPolynomialDegree
(
colNode
);
int
term
Degree
=
expr_
.
getDegree
(
);
int
coeff
Degree
=
order
(
localFct_
);
int
degree
=
psiDegree
+
phiDegree
+
term
Degree
;
int
degree
=
psiDegree
+
phiDegree
+
coeff
Degree
;
if
(
isSimplex_
)
degree
-=
order_
;
if
(
isAffine_
)
...
...
@@ -122,45 +111,31 @@ namespace AMDiS
return
degree
;
}
protected:
Expr
&
expr
()
{
return
expr_
;
}
Expr
const
&
expr
()
const
{
return
expr_
;
}
private:
GridFunction
gridFct_
;
LocalFunction
localFct_
;
Expr
expr_
;
//< the stores expression, see \ref ExpressionBase
int
order_
;
//< the derivative order of this operator
bool
isSimplex_
=
false
;
//< the bound element is a simplex
bool
isAffine_
=
false
;
//< the bound geometry is affine
bool
bound_
=
false
;
//< an element is bound to the operator
std
::
size_t
initSize_
=
0
;
//< number of quadrature points, the expression was evaluated at.
};
/// A default implementation of an
Express
ionOperator if no specialization is available.
/// A default implementation of an
GridFunct
ionOperator if no specialization is available.
/**
* An operator must implement either \ref calculateElementVector, or
* \ref calculateElementMatrix, if it is a vector or matrix operator,
* respectively.
**/
template
<
class
Tag
,
class
Expr
>
class
Express
ionOperator
:
public
Express
ionOperatorBase
<
Expr
>
template
<
class
Tag
,
class
GridFct
>
class
GridFunct
ionOperator
:
public
GridFunct
ionOperatorBase
<
GridFct
>
{
public:
Express
ionOperator
(
Tag
,
Expr
const
&
expr
)
:
Express
ionOperatorBase
<
Expr
>
(
expr
,
0
)
GridFunct
ionOperator
(
Tag
,
GridFct
const
&
gridFct
)
:
GridFunct
ionOperatorBase
<
GridFct
>
(
gridFct
,
0
)
{}
/// Assemble a local element vector on the element that is bound.
...
...
@@ -191,21 +166,50 @@ namespace AMDiS
}
};
template
<
class
Tag
,
class
Expr
>
struct
ExpressionPreOperator
{
Tag
tag
;
Expr
expr
;
};
/// Store tag and expression in struct
template
<
class
Tag
,
class
Expr
>
auto
makeOperator
(
Tag
t
,
Expr
const
&
expr
)
{
return
ExpressionPreOperator
<
Tag
,
Expr
>
{
t
,
expr
};
}
/// Generate an \ref GridFunctionOperator from a PreOperator (tag, expr).
template
<
class
Tag
,
class
Expr
,
class
GridView
>
auto
makeGridOperator
(
ExpressionPreOperator
<
Tag
,
Expr
>
const
&
op
,
GridView
const
&
gridView
)
{
auto
gridFct
=
makeGridFunction
(
op
.
expr
,
gridView
,
Dune
::
PriorityTag
<
42
>
{});
return
GridFunctionOperator
<
Tag
,
decltype
(
gridFct
)
>
{
op
.
tag
,
gridFct
};
}
template
<
class
Tag
,
class
Expr
,
class
GridView
>
auto
makeGridOperator
(
std
::
reference_wrapper
<
ExpressionPreOperator
<
Tag
,
Expr
>>
op
,
GridView
const
&
gridView
)
{
ExpressionPreOperator
<
Tag
,
Expr
>
const
&
op_ref
=
op
;
auto
gridFct
=
makeGridFunction
(
std
::
ref
(
op_ref
.
expr
),
gridView
,
Dune
::
PriorityTag
<
42
>
{});
return
GridFunctionOperator
<
Tag
,
decltype
(
gridFct
)
>
{
op_ref
.
tag
,
gridFct
};
}
/// Generate a
n \ref ExpressionOperator with a given tag `t` and pre-expression `epxr`
.
template
<
class
Tag
,
class
Pre
Expr
>
auto
makeOperator
(
Tag
t
,
Pre
Expr
const
&
expr
)
/// Generate a
shared_ptr to \ref GridFunctionOperator from a PreOperator (tag, expr)
.
template
<
class
Tag
,
class
Expr
,
class
GridView
>
auto
make
Grid
Operator
Ptr
(
ExpressionPreOperator
<
Tag
,
Expr
>
const
&
op
,
GridView
const
&
gridView
)
{
using
Expr
=
ToTerm_t
<
PreExpr
>
;
return
ExpressionOperator
<
Tag
,
Expr
>
{
t
,
toTerm
(
expr
)}
;
auto
gridFct
=
makeGridFunction
(
op
.
expr
,
gridView
,
Dune
::
PriorityTag
<
42
>
{})
;
return
std
::
make_shared
<
GridFunctionOperator
<
Tag
,
decltype
(
gridFct
)
>>
(
op
.
tag
,
gridFct
)
;
}
/// Generate a shared_ptr to \ref ExpressionOperator with a given tag `t` and pre-expression `epxr`.
template
<
class
Tag
,
class
PreExpr
>
auto
makeOperatorPtr
(
Tag
t
,
PreExpr
const
&
expr
)
template
<
class
Tag
,
class
Expr
,
class
GridView
>
auto
makeGridOperatorPtr
(
std
::
reference_wrapper
<
ExpressionPreOperator
<
Tag
,
Expr
>>
op
,
GridView
const
&
gridView
)
{
using
Expr
=
ToTerm_t
<
PreExpr
>
;
return
std
::
make_shared
<
ExpressionOperator
<
Tag
,
Expr
>>
(
t
,
toTerm
(
expr
));
ExpressionPreOperator
<
Tag
,
Expr
>
const
&
op_ref
=
op
;
auto
gridFct
=
makeGridFunction
(
std
::
ref
(
op_ref
.
expr
),
gridView
,
Dune
::
PriorityTag
<
42
>
{});
return
std
::
make_shared
<
GridFunctionOperator
<
Tag
,
decltype
(
gridFct
)
>>
(
op_ref
.
tag
,
gridFct
);
}
}
// end namespace AMDiS
dune/amdis/GridFunctions.hpp
0 → 100644
View file @
e4baaf0f
#pragma once
#include <dune/amdis/gridfunctions/AnalyticGridFunction.hpp>
#include <dune/amdis/gridfunctions/ConstantGridFunction.hpp>
#include <dune/amdis/gridfunctions/CoordsGridFunction.hpp>
#include <dune/amdis/gridfunctions/DerivativeGridFunction.hpp>
#include <dune/amdis/gridfunctions/FunctorGridFunction.hpp>
#include <dune/amdis/gridfunctions/OperationsGridFunction.hpp>
dune/amdis/Initfile.hpp
View file @
e4baaf0f
...
...
@@ -16,7 +16,7 @@
#include <dune/common/fvector.hh>
#include <dune/amdis/Output.hpp>
#include <dune/amdis/Math.hpp>
#include <dune/amdis/
common/
Math.hpp>
namespace
AMDiS
{
...
...
dune/amdis/LocalAssembler.hpp
View file @
e4baaf0f
...
...
@@ -189,7 +189,7 @@ namespace AMDiS
private:
std
::
unique_ptr
<
Operator
>
storage_
;
//< the stored operator, implementing \ref
Express
ionOperatorBase
std
::
unique_ptr
<
Operator
>
storage_
;
//< the stored operator, implementing \ref
GridFunct
ionOperatorBase
Operator
&
op_
;
Element
const
*
element_
=
nullptr
;
...
...
dune/amdis/Operations.hpp
0 → 100644
View file @
e4baaf0f
#pragma once
#include <dune/amdis/operations/Arithmetic.hpp>
#include <dune/amdis/operations/Basic.hpp>
#include <dune/amdis/operations/CMath.hpp>
#include <dune/amdis/operations/Composer.hpp>
#include <dune/amdis/operations/FieldMatVec.hpp>
#include <dune/amdis/operations/MaxMin.hpp>
dune/amdis/Operators.hpp
View file @
e4baaf0f
#pragma once
#include <dune/amdis/LocalAssembler.hpp>
#include <dune/amdis/Operator
Base
.hpp>
#include <dune/amdis/
GridFunction
Operator.hpp>
/**
* In the following comments we use the notation
...
...
@@ -15,25 +15,25 @@
*/
// zero-order operators
#include <dune/amdis/
operators
/ZeroOrderTest.hpp> // <psi * c>
#include <dune/amdis/
operators
/ZeroOrderTestTrial.hpp> // <psi, c * phi>
#include <dune/amdis/
operators
/ZeroOrderTestTrialvec.hpp> // <psi, b * Phi>
#include <dune/amdis/
operators
/ZeroOrderTestvec.hpp> // <Psi * b>
#include <dune/amdis/
operators
/ZeroOrderTestvecTrial.hpp> // <Psi, b * phi>
#include <dune/amdis/
operators
/ZeroOrderTestvecTrialvec.hpp> // <Psi, A * Phi>, <Psi, c * Phi>
#include <dune/amdis/
assembler
/ZeroOrderTest.hpp> // <psi * c>
#include <dune/amdis/
assembler
/ZeroOrderTestTrial.hpp> // <psi, c * phi>
#include <dune/amdis/
assembler
/ZeroOrderTestTrialvec.hpp> // <psi, b * Phi>
#include <dune/amdis/
assembler
/ZeroOrderTestvec.hpp> // <Psi * b>
#include <dune/amdis/
assembler
/ZeroOrderTestvecTrial.hpp> // <Psi, b * phi>
#include <dune/amdis/
assembler
/ZeroOrderTestvecTrialvec.hpp> // <Psi, A * Phi>, <Psi, c * Phi>
// first-order operators
#include <dune/amdis/
operators
/FirstOrderDivTestvecTrial.hpp> // <div(Psi), c * phi>
#include <dune/amdis/
operators
/FirstOrderGradTestTrial.hpp> // <grad(psi), b * phi>
#include <dune/amdis/
operators
/FirstOrderGradTestTrialvec.hpp> // <grad(psi), c * Phi>
#include <dune/amdis/
operators
/FirstOrderPartialTestTrial.hpp> // <d_i(psi), c * psi>
#include <dune/amdis/
operators
/FirstOrderTestDivTrialvec.hpp> // <psi, c * div(Phi)>
#include <dune/amdis/
operators
/FirstOrderTestGradTrial.hpp> // <psi, b * grad(phi)>
#include <dune/amdis/
operators
/FirstOrderTestPartialTrial.hpp> // <psi, c * d_i(phi)>
#include <dune/amdis/
operators
/FirstOrderTestvecGradTrial.hpp> // <Psi, c * grad(phi)>
#include <dune/amdis/
assembler
/FirstOrderDivTestvecTrial.hpp> // <div(Psi), c * phi>
#include <dune/amdis/
assembler
/FirstOrderGradTestTrial.hpp> // <grad(psi), b * phi>
#include <dune/amdis/
assembler
/FirstOrderGradTestTrialvec.hpp> // <grad(psi), c * Phi>
#include <dune/amdis/
assembler
/FirstOrderPartialTestTrial.hpp> // <d_i(psi), c * psi>
#include <dune/amdis/
assembler
/FirstOrderTestDivTrialvec.hpp> // <psi, c * div(Phi)>
#include <dune/amdis/
assembler
/FirstOrderTestGradTrial.hpp> // <psi, b * grad(phi)>
#include <dune/amdis/
assembler
/FirstOrderTestPartialTrial.hpp> // <psi, c * d_i(phi)>
#include <dune/amdis/
assembler
/FirstOrderTestvecGradTrial.hpp> // <Psi, c * grad(phi)>
// second-order operators
#include <dune/amdis/
operators
/SecondOrderDivTestvecDivTrialvec.hpp> // <div(Psi), c * div(Phi)>
#include <dune/amdis/
operators
/SecondOrderGradTestGradTrial.hpp> // <grad(psi), A * grad(phi)>
#include <dune/amdis/
operators
/SecondOrderPartialTestPartialTrial.hpp> // <d_i(psi), c * d_j(phi)>
#include <dune/amdis/
assembler
/SecondOrderDivTestvecDivTrialvec.hpp> // <div(Psi), c * div(Phi)>
#include <dune/amdis/
assembler
/SecondOrderGradTestGradTrial.hpp> // <grad(psi), A * grad(phi)>
#include <dune/amdis/
assembler
/SecondOrderPartialTestPartialTrial.hpp> // <d_i(psi), c * d_j(phi)>
dune/amdis/ProblemStat.hpp
View file @
e4baaf0f
...
...
@@ -31,6 +31,8 @@
#include <dune/amdis/common/TypeDefs.hpp>
#include <dune/amdis/common/Utility.hpp>
#include <dune/amdis/gridfunctions/DOFVectorView.hpp>
#include <dune/amdis/io/FileWriterInterface.hpp>
#include <dune/amdis/utility/DiscreteFunction.hpp>
...
...
@@ -142,21 +144,6 @@ namespace AMDiS
RowTreePath
row
,
ColTreePath
col
,
Values
const
&
values
);
private:
// implementation detail
template
<
class
Predicate
,
class
RowNode
,
class
ColNode
>
void
addDirichletBCImpl
(
Predicate
const
&
predicate
,
RowNode
const
&
rowNode
,
ColNode
const
&
colNode
,
RangeType
<
RowNode
>
const
&
value
);
template
<
class
Predicate
,
class
RowNode
,
class
ColNode
,
class
Values
>
std
::
enable_if_t
<
not
std
::
is_convertible
<
Values
,
RangeType
<
RowNode
>>::
value
>
addDirichletBCImpl
(
Predicate
const
&
predicate
,