Add a test matrix for coupleable interface / mooseVariableData underlying values provided
Motivation
This interface has to deal with a combinatorial problem but its design relies on using references to a coupled stored attributes in the variableData class. These attributes can be lagged if not properly recomputed on the various reinit called in SystemBase. For example, a nodal aux-kernel can retrieve elemental values by accident if the quantity is not computed in computeNodalValues
Why is it combinatorial?
- 5 locations to reinit on (elem, neighbor, node, face, lowerD)
- 3 variable types (FE, FV, linear FV)
- 3 data sizes (single valued, 3-valued vector, arbitrary size array)
- 2 AD status (AD or not)
- 2 data types (dof and u values)
- 3 states (current, old, older)
- 5 quantity types (value, gradient, div, curl, second space derivative)
- 3 time derivative types (current, dot, dotdot)
so potentially up to 8,100 routines in the data class. This is strongly reduced by
- the Coupleable interface centralizes/down-selects this a lot and needs a lot less routines, for example
coupledValueworks for all 4 locations,genericCoupledValuecan also handle the AD status - templating on the data size
- the variable dispatches to several mooseVariableData members: one for the elem, one for the neighbor and one for the lower D, so this removes the "locations" dimension
Design
Organized and systematic test suite covering all independent cases It would be worth using a unit test for this as a thousand regression test, even using CSVs, is undesirable
Impact
Catching any potential bug with the Coupleable API with near 100% coverage Giving us great confidence in its results and establishing a pathway for expansion