Ejemplo n.º 1
0
    def __init__(self, mesh: MeshInstance, element_type: MeshElementType,
                 entry_expr: impl.Expr):
        self.mesh = mesh
        self.element_type = element_type
        self.entry_expr = entry_expr

        element_field = self.mesh.fields[self.element_type]
        for key, attr in element_field.field_dict.items():
            global_entry_expr = impl.Expr(
                _ti_core.get_index_conversion(
                    self.mesh.mesh_ptr, element_type, entry_expr,
                    ConvType.l2r if element_field.attr_dict[key].reorder else
                    ConvType.l2g))  # transform index space
            global_entry_expr_group = impl.make_expr_group(
                *tuple([global_entry_expr]))
            if isinstance(attr, MatrixField):
                setattr(
                    self, key,
                    _IntermediateMatrix(attr.n, attr.m, [
                        impl.Expr(
                            _ti_core.subscript(e.ptr, global_entry_expr_group))
                        for e in attr.get_field_members()
                    ]))
            elif isinstance(attr, StructField):
                raise RuntimeError('ti.Mesh has not support StructField yet')
            else:  # isinstance(attr, Field)
                var = attr.get_field_members()[0].ptr
                setattr(
                    self, key,
                    impl.Expr(_ti_core.subscript(var,
                                                 global_entry_expr_group)))

        for element_type in self.mesh._type.elements:
            setattr(self, element_type_name(element_type),
                    impl.mesh_relation_access(self.mesh, self, element_type))
Ejemplo n.º 2
0
 def subscript(self, *indices):
     assert len(indices) == 1
     entry_expr = self.mesh.get_relation_access(self.from_index,
                                                self.to_element_type,
                                                impl.Expr(indices[0]).ptr)
     entry_expr.type_check(impl.get_runtime().prog.config)
     return MeshElementFieldProxy(self.mesh, self.to_element_type,
                                  entry_expr)
Ejemplo n.º 3
0
 def subscript(self, *indices):
     assert (len(indices) == 1)
     entry_expr = _ti_core.get_relation_access(self.mesh.mesh_ptr,
                                               self.from_index.ptr,
                                               self.to_element_type,
                                               impl.Expr(indices[0]).ptr)
     entry_expr.type_check()
     return MeshElementFieldProxy(self.mesh, self.to_element_type,
                                  entry_expr)
Ejemplo n.º 4
0
 def size(self):
     return impl.Expr(
         _ti_core.get_relation_size(self.mesh.mesh_ptr, self.from_index.ptr,
                                    self.to_element_type))
Ejemplo n.º 5
0
 def id(self):  # return the global non-reordered index
     l2g_expr = impl.Expr(
         _ti_core.get_index_conversion(self.mesh.mesh_ptr,
                                       self.element_type, self.entry_expr,
                                       ConvType.l2g))
     return l2g_expr
Ejemplo n.º 6
0
 def size(self):
     return impl.Expr(
         self.mesh.get_relation_size(self.from_index, self.to_element_type))