From 0b5a00970f777dc969f169d866e986520ac4ed1a Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Tue, 27 Apr 2010 15:06:59 +0000
Subject: [PATCH] Start working on using local bases of the tangent spaces of
 S^n. For this now the TangentVector class of S^n has only n components, while
 the EmbeddedTangentVector class still has n+1. The code around it needs to be
 fixed accordingly.

[[Imported from SVN: r5963]]
---
 dune/gfe/geodesicfeassembler.hh      | 2 +-
 dune/gfe/localgeodesicfestiffness.hh | 4 ++--
 dune/gfe/riemanniantrsolver.hh       | 4 ++--
 dune/gfe/targetspacertrsolver.hh     | 2 +-
 dune/gfe/unitvector.hh               | 4 ++--
 harmonicmaps.cc                      | 2 +-
 6 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/dune/gfe/geodesicfeassembler.hh b/dune/gfe/geodesicfeassembler.hh
index 5924b8a4..a76ffe7f 100644
--- a/dune/gfe/geodesicfeassembler.hh
+++ b/dune/gfe/geodesicfeassembler.hh
@@ -22,7 +22,7 @@ class GeodesicFEAssembler {
     enum { gridDim = GridView::dimension };
     
     //! Dimension of a tangent space
-    enum { blocksize = TargetSpace::TangentVector::size };
+    enum { blocksize = TargetSpace::EmbeddedTangentVector::size };
     
     //!
     typedef Dune::FieldMatrix<double, blocksize, blocksize> MatrixBlock;
diff --git a/dune/gfe/localgeodesicfestiffness.hh b/dune/gfe/localgeodesicfestiffness.hh
index c491b6fd..49e4631d 100644
--- a/dune/gfe/localgeodesicfestiffness.hh
+++ b/dune/gfe/localgeodesicfestiffness.hh
@@ -309,7 +309,7 @@ assemble(const Entity& element,
 /** \brief Specialization for unit vectors */
 template<class GridView, int dim>
 class LocalGeodesicFEStiffness <GridView,UnitVector<dim> >
-    : public Dune::LocalStiffness<GridView,double,UnitVector<dim>::TangentVector::size>
+    : public Dune::LocalStiffness<GridView,double,UnitVector<dim>::EmbeddedTangentVector::size>
 {
     typedef UnitVector<dim> TargetSpace;
 
@@ -333,7 +333,7 @@ class LocalGeodesicFEStiffness <GridView,UnitVector<dim> >
 public:
     
     //! Each block is x, y, theta in 2d, T (R^3 \times SO(3)) in 3d
-    enum { blocksize = TargetSpace::TangentVector::size };
+    enum { blocksize = TargetSpace::EmbeddedTangentVector::size };
 
     // define the number of components of your system, this is used outside
     // to allocate the correct size of (dense) blocks with a FieldMatrix
diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh
index 7c1ec683..4fd20899 100644
--- a/dune/gfe/riemanniantrsolver.hh
+++ b/dune/gfe/riemanniantrsolver.hh
@@ -18,9 +18,9 @@
 template <class GridType, class TargetSpace>
 class RiemannianTrustRegionSolver 
     : public IterativeSolver<std::vector<TargetSpace>,
-                             Dune::BitSetVector<TargetSpace::TangentVector::size> >
+                             Dune::BitSetVector<TargetSpace::EmbeddedTangentVector::size> >
 { 
-    const static int blocksize = TargetSpace::TangentVector::size;
+    const static int blocksize = TargetSpace::EmbeddedTangentVector::size;
 
     const static int gridDim = GridType::dimension;
 
diff --git a/dune/gfe/targetspacertrsolver.hh b/dune/gfe/targetspacertrsolver.hh
index 87219999..cf2ede95 100644
--- a/dune/gfe/targetspacertrsolver.hh
+++ b/dune/gfe/targetspacertrsolver.hh
@@ -13,7 +13,7 @@ class TargetSpaceRiemannianTRSolver
 //     : public IterativeSolver<std::vector<TargetSpace>,
 //                             Dune::BitSetVector<TargetSpace::TangentVector::size> >
 { 
-    const static int blocksize = TargetSpace::TangentVector::size;
+    const static int blocksize = TargetSpace::EmbeddedTangentVector::size;
 
     // Centralize the field type here
     typedef double field_type;
diff --git a/dune/gfe/unitvector.hh b/dune/gfe/unitvector.hh
index 059d99da..98d4553f 100644
--- a/dune/gfe/unitvector.hh
+++ b/dune/gfe/unitvector.hh
@@ -39,7 +39,7 @@ public:
     /** \brief The type used for coordinates */
     typedef double ctype;
 
-    typedef Dune::FieldVector<double,dim> TangentVector;
+    typedef Dune::FieldVector<double,dim-1> TangentVector;
     typedef Dune::FieldVector<double,dim> EmbeddedTangentVector;
 
     UnitVector<dim>& operator=(const Dune::FieldVector<double,dim>& vector)
@@ -50,7 +50,7 @@ public:
     }
 
      /** \brief The exponential map */
-    static UnitVector exp(const UnitVector& p, const TangentVector& v) {
+    static UnitVector exp(const UnitVector& p, const EmbeddedTangentVector& v) {
 
         assert( std::abs(p.data_*v) < 1e-5 );
 
diff --git a/harmonicmaps.cc b/harmonicmaps.cc
index c7915287..7d529c9d 100644
--- a/harmonicmaps.cc
+++ b/harmonicmaps.cc
@@ -45,7 +45,7 @@ typedef RealTuple<1> TargetSpace;
 #endif
 
 // Tangent vector of the image space
-const int blocksize = TargetSpace::TangentVector::size;
+const int blocksize = TargetSpace::EmbeddedTangentVector::size;
 
 using namespace Dune;
 
-- 
GitLab