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