168 Dump the solver into actual C++ classes.
171 class_name =
"Abstract" + self.
_solver.name
172 templatefile_prefix = (
173 os.path.realpath(__file__).replace(
".pyc",
"").replace(
".py",
"")
177 "Map class {} onto C++ class {} using {}".format(
178 self.
_solver.name, class_name, templatefile_prefix
182 qualified_class_name =
"::".join(peano_project.namespace) +
"::" + class_name
185 "NUMBER_OF_UNKNOWNS": self.
_solver._unknowns,
186 "NUMBER_OF_AUXILIARY_VARIABLES": self.
_solver._auxiliary_variables,
187 "PATCH_SIZE": self.
_solver.numerical_scheme.patch_size,
188 "HALO_SIZE": self.
_solver.numerical_scheme.halo_size,
189 "USER_SOLVER_INCLUDES": self.
_solver.user_solver_includes,
191 "PDE_TERM_DECLARATIONS":
"\n".join(
192 term.generator.generate_declaration()
for term
in self.
_solver.pde_terms
194 "PDE_TERM_DEFINITIONS":
"\n".join(
195 term.generator.generate_out_of_class_definitions(qualified_class_name)
196 for term
in self.
_solver.pde_terms
198 "ADDITIONAL_ATTRIBUTES":
"\n".join(
199 self.
_solver._abstract_solver_attributes
201 "ADDITIONAL_METHOD_DECLARATIONS":
"\n".join(
203 for declaration, definition_generator
in self.
_solver._abstract_solver_methods
205 "ADDITIONAL_METHOD_DEFINITIONS":
"\n".join(
206 definition_generator(qualified_class_name)
207 for declaration, definition_generator
in self.
_solver._abstract_solver_methods
215 classname=class_name,
216 namespace=peano_project.namespace,
217 subdirectory=peano_project.subdirectory,
219 default_overwrite=
True,
220 apply_iteratively=
False,
223 peano_project.output.add(generated_files)
224 peano_project.output.makefile.add_cpp_file(
225 peano_project.subdirectory + class_name +
".cpp", generated=
True
228 if not self.
_solver.requires_user_class:
231 solver_class_name = self.
_solver.name
232 qualified_solver_class_name = (
233 "::".join(peano_project.namespace) +
"::" + solver_class_name
237 "PDE_TERM_STUB_DECLARATIONS":
"\n".join(
238 term.generator.generate_stub_declaration()
239 for term
in self.
_solver.pde_terms
241 "PDE_TERM_STUB_DEFINITIONS":
"\n".join(
242 term.generator.generate_stub_definition(qualified_solver_class_name)
243 for term
in self.
_solver.pde_terms
247 solver_generated_files = (
251 classname=solver_class_name,
252 namespace=peano_project.namespace,
253 subdirectory=peano_project.subdirectory,
254 dictionary=solver_local_d,
255 default_overwrite=
False,
256 apply_iteratively=
False,
259 peano_project.output.add(solver_generated_files)
262 peano_project.output.makefile.add_h_file(
263 peano_project.subdirectory + solver_class_name +
".h", generated=
False
265 peano_project.output.makefile.add_cpp_file(
266 peano_project.subdirectory + solver_class_name +
".cpp", generated=
False