• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FEniCS / ffcx / 40208823333
89%
main: 89%

Build:
Build:
LAST BUILD BRANCH: gh-readonly-queue/main/pr-906-efb27548c8a2453afcf7894ee196936d9e10f7c8
DEFAULT BRANCH: main
Ran 25 Oct 2026 03:53PM UTC
Jobs 1
Files 59
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 Oct 2026 03:49PM UTC coverage: 88.75% (+0.1%) from 88.611%
40208823333

push

github

web-flow
Sum-factorise coefficient evaluation in sum-factorised contractions (#904)

* Sum-factorise coefficient evaluation in sum-factorised contractions

With `sum_factorization_contraction`, the integrand was cached on the whole
tensor product rule, but each coefficient in it was still evaluated at
every quadrature point by a sum over all its dofs, O(Q^d N^d). For actions
this dominated the kernel from moderate degree on.

Coefficients whose tables factorise over the rule's directions are now
evaluated on the whole rule before the quadrature loop, contracting their
dofs with the 1D tables one direction at a time, last direction first:
O(N^d Q + ... + Q^d N). The quadrature loop then reads the result.

- The stage buffers count against the contraction's stack budget; a
  coefficient whose buffers don't fit keeps the per-point sum.
- Restricted, piecewise and permuted tables keep the per-point sum.
- Forms without coefficients generate the same code as before.

On hexahedra at degree 8 this makes the mass and Laplace actions 8-13x
faster.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Pass sum-factorised coefficient evaluation explicitly

Carry the coefficient evaluation code and its stack budget in a small
object passed through the varying partition, instead of instance state
set and reset around it. Keep the budget in scalars, share the test for
a table factorising over the rule's directions with the contraction
planning, and take the dof and point counts from the index helpers.

Each stage is now set from its first dof's term and the other dofs add
to it, instead of being zeroed first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Simplify sum-factorised coefficient contraction generation

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Garth N. Wells <gnw20@cam.ac.uk>

74 of 75 new or added lines in 1 file covered. (98.67%)

5057 of 5698 relevant lines covered (88.75%)

0.89 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
96.42
0.2% ffcx/codegeneration/integral_generator.py
Jobs
ID Job ID Ran Files Coverage
1 40208823333.1 25 Oct 2026 03:53PM UTC 59
88.75
GitHub Action Run
Source Files on build 40208823333
  • Tree
  • List 59
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • efb27548 on github
  • Prev Build on gh-readonly-queue/main/pr-901-b3a4d493855ee7ea713969e94f044fd6cd56ed3d (#40207796927)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc