Skip to content
Snippets Groups Projects
Commit c2411e48 authored by Oliver Sander's avatar Oliver Sander Committed by sander
Browse files

Test harmonic energy derivation for various unit vector and grid dimensions

[[Imported from SVN: r9419]]
parent b71f5bf4
No related branches found
No related tags found
No related merge requests found
...@@ -71,39 +71,36 @@ void compareMatrices(const Matrix<FieldMatrix<double,blocksize,blocksize> >& fdM ...@@ -71,39 +71,36 @@ void compareMatrices(const Matrix<FieldMatrix<double,blocksize,blocksize> >& fdM
} }
} }
template <class TargetSpace, int gridDim>
int testHarmonicEnergy() { int testHarmonicEnergy() {
typedef UnitVector<double,3> TargetSpace; std::cout << " --- Testing " << className<TargetSpace>() << ", domain dimension: " << gridDim << " ---" << std::endl;
const int dim = 1;
std::cout << " --- Testing " << className<TargetSpace>() << ", domain dimension: " << dim << " ---" << std::endl;
// set up a test grid // set up a test grid
typedef YaspGrid<dim> GridType; typedef YaspGrid<gridDim> GridType;
FieldVector<double,dim> l(1); FieldVector<double,gridDim> l(1);
std::array<int,dim> elements; std::array<int,gridDim> elements;
std::fill(elements.begin(), elements.end(), 1); std::fill(elements.begin(), elements.end(), 1);
GridType grid(l,elements); GridType grid(l,elements);
typedef Q1NodalBasis<GridType::LeafGridView,double> Q1Basis; typedef Q1NodalBasis<typename GridType::LeafGridView,double> Q1Basis;
Q1Basis q1Basis(grid.leafView()); Q1Basis q1Basis(grid.leafView());
typedef Q1LocalFiniteElement<double,double,dim> LocalFE; typedef Q1LocalFiniteElement<double,double,gridDim> LocalFE;
LocalFE localFiniteElement; LocalFE localFiniteElement;
// Assembler using finite differences // Assembler using finite differences
HarmonicEnergyLocalStiffness<GridType::LeafGridView, HarmonicEnergyLocalStiffness<typename GridType::LeafGridView,
Q1Basis::LocalFiniteElement, typename Q1Basis::LocalFiniteElement,
TargetSpace> harmonicEnergyLocalStiffness; TargetSpace> harmonicEnergyLocalStiffness;
// Assembler using ADOL-C // Assembler using ADOL-C
typedef TargetSpace::rebind<adouble>::other ATargetSpace; typedef typename TargetSpace::template rebind<adouble>::other ATargetSpace;
HarmonicEnergyLocalStiffness<GridType::LeafGridView, HarmonicEnergyLocalStiffness<typename GridType::LeafGridView,
Q1Basis::LocalFiniteElement, typename Q1Basis::LocalFiniteElement,
ATargetSpace> harmonicEnergyADOLCLocalStiffness; ATargetSpace> harmonicEnergyADOLCLocalStiffness;
LocalGeodesicFEADOLCStiffness<GridType::LeafGridView, LocalGeodesicFEADOLCStiffness<typename GridType::LeafGridView,
Q1Basis::LocalFiniteElement, typename Q1Basis::LocalFiniteElement,
TargetSpace> localGFEADOLCStiffness(&harmonicEnergyADOLCLocalStiffness); TargetSpace> localGFEADOLCStiffness(&harmonicEnergyADOLCLocalStiffness);
size_t nDofs = localFiniteElement.localBasis().size(); size_t nDofs = localFiniteElement.localBasis().size();
...@@ -132,9 +129,9 @@ int testHarmonicEnergy() { ...@@ -132,9 +129,9 @@ int testHarmonicEnergy() {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
harmonicEnergyLocalStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); harmonicEnergyLocalStiffness.assembleHessian(*grid.template leafbegin<0>(),localFiniteElement, localSolution);
localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution); localGFEADOLCStiffness.assembleHessian(*grid.template leafbegin<0>(),localFiniteElement, localSolution);
compareMatrices(harmonicEnergyLocalStiffness.A_, localGFEADOLCStiffness.A_); compareMatrices(harmonicEnergyLocalStiffness.A_, localGFEADOLCStiffness.A_);
...@@ -211,6 +208,10 @@ int testCosseratEnergy() { ...@@ -211,6 +208,10 @@ int testCosseratEnergy() {
int main() int main()
{ {
testHarmonicEnergy(); testHarmonicEnergy<UnitVector<double,2>, 1>();
testHarmonicEnergy<UnitVector<double,3>, 1>();
testHarmonicEnergy<UnitVector<double,2>, 2>();
testHarmonicEnergy<UnitVector<double,3>, 2>();
testCosseratEnergy(); testCosseratEnergy();
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment