Panzer: Proposed modification to Panzer::BasisValues2
Created by: seamill
Currently the BasisValues2 class incorporates everything associated with a basis for a specific integration rule. This includes things that have nothing to do with the integration rule (e.g. basis coordinates). This makes it tricky to look up a basis rule in the workset without knowing what integration rules are available (at least with the recently added access functions).
I propose we split BasisValues2 into BasisIntegrationValues (PureBasis + IntegrationRule information) and BasisValues (just values associated with the basis).
This way we can have two separate lookups within the workset with different requirements. One needs just a BasisDescriptor (returns BasisValues), the other requires both a BasisDescriptor and an IntegrationRule (returns BasisIntegrationValues).
Within BasisValues we would have:
- basis coordinates
- basis reference coordinates (w.r.t. cell primitive)
- basis vectors (unit basis vector along vector basis direction)
- weighted basis vectors (basis vector scaled by the jacobian -> face area or edge length)
- basis reference vectors (w.r.t. cell primitive)
- basis orientation (not sure what this looks like yet, but it needs to be stored with the basis instead of just the DOFManager/Indexer)
- jacobian+inverse+determinant (values at basis coordinates - probably not necessary)
Some of the above would be useful for evaluating functions at the points associated with a basis, other stuff is nice to have when plotting.
Within BasisIntegrationValues we would have almost everything we currently have in BasisValues2.
This modification will also help with consolidating the 4 'evaluateValues' calls we have in BasisValues2. It will also help reduce the allocations for basis information when we have multiple integration rules associated with a single basis (e.g. with DG).
Interested parties @eric-c-cyr @rppawlo @egphill