Panzer: Interface change for PureBasis and PointRule
Created by: seamill
This issue is a followup on a discussion I had with @eric-c-cyr. Currently we pull DataLayouts from PureBasis and PointRule by directly accessing class members
PureBasis::_functional PureBasis::_functional_grad PureBasis::_functional_D2
and
PointRule::dl_scalar PointRule::dl_vector ...
We could move these DataLayout calls over to functions (e.g. PureBasis::DataLayout_Scalar(), or PureBasis::DataLayout_Tensor(int dim0, int dim1, ...) ) that return RCP. The construction call for DataLayouts appear to be pretty cheap so I don't think this will slow anything down.
This would also allow us to work with specific data layouts that are unique to a certain set of evaluators. For example, two evaluators may interact with a rank 3 tensor that is 3x6x2 for each element's integration point, and using an interface like this would be advantageous.
Also, if we are able to define custom basis DataLayouts we could start loading/gathering basis datasets differently. For example: Maxwell's equations on a HGRAD (nodal) basis could be gathered as a 3-vector at each basis point, which could interact directly with a 3-vector residual. This would reduce the number of transformation calls we currently have to use (e.g. VectorToScalar).
However we choose to go, it would be nice to have a consistent interface between PureBasis and PointRule.