10 #include "../utils/map_to_index.h" 29 check_required_keys({
"atom-ids",
"xu",
"yu",
"zu"});
33 el_atoms->check_required_keys({
"id",
"mass",
"xu",
"yu",
"zu"});
38 el_atoms->make_1darray_from_data(ms_atom,
"mass");
41 el_atoms->make_2darray_from_data(rs_atom, {
"xu",
"yu",
"zu"});
46 r_mol << d[
"xu"], d[
"yu"], d[
"zu"];
48 Matrix3d inertia_tensor = Matrix3d::Zero();
50 auto &atom_ids = d[
"atom-ids"];
52 auto atom_weights = d.value(
55 auto n_atoms = atom_ids.size();
57 for (
int i = 0; i != n_atoms; ++i)
59 auto id = atom_ids[i];
60 auto weight = atom_weights[i];
62 auto index = id2index_atom[id];
63 auto mass = ms_atom(index) * weight;
67 inertia_tensor += mass * dr.transpose() * dr;
70 auto tr = inertia_tensor.trace();
72 d[
"I_xx"] = tr - inertia_tensor(0, 0);
73 d[
"I_yy"] = tr - inertia_tensor(1, 1);
74 d[
"I_zz"] = tr - inertia_tensor(2, 2);
75 d[
"I_xy"] = -inertia_tensor(0, 1);
76 d[
"I_xz"] = -inertia_tensor(0, 2);
77 d[
"I_yz"] = -inertia_tensor(1, 2);
Eigen::RowVector3d RowVector3d
RowVector3d is an alias for a 3-elements row vector of Eigen float numbers.
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > ArrayXXd
ArrayXXd is an alias for a two-dimensional array of float numbers.
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
nlohmann::json Json
Json is an alias for nlohmann::json.
Eigen::Array< double, 1, Eigen::Dynamic > RowArrayXd
RowArrayXd is an alias for a row array of float numbers.
ShPtr< Generator > ext_generator
AddInertiaMoment(const ElPtr &elem)
Constructor of AddInertiaMoment class.
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
This file has a definition of AddInertiaMoment class, which is a subclass of Adder class...
Namespace for utility functions.
Eigen::Array< double, Eigen::Dynamic, 1 > ArrayXd
ArrayXd is an alias for a column array of float numbers.
std::function< void(const Json &)> JsonToVoidFunc
An alias for a function accepts a Json object.
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
Eigen::Matrix3d Matrix3d
Matrix3d is an alias for a 3x3 matrix of float numbers.
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...