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)
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)
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)
def testLobatto(self): "Test that Lobatto elements compile." for degree in range(1, 4): element = FiniteElement("Lobatto", interval, degree) compile_element(element)
def testRadau(self): "Test that Radau elements compile." for degree in range(3): element = FiniteElement("Radau", interval, degree) compile_element(element)