def jacobian_determinant(self, o): if self._preserve_types[o._ufl_typecode_]: return o domain = o.ufl_domain() J = self.jacobian(Jacobian(domain)) detJ = determinant_expr(J) # TODO: Is "signing" the determinant for manifolds the # cleanest approach? The alternative is to have a # specific type for the unsigned pseudo-determinant. if domain.topological_dimension() < domain.geometric_dimension(): co = CellOrientation(domain) detJ = co * detJ return detJ
def facet_jacobian_determinant(self, o): if self._preserve_types[o._ufl_typecode_]: return o domain = o.ufl_domain() FJ = self.facet_jacobian(FacetJacobian(domain)) detFJ = determinant_expr(FJ) # TODO: Should we "sign" the facet jacobian determinant for # manifolds? It's currently used unsigned in # apply_integral_scaling. # if domain.topological_dimension() < domain.geometric_dimension(): # co = CellOrientation(domain) # detFJ = co*detFJ return detFJ
def jacobian_determinant(self, o): if self._preserve_types[o._ufl_typecode_]: return o domain = o.ufl_domain() J = self.jacobian(Jacobian(domain)) detJ = determinant_expr(J) # TODO: Is "signing" the determinant for manifolds the # cleanest approach? The alternative is to have a # specific type for the unsigned pseudo-determinant. if domain.topological_dimension() < domain.geometric_dimension(): co = CellOrientation(domain) detJ = co*detJ return detJ
def determinant(self, o, A): return determinant_expr(A)