ppap4lmp  0.7.2
add_bond_angle.cpp
Go to the documentation of this file.
1 
9 #include <cmath>
10 
11 #include "add_bond_angle.h"
12 #include "../utils/map_to_index.h"
13 
14 namespace ut = utils;
15 
16 /* ------------------------------------------------------------------ */
17 
19  const ElPtr &elem)
20 {
21  ext_generator = elem;
22 }
23 
24 /* ------------------------------------------------------------------ */
25 
27  Json &data,
28  JsonToVoidFunc check_required_keys,
29  JsonToBoolFunc check_optional_keys)
30 {
31  check_required_keys({"atom1-id", "atom2-id", "atom3-id"});
32 
33  auto el_atoms = ext_generator->get_element();
34 
35  el_atoms->check_required_keys({"id", "xu", "yu", "zu"});
36 
37  auto id2index_atom = ut::map_to_index(el_atoms->get_data(), "id");
38 
39  ArrayXXd rs_atom;
40  el_atoms->make_2darray_from_data(rs_atom, {"xu", "yu", "zu"});
41 
42  const double rad2deg = 180.0 / M_PI;
43 
44  for (auto &d : data)
45  {
46  RowVector3d r1 = rs_atom.row(id2index_atom[d["atom1-id"]]);
47  RowVector3d r2 = rs_atom.row(id2index_atom[d["atom2-id"]]);
48  RowVector3d r3 = rs_atom.row(id2index_atom[d["atom3-id"]]);
49 
50  auto vec1 = r1 - r2;
51  auto vec2 = r3 - r2;
52 
53  d["angle"] = rad2deg * acos(
54  vec1.dot(vec2) / (vec1.norm() * vec2.norm()));
55  }
56 }
Eigen::RowVector3d RowVector3d
RowVector3d is an alias for a 3-elements row vector of Eigen float numbers.
Definition: eigen.h:110
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
Definition: element.h:378
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
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
Definition: updater.h:20
nlohmann::json Json
Json is an alias for nlohmann::json.
Definition: json.h:22
ShPtr< Generator > ext_generator
Definition: updater.h:64
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
Namespace for utility functions.
Definition: join.h:14
This file has a definition of AddBondAngle class, which is a subclass of Adder class.
std::function< void(const Json &)> JsonToVoidFunc
An alias for a function accepts a Json object.
Definition: updater.h:18
AddBondAngle(const ElPtr &elem)
Constructor of AddBondAngle class.
Map< Json, int > map_to_index(const Json &data, const Str &key)
Create a Map object from values of selected property in an array Json object to corresponding index i...