From ce899cf97768c025a773a0792a6a62663713dd47 Mon Sep 17 00:00:00 2001
From: Oliver Sander <sander@igpm.rwth-aachen.de>
Date: Wed, 14 Jan 2015 21:20:59 +0000
Subject: [PATCH] Use ADOL-C to assemble the derivatives of the energy
 functional

[[Imported from SVN: r10008]]
---
 src/harmonicmaps.cc | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/harmonicmaps.cc b/src/harmonicmaps.cc
index 9d0697b8..3fe0d2ae 100644
--- a/src/harmonicmaps.cc
+++ b/src/harmonicmaps.cc
@@ -12,6 +12,11 @@
 //#define ROTATION3
 //#define REALTUPLE1
 
+// Includes for the ADOL-C automatic differentiation library
+// Need to come before (almost) all others.
+#include <adolc/adouble.h>
+#include <dune/gfe/adolcnamespaceinjections.hh>
+
 #include <dune/common/bitsetvector.hh>
 #include <dune/common/parametertree.hh>
 #include <dune/common/parametertreeparser.hh>
@@ -34,6 +39,7 @@
 #include <dune/gfe/rotation.hh>
 #include <dune/gfe/unitvector.hh>
 #include <dune/gfe/realtuple.hh>
+#include <dune/gfe/localgeodesicfeadolcstiffness.hh>
 #include <dune/gfe/harmonicenergystiffness.hh>
 #include <dune/gfe/chiralskyrmionenergy.hh>
 #include <dune/gfe/geodesicfeassembler.hh>
@@ -185,10 +191,14 @@ int main (int argc, char *argv[]) try
     // ////////////////////////////////////////////////////////////
 
     GFE::ChiralSkyrmionEnergy<GridType::LeafGridView, FEBasis::LocalFiniteElement, double> chiralSkyrmionEnergy;
-    HarmonicEnergyLocalStiffness<GridType::LeafGridView, FEBasis::LocalFiniteElement, TargetSpace> harmonicEnergyLocalStiffness;
-
-    GeodesicFEAssembler<FEBasis,TargetSpace> assembler(grid.leafGridView(),
-                                                                      &harmonicEnergyLocalStiffness);
+    // Assembler using ADOL-C
+    typedef TargetSpace::rebind<adouble>::other ATargetSpace;
+    HarmonicEnergyLocalStiffness<GridType::LeafGridView, FEBasis::LocalFiniteElement, ATargetSpace> harmonicEnergyADOLCLocalStiffness;
+    LocalGeodesicFEADOLCStiffness<GridType::LeafGridView,
+                                  FEBasis::LocalFiniteElement,
+                                  TargetSpace> localGFEADOLCStiffness(&harmonicEnergyADOLCLocalStiffness);
+
+    GeodesicFEAssembler<FEBasis,TargetSpace> assembler(grid.leafGridView(), &localGFEADOLCStiffness);
 
     // /////////////////////////////////////////////////
     //   Create a Riemannian trust-region solver
-- 
GitLab