From: Benjamin S. <bs...@un...> - 2011-01-16 20:10:28
|
Hello, and I hope everyones holidays were nice and relaxing! I've been thinking about improving the basis set handling in cclib which, as I'm sure everyone knows, looks to be a bit of an undertaking. My eventual goal is to have the handling robust enough to provide methods to generate cube (or whichever format) files of orbitals, densities, etc. Personally, my motivation (aside from learning how basis sets are handled in various packages) is to play around with orbital transformations, and being able to plot them would be beyond useful. In addition, this would open up doors to possibly visualizing time-dependent results (such as density differences and transition densities). I'm attacking the problem using a bottom up sort of approach, by working out how to store the basis set information at the primitive gaussian (or slater, I'm trying to be agnostic) level. So far I've sketched out a few simple classes (bear with me, I'm new to this OO stuff). Some thoughts: Have each atom possess a list of shells. Each shell is composed of primitive functions, each with a contraction coefficient and exponent. This part seems easy-ish; I think I've figured out the parsing of ORCA's basis set output. I haven't looked at Gaussian in a while, but I remember it being reasonable. As long as a package has an option to print out the basis set in some sort of sane format, we should be OK. A tricky bit is how to handle the 2l+1 m_l components of each shell. None of the packages I've looked at so far have documented the m_l ordering. We can always ask the developers if need be, and I think I've figured it out for ORCA by looking at the output. I've attached some code I put together (I haven't tested any of it, just thinking out loud), but I'm not sure if attachments work on the mailing list. If not I'll just pop it up on dropbox or something. Best, Ben Benjamin Stein University of New Mexico |