OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
PyFieldSolver.cpp
Go to the documentation of this file.
1//
2// Python API for the FieldSolver
3//
4// Copyright (c) 2023, Chris Rogers, STFC Rutherford Appleton Laboratory, Didcot, UK
5//
6// This file is part of OPAL.
7//
8// OPAL is free software: you can redistribute it and/or modify
9// it under the terms of the GNU General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12//
13// You should have received a copy of the GNU General Public License
14// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
15//
16
18
22
23namespace PyOpal {
24 // DOUBLE, STRING, BOOL, INT
25 template <>
26 std::vector<PyOpalObjectNS::AttributeDef>
28 {"FSTYPE", "type", "", PyOpalObjectNS::PREDEFINED_STRING},
29 {"MX", "mesh_size_x", "", PyOpalObjectNS::DOUBLE},
30 {"MY", "mesh_size_y", "", PyOpalObjectNS::DOUBLE},
31 {"MT", "mesh_size_t", "", PyOpalObjectNS::DOUBLE},
32 {"PARFFTX", "parallelise_fft_x", "", PyOpalObjectNS::BOOL},
33 {"PARFFTY", "parallelise_fft_y", "", PyOpalObjectNS::BOOL},
34 {"PARFFTT", "parallelise_fft_t", "", PyOpalObjectNS::BOOL},
35 {"BCFFTX", "fft_boundary_x", "", PyOpalObjectNS::PREDEFINED_STRING},
36 {"BCFFTY", "fft_boundary_y", "", PyOpalObjectNS::PREDEFINED_STRING},
37 {"BCFFTZ", "fft_boundary_z", "", PyOpalObjectNS::PREDEFINED_STRING},
38 {"GREENSF", "greens_function", "", PyOpalObjectNS::PREDEFINED_STRING},
39 {"BBOXINCR", "bounding_box_increase", "", PyOpalObjectNS::DOUBLE},
40 {"GEOMETRY", "geometry", "", PyOpalObjectNS::UPPER_CASE_STRING},
41 {"ITSOLVER", "iterative_solver", "", PyOpalObjectNS::PREDEFINED_STRING},
42 {"INTERPL", "interpolation", "", PyOpalObjectNS::PREDEFINED_STRING},
43 {"TOL", "tolerance", "", PyOpalObjectNS::DOUBLE},
44 {"MAXITERS", "max_iterations", "", PyOpalObjectNS::DOUBLE},
45 {"PRECMODE", "preconditioner_mode", "", PyOpalObjectNS::PREDEFINED_STRING},
46 {"RC", "cutoff_radius", "", PyOpalObjectNS::DOUBLE},
47 {"ALPHA", "alpha", "", PyOpalObjectNS::DOUBLE},
48 };
49
50 namespace PyFieldSolverNS {
51
53 Object* obj = &(*pyfs.getOpalShared());
54 FieldSolver* fs = dynamic_cast<FieldSolver*>(obj);
55 if (fs == nullptr) {
56 throw OpalException(
57 "PyOpal::PyFieldSolverNS::registerFieldSolver",
58 "Internal error - field solver not recognised during register()");
59 }
60 fs->execute();
62 }
63
64 BOOST_PYTHON_MODULE(field_solver) {
68 auto fsClass = fs.make_class("FieldSolver");
69 fsClass.def("register", &registerFieldSolver);
70 }
71
72 } // namespace PyFieldSolverNS
73} // namespace PyOpal
void Initialise()
Definition Globals.cpp:50
void registerFieldSolver(PyOpalObjectNS::PyOpalObject< FieldSolver > &pyfs)
BOOST_PYTHON_MODULE(field_solver)
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
static std::vector< AttributeDef > attributes
std::shared_ptr< C > getOpalShared()
The base class for all OPAL exceptions.