21#include <boost/algorithm/string.hpp>
49 std::chrono::time_point<std::chrono::system_clock> start =
50 std::chrono::system_clock::now();
52 bool error_value =
RunDFT();
54 std::chrono::duration<double> elapsed_time =
55 std::chrono::system_clock::now() - start;
57 << elapsed_time.count() <<
" seconds." << flush;
62 std::chrono::time_point<std::chrono::system_clock> start =
63 std::chrono::system_clock::now();
67 std::chrono::duration<double> elapsed_time =
68 std::chrono::system_clock::now() - start;
70 << elapsed_time.count() <<
" seconds." << flush;
76 throw std::runtime_error(
"Orbitals object has no QMAtoms");
99 throw std::runtime_error(
"Orbitals object has no QMAtoms");
103 bool reverseOrder =
true;
112 std::vector<QMPackage::MinimalMMCharge> multipoles_split;
116 const Eigen::Vector3d dir_d = aps.
getDipole().normalized();
117 const Eigen::Vector3d A = aps.
getPos() + 0.5 * a * dir_d;
118 const Eigen::Vector3d B = aps.
getPos() - 0.5 * a * dir_d;
119 double qA = mag_d / a;
121 if (std::abs(qA) > 1
e-12) {
128 Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> es;
129 es.computeDirect(components);
131 for (
Index i = 0; i < 3; i++) {
132 double q = es.eigenvalues()[i] / (a2 * a2);
133 const Eigen::Vector3d vec1 =
134 aps.
getPos() + 0.5 * a2 * es.eigenvectors().col(i);
135 const Eigen::Vector3d vec2 =
136 aps.
getPos() - 0.5 * a2 * es.eigenvectors().col(i);
141 return multipoles_split;
145 std::ifstream& input_file,
const std::string separators)
const {
Container to hold Basisfunctions for all atoms.
Container to hold ECPs for all atoms.
std::vector< std::string > Fill(const ECPBasisSet &bs, QMMolecule &atoms)
void Load(const std::string &name)
void reorderOrbitals(Eigen::MatrixXd &moCoefficients, const AOBasis &basis)
container for molecular orbitals
const tools::EigenSystem & MOs() const
const QMMolecule & QMAtoms() const
const std::string & getECPName() const
const AOBasis & getDftBasis() const
virtual const std::array< Index, 49 > & ShellReorder() const =0
std::vector< std::string > GetLineAndSplit(std::ifstream &input_file, const std::string separators) const
Eigen::MatrixXd ReorderMOsBack(const Orbitals &orbitals) const
std::vector< MinimalMMCharge > SplitMultipoles(const StaticSite &site) const
virtual void ParseSpecificOptions(const tools::Property &options)=0
virtual bool RunActiveDFT()=0
std::string basisset_name_
void Initialize(const tools::Property &options)
virtual const std::array< Index, 49 > & ShellMulitplier() const =0
void ReorderOutput(Orbitals &orbitals) const
Class to represent Atom/Site in electrostatic.
Eigen::Matrix3d CalculateCartesianMultipole() const
virtual Eigen::Vector3d getDipole() const
const Eigen::Vector3d & getPos() const
Timestamp returns the current time as a string Example: cout << TimeStamp()
#define XTP_LOG(level, log)
base class for all analysis tools