13#ifndef BOUNDARYCONDITIONS_HH
14#define BOUNDARYCONDITIONS_HH
33 template <
class Functional>
36 using Scalar =
typename Functional::Scalar;
37 static constexpr int dim = Functional::AnsatzVars::Grid::dimension;
54 template <
class FaceIterator>
57 template <
class Evaluators>
60 Scalar
d0()
const {
return 0; }
68 template <
int row,
int col>
87 template <
class Gr
idView,
int components,
class ScalarType=
typename Gr
idView::ctype>
91 static constexpr int dim = GridView::dimension;
92 static constexpr int dimworld = GridView::dimensionworld;
104 void moveTo(
typename GridView::IntersectionIterator
const& fi)
108 weight = std::pow(fi->geometry().volume(),-2/(dim-1));
129 Scalar
d0()
const {
return 0.5*gamma*weight * (deviation*deviation); }
133 return gamma*weight*argT.
value[0]*deviation;
139 return gamma*weight*argTest.
value[0]*argAnsatz.
value[0] * unitMatrix<Scalar,components>();
171 template <
class Gr
idView,
int components,
class ScalarType=
typename Gr
idView::ctype>
175 static constexpr int dim = GridView::dimension;
176 static constexpr int dimworld = GridView::dimensionworld;
188 void moveTo(
typename GridView::IntersectionIterator
const& fi)
194 weight = std::pow(face.geometry().volume(),-1/(dim-1));
217 kn = kappa * face.unitOuterNormal(xi);
220 Scalar
d0()
const {
return 0.5*weight*gamma*(deviation*deviation) - deviation*(ux*kn); }
224 return weight*gamma*arg.
value[0]*deviation - arg.
value[0]*(ux*kn) - deviation*(arg.
derivative[0]*kn);
235 return weight*gamma*argTest.
value[0]*argAnsatz.
value[0] * unitMatrix<Scalar,components>()
242 typename GridView::Intersection face;
Dirichlet boundary conditions by Nitsche's method.
Dune::FieldMatrix< Scalar, components, components > d2(VariationalArg< Scalar, dim > const &argTest, VariationalArg< Scalar, dim > const &argAnsatz) const
void moveTo(typename GridView::IntersectionIterator const &fi)
Moves the boundary condition to a new face.
void setBoundaryData(Dune::FieldVector< typename GridView::ctype, dim-1 > const &xi, Scalar gamma_, Vector const &u, Vector const &ud, Dune::FieldMatrix< Scalar, components, dim > ux_, Dune::FieldMatrix< Scalar, dim, dim > const &kappa)
Defines the data for the boundary condition.
Dune::FieldVector< Scalar, components > Vector
Vector d1(VariationalArg< Scalar, dim > const &arg) const
Dirichlet boundary conditions by the penalty approach.
Dune::FieldMatrix< Scalar, components, components > d2(VariationalArg< Scalar, dim > const &argTest, VariationalArg< Scalar, dim > const &argAnsatz) const
Dune::FieldVector< Scalar, components > Vector
void moveTo(typename GridView::IntersectionIterator const &fi)
Moves the boundary condition to a new face.
Vector d1(VariationalArg< Scalar, dim > const &argT) const
void setBoundaryData(Scalar gamma_, Vector const &u_, Vector const &ud)
Defines the data for the boundary condition.
A simple boundary cache implementing homogeneous Neumann boundary conditions.
void moveTo(FaceIterator const &)
void evaluateAt(Dune::FieldVector< typename Functional::AnsatzVars::Grid::ctype, dim-1 > const &, Evaluators const &)
auto d1(VariationalArg< Scalar, dim > const &) const
HomogeneousNeumannBoundary(Functional const &, typename Functional::OriginVars::VariableSet const &, int)
Constructor.
auto d2(VariationalArg< Scalar, dim > const &, VariationalArg< Scalar, dim > const &) const
HomogeneousNeumannBoundary(int)
Constructor.
typename boost::fusion::result_of::as_vector< typename boost::fusion::result_of::transform< Spaces, GetEvaluatorTypes >::type >::type Evaluators
the heterogeneous sequence type of Evaluators for the given spaces
typename GetScalar< Type >::type ScalarType
Extracts the scalar field type from linear algebra data types.
Helper class for specifying the number of components of a variable.
A class that stores values, gradients, and Hessians of evaluated shape functions.
Dune::FieldMatrix< Scalar, components, dim > derivative
The shape function's spatial derivative, a components x dim matrix.
ValueType value
The shape function's value, a vector of dimension components