8def translate_dslhype_function(
17 function_name: str =
None,
18 output_directory: str =
".",
22 Name of the generated C++ function. Defaults to the name of the
23 Python DSL function passed in as function.
26 Directory the kernels/ subdirectory with the generated files is
27 created in, usually the Peano project's directory.
29 if target == Target.Accelerator
and stateless ==
False:
30 raise Exception(
"Accelerated kernels must be stateless")
32 reduced_functor_parameters = []
33 for functor
in functor_parameters:
34 function_in_pde_terms =
False
35 for pde_term
in pde_terms:
36 if pde_term.NAME == functor.id:
37 function_in_pde_terms =
True
38 if function_in_pde_terms:
39 reduced_functor_parameters.append(functor)
45 reduced_functor_parameters,
47 namespace=function_namespace,
49 use_accelerator=(target==Target.Accelerator),
50 function_name=function_name,
53 function_declaration = tree.print_declaration()
54 if target == Target.Accelerator:
55 function_definition = tree.print_omp()
57 function_definition = tree.print_cpp()
58 function_declaration_with_timer = tree.print_declaration_with_timer()
59 function_definition_with_timer = tree.print_definition_with_timer()
61 kernels_directory = os.path.join(output_directory,
"kernels")
62 os.makedirs(kernels_directory, exist_ok=
True)
63 file = open(os.path.join(kernels_directory, f
"{output_file_name}.h"),
"a")
64 file.write(function_declaration)
65 file.write(function_declaration_with_timer)
68 file = open(os.path.join(kernels_directory, f
"{output_file_name}.cpph"),
"a")
69 file.write(function_definition)
70 file.write(function_definition_with_timer)