Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def make_ion_ioncell_inputs(paral_kgb=0):
pseudos = abidata.pseudos("14si.pspnc")
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
# Perturb the structure (random perturbation of 0.1 Angstrom)
# then compress the volume to trigger dilatmx.
#structure.perturb(distance=0.1)
#structure.scale_lattice(structure.volume * 0.6)
global_vars = dict(
ecut=28,
ngkpt=[4,4,4],
shiftk=[0,0,0],
nshiftk=1,
chksymbreak=0,
paral_kgb=paral_kgb,
#prtwf=0,
)
def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
if not options.workdir:
options.workdir = os.path.basename(sys.argv[0]).replace(".py", "").replace("run_", "flow_")
# Initialize structure and pseudos.
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
pseudos = abidata.pseudos("14si.pspnc")
# Initialize the flow.
flow = flowtk.Flow(workdir=options.workdir, manager=options.manager)
# Use the ebands_input factory function to build a MultiDataset.
# keyword args are optional (default values are given or computed automatically, see docs).
multi = abilab.ebands_input(structure, pseudos, kppa=40, dos_kppa=80,
nscf_nband=6, ndivsm=10, ecut=6, spin_mode="unpolarized")
work = flowtk.BandStructureWork(scf_input=multi[0], nscf_input=multi[1], dos_inputs=multi[2])
flow.register_work(work)
return flow
def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
if not options.workdir:
options.workdir = os.path.basename(sys.argv[0]).replace(".py", "").replace("run_", "flow_")
# build the structures
base_structure = abilab.Structure.from_file(data.cif_file("si.cif"))
modifier = abilab.StructureModifier(base_structure)
etas = [-0.1, 0, +0.1]
ph_displ = np.reshape(np.zeros(3*len(base_structure)), (-1,3))
ph_displ[0,:] = [+1, 0, 0]
ph_displ[1,:] = [-1, 0, 0]
displaced_structures = modifier.displace(ph_displ, etas, frac_coords=False)
flow = flowtk.Flow(options.workdir, manager=options.manager)
for structure in displaced_structures:
# Create the work for the band structure calculation.
scf_input, nscf_input = make_scf_nscf_inputs(structure)
work = flowtk.BandStructureWork(scf_input, nscf_input)
def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
if not options.workdir:
options.workdir = os.path.basename(__file__).replace(".py", "").replace("run_", "flow_")
pseudos = abidata.pseudos("14si.pspnc", "8o.pspnc")
base_structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
news, uparams = [], [0.2, 0.3]
for u in uparams:
new = special_positions(base_structure.lattice, u)
news.append(new)
flow = flowtk.Flow(options.workdir, manager=options.manager)
# Create the list of workflows. Each workflow defines a band structure calculation.
for new_structure, u in zip(news, uparams):
# Generate the workflow and register it.
flow.register_work(make_workflow(new_structure, pseudos))
return flow
def make_relax_flow(structure_file=None):
"""
Build and return a flow that perform a structural relaxation for different k-point samplings.
"""
ngkpt_list = [[3, 3, 2], [6, 6, 4], [8, 8, 6]]
if structure_file is None:
structure = abilab.Structure.from_file(abidata.cif_file("gan2.cif"))
else:
structure = abilab.Structure.from_file(structure_file)
multi = abilab.MultiDataset(structure=structure, pseudos=get_pseudos(structure), ndtset=len(ngkpt_list))
# Add mnemonics to input file.
multi.set_mnemonics(True)
# Global variables
multi.set_vars(
ecut=20,
tolrff=5.0e-2,
nstep=30,
optcell=2,
ionmov=3,
ntime=50,
dilatmx=1.05,
ecutsm=0.5,
def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
if not options.workdir:
options.workdir = os.path.basename(sys.argv[0]).replace(".py", "").replace("run_", "flow_")
# Initialize pseudos and Structure.
pseudos = abidata.pseudos("14si.pspnc")
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
kppa = scf_kppa = 1
nscf_nband = 6
nscf_ngkpt = [4, 4, 4]
nscf_shiftk = [0.1, 0.2, 0.3]
bs_loband = 2
bs_nband = nscf_nband
mbpt_sciss = 0.7 * abilab.units.eV_to_Ha
mdf_epsinf = 12
ecuteps = 2
ecut = 12
flow = flowtk.Flow(workdir=options.workdir, manager=options.manager)
# BSE calculation with model dielectric function.
multi = abilab.bse_with_mdf_inputs(
def make_eos_flow(structure_file=None):
"""
Build and return a Flow to compute the equation of state
of an isotropic material for different k-point samplings.
"""
scale_volumes = np.arange(94, 108, 2) / 100.
if structure_file is None:
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
else:
structure = abilab.Structure.from_file(structure_file)
multi = abilab.MultiDataset(structure=structure, pseudos=get_pseudos(structure), ndtset=len(scale_volumes))
# Global variables
multi.set_vars(
ecut=16,
tolvrs=1e-16
)
multi.set_kmesh(ngkpt=[4, 4, 4], shiftk=[[0.5, 0.5, 0.5], [0.5, 0.0, 0.0], [0.0, 0.5, 0.0], [0.0, 0.0, 0.5]])
for idt, scal_vol in enumerate(scale_volumes):
new_lattice = structure.lattice.scale(structure.volume*scal_vol)
def make_inputs(paw=False):
# Crystalline silicon
# Calculation of the GW correction to the direct band gap in Gamma
# Dataset 1: ground state calculation
# Dataset 2: NSCF calculation
# Dataset 3: calculation of the screening
# Dataset 4: calculation of the Self-Energy matrix elements (GW corrections)
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
pseudos = abidata.pseudos("14si.pspnc") if not paw else abidata.pseudos("Si.GGA_PBE-JTH-paw.xml")
multi = abilab.MultiDataset(structure, pseudos=pseudos, ndtset=4)
ecut = 24
multi.set_vars(
ecut=ecut,
pawecutdg=ecut*4 if paw else None,
timopt=-1,
istwfk="*1",
paral_kgb=0,
)
gs, nscf, scr, sigma = multi.split_datasets()
# This grid is the most economical, but does not contain the Gamma point.
def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")
if not options.workdir:
options.workdir = os.path.basename(__file__).replace(".py", "").replace("run_", "flow_")
# Initialize pseudos and Structure.
pseudos = abidata.pseudos("14si.pspnc")
structure = abilab.Structure.from_file(abidata.cif_file("si.cif"))
kppa = scf_kppa = 1
nscf_nband = 6
nscf_ngkpt = [4, 4, 4]
nscf_shiftk = [0.1, 0.2, 0.3]
bs_loband = 2
bs_nband = nscf_nband
mbpt_sciss = 0.7 * abilab.units.eV_to_Ha
mdf_epsinf = 12
ecuteps = 2
ecut = 12
flow = flowtk.Flow(workdir=options.workdir, manager=options.manager)
# BSE calculation with model dielectric function.
multi = abilab.bse_with_mdf_inputs(