Skip to content
Snippets Groups Projects
  1. Jul 09, 2021
  2. Jul 02, 2021
    • Lisa Julia Nebel's avatar
      Fix error in nonplanarcosseratshellenergy · 3ad0e2c6
      Lisa Julia Nebel authored
      The contravariant base vectors were not calculated correctly.
      The contravariant base vectors are the *columns* of the inverse of the covariant matrix, not the rows.
      To fix this, take the rows of the transpose of inverse of the covariant matrix.
      3ad0e2c6
  3. Jun 10, 2021
  4. May 11, 2021
    • Müller, Alexander's avatar
      added ProductManifold class · badc23be
      Müller, Alexander authored
      badc23be
    • 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
  5. May 05, 2021
  6. May 04, 2021
  7. Apr 30, 2021
  8. Apr 22, 2021
  9. Feb 16, 2021
  10. Feb 08, 2021
  11. Jan 20, 2021
  12. Jan 19, 2021
  13. Nov 30, 2020
  14. Nov 20, 2020
    • Sander, Oliver's avatar
      Implement GlobalP2Mapper for 1d grids · baf1f9fd
      Sander, Oliver authored
      Otherwise the Cosserat rod code will not compile without dune-parmg.
      baf1f9fd
    • Sander, Oliver's avatar
      Support rod discretizations of any order · 3fd15b9e
      Sander, Oliver authored
      So far, the Cosserat rod energy implementation hat a first-order
      finite element space hardcoded.  This patch removes that restriction.
      As for the other models in this Dune module, the finite element basis
      is now a template parameter of the model energy, and can be set to
      any reasonable basis.
      3fd15b9e
    • Sander, Oliver's avatar
      Rename RodLocalStiffness to Dune::GFE::CosseratRodEnergy · 2c5aa41d
      Sander, Oliver authored
      It is not a 'stiffness' anymore, but really only implements the
      energy.
      2c5aa41d
    • 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
      Remove the RodAssembler class · 33fd5621
      Sander, Oliver authored
      GeodesicFEAssembler can replace it without problems.
      33fd5621
    • Sander, Oliver's avatar
      Move all rod stress and strain methods to local energy implementation · ac686e40
      Sander, Oliver authored
      As a first step towards getting rid of the RodAssembler class,
      this patch moves the getStrain, getStress, and getResultantForce
      methods to the RodLocalStiffness class.  I am not 100% convinced
      that that is the best place for them, but I can't think of a
      better one right now.
      ac686e40
    • 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
    • Sander, Oliver's avatar
      Fix small errors in code documentation · 7b0e339e
      Sander, Oliver authored
      7b0e339e
  15. Nov 13, 2020
  16. Nov 08, 2020
  17. Nov 05, 2020
  18. Nov 03, 2020
  19. Oct 21, 2020
  20. Oct 20, 2020
  21. Oct 12, 2020
    • Lisa Julia Nebel's avatar
      Add sumenergy.hh, this class assembles the a sum of energies for a single... · 085a0e42
      Lisa Julia Nebel authored
      Add sumenergy.hh, this class assembles the a sum of energies for a single element by summing up the energies of each GFE::LocalEnergy.
      
      This class works similarly to the class Dune::Elasticity::SumEnergy, where Dune::Elasticity::SumEnergy extends
      Dune::Elasticity::LocalEnergy and Dune::GFE::SumEnergy extends Dune::GFE::LocalEnergy.
      085a0e42
  22. Oct 08, 2020
Loading