diff --git a/dune/gfe/localgeodesicfefunction.hh b/dune/gfe/localgeodesicfefunction.hh index ccf8bdea915ea6fa9f4be6a6c47922ca83c4d28c..165846306700488deb74b52307ca79fcac8f9d50 100644 --- a/dune/gfe/localgeodesicfefunction.hh +++ b/dune/gfe/localgeodesicfefunction.hh @@ -278,7 +278,7 @@ evaluateDerivativeFD(const Dune::FieldVector<ctype, dim>& local) const { double eps = 1e-6; - Dune::FieldMatrix<ctype, EmbeddedTangentVector::size, dim> result; + Dune::FieldMatrix<ctype, EmbeddedTangentVector::dimension, dim> result; for (int i=0; i<dim; i++) { @@ -291,7 +291,7 @@ evaluateDerivativeFD(const Dune::FieldVector<ctype, dim>& local) const EmbeddedTangentVector fdDer = evaluate(forward).globalCoordinates() - evaluate(backward).globalCoordinates(); fdDer /= 2*eps; - for (int j=0; j<EmbeddedTangentVector::size; j++) + for (int j=0; j<EmbeddedTangentVector::dimension; j++) result[j][i] = fdDer[j]; } @@ -376,8 +376,8 @@ evaluateFDDerivativeOfValueWRTCoefficient(const Dune::FieldVector<ctype, dim>& l cornersPlus [coefficient] = TargetSpace::exp(coefficients_[coefficient], forwardVariation); cornersMinus[coefficient] = TargetSpace::exp(coefficients_[coefficient], backwardVariation); - LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fPlus(cornersPlus); - LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fMinus(cornersMinus); + LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fPlus(localFiniteElement_,cornersPlus); + LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fMinus(localFiniteElement_,cornersMinus); TargetSpace hPlus = fPlus.evaluate(local); TargetSpace hMinus = fMinus.evaluate(local); @@ -501,7 +501,9 @@ evaluateFDDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim> Tensor3<double,embeddedDim,embeddedDim,dim>& result) const { double eps = 1e-6; - for (int j=0; j<TargetSpace::EmbeddedTangentVector::size; j++) { + static const int embeddedDim = TargetSpace::EmbeddedTangentVector::dimension; + + for (int j=0; j<embeddedDim; j++) { std::vector<TargetSpace> cornersPlus = coefficients_; std::vector<TargetSpace> cornersMinus = coefficients_; @@ -511,26 +513,26 @@ evaluateFDDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim> aMinus[j] -= eps; cornersPlus[coefficient] = TargetSpace(aPlus); cornersMinus[coefficient] = TargetSpace(aMinus); - LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fPlus(cornersPlus); - LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fMinus(cornersMinus); + LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fPlus(localFiniteElement_,cornersPlus); + LocalGeodesicFEFunction<dim,double,LocalFiniteElement,TargetSpace> fMinus(localFiniteElement_,cornersMinus); - Dune::FieldMatrix<double,TargetSpace::EmbeddedTangentVector::size,dim> hPlus = fPlus.evaluateDerivative(local); - Dune::FieldMatrix<double,TargetSpace::EmbeddedTangentVector::size,dim> hMinus = fMinus.evaluateDerivative(local); + Dune::FieldMatrix<double,embeddedDim,dim> hPlus = fPlus.evaluateDerivative(local); + Dune::FieldMatrix<double,embeddedDim,dim> hMinus = fMinus.evaluateDerivative(local); result[j] = hPlus; result[j] -= hMinus; result[j] /= 2*eps; TargetSpace q = evaluate(local); - Dune::FieldVector<double,TargetSpace::EmbeddedTangentVector::size> foo; + Dune::FieldVector<double,embeddedDim> foo; for (int l=0; l<dim; l++) { - for (int k=0; k<TargetSpace::EmbeddedTangentVector::size; k++) + for (int k=0; k<embeddedDim; k++) foo[k] = result[j][k][l]; foo = q.projectOntoTangentSpace(foo); - for (int k=0; k<TargetSpace::EmbeddedTangentVector::size; k++) + for (int k=0; k<embeddedDim; k++) result[j][k][l] = foo[k]; }