diff --git a/src/bisection-example-new.cc b/src/bisection-example-new.cc index 3fa26ee11203e7501bfe9ca28a7a8a612b8883f6..4ac1d42e00324193048b331e060e24831ea1b3bb 100644 --- a/src/bisection-example-new.cc +++ b/src/bisection-example-new.cc @@ -62,22 +62,28 @@ class SampleFunctional { since A is symmetric. */ - SmallVector tmp2; - A_.mv(descDir, tmp2); - double const rest_A = tmp2 * descDir; - - SmallVector tmp3; - A_.mv(x, tmp3); - double const rest_b = (b_ - tmp3) * descDir; - - Dune::BlockVector<SmallVector> xx; // FIXME: we actually want x here - Dune::BlockVector<SmallVector> dd; // FIXME: we actually want descDir here - - typedef MyNonlinearity<dimension, SampleFunction> MyNonlinearityType; - MyNonlinearityType phi; - typedef DirectionalConvexFunction<MyNonlinearityType> - MyDirectionalConvexFunctionType; - MyDirectionalConvexFunctionType rest(rest_A, rest_b, phi, xx, dd); + { + SmallVector tmp2; + A_.mv(descDir, tmp2); + double const rest_A = tmp2 * descDir; + + SmallVector tmp3; + A_.mv(x, tmp3); + double const rest_b = (b_ - tmp3) * descDir; + + Dune::BlockVector<SmallVector> xx; // FIXME: we actually want x here + Dune::BlockVector<SmallVector> dd; // FIXME: we actually want descDir here + + typedef MyNonlinearity<dimension, SampleFunction> MyNonlinearityType; + MyNonlinearityType phi; + typedef DirectionalConvexFunction<MyNonlinearityType> + MyDirectionalConvexFunctionType; + MyDirectionalConvexFunctionType rest(rest_A, rest_b, phi, xx, dd); + + // Experiment a bit + Interval<double> D; + rest.subDiff(0, D); + } if (descDir == SmallVector(0.0)) return SmallVector(0.0); diff --git a/src/mynonlinearity.cc b/src/mynonlinearity.cc index 7c06810459f91afefaa97e51e98e55cd7f524b6a..4fe2eb5e17355f613c0ede8308b0f4dd0470877d 100644 --- a/src/mynonlinearity.cc +++ b/src/mynonlinearity.cc @@ -24,16 +24,16 @@ class MyNonlinearity { typedef Dune::BlockVector<SmallVector> VectorType; typedef Dune::BlockVector<SmallMatrix> MatrixType; - void directionalSubDiff(SmallVector u, SmallVector v, Interval<double>& D) { - if (u == SmallVector(0.0)) { - D[0] = D[1] = func_.rightDifferential(0); - } else if (u * v > 0) { - D[1] = (v * u) * func_.rightDifferential(u.two_norm()) / u.two_norm(); - D[0] = (v * u) * func_.leftDifferential(u.two_norm()) / u.two_norm(); - } else { - D[1] = (v * u) * func_.leftDifferential(u.two_norm()) / u.two_norm(); - D[0] = (v * u) * func_.rightDifferential(u.two_norm()) / u.two_norm(); - } + void directionalSubDiff(VectorType u, VectorType v, Interval<double>& D) { + // if (u == SmallVector(0.0)) { + // D[0] = D[1] = func_.rightDifferential(0); + // } else if (u * v > 0) { + // D[1] = (v * u) * func_.rightDifferential(u.two_norm())/u.two_norm(); + // D[0] = (v * u) * func_.leftDifferential(u.two_norm())/u.two_norm(); + // } else { + // D[1] = (v * u) * func_.leftDifferential(u.two_norm())/u.two_norm(); + // D[0] = (v * u) * func_.rightDifferential(u.two_norm())/u.two_norm(); + // } } void directionalDomain(const VectorType&, const VectorType&,