Esempio n. 1
0
def make_c_evaluate(function, c_name="evaluate", ldargs=None):
    """Generates, compiles and loads a C function to evaluate the
    given Firedrake :class:`Function`."""

    from os import path
    from ffc import compile_element
    from pyop2 import compilation
    import firedrake.pointquery_utils as pq_utils

    function_space = function.function_space()

    src = pq_utils.src_locate_cell(function_space.mesh())
    src += compile_element(function_space.ufl_element(), function_space.dim)
    src += pq_utils.make_wrapper(function,
                                 forward_args=["double*", "double*"],
                                 kernel_name="evaluate_kernel",
                                 wrapper_name="wrap_evaluate")

    if ldargs is None:
        ldargs = []
    ldargs += ["-lspatialindex"]
    return compilation.load(src,
                            "cpp",
                            c_name,
                            cppargs=["-I%s" % path.dirname(__file__)],
                            ldargs=ldargs)
Esempio n. 2
0
def make_c_evaluate(function, c_name="evaluate", ldargs=None):
    """Generates, compiles and loads a C function to evaluate the
    given Firedrake :class:`Function`."""

    from os import path
    from ffc import compile_element
    from pyop2 import compilation

    def make_args(function):
        from pyop2 import op2

        arg = function.dat(op2.READ, function.cell_node_map())
        arg.position = 0
        return (arg,)

    def make_wrapper(function, **kwargs):
        from pyop2.base import build_itspace
        from pyop2.sequential import generate_cell_wrapper

        args = make_args(function)
        return generate_cell_wrapper(build_itspace(args, function.cell_set), args, **kwargs)

    function_space = function.function_space()
    ufl_element = function_space.ufl_element()
    coordinates = function_space.mesh().coordinates
    coordinates_ufl_element = coordinates.function_space().ufl_element()

    src = compile_element(ufl_element, coordinates_ufl_element, function_space.dim)

    src += make_wrapper(
        coordinates,
        forward_args=["void*", "double*", "int*"],
        kernel_name="to_reference_coords_kernel",
        wrapper_name="wrap_to_reference_coords",
    )

    src += make_wrapper(
        function, forward_args=["double*", "double*"], kernel_name="evaluate_kernel", wrapper_name="wrap_evaluate"
    )

    with open(path.join(path.dirname(__file__), "locate.cpp")) as f:
        src += f.read()

    if ldargs is None:
        ldargs = []
    ldargs += ["-lspatialindex"]
    return compilation.load(src, "cpp", c_name, cppargs=["-I%s" % path.dirname(__file__)], ldargs=ldargs)
Esempio n. 3
0
def make_c_evaluate(function, c_name="evaluate", ldargs=None):
    """Generates, compiles and loads a C function to evaluate the
    given Firedrake :class:`Function`."""

    from os import path
    from ffc import compile_element
    from pyop2 import compilation
    import firedrake.pointquery_utils as pq_utils

    function_space = function.function_space()

    src = pq_utils.src_locate_cell(function_space.mesh())
    src += compile_element(function_space.ufl_element(), function_space.dim)
    src += pq_utils.make_wrapper(
        function, forward_args=["double*", "double*"], kernel_name="evaluate_kernel", wrapper_name="wrap_evaluate"
    )

    if ldargs is None:
        ldargs = []
    ldargs += ["-lspatialindex"]
    return compilation.load(src, "cpp", c_name, cppargs=["-I%s" % path.dirname(__file__)], ldargs=ldargs)
Esempio n. 4
0
File: test.py Progetto: doru1004/FFC
 def testLobatto(self):
     "Test that Lobatto elements compile."
     for degree in range(1, 4):
         element = FiniteElement("Lobatto", interval, degree)
         compile_element(element)
Esempio n. 5
0
File: test.py Progetto: doru1004/FFC
 def testRadau(self):
     "Test that Radau elements compile."
     for degree in range(3):
         element = FiniteElement("Radau", interval, degree)
         compile_element(element)
Esempio n. 6
0
 def testLobatto(self):
     "Test that Lobatto elements compile."
     for degree in range(1, 4):
         element = FiniteElement("Lobatto", interval, degree)
         compile_element(element)
Esempio n. 7
0
 def testRadau(self):
     "Test that Radau elements compile."
     for degree in range(3):
         element = FiniteElement("Radau", interval, degree)
         compile_element(element)