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
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
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
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]
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