diff --git a/dune/gfe/realtuple.hh b/dune/gfe/realtuple.hh index 9fecb7e934d5f365ad8dc99949663e50b8bdba5d..87e8a2b8bda63544a1921d26e9721388fcb5cdf5 100644 --- a/dune/gfe/realtuple.hh +++ b/dune/gfe/realtuple.hh @@ -147,6 +147,16 @@ public: return v; } + /** \brief Project tangent vector of R^n onto the normal space space */ + EmbeddedTangentVector projectOntoNormalSpace(const EmbeddedTangentVector& v) const { + return EmbeddedTangentVector(0); + } + + /** \brief The Weingarten map */ + EmbeddedTangentVector weingarten(const EmbeddedTangentVector& z, const EmbeddedTangentVector& v) const { + return EmbeddedTangentVector(0); + } + /** \brief The global coordinates, if you really want them */ const Dune::FieldVector<T,N>& globalCoordinates() const { return data_; diff --git a/dune/gfe/rotation.hh b/dune/gfe/rotation.hh index 3fc8f2d75ffa5dd5bb67e830a121610abef3afb2..a392d62517521c17c7fcda4efe12dbe94cea62a2 100644 --- a/dune/gfe/rotation.hh +++ b/dune/gfe/rotation.hh @@ -994,6 +994,28 @@ public: return result; } + /** \brief Project tangent vector of R^n onto the normal space space */ + EmbeddedTangentVector projectOntoNormalSpace(const EmbeddedTangentVector& v) const { + Dune::FieldVector<T,4> data = *this; + T sp = v*data; + EmbeddedTangentVector result = *this; + result *= sp; + return result; + } + + /** \brief The Weingarten map */ + EmbeddedTangentVector weingarten(const EmbeddedTangentVector& z, const EmbeddedTangentVector& v) const { + + EmbeddedTangentVector result; + + T sp = v*(*this); + + for (int i=0; i<embeddedDim; i++) + result[i] = -sp * z[i]; + + return result; + } + /** \brief The global coordinates, if you really want them */ const CoordinateType& globalCoordinates() const { return *this;