本文整理汇总了Python中abipy.core.structure.Structure类的典型用法代码示例。如果您正苦于以下问题:Python Structure类的具体用法?Python Structure怎么用?Python Structure使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Structure类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: build_structure
def build_structure(self, ref="ae"):
"""
Returns the crystalline structure associated to this entry.
Use the optimized lattice parameters obtained from reference ref.
Returns None if no lattice parameter is available.
"""
# Get structure type and lattice parameters
stype, a = self.struct_type, getattr(self, ref)
# Handle missing value.
if a is None:
return None
if stype == "bcc":
return Structure.bcc(a, species=[self.symbol])
elif stype == "fcc":
return Structure.fcc(a, species=[self.symbol])
elif stype == "rocksalt":
return Structure.rocksalt(a, self.species)
elif stype == "ABO3":
return Structure.ABO3(a, self.species)
elif stype == "hH":
raise NotImplementedError()
#return Structure.hH(a, sites)
raise ValueError("Don't know how to construct %s structure" % stype)
示例2: __init__
def __init__(self, a_guess, struct_type, pseudo, ecut_list=None, pawecutdg=None, ngkpt=(8, 8, 8),
spin_mode="unpolarized", include_soc=False, tolvrs=1.e-10, smearing="fermi_dirac:0.001 Ha",
ecutsm=0.05, chksymbreak=0, workdir=None, manager=None):
"""
Build a :class:`Work` for the computation of the relaxed lattice parameter.
Args:
structure_type: fcc, bcc
pseudo: :class:`Pseudo` object.
ecut_list: Cutoff energy in Hartree
ngkpt: MP divisions.
spin_mode: Spin polarization mode.
toldfe: Tolerance on the energy (Ha)
smearing: Smearing technique.
workdir: String specifing the working directory.
manager: :class:`TaskManager` responsible for the submission of the tasks.
"""
super(RelaxWithGbrvParamsWork, self).__init__(workdir=workdir, manager=manager)
self_pseudo = pseudo
self.include_soc = include_soc
self.struct_type = struct_type
if struct_type == "bcc":
structure = Structure.bcc(a_guess, species=[pseudo.symbol])
elif struct_type == "fcc":
structure = Structure.fcc(a_guess, species=[pseudo.symbol])
# Set extra_abivars.
extra_abivars = dict(
pawecutdg=pawecutdg,
tolvrs=tolvrs,
prtwf=-1,
fband=3.0,
nstep=100,
ntime=50,
ecutsm=ecutsm,
dilatmx=1.1,
)
self.ecut_list = ecut_list
smearing = Smearing.as_smearing(smearing)
# Kpoint sampling: shiftk depends on struct_type
shiftk = {"fcc": [0, 0, 0], "bcc": [0.5, 0.5, 0.5]}.get(struct_type)
spin_mode = SpinMode.as_spinmode(spin_mode)
ksampling = KSampling.monkhorst(ngkpt, chksymbreak=chksymbreak, shiftk=shiftk,
use_time_reversal=spin_mode.nspinor==1)
relax_algo = RelaxationMethod.atoms_and_cell()
inp = abilab.AbinitInput(structure, pseudo)
inp.add_abiobjects(ksampling, relax_algo, spin_mode, smearing)
inp.set_vars(extra_abivars)
# Register structure relaxation task.
for ecut in self.ecut_list:
self.relax_task = self.register_relax_task(inp.new_with_vars(ecut=ecut))
示例3: structure
def structure(self):
structure = Structure.from_abivars(**self.header)
# Add Spacegroup (needed in guessed_ngkpt)
# FIXME: has_timerev is always True
spgid, has_timerev, h = 0, True, self.header
structure.set_spacegroup(SpaceGroup(spgid, h.symrel, h.tnons, h.symafm, has_timerev))
return structure
示例4: structure
def structure(self):
kwargs = {}
if "angdeg" in self:
assert "rprim" not in self
raise NotImplementedError("angdeg")
#kwargs["angdeg"] =
else:
# Handle structure specified with rprim.
kwargs["rprim"] = str2array_bohr(self.get("rprim", "1.0 0 0 0 1 0 0 0 1"))
# Default value for acell
acell = str2array_bohr(self.get("acell", "1.0 1.0 1.0"))
check = {k: 1 for k in ("xred", "xcart", "xangst") if k in self}
if len(check) != 1:
raise ValueError("Atomic positions are not specified correctly:\n%s" % str(check))
if "xred" in self:
kwargs["xred"] = np.fromstring(self["xred"], sep=" ")
elif "xcart" in self:
kwargs["xcart"] = str2array_bohr(self["xcart"])
elif "xangst" in self:
kwargs["xangst"] = np.fromstring(self["xangst"], sep=" ")
return Structure.from_abivars(
acell=acell,
znucl=str2array(self["znucl"]),
typat=str2array(self["typat"]),
**kwargs
)
示例5: __init__
def __init__(self, nspinor, nsppol, nspden, datar, structure, iorder="c"):
"""
Args:
nspinor: Number of spinorial components.
nsppol: Number of spins.
nspden: Number of spin density components.
datar: [nspden, nx, ny, nz] array with the scalar field in real space.
See also ``read_denpot``.
structure: |Structure| object describing the crystalline structure.
iorder: Order of the array. "c" for C ordering, "f" for Fortran ordering.
"""
self.nspinor, self.nsppol, self.nspden = nspinor, nsppol, nspden
# Convert to Abipy Structure.
self._structure = Structure.as_structure(structure)
iorder = iorder.lower()
assert iorder in ["f", "c"]
if iorder == "f":
# (z,x,y) --> (x,y,z)
datar = transpose_last3dims(datar)
# Init Mesh3D
mesh_shape = datar.shape[-3:]
self._mesh = Mesh3D(mesh_shape, structure.lattice.matrix)
# Make sure we have the correct shape.
self._datar = np.reshape(datar, (nspden,) + self.mesh.shape)
示例6: abifile_subclass_from_filename
def abifile_subclass_from_filename(filename):
from abipy.iotools.files import AbinitFile, AbinitLogFile, AbinitOutputFile
from abipy.electrons import SIGRES_File, GSR_File, MDF_File
from abipy.waves import WFK_File
#from abipy.phonons import PHDOS_File, PHBST_File
ext2ncfile = {
"SIGRES.nc": SIGRES_File,
"WFK-etsf.nc": WFK_File,
"MDF.nc" : MDF_File,
"GSR.nc": GSR_File
#"PHDOS.nc": PHDOS_File,
#"PHBST.nc": PHBST_File,
}
#if filename.endswith(".abi"):
# return AbinitInputFile
if filename.endswith(".abo"):
return AbinitOutputFile
if filename.endswith(".log"):
return AbinitLogFile
# CIF files.
if filename.endswith(".cif"):
from abipy.core.structure import Structure
return Structure.from_file(filename)
ext = filename.split("_")[-1]
try:
return ext2ncfile[ext]
except KeyError:
raise KeyError("No class has been registered for extension %s" % ext)
示例7: read_all_structures
def read_all_structures(self):
"""Return the list of structures at the different iteration steps."""
rprimd_list = self.read_value("rprimd")
xred_list = self.read_value("xred")
# Alchemical mixing is not supported.
num_pseudos = self.read_dimvalue("npsp")
ntypat = self.read_dimvalue("ntypat")
if num_pseudos != ntypat:
raise NotImplementedError("Alchemical mixing is not supported, num_pseudos != ntypat")
znucl, typat = self.read_value("znucl"), self.read_value("typat").astype(int)
#print(znucl.dtype, typat)
cart_forces_step = self.read_cart_forces(unit="eV ang^-1")
structures = []
#print("typat", type(typat))
for step in range(self.num_steps):
s = Structure.from_abivars(
xred=xred_list[step],
rprim=rprimd_list[step],
acell=3 * [1.0],
# FIXME ntypat, typat, znucl are missing!
znucl=znucl,
typat=typat,
)
s.add_site_property("cartesian_forces", cart_forces_step[step])
structures.append(s)
return structures
示例8: ion_ioncell_relax_and_ebands_input
def ion_ioncell_relax_and_ebands_input(structure, pseudos,
kppa=None, nband=None,
ecut=None, pawecutdg=None, accuracy="normal", spin_mode="polarized",
smearing="fermi_dirac:0.1 eV", charge=0.0, scf_algorithm=None):
"""
Returns a :class:`AbinitInput` for a structural relaxation. The first dataset optmizes the
atomic positions at fixed unit cell. The second datasets optimizes both ions and unit cell parameters.
Args:
structure: :class:`Structure` object.
pseudos: List of filenames or list of :class:`Pseudo` objects or :class:`PseudoTable` object.
kppa: Defines the sampling used for the Brillouin zone.
nband: Number of bands included in the SCF run.
accuracy: Accuracy of the calculation.
spin_mode: Spin polarization.
smearing: Smearing technique.
charge: Electronic charge added to the unit cell.
scf_algorithm: Algorithm used for solving of the SCF cycle.
"""
structure = Structure.as_structure(structure)
relax_multi = ion_ioncell_relax_input(structure, pseudos,
kppa=kppa, nband=nband,
ecut=ecut, pawecutdg=pawecutdg, accuracy=accuracy, spin_mode=spin_mode,
smearing=smearing, charge=charge, scf_algorithm=scf_algorithm)
ebands_multi = ebands_input(structure, pseudos,
kppa=kppa, nscf_nband=None, ndivsm=15,
ecut=ecut, pawecutdg=pawecutdg, scf_nband=None, accuracy=accuracy, spin_mode=spin_mode,
smearing=smearing, charge=charge, scf_algorithm=scf_algorithm, dos_kppa=None)
return relax_multi + ebands_multi
示例9: set_structure
def set_structure(self, structure):
structure = Structure.as_structure(structure)
self._structure = structure
if structure is None: return
self.set_vars(**structure.to_abivars())
示例10: scf_input
def scf_input(structure, pseudos, kppa=None, ecut=None, pawecutdg=None, nband=None, accuracy="normal",
spin_mode="polarized", smearing="fermi_dirac:0.1 eV", charge=0.0, scf_algorithm=None,
shift_mode="Monkhorst-Pack"):
structure = Structure.as_structure(structure)
abinit_input = AbinitInput(structure, pseudos)
# Set the cutoff energies.
abinit_input.set_vars(_find_ecut_pawecutdg(ecut, pawecutdg, abinit_input.pseudos))
# SCF calculation.
kppa = _DEFAULTS.get("kppa") if kppa is None else kppa
shifts = (0.5, 0.5, 0.5) if shift_mode[0].lower() == "m" else (0.0, 0.0, 0.0)
scf_ksampling = aobj.KSampling.automatic_density(structure, kppa, chksymbreak=0, shifts=shifts)
scf_electrons = aobj.Electrons(spin_mode=spin_mode, smearing=smearing, algorithm=scf_algorithm,
charge=charge, nband=nband, fband=None)
if spin_mode=="polarized":
abinit_input.set_autospinat()
if scf_electrons.nband is None:
scf_electrons.nband = _find_scf_nband(structure, abinit_input.pseudos, scf_electrons,abinit_input.get('spinat', None))
abinit_input.set_vars(scf_ksampling.to_abivars())
abinit_input.set_vars(scf_electrons.to_abivars())
abinit_input.set_vars(_stopping_criterion("scf", accuracy))
return abinit_input
示例11: work_for_pseudo
def work_for_pseudo(self, pseudo, accuracy="normal", kppa=6750, ecut=None, pawecutdg=None,
toldfe=1.e-9, smearing="fermi_dirac:0.1 eV", workdir=None, manager=None, **kwargs):
"""
Returns a :class:`Work` object from the given pseudopotential.
Args:
kwargs: Extra variables passed to Abinit.
.. note::
0.001 Rydberg is the value used with WIEN2K
"""
pseudo = Pseudo.as_pseudo(pseudo)
symbol = pseudo.symbol
if pseudo.ispaw and pawecutdg is None:
raise ValueError("pawecutdg must be specified for PAW calculations.")
try:
cif_path = self.get_cif_path(symbol)
except Exception as exc:
raise self.Error(str(exc))
# Include spin polarization for O, Cr and Mn (antiferromagnetic)
# and Fe, Co, and Ni (ferromagnetic).
# antiferromagnetic Cr, O
# ferrimagnetic Mn
spin_mode = "unpolarized"
if symbol in ["Fe", "Co", "Ni"]:
spin_mode = "polarized"
if symbol == "Fe":
kwargs['spinat'] = 2 * [(0, 0, 2.3)]
if symbol == "Co":
kwargs['spinat'] = 2 * [(0, 0, 1.2)]
if symbol == "Ni":
kwargs['spinat'] = 4 * [(0, 0, 0.6)]
if symbol in ["O", "Cr", "Mn"]:
spin_mode = "afm"
if symbol == 'O':
kwargs['spinat'] = [(0, 0, 1.5), (0, 0, 1.5), (0, 0, -1.5), (0, 0, -1.5)]
elif symbol == 'Cr':
kwargs['spinat'] = [(0, 0, 1.5), (0, 0, -1.5)]
elif symbol == 'Mn':
kwargs['spinat'] = [(0, 0, 2.0), (0, 0, 1.9), (0, 0, -2.0), (0, 0, -1.9)]
# DO NOT CHANGE THE STRUCTURE REPORTED IN THE CIF FILE.
structure = Structure.from_file(cif_path, primitive=False)
# Magnetic elements:
# Start from previous SCF run to avoid getting trapped in local minima
connect = symbol in ("Fe", "Co", "Ni", "Cr", "Mn", "O", "Zn", "Cu")
return DeltaFactorWork(
structure, pseudo, kppa, connect,
spin_mode=spin_mode, toldfe=toldfe, smearing=smearing,
accuracy=accuracy, ecut=ecut, pawecutdg=pawecutdg, ecutsm=0.5,
workdir=workdir, manager=manager, **kwargs)
示例12: work_for_pseudo
def work_for_pseudo(self, pseudo, kppa=6750, ecut=None, pawecutdg=None,
toldfe=1.e-9, smearing="fermi_dirac:0.1 eV", include_soc=False,
workdir=None, manager=None, **kwargs):
"""
Returns a :class:`Work` object from the given pseudopotential.
Args:
pseudo: :class:`Pseudo` object.
kppa: kpoint per reciprocal atom
ecut: Cutoff energy in Hartree
pawecutdg: Cutoff energy of the fine grid (PAW only)
toldfe: Tolerance on the energy (Ha)
smearing: Smearing technique.
include_soc: True if pseudo has SO contributions and calculation should be done with nspinor=2
workdir: String specifing the working directory.
manager: :class:`TaskManager` responsible for the submission of the tasks.
kwargs: Extra variables passed to Abinit.
.. note::
0.001 Rydberg is the value used with WIEN2K
"""
symbol = pseudo.symbol
if pseudo.ispaw and pawecutdg is None:
raise ValueError("pawecutdg must be specified for PAW calculations.")
if pseudo.xc != self._dfdb.xc:
raise ValueError(
"Pseudo xc differs from the XC used to instantiate the factory\n"
"Pseudo: %s, Database: %s" % (pseudo.xc, self._dfdb.xc))
try:
cif_path = self.get_cif_path(symbol)
except Exception as exc:
raise self.Error(str(exc))
# WARNING: DO NOT CHANGE THE STRUCTURE REPORTED IN THE CIF FILE.
structure = Structure.from_file(cif_path, primitive=False)
# Include spin polarization and initial spinat for particular elements
# TODO: Not sure spinat is ok if LDA.
kwargs["spinat"], spin_mode = self._dfdb.spinat_spinmode_for_symbol(symbol)
if include_soc: spin_mode = "spinor"
# This is needed for LDA
if symbol in ("O", "Mn"):
print("Got Oxygen or Mn")
spin_mode = "polarized"
# Magnetic elements:
# Start from previous SCF run to avoid getting trapped in local minima
connect = symbol in ("Fe", "Co", "Ni", "Cr", "Mn", "O", "Zn", "Cu")
return DeltaFactorWork(
structure, pseudo, kppa, connect,
spin_mode=spin_mode, include_soc=include_soc, toldfe=toldfe, smearing=smearing,
ecut=ecut, pawecutdg=pawecutdg, ecutsm=0.5,
workdir=workdir, manager=manager, **kwargs)
示例13: structure
def structure(self):
# Get lattice.
kwargs = {}
if "angdeg" in self:
if "rprim" in self:
raise ValueError("rprim and angdeg cannot be used together!")
angdeg = str2array(self["angdeg"])
angdeg.shape = (3)
kwargs["angdeg"] = angdeg
else:
# Handle structure specified with rprim.
kwargs["rprim"] = str2array_bohr(self.get("rprim", "1.0 0 0 0 1 0 0 0 1"))
# Default value for acell.
acell = str2array_bohr(self.get("acell", "1.0 1.0 1.0"))
# Get important dimensions.
ntypat = int(self.get("ntypat", 1))
natom = int(self.get("natom", 1))
# znucl(npsp)
znucl = self["znucl"]
if znucl.startswith("*"):
i = znucl.find("*")
znucl_size = natom if "npsp" not in self else int(self["npsp"])
znucl = znucl_size * [float(znucl[i+1:])]
else:
znucl = str2array(self["znucl"])
# v67mbpt/Input/t12.in
typat = self["typat"]
if typat.startswith("*"):
i = typat.find("*")
typat = np.array(natom * [int(typat[i+1:])], dtype=int)
else:
typat = str2array(self["typat"], dtype=int)
# Extract atomic positions.
# Select first natom entries (needed if multidatasets with different natom)
# # v3/Input/t05.in
typat = typat[:natom]
for k in ("xred", "xcart", "xangst"):
toarray = str2array_bohr if k == "xcart" else str2array
if k in self:
arr = np.reshape(toarray(self[k]), (-1, 3))
kwargs[k] = arr[:natom]
break
else:
raise ValueError("xred|xcart|xangst must be given in input")
try:
return Structure.from_abivars(acell=acell, znucl=znucl, typat=typat, **kwargs)
except Exception as exc:
print("Wrong inputs passed to Structure.from_abivars:")
print("acell:", acell, "znucl:", znucl, "typat:", typat, "kwargs:", kwargs, sep="\n")
raise exc
示例14: __init__
def __init__(self, entries):
self.entries = entries
from abipy.core.structure import Structure
for e in entries:
e.structure = Structure.as_structure(e.structure)
self.structures = [e.structure for e in entries]
self.mpids = [e.entry_id for e in entries]
# Create phase diagram.
from pymatgen.analysis.phase_diagram import PhaseDiagram
self.phasediagram = PhaseDiagram(self.entries)
示例15: ion_ioncell_relax_input
def ion_ioncell_relax_input(structure, pseudos,
kppa=None, nband=None,
ecut=None, pawecutdg=None, accuracy="normal", spin_mode="polarized",
smearing="fermi_dirac:0.1 eV", charge=0.0, scf_algorithm=None):
"""
Returns a :class:`AbinitInput` for a structural relaxation. The first dataset optmizes the
atomic positions at fixed unit cell. The second datasets optimizes both ions and unit cell parameters.
Args:
structure: :class:`Structure` object.
pseudos: List of filenames or list of :class:`Pseudo` objects or :class:`PseudoTable` object.
kppa: Defines the sampling used for the Brillouin zone.
nband: Number of bands included in the SCF run.
accuracy: Accuracy of the calculation.
spin_mode: Spin polarization.
smearing: Smearing technique.
charge: Electronic charge added to the unit cell.
scf_algorithm: Algorithm used for solving of the SCF cycle.
"""
structure = Structure.as_structure(structure)
multi = MultiDataset(structure, pseudos, ndtset=2)
# Set the cutoff energies.
multi.set_vars(_find_ecut_pawecutdg(ecut, pawecutdg, multi.pseudos))
kppa = _DEFAULTS.get("kppa") if kppa is None else kppa
ksampling = aobj.KSampling.automatic_density(structure, kppa, chksymbreak=0)
electrons = aobj.Electrons(spin_mode=spin_mode, smearing=smearing, algorithm=scf_algorithm,
charge=charge, nband=nband, fband=None)
if spin_mode=="polarized":
spinat_dict = multi[0].set_autospinat()
multi[1].set_vars(spinat_dict)
if electrons.nband is None:
electrons.nband = _find_scf_nband(structure, multi.pseudos, electrons, multi[0].get('spinat', None))
ion_relax = aobj.RelaxationMethod.atoms_only(atoms_constraints=None)
ioncell_relax = aobj.RelaxationMethod.atoms_and_cell(atoms_constraints=None)
multi.set_vars(electrons.to_abivars())
multi.set_vars(ksampling.to_abivars())
multi[0].set_vars(ion_relax.to_abivars())
multi[0].set_vars(_stopping_criterion("relax", accuracy))
multi[1].set_vars(ioncell_relax.to_abivars())
multi[1].set_vars(_stopping_criterion("relax", accuracy))
return multi