Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    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