Skip to content
Snippets Groups Projects
  1. Aug 11, 2022
    • Ansgar Burchardt's avatar
      fix build failure with GCC 12 · 57737833
      Ansgar Burchardt authored
      This fixed the following error when building with GCC 12.1.0-8 (Debian):
      
      ```
      /src/dune-gfe/dune/gfe/rotation.hh:225:42: error: invalid declarator before 'axis'
        225 |     Rotation<T,3>(Dune::FieldVector<T,3> axis, T angle)
            |                                          ^~~~
      /src/dune-gfe/dune/gfe/rotation.hh:225:41: error: expected ')' before 'axis'
        225 |     Rotation<T,3>(Dune::FieldVector<T,3> axis, T angle)
            |                  ~                      ^~~~~
            |                                         )
      ```
      Verified
      57737833
  2. Jul 12, 2022
  3. Mar 03, 2022
    • Sander, Oliver's avatar
      Test (some of) the exp and log methods · c20c7471
      Sander, Oliver authored
      This triggers bugs in the Rotation and RigidBodyMotion classes.
      
      In particular, it triggers what Jonathan Youett fixed in the
      never-merged merge request
      
        !2
      
      These bugs are fixed in this commit, too:
      * The RigidBodyMotion class gets a `log` method
      * The Rotation<3>::log method now returns EmbeddedTangentVector
        instead of TangentVector.
      c20c7471
  4. Jan 22, 2022
  5. May 11, 2021
    • Müller, Alexander's avatar
      changed tolerances to fix failing tests · a2647f48
      Müller, Alexander authored
      The tests failed since the construction of values of ProductManifold<> in ValueFactory uses random entries between [0.9..1.1]. These are then used for the tests and are projected onto the manifold. 
      
      To pass this tests it is needed to adjust several Taylor expansions and thresholds. For example this commit increases the threshold from `1e-4` to `1e-2` and adds more terms to the Taylor expansion. The reason for this change is explained in the following. 
      
      The problem is, even if the tolerance `1e-4` is sufficient to have a correct function value within machine precision, it is not always sufficient to get correct derivatives since here we lose orders of correctness.
      
      For  example of for sinc(x) we need to put the threshold at `1e-4` to get the correct function value if we use  `1.0-x*x/6.0` as approximation formula.
      
      If we then use this formula within automatic differentiation or finite differences, e.g. the derivative algorithms  "sees" only the following formulas of the first and second derivative:
      
      - Function value: `1.0-x*x/6.0`   This function is implemented
      - First deriv: `-x/3.0`      This sees the derivative algorithms as first derivative
      - Second: `-1.0/3.0`       This sees the derivative algorithms as second derivative
      
      Obviously, this is the case if the function value is inside the region where the Taylor expansion is used.
      
      If we use these functions to test the exactness of the derivatives we need to set the threshold to `x<1e-6` to get exact second order derivatives where the error is within machine precision. Therefore, for larger values `x>1e-6` the exact formula has to be used to get correct results. Unfortunately, in this range the exact derivative are already unstable.
      E.g. the first derivative formula behaves already strange near `x=1e-4`.
      
      Therefore,
      to get a correct derivative value we need to switch to the Taylor expansion earlier (`1e-4`) to prevent using the unstable exact formula. But in this range the Taylor expansion is unable to reproduce an approximation error within machine precision.
      
      I think the only way to fix this problem is to add more terms to the Taylor expansions. Since even if they seem to be sufficient in terms of function value, usually they are not sufficient in terms of derivatives.
      
      For `sin(x)/x` a test ist at https://godbolt.org/z/T995hGec3 and for `acos(x)^2` https://godbolt.org/z/TG9E15jjf.
      a2647f48
  6. May 04, 2021
  7. Nov 20, 2020
    • Sander, Oliver's avatar
      Use ADOL-C for derivatives of the rod energy · da55ad7a
      Sander, Oliver authored
      Previously, the rod3d code used a hand-implemented first derivative
      of the rod energy, and FD for the second derivatives.  This patch
      replaces this by ADOL-C for both first and second derivatives.
      Advantages are:
      * The code is much shorter, and easier to understand.
      * The previous code contained interpolation formulae for
        first-order 1d geodesic finite elements.  This restricted
        rod problems to first-order GFE.  A follow-up patch will
        allow higher-order approximations.
      * The new code runs roughly twice as fast.
      da55ad7a
    • Sander, Oliver's avatar
      Find std math functions by ADL · 87e1da6f
      Sander, Oliver authored
      ADOL-C implements most standard math functions for its
      'adouble' type, and they are not in the namespace 'std'.
      dune-fufem contains a file adolcnamespaceinjections.hh
      which imports some of these methods into the 'std'
      namespace, but that is not the proper way to do it.
      Rather, they should be found by argument-dependent
      lookup (ADL), that is
      
        using std::sin;
        auto v = sin(x);
      87e1da6f
  8. Oct 22, 2019
  9. Jan 03, 2019
  10. May 11, 2018
  11. Jan 15, 2018
  12. Dec 06, 2017
  13. Nov 24, 2017
  14. Nov 14, 2015
  15. Oct 18, 2015
  16. Oct 16, 2015
  17. Aug 29, 2014
  18. Aug 22, 2014
  19. Dec 13, 2013
  20. Dec 09, 2013
    • Oliver Sander's avatar
      Revert patch 9558 · 5b63350b
      Oliver Sander authored
      We normalize unit vectors again in the constructor and the assignment operator.
      This makes sure we never drift away from the unit sphere, and it also allows
      us to init unit spheres with any value in R^n and be sure we obtain a unit
      vector.  This makes the test pass again.  Leaving the projection out didn't
      really make a measurable difference anyway.
      
      [[Imported from SVN: r9574]]
      5b63350b
  21. Dec 06, 2013
    • Oliver Sander's avatar
      Rewrite the exp method with embedded tangent vector argument · 4176c2d9
      Oliver Sander authored
      The old implementation used quaternion multiplication to transport
      the argument to the Lie algebra, and use the standard formula there.
      However, one may as well use the formula for the unit sphere in R^4,
      which is much simpler, and also faster.  I fact, this patch gives
      a few percent of speedup for the overall code.
      
      [[Imported from SVN: r9562]]
      4176c2d9
  22. Dec 05, 2013
    • Oliver Sander's avatar
      Get rid of method exp(p, EmbeddedTangentVector) completely. · a2df8a93
      Oliver Sander authored
      There is one copy which takes FieldVector<T,4> as its second argument.
      Since EmbeddedTangentVector ( = Quaternion<T>) derives from FieldVector<T,4>,
      that second implementation should work in all cases.
      
      [[Imported from SVN: r9560]]
      a2df8a93
    • Oliver Sander's avatar
      Move methods exp with similar arguments next to each other · 3176314d
      Oliver Sander authored
      The methods 
      
      Rotation<T,3> exp(const Rotation<T,3>& p, const EmbeddedTangentVector& v) 
      
      and
      
      otation<T,3> exp(const Rotation<T,3>& p, const Dune::FieldVector<T,4>& v)
      
      do literally the same.  So they should be next to each other in the code.
      
      [[Imported from SVN: r9559]]
      3176314d
    • Oliver Sander's avatar
      Do not normalize unitvectors / unit quaternions in constructors and operator= · 874cb377
      Oliver Sander authored
      This effectively means that we use another prolongation of the distance 
      function on M into the surrounding space.  Since the prolongation does not
      matter this patch should not change the algorithm behavior.  However, it
      shaves off a few norm calculations and division.  I cannot really measure
      any difference though.
      
      A possible effect of this is that while all values should remain on the
      manifold, they may start to 'drift away' due to numerical artifacts.
      So we may have to add an occasional renormalization step eventually.
      
      [[Imported from SVN: r9558]]
      874cb377
  23. Sep 03, 2013
  24. Feb 14, 2013
  25. Nov 06, 2012
  26. Feb 08, 2012
  27. Jan 12, 2012
Loading