Ejemplo n.º 1
0
 def test_set_structure_from_inputs(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     myoptions = myip.parse()
     compare_struct = pymatgen.io.vaspio.Poscar.from_file(
         "nebphononsposcar").structure
     self.assertEqual(myoptions.options['structure']['structure'],
                      compare_struct)
Ejemplo n.º 2
0
 def test_parse(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     myoptions = myip.parse()
     print myoptions.options.keys()
     self.assertItemsEqual(
         myoptions.options.keys(),
         ['mast', 'structure', 'defects', 'recipe', 'ingredients', 'neb'])
Ejemplo n.º 3
0
 def test_parse_structure_section_noposfile(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/structure_noposfile_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_structure_section('structure', cleanlines, myoptions)
     #print myoptions
     self.assertEqual(myoptions.options['structure']['atom_list'],
                      ['Al', 'Mg', 'Al', 'Fe'])
     self.assertEqual(myoptions.options['structure']['coord_type'],
                      'fractional')
     self.assertTrue(
         np.array_equal(myoptions.options['structure']['lattice'],
                        np.array([[3.5, 1, 2], [3, 3.5, 4], [5, 6, 3.5]])))
     self.assertTrue(
         np.array_equal(
             myoptions.options['structure']['coordinates'],
             np.array([[0, 0, 0], [0.5, 0.5, 0], [0, 0.5, 0.5],
                       [0.5, 0, 0.5]])))
     self.assertItemsEqual(myoptions.options['structure']['element_map'],
                           dict({
                               'X1': 'Al',
                               'X2': 'Mg',
                               'X3': 'Fe'
                           }))
Ejemplo n.º 4
0
 def set_up_recipe_plan(self, fulldir, verbose=0):
     """Set up a recipe plan from the recipe directory.
         Args:
             fulldir <str>: full path of recipe directory
             verbose <int>: verbosity
     """
     self.logger.info("--------------------------------")
     self.logger.info("Setting up recipe plan for %s" % fulldir)
     self.logger.info("--------------------------------")
     os.chdir(fulldir)  #need to change directories in order to submit jobs?
     myipparser = InputParser(inputfile=os.path.join(fulldir, 'input.inp'))
     myinputoptions = myipparser.parse()
     input_options_keys = myinputoptions.get_sections()
     key = 'personal_recipe'
     if key in input_options_keys:
         self.logger.debug("Key - personal recipe was found")
     personal_recipe_contents = myinputoptions.get_item(
         'personal_recipe', 'personal_recipe_list')
     rsetup = RecipeSetup(recipeFile=personal_recipe_contents,
                          inputOptions=myinputoptions,
                          structure=myinputoptions.get_item(
                              'structure', 'structure'),
                          workingDirectory=fulldir)
     recipe_plan_obj = rsetup.start()
     recipe_plan_obj.get_statuses_from_file()
     self.logger.debug("Returning recipe plan object to calling method.")
     return recipe_plan_obj
Ejemplo n.º 5
0
 def test_parse_phonon_section(self):
     raise SkipTest
     #Phonon section in input file is now obsolete!
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/phonon_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_phonon_section('phonon', cleanlines, myoptions)
     print myoptions
     mdict = dict()
     mdict['perfect'] = dict()
     mdict['perfect']['phonon_center_site'] = '0.5 0.5 0'
     mdict['perfect']['phonon_center_radius'] = '1'
     mdict['vac1'] = dict()
     mdict['vac1']['phonon_center_site'] = '0.5 0.5 0'
     mdict['vac1']['phonon_center_radius'] = '1'
     mdict['vac2'] = dict()
     mdict['vac2']['phonon_center_site'] = '0.0 0.0 0'
     mdict['vac2']['phonon_center_radius'] = '1'
     mdict['vac1-vac2'] = dict()
     mdict['vac1-vac2']['phonon_center_site'] = '0.25 0.25 0'
     mdict['vac1-vac2']['phonon_center_radius'] = '1'
     self.assertEqual(myoptions.options['phonon']['phonon'], mdict)
Ejemplo n.º 6
0
 def test_perform_element_mapping(self):
     myip = InputParser(inputfile="element_mapping.inp")
     myoptions = myip.parse()
     self.assertItemsEqual(myoptions.options.keys(), [
         'mast', 'structure', 'defects', 'recipe', 'ingredients', 'neb',
         'chemical_potentials'
     ])
     self.assertEqual(
         myoptions.options['defects']['defects']['group1']['subdefect_1']
         ['symbol'], 'Xe')
     self.assertEqual(
         myoptions.options['defects']['defects']['group1']['subdefect_2']
         ['symbol'], 'Ar')
     self.assertEqual(
         myoptions.options['defects']['defects']['group2']['subdefect_1']
         ['symbol'], 'Ar')
     self.assertEqual(
         myoptions.options['defects']['defects']['group2']['subdefect_2']
         ['symbol'], 'Xe')
     self.assertEqual(
         myoptions.options['neb']['nebs']['group1-group2']['lines'][0][0],
         'Ar')
     self.assertEqual(
         myoptions.options['neb']['nebs']['group1-group2']['lines'][1][0],
         'Xe')
Ejemplo n.º 7
0
 def test_parse_defect_formation(self):
     myip = InputParser(inputfile="defect_formation_energy.inp")
     myoptions = myip.parse()
     print myoptions.options.keys()
     self.assertItemsEqual(myoptions.options.keys(), [
         'mast', 'structure', 'defects', 'recipe', 'ingredients',
         'chemical_potentials', 'summary'
     ])
Ejemplo n.º 8
0
 def test___init__(self):
     #raise SkipTest #SD
     #rfile=os.path.join(testdir,'personalized')
     wdir=os.path.join(testdir,'workdir')
     struc=None
     #iopt=InputOptions()
     #iopt=MAST.parsers.inputparser.InputParser(inputfile='input.inp').parse()
     iopt=InputParser(inputfile='input.inp').parse()
     rfile = iopt.get_item('personal_recipe', 'personal_recipe_list')
     myrs=RecipeSetup(recipeFile=rfile, workingDirectory=wdir, inputOptions=iopt, structure=struc)
     self.assertEqual(type(myrs.metafile),MAST.utility.metadata.Metadata)
Ejemplo n.º 9
0
 def test_parse_recipe_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     print testdir
     minput = MASTFile("%s/recipe_neb.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line)
     myoptions = InputOptions()
     myip.parse_recipe_section('recipe', cleanlines, myoptions)
     #print myoptions
     mdict = dict()
     #mdict['recipe_file'] = os.path.join(os.getenv("MAST_RECIPE_PATH"),'defects_test.txt')
     mdict['recipe_file'] = cleanlines
     self.assertEqual(myoptions.options['recipe'], mdict)
Ejemplo n.º 10
0
 def test_parse_mast_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/mast_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_mast_section('mast', cleanlines, myoptions)
     mdict = dict()
     mdict['mast'] = dict()
     mdict['mast']['system_name'] = "SystemName!"
     self.assertItemsEqual(myoptions.options.keys(), ['mast'])
     self.assertItemsEqual(myoptions.options['mast'].keys(),
                           ['system_name', 'mast_auto_correct'])
     self.assertEqual(myoptions.options['mast']['system_name'],
                      mdict['mast']['system_name'])
     self.assertEqual(myoptions.get_item('mast', 'mast_auto_correct'),
                      "True")
Ejemplo n.º 11
0
 def test_parse_chemical_potentials_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/chemical_potential_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_chemical_potentials_section('chemical_potentials',
                                            cleanlines, myoptions)
     print myoptions
     mdict = dict()
     mdict['As rich'] = dict()
     mdict['As rich']['As'] = 3.5
     mdict['As rich']['Ga'] = 4.5
     mdict['Ga rich'] = dict()
     mdict['Ga rich']['As'] = 4.5
     mdict['Ga rich']['Ga'] = 3.5
     self.assertEqual(myoptions.options['chemical_potentials'], mdict)
Ejemplo n.º 12
0
 def test_parse_ingredients_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/ingredient_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_ingredients_section('ingredients', cleanlines, myoptions)
     print myoptions
     mdict = dict()
     mdict['global'] = dict()
     mdict['global']['mast_complete_method'] = 'complete_singlerun'
     mdict['global']['mast_update_children_method'] = 'give_structure'
     mdict['global']['mast_queue'] = 'default'
     mdict['global']['mast_run_method'] = 'run_singlerun'
     mdict['global']['lcharg'] = 'False'
     mdict['global']['mast_multiplyencut'] = '1.5'
     mdict['global']['mast_ppn'] = '1'
     mdict['global']['ismear'] = '1'
     mdict['global']['nsw'] = '191'
     mdict['global']['mast_exec'] = 'mpiexec //share/apps/vasp5.2_cNEB'
     mdict['global']['mast_nodes'] = '1'
     mdict['global']['mast_xc'] = 'PW91'
     mdict['global']['prec'] = 'Accurate'
     mdict['global']['mast_kpoints'] = [2, 2, 2, 'M']
     mdict['global']['mast_write_method'] = 'write_singlerun'
     mdict['global']['ldauu'] = '1 3 5'
     mdict['global']['ibrion'] = '2'
     mdict['global']['mast_ready_method'] = 'ready_singlerun'
     mdict['global']['isif'] = '2'
     mdict['global']['mast_program'] = 'vasp'
     mdict['global']['lwave'] = 'False'
     mdict['global']['sigma'] = '0.2'
     mdict['phononingredient'] = dict()
     mdict['phononingredient']['mast_exec'] = 'phon several words WiTh CaPs'
     mdict['phononingredient']['ibrion'] = '5'
     mdict['phononingredient']['mast_program'] = 'phon'
     maxdiff = self.maxDiff
     self.maxDiff = None
     self.assertEqual(myoptions.options['ingredients'], mdict)
     self.maxDiff = maxdiff
Ejemplo n.º 13
0
 def test_parse_neb_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/neb_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_neb_section('neb', cleanlines, myoptions)
     print myoptions
     mdict = dict()
     mdict['nebs'] = dict()
     mdict['nebs']['vac1-vac2'] = dict()
     mdict['nebs']['vac1-vac2']['images'] = 3
     mdict['nebs']['vac1-vac2']['lines'] = list()
     mdict['nebs']['vac1-vac2']['phonon'] = dict()
     mdict['nebs']['vac1-vac2']['lines'].append(
         list(['Cr', ' 0.5 0.5 0.0', ' 0.0 0.0 0.0']))
     mdict['nebs']['vac1-vac2']['lines'].append(
         list(['Fe', ' 0.2 0.1 0.3', ' 0.2 0.1 0.4']))
     mdict['nebs']['vac1-vac3'] = dict()
     mdict['nebs']['vac1-vac3']['images'] = 5
     mdict['nebs']['vac1-vac3']['lines'] = list()
     mdict['nebs']['vac1-vac3']['lines'].append(
         list(['Al', ' 0.1 0.1 0.0', ' 0.3 0.4 0.1']))
     mdict['nebs']['vac1-vac3']['phonon'] = dict()
     mdict['nebs']['vac1-vac3']['phonon']['solvent1'] = dict()
     mdict['nebs']['vac1-vac3']['phonon']['solvent1'][
         'phonon_center_site'] = '0.3 0.2 0.1'
     mdict['nebs']['vac1-vac3']['phonon']['solvent1'][
         'phonon_center_radius'] = 3.0
     mdict['nebs']['vac1-vac3']['phonon']['solvent1']['threshold'] = 0.1
     mdict['nebs']['vac1-vac3']['phonon']['solute1'] = dict()
     mdict['nebs']['vac1-vac3']['phonon']['solute1'][
         'phonon_center_site'] = '0.2 0.1 0.5'
     mdict['nebs']['vac1-vac3']['phonon']['solute1'][
         'phonon_center_radius'] = 0.1
     mdict['nebs']['vac1-vac3']['phonon']['solute1']['threshold'] = 0.05
     self.assertEqual(myoptions.options['neb'], mdict)
Ejemplo n.º 14
0
 def test___init__(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     s_dict = dict({\
             'mast' : myip.parse_mast_section,
             'structure' : myip.parse_structure_section,
             'ingredients' : myip.parse_ingredients_section,
             'defects' : myip.parse_defects_section,
             'recipe' : myip.parse_recipe_section,
             'neb' : myip.parse_neb_section,
             'chemical_potentials' : myip.parse_chemical_potentials_section,
             'summary' : myip.parse_summary_section,
             'personal_recipe' : myip.parse_personal_recipe_section,
             'scaling' : myip.parse_scaling_section,
                            })
     self.assertItemsEqual(myip.section_parsers, s_dict)
Ejemplo n.º 15
0
 def test_parse_structure_section_posfile(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/structure_posfile_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_structure_section('structure', cleanlines, myoptions)
     #print myoptions
     mdict = dict()
     mdict['structure'] = dict()
     mdict['structure']['posfile'] = "POSCAR_startpos"
     #mdict['structure']['posfile'] = os.path.join(testdir, "POSCAR_startpos")
     self.assertItemsEqual(myoptions.options.keys(), ['structure'])
     self.assertEqual(myoptions.options['structure']['posfile'],
                      mdict['structure']['posfile'])
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/structure_posfile_lines_nosuch.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     self.assertRaises(MASTError, myip.parse_structure_section, 'structure',
                       cleanlines, myoptions)
Ejemplo n.º 16
0
 def test_validate_execs(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     myoptions = myip.parse()
     myoptions.options['ingredients']['global'].pop('mast_exec')
     myoptions.options['ingredients']['diffcoeff'].pop('mast_exec')
     self.assertRaises(MASTError, myip.validate_execs, myoptions)
Ejemplo n.º 17
0
 def test_parse_defects_section(self):
     myip = InputParser(inputfile="neb_with_phonons.inp")
     minput = MASTFile("%s/defects_lines.txt" % testdir)
     cleanlines = list()
     for line in minput.data:
         cleanlines.append(line.strip())
     myoptions = InputOptions()
     myip.parse_defects_section('defects', cleanlines, myoptions)
     print myoptions.options['defects']
     #Test coordinates first, to avoid dictionary-equal error on comparing arryas
     self.assertTrue(
         np.array_equal(
             myoptions.options['defects']['defects']
             ['defect_3']['subdefect_1']['coordinates'],
             np.array([0., 0., 0.], 'float')))
     self.assertTrue(
         np.array_equal(
             myoptions.options['defects']['defects']
             ['Vac@Al-Sub@Fe']['subdefect_1']['coordinates'],
             np.array([0., 0., 0.], 'float')))
     self.assertTrue(
         np.array_equal(
             myoptions.options['defects']['defects']['Vac@Al-Sub@Fe']
             ['subdefect_2']['coordinates'],
             np.array([0.5, 0.5, 0.], 'float')))
     self.assertTrue(
         np.array_equal(
             myoptions.options['defects']['defects']['AntiGe@Fe']
             ['subdefect_1']['coordinates'],
             np.array([0.1, 0.3, 0.4], 'float')))
     self.assertTrue(
         np.array_equal(
             myoptions.options['defects']['defects']['MgInt']['subdefect_1']
             ['coordinates'], np.array([0., 0.2, 0.3], 'float')))
     self.assertItemsEqual(
         myoptions.options['defects']['defects']['Vac@Al-Sub@Fe']
         ['phonon'].keys(), ['host1', 'sub2'])
     #Have to blank out the numpy arrays so that the rest of the diff'ing will work
     myoptions.options['defects']['defects']['defect_3']['subdefect_1'][
         'coordinates'] = 'blank'
     myoptions.options['defects']['defects']['Vac@Al-Sub@Fe'][
         'subdefect_1']['coordinates'] = 'blank'
     myoptions.options['defects']['defects']['Vac@Al-Sub@Fe'][
         'subdefect_2']['coordinates'] = 'blank'
     myoptions.options['defects']['defects']['AntiGe@Fe']['subdefect_1'][
         'coordinates'] = 'blank'
     myoptions.options['defects']['defects']['MgInt']['subdefect_1'][
         'coordinates'] = 'blank'
     mdict = dict()
     mdict['coord_type'] = 'fractional'
     mdict['num_defects'] = 4
     mdict['defects'] = dict()
     mdict['defects']['defect_3'] = dict()
     mdict['defects']['defect_3']['threshold'] = 0.0001
     mdict['defects']['defect_3']['charge'] = [0]  #charge of 0
     mdict['defects']['defect_3']['coord_type'] = 'fractional'
     mdict['defects']['defect_3']['subdefect_1'] = dict()
     mdict['defects']['defect_3']['subdefect_1']['symbol'] = 'Al'
     mdict['defects']['defect_3']['subdefect_1']['type'] = 'vacancy'
     mdict['defects']['defect_3']['subdefect_1'][
         'coordinates'] = 'blank'  #np.array([0.,0.,0.],'float')
     mdict['defects']['defect_3']['phonon'] = {}
     mdict['defects']['Vac@Al-Sub@Fe'] = dict()
     mdict['defects']['Vac@Al-Sub@Fe']['threshold'] = 0.0001
     mdict['defects']['Vac@Al-Sub@Fe']['charge'] = [
         -2, -1, 0, 1, 2, 3, 4, 5
     ]
     mdict['defects']['Vac@Al-Sub@Fe']['coord_type'] = 'fractional'
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_1'] = dict()
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_1']['symbol'] = 'Al'
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_1']['type'] = 'vacancy'
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_1'][
         'coordinates'] = 'blank'  #np.array([0.,0.,0.],'float')
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_2'] = dict()
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_2']['symbol'] = 'Fe'
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_2'][
         'type'] = 'substitution'
     mdict['defects']['Vac@Al-Sub@Fe']['subdefect_2'][
         'coordinates'] = 'blank'  #np.array([0.5,0.5,0.],'float')
     mdict['defects']['Vac@Al-Sub@Fe']['phonon'] = {}
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['host1'] = dict()
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['host1'][
         'phonon_center_site'] = '0.1 0.2 0.3'
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['host1'][
         'phonon_center_radius'] = 3.0
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['host1'][
         'threshold'] = 0.07
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['sub2'] = dict()
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['sub2'][
         'phonon_center_site'] = '0.2 0.4 0.0'
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['sub2'][
         'phonon_center_radius'] = 1.0
     mdict['defects']['Vac@Al-Sub@Fe']['phonon']['sub2']['threshold'] = 0.1
     mdict['defects']['AntiGe@Fe'] = dict()
     mdict['defects']['AntiGe@Fe']['threshold'] = 0.0001
     mdict['defects']['AntiGe@Fe']['charge'] = [3]
     mdict['defects']['AntiGe@Fe']['coord_type'] = 'fractional'
     mdict['defects']['AntiGe@Fe']['subdefect_1'] = dict()
     mdict['defects']['AntiGe@Fe']['subdefect_1']['symbol'] = 'Ge'
     mdict['defects']['AntiGe@Fe']['subdefect_1']['type'] = 'antisite'
     mdict['defects']['AntiGe@Fe']['subdefect_1'][
         'coordinates'] = 'blank'  #np.array([0.1,0.3,0.4],'float')
     mdict['defects']['AntiGe@Fe']['phonon'] = {}
     mdict['defects']['MgInt'] = dict()
     mdict['defects']['MgInt']['threshold'] = 0.0001
     mdict['defects']['MgInt']['charge'] = [0, 1, 2, 3]
     mdict['defects']['MgInt']['coord_type'] = 'fractional'
     mdict['defects']['MgInt']['subdefect_1'] = dict()
     mdict['defects']['MgInt']['subdefect_1']['symbol'] = 'Mg'
     mdict['defects']['MgInt']['subdefect_1']['type'] = 'interstitial'
     mdict['defects']['MgInt']['subdefect_1'][
         'coordinates'] = 'blank'  #np.array([0.,0.2,0.3],'float')
     mdict['defects']['MgInt']['phonon'] = {}
     maxdiff = self.maxDiff
     self.maxDiff = None
     self.assertEqual(myoptions.options['defects'], mdict)
     self.maxDiff = maxdiff