From 8fbfaaacc0c890f8c9f6577794f37475f97d96a2 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Tue, 3 Sep 2013 16:29:48 +0000 Subject: [PATCH] Start comparing Hessian and gradient calculations to finite difference ones [[Imported from SVN: r9409]] --- test/adolctest.cc | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/test/adolctest.cc b/test/adolctest.cc index 0058eab5..80f007bd 100644 --- a/test/adolctest.cc +++ b/test/adolctest.cc @@ -23,10 +23,13 @@ #include <dune/localfunctions/lagrange/q1.hh> +#include <dune/fufem/functionspacebases/q1nodalbasis.hh> + #include <dune/gfe/realtuple.hh> #include <dune/gfe/localgeodesicfefunction.hh> #include <dune/gfe/harmonicenergystiffness.hh> #include <dune/gfe/cosseratenergystiffness.hh> +#include <dune/gfe/localgeodesicfeadolcstiffness.hh> using namespace Dune; @@ -111,7 +114,7 @@ int main() { for (size_t i=0; i<localSolution.size(); i++) std::cout << localSolution[i] << std::endl; - +#if 0 double laplaceEnergy = energy<GridType::LeafGridView,LocalFE, TargetSpace>(*grid.leafbegin<0>(), localFiniteElement, localSolution); std::cout << "Laplace energy: " << laplaceEnergy << std::endl; @@ -152,6 +155,45 @@ int main() { } std::cout << std::endl; } +#endif + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + typedef Q1NodalBasis<GridType::LeafGridView,double> Q1Basis; + Q1Basis q1Basis(grid.leafView()); + + ParameterTree parameterSet; + ParameterTreeParser::readINITree("../cosserat-continuum.parset", parameterSet); + + const ParameterTree& materialParameters = parameterSet.sub("materialParameters"); + std::cout << "Material parameters:" << std::endl; + materialParameters.report(); + + + CosseratEnergyLocalStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + 3> cosseratEnergyLocalStiffness(materialParameters,NULL,NULL); + + // Assembler using ADOL-C + CosseratEnergyLocalStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + 3,adouble> cosseratEnergyADOLCLocalStiffness(materialParameters, NULL, NULL); + LocalGeodesicFEADOLCStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + TargetSpace> localGFEADOLCStiffness(&cosseratEnergyADOLCLocalStiffness); + + + cosseratEnergyLocalStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); + + localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); + + std::cout << "finite differences:\n" << cosseratEnergyLocalStiffness.A_[0][0] << std::endl; + + std::cout << "ADOL-C:\n" << localGFEADOLCStiffness.A_[0][0] << std::endl; return 0; } // end main -- GitLab