21 #ifndef fiber_dune_basis_helper_hpp
22 #define fiber_dune_basis_helper_hpp
24 #include "../common/common.hpp"
27 #include "_3d_array.hpp"
28 #include "_4d_array.hpp"
30 #include "../common/armadillo_fwd.hpp"
31 #include "../common/deprecated.hpp"
38 template <
typename CoordinateType,
typename ValueType,
typename DuneBasis>
39 void evaluateShapeFunctionsWithDune(
40 const arma::Mat<CoordinateType>& local,
41 LocalDofIndex localDofIndex,
42 _3dArray<ValueType>& result,
43 const DuneBasis& basis = DuneBasis())
45 typedef typename DuneBasis::Traits Traits;
46 assert(local.n_rows == Traits::dimDomain);
47 assert(localDofIndex == ALL_DOFS ||
48 (localDofIndex >= 0 && localDofIndex < basis.size()));
50 const int functionCount = localDofIndex == ALL_DOFS ? basis.size() : 1;
51 const int pointCount = local.n_cols;
53 typename Traits::DomainType point;
54 std::vector<typename Traits::RangeType> values;
55 result.set_size(Traits::dimRange, functionCount, pointCount);
57 for (
int pointIndex = 0; pointIndex < pointCount; ++pointIndex)
59 for (
int dim = 0; dim < Traits::dimDomain; ++dim)
60 point[dim] = local(dim, pointIndex);
61 basis.evaluateFunction(point, values);
62 if (localDofIndex == ALL_DOFS)
63 for (
int functionIndex = 0; functionIndex < functionCount; ++functionIndex)
64 for (
int dim = 0; dim < Traits::dimRange; ++dim)
65 result(dim, functionIndex, pointIndex) = values[functionIndex][dim];
67 for (
int dim = 0; dim < Traits::dimRange; ++dim)
68 result(dim, 0, pointIndex) = values[localDofIndex][dim];
72 template <
typename CoordinateType,
typename ValueType,
typename DuneBasis>
74 const arma::Mat<CoordinateType>& local,
75 LocalDofIndex localDofIndex,
76 _3dArray<ValueType>& result,
77 const DuneBasis& basis = DuneBasis())
79 evaluateShapeFunctionsWithDune(local, localDofIndex, result, basis);
82 template <
typename CoordinateType,
typename ValueType,
typename DuneBasis>
83 void evaluateShapeFunctionDerivativesWithDune(
84 const arma::Mat<CoordinateType>& local,
85 LocalDofIndex localDofIndex,
86 _4dArray<ValueType>& result,
87 const DuneBasis& basis = DuneBasis())
89 typedef typename DuneBasis::Traits Traits;
90 assert(local.n_rows == Traits::dimDomain);
91 assert(localDofIndex == ALL_DOFS ||
92 (localDofIndex >= 0 && localDofIndex < basis.size()));
94 const int functionCount = localDofIndex == ALL_DOFS ? basis.size() : 1;
95 const int pointCount = local.n_cols;
97 typename Traits::DomainType point;
98 std::vector<typename Traits::JacobianType> jacobians;
99 result.set_size(Traits::dimRange, Traits::dimDomain, functionCount, pointCount);
101 for (
int pointIndex = 0; pointIndex < pointCount; ++pointIndex)
103 for (
int dim = 0; dim < Traits::dimDomain; ++dim)
104 point[dim] = local(dim, pointIndex);
105 basis.evaluateJacobian(point, jacobians);
106 if (localDofIndex == ALL_DOFS)
107 for (
int functionIndex = 0; functionIndex < functionCount; ++functionIndex)
108 for (
int dimD = 0; dimD < Traits::dimDomain; ++dimD)
109 for (
int dimR = 0; dimR < Traits::dimRange; ++dimR)
110 result(dimR, dimD, functionIndex, pointIndex) =
111 jacobians[functionIndex][dimR][dimD];
113 for (
int dimD = 0; dimD < Traits::dimDomain; ++dimD)
114 for (
int dimR = 0; dimR < Traits::dimRange; ++dimR)
115 result(dimR, dimD, 0, pointIndex) =
116 jacobians[localDofIndex][dimR][dimD];
120 template <
typename CoordinateType,
typename ValueType,
typename DuneBasis>
122 const arma::Mat<CoordinateType>& local,
123 LocalDofIndex localDofIndex,
124 _4dArray<ValueType>& result,
125 const DuneBasis& basis = DuneBasis())
127 evaluateShapeFunctionDerivativesWithDune(local, localDofIndex,
#define BEMPP_DEPRECATED
Macro used to mark deprecated functions or classes.
Definition: deprecated.hpp:41