Exemple #1
0
def anneal(atoms, bonds, angles, dihedrals, params, name=''):
	run_name = utils.unique_filename('lammps/', 'anneal_'+name, '.data')
	write_data_file(atoms, bonds, angles, dihedrals, params, run_name)
	run_anneal(run_name)
	jsub.wait(run_name)
	tail = subprocess.Popen('tail lammps/'+run_name+'.xyz -n '+str(len(atoms)), shell=True, stdout=subprocess.PIPE).communicate()[0]
	if 'No such file or directory' in tail:
		raise Exception('Anneal '+run_name+' failed')
	for i,line in enumerate(tail.splitlines()):
		atoms[i].x, atoms[i].y, atoms[i].z = [float(s) for s in line.split()[1:]]
	return atoms
Exemple #2
0
def anneal(atoms, bonds, angles, dihedrals, params, name=""):
    run_name = utils.unique_filename("lammps/", "anneal_" + name, ".data")
    write_data_file(atoms, bonds, angles, dihedrals, params, run_name)
    run_anneal(run_name)
    jsub.wait(run_name)
    tail = subprocess.Popen(
        "tail lammps/" + run_name + ".xyz -n " + str(len(atoms)), shell=True, stdout=subprocess.PIPE
    ).communicate()[0]
    if "No such file or directory" in tail:
        raise Exception("Anneal " + run_name + " failed")
    for i, line in enumerate(tail.splitlines()):
        atoms[i].x, atoms[i].y, atoms[i].z = [float(s) for s in line.split()[1:]]
    return atoms
Exemple #3
0
def chelpg(atoms, theory, queue='batch', chkfile_run_name=None, name=''):
	run_name = utils.unique_filename('gaussian/', 'chelpg_'+name+'_'+theory[:8].translate( string.maketrans('/(),*', '_____') ), '.log')
	if chkfile_run_name:
		shutil.copyfile('gaussian/'+chkfile_run_name+'.chk', 'gaussian/'+run_name+'.chk')
	job(atoms, theory, queue, run_name, 'Pop=CHelpG')
	jsub.wait(run_name)
	try:
		charges = parse_chelpg('gaussian/'+run_name+'.log')
	except: #sometimes file is not written yet
		time.sleep(10)
		charges = parse_chelpg('gaussian/'+run_name+'.log')
	if charges:
		for i,charge in enumerate(charges):
			atoms[i].charge = charge
		return charges
Exemple #4
0
def scan_modredundant(starting_atoms, basis, run_name_base, modredundant_section, param_starts, param_ends, n_steps):
	ranges = [param_ends[i]-param_starts[i] for i in range(len(param_ends))]
	increments = [r/n_steps for r in ranges]
	params = [p for p in param_starts]
	for step in xrange(n_steps):
		run_name = run_name_base+str(step)
		if step==0:
			job(starting_atoms, basis, 'batch', run_name, 'Opt=(CalcFC,ModRedundant)', procs=1, extra_section=modredundant_section % tuple(params) )
		else:
			old_run_name = run_name_base+str(step-1)
			atoms = parse_atoms('gaussian/'+old_run_name+'.log', check_convergence=False)[1]
			shutil.copy('gaussian/'+old_run_name+'.chk', 'gaussian/'+run_name+'.chk')
			job(atoms, basis, 'batch', run_name, 'Opt=(CalcFC,ModRedundant) Guess=Read', procs=1, extra_section=modredundant_section % tuple(params) )
		jsub.wait(run_name)
		for i in range(len(params)):
			params[i] += increments[i]
Exemple #5
0
		if len(columns)==3:
			charges.append( float(columns[2]) )
	return charges

def minimize(atoms, theory, queue='batch', name='', restrained=None, async=False): #blocks until done
	run_name = utils.unique_filename('gaussian/', 'min_'+name+'_'+theory[:8].translate( string.maketrans('/(),*', '_____') ), '.inp')
	
	if not restrained:
		job(atoms, theory, queue, run_name, 'Opt=CalcFC') #SCRF(Solvent=n-Hexane)
	else:
		dihedral = restrained
		job(atoms, theory, queue, run_name, 'Opt=(ModRedundant,Loose,CalcFC)', extra_section='D %d %d %d %d F'%tuple([a.index for a in dihedral.atoms]))
	if async:
		return run_name
	else:
		jsub.wait(run_name)
		energy, coords = parse_coords('gaussian/'+run_name+'.log')
		if coords:
			for i,xyz in enumerate(coords):
				atoms[i].x, atoms[i].y, atoms[i].z = xyz
			return run_name, energy

def chelpg(atoms, theory, queue='batch', chkfile_run_name=None, name=''):
	run_name = utils.unique_filename('gaussian/', 'chelpg_'+name+'_'+theory[:8].translate( string.maketrans('/(),*', '_____') ), '.log')
	if chkfile_run_name:
		shutil.copyfile('gaussian/'+chkfile_run_name+'.chk', 'gaussian/'+run_name+'.chk')
	job(atoms, theory, queue, run_name, 'Pop=CHelpG')
	jsub.wait(run_name)
	try:
		charges = parse_chelpg('gaussian/'+run_name+'.log')
	except: #sometimes file is not written yet