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
ee4ea74b
Commit
ee4ea74b
authored
Oct 13, 2016
by
Praetorius, Simon
Browse files
some minor error corrected in master
parent
083a5c96
Changes
2
Hide whitespace changes
Inline
Side-by-side
AMDiS/CMakeLists.txt
View file @
ee4ea74b
...
@@ -2,7 +2,7 @@ set(CMAKE_LEGACY_CYGWIN_WIN32 0)
...
@@ -2,7 +2,7 @@ set(CMAKE_LEGACY_CYGWIN_WIN32 0)
cmake_minimum_required
(
VERSION 2.8 FATAL_ERROR
)
cmake_minimum_required
(
VERSION 2.8 FATAL_ERROR
)
project
(
AMDiS
)
project
(
AMDiS
)
if
(
USE_NEW_CMAKE AND
${
CMAKE_VERSION
}
VERSION_GREATER
"3.
0
"
)
if
(
USE_NEW_CMAKE AND
${
CMAKE_VERSION
}
VERSION_GREATER
"3.
2
"
)
# Experimental implementation of new CMakeLists.txt
# Experimental implementation of new CMakeLists.txt
# Can be selected by calling cmake -DUSE_NEW_CMAKE=ON .
# Can be selected by calling cmake -DUSE_NEW_CMAKE=ON .
# Use only if you know what you are doing :-)
# Use only if you know what you are doing :-)
...
...
AMDiS/src/expressions/valueOf.hpp
View file @
ee4ea74b
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
* Copyright (C) 2013 Dresden University of Technology. All Rights Reserved.
* Copyright (C) 2013 Dresden University of Technology. All Rights Reserved.
* Web: https://fusionforge.zih.tu-dresden.de/projects/amdis
* Web: https://fusionforge.zih.tu-dresden.de/projects/amdis
*
*
* Authors:
* Authors:
* Simon Vey, Thomas Witkowski, Andreas Naumann, Simon Praetorius, et al.
* Simon Vey, Thomas Witkowski, Andreas Naumann, Simon Praetorius, et al.
*
*
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
* This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
* This file is part of AMDiS
* This file is part of AMDiS
*
*
* See also license.opensource.txt in the distribution.
* See also license.opensource.txt in the distribution.
*
*
******************************************************************************/
******************************************************************************/
...
@@ -31,21 +31,22 @@
...
@@ -31,21 +31,22 @@
#include
"traits/category.hpp"
#include
"traits/category.hpp"
#include
"traits/at.hpp"
#include
"traits/at.hpp"
#include
"traits/resize.hpp"
#include
<boost/static_assert.hpp>
#include
<boost/static_assert.hpp>
#include
<boost/mpl/bool.hpp>
#include
<boost/mpl/bool.hpp>
namespace
AMDiS
namespace
AMDiS
{
{
struct
_unknown
{};
struct
_unknown
{};
namespace
expressions
namespace
expressions
{
{
/// Expressions that extracts the values of a DOFVector at QPs
/// Expressions that extracts the values of a DOFVector at QPs
template
<
typename
Vector
,
typename
Name
,
typename
Enable
=
void
>
template
<
typename
Vector
,
typename
Name
,
typename
Enable
=
void
>
struct
ValueOf
:
public
LazyOperatorTermBase
{};
struct
ValueOf
:
public
LazyOperatorTermBase
{};
template
<
typename
T
,
typename
Name
>
template
<
typename
T
,
typename
Name
>
struct
ValueOf
<
DOFVector
<
T
>
,
Name
>
:
public
LazyOperatorTermBase
struct
ValueOf
<
DOFVector
<
T
>
,
Name
>
:
public
LazyOperatorTermBase
{
{
...
@@ -64,7 +65,7 @@ namespace AMDiS
...
@@ -64,7 +65,7 @@ namespace AMDiS
{
{
feSpaces
.
insert
(
vecDV
->
getFeSpace
());
feSpaces
.
insert
(
vecDV
->
getFeSpace
());
}
}
inline
int
getDegree
()
const
inline
int
getDegree
()
const
{
{
return
vecDV
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
return
vecDV
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
...
@@ -72,7 +73,7 @@ namespace AMDiS
...
@@ -72,7 +73,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
...
@@ -81,14 +82,14 @@ namespace AMDiS
...
@@ -81,14 +82,14 @@ namespace AMDiS
vecDV
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
vec
);
vecDV
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
vec
);
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
vecDV
->
getLocalVector
(
elInfo
->
getElement
(),
coeff
);
vecDV
->
getLocalVector
(
elInfo
->
getElement
(),
coeff
);
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
vec
.
change_dim
(
nBasisFct
);
vec
.
change_dim
(
nBasisFct
);
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
}
}
...
@@ -97,7 +98,7 @@ namespace AMDiS
...
@@ -97,7 +98,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
...
@@ -106,29 +107,29 @@ namespace AMDiS
...
@@ -106,29 +107,29 @@ namespace AMDiS
vecDV
->
getVecAtQPs
(
smallElInfo
,
largeElInfo
,
quad
,
NULL
,
vec
);
vecDV
->
getVecAtQPs
(
smallElInfo
,
largeElInfo
,
quad
,
NULL
,
vec
);
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
vecDV
->
getLocalVector
(
smallElInfo
->
getElement
(),
coeff
);
vecDV
->
getLocalVector
(
smallElInfo
->
getElement
(),
coeff
);
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
vec
.
change_dim
(
nBasisFct
);
vec
.
change_dim
(
nBasisFct
);
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
}
}
}
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
std
::
string
str
()
const
{
return
std
::
string
(
"value("
)
+
vecDV
->
getName
()
+
")"
;
}
std
::
string
str
()
const
{
return
std
::
string
(
"value("
)
+
vecDV
->
getName
()
+
")"
;
}
};
};
/// Expressions that extracts the matrix-value of a Matrix<DOFVector> at QPs
/// Expressions that extracts the matrix-value of a Matrix<DOFVector> at QPs
template
<
template
<
class
>
class
Matrix
,
typename
T
,
typename
Name
>
template
<
template
<
class
>
class
Matrix
,
typename
T
,
typename
Name
>
struct
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
,
struct
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
,
typename
enable_if
<
traits
::
is_matrix
<
Matrix
<
T
>
>
>::
type
>
typename
enable_if
<
traits
::
is_matrix
<
Matrix
<
T
>
>
>::
type
>
:
public
LazyOperatorTermBase
:
public
LazyOperatorTermBase
{
{
typedef
Matrix
<
T
>
value_type
;
typedef
Matrix
<
T
>
value_type
;
...
@@ -138,7 +139,7 @@ namespace AMDiS
...
@@ -138,7 +139,7 @@ namespace AMDiS
mutable
mtl
::
dense_vector
<
value_type
>
vec
;
mutable
mtl
::
dense_vector
<
value_type
>
vec
;
mutable
Matrix
<
mtl
::
dense_vector
<
T
>
>
coeff
;
mutable
Matrix
<
mtl
::
dense_vector
<
T
>
>
coeff
;
ValueOf
(
Matrix
<
DOFVector
<
T
>*>
const
&
vector
)
:
vecDV
(
vector
)
ValueOf
(
Matrix
<
DOFVector
<
T
>*>
const
&
vector
)
:
vecDV
(
vector
)
{
{
resize
(
coeff
,
num_rows
(
vecDV
),
num_cols
(
vecDV
));
resize
(
coeff
,
num_rows
(
vecDV
),
num_cols
(
vecDV
));
}
}
...
@@ -150,7 +151,7 @@ namespace AMDiS
...
@@ -150,7 +151,7 @@ namespace AMDiS
for
(
size_t
j
=
0
;
j
<
num_cols
(
vecDV
);
j
++
)
for
(
size_t
j
=
0
;
j
<
num_cols
(
vecDV
);
j
++
)
feSpaces
.
insert
(
at
(
vecDV
,
i
,
j
)
->
getFeSpace
());
feSpaces
.
insert
(
at
(
vecDV
,
i
,
j
)
->
getFeSpace
());
}
}
inline
int
getDegree
()
const
inline
int
getDegree
()
const
{
{
return
at
(
vecDV
,
0
,
0
)
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
return
at
(
vecDV
,
0
,
0
)
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
...
@@ -158,7 +159,7 @@ namespace AMDiS
...
@@ -158,7 +159,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
Matrix
<
mtl
::
dense_vector
<
T
>
>
helper
;
resize
(
helper
,
num_rows
(
vecDV
),
num_cols
(
vecDV
));
Matrix
<
mtl
::
dense_vector
<
T
>
>
helper
;
resize
(
helper
,
num_rows
(
vecDV
),
num_cols
(
vecDV
));
...
@@ -167,17 +168,17 @@ namespace AMDiS
...
@@ -167,17 +168,17 @@ namespace AMDiS
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
ot
->
getVectorAtQPs
(
at
(
vecDV
,
i
,
j
),
elInfo
,
subAssembler
,
quad
,
at
(
helper
,
i
,
j
));
ot
->
getVectorAtQPs
(
at
(
vecDV
,
i
,
j
),
elInfo
,
subAssembler
,
quad
,
at
(
helper
,
i
,
j
));
else
if
(
quad
)
else
if
(
quad
)
at
(
vecDV
,
i
,
j
)
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
at
(
helper
,
i
,
j
));
at
(
vecDV
,
i
,
j
)
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
at
(
helper
,
i
,
j
));
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
at
(
vecDV
,
i
,
j
)
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
at
(
vecDV
,
i
,
j
)
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
at
(
coeff
,
i
,
j
).
change_dim
(
localBasisFct
->
getNumber
());
at
(
coeff
,
i
,
j
).
change_dim
(
localBasisFct
->
getNumber
());
at
(
vecDV
,
i
,
j
)
->
getLocalVector
(
elInfo
->
getElement
(),
at
(
coeff
,
i
,
j
));
at
(
vecDV
,
i
,
j
)
->
getLocalVector
(
elInfo
->
getElement
(),
at
(
coeff
,
i
,
j
));
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
at
(
helper
,
i
,
j
).
change_dim
(
nBasisFct
);
at
(
helper
,
i
,
j
).
change_dim
(
nBasisFct
);
for
(
size_t
k
=
0
;
k
<
nBasisFct
;
k
++
)
for
(
size_t
k
=
0
;
k
<
nBasisFct
;
k
++
)
at
(
helper
,
i
,
j
)[
k
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
k
),
at
(
coeff
,
i
,
j
));
at
(
helper
,
i
,
j
)[
k
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
k
),
at
(
coeff
,
i
,
j
));
}
}
...
@@ -198,22 +199,22 @@ namespace AMDiS
...
@@ -198,22 +199,22 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
initElement
(
ot
,
smallElInfo
,
subAssembler
,
quad
,
basisFct
);
initElement
(
ot
,
smallElInfo
,
subAssembler
,
quad
,
basisFct
);
}
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
std
::
string
str
()
const
{
return
std
::
string
(
"value_("
)
+
at
(
vecDV
,
0
,
0
)
->
getName
()
+
")"
;
}
std
::
string
str
()
const
{
return
std
::
string
(
"value_("
)
+
at
(
vecDV
,
0
,
0
)
->
getName
()
+
")"
;
}
};
};
/// Expressions that extracts the vector-value of a Vector<DOFVector> at QPs
/// Expressions that extracts the vector-value of a Vector<DOFVector> at QPs
template
<
template
<
class
>
class
Vector
,
typename
T
,
typename
Name
>
template
<
template
<
class
>
class
Vector
,
typename
T
,
typename
Name
>
struct
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
,
struct
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
,
typename
boost
::
enable_if
<
typename
traits
::
is_vector
<
Vector
<
T
>
>::
type
>::
type
>
typename
boost
::
enable_if
<
typename
traits
::
is_vector
<
Vector
<
T
>
>::
type
>::
type
>
:
public
LazyOperatorTermBase
:
public
LazyOperatorTermBase
{
{
typedef
Vector
<
T
>
value_type
;
typedef
Vector
<
T
>
value_type
;
...
@@ -223,7 +224,7 @@ namespace AMDiS
...
@@ -223,7 +224,7 @@ namespace AMDiS
mutable
mtl
::
dense_vector
<
value_type
>
vec
;
mutable
mtl
::
dense_vector
<
value_type
>
vec
;
mutable
Vector
<
mtl
::
dense_vector
<
T
>
>
coeff
;
mutable
Vector
<
mtl
::
dense_vector
<
T
>
>
coeff
;
ValueOf
(
Vector
<
DOFVector
<
T
>*>&
vector
)
:
vecDV
(
vector
)
ValueOf
(
Vector
<
DOFVector
<
T
>*>&
vector
)
:
vecDV
(
vector
)
{
{
resize
(
coeff
,
num_rows
(
vecDV
));
resize
(
coeff
,
num_rows
(
vecDV
));
}
}
...
@@ -234,7 +235,7 @@ namespace AMDiS
...
@@ -234,7 +235,7 @@ namespace AMDiS
for
(
size_t
i
=
0
;
i
<
num_rows
(
vecDV
);
i
++
)
for
(
size_t
i
=
0
;
i
<
num_rows
(
vecDV
);
i
++
)
feSpaces
.
insert
(
at
(
vecDV
,
i
)
->
getFeSpace
());
feSpaces
.
insert
(
at
(
vecDV
,
i
)
->
getFeSpace
());
}
}
inline
int
getDegree
()
const
inline
int
getDegree
()
const
{
{
return
at
(
vecDV
,
0
)
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
return
at
(
vecDV
,
0
)
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
...
@@ -242,7 +243,7 @@ namespace AMDiS
...
@@ -242,7 +243,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
Vector
<
mtl
::
dense_vector
<
T
>
>
helper
;
resize
(
helper
,
num_rows
(
vecDV
));
Vector
<
mtl
::
dense_vector
<
T
>
>
helper
;
resize
(
helper
,
num_rows
(
vecDV
));
...
@@ -250,17 +251,17 @@ namespace AMDiS
...
@@ -250,17 +251,17 @@ namespace AMDiS
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
ot
->
getVectorAtQPs
(
at
(
vecDV
,
i
),
elInfo
,
subAssembler
,
quad
,
at
(
helper
,
i
));
ot
->
getVectorAtQPs
(
at
(
vecDV
,
i
),
elInfo
,
subAssembler
,
quad
,
at
(
helper
,
i
));
else
if
(
quad
)
else
if
(
quad
)
at
(
vecDV
,
i
)
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
at
(
helper
,
i
));
at
(
vecDV
,
i
)
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
at
(
helper
,
i
));
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
at
(
vecDV
,
i
)
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
at
(
vecDV
,
i
)
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
at
(
coeff
,
i
).
change_dim
(
localBasisFct
->
getNumber
());
at
(
coeff
,
i
).
change_dim
(
localBasisFct
->
getNumber
());
at
(
vecDV
,
i
)
->
getLocalVector
(
elInfo
->
getElement
(),
at
(
coeff
,
i
));
at
(
vecDV
,
i
)
->
getLocalVector
(
elInfo
->
getElement
(),
at
(
coeff
,
i
));
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
at
(
helper
,
i
).
change_dim
(
nBasisFct
);
at
(
helper
,
i
).
change_dim
(
nBasisFct
);
for
(
size_t
j
=
0
;
j
<
nBasisFct
;
j
++
)
for
(
size_t
j
=
0
;
j
<
nBasisFct
;
j
++
)
at
(
helper
,
i
)[
j
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
j
),
at
(
coeff
,
i
));
at
(
helper
,
i
)[
j
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
j
),
at
(
coeff
,
i
));
}
}
...
@@ -277,22 +278,22 @@ namespace AMDiS
...
@@ -277,22 +278,22 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
initElement
(
ot
,
smallElInfo
,
subAssembler
,
quad
,
basisFct
);
initElement
(
ot
,
smallElInfo
,
subAssembler
,
quad
,
basisFct
);
}
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
];
}
std
::
string
str
()
const
{
return
std
::
string
(
"value_("
)
+
at
(
vecDV
,
0
)
->
getName
()
+
")"
;
}
std
::
string
str
()
const
{
return
std
::
string
(
"value_("
)
+
at
(
vecDV
,
0
)
->
getName
()
+
")"
;
}
};
};
/// Expression that extracts the component of a vector-values DOFVector at QPs
/// Expression that extracts the component of a vector-values DOFVector at QPs
template
<
typename
Vector
>
template
<
typename
Vector
>
struct
ComponentOf
:
public
LazyOperatorTermBase
{};
struct
ComponentOf
:
public
LazyOperatorTermBase
{};
template
<
template
<
class
>
class
Vector
,
typename
T
>
template
<
template
<
class
>
class
Vector
,
typename
T
>
struct
ComponentOf
<
DOFVector
<
Vector
<
T
>
>
>
:
public
LazyOperatorTermBase
struct
ComponentOf
<
DOFVector
<
Vector
<
T
>
>
>
:
public
LazyOperatorTermBase
{
{
...
@@ -311,7 +312,7 @@ namespace AMDiS
...
@@ -311,7 +312,7 @@ namespace AMDiS
{
{
feSpaces
.
insert
(
vecDV
->
getFeSpace
());
feSpaces
.
insert
(
vecDV
->
getFeSpace
());
}
}
inline
int
getDegree
()
const
inline
int
getDegree
()
const
{
{
return
vecDV
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
return
vecDV
->
getFeSpace
()
->
getBasisFcts
()
->
getDegree
();
...
@@ -319,7 +320,7 @@ namespace AMDiS
...
@@ -319,7 +320,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
elInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
...
@@ -328,14 +329,14 @@ namespace AMDiS
...
@@ -328,14 +329,14 @@ namespace AMDiS
vecDV
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
vec
);
vecDV
->
getVecAtQPs
(
elInfo
,
quad
,
NULL
,
vec
);
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
vecDV
->
getLocalVector
(
elInfo
->
getElement
(),
coeff
);
vecDV
->
getLocalVector
(
elInfo
->
getElement
(),
coeff
);
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
vec
.
change_dim
(
nBasisFct
);
vec
.
change_dim
(
nBasisFct
);
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
}
}
...
@@ -344,7 +345,7 @@ namespace AMDiS
...
@@ -344,7 +345,7 @@ namespace AMDiS
template
<
typename
OT
>
template
<
typename
OT
>
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
inline
void
initElement
(
OT
*
ot
,
const
ElInfo
*
smallElInfo
,
const
ElInfo
*
largeElInfo
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
SubAssembler
*
subAssembler
,
Quadrature
*
quad
,
const
BasisFunction
*
basisFct
=
NULL
)
const
BasisFunction
*
basisFct
=
NULL
)
{
{
if
(
ot
&&
subAssembler
)
if
(
ot
&&
subAssembler
)
...
@@ -353,21 +354,21 @@ namespace AMDiS
...
@@ -353,21 +354,21 @@ namespace AMDiS
vecDV
->
getVecAtQPs
(
smallElInfo
,
largeElInfo
,
quad
,
NULL
,
vec
);
vecDV
->
getVecAtQPs
(
smallElInfo
,
largeElInfo
,
quad
,
NULL
,
vec
);
else
if
(
basisFct
)
{
else
if
(
basisFct
)
{
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
const
BasisFunction
*
localBasisFct
=
vecDV
->
getFeSpace
()
->
getBasisFcts
();
// get coefficients of DOFVector
// get coefficients of DOFVector
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
coeff
.
change_dim
(
localBasisFct
->
getNumber
());
vecDV
->
getLocalVector
(
smallElInfo
->
getElement
(),
coeff
);
vecDV
->
getLocalVector
(
smallElInfo
->
getElement
(),
coeff
);
// eval basisfunctions of DOFVector at coords of given basisFct
// eval basisfunctions of DOFVector at coords of given basisFct
size_t
nBasisFct
=
basisFct
->
getNumber
();
size_t
nBasisFct
=
basisFct
->
getNumber
();
vec
.
change_dim
(
nBasisFct
);
vec
.
change_dim
(
nBasisFct
);
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nBasisFct
;
i
++
)
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
vec
[
i
]
=
localBasisFct
->
evalUh
(
*
basisFct
->
getCoords
(
i
),
coeff
);
}
}
}
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
][
I
];
}
inline
value_type
operator
()(
const
int
&
iq
)
const
{
return
vec
[
iq
][
I
];
}
std
::
string
str
()
const
{
return
std
::
string
(
"comp<"
)
+
boost
::
lexical_cast
<
std
::
string
>
(
I
)
+
">("
+
vecDV
->
getName
()
+
")"
;
}
std
::
string
str
()
const
{
return
std
::
string
(
"comp<"
)
+
boost
::
lexical_cast
<
std
::
string
>
(
I
)
+
">("
+
vecDV
->
getName
()
+
")"
;
}
};
};
...
@@ -379,57 +380,57 @@ namespace AMDiS
...
@@ -379,57 +380,57 @@ namespace AMDiS
// with Name
// with Name
template
<
typename
Name
,
typename
T
>
template
<
typename
Name
,
typename
T
>
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
valueOf
(
DOFVector
<
T
>&
vector
)
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
valueOf
(
DOFVector
<
T
>&
vector
)
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
(
vector
);
}
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
(
vector
);
}
template
<
typename
Name
,
typename
T
>
template
<
typename
Name
,
typename
T
>
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
valueOf
(
DOFVector
<
T
>*
vector
)
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
valueOf
(
DOFVector
<
T
>*
vector
)
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
(
vector
);
}
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
Name
>
(
vector
);
}
template
<
typename
Name
,
template
<
class
>
class
Matrix
,
typename
T
>
template
<
typename
Name
,
template
<
class
>
class
Matrix
,
typename
T
>
typename
boost
::
enable_if
<
typename
traits
::
is_matrix
<
Matrix
<
T
>
>::
type
,
typename
boost
::
enable_if
<
typename
traits
::
is_matrix
<
Matrix
<
T
>
>::
type
,
expressions
::
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
>
>::
type
expressions
::
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
>
>::
type
valueOf
(
Matrix
<
DOFVector
<
T
>*>
&
mat
)
valueOf
(
Matrix
<
DOFVector
<
T
>*>
&
mat
)
{
return
expressions
::
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
>
(
mat
);
}
{
return
expressions
::
ValueOf
<
Matrix
<
DOFVector
<
T
>*>
,
Name
>
(
mat
);
}
template
<
typename
Name
,
template
<
class
>
class
Vector
,
typename
T
>
template
<
typename
Name
,
template
<
class
>
class
Vector
,
typename
T
>
typename
boost
::
enable_if
<
typename
traits
::
is_vector
<
Vector
<
T
>
>::
type
,
typename
boost
::
enable_if
<
typename
traits
::
is_vector
<
Vector
<
T
>
>::
type
,
expressions
::
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
>
>::
type
expressions
::
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
>
>::
type
valueOf
(
Vector
<
DOFVector
<
T
>*>
&
vector
)
valueOf
(
Vector
<
DOFVector
<
T
>*>
&
vector
)
{
return
expressions
::
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
>
(
vector
);
}
{
return
expressions
::
ValueOf
<
Vector
<
DOFVector
<
T
>*>
,
Name
>
(
vector
);
}
// without Name
// without Name
template
<
typename
T
>
template
<
typename
T
>
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
valueOf
(
DOFVector
<
T
>&
vector
)
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
valueOf
(
DOFVector
<
T
>&
vector
)
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
(
vector
);
}
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
(
vector
);
}
template
<
typename
T
>
template
<
typename
T
>
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
valueOf
(
DOFVector
<
T
>*
vector
)
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
valueOf
(
DOFVector
<
T
>*
vector
)
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
(
vector
);
}
{
return
expressions
::
ValueOf
<
DOFVector
<
T
>
,
_unknown
>
(
vector
);
}
template
<
template
<
class
>
class
Matrix
,
typename
T
>
template
<
template
<
class
>
class
Matrix
,
typename
T
>
typename
boost
::
enable_if
<
typename
traits
::
is_matrix
<
Matrix
<
T
>
>::
type
,