Beispiel #1
0
    def test_lsorbit_magmom(self):
        magmom1 = [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]]
        magmom2 = [-1,-1,-1, 0, 0, 0, 0 ,0 ]

        ans_string1 = "LSORBIT = True\nMAGMOM = 0.0 0.0 3.0 0 1 0 2 1 2\n"
        ans_string2 = "LSORBIT = True\nMAGMOM = 3*3*-1 3*5*0\n"
        ans_string3 = "LSORBIT = False\nMAGMOM = 2*-1 2*9\n"

        incar = Incar({})
        incar["MAGMOM"] = magmom1
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string1, str(incar))

        incar["MAGMOM"] = magmom2
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string2, str(incar))

        incar = Incar.from_string(ans_string1)
        self.assertEqual(incar["MAGMOM"], [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]])

        incar = Incar.from_string(ans_string2)
        self.assertEqual(incar["MAGMOM"], [[-1, -1, -1], [-1, -1, -1],
                                           [-1, -1, -1], [0, 0, 0],
                                           [0, 0, 0], [0, 0, 0],
                                           [0, 0, 0], [0, 0, 0]])

        incar = Incar.from_string(ans_string3)
        self.assertFalse(incar["LSORBIT"])
        self.assertEqual(incar["MAGMOM"], [-1, -1, 9, 9])
Beispiel #2
0
    def test_lsorbit_magmom(self):
        magmom1 = [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]]
        magmom2 = [-1, -1, -1, 0, 0, 0, 0, 0]

        ans_string1 = "LSORBIT = True\nMAGMOM = 0.0 0.0 3.0 0 1 0 2 1 2\n"
        ans_string2 = "LSORBIT = True\nMAGMOM = 3*3*-1 3*5*0\n"
        ans_string3 = "LSORBIT = False\nMAGMOM = 2*-1 2*9\n"

        incar = Incar({})
        incar["MAGMOM"] = magmom1
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string1, str(incar))

        incar["MAGMOM"] = magmom2
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string2, str(incar))

        incar = Incar.from_string(ans_string1)
        self.assertEqual(incar["MAGMOM"], [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]])

        incar = Incar.from_string(ans_string2)
        self.assertEqual(
            incar["MAGMOM"],
            [[-1, -1, -1], [-1, -1, -1], [-1, -1, -1], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
        )

        incar = Incar.from_string(ans_string3)
        self.assertFalse(incar["LSORBIT"])
        self.assertEqual(incar["MAGMOM"], [-1, -1, 9, 9])
Beispiel #3
0
    def test_lsorbit_magmom(self):
        magmom1 = [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]]
        magmom2 = [-1, -1, -1, 0, 0, 0, 0, 0]
        magmom4 = [Magmom([1.0, 2.0, 2.0])]

        ans_string1 = (
            "LANGEVIN_GAMMA = 10 10 10\nLSORBIT = True\n"
            "MAGMOM = 0.0 0.0 3.0 0 1 0 2 1 2\n"
        )
        ans_string2 = "LANGEVIN_GAMMA = 10\nLSORBIT = True\n" "MAGMOM = 3*3*-1 3*5*0\n"
        ans_string3 = "LSORBIT = False\nMAGMOM = 2*-1 2*9\n"
        ans_string4_nolsorbit = "LANGEVIN_GAMMA = 10\nLSORBIT = False\nMAGMOM = 1*3.0\n"
        ans_string4_lsorbit = (
            "LANGEVIN_GAMMA = 10\nLSORBIT = True\nMAGMOM = 1.0 2.0 2.0\n"
        )

        incar = Incar({})
        incar["MAGMOM"] = magmom1
        incar["LSORBIT"] = "T"
        incar["LANGEVIN_GAMMA"] = [10, 10, 10]
        self.assertEqual(ans_string1, str(incar))

        incar["MAGMOM"] = magmom2
        incar["LSORBIT"] = "T"
        incar["LANGEVIN_GAMMA"] = 10
        self.assertEqual(ans_string2, str(incar))

        incar["MAGMOM"] = magmom4
        incar["LSORBIT"] = "F"
        self.assertEqual(ans_string4_nolsorbit, str(incar))
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string4_lsorbit, str(incar))

        incar = Incar.from_string(ans_string1)
        self.assertEqual(incar["MAGMOM"], [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]])
        self.assertEqual(incar["LANGEVIN_GAMMA"], [10, 10, 10])

        incar = Incar.from_string(ans_string2)
        self.assertEqual(
            incar["MAGMOM"],
            [
                [-1, -1, -1],
                [-1, -1, -1],
                [-1, -1, -1],
                [0, 0, 0],
                [0, 0, 0],
                [0, 0, 0],
                [0, 0, 0],
                [0, 0, 0],
            ],
        )
        self.assertEqual(incar["LANGEVIN_GAMMA"], [10])

        incar = Incar.from_string(ans_string3)
        self.assertFalse(incar["LSORBIT"])
        self.assertEqual(incar["MAGMOM"], [-1, -1, 9, 9])
Beispiel #4
0
 def test_quad_efg(self):
     incar1 = Incar({})
     incar1["LEFG"] = True
     incar1["QUAD_EFG"] = [0.0, 146.6, -25.58]
     ans_string1 = "LEFG = True\nQUAD_EFG = 0.0 146.6 -25.58\n"
     self.assertEqual(ans_string1, str(incar1))
     incar2 = Incar.from_string(ans_string1)
     self.assertEqual(ans_string1, str(incar2))
Beispiel #5
0
 def test_quad_efg(self):
     incar1 = Incar({})
     incar1["LEFG"] = True
     incar1["QUAD_EFG"] = [0.0, 146.6, -25.58]
     ans_string1 = "LEFG = True\nQUAD_EFG = 0.0 146.6 -25.58\n"
     self.assertEqual(ans_string1, str(incar1))
     incar2 = Incar.from_string(ans_string1)
     self.assertEqual(ans_string1, str(incar2))
Beispiel #6
0
    def test_lsorbit_magmom(self):
        magmom1 = [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]]
        magmom2 = [-1, -1, -1, 0, 0, 0, 0, 0]
        magmom4 = [Magmom([1.0, 2.0, 2.0])]

        ans_string1 = "LANGEVIN_GAMMA = 10 10 10\nLSORBIT = True\n" \
                      "MAGMOM = 0.0 0.0 3.0 0 1 0 2 1 2\n"
        ans_string2 = "LANGEVIN_GAMMA = 10\nLSORBIT = True\n" \
                      "MAGMOM = 3*3*-1 3*5*0\n"
        ans_string3 = "LSORBIT = False\nMAGMOM = 2*-1 2*9\n"
        ans_string4_nolsorbit = "LANGEVIN_GAMMA = 10\nLSORBIT = False\nMAGMOM = 1*3.0\n"
        ans_string4_lsorbit = "LANGEVIN_GAMMA = 10\nLSORBIT = True\nMAGMOM = 1.0 2.0 2.0\n"

        incar = Incar({})
        incar["MAGMOM"] = magmom1
        incar["LSORBIT"] = "T"
        incar["LANGEVIN_GAMMA"] = [10, 10, 10]
        self.assertEqual(ans_string1, str(incar))

        incar["MAGMOM"] = magmom2
        incar["LSORBIT"] = "T"
        incar["LANGEVIN_GAMMA"] = 10
        self.assertEqual(ans_string2, str(incar))

        incar["MAGMOM"] = magmom4
        incar["LSORBIT"] = "F"
        self.assertEqual(ans_string4_nolsorbit, str(incar))
        incar["LSORBIT"] = "T"
        self.assertEqual(ans_string4_lsorbit, str(incar))

        incar = Incar.from_string(ans_string1)
        self.assertEqual(incar["MAGMOM"],
                         [[0.0, 0.0, 3.0], [0, 1, 0], [2, 1, 2]])
        self.assertEqual(incar["LANGEVIN_GAMMA"], [10, 10, 10])

        incar = Incar.from_string(ans_string2)
        self.assertEqual(incar["MAGMOM"], [[-1, -1, -1], [-1, -1, -1],
                                           [-1, -1, -1], [0, 0, 0],
                                           [0, 0, 0], [0, 0, 0],
                                           [0, 0, 0], [0, 0, 0]])
        self.assertEqual(incar["LANGEVIN_GAMMA"], [10])

        incar = Incar.from_string(ans_string3)
        self.assertFalse(incar["LSORBIT"])
        self.assertEqual(incar["MAGMOM"], [-1, -1, 9, 9])
Beispiel #7
0
def GW_step1(name,
             spin_polarized=True,
             submit=True,
             incar_dict={},
             force_overwrite=False):
    #name is the name of the job that will be used in submit file
    incar = Incar.from_string("""ISMEAR = 1 ; SIGMA = 0.2
ALGO = Exact  ; NELM = 1               # exact diagonalization one step suffices
EDIFF = 1E-8                           # high precision for groundstate calculation
NBANDS = 96                            # need for a lot of bands in GW
LOPTICS = .TRUE.                       # we need d phi/ d k  for GW calculations
     
KPAR = 2""")

    if spin_polarized:
        if os.path.exists('POSCAR'):
            incar.update({
                'LORBIT':
                11,
                'ISPIN':
                2,
                'MAGMOM':
                get_magmom_string(Structure.from_file('POSCAR'))
            })
        else:
            raise IOError('No POSCAR found at ' + os.getcwd())

    if os.path.isdir('step1'):
        os.chdir('step1')
    else:
        os.mkdir('step1')
        os.chdir('step1')

    if force_overwrite:
        os.system('rm -rf *')

    incar.update(incar_dict)
    incar.write_file('INCAR')
    os.system('cp ../{KPOINTS,POSCAR,CONTCAR,POTCAR} .')

    if os.path.exists('CONTCAR') and os.stat('CONTCAR').st_size > 10:
        shutil.move('CONTCAR', 'POSCAR')

    submit_builder(update_dict={
        '--mem-per-cpu': '3gb',
        '--job-name': name,
        '--nodes': 2,
        '--ntasks': 32
    })

    if submit:
        os.system('sbatch submit')

    os.chdir('../')
Beispiel #8
0
    def test_types(self):
        incar_str = """ALGO = Fast
ECUT = 510
EDIFF = 1e-07
EINT = -0.85 0.85
IBRION = -1
ICHARG = 11
ISIF = 3
ISMEAR = 1
ISPIN = 1
LPARD = True
NBMOD = -3
PREC = Accurate
SIGMA = 0.1"""
        i = Incar.from_string(incar_str)
        self.assertIsInstance(i["EINT"], list)
        self.assertEqual(i["EINT"][0], -0.85)

        incar_str += "\nLHFCALC = .TRUE. ; HFSCREEN = 0.2"
        incar_str += "\nALGO = All;"
        i = Incar.from_string(incar_str)
        self.assertTrue(i["LHFCALC"])
        self.assertEqual(i["HFSCREEN"], 0.2)
        self.assertEqual(i["ALGO"], "All")
Beispiel #9
0
    def test_types(self):
        incar_str = """ALGO = Fast
ECUT = 510
EDIFF = 1e-07
EINT = -0.85 0.85
IBRION = -1
ICHARG = 11
ISIF = 3
ISMEAR = 1
ISPIN = 1
LPARD = True
NBMOD = -3
PREC = Accurate
SIGMA = 0.1"""
        i = Incar.from_string(incar_str)
        self.assertIsInstance(i["EINT"], list)
        self.assertEqual(i["EINT"][0], -0.85)

        incar_str += "\nLHFCALC = .TRUE. ; HFSCREEN = 0.2"
        incar_str += "\nALGO = All;"
        i = Incar.from_string(incar_str)
        self.assertTrue(i["LHFCALC"])
        self.assertEqual(i["HFSCREEN"], 0.2)
        self.assertEqual(i["ALGO"], "All")
Beispiel #10
0
def write_wannier_input_file(S, spin_polarized=True, write_incar=True):
    string = """Begin Projections
random
End Projections
guiding_centres=true
bands_plot = true

begin kpoint_path\n"""

    string += get_kpoints_wannier(S) + '\n'
    string += 'end kpoint_path\n'

    if spin_polarized:
        string += 'spinors=true\n'

    w = open('wannier90.win', 'w')
    w.write(string)
    w.close()

    #write INCAR
    if write_incar:
        incar = Incar.from_string("""ISMEAR = -5
        # usefull energy range for density of states    
ALGO = None ; NELM = 1                 # exact diagonalization one step suffices
NBANDS = 96                            # need for a lot of bands in GW    
LORBIT = 11
LWRITE_MMN_AMN = TRUE
LWANNIER90_RUN = .TRUE.""")
        try:
            NBANDS = Incar.from_file('../../step1/INCAR')['NBANDS']
        except:
            NBANDS = Incar.from_file('../INCAR')['NBANDS']

        if spin_polarized:
            if os.path.exists('POSCAR'):
                incar.update({
                    'LORBIT':
                    11,
                    'ISPIN':
                    2,
                    'MAGMOM':
                    get_magmom_string(Structure.from_file('POSCAR'))
                })
            else:
                raise IOError('No POSCAR found at ' + os.getcwd())
        incar.update({'NBANDS': NBANDS})
        incar.write_file('INCAR')
Beispiel #11
0
    def test_types(self):
        incar_str = """ALGO = Fast
ECUT = 510
EDIFF = 1e-07
EINT = -0.85 0.85
IBRION = -1
ICHARG = 11
ISIF = 3
ISMEAR = 1
ISPIN = 1
LPARD = True
NBMOD = -3
PREC = Accurate
SIGMA = 0.1"""
        i = Incar.from_string(incar_str)
        self.assertIsInstance(i["EINT"], list)
        self.assertEqual(i["EINT"][0], -0.85)
    def test_types(self):
        incar_str = """ALGO = Fast
ECUT = 510
EDIFF = 1e-07
EINT = -0.85 0.85
IBRION = -1
ICHARG = 11
ISIF = 3
ISMEAR = 1
ISPIN = 1
LPARD = True
NBMOD = -3
PREC = Accurate
SIGMA = 0.1"""
        i = Incar.from_string(incar_str)
        self.assertIsInstance(i["EINT"], list)
        self.assertEqual(i["EINT"][0], -0.85)
Beispiel #13
0
def get_wf_single(structure,
                  WORKFLOW="get_wf_gibbs",
                  settings={},
                  db_file=None):
    """
    Get a single workflow

    Parameters
        structure: pymatgen.Structure
            The structure
        WORKFLOW: str
            The name of the workflow, now only gibbs energy workflow(get_wf_gibbs) is supported
        settings: dict
            User settings for the workflow
    Return
    """
    ################ PARAMETERS FOR WF #############################
    #str, the absolute path of db.json file, e.g. /storage/home/mjl6505/atomate/config/db.json
    #  If None, it will use the configuration in fireworks
    if db_file is None:
        db_file = settings.get('db_file', None)
    #list, the MAGMOM of the structure, e.g. [4.0, 4.0, -4.0, -4.0]
    magmom = settings.get('magmom', None)
    magmom = parse_magmom(magmom=magmom, nvalue=len(structure.sites))

    #int, the number of initial deformations, e.g. 7
    num_deformations = settings.get('num_deformations', 7)
    #list/tuple(min, max) or float(-max, max), the maximum amplitude of deformation, e.g. (-0.15, 0.15) means (0.95, 1.1) in volume
    deformation_fraction = settings.get('deformation_fraction', (-0.15, 0.20))
    #float, minimum ratio of Volumes spacing, e.g. 0.05
    volume_spacing_min = settings.get('volume_spacing_min', 0.05)
    #bool, run phonon(True) or not(False)
    phonon = settings.get('phonon', False)
    #list(3x3), the supercell matrix for phonon, e.g. [[2.0, 0, 0], [0, 2.0, 0], [0, 0, 2.0]]
    phonon_supercell_matrix = settings.get('phonon_supercell_matrix', None)
    phonon_supercell_matrix_min = settings.get('phonon_supercell_matrix_min',
                                               None)
    phonon_supercell_matrix_max = settings.get('phonon_supercell_matrix_max',
                                               None)
    optimize_sc = settings.get('optimize_sc', False)
    #run phonon always, no matter ISIF=4 passed or not
    force_phonon = settings.get('force_phonon', False)
    #The tolerance for phonon stable
    stable_tor = settings.get('stable_tor', 0.01)
    #float, the mimimum of temperature in QHA process, e.g. 5
    t_min = settings.get('t_min', 5)
    #float, the maximum of temperature in QHA process, e.g. 2000
    t_max = settings.get('t_max', 2000)
    #float, the step of temperature in QHA process, e.g. 5
    t_step = settings.get('t_step', 5)
    #float, acceptable value for average RMS, recommend >= 0.005
    eos_tolerance = settings.get('eos_tolerance', 0.01)
    #str, the vasp command, if None then find in the FWorker configuration
    vasp_cmd = settings.get('vasp_cmd', None)
    #dict, metadata to be included, this parameter is useful for filter the data, e.g. metadata={"phase": "BCC_A2", "tag": "AFM"}
    metadata = settings.get('metadata', None)
    #It is for RobustOptimizeFW, if run ISIF=4 followed ISIF=7
    isif4 = settings.get('isif4', False)
    #The level for robust optimization
    level = settings.get('level', 1)
    #float, the tolerannce for symmetry, e.g. 0.05
    symmetry_tolerance = settings.get('symmetry_tolerance', 0.05)
    #bool, set True to pass initial VASP running if the results exist in DB, use carefully to keep data consistent.
    passinitrun = settings.get('passinitrun', False)
    #bool, Whether run isif=2 calculation before isif=4 running
    run_isif2 = settings.get('run_isif2', False)
    #bool, Whether pass isif=4 calculation.
    pass_isif4 = settings.get('pass_isif4', False)
    #Set the path already exists for new static calculations; if set as '', will try to get the path from db_file
    relax_path = settings.get('relax_path', '')
    #The symmetry tolerance, including three keys,
    #e.g. override_symmetry_tolerances={'tol_strain': 0.05, 'tol_energy': 0.025, 'tol_bond': 0.10}
    override_symmetry_tolerances = settings.get('override_symmetry_tolerances',
                                                None)
    #Global settings for all vasp job, e.g.
    #override_default_vasp_params = {'user_incar_settings': {}, 'user_kpoints_settings': {}, 'user_potcar_functional': str}
    #If some value in 'user_incar_settings' is set to None, it will use vasp's default value
    override_default_vasp_params = settings.get('override_default_vasp_params',
                                                {})

    #dict, dict of class ModifyIncar with keywords in Workflow name. e.g.
    """
    modify_incar_params = { 'Full relax': {'incar_update': {"LAECHG":False,"LCHARG":False,"LWAVE":False}},
                            'PreStatic': {'incar_update': {"LAECHG":False,"LCHARG":False,"LWAVE":False}},
                            'PS2': {'incar_update': {"LAECHG":False,"LCHARG":False,"LWAVE":False}},
                            'static': {'incar_update': {"LAECHG":False,"LCHARG":False,"LWAVE":False}},
    """
    modify_incar_params = settings.get('modify_incar_params', {})

    #check if fworker_name is assigned
    powerups = settings.get('powerups', {})
    """
    if len(powerups)>0:
        if 'user_incar_settings' not in override_default_vasp_params:
            override_default_vasp_params.update({'user_incar_settings':{}})
        override_default_vasp_params['user_incar_settings'].update({'powerups':powerups})
        modify_incar_params.update({'powerups':powerups})
    """

    #dict, dict of class ModifyKpoints with keywords in Workflow name, similar with modify_incar_params
    modify_kpoints_params = settings.get('modify_kpoints_params', {})
    #bool, print(True) or not(False) some informations, used for debug
    verbose = settings.get('verbose', False)
    #Save the volume data or not ("chgcar", "aeccar0", "aeccar2", "elfcar", "locpot")
    store_volumetric_data = settings.get('store_volumetric_data', False)

    ## The following settings only work for elastic constants workflow
    strain_states = settings.get('strain_states', None)
    stencils = settings.get('stencils', None)
    analysis = settings.get('analysis', True)
    sym_reduce = settings.get('sym_reduce', False)
    order = settings.get('order', 2)
    conventional = settings.get('conventional', False)
    """
    stencils = settings.get('stencils', [0.01])
    #sym_reduce = settings.get('sym_reduce', True)
    stencils = settings.get('stencils', [-0.01,0.01])
    #conventional = settings.get('conventional', True)
    """

    #Set the default value for phonon_supercell_matrix_min/max
    if isinstance(phonon_supercell_matrix,
                  str) and (phonon_supercell_matrix_min is None):
        if phonon_supercell_matrix.lower().startswith('a'):
            phonon_supercell_matrix_min = 60
            phonon_supercell_matrix_max = 130
        elif phonon_supercell_matrix.lower().startswith('l'):
            phonon_supercell_matrix_min = 8
            phonon_supercell_matrix_max = 12
        elif phonon_supercell_matrix.lower().startswith('v'):
            phonon_supercell_matrix_min = 512
            phonon_supercell_matrix_max = 1728
        else:
            raise ValueError(
                "Unknown parameters for phonon_supercell_matrix({}), support 'atoms', 'lattice' or 'volume' or 3x3 list."
                .format(phonon_supercell_matrix))

    uis = override_default_vasp_params.get('user_incar_settings', {})
    if magmom:
        structure.add_site_property('magmom', magmom)
    elif 'MAGMOM' in uis:
        magmom = uis['MAGMOM']
        if isinstance(magmom, str):
            magmom = Incar.from_string(
                'MAGMOM={}'.format(magmom)).as_dict()['MAGMOM']
        magmom = parse_magmom(magmom=magmom, nvalue=len(structure.sites))
        structure.add_site_property('magmom', magmom)
    if not db_file:
        #from fireworks.fw_config import config_to_dict
        #db_file = loadfn(config_to_dict()["FWORKER_LOC"])["env"]["db_file"]
        db_file = ">>db_file<<"
    """
    if WORKFLOW == "get_wf_gibbs":
        #Currently, only this workflow is supported
        wf = get_wf_gibbs(structure, num_deformations=num_deformations, deformation_fraction=deformation_fraction,
                    phonon=phonon, phonon_supercell_matrix=phonon_supercell_matrix,  t_min=t_min, t_max=t_max,
                    t_step=t_step, eos_tolerance=eos_tolerance, volume_spacing_min=volume_spacing_min,vasp_cmd=vasp_cmd,
                    db_file=db_file, metadata=metadata, name='EV_QHA', symmetry_tolerance=symmetry_tolerance,
                    run_isif2=run_isif2, pass_isif4=pass_isif4, passinitrun=passinitrun, relax_path=relax_path,
                    modify_incar_params=modify_incar_params, modify_kpoints_params=modify_kpoints_params,
                    verbose=verbose, store_volumetric_data=store_volumetric_data)
    elif WORKFLOW == "eos":
    """
    if WORKFLOW == "eos":
        wf = get_wf_EV_bjb(
            structure,
            deformation_fraction=deformation_fraction,
            store_volumetric_data=store_volumetric_data,
            num_deformations=num_deformations,
            settings=settings,
            override_symmetry_tolerances=override_default_vasp_params,
            metadata=metadata)
    elif WORKFLOW == "singleV":
        wf = get_wf_singleV(
            structure,
            store_volumetric_data=store_volumetric_data,
            metadata=metadata,
            override_default_vasp_params=override_default_vasp_params,
            settings=settings)
    elif WORKFLOW == "crosscom":
        wf = get_wf_crosscom(structure, metadata=metadata, settings=settings)
    elif WORKFLOW == "robust" or WORKFLOW == "get_wf_gibbs":
        wf = get_wf_gibbs_robust(
            structure,
            num_deformations=num_deformations,
            deformation_fraction=deformation_fraction,
            phonon=phonon,
            phonon_supercell_matrix=phonon_supercell_matrix,
            t_min=t_min,
            t_max=t_max,
            t_step=t_step,
            eos_tolerance=eos_tolerance,
            volume_spacing_min=volume_spacing_min,
            vasp_cmd=">>vasp_cmd<<",
            db_file=">>db_file<<",
            isif4=isif4,
            metadata=metadata,
            name='EV_QHA',
            override_symmetry_tolerances=override_symmetry_tolerances,
            override_default_vasp_params=override_default_vasp_params,
            modify_incar_params=modify_incar_params,
            modify_kpoints_params=modify_kpoints_params,
            verbose=verbose,
            phonon_supercell_matrix_min=phonon_supercell_matrix_min,
            phonon_supercell_matrix_max=phonon_supercell_matrix_max,
            optimize_sc=optimize_sc,
            level=level,
            force_phonon=force_phonon,
            stable_tor=stable_tor,
            store_volumetric_data=store_volumetric_data,
            settings=settings)
    elif WORKFLOW == "born":
        wf = get_wf_borncharge(
            structure=structure,
            metadata=metadata,
            db_file=db_file,
            isif=2,
            name="born charge",
            vasp_cmd=">>vasp_cmd<<",
            override_default_vasp_params=override_default_vasp_params,
            modify_incar=modify_incar_params,
            settings=settings)
    elif WORKFLOW == 'elastic':
        wf = get_wf_elastic(
            structure=structure,
            metadata=metadata,
            vasp_cmd=">>vasp_cmd<<",
            db_file=">>db_file<<",
            name="elastic",
            override_default_vasp_params=override_default_vasp_params,
            settings=settings,
            strain_states=strain_states,
            stencils=stencils,
            analysis=analysis,
            sym_reduce=sym_reduce,
            order=order,
            conventional=conventional)
    else:
        raise ValueError(
            "Currently, only the gibbs energy workflow is supported.")
    return wf
Beispiel #14
0
def GW_step2(name,
             submit=True,
             spin_polarized=True,
             incar_dict={},
             force_overwrite=False):
    #Calculation is supposed to be run in parent directory (step1 should be there as well)
    #incar_dict should not have NBANDS tag, since it will be extracted from step1/INCAR
    incar = Incar.from_string("""
    ISMEAR = -5
NBANDS = 96                            # need for a lot of bands in GW
ALGO = GW0                             # 
NELM = 1                               
PRECFOCK = Fast                        
ENCUTGW = 100                         
NOMEGA = 200                           
KPAR = 2""")

    if not os.path.isdir('step1'):
        raise ValueError(
            'It is not possible to run step2 before step1. Check if you are in right directory.'
        )

    os.chdir('step1')

    if os.path.exists('WAVECAR') and os.path.exists('WAVEDER') and os.stat(
            'WAVECAR').st_size > 100 and os.stat('WAVEDER').st_size > 100:
        os.chdir('../')
        try:
            os.mkdir('step2')
            os.chdir('step2')
        except:
            os.chdir('step2')
    else:
        raise ValueError(
            'step1 calculation did not finish properly. WAVECAR and/or WAVEDER files are not written properly.'
        )

    if force_overwrite:
        os.system('rm -rf *')
    os.system('cp ../step1/{WAVE*,KPOINTS,POSCAR,POTCAR} .')
    NBANDS = Incar.from_file('../step1/INCAR')['NBANDS']
    incar.update({'NBANDS': NBANDS})
    if spin_polarized:
        if os.path.exists('POSCAR'):
            incar.update({
                'LORBIT':
                11,
                'ISPIN':
                2,
                'MAGMOM':
                get_magmom_string(Structure.from_file('POSCAR'))
            })
        else:
            raise IOError('No POSCAR found at ' + os.getcwd())

    incar.write_file('INCAR')
    submit_builder(update_dict={
        '--mem-per-cpu': '3gb',
        '--job-name': name,
        '--nodes': 2,
        '--ntasks': 32
    })

    if submit:
        os.system('sbatch submit')

    os.chdir('../')