48#include "types/MultipoleAdapter.hpp"
53#include "utils/simError.h"
57 bool MultipoleAdapter::isMultipole() {
58 return at_->hasProperty(MultipoleTypeID);
64 painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
65 "MultipoleAdapter::getMultipoleParam was passed an atomType (%s)\n"
66 "\tthat does not appear to be a Multipole atom.\n",
67 at_->getName().c_str());
68 painCave.severity = OPENMD_ERROR;
73 std::shared_ptr<GenericData> data = at_->getPropertyByName(MultipoleTypeID);
74 if (data ==
nullptr) {
75 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
76 "MultipoleAdapter::getMultipoleParam could not find Multipole\n"
77 "\tparameters for atomType %s.\n",
78 at_->getName().c_str());
79 painCave.severity = OPENMD_ERROR;
84 std::shared_ptr<MultipoleAtypeData> multipoleData =
85 std::dynamic_pointer_cast<MultipoleAtypeData>(data);
86 if (multipoleData ==
nullptr) {
87 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
88 "MultipoleAdapter::getMultipoleParam could not convert\n"
89 "\tGenericData to MultipoleAtypeData for atom type %s\n",
90 at_->getName().c_str());
91 painCave.severity = OPENMD_ERROR;
96 return multipoleData->getData();
99 bool MultipoleAdapter::isDipole() {
101 MultipoleAtypeParameters multipoleParam = getMultipoleParam();
102 return multipoleParam.isDipole;
106 bool MultipoleAdapter::isQuadrupole() {
108 MultipoleAtypeParameters multipoleParam = getMultipoleParam();
109 return multipoleParam.isQuadrupole;
114 Vector3d MultipoleAdapter::getDipole() {
115 MultipoleAtypeParameters multipoleParam = getMultipoleParam();
116 return multipoleParam.dipole;
119 Mat3x3d MultipoleAdapter::getQuadrupole() {
120 MultipoleAtypeParameters multipoleParam = getMultipoleParam();
121 return multipoleParam.quadrupole;
124 void MultipoleAdapter::makeMultipole(Vector3d dipole, Mat3x3d quadrupole,
125 bool isDipole,
bool isQuadrupole) {
126 if (isMultipole()) { at_->removeProperty(MultipoleTypeID); }
128 MultipoleAtypeParameters multipoleParam {};
130 multipoleParam.dipole = dipole;
131 multipoleParam.quadrupole = quadrupole;
133 multipoleParam.isDipole = isDipole;
134 multipoleParam.isQuadrupole = isQuadrupole;
137 std::make_shared<MultipoleAtypeData>(MultipoleTypeID, multipoleParam));
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.