OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
PyFieldSolver.cpp
Go to the documentation of this file.
1
3
7
8namespace PyOpal {
9namespace PyFieldSolverNS {
10
11// DOUBLE, STRING, BOOL, INT
12template <>
13std::vector<PyOpalObjectNS::AttributeDef> PyOpalObjectNS::PyOpalObject<FieldSolver>::attributes = {
14 {"FSTYPE", "type", "", PyOpalObjectNS::PREDEFINED_STRING},
15 {"MX", "mesh_size_x", "", PyOpalObjectNS::DOUBLE},
16 {"MY", "mesh_size_y", "", PyOpalObjectNS::DOUBLE},
17 {"MT", "mesh_size_t", "", PyOpalObjectNS::DOUBLE},
18 {"PARFFTX", "parallelise_fft_x", "", PyOpalObjectNS::BOOL},
19 {"PARFFTY", "parallelise_fft_y", "", PyOpalObjectNS::BOOL},
20 {"PARFFTT", "parallelise_fft_t", "", PyOpalObjectNS::BOOL},
21 {"BCFFTX", "fft_boundary_x", "", PyOpalObjectNS::PREDEFINED_STRING},
22 {"BCFFTY", "fft_boundary_y", "", PyOpalObjectNS::PREDEFINED_STRING},
23 {"BCFFTZ", "fft_boundary_z", "", PyOpalObjectNS::PREDEFINED_STRING},
24 {"GREENSF", "greens_function", "", PyOpalObjectNS::PREDEFINED_STRING},
25 {"BBOXINCR", "bounding_box_increase", "", PyOpalObjectNS::DOUBLE},
26 {"GEOMETRY", "geometry", "", PyOpalObjectNS::UPPER_CASE_STRING},
27 {"ITSOLVER", "iterative_solver", "", PyOpalObjectNS::PREDEFINED_STRING},
28 {"INTERPL", "interpolation", "", PyOpalObjectNS::PREDEFINED_STRING},
29 {"TOL", "tolerance", "", PyOpalObjectNS::DOUBLE},
30 {"MAXITERS", "max_iterations", "", PyOpalObjectNS::DOUBLE},
31 {"PRECMODE", "preconditioner_mode", "", PyOpalObjectNS::PREDEFINED_STRING},
32 {"RC", "cutoff_radius", "", PyOpalObjectNS::DOUBLE},
33 {"ALPHA", "alpha", "", PyOpalObjectNS::DOUBLE},
34 {"EPSILON", "epsilon", "", PyOpalObjectNS::DOUBLE},
35};
36
37void registerFieldSolver(PyOpalObjectNS::PyOpalObject<FieldSolver>& pyfs) {
38 Object* obj = &(*pyfs.getOpalShared());
39 FieldSolver* fs = dynamic_cast<FieldSolver*>(obj);
40 if (fs == nullptr) {
41 throw OpalException(
42 "PyOpal::PyFieldSolverNS::registerFieldSolver",
43 "Internal error - field solver not recognised during register()"
44 );
45 }
46 fs->execute();
48}
49
50BOOST_PYTHON_MODULE(field_solver) {
53 PyOpalObjectNS::PyOpalObject<FieldSolver> fs;
54 auto fsClass = fs.make_class("FieldSolver");
55 fsClass.def("register", &registerFieldSolver);
56}
57
58} // PyFieldSolverNS
59} // PyOpal
60
void Initialise()
Definition: Globals.cpp:78
void registerFieldSolver(PyOpalObjectNS::PyOpalObject< FieldSolver > &fs)
BOOST_PYTHON_MODULE(field_solver)
FRONT * fs
Definition: hypervolume.cpp:59
static std::vector< AttributeDef > attributes
Definition: PyOpalObject.h:193
The base class for all OPAL objects.
Definition: Object.h:48
static OpalData * getInstance()
Definition: OpalData.cpp:196
void define(Object *newObject)
Define a new object.
Definition: OpalData.cpp:489
The base class for all OPAL exceptions.
Definition: OpalException.h:28