Skip to content
Snippets Groups Projects
  • Dominic Kempf's avatar
    0f957482
    Rewrite accumulation term splitting to not use FunctionView · 0f957482
    Dominic Kempf authored
    The introduction of FunctionView turned out to be a major problem
    with more complicated forms. The original idea was to preserver the
    structure of the finite element in a way, that loops over components
    of a mixed element are realized by actual loops (treating them with
    free indices and such). However, this causes quite some nightmares and
    was never implemented as generically as needed (I even doubt that is
    possible).
    
    However, there is another option, which is to unroll any such loops
    on a symbolic level. While this may sound like a bad idea at first
    there is some really positive aspects about it:
    * ListTensor and ComponentTensor nodes collapse completely (and would
      otherwise have a big nightmare potential)
    * Symbolic zeroes do not generate code - important in hyperbolic problems
      where the system matrices are quite sparse or for axiparallel grids,
      where geometric quantities have many zeroes.
    * The compiler would unroll these small loops anyway.
    * TSFC (and I guess also FFC) do it the same way.
    
    Implementing this required me to redo the form splitting algorithm.
    I rethought it and integrated it into the main ufl->loopy visitor.
    0f957482
    History
    Rewrite accumulation term splitting to not use FunctionView
    Dominic Kempf authored
    The introduction of FunctionView turned out to be a major problem
    with more complicated forms. The original idea was to preserver the
    structure of the finite element in a way, that loops over components
    of a mixed element are realized by actual loops (treating them with
    free indices and such). However, this causes quite some nightmares and
    was never implemented as generically as needed (I even doubt that is
    possible).
    
    However, there is another option, which is to unroll any such loops
    on a symbolic level. While this may sound like a bad idea at first
    there is some really positive aspects about it:
    * ListTensor and ComponentTensor nodes collapse completely (and would
      otherwise have a big nightmare potential)
    * Symbolic zeroes do not generate code - important in hyperbolic problems
      where the system matrices are quite sparse or for axiparallel grids,
      where geometric quantities have many zeroes.
    * The compiler would unroll these small loops anyway.
    * TSFC (and I guess also FFC) do it the same way.
    
    Implementing this required me to redo the form splitting algorithm.
    I rethought it and integrated it into the main ufl->loopy visitor.