// Print out details of Molecule, taking the form: // ======== // MOLECULE // ======== // No. of e- = nel, charge = q, singlet/doublet/triplet etc. // Enuc = nuclear energy // (if inertia = true then also prints the section: // ............................ // Principal Moments of Inertia // ............................ // Ia = ..., Ib = ..., Ic = ... // Rotational type: ... // .................... // Rotational Constants // .................... // (the coordinate system is also transformed to inertial coords) // ===== // ATOMS // ===== // Atom z Mass (a.m.u) Coordinates // ............................................................... // C 6 12.014 (0.0, 3.53, -1.24) // etc... void Logger::print(Molecule& mol, bool inertia) const { title("Molecule"); // Print out basic details outfile << "# electrons = " << mol.getNel() << ", "; outfile << "charge = " << mol.getCharge() << ", "; std::string temp; // Get the state type switch (mol.getMultiplicity()) { case 1: { temp = "Singlet"; break; } case 2: { temp = "Doublet"; break; } case 3: { temp = "Triplet"; break; } case 4: { temp = "Quartet"; break; } case 5: { temp = "Quintet"; break; } default: { temp = "Spintacular"; break; } // Are hextets even a thing?! } outfile << temp << "\n"; outfile << "ENUC = " << mol.getEnuc() << " Hartree\n"; // Print inertial details if needed, and rotate // into the inertial coordinate system if (inertia) { // Get it temp = mol.rType(); Vector rconsts(3); rconsts = mol.rConsts(1); // MHz Vector inert(3); inert = mol.getInertia(true); // Print it out outfile << std::string(30, '.') << "\n"; outfile << "Principal Moments of Inertia\n"; outfile << std::string(30, '.') << "\n"; outfile << "Ia = " << std::setw(12) << inert(0); outfile << ", Ib = " << std::setw(12) << inert(1); outfile << ", Ic = " << std::setw(12) << inert(2) << "\n"; outfile << "Rotational type: " << temp << "\n"; outfile << std::string(29, '.') << "\n"; outfile << "Rotational Constants / GHz\n"; outfile << std::string(29, '.') << "\n"; outfile << "A = " << std::setw(12) << rconsts(0); outfile << ", B = " << std::setw(12) << rconsts(1); outfile << ", C = " << std::setw(12) << rconsts(2) << "\n"; } // Finally, print out all the atoms title("Atoms"); outfile << std::setw(10) << "Atom" << std::setw(10) << "z"; outfile << std::setw(10) << "Mass" << std::setw(10) << "#CGBFs"; outfile << std::setw(30) << "Coordinates" << "\n"; outfile << std::string(70, '.') << "\n"; for (int i = 0; i < mol.getNAtoms(); i++){ print(mol.getAtom(i)); } }