1. 25 Jul, 2022 6 commits
    • graeser's avatar
      Several small improvements · 3204d7b6
      graeser authored
      * Document divergence evaluation code
      * Add support for directly passing a tree path to `testFunction()` and `trialFunction()`
      * When adding integrated (bi)linear forms this is now reflected in
        the assembly code by integrating those terms separately. This has the
        advantage, that different quadrature rules can be used for different terms.
        Example: While `integrate(u*v + dot(grad(u),grad(v)))` uses a single quadrature
        rule for the whole expresion, using `integrate(u*v) + integrate(dot(grad(u),grad(v)))`
        will use separate rules for both terms.
      3204d7b6
    • graeser's avatar
      771c9120
    • graeser's avatar
      fd22f318
    • graeser's avatar
      ea1de913
    • graeser's avatar
      Fix a nasty initialization bug · 8607d093
      graeser authored
      `FieldVector<K,n>{0}` leads to aggregate initialization
      which only initializes the first entry in contrast to
      `FieldVector<K,n>(0)` which calls the constructor
      that properly initializes all entries.
      8607d093
    • graeser's avatar
      Improve product and caching · 4d71a0e1
      graeser authored
      * Implement more cases for `operator*` and `dot`.
      * Make cache a (non-static) member of the local assembler.
        This allows to do thread-parallel assembly, if the local
        assembler is thread-local. Before this patch, the static
        cache member was shared among threads which leads to concurent
        read/write access.
      * Add utility to reconstruct the global basis. The local assembler
        may need the global basis. Using this utility it can be extracted
        from the forms (that already know it) and does not need to be
        passed to `integrate(...)` separately.
      4d71a0e1
  2. 17 Dec, 2021 4 commits
    • graeser's avatar
      Avoid warnings in benchmark · 8d4fc632
      graeser authored
      8d4fc632
    • graeser's avatar
      Update example · 1ca63f82
      graeser authored
      1ca63f82
    • graeser's avatar
      Add helper class FormOperator · d2d61409
      graeser authored
      This allows to uniformly handle linear transformation
      of raw values and forms.
      d2d61409
    • graeser's avatar
      Improve product handling · 394dd378
      graeser authored
      * Move handling of raw values to generic `productForm` function
      * Unify handling of raw values by wrapping them into forms
      * Guard `operator*` using concept check to avoid that is
        activates `Dune::dot` and thus leads to ambiguity
      394dd378
  3. 16 Dec, 2021 5 commits
    • graeser's avatar
      Implement forEachTupleEntry · 7a2b12e7
      graeser authored
      The `tuple`-specific version leads to shorter error messages
      compared to the generic `Hybrid::forEach` implementation.
      7a2b12e7
    • graeser's avatar
      Conditionally disable operator* by concept check · 0aacd186
      graeser authored
      This solves a nasty ambiguity problem without
      having to qualify the call to `Forms::dot`:
      
      The `Dune::dot(a,b)` function from `dune/common/dotproduct.hh` is
      based on `operator*` and SFINAE-removed from the overload
      set if `a*b` is not a valid expression. Hence if `operator*`
      is available for forms, the `Dune::dot` function is available
      and leads to ambiguity. By disabling `Forms::operator*` for
      non-supported types this is avoided, because `Dune::dot` no longer
      exists.
      0aacd186
    • graeser's avatar
      Avoid ambiguity for dot · c220a708
      graeser authored
      * Provide forward declarations for dot-overloads
      * Explicitly qualify internal calls to dot
      c220a708
    • graeser's avatar
      Make Coordinate type a non-template · 4b5caa65
      graeser authored
      We only allow local coordinates and the type is easily accessible.
      Hence we can avoid making it a template of `operator()`.
      4b5caa65
    • graeser's avatar
      Make ProductForm binary and split of unary product · bee92470
      graeser authored
      We never use ternary product. Hence we can split the implementation
      into the product of two forms and a transformation of a single form.
      While this introduces some code duplication, it increases clarity
      and avoids a lot of `tuple` and variadic template code.
      bee92470
  4. 29 Nov, 2021 7 commits
  5. 09 Nov, 2021 2 commits
  6. 08 Nov, 2021 3 commits
  7. 27 Oct, 2021 1 commit
    • graeser's avatar
      Improve implementation · 9a2e11bb
      graeser authored
      * Implement distributive law
      * Implement transposing and operator-
      * Support generic products
      * Add some documentation
      * Put more use examples into comments of examples:
        * Sum of linear- and bilinear forms
        * Constant and non-constant coeffients
        * Linear elasticity
      9a2e11bb
  8. 25 Oct, 2021 3 commits
  9. 24 Oct, 2021 6 commits
  10. 22 Oct, 2021 1 commit