def test_VCI4(inpdata): if inpdata is None: return 'VCI quadruples' VSCF = vib.VSCF2D(inpdata.v1, inpdata.v2) VSCF.solve_singles() VCI = vib.VCI(VSCF.get_groundstate_wfn(), inpdata.v1, inpdata.v2) VCI.generate_states(4) VCI.solve() d = np.abs(VCI.energies - inpdata.vci4).mean() return d < 1
def test_VCI4_int(inpdata): if inpdata is None: return 'VCI quadruples intensities' VSCF = vib.VSCF2D(inpdata.v1, inpdata.v2) VSCF.solve_singles() VCI = vib.VCI(VSCF.get_groundstate_wfn(), inpdata.v1, inpdata.v2) VCI.generate_states(4) VCI.solve() VCI.calculate_intensities(inpdata.dm1, inpdata.dm2) d = np.abs(VCI.intensities - inpdata.vci4_int).mean() return d < 1
def test_VSCF_singles(inpdata): if inpdata is None: return 'VSCF gs + singles' VSCF = vib.VSCF2D(inpdata.v1, inpdata.v2) VSCF.solve_singles() # diffrerence between the reference VSCF energies (ground state and singles) # and currect energies d = np.abs(np.array(VSCF.energies) - inpdata.vscf_singles_energies).mean() # test passed if the mean absolute error is below 1cm-1 return d < 1
def test_diagonal_VSCF(inpdata): if inpdata is None: return 'Diagonal VSCF' dVSCF = vib.VSCFDiag(inpdata.v1) dVSCF.solve() dVSCF.print_results() # difference between the reference and current eigenvalues d = (np.abs(dVSCF.eigv - inpdata.diagonal_eigv)).mean() # test passed if the mean absolute error is below 1e-6 a.u. return d < 1e-6
def test_diagonal_VSCF_harmonic(inpdata): if inpdata is None: return 'Diagonal VSCF with harmonic potential' dVSCF = vib.VSCFDiag(inpdata.v1_harm) dVSCF.solve() dVSCF.print_results() results = np.zeros(dVSCF.nmodes) for i in range(dVSCF.nmodes): results[i] = (dVSCF.eigv[i][1] - dVSCF.eigv[i][0]) / vib.Misc.cm_in_au d = np.abs(results - inpdata.freqs).mean() return d < 1
import os res = VibTools.SNFResults(outname='snf_h2o/snf.out', restartname='snf_h2o/restart', coordfile='snf_h2o/coord') res.read() # use the normal modes in the following (no localization) modes = res.modes # Define the grid ngrid = 16 amp = 14 grid = vib.Grid(res.mol, modes) grid.generate_grids(ngrid, amp) # Read in anharmonic 1-mode potentials v1 = vib.Potential(grid, order=1) v1.read_np(os.path.join('potentials', 'V1_g16.npy')) # Read in anharmonic 1-mode dipole moments dm1 = vib.Dipole(grid) dm1.read_np(os.path.join('potentials', 'Dm1_g16.npy')) # Read in anharmonic 2-mode potentials v2 = vib.Potential(grid, order=2)
import Vibrations as vib print vib.Misc.fancy_box('Example 1:') print 'Use of existing grids and potentials.' print print ' Data taken from: http://pes-database.theochem.uni-stuttgart.de/surfaces/index.php' print ' By Guntram Rauhut and co-workers' # Create an empty grid grid = vib.Grid() # Read in an existing grid grid.read_np('grids.npy') # Create 1-mode potentials v1 = vib.Potential(grid, order=1) # Read in 1-mode potentials v1.read_np('1D.npy') v2 = vib.Potential(grid, order=2) v2.read_np('2D.npy') # Perform VSCF with 2-mode potentials VSCF = vib.VSCF2D(v1, v2) VSCF.solve_singles() # VCI part # Initialize a VCI object with the VSCF groundstate wavefunction and the # potentials VCI = vib.VCI(VSCF.get_groundstate_wfn(), v1, v2)
def __init__(self, dirname): f = open(dirname + '/grid_params') lines = f.readlines() f.close() whichmodes = None localized = None if os.path.isfile(dirname + '/whichmodes'): whichmodes = [] f = open(dirname + '/whichmodes') lines2 = f.readlines() f.close for l in lines2: for el in l.split(): whichmodes.append(int(el)) grid_params = lines[0].split() self.ngrid = int(grid_params[0]) self.amp = int(grid_params[1]) res = VibTools.SNFResults(outname=dirname + '/snf.out', restartname=dirname + '/restart', coordfile=dirname + '/coord') res.read() self.freqs = res.modes.freqs self.ints = res.get_ir_intensity() modes = res.modes if whichmodes is not None: self.freqs = res.modes.freqs[whichmodes] self.ints = res.get_ir_intensity( modes=res.modes.get_subset(whichmodes)) modes = res.modes.get_subset(whichmodes) self.grid = vib.Grid(res.mol, modes) self.grid.generate_grids(self.ngrid, self.amp) self.v1 = vib.Potential(self.grid, 1) self.v1.read_np(dirname + '/v1.npy') self.v1_harm = vib.Potential(self.grid, 1) self.v1_harm.generate_harmonic() self.dm1_harm = vib.Dipole(self.grid, 1) self.dm1_harm.generate_harmonic(res) self.v2 = vib.Potential(self.grid, 2) self.v2.read_np(dirname + '/v2.npy') self.dm1 = vib.Dipole(self.grid, 1) self.dm1.read_np(dirname + '/dm1.npy') self.dm2 = vib.Dipole(self.grid, 2) self.dm2.read_np(dirname + '/dm2.npy') self.diagonal_eigv = np.load(dirname + '/diagonal_eigv.npy') self.vscf_singles_energies = np.load(dirname + '/vscf_singles.npy') self.vci1 = np.load(dirname + '/vci1.npy') self.vci2 = np.load(dirname + '/vci2.npy') self.vci3 = np.load(dirname + '/vci3.npy') self.vci4 = np.load(dirname + '/vci4.npy') self.vci1_int = np.load(dirname + '/vci1_int.npy')
import os res = VibTools.SNFResults(outname='snf_h2o/snf.out', restartname='snf_h2o/restart', coordfile='snf_h2o/coord') res.read() # use the normal modes in the following (no localization) modes = res.modes # Define the grid ngrid = 16 amp = 14 grid = vib.Grid(res.mol, modes) grid.generate_grids(ngrid, amp) dir_grid = 'grid' if not os.path.exists(dir_grid): os.makedirs(dir_grid) # write xyz file for equilibrium structure res.mol.write(os.path.join(dir_grid, 'grid_E0.dat')) # generate xyz-files for 1-Mode Potentials for i in range(modes.nmodes): for j in range(ngrid): print ' *** Writing Mode: ', i, ', Point: ', j