diff --git a/test/interillustration.cc b/test/interillustration.cc index 17deabe4a7fc8c781f96aa24a6d49776e654d83c..89a0164526dc87b4d337e6c94c422b06cc767034 100644 --- a/test/interillustration.cc +++ b/test/interillustration.cc @@ -106,11 +106,13 @@ void interpolate(const LocalFEFunctionType& localGeodesicFEFunction, { FieldMatrix<double,3,3> derivative; localGeodesicFEFunction.evaluateDerivativeOfValueWRTCoefficient(v.geometry().corner(0), - partialDerivative, // derive wrt value at first triangle corner + partialDerivative, // select the Lagrange node derivative); - variation0[gridView.indexSet().index(v)] = derivative[1]; - variation1[gridView.indexSet().index(v)] = derivative[2]; + Dune::FieldMatrix<double,2,3> basis = localGeodesicFEFunction.coefficient(partialDerivative).orthonormalFrame(); + + derivative.mtv(basis[0], variation0[gridView.indexSet().index(v)]); + derivative.mtv(basis[1], variation1[gridView.indexSet().index(v)]); } // sample a checkerboard pattern for nicer pictures @@ -191,10 +193,10 @@ int main(int argc, char* argv[]) try coefficients.resize(6); coefficients[0] = TargetSpace(FieldVector<double,3>({1,0,0})); - coefficients[1] = TargetSpace(FieldVector<double,3>({0.5,0.5,0})); + coefficients[1] = TargetSpace(FieldVector<double,3>({0.5,0.5,0.15})); coefficients[2] = TargetSpace(FieldVector<double,3>({0,1,0})); - coefficients[3] = TargetSpace(FieldVector<double,3>({0.5,0,0.5})); - coefficients[4] = TargetSpace(FieldVector<double,3>({0,0.5,0.5})); + coefficients[3] = TargetSpace(FieldVector<double,3>({0.5,0.15,0.5})); + coefficients[4] = TargetSpace(FieldVector<double,3>({0.15,0.5,0.5})); coefficients[5] = TargetSpace(FieldVector<double,3>({0,0,1})); typedef LocalGeodesicFEFunction<dim, double, P2LocalFiniteElement<double,double,dim>, TargetSpace> P2LocalGFEFunctionType;