diff --git a/harmonicmaps.cc b/harmonicmaps.cc index 266b9b2d97a74694c6779b211b40321324d88822..de5582a1617c1f229abd62b88dd08f4e65f06fe0 100644 --- a/harmonicmaps.cc +++ b/harmonicmaps.cc @@ -5,6 +5,7 @@ #include <dune/grid/uggrid.hh> #include <dune/grid/io/file/amirameshreader.hh> +#include <dune/grid/io/file/amirameshwriter.hh> #include <dune-solvers/solvers/iterativesolver.hh> #include <dune-solvers/norms/energynorm.hh> @@ -17,7 +18,7 @@ #include "src/riemanniantrsolver.hh" // grid dimension -const int dim = 2; +const int dim = 3; // Image space of the geodesic fe functions typedef Rotation<3,double> TargetSpace; @@ -73,10 +74,18 @@ int main (int argc, char *argv[]) try // Initial solution // ////////////////////////// - for (int i=0; i<x.size(); i++) { - x[i] = Rotation<3,double>::identity(); - } + FieldVector<double,3> yAxis(0); + yAxis[1] = 1; + + GridType::LeafGridView::Codim<dim>::Iterator vIt = grid.leafbegin<dim>(); + GridType::LeafGridView::Codim<dim>::Iterator vEndIt = grid.leafend<dim>(); + for (; vIt!=vEndIt; ++vIt) { + int idx = grid.leafIndexSet().index(*vIt); + double angle = vIt->geometry().corner(0)[0]; + x[idx] = Rotation<3,double>(yAxis,angle); + } + // backup for error measurement later SolutionType initialIterate = x; @@ -88,7 +97,7 @@ int main (int argc, char *argv[]) try allNodes.setAll(); LeafBoundaryPatch<GridType> dirichletBoundary(grid, allNodes); - BitSetVector<blocksize> dirichletNodes(grid.size(1)); + BitSetVector<blocksize> dirichletNodes(grid.size(dim)); for (int i=0; i<dirichletNodes.size(); i++) dirichletNodes[i] = dirichletBoundary.containsVertex(i); @@ -125,6 +134,10 @@ int main (int argc, char *argv[]) try // ///////////////////////////////////////////////////// std::cout << "Energy: " << assembler.computeEnergy(x) << std::endl; + //exit(0); + LeafAmiraMeshWriter<GridType> amiramesh; + amiramesh.addGrid(grid.leafView()); + amiramesh.write("resultGrid", 1); solver.setInitialSolution(x); solver.solve(); @@ -150,9 +163,6 @@ int main (int argc, char *argv[]) try // ////////////////////////////////////////////////////////// BCRSMatrix<FieldMatrix<double, blocksize, blocksize> > hessian; -// MatrixIndexSet indices(exactSolution.size(), exactSolution.size()); -// assembler.getNeighborsPerVertex(indices); -// indices.exportIdx(hessian); assembler.assembleMatrix(exactSolution, hessian);