PetscFEIntegrateJacobian_Basic has four layers of loops: e - element f - component of field being differentiated g - component of field we're differentiating against q - quadrature point
It looks like g3_func and friends are being called once for each combination of (e,f,g,q), even though the calls to g3_func are independent of (f,g). If g3_func is expensive, this duplication seems a bit slow. It seems like the loops should be flipped to be (e,q,f,g) major order, with the user functions hoisted up to the (e,q) level. Is there a reason not to do this? Geoffrey
