def __init__(self, integral_type, subdomain_id, domain_number): """Initialise a kernel builder.""" super(KernelBuilder, self).__init__(integral_type.startswith("interior_facet")) self.kernel = Kernel(integral_type=integral_type, subdomain_id=subdomain_id, domain_number=domain_number) self.local_tensor = None self.coordinates_arg = None self.coefficient_args = [] self.coefficient_split = {} # Facet number if integral_type in ['exterior_facet', 'exterior_facet_vert']: facet = gem.Variable('facet', (1, )) self._facet_number = { None: gem.VariableIndex(gem.Indexed(facet, (0, ))) } elif integral_type in ['interior_facet', 'interior_facet_vert']: facet = gem.Variable('facet', (2, )) self._facet_number = { '+': gem.VariableIndex(gem.Indexed(facet, (0, ))), '-': gem.VariableIndex(gem.Indexed(facet, (1, ))) } elif integral_type == 'interior_facet_horiz': self._facet_number = {'+': 1, '-': 0}
def __init__(self, integral_type, subdomain_id, domain_number): """Initialise a kernel builder.""" super(KernelBuilder, self).__init__(integral_type.startswith("interior_facet")) self.integral_type = integral_type self.local_tensor = None self.coordinates_args = None self.coefficient_args = None self.coefficient_split = None if self.interior_facet: self._cell_orientations = (gem.Variable("cell_orientation_0", ()), gem.Variable("cell_orientation_1", ())) else: self._cell_orientations = (gem.Variable("cell_orientation", ()), ) if integral_type == "exterior_facet": self._entity_number = { None: gem.VariableIndex(gem.Variable("facet", ())) } elif integral_type == "interior_facet": self._entity_number = { '+': gem.VariableIndex(gem.Variable("facet_0", ())), '-': gem.VariableIndex(gem.Variable("facet_1", ())) } elif integral_type == "vertex": self._entity_number = { None: gem.VariableIndex(gem.Variable("vertex", ())) }
def test_pickle_gem(protocol): f = gem.VariableIndex(gem.Indexed(gem.Variable('facet', (2, )), (1, ))) q = gem.Index() r = gem.Index() _1 = gem.Indexed(gem.Literal(numpy.random.rand(3, 6, 8)), (f, q, r)) _2 = gem.Indexed( gem.view(gem.Variable('w', (None, None)), slice(8), slice(1)), (r, 0)) expr = gem.ComponentTensor(gem.IndexSum(gem.Product(_1, _2), (r, )), (q, )) unpickled = pickle.loads(pickle.dumps(expr, protocol)) assert repr(expr) == repr(unpickled)
def __init__(self, integral_type, subdomain_id, domain_number, scalar_type=None, diagonal=False): """Initialise a kernel builder.""" if diagonal: raise NotImplementedError( "Assembly of diagonal not implemented yet, sorry") super(KernelBuilder, self).__init__(scalar_type, integral_type.startswith("interior_facet")) self.integral_type = integral_type self.local_tensor = None self.coordinates_args = None self.coefficient_args = None self.coefficient_split = None if self.interior_facet: self._cell_orientations = (gem.Variable("cell_orientation_0", ()), gem.Variable("cell_orientation_1", ())) else: self._cell_orientations = (gem.Variable("cell_orientation", ()), ) if integral_type == "exterior_facet": self._entity_number = { None: gem.VariableIndex(gem.Variable("facet", ())) } elif integral_type == "interior_facet": self._entity_number = { '+': gem.VariableIndex(gem.Variable("facet_0", ())), '-': gem.VariableIndex(gem.Variable("facet_1", ())) } elif integral_type == "vertex": self._entity_number = { None: gem.VariableIndex(gem.Variable("vertex", ())) }