ppap4lmp  0.7.2
add_gyration_radius.cpp
Go to the documentation of this file.
1 
9 #include "add_gyration_radius.h"
10 
11 /* ------------------------------------------------------------------ */
12 
14  Json &data,
15  JsonToVoidFunc check_required_keys,
16  JsonToBoolFunc check_optional_keys)
17 {
18  check_required_keys({"mass", "I_xx", "I_yy", "I_zz"});
19 
20  for (auto &d : data)
21  {
22  auto reciprocal_mass = 1.0 / d["mass"].get<double>();
23 
24  auto ixx_per_mass = d["I_xx"].get<double>() * reciprocal_mass;
25  auto iyy_per_mass = d["I_yy"].get<double>() * reciprocal_mass;
26  auto izz_per_mass = d["I_zz"].get<double>() * reciprocal_mass;
27 
28  auto tr_per_mass = 0.5 * (ixx_per_mass+iyy_per_mass+izz_per_mass);
29 
30  d["Rg^2"] = tr_per_mass;
31  d["Rg^2(y+z)"] = ixx_per_mass;
32  d["Rg^2(z+x)"] = iyy_per_mass;
33  d["Rg^2(x+y)"] = izz_per_mass;
34  d["Rg^2(x)"] = tr_per_mass - ixx_per_mass;
35  d["Rg^2(y)"] = tr_per_mass - iyy_per_mass;
36  d["Rg^2(z)"] = tr_per_mass - izz_per_mass;
37 
38  if (add_sqrted)
39  {
40  d["Rg"] = sqrt(tr_per_mass);
41  d["Rg(y+z)"] = sqrt(ixx_per_mass);
42  d["Rg(z+x)"] = sqrt(iyy_per_mass);
43  d["Rg(x+y)"] = sqrt(izz_per_mass);
44  d["Rg(x)"] = sqrt(tr_per_mass - ixx_per_mass);
45  d["Rg(y)"] = sqrt(tr_per_mass - iyy_per_mass);
46  d["Rg(z)"] = sqrt(tr_per_mass - izz_per_mass);
47  }
48  }
49 }
50 
51 /* ------------------------------------------------------------------ */
52 
54  bool add_sqrted_)
55 {
56  add_sqrted = add_sqrted_;
57 
58  return std::dynamic_pointer_cast<AddGyrationRadius>(shared_from_this());
59 }
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
Definition: updater.h:20
ShPtr< AddGyrationRadius > with_sqrted(bool add_sqrted_=true)
Enable to compute gyration radius (by default, only square of gyration radius is computed).
nlohmann::json Json
Json is an alias for nlohmann::json.
Definition: json.h:22
AddGyrationRadius adds gyration radius to an Element object.
This file has a definition of AddGyrationRadius 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
std::shared_ptr< T > ShPtr
ShPtr is an alias for shared pointer.
Definition: std.h:16