From 88deafe777d158063f4d0d7befc6b9234583f610 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Wed, 26 Oct 2011 16:22:18 +0200 Subject: [PATCH] Use the ZeroNonlinearity --- src/trivialnonlinearity.hh | 137 ------------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 src/trivialnonlinearity.hh diff --git a/src/trivialnonlinearity.hh b/src/trivialnonlinearity.hh deleted file mode 100644 index 8b30a169..00000000 --- a/src/trivialnonlinearity.hh +++ /dev/null @@ -1,137 +0,0 @@ -/* -*- mode:c++; mode:semantic -*- */ - -#ifndef TRIVIALNONLINEARITY_HH -#define TRIVIALNONLINEARITY_HH - -#include <dune/tnnmg/problem-classes/nonlinearity.hh> - -template <class LocalVectorTypeTEMPLATE = Dune::FieldVector<double, 1>, - class LocalMatrixTypeTEMPLATE = Dune::FieldMatrix<double, 1, 1>> -class TrivialNonlinearity - : Nonlinearity<LocalVectorTypeTEMPLATE, LocalMatrixTypeTEMPLATE> { -public: - typedef typename Nonlinearity<LocalVectorTypeTEMPLATE, - LocalMatrixTypeTEMPLATE>::IndexSet IndexSet; - typedef typename Nonlinearity<LocalVectorTypeTEMPLATE, - LocalMatrixTypeTEMPLATE>::LocalVectorType - LocalVectorType; - typedef typename Nonlinearity<LocalVectorTypeTEMPLATE, - LocalMatrixTypeTEMPLATE>::MatrixType MatrixType; - typedef typename Nonlinearity<LocalVectorTypeTEMPLATE, - LocalMatrixTypeTEMPLATE>::VectorType VectorType; - - enum { - block_size = Nonlinearity<LocalVectorTypeTEMPLATE, - LocalMatrixTypeTEMPLATE>::block_size - }; - - //! Evaluate the nonlinearity at v. - virtual double operator()(const VectorType& v) const { return 0; } - - //! Add the gradient of the nonlinearity at v to the vector gradient. - virtual void addGradient(const VectorType& v, VectorType& gradient) const {} - - //! Add the Hessian matrix of the nonlinearity at v to the matrix Hessian. - virtual void addHessian(const VectorType& v, MatrixType& hessian) const {} - - //! Add the indices of the Hessian matrix to the index set. - virtual void addHessianIndices(IndexSet& indices) const {} - - /** \brief Set the internal position vector u_pos to v. - * - * This is only needed if the nonlinearity does not decouple in the Euclidean - *directions. - * If the nonlinearity decouples in the Euclidean directions this can be - *empty. - */ - virtual void setVector(const VectorType& v) {} - - /** \brief Update the (i,j)-th entry of the internal position vector u_pos to - *x. - * - * \param i global index - * \param j local index - * \param x new value of the entry (u_pos)_(i,j) - */ - virtual void updateEntry(int i, double x, int j) {} - - /** \brief Compute the subdifferential of the nonlinearity restricted to the - * line u_pos' +t e_(i,j) at t=0. - * - * Here e_(i,j) is the (i,j)-th Euclidean unit vector, - * and u_pos' is the internal position vector u_pos with the (i,j)-the entry - *replaced by x. - * If the nonlinearity decouples in the Euclidean directions this is simply - *the (i,j)-th - * component of the subdifferential. - * - * \param i global index - * \param j local index - * \param x value of the (i,j)-th entry of position to evaluate the - *nonlinearity at - * \param[out] D the subdifferential - */ - virtual void subDiff(int i, double x, Interval<double>& D, int j) const { - D[0] = D[1] = 0.0; - } - - /** \brief Return the regularity of the nonlinearity restricted to the - * line u_pos' +t e_(i,j) at t=0. - * - * Here e_(i,j) is the (i,j)-th Euclidean unit vector, - * and u_pos' is the internal position vector u_pos with the (i,j)-the entry - *replaced by x. - * Usually this will be the third derivative or a local Lipschitz constant of - *the second - * derivative. Note that if the subdifferential is set-valued at this - *position, this - * value will normally be infinity. - * - * \param i global index - * \param j local index - * \param x value of the (i,j)-th entry of position to evaluate the - *nonlinearity at - * \returns a value measuring the regularity - */ - virtual double regularity(int i, double x, int j) const { return 0; } - - /** \brief Compute the domain of the nonlinearity restricted to the - * line t e_(i,j) at t=0 where e_(i,j) is the (i,j)-th Euclidean unit vector. - * - * Notice that this does not depend on the position since the nonsmooth - * part of the nonlinearity must decouple in the Euclidean directions. - * - * \param i global index - * \param j local index - * \param[out] dom the domain - */ - virtual void domain(int i, Interval<double>& dom, int j) const { - dom[1] = std::numeric_limits<double>::max(); - dom[0] = std::numeric_limits<double>::min(); - } - - /** \brief Compute a local domain around t=0 where the nonlinearity restricted - *to the - * line u_pos' +t e_(i,j) is smooth. - * - * Here e_(i,j) is the (i,j)-th Euclidean unit vector, - * and u_pos' is the internal position vector u_pos with the (i,j)-the entry - *replaced by x. - * This defaults to the whole domain. Usually there is no need to use - *different values here. - * - * \param i global index - * \param j local index - * \param x value of the (i,j)-th entry of position to evaluate the - *nonlinearity at - * \param[out] dom the domain - */ - virtual void smoothDomain(int i, double x, double regularity, - Interval<double>& dom, int j) const { - dom[1] = std::numeric_limits<double>::max(); - dom[0] = std::numeric_limits<double>::min(); - return; - } -}; - -#endif -- GitLab