def test_run_staged_ingredients(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("recipedir") rp.ingredients['ing1']="C" rp.ingredients['ing2a'] = "W" rp.ingredients['ing2b'] = "S" rp.ingredients['ing3'] = "W" kdict=dict() kdict['mast_program']='vasp' kdict['mast_xc']='pw91' kdict['mast_kpoints']=[1,2,3,"G"] rp.ingred_input_options['ing2b']=dict() rp.ingred_input_options['ing2b']['name']="recipedir/ing2b" rp.ingred_input_options['ing2b']['program_keys']=kdict rp.ingred_input_options['ing2b']['structure']=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure rp.write_methods['ing2b']=[['write_singlerun']] rp.write_ingredient('ing2b') rp.ready_methods['ing2b']=[['ready_singlerun']] rp.run_methods['ing2b']=[['run_singlerun']] rp.complete_methods['ing2b']=[['complete_singlerun']] rp.run_staged_ingredients() mysubmit = MASTFile("test_control/submitlist") self.assertEquals(mysubmit.data[0],"recipedir/ing2b\n") self.assertEquals(rp.ingredients,{'ing1':'C','ing2a':'W','ing2b':'P','ing3':'W'})
def create_archive_files(self): """Save off archive files. Returns: creates archive_input_options.txt creates archive_recipe_plan.txt """ inputsave = MASTFile() inputsave.data = repr(self.input_options) inputsave.to_file( os.path.join(self.working_directory, 'archive_input_options.txt')) recipesave = MASTFile() recipesave.data = repr(self.recipe_plan) recipesave.to_file( os.path.join(self.working_directory, 'archive_recipe_plan.txt')) #pickle_plan = os.path.join(self.working_directory, 'archive_recipe_plan.pickle') #pm = PickleManager(pickle_plan) #pm.save_variable(self.recipe_plan) #pickle_options = os.path.join(self.working_directory, 'archive_input_options.pickle') #pm = PickleManager(pickle_options) #pm.save_variable(self.input_options) #create the *.py input script #ipc_obj = InputPythonCreator(input_options=self.input_options) #ipc_filename = ipc_obj.write_script(self.working_directory, 'archive_input_options.py') return
def test_give_phonon_single_forces_and_displacements(self): ingdir = "%s/writedir/single_phonon_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single_phonon") metad.to_file("%s/metadata.txt" % ingdir) mypos = MASTFile("files/phonon_initial_POSCAR") mypos.to_file("%s/POSCAR" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myxdat = MASTFile("files/XDATCAR_compare") myxdat.to_file("%s/XDATCAR" % ingdir) mydynmat = MASTFile("files/DYNMAT_compare") mydynmat.to_file("%s/DYNMAT" % ingdir) myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myuci.give_phonon_single_forces_and_displacements("next_ingred") newpos = MASTFile("%s/writedir/next_ingred/POSCAR_prePHON" % testdir) newdyn = MASTFile("%s/writedir/next_ingred/DYNMAT" % testdir) newxdat = MASTFile("%s/writedir/next_ingred/XDATCAR" % testdir) comparepos = MASTFile("files/phonon_initial_POSCAR") comparedyn = MASTFile("files/DYNMAT_compare") comparexdat = MASTFile("%s/XDATCAR" % ingdir) self.assertEqual(newpos.data, comparepos.data) self.assertEqual(newdyn.data, comparedyn.data) self.assertEqual(newxdat.data, comparexdat.data)
def test_give_phonon_single_forces_and_displacements(self): ingdir="%s/writedir/single_phonon_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single_phonon") metad.to_file("%s/metadata.txt" % ingdir) mypos = MASTFile("files/phonon_initial_POSCAR") mypos.to_file("%s/POSCAR" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure myxdat = MASTFile("files/XDATCAR_compare") myxdat.to_file("%s/XDATCAR" % ingdir) mydynmat = MASTFile("files/DYNMAT_compare") mydynmat.to_file("%s/DYNMAT" % ingdir) myuci = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) myuci.give_phonon_single_forces_and_displacements("next_ingred") newpos = MASTFile("%s/writedir/next_ingred/POSCAR_prePHON" % testdir) newdyn = MASTFile("%s/writedir/next_ingred/DYNMAT" % testdir) newxdat = MASTFile("%s/writedir/next_ingred/XDATCAR" % testdir) comparepos = MASTFile("files/phonon_initial_POSCAR") comparedyn = MASTFile("files/DYNMAT_compare") comparexdat = MASTFile("%s/XDATCAR" % ingdir) self.assertEqual(newpos.data, comparepos.data) self.assertEqual(newdyn.data, comparedyn.data) self.assertEqual(newxdat.data, comparexdat.data)
def test_write_ingredient(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("recipedir") rp.ingredients['ing2b'] = "I" kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_xc'] = 'pw91' kdict['mast_kpoints'] = [1, 2, 3, "G"] rp.ingred_input_options['ing2b'] = dict() rp.ingred_input_options['ing2b']['name'] = "recipedir/ing2b" rp.ingred_input_options['ing2b']['program_keys'] = kdict rp.ingred_input_options['ing2b'][ 'structure'] = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure rp.write_methods['ing2b'] = [['write_singlerun']] rp.write_ingredient('ing2b') self.assertTrue(os.path.isfile('recipedir/ing2b/INCAR')) self.assertTrue(os.path.isfile('recipedir/ing2b/POSCAR')) self.assertTrue(os.path.isfile('recipedir/ing2b/POTCAR')) self.assertTrue(os.path.isfile('recipedir/ing2b/KPOINTS')) self.assertTrue(os.path.isfile('recipedir/ing2b/submit.sh'))
def test_run_subfolders(self): #raise SkipTest ingdir="%s/writedir/single_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2,2,2,"M"] kdict['mast_xc'] = 'pw91' my_structure = Poscar.from_file("files/perfect_structure").structure for subfolder in ['sub1','sub2','sub3','sub4']: subname = "%s/%s" % (ingdir, subfolder) os.mkdir(subname) shutil.copy("files/metadata_single","%s/metadata.txt" % subname) mywr = ChopIngredient(name=subname, program_keys = kdict, structure=my_structure) mywr.write_singlerun() myri = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) myri.run_subfolders() self.assertFalse(myri.checker.is_ready_to_run()) for subfolder in ['sub1','sub2','sub3','sub4']: subname = "%s/%s" % (ingdir, subfolder) myri.checker.keywords['name'] = subname self.assertTrue(myri.checker.is_ready_to_run()) mysubmit = MASTFile("%s/submitlist" % self.test_control) self.assertEquals(mysubmit.data[0], "%s/sub1\n" % ingdir) self.assertEquals(mysubmit.data[1], "%s/sub2\n" % ingdir) self.assertEquals(mysubmit.data[2], "%s/sub3\n" % ingdir) self.assertEquals(mysubmit.data[3], "%s/sub4\n" % ingdir)
def create_workflow_test_script(inputfile): myvars = get_variables() # set up testing directory tree wtdir=myvars['workflow_test_directory'] mast_test_dir=os.path.join(wtdir,"no_directory_yet") while not (os.path.isdir(mast_test_dir)): timestamp=time.strftime("%Y%m%dT%H%M%S") mast_test_dir = os.path.join(wtdir,"output_test_%s" % timestamp) if not (os.path.isdir(mast_test_dir)): shutil.copytree("%s/mini_mast_tree" % wtdir, mast_test_dir) # set up output file and submission script shortname = inputfile.split(".")[0] output="%s/output_%s" % (wtdir, shortname) submitscript="%s/submit_%s.sh" % (wtdir, shortname) generic_script="%s/generic_mast_workflow.sh" % wtdir bashcommand="bash %s %s %s %s %s %s >> %s" % (generic_script, mast_test_dir, myvars["workflow_examples_located"], inputfile, myvars["workflow_activate_command"], myvars["workflow_testing_environment"], output) submitfile=MASTFile() submitfile.data.append(bashcommand + "\n") submitfile.to_file(submitscript) return [mast_test_dir, submitscript, output]
def test_give_neb_structures_to_neb(self): ingdir = "%s/writedir/neb_labelinit-labelfin" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_neb") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp_neb' kdict['mast_neb_settings'] = dict() kdict['mast_neb_settings']['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myrelaxed = dict() for subdir in ['00', '01', '02', '03', '04']: os.mkdir("writedir/neb_labelinit-labelfin/%s" % subdir) myrelaxed[subdir] = MASTFile("files/POSCAR_%s" % subdir) myrelaxed[subdir].to_file( "writedir/neb_labelinit-labelfin/%s/CONTCAR" % subdir) myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myuci.give_neb_structures_to_neb("next_ingred") for subdir in ['01', '02', '03']: givenstr = MASTFile( "%s/writedir/next_ingred/parent_structure_labelinit-labelfin_%s" % (testdir, subdir)) self.assertEqual(myrelaxed[subdir].data, givenstr.data)
def change_my_status(self, newstatus): """Change an ingredient status by writing the new status to change_status.txt in the ingredient folder, to get picked up by the recipe plan. Args: newstatus <str>: New status to which to change the ingredient. """ ingdir = self.keywords['name'] oneup = os.path.dirname(ingdir) tryrecipe = os.path.basename(oneup) statuspath = "" if dirutil.dir_is_in_scratch(tryrecipe): statuspath = "%s/change_status.txt" % ingdir else: twoup = os.path.dirname(oneup) tryrecipe = os.path.basename(twoup) if dirutil.dir_is_in_scratch(tryrecipe): statuspath = "%s/change_status.txt" % oneup else: raise MASTError( self.__class__.__name__, "Cannot change status of ingredient %s as recipe %s or %s is not found in $MAST_SCRATCH." % (self.keywords['name'], oneup, twoup)) if os.path.isfile(statuspath): statusfile = MASTFile(statuspath) else: statusfile = MASTFile() statusfile.data.append("%s:recommend:%s" % (newstatus, time.asctime())) statusfile.to_file(statuspath) self.logger.info("Recommending status change to %s" % newstatus)
def status_change_recommended(self, iname): """Check if a status change is recommended for the ingredient, as listed in the ingredient folder/change_status.txt. Args: iname <str>: ingredient name Returns: True if a status change was recommended, and changes the status of the ingredient in self.ingredients. False otherwise """ statuspath = os.path.join(self.working_directory, iname, "change_status.txt") if not os.path.isfile(statuspath): return False statusfile = MASTFile(statuspath) newdata=list() changed=False for sline in statusfile.data: #status:recommend:timestamp if not "status_changed" in sline: newstatus = sline.split(":")[0] self.ingredients[iname]=newstatus newline = sline + ":status_changed:" + time.asctime() + "\n" self.logger.info("Status of %s changed to %s" % (iname, newstatus)) changed=True newdata.append(newline) else: newdata.append(sline) statusfile.data=list(newdata) statusfile.to_file(statuspath) return changed
def test_give_saddle_structure(self): ingdir="%s/writedir/neb_labelinit-labelfin" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_neb") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp_neb' kdict['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure myrelaxed=dict() myosz=dict() mywav=dict() mychg=dict() for subdir in ['00','01','02','03','04']: os.mkdir("writedir/neb_labelinit-labelfin/%s" % subdir) myrelaxed[subdir] = MASTFile("files/POSCAR_%s" % subdir) myrelaxed[subdir].to_file("writedir/neb_labelinit-labelfin/%s/CONTCAR" % subdir) myosz[subdir] = MASTFile("files/OSZICAR_%s" % subdir) myosz[subdir].to_file("writedir/neb_labelinit-labelfin/%s/OSZICAR" % subdir) mychg[subdir] = MASTFile("files/CHGCAR") mychg[subdir].to_file("writedir/neb_labelinit-labelfin/%s/CHGCAR" % subdir) mywav[subdir] = MASTFile("files/WAVECAR") mywav[subdir].to_file("writedir/neb_labelinit-labelfin/%s/WAVECAR" % subdir) myuci = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) myuci.give_saddle_structure("next_ingred") #should be OSZ3 saddle = MASTFile("%s/writedir/next_ingred/POSCAR" % testdir) self.assertEqual(myrelaxed['03'].data, saddle.data) saddledir = myuci.get_saddle_dir() self.assertEqual(saddledir, "03")
def test_update_children(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("%s/recipedir" % testdir) rp.ingredients['ing1'] = "I" kdict=dict() kdict['mast_program']='vasp' kdict['mast_xc']='pw91' kdict['mast_kpoints']=[1,2,3,"G"] rp.ingred_input_options['ing1']=dict() rp.ingred_input_options['ing1']['name']="%s/ing1" % rp.working_directory rp.ingred_input_options['ing1']['program_keys']=kdict rp.ingred_input_options['ing1']['structure']=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure rp.update_methods['ing1']=dict() rp.update_methods['ing1']['ing2a']=[['give_structure']] rp.update_methods['ing1']['ing2b']=[['give_structure_and_restart_files']] rp.update_children('ing1') self.assertTrue(os.path.isfile("recipedir/ing2a/POSCAR")) self.assertTrue(os.path.isfile("recipedir/ing2b/POSCAR")) #CHGCAR softlink only sent to second child self.assertFalse(os.path.exists("recipedir/ing2a/CHGCAR")) self.assertTrue(os.path.exists("recipedir/ing2b/CHGCAR"))
def test_run_ingredient(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("recipedir") rp.ingredients['ing2b'] = "I" kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_xc'] = 'pw91' kdict['mast_kpoints'] = [1, 2, 3, "G"] rp.ingred_input_options['ing2b'] = dict() rp.ingred_input_options['ing2b']['name'] = "recipedir/ing2b" rp.ingred_input_options['ing2b']['program_keys'] = kdict rp.ingred_input_options['ing2b'][ 'structure'] = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure rp.write_methods['ing2b'] = [['write_singlerun']] rp.write_ingredient('ing2b') rp.run_methods['ing2b'] = [['run_singlerun']] rp.run_ingredient('ing2b') mysubmit = MASTFile("test_control/submitlist") self.assertEquals(mysubmit.data[0], "recipedir/ing2b\n")
def create_workflow_test_script(inputfile): myvars = get_variables() # set up testing directory tree wtdir = myvars['workflow_test_directory'] mast_test_dir = os.path.join(wtdir, "no_directory_yet") while not (os.path.isdir(mast_test_dir)): timestamp = time.strftime("%Y%m%dT%H%M%S") mast_test_dir = os.path.join(wtdir, "output_test_%s" % timestamp) if not (os.path.isdir(mast_test_dir)): shutil.copytree("%s/mini_mast_tree" % wtdir, mast_test_dir) # set up output file and submission script shortname = inputfile.split(".")[0] output = "%s/output_%s" % (wtdir, shortname) submitscript = "%s/submit_%s.sh" % (wtdir, shortname) generic_script = "%s/generic_mast_workflow.sh" % wtdir bashcommand = "bash %s %s %s %s %s %s >> %s" % ( generic_script, mast_test_dir, myvars["workflow_examples_located"], inputfile, myvars["workflow_activate_command"], myvars["workflow_testing_environment"], output) submitfile = MASTFile() submitfile.data.append(bashcommand + "\n") submitfile.to_file(submitscript) return [mast_test_dir, submitscript, output]
def test_ready_neb_subfolders(self): ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2, 2, 2, "M"] kdict['mast_xc'] = 'pw91' kdict['mast_neb_settings'] = dict() kdict['mast_neb_settings']['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) for subdir in ['00', '01', '02', '03', '04']: subname = "%s/%s" % (ingdir, subdir) os.mkdir(subname) mywr.keywords['name'] = subname mywr.checker.keywords['name'] = subname if not subdir in ['00', '04']: mywr.write_singlerun() mywr.write_submit_script() myrdi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) self.assertTrue(myrdi.ready_neb_subfolders()) os.remove("%s/01/POSCAR" % ingdir) self.assertFalse(myrdi.ready_neb_subfolders())
def test_write_phonon_single(self): ingdir = "writedir/single_phonon_label1" topmetad = MASTFile("files/top_metadata_single_phonon") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single_phonon") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_kpoints'] = [3, 3, 3, "G"] kdict['mast_xc'] = 'pbe' kdict['mast_program'] = 'vasp' kdict['mast_phonon_settings'] = dict() kdict['mast_phonon_settings']['phonon_center_site'] = "0.33 0.25 0.0" kdict['mast_phonon_settings']['phonon_center_radius'] = "1" kdict['mast_phonon_settings']['threshold'] = "0.075" my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) mywi.write_phonon_single() self.assertTrue(mywi.checker.is_ready_to_run()) compare_phon_single = MASTFile("files/phon_single_POSCAR") phon_singlepos = MASTFile("%s/POSCAR" % ingdir) self.assertEqual(phon_singlepos.data, compare_phon_single.data)
def test_ready_neb_subfolders(self): ingdir="%s/writedir/single_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2,2,2,"M"] kdict['mast_xc'] = 'pw91' kdict['mast_neb_settings']=dict() kdict['mast_neb_settings']['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys = kdict, structure=my_structure) for subdir in ['00','01','02','03','04']: subname = "%s/%s" % (ingdir, subdir) os.mkdir(subname) mywr.keywords['name'] = subname mywr.checker.keywords['name'] = subname if not subdir in ['00','04']: mywr.write_singlerun() mywr.write_submit_script() myrdi = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) self.assertTrue(myrdi.ready_neb_subfolders()) os.remove("%s/01/POSCAR" % ingdir) self.assertFalse(myrdi.ready_neb_subfolders())
def change_my_status(self, newstatus): """Change an ingredient status by writing the new status to change_status.txt in the ingredient folder, to get picked up by the recipe plan. Args: newstatus <str>: New status to which to change the ingredient. """ ingdir = self.keywords['name'] oneup = os.path.dirname(ingdir) tryrecipe = os.path.basename(oneup) statuspath = "" if dirutil.dir_is_in_scratch(tryrecipe): statuspath = "%s/change_status.txt" % ingdir else: twoup = os.path.dirname(oneup) tryrecipe = os.path.basename(twoup) if dirutil.dir_is_in_scratch(tryrecipe): statuspath = "%s/change_status.txt" % oneup else: raise MASTError(self.__class__.__name__, "Cannot change status of ingredient %s as recipe %s or %s is not found in $MAST_SCRATCH." % (self.keywords['name'],oneup, twoup)) if os.path.isfile(statuspath): statusfile = MASTFile(statuspath) else: statusfile=MASTFile() statusfile.data.append("%s:recommend:%s" % (newstatus, time.asctime())) statusfile.to_file(statuspath) self.logger.info("Recommending status change to %s" % newstatus)
def test_get_my_phonon_params(self): ingdir = "writedir/single_phonon_label1" topmetad = MASTFile("files/top_metadata_single_phonon") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single_phonon") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_kpoints'] = [3, 3, 3, "G"] kdict['mast_xc'] = 'pbe' kdict['mast_program'] = 'vasp' kdict['mast_phonon_settings'] = dict() kdict['mast_phonon_settings']['phonon_center_site'] = "0.33 0.25 0.0" kdict['mast_phonon_settings']['phonon_center_radius'] = "1" kdict['mast_phonon_settings']['threshold'] = "0.075" my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) [mysite, myrad, mythresh] = mywi.get_my_phonon_params() self.assertEqual(mysite, "0.33 0.25 0.0") self.assertEqual(myrad, "1") self.assertEqual(mythresh, "0.075")
def create_archive_files(self): """Save off archive files. Returns: creates archive_input_options.txt creates archive_recipe_plan.txt """ inputsave = MASTFile() inputsave.data = repr(self.input_options) inputsave.to_file(os.path.join(self.working_directory, 'archive_input_options.txt')) recipesave = MASTFile() recipesave.data = repr(self.recipe_plan) recipesave.to_file(os.path.join(self.working_directory, 'archive_recipe_plan.txt')) #pickle_plan = os.path.join(self.working_directory, 'archive_recipe_plan.pickle') #pm = PickleManager(pickle_plan) #pm.save_variable(self.recipe_plan) #pickle_options = os.path.join(self.working_directory, 'archive_input_options.pickle') #pm = PickleManager(pickle_options) #pm.save_variable(self.input_options) #create the *.py input script #ipc_obj = InputPythonCreator(input_options=self.input_options) #ipc_filename = ipc_obj.write_script(self.working_directory, 'archive_input_options.py') return
def test_update_children(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("%s/recipedir" % testdir) rp.ingredients['ing1'] = "I" kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_xc'] = 'pw91' kdict['mast_kpoints'] = [1, 2, 3, "G"] rp.ingred_input_options['ing1'] = dict() rp.ingred_input_options['ing1'][ 'name'] = "%s/ing1" % rp.working_directory rp.ingred_input_options['ing1']['program_keys'] = kdict rp.ingred_input_options['ing1'][ 'structure'] = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure rp.update_methods['ing1'] = dict() rp.update_methods['ing1']['ing2a'] = [['give_structure']] rp.update_methods['ing1']['ing2b'] = [[ 'give_structure_and_restart_files' ]] rp.update_children('ing1') self.assertTrue(os.path.isfile("recipedir/ing2a/POSCAR")) self.assertTrue(os.path.isfile("recipedir/ing2b/POSCAR")) #CHGCAR softlink only sent to second child self.assertFalse(os.path.exists("recipedir/ing2a/CHGCAR")) self.assertTrue(os.path.exists("recipedir/ing2b/CHGCAR"))
def evaluate_ga_vasp_and_update(self, childname=""): """Evaluate the Genetic Algorithm VASP ingredient. """ raise NotImplementedError childpath = os.path.join(os.path.dirname(self.keywords['name']), childname) from mastlib.amy_ga_code import fitness_evaluation from MAST.ingredients.checker import VaspChecker from MAST.utility import MASTFile dircontents = os.listdir(self.keywords['name']) subfolders = list() for diritem in dircontents: fulldir = os.path.join(self.keywords['name'],diritem) if os.path.isdir(fulldir) and diritem.isdigit(): subfolders.append(fulldir) energylist = list() structurelist = list() for subfolder in subfolders: mychecker = VaspChecker(subfolder, self.keywords['program_keys'], self.keywords['structure']) mystructure = mychecker.get_final_structure_from_directory() structurelist.append(mystructure) myenergy = mychecker.get_energy_from_energy_file() energylist.append(myenergy) [fitoutput, fitstructure] = fitness_evaluation.evaluate(structurelist, energylist) #If output is a structure or xyz file, could just write it directly. fitfile = MASTFile() fitfile.data = fitoutput import time timestamp = time.strftime("%Y%m%d_%H%M%S") outputname = "my_output_%s" % timestamp outputstrname = "my_structure_%s" % timestamp fitfile.to_file(os.path.join(childpath, outputname)) fitstructure.write_file(os.path.join(childpath, outputstrname)) return " %s and %s written in %s" % (outputname, outputstrname, childpath)
def test_ready_singlerun(self): ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2, 2, 2, "M"] kdict['mast_xc'] = 'pw91' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) mywr.write_singlerun() myrdi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) self.assertTrue(myrdi.ready_singlerun()) os.remove("%s/POSCAR" % ingdir) self.assertFalse(myrdi.ready_singlerun())
def test_run_singlerun(self): #raise SkipTest ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2, 2, 2, "M"] kdict['mast_xc'] = 'pw91' my_structure = Poscar.from_file("files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) mywr.write_singlerun() myri = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myri.run_singlerun() self.assertTrue(myri.checker.is_ready_to_run()) mysubmit = MASTFile("%s/submitlist" % self.test_control) self.assertEquals(mysubmit.data[0], "%s\n" % ingdir)
def test_parse(self): #ipfile='small_workflow_with_scaling.inp' ipfile = 'phonon_with_neb.inp' workdir = os.path.join(testdir, 'workdir') shutil.copy(os.path.join(testdir, ipfile), workdir) input_file = os.path.join(workdir, ipfile) parser_obj = InputParser(inputfile=input_file) input_options = parser_obj.parse() recipe_file_contents = input_options.get_item('recipe', 'recipe_file') myrtp = RecipeTemplateParser(inputOptions=input_options, working_directory=workdir, templateFile=recipe_file_contents, personalRecipe=input_file) parsed_lines = myrtp.parse() output_parsed = MASTFile() output_parsed.data = list(parsed_lines) output_parsed.to_file('workdir/personal_recipe_test_output.txt') self.assertEquals(len(myrtp.chunks), 5) #mypr = MASTFile(pr) #for line in mypr.data: # print line.rstrip() compare_pr = MASTFile( os.path.join(testdir, 'compare', 'personal_recipe_test_output.txt')) self.assertEquals(parsed_lines, compare_pr.data)
def test_get_parent_image_structures(self): kdict=dict() kdict['mast_program'] = 'vasp_neb' neblines = list() neblines.append(["Cr","0.0 0.9 0.8","0.0 0.8 0.7"]) neblines.append(["Cr","0.4 0.2 0.1","0.3 0.3 0.2"]) neblines.append(["Cr","0.29 0.05 0.05","0.01 0.01 0.98"]) neblines.append(["Ni","0.61 0.99 0.98","0.25 0.01 0.97"]) kdict['mast_neb_settings']=dict() kdict['mast_neb_settings']['images']=3 kdict['mast_neb_settings']['lines']=neblines ingdir = "writedir/neb_labelinit-labelfin" topmetad = MASTFile("files/top_metadata_neb") topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) unsorted_01 = MASTFile("unsorted/parent_structure_labelinit-labelfin_01") unsorted_01.to_file("%s/parent_structure_labelinit-labelfin_01" % ingdir) unsorted_02 = MASTFile("unsorted/parent_structure_labelinit-labelfin_02") unsorted_02.to_file("%s/parent_structure_labelinit-labelfin_02" % ingdir) unsorted_03 = MASTFile("unsorted/parent_structure_labelinit-labelfin_03") unsorted_03.to_file("%s/parent_structure_labelinit-labelfin_03" % ingdir) my_structure=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) imstrs = mywi.get_parent_image_structures() compare_01 = pymatgen.io.vaspio.Poscar.from_file("files/parent_structure_labelinit-labelfin_01").structure compare_02 = pymatgen.io.vaspio.Poscar.from_file("files/parent_structure_labelinit-labelfin_02").structure compare_03 = pymatgen.io.vaspio.Poscar.from_file("files/parent_structure_labelinit-labelfin_03").structure self.assertEqual(imstrs[0].sites, compare_01.sites) self.assertEqual(imstrs[0].lattice, compare_01.lattice) self.assertEqual(imstrs[1].sites, compare_02.sites) self.assertEqual(imstrs[1].lattice, compare_02.lattice) self.assertEqual(imstrs[2].sites, compare_03.sites) self.assertEqual(imstrs[2].lattice, compare_03.lattice)
def test_check_if_ready_to_proceed_are_complete(self): metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing1/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing2a/metadata.txt") rp = RecipePlan("recipedir") rp.ingredients['ing1'] = "P" rp.ingredients['ing2a'] = "I" rp.ingredients['ing2b'] = "I" rp.ingredients['ing3'] = "I" kdict=dict() kdict['mast_program']='vasp' kdict['mast_xc']='pw91' kdict['mast_kpoints']=[1,2,3,"G"] my_struc = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure rp.ingred_input_options['ing1']=dict() rp.ingred_input_options['ing1']['name']="%s/recipedir/ing1" % testdir rp.ingred_input_options['ing1']['program_keys']=kdict rp.ingred_input_options['ing1']['structure']=my_struc rp.complete_methods['ing1']=[['complete_singlerun']] rp.update_methods['ing1']=dict() rp.update_methods['ing1']['ing2a']=[['give_structure']] rp.update_methods['ing1']['ing2b']=[['give_structure']] rp.ingred_input_options['ing2a']=dict() rp.ingred_input_options['ing2a']['name']="%s/recipedir/ing2a" % testdir rp.ingred_input_options['ing2a']['program_keys']=kdict rp.ingred_input_options['ing2a']['structure']=my_struc rp.complete_methods['ing2a']=[['complete_singlerun']] rp.ready_methods['ing2a']=[['ready_structure']] rp.check_if_ready_to_proceed_are_complete() self.assertTrue(rp.ready_ingredient('ing2a')) self.assertEquals self.assertEquals(rp.ingredients,{'ing1':'C','ing2a':'I','ing2b':'I','ing3':'I'})
def test_give_structure_and_charge_density_full_copy(self): ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myrelaxed = MASTFile("files/relaxed_structure") myrelaxed.to_file("%s/CONTCAR" % ingdir) mychg = MASTFile("files/CHGCAR") mychg.to_file("%s/CHGCAR" % ingdir) mywave = MASTFile("files/WAVECAR") mywave.to_file("%s/WAVECAR" % ingdir) myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myuci.give_structure_and_charge_density_full_copy("next_ingred") givenstr = MASTFile("%s/writedir/next_ingred/POSCAR" % testdir) self.assertEqual(myrelaxed.data, givenstr.data) self.assertTrue( os.path.exists("%s/writedir/next_ingred/CHGCAR" % testdir))
def test_fast_forward_check_complete(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing1/metadata.txt") metad = MASTFile("files/metadata_single") metad.data.append("defect_label = labela\n") metad.to_file("recipedir/ing2a/metadata.txt") metad = MASTFile("files/metadata_single") metad.data.append("defect_label = labelb\n") metad.to_file("recipedir/ing2b/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing3/metadata.txt") rp = RecipePlan("recipedir") rp.ingredients['ing1'] = "I" rp.ingredients['ing2a'] = "I" rp.ingredients['ing2b'] = "I" rp.ingredients['ing3'] = "I" kdict=dict() kdict['mast_program']='vasp' kdict['mast_xc']='pw91' kdict['mast_kpoints']=[1,2,3,"G"] my_struc = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure rp.ingred_input_options['ing1']=dict() rp.ingred_input_options['ing1']['name']="%s/recipedir/ing1" % testdir rp.ingred_input_options['ing1']['program_keys']=kdict rp.ingred_input_options['ing1']['structure']=my_struc rp.complete_methods['ing1']=[['complete_singlerun']] rp.update_methods['ing1']=dict() rp.update_methods['ing1']['ing2a']=[['give_structure']] rp.update_methods['ing1']['ing2b']=[['give_structure']] rp.ingred_input_options['ing2a']=dict() rp.ingred_input_options['ing2a']['name']="%s/recipedir/ing2a" % testdir rp.ingred_input_options['ing2a']['program_keys']=kdict rp.ingred_input_options['ing2a']['structure']=my_struc rp.complete_methods['ing2a']=[['complete_singlerun']] rp.ready_methods['ing2a']=[['ready_structure']] rp.ingred_input_options['ing2b']=dict() rp.ingred_input_options['ing2b']['name']="%s/recipedir/ing2b" % testdir rp.ingred_input_options['ing2b']['program_keys']=kdict rp.ingred_input_options['ing2b']['structure']=my_struc rp.complete_methods['ing2b']=[['complete_singlerun']] rp.ready_methods['ing2b']=[['ready_structure']] rp.ingred_input_options['ing3']=dict() rp.ingred_input_options['ing3']['name']="%s/recipedir/ing3" % testdir rp.ingred_input_options['ing3']['program_keys']=kdict rp.ingred_input_options['ing3']['structure']=my_struc rp.complete_methods['ing3']=[['complete_singlerun']] rp.ready_methods['ing3']=[['ready_structure']] rp.fast_forward_check_complete() #self.assertTrue(rp.complete_ingredient('ing1')) self.assertEquals(rp.ingredients, {'ing1':'C','ing2a':'I','ing2b':'I','ing3':'I'}) self.assertTrue(rp.ready_ingredient('ing2a')) self.assertTrue(rp.ready_ingredient('ing2b'))
def test_inputpythoncreator(self): raise SkipTest myip = InputParser(inputfile='mast.inp') myoptions=myip.parse() myipc = InputPythonCreator(input_options=myoptions) mylines=myipc.print_input_options() myfile = MASTFile() myfile.data = mylines myfile.to_file("./input_python_created") #print mylines self.assertTrue(filecmp.cmp("input_python_created","test_input_python_created"))
def test__fullpath_childname(self): ingdir="%s/writedir/single_label1" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure myuci = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) fullpath = myuci._fullpath_childname("next_ingred") self.assertEqual(fullpath, "%s/writedir/next_ingred" % testdir)
def test_complete_subfolders(self): #raise SkipTest ingdir="%s/writedir/single_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2,2,2,"M"] kdict['mast_xc'] = 'pw91' my_structure = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys = kdict, structure=my_structure) myoutcar = MASTFile("files/OUTCAR_completed") myoszicar = MASTFile("files/OSZICAR_completed") for subdir in ['00','01','02','03','04']: subname = "%s/%s" % (ingdir, subdir) os.mkdir(subname) mywr.keywords['name'] = subname mywr.checker.keywords['name'] = subname mywr.write_singlerun() mywr.write_submit_script() myoutcar.to_file("%s/OUTCAR" % subname) myoszicar.to_file("%s/OSZICAR" % subname) myci = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) self.assertTrue(myci.complete_subfolders()) os.remove("%s/04/OUTCAR" % ingdir) self.assertFalse(myci.complete_subfolders())
def test_place_parent_energy_files(self): ingdir = "writedir/neb_labelinit-labelfin" topmetad = MASTFile("files/top_metadata_neb") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) peinit = MASTFile("files/parent_energy_labelinit") peinit.to_file("%s/parent_energy_labelinit" % ingdir) pefin = MASTFile("files/parent_energy_labelfin") pefin.to_file("%s/parent_energy_labelfin" % ingdir) kdict = dict() kdict['mast_kpoints'] = [3, 3, 3, "G"] kdict['mast_xc'] = 'pbe' kdict['mast_program'] = 'vasp_neb' kdict['mast_neb_settings'] = dict() kdict['mast_neb_settings']['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) os.mkdir(ingdir + '/00') os.mkdir(ingdir + '/04') mywi.place_parent_energy_files() self.assertTrue(os.path.isfile(ingdir + '/00/OSZICAR')) self.assertTrue(os.path.isfile(ingdir + '/04/OSZICAR')) oszinit = MASTFile(ingdir + "/00/OSZICAR") oszfinal = MASTFile(ingdir + "/04/OSZICAR") self.assertEqual(oszinit.data, peinit.data) self.assertEqual(oszfinal.data, pefin.data)
def test_get_parent_structures(self): kdict=dict() kdict['mast_program'] = 'vasp_neb' neblines = list() neblines.append(["Cr","0.0 0.9 0.8","0.0 0.8 0.7"]) neblines.append(["Cr","0.4 0.2 0.1","0.3 0.3 0.2"]) neblines.append(["Cr","0.29 0.05 0.05","0.01 0.01 0.98"]) neblines.append(["Ni","0.61 0.99 0.98","0.25 0.01 0.97"]) kdict['mast_neb_settings']=dict() kdict['mast_neb_settings']['images']=3 kdict['mast_neb_settings']['lines']=neblines ingdir = "writedir/neb_labelinit-labelfin" topmetad = MASTFile("files/top_metadata_neb") topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) unsorted_init = MASTFile("unsorted/parent_structure_labelinit") #unsorted_init = MASTFile("unsorted/parent_structure_labelinit_scrambled") unsorted_init.to_file("%s/parent_structure_labelinit" % ingdir) unsorted_fin = MASTFile("unsorted/parent_structure_labelfin") unsorted_fin.to_file("%s/parent_structure_labelfin" % ingdir) my_structure=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) [sinit, sfin] = mywi.get_parent_structures() init_compare = pymatgen.io.vaspio.Poscar.from_file("files/parent_structure_labelinit").structure fin_compare = pymatgen.io.vaspio.Poscar.from_file("files/parent_structure_labelfin").structure #print sinit #print init_compare #print sfin #print fin_compare self.assertEqual(sinit.sites, init_compare.sites) self.assertEqual(sinit.lattice, init_compare.lattice) self.assertEqual(sfin.sites, fin_compare.sites) self.assertEqual(sfin.lattice, fin_compare.lattice)
def test_place_parent_energy_files(self): ingdir="writedir/neb_labelinit-labelfin" topmetad = MASTFile("files/top_metadata_neb") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) peinit = MASTFile("files/parent_energy_labelinit") peinit.to_file("%s/parent_energy_labelinit" % ingdir) pefin = MASTFile("files/parent_energy_labelfin") pefin.to_file("%s/parent_energy_labelfin" % ingdir) kdict=dict() kdict['mast_kpoints']=[3,3,3,"G"] kdict['mast_xc']='pbe' kdict['mast_program']='vasp_neb' kdict['mast_neb_settings']=dict() kdict['mast_neb_settings']['images']=3 my_structure=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) os.mkdir(ingdir + '/00') os.mkdir(ingdir + '/04') mywi.place_parent_energy_files() self.assertTrue(os.path.isfile(ingdir + '/00/OSZICAR')) self.assertTrue(os.path.isfile(ingdir + '/04/OSZICAR')) oszinit = MASTFile(ingdir + "/00/OSZICAR") oszfinal = MASTFile(ingdir + "/04/OSZICAR") self.assertEqual(oszinit.data, peinit.data) self.assertEqual(oszfinal.data, pefin.data)
def test_give_structure_and_energy_to_neb(self): ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.data.append("defect_label = label1\n") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myrelaxed = MASTFile("files/relaxed_structure") myrelaxed.to_file("%s/CONTCAR" % ingdir) myenergy = MASTFile("files/OSZICAR_relaxed") myenergy.to_file("%s/OSZICAR" % ingdir) myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myuci.give_structure_and_energy_to_neb("next_ingred") givenstr = MASTFile("%s/writedir/next_ingred/parent_structure_label1" % testdir) givenenergy = MASTFile("%s/writedir/next_ingred/parent_energy_label1" % testdir) self.assertEqual(myrelaxed.data, givenstr.data) self.assertEqual(myenergy.data, givenenergy.data)
def test_get_statuses_from_file(self): rp = RecipePlan("recipedir") mystatus = MASTFile("files/status_random.txt") self.assertRaises(MASTError, rp.get_statuses_from_file) mystatus.to_file("recipedir/status.txt") rp.ingredients['ing1']="I" rp.ingredients['ing2a']="I" rp.ingredients['ing2b']="I" self.assertRaises(MASTError,rp.get_statuses_from_file) rp.ingredients['ing3']="I" rp.get_statuses_from_file() statusdict=dict() statusdict={'ing1':'alpha','ing2a':'beta','ing2b':'gamma','ing3':'delta'} self.assertEquals(rp.ingredients, statusdict)
def test_write_singlerun(self): ingdir="writedir/single_label1" topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_kpoints']=[3,3,3,"G"] kdict['mast_xc']='pbe' kdict['mast_program']='vasp' my_structure=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) mywi.write_singlerun() self.assertTrue(mywi.checker.is_ready_to_run())
def create_archive_files(self): """Save off archive files. Returns: creates archive_input_options.txt creates archive_recipe_plan.txt """ inputsave = MASTFile() inputsave.data = repr(self.input_options) inputsave.to_file(os.path.join(self.recdir, 'archive_input_options_%s.txt' % self.timestamp)) recipesave = MASTFile() recipesave.data = repr(self.recipe_plan) recipesave.to_file(os.path.join(self.recdir, 'archive_recipe_plan_%s.txt' % self.timestamp)) return
def print_table(self,scsize): if not self.e_defects: self._calculate_defect_formation_energies(scsize) myfile = MASTFile() for conditions, defects in self.e_defects.items(): myfile.data.append('\n\nDefect formation energies for %s conditions.\n' % conditions.upper()) myfile.data.append('%-20s | %10s\n' % ('Defect', 'DFE')) myfile.data.append('---------------------------------\n') for defect, energies in defects.items(): for energy in energies: myfile.data.append('%-14s(q=%2i) | %8.4f\n' % (defect, energy[0], energy[1])) myfile.data.append(str()) # Add a blank line here myfile.data.append('---------------------------------\n') myfile.to_file(os.path.join(os.getcwd(),"dfe.txt")) for line in myfile.data: print line.strip()
def test__fullpath_childname(self): ingdir = "%s/writedir/single_label1" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) fullpath = myuci._fullpath_childname("next_ingred") self.assertEqual(fullpath, "%s/writedir/next_ingred" % testdir)
def test_vasp_kpoints_setup_from_metafile(self): kdict = dict() mymeta = MASTFile("childdir/metadata.txt") mymeta.data.append("kpoints = 3x1x7 G 0.5 0.2 .1\n") mymeta.to_file("childdir/metadata.txt") mymeta2 = MASTFile("childdir/metadata.txt") print mymeta2.data myvc = VaspChecker(name="childdir", program_keys=kdict) mykpt = myvc._vasp_kpoints_setup() kpt_compare = pymatgen.io.vaspio.Kpoints.from_file("files/KPOINTS_317G") self.assertEqual(kpt_compare.kpts[0][0], mykpt.kpts[0][0]) self.assertEqual(kpt_compare.kpts[0][1], mykpt.kpts[0][1]) self.assertEqual(kpt_compare.kpts[0][2], mykpt.kpts[0][2]) self.assertEqual(kpt_compare.num_kpts, mykpt.num_kpts) self.assertEqual(kpt_compare.style, mykpt.style) # self.assertEqual(kpt_compare.kpts_shift, mykpt.kpts_shift) self.assertEqual((0.5, 0.2, 0.1), mykpt.kpts_shift)
def test_get_parent_image_structures(self): kdict = dict() kdict['mast_program'] = 'vasp_neb' neblines = list() neblines.append(["Cr", "0.0 0.9 0.8", "0.0 0.8 0.7"]) neblines.append(["Cr", "0.4 0.2 0.1", "0.3 0.3 0.2"]) neblines.append(["Cr", "0.29 0.05 0.05", "0.01 0.01 0.98"]) neblines.append(["Ni", "0.61 0.99 0.98", "0.25 0.01 0.97"]) kdict['mast_neb_settings'] = dict() kdict['mast_neb_settings']['images'] = 3 kdict['mast_neb_settings']['lines'] = neblines ingdir = "writedir/neb_labelinit-labelfin" topmetad = MASTFile("files/top_metadata_neb") topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) unsorted_01 = MASTFile( "unsorted/parent_structure_labelinit-labelfin_01") unsorted_01.to_file("%s/parent_structure_labelinit-labelfin_01" % ingdir) unsorted_02 = MASTFile( "unsorted/parent_structure_labelinit-labelfin_02") unsorted_02.to_file("%s/parent_structure_labelinit-labelfin_02" % ingdir) unsorted_03 = MASTFile( "unsorted/parent_structure_labelinit-labelfin_03") unsorted_03.to_file("%s/parent_structure_labelinit-labelfin_03" % ingdir) my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) imstrs = mywi.get_parent_image_structures() compare_01 = pymatgen.io.vaspio.Poscar.from_file( "files/parent_structure_labelinit-labelfin_01").structure compare_02 = pymatgen.io.vaspio.Poscar.from_file( "files/parent_structure_labelinit-labelfin_02").structure compare_03 = pymatgen.io.vaspio.Poscar.from_file( "files/parent_structure_labelinit-labelfin_03").structure self.assertEqual(imstrs[0].sites, compare_01.sites) self.assertEqual(imstrs[0].lattice, compare_01.lattice) self.assertEqual(imstrs[1].sites, compare_02.sites) self.assertEqual(imstrs[1].lattice, compare_02.lattice) self.assertEqual(imstrs[2].sites, compare_03.sites) self.assertEqual(imstrs[2].lattice, compare_03.lattice)
def test_vasp_kpoints_setup_from_metafile(self): kdict = dict() mymeta = MASTFile("childdir/metadata.txt") mymeta.data.append("kpoints = 3x1x7 G 0.5 0.2 .1\n") mymeta.to_file("childdir/metadata.txt") mymeta2 = MASTFile("childdir/metadata.txt") print mymeta2.data myvc = VaspChecker(name="childdir", program_keys=kdict) mykpt = myvc._vasp_kpoints_setup() kpt_compare = pymatgen.io.vaspio.Kpoints.from_file( "files/KPOINTS_317G") self.assertEqual(kpt_compare.kpts[0][0], mykpt.kpts[0][0]) self.assertEqual(kpt_compare.kpts[0][1], mykpt.kpts[0][1]) self.assertEqual(kpt_compare.kpts[0][2], mykpt.kpts[0][2]) self.assertEqual(kpt_compare.num_kpts, mykpt.num_kpts) self.assertEqual(kpt_compare.style, mykpt.style) #self.assertEqual(kpt_compare.kpts_shift, mykpt.kpts_shift) self.assertEqual((0.5, 0.2, 0.1), mykpt.kpts_shift)
def test_ready_structure(self): ingdir="%s/writedir/single_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2,2,2,"M"] kdict['mast_xc'] = 'pw91' my_pos = pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure") my_pos.write_file("writedir/single_label1/POSCAR") myrdi = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_pos.structure) self.assertTrue(myrdi.ready_structure()) os.remove("%s/POSCAR" % ingdir) self.assertFalse(myrdi.ready_structure())
def test_complete_ingredient(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("recipedir") rp.ingredients['ing1'] = "I" kdict=dict() kdict['mast_program']='vasp' kdict['mast_xc']='pw91' kdict['mast_kpoints']=[1,2,3,"G"] rp.ingred_input_options['ing1']=dict() rp.ingred_input_options['ing1']['name']="%s/recipedir/ing1" % testdir rp.ingred_input_options['ing1']['program_keys']=kdict rp.ingred_input_options['ing1']['structure']=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure rp.complete_methods['ing1']=[['complete_singlerun']] self.assertTrue(rp.complete_ingredient('ing1'))
def print_table(self, scsize): if not self.e_defects: self._calculate_defect_formation_energies(scsize) myfile = MASTFile() for conditions, defects in self.e_defects.items(): myfile.data.append( '\n\nDefect formation energies for %s conditions.\n' % conditions.upper()) myfile.data.append('%-20s | %10s\n' % ('Defect', 'DFE')) myfile.data.append('---------------------------------\n') for defect, energies in defects.items(): for energy in energies: myfile.data.append('%-14s(q=%2i) | %8.4f\n' % (defect, energy[0], energy[1])) myfile.data.append(str()) # Add a blank line here myfile.data.append('---------------------------------\n') myfile.to_file(os.path.join(os.getcwd(), "dfe.txt")) for line in myfile.data: print line.strip()
def test_write_singlerun(self): ingdir = "writedir/single_label1" topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_kpoints'] = [3, 3, 3, "G"] kdict['mast_xc'] = 'pbe' kdict['mast_program'] = 'vasp' my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure mywi = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) mywi.write_singlerun() self.assertTrue(mywi.checker.is_ready_to_run())
def test_get_statuses_from_file(self): rp = RecipePlan("recipedir") mystatus = MASTFile("files/status_random.txt") self.assertRaises(MASTError, rp.get_statuses_from_file) mystatus.to_file("recipedir/status.txt") rp.ingredients['ing1'] = "I" rp.ingredients['ing2a'] = "I" rp.ingredients['ing2b'] = "I" self.assertRaises(MASTError, rp.get_statuses_from_file) rp.ingredients['ing3'] = "I" rp.get_statuses_from_file() statusdict = dict() statusdict = { 'ing1': 'alpha', 'ing2a': 'beta', 'ing2b': 'gamma', 'ing3': 'delta' } self.assertEquals(rp.ingredients, statusdict)
def create_archive_files(self): """Save off archive files. Returns: creates archive_input_options.txt creates archive_recipe_plan.txt """ inputsave = MASTFile() inputsave.data = repr(self.input_options) inputsave.to_file( os.path.join(self.recdir, 'archive_input_options_%s.txt' % self.timestamp)) recipesave = MASTFile() recipesave.data = repr(self.recipe_plan) recipesave.to_file( os.path.join(self.recdir, 'archive_recipe_plan_%s.txt' % self.timestamp)) return
def test_write_singlerun_automesh(self): ingdir="writedir/single_label1" topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_kpoints']=[3,3,3,"G"] kdict['mast_xc']='pbe' kdict['mast_program']='vasp' kdict['mast_kpoint_density']='1000' mypos=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure") mypos.write_file("writedir/single_label1/POSCAR") mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=mypos.structure) mywi.write_singlerun_automesh() mykpts = pymatgen.io.vaspio.Kpoints.from_file("writedir/single_label1/KPOINTS") self.assertEqual(mykpts.to_dict['kpoints'][0],[8,8,8]) #print mykpts self.assertTrue(mywi.checker.is_ready_to_run())
def main(): recipe_name, script_head_dir = parse_arguments() mast_scratch = dirutil.get_mast_scratch_path() mymon = MASTMon() my_recipe_plan = mymon.set_up_recipe_plan(os.path.join(mast_scratch, recipe_name), 1) my_dag_contents=list() for iname in my_recipe_plan.ingredients: #all JOB lines need to be at top my_dag_contents.append("JOB %s submit.sh DIR %s\n" % (iname, iname)) for iname in my_recipe_plan.ingredients: my_dag_contents.append("SCRIPT PRE %s %s/mast_do_setup.sh %s %s\n" % (iname, script_head_dir, recipe_name, iname)) my_dag_contents.append("SCRIPT POST %s %s/mast_check_is_complete.sh %s %s\n" % (iname, script_head_dir, recipe_name, iname)) my_dag_contents.append("RETRY %s 5\n" % iname) ptc = list(my_recipe_plan.parents_to_check[iname]) for pname in ptc: my_dag_contents.append("PARENT %s CHILD %s\n" % (pname, iname)) my_dag_file = MASTFile() my_dag_file.data = my_dag_contents my_dag_file.to_file(os.path.join(mast_scratch, recipe_name, "recipe.dag")) #print_to_file(recipe_name, ing_name, "MAIN: is complete: %s" % is_complete) return 0
def test_complete_ingredient(self): topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("recipedir/metadata.txt") #metad = MASTFile("files/metadata_single") #metad.to_file("%s/metadata.txt" % ingdir) rp = RecipePlan("recipedir") rp.ingredients['ing1'] = "I" kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_xc'] = 'pw91' kdict['mast_kpoints'] = [1, 2, 3, "G"] rp.ingred_input_options['ing1'] = dict() rp.ingred_input_options['ing1']['name'] = "%s/recipedir/ing1" % testdir rp.ingred_input_options['ing1']['program_keys'] = kdict rp.ingred_input_options['ing1'][ 'structure'] = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure rp.complete_methods['ing1'] = [['complete_singlerun']] self.assertTrue(rp.complete_ingredient('ing1'))
def test_get_my_phonon_params(self): ingdir="writedir/single_phonon_label1" topmetad = MASTFile("files/top_metadata_single_phonon") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single_phonon") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_kpoints']=[3,3,3,"G"] kdict['mast_xc']='pbe' kdict['mast_program']='vasp' kdict['mast_phonon_settings']=dict() kdict['mast_phonon_settings']['phonon_center_site']="0.33 0.25 0.0" kdict['mast_phonon_settings']['phonon_center_radius']="1" kdict['mast_phonon_settings']['threshold']="0.075" my_structure=pymatgen.io.vaspio.Poscar.from_file("files/perfect_structure").structure mywi = ChopIngredient(name=ingdir,program_keys=kdict,structure=my_structure) [mysite, myrad, mythresh] = mywi.get_my_phonon_params() self.assertEqual(mysite,"0.33 0.25 0.0") self.assertEqual(myrad,"1") self.assertEqual(mythresh,"0.075")
def test_run_singlerun(self): #raise SkipTest ingdir="%s/writedir/single_label1" % testdir recipedir="%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("%s/metadata.txt" % ingdir) kdict=dict() kdict['mast_program'] = 'vasp' kdict['mast_kpoints'] = [2,2,2,"M"] kdict['mast_xc'] = 'pw91' my_structure = Poscar.from_file("files/perfect_structure").structure mywr = ChopIngredient(name=ingdir, program_keys = kdict, structure=my_structure) mywr.write_singlerun() myri = ChopIngredient(name=ingdir,program_keys=kdict, structure=my_structure) myri.run_singlerun() self.assertTrue(myri.checker.is_ready_to_run()) mysubmit = MASTFile("%s/submitlist" % self.test_control) self.assertEquals(mysubmit.data[0], "%s\n" % ingdir)
def test_run_scale(self): #raise SkipTest ingdir = "%s/writedir/single_label1" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_single") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_single") metad.data.append("defect_label = label1\n") metad.data.append("scaling_size = [2,2,2]\n") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp' my_structure = Poscar.from_file("files/POSCAR_perfect").structure myperf = MASTFile("files/POSCAR_perfect") myperf.to_file("%s/POSCAR" % ingdir) myri = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myri.run_scale() my_scaled = Poscar.from_file("%s/CONTCAR" % ingdir).structure.get_sorted_structure() scaled_compare = Poscar.from_file( "files/POSCAR_scaled").structure.get_sorted_structure() self.assertEquals(my_scaled, scaled_compare)
def test_check_if_ready_to_proceed_are_complete(self): metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing1/metadata.txt") metad = MASTFile("files/metadata_single") metad.to_file("recipedir/ing2a/metadata.txt") rp = RecipePlan("recipedir") rp.ingredients['ing1'] = "P" rp.ingredients['ing2a'] = "I" rp.ingredients['ing2b'] = "I" rp.ingredients['ing3'] = "I" kdict = dict() kdict['mast_program'] = 'vasp' kdict['mast_xc'] = 'pw91' kdict['mast_kpoints'] = [1, 2, 3, "G"] my_struc = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure rp.ingred_input_options['ing1'] = dict() rp.ingred_input_options['ing1']['name'] = "%s/recipedir/ing1" % testdir rp.ingred_input_options['ing1']['program_keys'] = kdict rp.ingred_input_options['ing1']['structure'] = my_struc rp.complete_methods['ing1'] = [['complete_singlerun']] rp.update_methods['ing1'] = dict() rp.update_methods['ing1']['ing2a'] = [['give_structure']] rp.update_methods['ing1']['ing2b'] = [['give_structure']] rp.ingred_input_options['ing2a'] = dict() rp.ingred_input_options['ing2a'][ 'name'] = "%s/recipedir/ing2a" % testdir rp.ingred_input_options['ing2a']['program_keys'] = kdict rp.ingred_input_options['ing2a']['structure'] = my_struc rp.complete_methods['ing2a'] = [['complete_singlerun']] rp.ready_methods['ing2a'] = [['ready_structure']] rp.check_if_ready_to_proceed_are_complete() self.assertTrue(rp.ready_ingredient('ing2a')) self.assertEquals self.assertEquals(rp.ingredients, { 'ing1': 'C', 'ing2a': 'I', 'ing2b': 'I', 'ing3': 'I' })
def test_give_saddle_structure(self): ingdir = "%s/writedir/neb_labelinit-labelfin" % testdir recipedir = "%s/writedir" % testdir topmetad = MASTFile("files/top_metadata_neb") topmetad.data.append("origin_dir = %s/files\n" % testdir) #give origin directory topmetad.to_file("writedir/metadata.txt") metad = MASTFile("files/metadata_neb") metad.to_file("%s/metadata.txt" % ingdir) kdict = dict() kdict['mast_program'] = 'vasp_neb' kdict['images'] = 3 my_structure = pymatgen.io.vaspio.Poscar.from_file( "files/perfect_structure").structure myrelaxed = dict() myosz = dict() mywav = dict() mychg = dict() for subdir in ['00', '01', '02', '03', '04']: os.mkdir("writedir/neb_labelinit-labelfin/%s" % subdir) myrelaxed[subdir] = MASTFile("files/POSCAR_%s" % subdir) myrelaxed[subdir].to_file( "writedir/neb_labelinit-labelfin/%s/CONTCAR" % subdir) myosz[subdir] = MASTFile("files/OSZICAR_%s" % subdir) myosz[subdir].to_file( "writedir/neb_labelinit-labelfin/%s/OSZICAR" % subdir) mychg[subdir] = MASTFile("files/CHGCAR") mychg[subdir].to_file("writedir/neb_labelinit-labelfin/%s/CHGCAR" % subdir) mywav[subdir] = MASTFile("files/WAVECAR") mywav[subdir].to_file( "writedir/neb_labelinit-labelfin/%s/WAVECAR" % subdir) myuci = ChopIngredient(name=ingdir, program_keys=kdict, structure=my_structure) myuci.give_saddle_structure("next_ingred") #should be OSZ3 saddle = MASTFile("%s/writedir/next_ingred/POSCAR" % testdir) self.assertEqual(myrelaxed['03'].data, saddle.data) saddledir = myuci.get_saddle_dir() self.assertEqual(saddledir, "03")