Skip to content


This branch introduces 3 things: matrix free operators, a SIMD library, and a optimized Roe solver (possibly the latter could be separated in a different MR). The matrix free operators come from the mini app that Dave developed and are called from collections, this requires a load-interleave / de-interleave operation (to maintain the current data structure and API). The load/unload operation is quite expensive (Other% of the operator cost for the IPWRTDB), nevertheless due to increased locality and SIMD instructions the new operators are several times faster then the old ones.

Noteworthy differences from the mini app are the extensive restructuring of the SIMD library that enabled the separation from data type and matrix free algorithm and the IPWRTDB operator.

The SIMD library selects automatically (if enabled) the most specialized data type among avx512, avx2, and scalar. It should be trivial to extend the library to other instructions set extensions (note that I have not tested avx512).

The matrix free operators implemented are

BwdTrans IProductWRTBase IProductWRTDerivBase PhysDeriv Helmholtz
quad x x x x
hex x x x x
tri x x x x
prism x x x x
tet x x x x
Edited by Chris Cantwell

Merge request reports