ppap4lmp  0.7.2
element.h
Go to the documentation of this file.
1 
9 #ifndef ELEMENT_H
10 #define ELEMENT_H
11 
12 #include <omp.h>
13 
14 #include <alias/eigen.h>
15 #include <alias/pybind.h>
16 #include <core/generator.h>
17 
42 class Element : public Generator, public std::enable_shared_from_this<Element> {
47  static int n_element_instances;
54  int n_bookings = 0;
60  int elementid;
86  omp_lock_t omp_lock;
97  void increment_bookings();
108  void decrement_bookings();
123  void update_data(
124  const ShPtr<Updater> &upd);
136  const Json &key_);
138  friend class Generator;
139  public:
147  Element();
148  virtual ~Element() = default;
159  virtual ShPtr<Element> get_element(
160  const Json &name = nullptr) override;
172  const Json &name = nullptr) override;
174  virtual void accessed_by_instance_of(
175  const Str &classname) override;
200  const ShPtr<Updater> &upd);
209  const Json &get_data();
218  Set<Str> get_keys();
234  const Json &key_);
250  template <typename T>
252  T &array,
253  const Str &key);
269  template <typename T>
271  T &array,
272  const Vec<Str> &keys);
282  void update_keys();
295  void check_required_keys(
296  const Json &key_);
309  bool check_optional_keys(
310  const Json &key_);
311 
312  /* Methods for bridging to Python */
313 
315  const Json &get_data_py();
328  const Str &key);
339  const Str &key);
351  const py::args &args);
363  const py::args &args);
364  private:
374  void init_for_python();
375 };
376 
379 
380 #endif
ArrayXd get_1d_float_py(const Str &key)
Get float values stored in Element::data of this object as a one-dimensional Numpy-Array.
Definition: element.cpp:366
This file has a definition of Generator class, which is one of the cores of this program.
Set< Str > get_keys_py()
Get keys of the data of this object.
Definition: element.cpp:342
Str accessing_classname
Definition: element.h:79
int elementid
Definition: element.h:60
Vec< Str > datakeys
Definition: element.h:74
This file includes Eigen and defines some aliases for the Eigen-Vector, Matrix and Array...
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
Definition: element.h:378
Json make_reduced_data(const Json &key_)
Get reduced data of this object.
Definition: element.cpp:188
Set< Str > get_keys()
Get keys of the data of this object.
Definition: element.cpp:181
const Json & get_data()
Get a reference to data of this object.
Definition: element.cpp:174
int n_bookings
Definition: element.h:54
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > ArrayXXd
ArrayXXd is an alias for a two-dimensional array of float numbers.
Definition: eigen.h:32
void make_2darray_from_data(T &array, const Vec< Str > &keys)
Extract values of properties in data as a two-dimensional Eigen-Array.
Definition: element.cpp:238
void check_required_keys(const Json &key_)
Check if this object has required key(s).
Definition: element.cpp:284
const Json & get_data_py()
Get a reference to data of this object.
Definition: element.cpp:333
omp_lock_t omp_lock
Definition: element.h:86
ArrayXXd get_2d_float_py(const py::args &args)
Get float values stored in Element::data of this object as a two-dimensional Numpy-Array.
Definition: element.cpp:399
Json data
Definition: element.h:69
Vec< std::pair< Str, int > > get_distances_between_keys(const Json &key_)
To speed up accessing values in Json.
Definition: element.cpp:96
std::string Str
Str is an alias for string.
Definition: std.h:21
Element()
Constructor of Element class.
Definition: element.cpp:22
virtual ShPtr< Element > get_element(const Json &name=nullptr) override
Get this object as a shared pointer of Element class.
Definition: element.cpp:120
nlohmann::json Json
Json is an alias for nlohmann::json.
Definition: json.h:22
Eigen::Array< int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > ArrayXXi
ArrayXXi is an alias for a two-dimensional integer array.
Definition: eigen.h:22
std::unordered_set< T > Set
Set is an alias for unordered set (same as set in Python).
Definition: std.h:49
void update_keys()
Update datakeys. This method must be called after setting new properties to data. ...
Definition: element.cpp:272
virtual ShPtr< Generator > get_generator(const Json &name=nullptr) override
Get this object as a shared pointer of Generator class.
Definition: element.cpp:133
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
Definition: std.h:27
void decrement_bookings()
Definition: element.cpp:39
Element inherits Generator class and contains data element (or entity) as a Json object.
Definition: element.h:42
ShPtr< Element > append_updater(const ShPtr< Updater > &upd)
Append an Updater object to this Element object: the only way to extend an updating process associate...
Definition: element.cpp:157
Eigen::Array< int, Eigen::Dynamic, 1 > ArrayXi
ArrayXi is an alias for a column array of integers.
Definition: eigen.h:37
static int n_element_instances
Definition: element.h:47
void update_data(const ShPtr< Updater > &upd)
Definition: element.cpp:84
bool check_optional_keys(const Json &key_)
Check if this object has optional key(s).
Definition: element.cpp:315
void init_for_python()
Definition: element.cpp:417
ArrayXXi get_2d_int_py(const py::args &args)
Get integer values stored in Element::data of this object as a two-dimensional Numpy-Array.
Definition: element.cpp:381
Generator is an abstract class to generate data.
Definition: generator.h:41
Eigen::Array< double, Eigen::Dynamic, 1 > ArrayXd
ArrayXd is an alias for a column array of float numbers.
Definition: eigen.h:42
virtual void accessed_by_instance_of(const Str &classname) override
Set class name of an instance calling Element::check_required_keys.
Definition: element.cpp:146
std::shared_ptr< T > ShPtr
ShPtr is an alias for shared pointer.
Definition: std.h:16
void make_1darray_from_data(T &array, const Str &key)
Extract values of a property in data as a one-dimensional Eigen-Array.
Definition: element.cpp:218
void increment_bookings()
Definition: element.cpp:31
ArrayXi get_1d_int_py(const Str &key)
Get integer values stored in Element::data of this object as a one-dimensional Numpy-Array.
Definition: element.cpp:351
This file includes pybind11 and defines an alias for the namespace pybind11.