def generate_inputs(db,name): """ Generates the input files in each sub-directory of the distributed finite differences property calculation. name: ( string ) method name passed to calling driver, db: (database) The database object associated with this property calculation. On exit this db['inputs_generated'] has been set True Returns: nothing Throws: Exception if the number of atomic displacements is not correct. """ molecule = psi4.get_active_molecule() natom = molecule.natom() # get list of displacements displacement_geoms = psi4.atomic_displacements(molecule) # Sanity Check # there should be 3 cords * natoms *2 directions (+/-) if not (6 * natom) == len(displacement_geoms): raise Exception('The number of atomic displacements should be 6 times' ' the number of atoms!') displacement_names = db['job_status'].keys() for n, entry in enumerate(displacement_names): if not os.path.exists(entry): os.makedirs(entry) # Setup up input file string inp_template = 'molecule {molname}_{disp}' inp_template += ' {{\n{molecule_info}\n}}\n{options}\n{jobspec}\n' molecule.set_geometry(displacement_geoms[n]) molecule.fix_orientation(True) molecule.fix_com(True) inputfile = open('{0}/input.dat'.format(entry), 'w') inputfile.write("# This is a psi4 input file auto-generated for" "computing properties by finite differences.\n\n") inputfile.write( inp_template.format( molname=molecule.name(), disp=entry, molecule_info=molecule.create_psi4_string_from_molecule(), options=p4util.format_options_for_input(), jobspec=db['prop_cmd'])) inputfile.close() db['inputs_generated'] = True
def generate_inputs(name, db): molecule = psi4.get_active_molecule() natom = molecule.natom() # Get list of displacements displacement_geoms = psi4.atomic_displacements() # Sanity check! # Until we append the original geometry if not (6 * natom) == len(displacement_geoms): raise Exception('The number displacements should be 6 times the number' 'of atoms!') # List of displacements for iterating displacement_names = db['job_status'].keys() for n, entry in enumerate(displacement_names): if not os.path.exists(entry): os.makedirs(entry) # Set up mol_open = 'molecule ' + molecule.name() + '_' + entry + ' {\n' mol_close = '}' molecule.set_geometry(displacement_geoms[n]) molecule.fix_orientation(True) molecule.fix_com(True) # Write input file inputfile = open('{0}/input.dat'.format(entry), 'w') inputfile.write("# This is a psi4 input file auto-generated for " "computing Raman Optical Activity.\n\n") #inputfile.write(basic_molecule_for_input(molecule)) inputfile.write("{}{}{}".format( mol_open, molecule.create_psi4_string_from_molecule(), mol_close)) #.format(mol_open,molecule.save_string_xyz(),mol_close)) inputfile.write('\n') inputfile.write(p4util.format_options_for_input()) inputfile.write('\n') inputfile.write( "property('{0}', properties=['roa_tensor'])".format(name)) inputfile.close()
def generate_inputs(name,db): molecule = psi4.get_active_molecule() natom = molecule.natom() # Get list of displacements displacement_geoms = psi4.atomic_displacements(molecule) # Sanity check! # Until we append the original geometry if not (6*natom) == len(displacement_geoms): raise Exception('The number displacements should be 6 times the number' 'of atoms!') # List of displacements for iterating displacement_names = db['job_status'].keys() for n,entry in enumerate(displacement_names): if not os.path.exists(entry): os.makedirs(entry) # Set up mol_open = 'molecule ' + molecule.name() + '_' + entry + ' {\n' mol_close = '}' molecule.set_geometry(displacement_geoms[n]) molecule.fix_orientation(True) molecule.fix_com(True) # Write input file inputfile = open('{0}/input.dat'.format(entry), 'w') inputfile.write("# This is a psi4 input file auto-generated for " "computing Raman Optical Activity.\n\n") #inputfile.write(basic_molecule_for_input(molecule)) inputfile.write("{}{}{}" .format(mol_open,molecule.create_psi4_string_from_molecule(),mol_close)) #.format(mol_open,molecule.save_string_xyz(),mol_close)) inputfile.write('\n') inputfile.write(p4util.format_options_for_input()) inputfile.write('\n') inputfile.write("property('{0}', properties=['roa_tensor'])".format(name)) inputfile.close()