Example #1
0
#!/usr/bin/python
import os
from molecule import get_N, get_labels, get_xyz

def E(i,j,hi,hj):
  path = "x%dx%d_%d%d/output.dat" % (i,j,hi,hj)
  if os.path.isfile(path):
    for line in reversed( open(path).readlines() ):
      if line[:18] == "    Total Energy =":
        return float(line[19:])

###########################
# BEGIN COMPUTING HESSIAN #
###########################
h     = 0.005   # displacement size
N     = get_N() # number of atoms
H     = [[0.0 for i in range(3*N)] for j in range(3*N)]  # Hessian matrix -- initialize with zeros
# diagonal elements
for i in range(3*N):
  H[i][i] = ( E(i,0,+1,0)+E(i,0,-1,0)-2*E(0,0,0,0) ) / (h*h)

# off-diagonal elements
for i in range(3*N):
  for j in range(i):
    H[i][j] = ( E(i,j,+1,+1)+E(i,j,-1,-1)-E(i,0,+1,0)-E(i,0,-1,0)-E(j,0,+1,0)-E(j,0,-1,0)+2*E(0,0,0,0) ) / (2*h*h)
    H[j][i] = H[i][j]
#########################
# END COMPUTING HESSIAN #
#########################

outfile = open('hessian.txt','w')
Example #2
0
energy('scf')
"""

def make_input(dirname,labels,coords):
  coordstring = ""
  for a in range(len(labels)):
    coordstring += ("%3s %10.7f %10.7f %10.7f\n" % (labels[a],coords[3*a+0],coords[3*a+1],coords[3*a+2]))
  if not os.path.exists(dirname):
    os.makedirs(dirname)
  f = open(dirname+'/input.dat','w+')
  f.write(template % coordstring)
  print dirname + template % coordstring


h = 0.005
N = get_N()
make_input("x0x0_00",get_labels(),get_xyz())
for i in range(3*N):
  disp_forward  = get_xyz()
  disp_backward = get_xyz()
  disp_forward[i]  += h
  disp_backward[i] -= h
  make_input("x%dx0_10"%i,  get_labels(), disp_forward)
  make_input("x%dx0_-10"%i, get_labels(), disp_backward)

for i in range(3*N):
  for j in range(0,i):
    disp_forward  = get_xyz()
    disp_backward = get_xyz()
    disp_forward[i]  += h
    disp_backward[i] -= h
Example #3
0
#!/usr/bin/python
import os
from molecule import get_N, get_labels, get_xyz

def run_input(dirname):
  os.chdir(dirname)
  os.system("psi4")
  print "running in ... " + os.getcwd()
  os.chdir("../")

run_input("x0x0_00")
for i in range(3*get_N()):
  run_input("x%dx0_10" % i)
  run_input("x%dx0_-10" % i)
for i in range(3*get_N()):
  for j in range(i):
    run_input("x%dx%d_11" %(i,j))
    run_input("x%dx%d_-1-1" %(i,j))