コード例 #1
0
ファイル: firedrake.py プロジェクト: wei-pan/tsfc
    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}
コード例 #2
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", ()))
            }
コード例 #3
0
ファイル: test_pickle_gem.py プロジェクト: wei-pan/tsfc
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)
コード例 #4
0
    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", ()))
            }