So you're using the 'bendy' branch in Firedrake as well?
If so, JacobianDeterminant gets torn apart into components of grad(x) [x = coordinate field] within UFL.
ufl/algorithms/change_to_reference.py:
@memoized_handler
def jacobian_determinant(self, o):
domain = o.domain()
J = self.jacobian(Jacobian(domain))
return determinant_expr(J)
where determinant_expr is the obvious thing (use git grep determinant_expr from within a UFL subdirectory if you want to look at this)
Note there's some magic that maps JacobianDeterminant to the handler jacobian_determinant.
I think that pointing CellSize at JacobianDeterminant within Firedrake is something I'll revert in the future, since it's not backwards compatible for simplices (despite generalising well to other shapes). Will need to find another name, or just let people use the UFL object, like for FacetNormal.