From 57bc34cdee87e5279b4510ee9a937f1b623aaf5f Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Tue, 3 Sep 2013 16:29:51 +0000 Subject: [PATCH] Also test the harmonic energy implementation [[Imported from SVN: r9411]] --- test/adolctest.cc | 62 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/test/adolctest.cc b/test/adolctest.cc index 17fe246d..0ba246c0 100644 --- a/test/adolctest.cc +++ b/test/adolctest.cc @@ -34,8 +34,60 @@ using namespace Dune; +int testHarmonicEnergy() { -int main() { + size_t nDofs = 4; + + const int dim = 2; + typedef YaspGrid<dim> GridType; + FieldVector<double,dim> l(1); + std::array<int,dim> elements = {{1, 1}}; + GridType grid(l,elements); + + typedef Q1LocalFiniteElement<double,double,dim> LocalFE; + LocalFE localFiniteElement; + + typedef UnitVector<double,3> TargetSpace; + std::vector<TargetSpace> localSolution(nDofs); + + for (size_t i=0; i<nDofs; i++) + localSolution[i] = FieldVector<double,3>(1.0); + + for (size_t i=0; i<localSolution.size(); i++) + std::cout << localSolution[i] << std::endl; + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + typedef Q1NodalBasis<GridType::LeafGridView,double> Q1Basis; + Q1Basis q1Basis(grid.leafView()); + + HarmonicEnergyLocalStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + TargetSpace> harmonicEnergyLocalStiffness; + + // Assembler using ADOL-C + typedef TargetSpace::rebind<adouble>::other ATargetSpace; + HarmonicEnergyLocalStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + ATargetSpace> harmonicEnergyADOLCLocalStiffness; + LocalGeodesicFEADOLCStiffness<GridType::LeafGridView, + Q1Basis::LocalFiniteElement, + TargetSpace> localGFEADOLCStiffness(&harmonicEnergyADOLCLocalStiffness); + + + harmonicEnergyLocalStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); + + localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); + + std::cout << "finite differences:\n" << harmonicEnergyLocalStiffness.A_[0][0] << std::endl; + + std::cout << "ADOL-C:\n" << localGFEADOLCStiffness.A_[0][0] << std::endl; + + return 0; +} + +int testCosseratEnergy() { size_t nDofs = 4; @@ -100,5 +152,11 @@ int main() { std::cout << "ADOL-C:\n" << localGFEADOLCStiffness.A_[0][0] << std::endl; return 0; -} // end main +} + +int main() +{ + testHarmonicEnergy(); + testCosseratEnergy(); +} -- GitLab