def construct_kernel(self, name, body): """Construct a fully built :class:`Kernel`. This function contains the logic for building the argument list for assembly kernels. :arg name: function name :arg body: function body (:class:`coffee.Block` node) :returns: :class:`Kernel` object """ args = [self.local_tensor] args.extend(self.coefficient_args) args.extend(self.coordinates_args) # Facet number(s) if self.integral_type == "exterior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet"))) elif self.integral_type == "interior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_0"))) args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_1"))) # Cell orientation(s) if self.interior_facet: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_0"))) args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_1"))) else: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation"))) return KernelBuilderBase.construct_kernel(self, name, args, body)
def _construct_kernel_from_body(self, name, body, quadrature_rule): """Construct a fully built kernel function. This function contains the logic for building the argument list for assembly kernels. :arg name: function name :arg body: function body (:class:`coffee.Block` node) :arg quadrature rule: quadrature rule (ignored) :returns: a COFFEE function definition object """ args = [self.local_tensor] args.extend(self.coefficient_args) args.extend(self.coordinates_args) # Facet and vertex number(s) if self.integral_type == "exterior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet"))) elif self.integral_type == "interior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_0"))) args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_1"))) elif self.integral_type == "vertex": args.append(coffee.Decl("std::size_t", coffee.Symbol("vertex"))) # Cell orientation(s) if self.interior_facet: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_0"))) args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_1"))) else: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation"))) return KernelBuilderBase.construct_kernel(self, name, args, body)
def construct_kernel(self, name, body): """Construct a fully built kernel function. This function contains the logic for building the argument list for assembly kernels. :arg name: function name :arg body: function body (:class:`coffee.Block` node) :returns: a COFFEE function definition object """ args = [self.local_tensor] args.extend(self.coefficient_args) args.extend(self.coordinates_args) # Facet and vertex number(s) if self.integral_type == "exterior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet"))) elif self.integral_type == "interior_facet": args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_0"))) args.append(coffee.Decl("std::size_t", coffee.Symbol("facet_1"))) elif self.integral_type == "vertex": args.append(coffee.Decl("std::size_t", coffee.Symbol("vertex"))) # Cell orientation(s) if self.interior_facet: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_0"))) args.append(coffee.Decl("int", coffee.Symbol("cell_orientation_1"))) else: args.append(coffee.Decl("int", coffee.Symbol("cell_orientation"))) return KernelBuilderBase.construct_kernel(self, name, args, body)