From fc9274a7dc6d7c40a0558fb7ac0e837723d60f48 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Fri, 17 Jan 2025 14:59:31 -0800 Subject: [PATCH 01/15] Add pydantic models for pymatgen objects, clean up TaskDoc typing / doc models --- emmet-core/emmet/core/tasks.py | 348 ++++++++++++++-------- emmet-core/emmet/core/vasp/calculation.py | 122 ++++---- 2 files changed, 294 insertions(+), 176 deletions(-) diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index aab0c6cccf..bfffbbce67 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -1,11 +1,12 @@ # mypy: ignore-errors +from __future__ import annotations import logging import re from collections import OrderedDict from datetime import datetime from pathlib import Path -from typing import Any, Dict, List, Mapping, Optional, Tuple, Type, TypeVar, Union +from typing import Any, Optional, Type, TypeVar, Union import numpy as np from monty.json import MontyDecoder @@ -51,7 +52,7 @@ class Potcar(BaseModel): functional: Optional[str] = Field( None, description="Functional type use in the calculation." ) - symbols: Optional[List[str]] = Field( + symbols: Optional[list[str]] = Field( None, description="List of VASP potcar symbols used in the calculation." ) @@ -62,7 +63,7 @@ class OrigInputs(CalculationInput): description="Pymatgen object representing the POSCAR file.", ) - potcar: Optional[Union[Potcar, VaspPotcar, List[Any]]] = Field( + potcar: Optional[Union[Potcar, VaspPotcar, list[Any]]] = Field( None, description="Pymatgen object representing the POTCAR file.", ) @@ -98,10 +99,10 @@ class OutputDoc(BaseModel): density: Optional[float] = Field(None, description="Density of in units of g/cc.") energy: Optional[float] = Field(None, description="Total Energy in units of eV.") - forces: Optional[List[List[float]]] = Field( + forces: Optional[list[list[float]]] = Field( None, description="The force on each atom in units of eV/A." ) - stress: Optional[List[List[float]]] = Field( + stress: Optional[list[list[float]]] = Field( None, description="The stress on the cell in units of kB." ) energy_per_atom: Optional[float] = Field( @@ -187,13 +188,13 @@ class InputDoc(CalculationInput): is_lasph: Optional[bool] = Field( None, description="Whether the calculation was run with aspherical corrections" ) - magnetic_moments: Optional[List[float]] = Field( + magnetic_moments: Optional[list[float]] = Field( None, description="Magnetic moments for each atom" ) @field_validator("parameters", mode="after") @classmethod - def parameter_keys_should_not_contain_spaces(cls, parameters: Optional[Dict]): + def parameter_keys_should_not_contain_spaces(cls, parameters: Optional[dict]): # A change in VASP introduced whitespace into some parameters, # for example `PE` was observed in # VASP 6.4.3. This will lead to an incorrect return value from RunType. @@ -233,7 +234,7 @@ def from_vasp_calc_doc(cls, calc_doc: Calculation) -> "InputDoc": class CustodianDoc(BaseModel): - corrections: Optional[List[Any]] = Field( + corrections: Optional[list[Any]] = Field( None, title="Custodian Corrections", description="List of custodian correction data for calculation.", @@ -262,13 +263,13 @@ class AnalysisDoc(BaseModel): description="Maximum force on any atom at the end of the calculation.", ) - warnings: Optional[List[str]] = Field( + warnings: Optional[list[str]] = Field( None, title="Calculation Warnings", description="Warnings issued after analysis.", ) - errors: Optional[List[str]] = Field( + errors: Optional[list[str]] = Field( None, title="Calculation Errors", description="Errors issued after analysis.", @@ -277,7 +278,7 @@ class AnalysisDoc(BaseModel): @classmethod def from_vasp_calc_docs( cls, - calcs_reversed: List[Calculation], + calcs_reversed: list[Calculation], volume_change_warning_tol: float = 0.2, ) -> "AnalysisDoc": """ @@ -324,121 +325,150 @@ def from_vasp_calc_docs( max_force=max_force, warnings=warnings, errors=errors, - ) + ) + +class EmmetComputedEntry(BaseModel): + """Fixed-schema version of pymatgen ComputedEntry.""" + + energy : float + composition: dict[str,float] + entry_id : MPID | None = None + correction : float | None = None + energy_adjustments : list[float] | None = None + potcar_spec : list[PotcarSpec] | None = None + run_type : RunType | None = None + is_hubbard : bool = False + hubbards : dict[str,float] | None = None + oxide_type : str | None = None + aspherical : bool = False + last_updated : datetime | None = None + + def get_computed_entry(self) -> ComputedEntry: + """Get pymatgen computed entry.""" + return ComputedEntry.from_dict({ + "correction": self.correction, + "entry_id": self.entry_id, + "composition": self.composition, + "energy": self.energy, + "parameters": { + "potcar_spec": ( + [ps.model_dump() for ps in self.potcar_spec] if self.potcar_spec is not None + else [] + ), + "run_type": str(self.run_type), + "is_hubbard": self.is_hubbard, + "hubbards": self.hubbards, + }, + "data": { + "oxide_type": self.oxide_type, + "aspherical": self.aspherical, + "last_updated": str(self.last_updated), + }, + }) -class TaskDoc(StructureMetadata, extra="allow"): - """Calculation-level details about VASP calculations that power Materials Project.""" - tags: Union[List[str], None] = Field( - [], title="tag", description="Metadata tagged to a given task." +class DbTaskDoc(StructureMetadata): + """Calculation-level details about VASP calculations that power Materials Project. + + This schema is intended to be fixed for database best practices. + """ + + tags: list[str] | None = Field( + None, title="tag", description="Metadata tagged to a given task." ) - dir_name: Optional[str] = Field( + dir_name: str | None = Field( None, description="The directory for this VASP task" ) - state: Optional[TaskState] = Field(None, description="State of this calculation") - - calcs_reversed: Optional[List[Calculation]] = Field( + calcs_reversed: list[Calculation] | None = Field( None, title="Calcs reversed data", description="Detailed data for each VASP calculation contributing to the task document.", ) - structure: Optional[Structure] = Field( + structure: Structure | None = Field( None, description="Final output structure from the task" ) - task_type: Optional[Union[TaskType, CalcType]] = Field( + task_type: TaskType | None = Field( None, description="The type of calculation." ) - run_type: Optional[RunType] = Field( + run_type: RunType | None = Field( None, description="The functional used in the calculation." ) - calc_type: Optional[CalcType] = Field( + calc_type: CalcType | None = Field( None, description="The functional and task type used in the calculation." ) - task_id: Optional[Union[MPID, str]] = Field( + task_id: MPID | None = Field( None, description="The (task) ID of this calculation, used as a universal reference across property documents." "This comes in the form: mp-******.", ) - orig_inputs: Optional[OrigInputs] = Field( + orig_inputs: OrigInputs | None = Field( None, description="The exact set of input parameters used to generate the current task document.", ) - input: Optional[InputDoc] = Field( + input: InputDoc | None = Field( None, description="The input structure used to generate the current task document.", ) - output: Optional[OutputDoc] = Field( + output: OutputDoc | None = Field( None, description="The exact set of output parameters used to generate the current task document.", ) - included_objects: Optional[List[VaspObject]] = Field( + included_objects: list[VaspObject] | None = Field( None, description="List of VASP objects included with this task document" ) - vasp_objects: Optional[Dict[VaspObject, Any]] = Field( - None, description="Vasp objects associated with this task" + vasp_objects: dict[VaspObject, Any] | None = Field( + None, description="VASP objects associated with this task" ) - entry: Optional[ComputedEntry] = Field( - None, description="The ComputedEntry from the task doc" + entry: EmmetComputedEntry | None = Field( + None, description="The EmmetComputedEntry from the task doc" ) - task_label: Optional[str] = Field(None, description="A description of the task") - author: Optional[str] = Field( - None, description="Author extracted from transformations" - ) - icsd_id: Optional[Union[str, int]] = Field( + icsd_id: int | None = Field( None, description="Inorganic Crystal Structure Database id of the structure" ) - transformations: Optional[Any] = Field( + transformations: Any | None = Field( None, description="Information on the structural transformations, parsed from a " "transformations.json file", ) - additional_json: Optional[Dict[str, Any]] = Field( - None, description="Additional json loaded from the calculation directory" - ) - custodian: Optional[List[CustodianDoc]] = Field( + custodian: list[CustodianDoc] | None = Field( None, title="Calcs reversed data", description="Detailed custodian data for each VASP calculation contributing to the task document.", ) - analysis: Optional[AnalysisDoc] = Field( + analysis: AnalysisDoc | None = Field( None, title="Calculation Analysis", description="Some analysis of calculation data after collection.", ) - last_updated: Optional[datetime] = Field( + last_updated: datetime = Field( utcnow(), description="Timestamp for the most recent calculation for this task document", ) - completed_at: Optional[datetime] = Field( + completed_at: datetime | None = Field( None, description="Timestamp for when this task was completed" ) - batch_id: Optional[str] = Field( + batch_id: str | None = Field( None, description="Identifier for this calculation; should provide rough information about the calculation origin and purpose.", ) - run_stats: Optional[Mapping[str, RunStatistics]] = Field( - None, - description="Summary of runtime statistics for each calculation in this task", - ) - # Note that private fields are needed because TaskDoc permits extra info # added to the model, unlike TaskDocument. Because of this, when pydantic looks up # attrs on the model, it searches for them in the model extra dict first, and if it @@ -478,6 +508,15 @@ def model_post_init(self, __context: Any) -> None: # TODO: remove after imposing TaskDoc schema on older tasks in collection if self.structure is None: self.structure = calcs_reversed[0].output.structure + + # Set the computed entry if not set + if ( + not self.entry + and self.calcs_reversed + and getattr(self.calcs_reversed[0].output, "structure", None) + ): + use_pymatgen_rep = getattr(self, "_use_pymatgen_rep", False) + self.entry = self.get_entry(self.calcs_reversed, self.task_id, use_pymatgen_rep=use_pymatgen_rep) # Make sure that the datetime field is properly formatted # (Unclear when this is not the case, please leave comment if observed) @@ -499,23 +538,12 @@ def _validate_batch_id(cls, v) -> str: ) return v - @model_validator(mode="after") - def set_entry(self) -> datetime: - if ( - not self.entry - and self.calcs_reversed - and getattr(self.calcs_reversed[0].output, "structure", None) - ): - self.entry = self.get_entry(self.calcs_reversed, self.task_id) - return self - @classmethod def from_directory( cls: Type[_T], dir_name: Union[Path, str], - volumetric_files: Tuple[str, ...] = _VOLUMETRIC_FILES, - store_additional_json: bool = True, - additional_fields: Optional[Dict[str, Any]] = None, + volumetric_files: tuple[str, ...] = _VOLUMETRIC_FILES, + additional_fields: Optional[dict[str, Any]] = None, volume_change_warning_tol: float = 0.2, task_names: Optional[list[str]] = None, **vasp_calculation_kwargs, @@ -527,8 +555,6 @@ def from_directory( ---------- dir_name The path to the folder containing the calculation outputs. - store_additional_json - Whether to store additional json files found in the calculation directory. volumetric_files Volumetric files to search for. additional_fields @@ -545,12 +571,11 @@ def from_directory( Returns ------- - TaskDoc - A task document for the calculation. + DbTaskDoc + A fixed-schema task document for the calculation. """ logger.info(f"Getting task doc in: {dir_name}") - additional_fields = {} if additional_fields is None else additional_fields dir_name = Path(dir_name) task_files = _find_vasp_files( dir_name, volumetric_files=volumetric_files, task_names=task_names @@ -580,10 +605,6 @@ def from_directory( custodian = _parse_custodian(dir_name) orig_inputs = _parse_orig_inputs(dir_name) - additional_json = None - if store_additional_json: - additional_json = _parse_additional_json(dir_name) - dir_name = get_uri(dir_name) # convert to full uri path # only store objects from last calculation @@ -603,7 +624,6 @@ def from_directory( transformations=transformations, custodian=custodian, orig_inputs=orig_inputs, - additional_json=additional_json, icsd_id=icsd_id, tags=tags, author=author, @@ -619,13 +639,16 @@ def from_directory( included_objects=included_objects, task_type=calcs_reversed[0].task_type, ) - return doc.model_copy(update=additional_fields) + + if additional_fields: + doc = doc.model_copy(update=additional_fields) + return doc @classmethod def from_vasprun( cls: Type[_T], path: Union[str, Path], - additional_fields: Optional[Dict[str, Any]] = None, + additional_fields: Optional[dict[str, Any]] = None, volume_change_warning_tol: float = 0.2, **vasp_calculation_kwargs, ) -> _T: @@ -641,7 +664,7 @@ def from_vasprun( ---------- path The path to the vasprun.xml. - additional_fields: Dict[str, Any] = None, + additional_fields: dict[str, Any] = None, volume_change_warning_tol Maximum volume change allowed in VASP relaxations before the calculation is tagged with a warning. @@ -697,8 +720,10 @@ def from_vasprun( @staticmethod def get_entry( - calcs_reversed: List[Calculation], task_id: Optional[Union[MPID, str]] = None - ) -> ComputedEntry: + calcs_reversed: list[Calculation], + task_id: Optional[Union[MPID, str]] = None, + use_pymatgen_rep : bool = False + ) -> EmmetComputedEntry | ComputedEntry: """ Get a computed entry from a list of VASP calculation documents. @@ -708,37 +733,29 @@ def get_entry( A list of VASP calculation documents in a reverse order. task_id The job identifier. + use_pymatgen_rep + Whether to use the emmet or pymatgen model of a computed entry. Returns ------- ComputedEntry A computed entry. """ - entry_dict = { - "correction": 0.0, - "entry_id": task_id, - "composition": calcs_reversed[0].output.structure.composition, - "energy": calcs_reversed[0].output.energy, - "parameters": { - # Cannot be PotcarSpec document, pymatgen expects a dict - # Note that `potcar_spec` is optional - "potcar_spec": ( - [dict(d) for d in calcs_reversed[0].input.potcar_spec] - if calcs_reversed[0].input.potcar_spec - else [] - ), - # Required to be compatible with MontyEncoder for the ComputedEntry - "run_type": str(calcs_reversed[0].run_type), - "is_hubbard": calcs_reversed[0].input.is_hubbard, - "hubbards": calcs_reversed[0].input.hubbards, - }, - "data": { - "oxide_type": oxide_type(calcs_reversed[0].output.structure), - "aspherical": calcs_reversed[0].input.parameters.get("LASPH", False), - "last_updated": str(utcnow()), - }, - } - return ComputedEntry.from_dict(entry_dict) + inp_kwargs = {k : getattr(calcs_reversed[0].input,k,None) for k in ("potcar_spec","is_hubbard","hubbards")} + ce = EmmetComputedEntry( + energy = calcs_reversed[0].output.energy, + composition=calcs_reversed[0].output.structure.composition.as_dict(), + entry_id=task_id, + correction=0., + run_type=calcs_reversed[0].run_type, + oxide_type=oxide_type(calcs_reversed[0].output.structure), + aspherical=calcs_reversed[0].input.parameters.get("LASPH", False), + last_updated=utcnow(), + **inp_kwargs + ) + if use_pymatgen_rep: + return ce.get_computed_entry() + return ce @staticmethod def _get_calc_type( @@ -783,18 +800,101 @@ def structure_entry(self) -> ComputedStructureEntry: ComputedStructureEntry The TaskDoc.entry with corresponding TaskDoc.structure added. """ + ce = self.entry.get_computed_entry() return ComputedStructureEntry( structure=self.structure, - energy=self.entry.energy, - correction=self.entry.correction, - composition=self.entry.composition, - energy_adjustments=self.entry.energy_adjustments, - parameters=self.entry.parameters, - data=self.entry.data, - entry_id=self.entry.entry_id, + energy=ce.energy, + correction=ce.correction, + composition=ce.composition, + energy_adjustments=ce.energy_adjustments, + parameters=ce.parameters, + data=ce.data, + entry_id=ce.entry_id, ) +class TaskDoc(DbTaskDoc, extra="allow"): + """Calculation-level details about VASP calculations that power Materials Project.""" + + state: TaskState | None = Field(None, description="State of this calculation") + task_label: str | None = Field(None, description="A description of the task") + author: str | None = Field( + None, description="Author extracted from transformations" + ) + + additional_json: Optional[dict[str, Any]] = Field( + None, description="Additional json loaded from the calculation directory" + ) + + run_stats: dict[str, RunStatistics] | None = Field( + None, + description="Summary of runtime statistics for each calculation in this task", + ) + + entry: ComputedEntry | None = Field( + None, description="The ComputedEntry from the task doc" + ) + + _use_pymatgen_rep : bool = True + + @classmethod + def from_directory( + cls: Type[_T], + dir_name: Union[Path, str], + volumetric_files: tuple[str, ...] = _VOLUMETRIC_FILES, + store_additional_json: bool = True, + additional_fields: Optional[dict[str, Any]] = None, + volume_change_warning_tol: float = 0.2, + task_names: Optional[list[str]] = None, + **vasp_calculation_kwargs, + ) -> _T: + """ + Create a task document from a directory containing VASP files. + + Parameters + ---------- + dir_name + The path to the folder containing the calculation outputs. + store_additional_json + Whether to store additional json files found in the calculation directory. + volumetric_files + Volumetric files to search for. + additional_fields + Dictionary of additional fields to add to output document. + volume_change_warning_tol + Maximum volume change allowed in VASP relaxations before the calculation is + tagged with a warning. + task_names + Naming scheme for multiple calculations in on folder e.g. ["relax1","relax2"]. + Can be subfolder or extension. + **vasp_calculation_kwargs + Additional parsing options that will be passed to the + :obj:`.Calculation.from_vasp_files` function. + + Returns + ------- + TaskDoc + A task document for the calculation. + """ + + additional_json = None + if store_additional_json: + additional_json = _parse_additional_json(Path(dir_name)) + + db_task = DbTaskDoc.from_directory( + dir_name, + volumetric_files = volumetric_files, + additional_fields = additional_fields, + volume_change_warning_tol = volume_change_warning_tol, + task_names = task_names, + **vasp_calculation_kwargs, + ) + config = db_task.model_dump() + config["entry"] = db_task.entry.get_computed_entry() + if additional_json: + config.update(additional_json= additional_json) + return cls(**config) + class TrajectoryDoc(BaseModel): """Model for task trajectory data.""" @@ -804,7 +904,7 @@ class TrajectoryDoc(BaseModel): "This comes in the form: mp-******.", ) - trajectories: Optional[List[Trajectory]] = Field( + trajectories: Optional[list[Trajectory]] = Field( None, description="Trajectory data for calculations associated with a task doc.", ) @@ -874,7 +974,7 @@ def get_uri(dir_name: Union[str, Path]) -> str: def _parse_transformations( dir_name: Path, -) -> Tuple[Dict, Optional[int], Optional[List[str]], Optional[str]]: +) -> tuple[dict, Optional[int], Optional[list[str]], Optional[str]]: """Parse transformations.json file.""" transformations = {} filenames = tuple(dir_name.glob("transformations.json*")) @@ -902,7 +1002,7 @@ def _parse_transformations( return transformations, icsd_id, new_tags, new_author -def _parse_custodian(dir_name: Path) -> Optional[Dict]: +def _parse_custodian(dir_name: Path) -> Optional[dict]: """ Parse custodian.json file. @@ -927,7 +1027,7 @@ def _parse_custodian(dir_name: Path) -> Optional[Dict]: def _parse_orig_inputs( dir_name: Path, -) -> Dict[str, Union[Kpoints, Poscar, PotcarSpec, Incar]]: +) -> dict[str, Union[Kpoints, Poscar, PotcarSpec, Incar]]: """ Parse original input files. @@ -941,7 +1041,7 @@ def _parse_orig_inputs( Returns ------- - Dict[str, Union[Kpints, Poscar, PotcarSpec, Incar]] + dict[str, Union[Kpints, Poscar, PotcarSpec, Incar]] The original POSCAR, KPOINTS, POTCAR, and INCAR data. """ orig_inputs = {} @@ -965,7 +1065,7 @@ def _parse_orig_inputs( return orig_inputs -def _parse_additional_json(dir_name: Path) -> Dict[str, Any]: +def _parse_additional_json(dir_name: Path) -> dict[str, Any]: """Parse additional json files in the directory.""" additional_json = {} for filename in dir_name.glob("*.json*"): @@ -982,7 +1082,7 @@ def _parse_additional_json(dir_name: Path) -> Dict[str, Any]: def _get_max_force(calc_doc: Calculation) -> Optional[float]: """Get max force acting on atoms from a calculation document.""" if calc_doc.output.ionic_steps: - forces: Optional[Union[np.ndarray, List]] = None + forces: Optional[Union[np.ndarray, list]] = None if calc_doc.output.ionic_steps: forces = calc_doc.output.ionic_steps[-1].forces @@ -996,7 +1096,7 @@ def _get_max_force(calc_doc: Calculation) -> Optional[float]: return None -def _get_drift_warnings(calc_doc: Calculation) -> List[str]: +def _get_drift_warnings(calc_doc: Calculation) -> list[str]: """Get warnings of whether the drift on atoms is too large.""" warnings = [] if calc_doc.input.parameters.get("NSW", 0) > 0: @@ -1012,7 +1112,7 @@ def _get_drift_warnings(calc_doc: Calculation) -> List[str]: return warnings -def _get_state(calcs_reversed: List[Calculation], analysis: AnalysisDoc) -> TaskState: +def _get_state(calcs_reversed: list[Calculation], analysis: AnalysisDoc) -> TaskState: """Get state from calculation documents and relaxation analysis.""" all_calcs_completed = all( c.has_vasp_completed == TaskState.SUCCESS for c in calcs_reversed @@ -1022,7 +1122,7 @@ def _get_state(calcs_reversed: List[Calculation], analysis: AnalysisDoc) -> Task return TaskState.FAILED # type: ignore -def _get_run_stats(calcs_reversed: List[Calculation]) -> Dict[str, RunStatistics]: +def _get_run_stats(calcs_reversed: list[Calculation]) -> dict[str, RunStatistics]: """Get summary of runtime statistics for each calculation in this task.""" run_stats = {} total = dict( @@ -1050,9 +1150,9 @@ def _get_run_stats(calcs_reversed: List[Calculation]) -> Dict[str, RunStatistics def _find_vasp_files( path: Union[str, Path], - volumetric_files: Tuple[str, ...] = _VOLUMETRIC_FILES, + volumetric_files: tuple[str, ...] = _VOLUMETRIC_FILES, task_names: Optional[list[str]] = None, -) -> Dict[str, Any]: +) -> dict[str, Any]: """ Find VASP files in a directory. diff --git a/emmet-core/emmet/core/vasp/calculation.py b/emmet-core/emmet/core/vasp/calculation.py index bdb70c72c6..4fdf9e41f3 100644 --- a/emmet-core/emmet/core/vasp/calculation.py +++ b/emmet-core/emmet/core/vasp/calculation.py @@ -6,7 +6,7 @@ import os from datetime import datetime from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Optional, Union import numpy as np from pydantic import BaseModel, ConfigDict, Field, model_validator @@ -27,8 +27,10 @@ Poscar, Potcar, PotcarSingle, + Procar, Vasprun, VolumetricData, + Wavecar, ) from emmet.core.math import ListMatrix3D, Matrix3D, Vector3D @@ -45,6 +47,7 @@ logger = logging.getLogger(__name__) +VaspObjectTypes = BandStructure | Dos | VolumetricData | Trajectory | Wavecar | Procar class VaspObject(ValueEnum): """Types of VASP data objects.""" @@ -75,13 +78,28 @@ class CalculationBaseModel(BaseModel): def get(self, key: Any, default_value: Optional[Any] = None) -> Any: return getattr(self, key, default_value) +class PotcarSummaryStats(BaseModel): + """Specific format of the POTCAR summary statistics used for POTCAR matching.""" + + keywords : dict[str, list[str]] | None = Field( + None, description=( + "dict of the form `{'header': [list of POTCAR header keywords]," + "'data': [list of POTCAR body keywords]}`" + ) + ) + stats : dict[str,dict[str,float]] | None = Field( + None, description=( + "dict of the form `{'header': {statistic: value}, 'data': {...}}` " + "based on the data in the POTCAR" + ) + ) class PotcarSpec(BaseModel): """Document defining a VASP POTCAR specification.""" - titel: Optional[str] = Field(None, description="TITEL field from POTCAR header") - hash: Optional[str] = Field(None, description="md5 hash of POTCAR file") - summary_stats: Optional[dict] = Field( + titel: str | None = Field(None, description="TITEL field from POTCAR header") + hash: str | None = Field(None, description="md5 hash of POTCAR file") + summary_stats: PotcarSummaryStats | None = Field( None, description="summary statistics used to ID POTCARs without hashing" ) @@ -107,7 +125,7 @@ def from_potcar_single(cls, potcar_single: PotcarSingle) -> "PotcarSpec": ) @classmethod - def from_potcar(cls, potcar: Potcar) -> List["PotcarSpec"]: + def from_potcar(cls, potcar: Potcar) -> list["PotcarSpec"]: """ Get a list of PotcarSpecs from a Potcar. @@ -127,20 +145,20 @@ def from_potcar(cls, potcar: Potcar) -> List["PotcarSpec"]: class CalculationInput(CalculationBaseModel): """Document defining VASP calculation inputs.""" - incar: Optional[Dict[str, Any]] = Field( + incar: Optional[dict[str, Any]] = Field( None, description="INCAR parameters for the calculation" ) - kpoints: Optional[Union[Dict[str, Any], Kpoints]] = Field( + kpoints: Optional[Union[dict[str, Any], Kpoints]] = Field( None, description="KPOINTS for the calculation" ) nkpoints: Optional[int] = Field(None, description="Total number of k-points") - potcar: Optional[List[str]] = Field( + potcar: Optional[list[str]] = Field( None, description="POTCAR symbols in the calculation" ) - potcar_spec: Optional[List[PotcarSpec]] = Field( + potcar_spec: Optional[list[PotcarSpec]] = Field( None, description="Title and hash of POTCAR files used in the calculation" ) - potcar_type: Optional[List[str]] = Field( + potcar_type: Optional[list[str]] = Field( None, description="List of POTCAR functional types." ) parameters: Optional[dict] = Field(None, description="Parameters from vasprun") @@ -201,14 +219,14 @@ def from_vasprun(cls, vasprun: Vasprun) -> "CalculationInput": class RunStatistics(BaseModel): """Summary of the run statistics for a VASP calculation.""" - average_memory: float = Field(0, description="The average memory used in kb") - max_memory: float = Field(0, description="The maximum memory used in kb") - elapsed_time: float = Field(0, description="The real time elapsed in seconds") - system_time: float = Field(0, description="The system CPU time in seconds") + average_memory: float = Field(0., description="The average memory used in kb") + max_memory: float = Field(0., description="The maximum memory used in kb") + elapsed_time: float = Field(0., description="The real time elapsed in seconds") + system_time: float = Field(0., description="The system CPU time in seconds") user_time: float = Field( - 0, description="The user CPU time spent by VASP in seconds" + 0., description="The user CPU time spent by VASP in seconds" ) - total_time: float = Field(0, description="The total CPU time for this calculation") + total_time: float = Field(0., description="The total CPU time for this calculation") cores: int = Field(0, description="The number of cores used by VASP") @classmethod @@ -253,18 +271,18 @@ def from_outcar(cls, outcar: Outcar) -> "RunStatistics": class FrequencyDependentDielectric(BaseModel): """Frequency-dependent dielectric data.""" - real: Optional[List[List[float]]] = Field( + real: Optional[list[list[float]]] = Field( None, description="Real part of the frequency dependent dielectric constant, given at" " each energy as 6 components according to XX, YY, ZZ, XY, YZ, ZX", ) - imaginary: Optional[List[List[float]]] = Field( + imaginary: Optional[list[list[float]]] = Field( None, description="Imaginary part of the frequency dependent dielectric constant, " "given at each energy as 6 components according to XX, YY, ZZ, XY, " "YZ, ZX", ) - energy: Optional[List[float]] = Field( + energy: Optional[list[float]] = Field( None, description="Energies at which the real and imaginary parts of the dielectric" "constant are given", @@ -292,12 +310,12 @@ def from_vasprun(cls, vasprun: Vasprun) -> "FrequencyDependentDielectric": class ElectronPhononDisplacedStructures(BaseModel): """Document defining electron phonon displaced structures.""" - temperatures: Optional[List[float]] = Field( + temperatures: Optional[list[float]] = Field( None, description="The temperatures at which the electron phonon displacements " "were generated.", ) - structures: Optional[List[Structure]] = Field( + structures: Optional[list[Structure]] = Field( None, description="The displaced structures corresponding to each temperature." ) @@ -334,11 +352,11 @@ class IonicStep(BaseModel): # type: ignore e_fr_energy: Optional[float] = Field(None, description="The free energy.") e_wo_entrp: Optional[float] = Field(None, description="The energy without entropy.") e_0_energy: Optional[float] = Field(None, description="The internal energy.") - forces: Optional[List[Vector3D]] = Field( + forces: Optional[list[Vector3D]] = Field( None, description="The forces on each atom." ) stress: Optional[Matrix3D] = Field(None, description="The stress on the lattice.") - electronic_steps: Optional[List[ElectronicStep]] = Field( + electronic_steps: Optional[list[ElectronicStep]] = Field( None, description="The electronic convergence steps." ) num_electronic_steps: Optional[int] = Field( @@ -415,30 +433,30 @@ class CalculationOutput(BaseModel): description="Frequency-dependent dielectric information from an LOPTICS " "calculation", ) - ionic_steps: Optional[List[IonicStep]] = Field( + ionic_steps: Optional[list[IonicStep]] = Field( None, description="Energy, forces, structure, etc. for each ionic step" ) - num_electronic_steps: Optional[List[int]] = Field( + num_electronic_steps: Optional[list[int]] = Field( None, description="The number of electronic steps in each ionic step." ) - locpot: Optional[Dict[int, List[float]]] = Field( + locpot: Optional[dict[int, list[float]]] = Field( None, description="Average of the local potential along the crystal axes" ) - outcar: Optional[Dict[str, Any]] = Field( + outcar: Optional[dict[str, Any]] = Field( None, description="Information extracted from the OUTCAR file" ) - force_constants: Optional[List[List[Matrix3D]]] = Field( + force_constants: Optional[list[list[Matrix3D]]] = Field( None, description="Force constants between every pair of atoms in the structure" ) - normalmode_frequencies: Optional[List[float]] = Field( + normalmode_frequencies: Optional[list[float]] = Field( None, description="Frequencies in THz of the normal modes at Gamma" ) - normalmode_eigenvals: Optional[List[float]] = Field( + normalmode_eigenvals: Optional[list[float]] = Field( None, description="Normal mode eigenvalues of phonon modes at Gamma. " "Note the unit changed between VASP 5 and 6.", ) - normalmode_eigenvecs: Optional[List[List[Vector3D]]] = Field( + normalmode_eigenvecs: Optional[list[list[Vector3D]]] = Field( None, description="Normal mode eigenvectors of phonon modes at Gamma" ) elph_displaced_structures: Optional[ElectronPhononDisplacedStructures] = Field( @@ -446,7 +464,7 @@ class CalculationOutput(BaseModel): description="Electron-phonon displaced structures, generated by setting " "PHON_LMC = True.", ) - dos_properties: Optional[Dict[str, Dict[str, Dict[str, float]]]] = Field( + dos_properties: Optional[dict[str, dict[str, dict[str, float]]]] = Field( None, description="Element- and orbital-projected band properties (in eV) for the " "DOS. All properties are with respect to the Fermi level.", @@ -462,7 +480,7 @@ def from_vasp_outputs( outcar: Optional[Outcar], contcar: Optional[Poscar], locpot: Optional[Locpot] = None, - elph_poscars: Optional[List[Path]] = None, + elph_poscars: Optional[list[Path]] = None, store_trajectory: StoreTrajectoryOption = StoreTrajectoryOption.NO, store_onsite_density_matrices: bool = False, ) -> "CalculationOutput": @@ -577,7 +595,7 @@ def from_vasp_outputs( else {} ) - elph_structures: Dict[str, List[Any]] = {} + elph_structures: dict[str, list[Any]] = {} if elph_poscars is not None: elph_structures.update({"temperatures": [], "structures": []}) for elph_poscar in elph_poscars: @@ -642,7 +660,7 @@ class Calculation(CalculationBaseModel): task_name: Optional[str] = Field( None, description="Name of task given by custodian (e.g., relax1, relax2)" ) - output_file_paths: Optional[Dict[str, str]] = Field( + output_file_paths: Optional[dict[str, str]] = Field( None, description="Paths (relative to dir_name) of the VASP output files " "associated with this calculation", @@ -667,8 +685,8 @@ def from_vasp_files( vasprun_file: Union[Path, str], outcar_file: Union[Path, str], contcar_file: Union[Path, str], - volumetric_files: List[str] = None, - elph_poscars: List[Path] = None, + volumetric_files: list[str] = None, + elph_poscars: list[Path] = None, oszicar_file: Optional[Union[Path, str]] = None, parse_dos: Union[str, bool] = False, parse_bandstructure: Union[str, bool] = False, @@ -677,11 +695,11 @@ def from_vasp_files( run_ddec6: Union[bool, str] = False, strip_bandstructure_projections: bool = False, strip_dos_projections: bool = False, - store_volumetric_data: Optional[Tuple[str]] = None, + store_volumetric_data: Optional[tuple[str]] = None, store_trajectory: StoreTrajectoryOption = StoreTrajectoryOption.NO, store_onsite_density_matrices: bool = False, - vasprun_kwargs: Optional[Dict] = None, - ) -> Tuple["Calculation", Dict[VaspObject, Dict]]: + vasprun_kwargs: Optional[dict] = None, + ) -> tuple["Calculation", dict[VaspObject, dict]]: """ Create a VASP calculation document from a directory and file paths. @@ -783,7 +801,7 @@ def from_vasp_files( completed_at = str(datetime.fromtimestamp(vasprun_file.stat().st_mtime)) output_file_paths = _get_output_file_paths(volumetric_files) - vasp_objects: Dict[VaspObject, Any] = _get_volumetric_data( + vasp_objects: dict[VaspObject, Any] = _get_volumetric_data( dir_name, output_file_paths, store_volumetric_data ) @@ -895,8 +913,8 @@ def from_vasprun( cls, path: Union[Path, str], task_name: str = "Unknown vapsrun.xml", - vasprun_kwargs: Optional[Dict] = None, - ) -> Tuple["Calculation", Dict[VaspObject, Dict]]: + vasprun_kwargs: Optional[dict] = None, + ) -> tuple["Calculation", dict[VaspObject, dict]]: """ Create a VASP calculation document from a directory and file paths. @@ -955,7 +973,7 @@ def from_vasprun( ) -def _get_output_file_paths(volumetric_files: List[str]) -> Dict[VaspObject, str]: +def _get_output_file_paths(volumetric_files: list[str]) -> dict[VaspObject, str]: """ Get the output file paths for VASP output files from the list of volumetric files. @@ -966,7 +984,7 @@ def _get_output_file_paths(volumetric_files: List[str]) -> Dict[VaspObject, str] Returns ------- - Dict[VaspObject, str] + dict[VaspObject, str] A mapping between the VASP object type and the file path. """ output_file_paths = {} @@ -979,9 +997,9 @@ def _get_output_file_paths(volumetric_files: List[str]) -> Dict[VaspObject, str] def _get_volumetric_data( dir_name: Path, - output_file_paths: Dict[VaspObject, str], - store_volumetric_data: Optional[Tuple[str]], -) -> Dict[VaspObject, VolumetricData]: + output_file_paths: dict[VaspObject, str], + store_volumetric_data: Optional[tuple[str]], +) -> dict[VaspObject, VolumetricData]: """ Load volumetric data files from a directory. @@ -999,7 +1017,7 @@ def _get_volumetric_data( Returns ------- - Dict[VaspObject, VolumetricData] + dict[VaspObject, VolumetricData] A dictionary mapping the VASP object data type (`VaspObject.LOCPOT`, `VaspObject.CHGCAR`, etc) to the volumetric data object. """ @@ -1069,7 +1087,7 @@ def _parse_bandstructure( def _get_band_props( complete_dos: CompleteDos, structure: Structure -) -> Dict[str, Dict[str, Dict[str, float]]]: +) -> dict[str, dict[str, dict[str, float]]]: """ Calculate band properties from a CompleteDos object and Structure. @@ -1082,10 +1100,10 @@ def _get_band_props( Returns ------- - Dict + dict A dictionary of element and orbital-projected DOS properties. """ - dosprop_dict: Dict[str, Dict[str, Dict[str, float]]] = {} + dosprop_dict: dict[str, dict[str, dict[str, float]]] = {} for el in structure.composition.elements: el_name = el.name dosprop_dict[el_name] = {} From 15a69923f70b75460a0d2781521a2a4497460c6a Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Fri, 17 Jan 2025 14:59:47 -0800 Subject: [PATCH 02/15] precommit --- emmet-core/emmet/core/tasks.py | 116 ++++++++++++---------- emmet-core/emmet/core/vasp/calculation.py | 31 +++--- 2 files changed, 80 insertions(+), 67 deletions(-) diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index bfffbbce67..98f03991e9 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -325,61 +325,62 @@ def from_vasp_calc_docs( max_force=max_force, warnings=warnings, errors=errors, - ) + ) + class EmmetComputedEntry(BaseModel): """Fixed-schema version of pymatgen ComputedEntry.""" - energy : float - composition: dict[str,float] - entry_id : MPID | None = None - correction : float | None = None - energy_adjustments : list[float] | None = None - potcar_spec : list[PotcarSpec] | None = None - run_type : RunType | None = None - is_hubbard : bool = False - hubbards : dict[str,float] | None = None - oxide_type : str | None = None - aspherical : bool = False - last_updated : datetime | None = None + energy: float + composition: dict[str, float] + entry_id: MPID | None = None + correction: float | None = None + energy_adjustments: list[float] | None = None + potcar_spec: list[PotcarSpec] | None = None + run_type: RunType | None = None + is_hubbard: bool = False + hubbards: dict[str, float] | None = None + oxide_type: str | None = None + aspherical: bool = False + last_updated: datetime | None = None def get_computed_entry(self) -> ComputedEntry: """Get pymatgen computed entry.""" - return ComputedEntry.from_dict({ - "correction": self.correction, - "entry_id": self.entry_id, - "composition": self.composition, - "energy": self.energy, - "parameters": { - "potcar_spec": ( - [ps.model_dump() for ps in self.potcar_spec] if self.potcar_spec is not None - else [] - ), - "run_type": str(self.run_type), - "is_hubbard": self.is_hubbard, - "hubbards": self.hubbards, - }, - "data": { - "oxide_type": self.oxide_type, - "aspherical": self.aspherical, - "last_updated": str(self.last_updated), - }, - }) - + return ComputedEntry.from_dict( + { + "correction": self.correction, + "entry_id": self.entry_id, + "composition": self.composition, + "energy": self.energy, + "parameters": { + "potcar_spec": ( + [ps.model_dump() for ps in self.potcar_spec] + if self.potcar_spec is not None + else [] + ), + "run_type": str(self.run_type), + "is_hubbard": self.is_hubbard, + "hubbards": self.hubbards, + }, + "data": { + "oxide_type": self.oxide_type, + "aspherical": self.aspherical, + "last_updated": str(self.last_updated), + }, + } + ) class DbTaskDoc(StructureMetadata): """Calculation-level details about VASP calculations that power Materials Project. - + This schema is intended to be fixed for database best practices. """ tags: list[str] | None = Field( None, title="tag", description="Metadata tagged to a given task." ) - dir_name: str | None = Field( - None, description="The directory for this VASP task" - ) + dir_name: str | None = Field(None, description="The directory for this VASP task") calcs_reversed: list[Calculation] | None = Field( None, @@ -391,9 +392,7 @@ class DbTaskDoc(StructureMetadata): None, description="Final output structure from the task" ) - task_type: TaskType | None = Field( - None, description="The type of calculation." - ) + task_type: TaskType | None = Field(None, description="The type of calculation.") run_type: RunType | None = Field( None, description="The functional used in the calculation." @@ -508,7 +507,7 @@ def model_post_init(self, __context: Any) -> None: # TODO: remove after imposing TaskDoc schema on older tasks in collection if self.structure is None: self.structure = calcs_reversed[0].output.structure - + # Set the computed entry if not set if ( not self.entry @@ -516,7 +515,9 @@ def model_post_init(self, __context: Any) -> None: and getattr(self.calcs_reversed[0].output, "structure", None) ): use_pymatgen_rep = getattr(self, "_use_pymatgen_rep", False) - self.entry = self.get_entry(self.calcs_reversed, self.task_id, use_pymatgen_rep=use_pymatgen_rep) + self.entry = self.get_entry( + self.calcs_reversed, self.task_id, use_pymatgen_rep=use_pymatgen_rep + ) # Make sure that the datetime field is properly formatted # (Unclear when this is not the case, please leave comment if observed) @@ -722,7 +723,7 @@ def from_vasprun( def get_entry( calcs_reversed: list[Calculation], task_id: Optional[Union[MPID, str]] = None, - use_pymatgen_rep : bool = False + use_pymatgen_rep: bool = False, ) -> EmmetComputedEntry | ComputedEntry: """ Get a computed entry from a list of VASP calculation documents. @@ -741,17 +742,20 @@ def get_entry( ComputedEntry A computed entry. """ - inp_kwargs = {k : getattr(calcs_reversed[0].input,k,None) for k in ("potcar_spec","is_hubbard","hubbards")} + inp_kwargs = { + k: getattr(calcs_reversed[0].input, k, None) + for k in ("potcar_spec", "is_hubbard", "hubbards") + } ce = EmmetComputedEntry( - energy = calcs_reversed[0].output.energy, + energy=calcs_reversed[0].output.energy, composition=calcs_reversed[0].output.structure.composition.as_dict(), entry_id=task_id, - correction=0., + correction=0.0, run_type=calcs_reversed[0].run_type, oxide_type=oxide_type(calcs_reversed[0].output.structure), aspherical=calcs_reversed[0].input.parameters.get("LASPH", False), last_updated=utcnow(), - **inp_kwargs + **inp_kwargs, ) if use_pymatgen_rep: return ce.get_computed_entry() @@ -812,6 +816,7 @@ def structure_entry(self) -> ComputedStructureEntry: entry_id=ce.entry_id, ) + class TaskDoc(DbTaskDoc, extra="allow"): """Calculation-level details about VASP calculations that power Materials Project.""" @@ -835,7 +840,7 @@ class TaskDoc(DbTaskDoc, extra="allow"): None, description="The ComputedEntry from the task doc" ) - _use_pymatgen_rep : bool = True + _use_pymatgen_rep: bool = True @classmethod def from_directory( @@ -883,18 +888,19 @@ def from_directory( db_task = DbTaskDoc.from_directory( dir_name, - volumetric_files = volumetric_files, - additional_fields = additional_fields, - volume_change_warning_tol = volume_change_warning_tol, - task_names = task_names, + volumetric_files=volumetric_files, + additional_fields=additional_fields, + volume_change_warning_tol=volume_change_warning_tol, + task_names=task_names, **vasp_calculation_kwargs, ) config = db_task.model_dump() config["entry"] = db_task.entry.get_computed_entry() if additional_json: - config.update(additional_json= additional_json) + config.update(additional_json=additional_json) return cls(**config) - + + class TrajectoryDoc(BaseModel): """Model for task trajectory data.""" diff --git a/emmet-core/emmet/core/vasp/calculation.py b/emmet-core/emmet/core/vasp/calculation.py index 4fdf9e41f3..67d7df6fcf 100644 --- a/emmet-core/emmet/core/vasp/calculation.py +++ b/emmet-core/emmet/core/vasp/calculation.py @@ -49,6 +49,7 @@ VaspObjectTypes = BandStructure | Dos | VolumetricData | Trajectory | Wavecar | Procar + class VaspObject(ValueEnum): """Types of VASP data objects.""" @@ -78,22 +79,26 @@ class CalculationBaseModel(BaseModel): def get(self, key: Any, default_value: Optional[Any] = None) -> Any: return getattr(self, key, default_value) + class PotcarSummaryStats(BaseModel): """Specific format of the POTCAR summary statistics used for POTCAR matching.""" - keywords : dict[str, list[str]] | None = Field( - None, description=( + keywords: dict[str, list[str]] | None = Field( + None, + description=( "dict of the form `{'header': [list of POTCAR header keywords]," "'data': [list of POTCAR body keywords]}`" - ) + ), ) - stats : dict[str,dict[str,float]] | None = Field( - None, description=( + stats: dict[str, dict[str, float]] | None = Field( + None, + description=( "dict of the form `{'header': {statistic: value}, 'data': {...}}` " "based on the data in the POTCAR" - ) + ), ) + class PotcarSpec(BaseModel): """Document defining a VASP POTCAR specification.""" @@ -219,14 +224,16 @@ def from_vasprun(cls, vasprun: Vasprun) -> "CalculationInput": class RunStatistics(BaseModel): """Summary of the run statistics for a VASP calculation.""" - average_memory: float = Field(0., description="The average memory used in kb") - max_memory: float = Field(0., description="The maximum memory used in kb") - elapsed_time: float = Field(0., description="The real time elapsed in seconds") - system_time: float = Field(0., description="The system CPU time in seconds") + average_memory: float = Field(0.0, description="The average memory used in kb") + max_memory: float = Field(0.0, description="The maximum memory used in kb") + elapsed_time: float = Field(0.0, description="The real time elapsed in seconds") + system_time: float = Field(0.0, description="The system CPU time in seconds") user_time: float = Field( - 0., description="The user CPU time spent by VASP in seconds" + 0.0, description="The user CPU time spent by VASP in seconds" + ) + total_time: float = Field( + 0.0, description="The total CPU time for this calculation" ) - total_time: float = Field(0., description="The total CPU time for this calculation") cores: int = Field(0, description="The number of cores used by VASP") @classmethod From d82093903af4b72529f8d5a52c357170637cce56 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Fri, 17 Jan 2025 16:12:33 -0800 Subject: [PATCH 03/15] fix tests --- emmet-core/emmet/core/tasks.py | 27 +- emmet-core/tests/vasp/test_vasp.py | 4 +- test_files/old_aflow_ggau_task.json | 10967 ----------------------- test_files/old_aflow_ggau_task.json.gz | Bin 0 -> 24295 bytes test_files/test_si_tasks.json.gz | Bin 49079 -> 24329 bytes test_files/test_task.json | 2742 ------ test_files/test_task.json.gz | Bin 0 -> 10120 bytes 7 files changed, 20 insertions(+), 13720 deletions(-) delete mode 100644 test_files/old_aflow_ggau_task.json create mode 100644 test_files/old_aflow_ggau_task.json.gz delete mode 100644 test_files/test_task.json create mode 100644 test_files/test_task.json.gz diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index 98f03991e9..cec28e1960 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -454,7 +454,7 @@ class DbTaskDoc(StructureMetadata): description="Some analysis of calculation data after collection.", ) - last_updated: datetime = Field( + last_updated: datetime | None = Field( utcnow(), description="Timestamp for the most recent calculation for this task document", ) @@ -634,8 +634,6 @@ def from_directory( calcs_reversed[0], vasp_objects.get(VaspObject.TRAJECTORY), # type: ignore ), - state=_get_state(calcs_reversed, analysis), - run_stats=_get_run_stats(calcs_reversed), vasp_objects=vasp_objects, included_objects=included_objects, task_type=calcs_reversed[0].task_type, @@ -709,8 +707,6 @@ def from_vasprun( completed_at=calcs_reversed[0].completed_at, input=InputDoc.from_vasp_calc_doc(calcs_reversed[-1]), output=OutputDoc.from_vasp_calc_doc(calcs_reversed[0]), - state=_get_state(calcs_reversed, analysis), - run_stats=None, vasp_objects={}, included_objects=[], task_type=calcs_reversed[0].task_type, @@ -842,6 +838,16 @@ class TaskDoc(DbTaskDoc, extra="allow"): _use_pymatgen_rep: bool = True + def model_post_init(self, __context: Any) -> None: + """Ensure fields are set correctly that are not defined in DbTaskDoc.""" + super().model_post_init(__context) + + if self.calcs_reversed: + if self.run_stats is None: + self.run_stats = _get_run_stats(self.calcs_reversed) + if self.state is None and self.analysis: + self.state = _get_state(self.calcs_reversed, self.analysis) + @classmethod def from_directory( cls: Type[_T], @@ -889,7 +895,6 @@ def from_directory( db_task = DbTaskDoc.from_directory( dir_name, volumetric_files=volumetric_files, - additional_fields=additional_fields, volume_change_warning_tol=volume_change_warning_tol, task_names=task_names, **vasp_calculation_kwargs, @@ -898,9 +903,13 @@ def from_directory( config["entry"] = db_task.entry.get_computed_entry() if additional_json: config.update(additional_json=additional_json) - return cls(**config) - + # NB: additional_fields populated here because they may not be + # part of the DbTaskDoc model + if additional_fields: + config.update(**additional_fields) + return cls(**config) + class TrajectoryDoc(BaseModel): """Model for task trajectory data.""" @@ -1140,7 +1149,7 @@ def _get_run_stats(calcs_reversed: list[Calculation]) -> dict[str, RunStatistics total_time=0.0, cores=0, ) - for calc_doc in calcs_reversed: + for calc_doc in [cr for cr in calcs_reversed if cr.output.run_stats]: stats = calc_doc.output.run_stats run_stats[calc_doc.task_name] = stats total["average_memory"] = max(total["average_memory"], stats.average_memory) diff --git a/emmet-core/tests/vasp/test_vasp.py b/emmet-core/tests/vasp/test_vasp.py index 3918883d21..547f34ac80 100644 --- a/emmet-core/tests/vasp/test_vasp.py +++ b/emmet-core/tests/vasp/test_vasp.py @@ -103,7 +103,7 @@ def test_computed_entry(tasks): @pytest.fixture(scope="session") def task_ldau(test_dir): - with zopen(test_dir / "test_task.json") as f: + with zopen(test_dir / "test_task.json.gz") as f: data = json.load(f) return TaskDoc(**data) @@ -116,7 +116,7 @@ def test_ldau(task_ldau): def test_ldau_validation(test_dir): - with open(test_dir / "old_aflow_ggau_task.json") as f: + with zopen(test_dir / "old_aflow_ggau_task.json.gz") as f: data = json.load(f) task = TaskDoc(**data) diff --git a/test_files/old_aflow_ggau_task.json b/test_files/old_aflow_ggau_task.json deleted file mode 100644 index 00da26283e..0000000000 --- a/test_files/old_aflow_ggau_task.json +++ /dev/null @@ -1,10967 +0,0 @@ -{ - "_id" : "5bc79b662e927b78dbe5bfb6", - "dir_name" : "mc0805.nersc.gov:/global/projecta/projectdirs/matgen/garden/block_2013-06-23-09-28-21-424493/launcher_2013-06-23-20-21-15-188214", - "schema" : { - "code" : "atomate", - "version" : 0.2 - }, - "calcs_reversed" : [ - { - "vasp_version" : "5.2.2", - "has_vasp_completed" : true, - "nsites" : 16, - "is_hubbard" : true, - "hubbards" : { - "Cl" : 0.0, - "O" : 0.0, - "Te" : 0.0, - "Co" : 3.32 - }, - "elements" : [ - "Cl", - "Co", - "O", - "Te" - ], - "nelements" : 4, - "run_type" : "GGA+U", - "input" : { - "incar" : { - "ISTART" : 1, - "PREC" : "accurate", - "ALGO" : "Fast", - "ISPIN" : 2, - "ICHARG" : 1, - "NELM" : 100, - "IBRION" : 1, - "EDIFF" : 0.0001, - "NSW" : 99, - "ISIF" : 3, - "ENCUT" : 520.0, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "LREAL" : "Auto", - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LMAXMIX" : 4, - "LWAVE" : false, - "LORBIT" : false, - "LPEAD" : false, - "LCALCPOL" : false, - "LCALCEPS" : false, - "EFIELD_PEAD" : [ - 0.0, - 0.0, - 0.0 - ], - "LEFG" : false, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2 - ], - "LDAUU" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.32, - 0.0, - 3.32 - ], - "LDAUJ" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "kpoints" : { - "comment" : "Kpoints from vasprun.xml", - "nkpoints" : 0, - "generation_style" : "Monkhorst", - "kpoints" : [ - [ - 6, - 4, - 4 - ] - ], - "usershift" : [ - 0.0, - 0.0, - 0.0 - ], - "kpts_weights" : null, - "coord_type" : null, - "labels" : null, - "tet_number" : 0, - "tet_weight" : 0, - "tet_connections" : null, - "genvec1" : [ - 0.16666667, - 0.0, - 0.0 - ], - "genvec2" : [ - 0.0, - 0.25, - 0.0 - ], - "genvec3" : [ - 0.0, - 0.0, - 0.25 - ], - "shift" : [ - 0.5, - 0.5, - 0.5 - ], - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Kpoints", - "actual_points" : [ - { - "abc" : [ - 0.08333333, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - } - ] - }, - "potcar" : [ - "Cl", - "O", - "Te", - "O", - "Cl", - "O", - "Te", - "O", - "Cl", - "Co", - "Cl", - "Co" - ], - "potcar_spec" : [ - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - } - ], - "potcar_type" : [ - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE" - ], - "parameters" : { - "SYSTEM" : "unknown system", - "LCOMPAT" : false, - "PREC" : "accura", - "ENMAX" : 520.0, - "ENAUG" : 605.392, - "EDIFF" : 0.0001, - "IALGO" : 68, - "IWAVPR" : 11, - "NBANDS" : 81, - "NELECT" : 112.0, - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LREAL" : true, - "ROPT" : [ - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025 - ], - "LMAXPAW" : -100, - "LMAXMIX" : 4, - "ISTART" : 0, - "ICHARG" : 1, - "INIWAV" : 1, - "ISPIN" : 2, - "LNONCOLLINEAR" : false, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "NUPDOWN" : -1.0, - "LSORBIT" : false, - "SAXIS" : [ - 0.0, - 0.0, - 1.0 - ], - "LSPIRAL" : false, - "QSPIRAL" : [ - 0.0, - 0.0, - 0.0 - ], - "LZEROZ" : false, - "LASPH" : false, - "LMETAGGA" : false, - "NELM" : 100, - "NELMDL" : 0, - "NELMIN" : 2, - "ENINI" : 520.0, - "LDIAG" : true, - "WEIMIN" : 0.001, - "EBREAK" : 3.1e-07, - "DEPER" : 0.3, - "NRMM" : 4, - "TIME" : 0.4, - "AMIX" : 0.4, - "BMIX" : 1.0, - "AMIN" : 0.1, - "AMIX_MAG" : 1.6, - "BMIX_MAG" : 1.0, - "IMIX" : 4, - "MAXMIX" : -45, - "WC" : 100.0, - "INIMIX" : 1, - "MIXPRE" : 1, - "MREMOVE" : 5, - "LDIPOL" : false, - "LMONO" : false, - "IDIPOL" : 0, - "EPSILON" : 1.0, - "DIPOL" : [ - -100.0, - -100.0, - -100.0 - ], - "EFIELD" : 0.0, - "NGX" : 40, - "NGY" : 50, - "NGZ" : 64, - "NGXF" : 80, - "NGYF" : 100, - "NGZF" : 128, - "ADDGRID" : false, - "NSW" : 99, - "IBRION" : 1, - "ISIF" : 3, - "PSTRESS" : 0.0, - "EDIFFG" : 0.001, - "NFREE" : 0, - "POTIM" : 0.5, - "SMASS" : -3.0, - "TEBEG" : 0.0001, - "TEEND" : 0.0001, - "NBLOCK" : 1, - "KBLOCK" : 99, - "NPACO" : 256, - "APACO" : 16.0, - "ISYM" : 2, - "SYMPREC" : 1e-05, - "LORBIT" : false, - "RWIGS" : [ - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0 - ], - "NEDOS" : 301, - "EMIN" : 10.0, - "EMAX" : -10.0, - "EFERMI" : 0.0, - "NWRITE" : 2, - "LWAVE" : false, - "LCHARG" : true, - "LPARD" : false, - "LVTOT" : false, - "LELF" : false, - "LOPTICS" : false, - "STM" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "NPAR" : 1, - "NSIM" : 4, - "NBLK" : 32, - "LPLANE" : true, - "LSCALAPACK" : false, - "LSCAAWARE" : false, - "LSCALU" : false, - "LASYNC" : false, - "IDIOT" : 3, - "LMUSIC" : false, - "POMASS" : [ - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 58.933, - 35.453, - 58.933 - ], - "LCORR" : true, - "LREAL_COMPAT" : false, - "GGA_COMPAT" : true, - "LBERRY" : false, - "ICORELEVEL" : 0, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0 - ], - "LDAUU" : [ - 0.0 - ], - "LDAUJ" : [ - 0.0 - ], - "LDAUPRINT" : 0, - "I_CONSTRAINED_M" : 0, - "GGA" : "--", - "VOSKOWN" : 0, - "LHFCALC" : false, - "LHFONE" : false, - "LRHFCALC" : false, - "LTHOMAS" : false, - "LMODELHF" : false, - "ENCUTFOCK" : 0.0, - "ENCUT4O" : -1.0, - "EXXOEP" : 0, - "FOURORBIT" : 0, - "AEXX" : 0.0, - "HFALPHA" : 0.0, - "ALDAX" : 1.0, - "AGGAX" : 1.0, - "ALDAC" : 1.0, - "AGGAC" : 1.0, - "NKREDX" : 1, - "NKREDY" : 1, - "NKREDZ" : 1, - "SHIFTRED" : false, - "ODDONLY" : false, - "EVENONLY" : false, - "LMAXFOCK" : 0, - "NMAXFOCKAE" : 0, - "HFSCREEN" : 0.0, - "HFSCREENC" : 0.0, - "MODEL_GW" : 0, - "MODEL_EPS0" : 10.53420016, - "MODEL_ALPHA" : 1.0, - "LEPSILON" : false, - "LRPA" : false, - "LNABLA" : false, - "LVEL" : false, - "KINTER" : 0, - "CSHIFT" : 0.1, - "OMEGAMAX" : -1.0, - "ORBITALMAG" : false, - "LMAGBLOCH" : false, - "LCHIMAG" : false, - "LGAUGE" : true, - "MAGATOM" : 0, - "MAGDIPOL" : [ - 0.0, - 0.0, - 0.0 - ], - "AVECCONST" : [ - 0.0, - 0.0, - 0.0 - ], - "LTCTE" : false, - "LTETE" : false, - "L2ORDER" : false, - "LGWLF" : false, - "ENCUTGW" : 346.66666667, - "ENCUTGWSOFT" : -2.0, - "ENCUTLF" : -1.0, - "LMAXMP2" : -1, - "SCISSOR" : 0.0, - "NOMEGA" : 0, - "NOMEGAR" : 0, - "NBANDSGW" : -1, - "NBANDSLF" : -1, - "DIM" : 3, - "ANTIRES" : 0, - "LUSEW" : false, - "OMEGATL" : -200.0, - "OMEGAGRID" : 0, - "SELFENERGY" : false, - "LSPECTRAL" : false, - "ODDONLYGW" : false, - "EVENONLYGW" : false, - "NKREDLFX" : 1, - "NKREDLFY" : 1, - "NKREDLFZ" : 1, - "MAXMEM" : 1024, - "TELESCOPE" : 0 - }, - "lattice_rec" : { - "@module" : "pymatgen.core.lattice", - "@class" : "Lattice", - "matrix" : [ - [ - 1.28754424056524, - 2.32481115645997e-05, - -0.00469738419272573 - ], - [ - 1.75226515740408e-05, - 0.932183889244868, - -7.91635225678835e-06 - ], - [ - 0.203937848142843, - -9.10509407612667e-07, - 0.734055033533715 - ] - ] - }, - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87196666, - 0.00023939, - -1.35336648 - ], - [ - 0.0002305, - 6.73722788, - -0.00039546 - ], - [ - 0.0325234, - -0.00048148, - 8.54921124 - ] - ], - "a" : 5.05644737168763, - "b" : 6.73722789554934, - "c" : 8.54927311702655, - "alpha" : 90.0065824481013, - "beta" : 105.306607273376, - "gamma" : 89.9944985329069, - "volume" : 280.912004386033 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16054504, - 0.74998936, - 0.49759572 - ], - "xyz" : [ - 0.798526459495694, - 5.05264807638522, - 4.03647805594133 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76149909, - 0.96333395, - 0.16142756 - ], - "xyz" : [ - 3.71547039968072, - 6.49030491681609, - 0.349110007397404 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23853208, - 0.46327695, - 0.83854001 - ], - "xyz" : [ - 1.18949929859866, - 3.12085574565198, - 6.84585114970239 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23852166, - 0.0366917, - 0.83854862 - ], - "xyz" : [ - 1.18935048483241, - 0.246853699515226, - 6.84610755789285 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40630505, - 0.25000793, - 0.75409072 - ], - "xyz" : [ - 2.00408787834035, - 1.68409458198314, - 5.89690235594297 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74902929, - 0.24999573, - 0.9267364 - ], - "xyz" : [ - 3.679443970891, - 1.68401130711681, - 6.90905525046155 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74549685, - 0.75000024, - 0.80111274 - ], - "xyz" : [ - 3.65826358347846, - 5.05271527166356, - 5.8396549984847 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25095492, - 0.75000564, - 0.07329935 - ], - "xyz" : [ - 1.22520082378278, - 5.0529836918925, - 0.286721052955218 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59366155, - 0.74999147, - 0.24596015 - ], - "xyz" : [ - 2.90047161230027, - 5.05288713319162, - 1.29902704511052 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76148788, - 0.53670171, - 0.16143891 - ], - "xyz" : [ - 3.71531781534373, - 3.61598628683288, - 0.349390928168849 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25450917, - 0.24999959, - 0.19888962 - ], - "xyz" : [ - 1.24648638247688, - 1.68426937331254, - 1.35580633045485 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23110117, - 0.74998843, - 0.77457714 - ], - "xyz" : [ - 1.15128194981518, - 5.05252534018115, - 6.30896242414374 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76885137, - 0.25001225, - 0.22538046 - ], - "xyz" : [ - 3.75320600781171, - 1.68446504018711, - 0.886188619803908 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.608e-05, - 0.50000858, - 1.057e-05 - ], - "xyz" : [ - 0.0001939369739208, - 3.36867174417536, - -0.0001291303632384 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83947218, - 0.25000364, - 0.50238286 - ], - "xyz" : [ - 4.10627729750546, - 1.68429056745522, - 3.15876481775135 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.66e-05, - 0.99999283, - 9.2e-06 - ], - "xyz" : [ - 0.000311672209151, - 6.73717957362036, - -0.0003392703047118 - ], - "label" : "Co" - } - ] - } - }, - "output" : { - "ionic_steps" : [ - { - "e_fr_energy" : -79.70597025, - "e_wo_entrp" : -79.70597025, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00946619, - -0.00011329, - -0.00936174 - ], - [ - 0.01526707, - -0.01859952, - -0.00593067 - ], - [ - -0.02568452, - -0.00018406, - 0.02017709 - ], - [ - -0.02160331, - 0.008271, - 0.01476913 - ], - [ - -0.01212099, - -0.00938336, - 0.01039623 - ], - [ - -0.00904162, - 0.0010074, - 0.03964873 - ], - [ - -0.02812936, - -0.00058494, - -0.03669305 - ], - [ - 0.0109616, - -0.00100911, - -0.03901985 - ], - [ - 0.02258175, - 0.00953558, - -0.02740245 - ], - [ - 0.01957412, - 0.01005882, - -0.01178317 - ], - [ - 0.02921928, - 0.00079021, - 0.03611757 - ], - [ - -0.00081672, - 0.00086543, - 0.01911479 - ], - [ - 0.00146435, - -0.00085108, - -0.01878646 - ], - [ - -0.00045952, - -0.00064673, - -0.0003821 - ], - [ - -0.01013077, - 0.00025812, - 0.00937059 - ], - [ - -0.00054754, - 0.00058555, - -0.00023464 - ] - ], - "stress" : [ - [ - 1.10857549, - -0.09889586, - -0.29784087 - ], - [ - -0.09889976, - 0.85842056, - 0.12289575 - ], - [ - -0.29782352, - 0.12289364, - 0.3723803 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.67316889, - "ewald" : -4771.61072577, - "hartreedc" : -3293.04726772, - "XCdc" : 264.34682808, - "pawpsdc" : 5330.08618509, - "pawaedc" : -5437.61689609, - "eentropy" : 0.0, - "bandstr" : 802.77278158, - "atom" : 7933.79896004, - "e_fr_energy" : 1094.40303412, - "e_wo_entrp" : 1094.40303412, - "e_0_energy" : 1094.40303412 - }, - { - "e_fr_energy" : 106.9632554, - "e_wo_entrp" : 106.9632554, - "e_0_energy" : 106.9632554 - }, - { - "e_fr_energy" : -69.55713518, - "e_wo_entrp" : -69.55713518, - "e_0_energy" : -69.55713518 - }, - { - "e_fr_energy" : -79.41417968, - "e_wo_entrp" : -79.41417968, - "e_0_energy" : -79.41417968 - }, - { - "e_fr_energy" : -79.69636823, - "e_wo_entrp" : -79.69636823, - "e_0_energy" : -79.69636823 - }, - { - "e_fr_energy" : -79.70494904, - "e_wo_entrp" : -79.70494904, - "e_0_energy" : -79.70494904 - }, - { - "e_fr_energy" : -79.70599223, - "e_wo_entrp" : -79.70599223, - "e_0_energy" : -79.70599223 - }, - { - "alphaZ" : 265.67316889, - "ewald" : -4771.61072577, - "hartreedc" : -3292.92576025, - "XCdc" : 264.3448249, - "pawpsdc" : 5329.76709692, - "pawaedc" : -5437.32409727, - "eentropy" : 0.0, - "bandstr" : -371.42943772, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70597025, - "e_wo_entrp" : -79.70597025, - "e_0_energy" : -79.70597025 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87196666, - 0.00023939, - -1.35336648 - ], - [ - 0.0002305, - 6.73722788, - -0.00039546 - ], - [ - 0.0325234, - -0.00048148, - 8.54921124 - ] - ], - "a" : 5.05644737168763, - "b" : 6.73722789554934, - "c" : 8.54927311702655, - "alpha" : 90.0065824481013, - "beta" : 105.306607273376, - "gamma" : 89.9944985329069, - "volume" : 280.912004386033 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16054504, - 0.74998936, - 0.49759572 - ], - "xyz" : [ - 0.798526459495694, - 5.05264807638522, - 4.03647805594133 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76149909, - 0.96333395, - 0.16142756 - ], - "xyz" : [ - 3.71547039968072, - 6.49030491681609, - 0.349110007397404 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23853208, - 0.46327695, - 0.83854001 - ], - "xyz" : [ - 1.18949929859866, - 3.12085574565198, - 6.84585114970239 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23852166, - 0.0366917, - 0.83854862 - ], - "xyz" : [ - 1.18935048483241, - 0.246853699515226, - 6.84610755789285 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40630505, - 0.25000793, - 0.75409072 - ], - "xyz" : [ - 2.00408787834035, - 1.68409458198314, - 5.89690235594297 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74902929, - 0.24999573, - 0.9267364 - ], - "xyz" : [ - 3.679443970891, - 1.68401130711681, - 6.90905525046155 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74549685, - 0.75000024, - 0.80111274 - ], - "xyz" : [ - 3.65826358347846, - 5.05271527166356, - 5.8396549984847 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25095492, - 0.75000564, - 0.07329935 - ], - "xyz" : [ - 1.22520082378278, - 5.0529836918925, - 0.286721052955218 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59366155, - 0.74999147, - 0.24596015 - ], - "xyz" : [ - 2.90047161230027, - 5.05288713319162, - 1.29902704511052 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76148788, - 0.53670171, - 0.16143891 - ], - "xyz" : [ - 3.71531781534373, - 3.61598628683288, - 0.349390928168849 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25450917, - 0.24999959, - 0.19888962 - ], - "xyz" : [ - 1.24648638247688, - 1.68426937331254, - 1.35580633045485 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23110117, - 0.74998843, - 0.77457714 - ], - "xyz" : [ - 1.15128194981518, - 5.05252534018115, - 6.30896242414374 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76885137, - 0.25001225, - 0.22538046 - ], - "xyz" : [ - 3.75320600781171, - 1.68446504018711, - 0.886188619803908 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.608e-05, - 0.50000858, - 1.057e-05 - ], - "xyz" : [ - 0.0001939369739208, - 3.36867174417536, - -0.0001291303632384 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83947218, - 0.25000364, - 0.50238286 - ], - "xyz" : [ - 4.10627729750546, - 1.68429056745522, - 3.15876481775135 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.66e-05, - 0.99999283, - 9.2e-06 - ], - "xyz" : [ - 0.000311672209151, - 6.73717957362036, - -0.0003392703047118 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.70665916, - "e_wo_entrp" : -79.70665916, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00355023, - 7.23e-05, - 0.00446813 - ], - [ - 0.01960538, - 0.00083975, - -0.01166286 - ], - [ - -0.00490824, - -0.02410983, - -0.00784988 - ], - [ - -0.01232333, - 0.01196937, - 0.00208189 - ], - [ - -0.0168019, - 0.01477597, - 0.0568302 - ], - [ - -0.02495287, - -0.00095483, - 0.02447731 - ], - [ - -0.0074403, - 0.00043293, - -0.01250556 - ], - [ - 0.02238201, - 0.00103558, - -0.02601513 - ], - [ - 0.00450905, - -0.01553124, - -0.03735933 - ], - [ - 0.01237108, - 0.01153112, - -0.00197831 - ], - [ - 0.00645186, - -0.00027832, - 0.01253499 - ], - [ - -0.00078387, - -0.00141367, - 0.00929284 - ], - [ - 7.634e-05, - 0.00146444, - -0.00886916 - ], - [ - 0.00040288, - 0.00087402, - 0.00041075 - ], - [ - -0.00255353, - 4.711e-05, - -0.00428689 - ], - [ - 0.0004152, - -0.00075468, - 0.00043102 - ] - ], - "stress" : [ - [ - -0.25181621, - 0.06955274, - -0.68307484 - ], - [ - 0.06954893, - -0.34276245, - -0.07519312 - ], - [ - -0.68308196, - -0.07518809, - -1.36685363 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.34489536, - "ewald" : -4769.86229319, - "hartreedc" : -3291.51057818, - "XCdc" : 264.18344131, - "pawpsdc" : 5329.7342364, - "pawaedc" : -5437.28517015, - "eentropy" : 0.0, - "bandstr" : -374.11070741, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70721581, - "e_wo_entrp" : -79.70721581, - "e_0_energy" : -79.70721581 - }, - { - "e_fr_energy" : -79.70675809, - "e_wo_entrp" : -79.70675809, - "e_0_energy" : -79.70675809 - }, - { - "alphaZ" : 265.34489536, - "ewald" : -4769.86229319, - "hartreedc" : -3293.30795274, - "XCdc" : 264.29437731, - "pawpsdc" : 5329.46190542, - "pawaedc" : -5437.06024173, - "eentropy" : 0.0, - "bandstr" : -372.37630964, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70665916, - "e_wo_entrp" : -79.70665916, - "e_0_energy" : -79.70665916 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87503495, - -0.00010314, - -1.3544 - ], - [ - -0.00012155, - 6.74028524, - 4.213e-05 - ], - [ - 0.03119645, - 7.203e-05, - 8.55088908 - ] - ], - "a" : 5.05968033914786, - "b" : 6.74028524122764, - "c" : 8.55094598755858, - "alpha" : 89.9991630075578, - "beta" : 105.317518063952, - "gamma" : 90.0022593505773, - "volume" : 281.25953630278 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16063903, - 0.74998854, - 0.49755777 - ], - "xyz" : [ - 0.798551760570978, - 5.05515595710777, - 4.03702339694734 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76165034, - 0.96320076, - 0.16141803 - ], - "xyz" : [ - 3.717990619629, - 6.49218093610942, - 0.348729029194131 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23827726, - 0.46327565, - 0.83861353 - ], - "xyz" : [ - 1.18771542419295, - 3.12264585516238, - 6.84818807287639 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23830741, - 0.03675093, - 0.83859805 - ], - "xyz" : [ - 1.18791376765536, - 0.247747576226547, - 6.84799690046697 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40618477, - 0.24994075, - 0.75413034 - ], - "xyz" : [ - 2.00366075905484, - 1.68468437421074, - 5.89835876671848 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74893836, - 0.25000296, - 0.92694574 - ], - "xyz" : [ - 3.67998770896652, - 1.68508078364351, - 6.91185862375922 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74521998, - 0.74999604, - 0.80086186 - ], - "xyz" : [ - 3.65786633289204, - 5.05516806256149, - 5.83878658968365 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25106481, - 0.74999839, - 0.07309656 - ], - "xyz" : [ - 1.22613891434002, - 5.05518244846148, - 0.285029995457735 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59388595, - 0.75005973, - 0.24584105 - ], - "xyz" : [ - 2.90279296082804, - 5.05557298177134, - 1.29783201919716 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76168194, - 0.53677373, - 0.16140314 - ], - "xyz" : [ - 3.71819603842377, - 3.61794111553163, - 0.348540942044956 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25479684, - 0.25000525, - 0.19913897 - ], - "xyz" : [ - 1.24832554093208, - 1.68509476073144, - 1.35772893660063 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23109237, - 0.74999463, - 0.77468361 - ], - "xyz" : [ - 1.15065959708624, - 5.05520970026165, - 6.31127371254974 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76886657, - 0.25000615, - 0.22527685 - ], - "xyz" : [ - 3.75524885037627, - 1.6850496885477, - 0.884975006992897 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.155e-05, - 0.50000395, - 7.69e-06 - ], - "xyz" : [ - -4.2289257495e-06, - 3.37016924348934, - 7.11781834387e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83937162, - 0.2500055, - 0.50241981 - ], - "xyz" : [ - 4.10760930985127, - 1.68505799807885, - 3.15930167750839 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.119e-05, - 0.99999702, - 7.02e-06 - ], - "xyz" : [ - -6.67789976115e-05, - 6.7402651533015, - 8.70013797942e-05 - ], - "label" : "Co" - } - ] - } - } - ], - "efermi" : 2.15092374, - "bandgap" : 2.4452, - "cbm" : 4.5251, - "vbm" : 2.0799, - "is_gap_direct" : false, - "epsilon_static" : [], - "epsilon_static_wolfe" : [], - "epsilon_ionic" : [], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87503495, - -0.00010314, - -1.3544 - ], - [ - -0.00012155, - 6.74028524, - 4.213e-05 - ], - [ - 0.03119645, - 7.203e-05, - 8.55088908 - ] - ], - "a" : 5.05968033914786, - "b" : 6.74028524122764, - "c" : 8.55094598755858, - "alpha" : 89.9991630075578, - "beta" : 105.317518063952, - "gamma" : 90.0022593505773, - "volume" : 281.25953630278 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16063903, - 0.74998854, - 0.49755777 - ], - "xyz" : [ - 0.798551760570978, - 5.05515595710777, - 4.03702339694734 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76165034, - 0.96320076, - 0.16141803 - ], - "xyz" : [ - 3.717990619629, - 6.49218093610942, - 0.348729029194131 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23827726, - 0.46327565, - 0.83861353 - ], - "xyz" : [ - 1.18771542419295, - 3.12264585516238, - 6.84818807287639 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23830741, - 0.03675093, - 0.83859805 - ], - "xyz" : [ - 1.18791376765536, - 0.247747576226547, - 6.84799690046697 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40618477, - 0.24994075, - 0.75413034 - ], - "xyz" : [ - 2.00366075905484, - 1.68468437421074, - 5.89835876671848 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74893836, - 0.25000296, - 0.92694574 - ], - "xyz" : [ - 3.67998770896652, - 1.68508078364351, - 6.91185862375922 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74521998, - 0.74999604, - 0.80086186 - ], - "xyz" : [ - 3.65786633289204, - 5.05516806256149, - 5.83878658968365 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25106481, - 0.74999839, - 0.07309656 - ], - "xyz" : [ - 1.22613891434002, - 5.05518244846148, - 0.285029995457735 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59388595, - 0.75005973, - 0.24584105 - ], - "xyz" : [ - 2.90279296082804, - 5.05557298177134, - 1.29783201919716 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76168194, - 0.53677373, - 0.16140314 - ], - "xyz" : [ - 3.71819603842377, - 3.61794111553163, - 0.348540942044956 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25479684, - 0.25000525, - 0.19913897 - ], - "xyz" : [ - 1.24832554093208, - 1.68509476073144, - 1.35772893660063 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23109237, - 0.74999463, - 0.77468361 - ], - "xyz" : [ - 1.15065959708624, - 5.05520970026165, - 6.31127371254974 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76886657, - 0.25000615, - 0.22527685 - ], - "xyz" : [ - 3.75524885037627, - 1.6850496885477, - 0.884975006992897 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.155e-05, - 0.50000395, - 7.69e-06 - ], - "xyz" : [ - -4.2289257495e-06, - 3.37016924348934, - 7.11781834387e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83937162, - 0.2500055, - 0.50241981 - ], - "xyz" : [ - 4.10760930985127, - 1.68505799807885, - 3.15930167750839 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.119e-05, - 0.99999702, - 7.02e-06 - ], - "xyz" : [ - -6.67789976115e-05, - 6.7402651533015, - 8.70013797942e-05 - ], - "label" : "Co" - } - ] - }, - "energy" : -79.70665916, - "energy_per_atom" : -4.9816661975, - "is_metal" : false, - "outcar" : { - "@module" : "pymatgen.io.vasp.outputs", - "@class" : "Outcar", - "efermi" : 2.1509, - "magnetization" : [ - { - "s" : 0.003, - "p" : 0.062, - "d" : 0.0, - "tot" : 0.065 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.0, - "p" : 0.026, - "d" : 0.005, - "tot" : 0.032 - }, - { - "s" : 0.01, - "p" : 0.073, - "d" : 0.0, - "tot" : 0.083 - }, - { - "s" : 0.01, - "p" : 0.094, - "d" : 0.0, - "tot" : 0.104 - }, - { - "s" : 0.01, - "p" : 0.073, - "d" : 0.0, - "tot" : 0.083 - }, - { - "s" : 0.0, - "p" : 0.026, - "d" : 0.005, - "tot" : 0.032 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.01, - "p" : 0.094, - "d" : 0.0, - "tot" : 0.104 - }, - { - "s" : 0.02, - "p" : 0.018, - "d" : 2.645, - "tot" : 2.683 - }, - { - "s" : 0.02, - "p" : 0.018, - "d" : 2.645, - "tot" : 2.683 - }, - { - "s" : 0.014, - "p" : 0.01, - "d" : 2.673, - "tot" : 2.697 - }, - { - "s" : 0.003, - "p" : 0.062, - "d" : 0.0, - "tot" : 0.065 - }, - { - "s" : 0.014, - "p" : 0.01, - "d" : 2.673, - "tot" : 2.697 - } - ], - "charge" : [ - { - "s" : 1.597, - "p" : 3.533, - "d" : 0.0, - "tot" : 5.13 - }, - { - "s" : 1.568, - "p" : 3.467, - "d" : 0.0, - "tot" : 5.036 - }, - { - "s" : 1.568, - "p" : 3.467, - "d" : 0.0, - "tot" : 5.035 - }, - { - "s" : 1.568, - "p" : 3.467, - "d" : 0.0, - "tot" : 5.035 - }, - { - "s" : 1.429, - "p" : 1.538, - "d" : 0.23, - "tot" : 3.197 - }, - { - "s" : 1.57, - "p" : 3.438, - "d" : 0.0, - "tot" : 5.007 - }, - { - "s" : 1.597, - "p" : 3.548, - "d" : 0.0, - "tot" : 5.145 - }, - { - "s" : 1.57, - "p" : 3.438, - "d" : 0.0, - "tot" : 5.008 - }, - { - "s" : 1.428, - "p" : 1.539, - "d" : 0.231, - "tot" : 3.198 - }, - { - "s" : 1.568, - "p" : 3.467, - "d" : 0.0, - "tot" : 5.035 - }, - { - "s" : 1.597, - "p" : 3.548, - "d" : 0.0, - "tot" : 5.145 - }, - { - "s" : 0.303, - "p" : 0.345, - "d" : 7.092, - "tot" : 7.74 - }, - { - "s" : 0.303, - "p" : 0.344, - "d" : 7.092, - "tot" : 7.74 - }, - { - "s" : 0.288, - "p" : 0.34, - "d" : 7.085, - "tot" : 7.713 - }, - { - "s" : 1.597, - "p" : 3.532, - "d" : 0.0, - "tot" : 5.13 - }, - { - "s" : 0.288, - "p" : 0.34, - "d" : 7.085, - "tot" : 7.713 - } - ], - "total_magnetization" : 12.0000006, - "nelect" : 111.9999991, - "is_stopped" : false - } - }, - "formula_pretty" : "Co2TeCl2O3", - "composition_reduced" : { - "Co" : 2.0, - "Te" : 1.0, - "Cl" : 2.0, - "O" : 3.0 - }, - "composition_unit_cell" : { - "Cl" : 4.0, - "O" : 6.0, - "Te" : 2.0, - "Co" : 4.0 - }, - "formula_anonymous" : "AB2C2D3", - "formula_reduced_abc" : "Cl2 Co2 O3 Te1", - "dir_name" : "/global/projecta/projectdirs/matgen/garden/block_2013-06-23-09-28-21-424493/launcher_2013-06-23-20-21-15-188214", - "completed_at" : "2013-06-23 16:27:42", - "task" : { - "type" : "relax2", - "name" : "relax2" - }, - "output_file_paths" : {} - }, - { - "vasp_version" : "5.2.2", - "has_vasp_completed" : true, - "nsites" : 16, - "elements" : [ - "Cl", - "Co", - "O", - "Te" - ], - "nelements" : 4, - "run_type" : "GGA+U", - "input" : { - "incar" : { - "PREC" : "accurate", - "ALGO" : "Fast", - "ISPIN" : 2, - "ICHARG" : 1, - "NELM" : 100, - "IBRION" : 1, - "EDIFF" : 0.0001, - "NSW" : 99, - "ISIF" : 3, - "ENCUT" : 520.0, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "LREAL" : "Auto", - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LMAXMIX" : 4, - "LWAVE" : false, - "LORBIT" : false, - "LPEAD" : false, - "LCALCPOL" : false, - "LCALCEPS" : false, - "EFIELD_PEAD" : [ - 0.0, - 0.0, - 0.0 - ], - "LEFG" : false, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2 - ], - "LDAUU" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.32, - 0.0, - 3.32 - ], - "LDAUJ" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "kpoints" : { - "comment" : "Kpoints from vasprun.xml", - "nkpoints" : 0, - "generation_style" : "Monkhorst", - "kpoints" : [ - [ - 6, - 4, - 4 - ] - ], - "usershift" : [ - 0.0, - 0.0, - 0.0 - ], - "kpts_weights" : null, - "coord_type" : null, - "labels" : null, - "tet_number" : 0, - "tet_weight" : 0, - "tet_connections" : null, - "genvec1" : [ - 0.16666667, - 0.0, - 0.0 - ], - "genvec2" : [ - 0.0, - 0.25, - 0.0 - ], - "genvec3" : [ - 0.0, - 0.0, - 0.25 - ], - "shift" : [ - 0.5, - 0.5, - 0.5 - ], - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Kpoints", - "actual_points" : [ - { - "abc" : [ - 0.08333333, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.375, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.125, - 0.125 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - 0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.375, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.08333333, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.25, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - 0.41666667, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.41666667, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.25, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - }, - { - "abc" : [ - -0.08333333, - -0.125, - 0.375 - ], - "weight" : 0.02083333 - } - ] - }, - "potcar" : [ - "Cl", - "O", - "Te", - "O", - "Cl", - "O", - "Te", - "O", - "Cl", - "Co", - "Cl", - "Co" - ], - "potcar_spec" : [ - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - } - ], - "potcar_type" : [ - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE", - "PAW_PBE" - ], - "parameters" : { - "SYSTEM" : "unknown system", - "LCOMPAT" : false, - "PREC" : "accura", - "ENMAX" : 520.0, - "ENAUG" : 605.392, - "EDIFF" : 0.0001, - "IALGO" : 68, - "IWAVPR" : 11, - "NBANDS" : 81, - "NELECT" : 112.0, - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LREAL" : true, - "ROPT" : [ - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025 - ], - "LMAXPAW" : -100, - "LMAXMIX" : 4, - "ISTART" : 0, - "ICHARG" : 1, - "INIWAV" : 1, - "ISPIN" : 2, - "LNONCOLLINEAR" : false, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "NUPDOWN" : -1.0, - "LSORBIT" : false, - "SAXIS" : [ - 0.0, - 0.0, - 1.0 - ], - "LSPIRAL" : false, - "QSPIRAL" : [ - 0.0, - 0.0, - 0.0 - ], - "LZEROZ" : false, - "LASPH" : false, - "LMETAGGA" : false, - "NELM" : 100, - "NELMDL" : -5, - "NELMIN" : 2, - "ENINI" : 520.0, - "LDIAG" : true, - "WEIMIN" : 0.001, - "EBREAK" : 3.1e-07, - "DEPER" : 0.3, - "NRMM" : 4, - "TIME" : 0.4, - "AMIX" : 0.4, - "BMIX" : 1.0, - "AMIN" : 0.1, - "AMIX_MAG" : 1.6, - "BMIX_MAG" : 1.0, - "IMIX" : 4, - "MAXMIX" : -45, - "WC" : 100.0, - "INIMIX" : 1, - "MIXPRE" : 1, - "MREMOVE" : 5, - "LDIPOL" : false, - "LMONO" : false, - "IDIPOL" : 0, - "EPSILON" : 1.0, - "DIPOL" : [ - -100.0, - -100.0, - -100.0 - ], - "EFIELD" : 0.0, - "NGX" : 40, - "NGY" : 50, - "NGZ" : 64, - "NGXF" : 80, - "NGYF" : 100, - "NGZF" : 128, - "ADDGRID" : false, - "NSW" : 99, - "IBRION" : 1, - "ISIF" : 3, - "PSTRESS" : 0.0, - "EDIFFG" : 0.001, - "NFREE" : 0, - "POTIM" : 0.5, - "SMASS" : -3.0, - "TEBEG" : 0.0001, - "TEEND" : 0.0001, - "NBLOCK" : 1, - "KBLOCK" : 99, - "NPACO" : 256, - "APACO" : 16.0, - "ISYM" : 2, - "SYMPREC" : 1e-05, - "LORBIT" : false, - "RWIGS" : [ - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0 - ], - "NEDOS" : 301, - "EMIN" : 10.0, - "EMAX" : -10.0, - "EFERMI" : 0.0, - "NWRITE" : 2, - "LWAVE" : false, - "LCHARG" : true, - "LPARD" : false, - "LVTOT" : false, - "LELF" : false, - "LOPTICS" : false, - "STM" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "NPAR" : 1, - "NSIM" : 4, - "NBLK" : 32, - "LPLANE" : true, - "LSCALAPACK" : false, - "LSCAAWARE" : false, - "LSCALU" : false, - "LASYNC" : false, - "IDIOT" : 3, - "LMUSIC" : false, - "POMASS" : [ - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 58.933, - 35.453, - 58.933 - ], - "LCORR" : true, - "LREAL_COMPAT" : false, - "GGA_COMPAT" : true, - "LBERRY" : false, - "ICORELEVEL" : 0, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0 - ], - "LDAUU" : [ - 0.0 - ], - "LDAUJ" : [ - 0.0 - ], - "LDAUPRINT" : 0, - "I_CONSTRAINED_M" : 0, - "GGA" : "--", - "VOSKOWN" : 0, - "LHFCALC" : false, - "LHFONE" : false, - "LRHFCALC" : false, - "LTHOMAS" : false, - "LMODELHF" : false, - "ENCUTFOCK" : 0.0, - "ENCUT4O" : -1.0, - "EXXOEP" : 0, - "FOURORBIT" : 0, - "AEXX" : 0.0, - "HFALPHA" : 0.0, - "ALDAX" : 1.0, - "AGGAX" : 1.0, - "ALDAC" : 1.0, - "AGGAC" : 1.0, - "NKREDX" : 1, - "NKREDY" : 1, - "NKREDZ" : 1, - "SHIFTRED" : false, - "ODDONLY" : false, - "EVENONLY" : false, - "LMAXFOCK" : 0, - "NMAXFOCKAE" : 0, - "HFSCREEN" : 0.0, - "HFSCREENC" : 0.0, - "MODEL_GW" : 0, - "MODEL_EPS0" : 10.31900526, - "MODEL_ALPHA" : 1.0, - "LEPSILON" : false, - "LRPA" : false, - "LNABLA" : false, - "LVEL" : false, - "KINTER" : 0, - "CSHIFT" : 0.1, - "OMEGAMAX" : -1.0, - "ORBITALMAG" : false, - "LMAGBLOCH" : false, - "LCHIMAG" : false, - "LGAUGE" : true, - "MAGATOM" : 0, - "MAGDIPOL" : [ - 0.0, - 0.0, - 0.0 - ], - "AVECCONST" : [ - 0.0, - 0.0, - 0.0 - ], - "LTCTE" : false, - "LTETE" : false, - "L2ORDER" : false, - "LGWLF" : false, - "ENCUTGW" : 346.66666667, - "ENCUTGWSOFT" : -2.0, - "ENCUTLF" : -1.0, - "LMAXMP2" : -1, - "SCISSOR" : 0.0, - "NOMEGA" : 0, - "NOMEGAR" : 0, - "NBANDSGW" : -1, - "NBANDSLF" : -1, - "DIM" : 3, - "ANTIRES" : 0, - "LUSEW" : false, - "OMEGATL" : -200.0, - "OMEGAGRID" : 0, - "SELFENERGY" : false, - "LSPECTRAL" : false, - "ODDONLYGW" : false, - "EVENONLYGW" : false, - "NKREDLFX" : 1, - "NKREDLFY" : 1, - "NKREDLFZ" : 1, - "MAXMEM" : 1024, - "TELESCOPE" : 0 - }, - "lattice_rec" : { - "@module" : "pymatgen.core.lattice", - "@class" : "Lattice", - "matrix" : [ - [ - 1.28829954556587, - -4.43641227733992e-05, - -0.00490102555948716 - ], - [ - -3.12015773925877e-05, - 0.932606918914148, - 5.26418576014685e-05 - ], - [ - 0.203941785959322, - 3.61165266373353e-05, - 0.734167429963691 - ] - ] - }, - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.85343059, - 6.041e-05, - -1.29721956 - ], - [ - 6.911e-05, - 6.66863986, - -8.241e-05 - ], - [ - 0.10998805, - -8.619e-05, - 8.47259034 - ] - ], - "a" : 5.02380006394002, - "b" : 6.66863986086731, - "c" : 8.4733042225588, - "alpha" : 90.0012830945821, - "beta" : 104.220410448655, - "gamma" : 89.9985545579525, - "volume" : 275.17347329123 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16069209, - 0.7499791, - 0.50056639 - ], - "xyz" : [ - 0.835016057364274, - 5.00130708401893, - 4.03257923237976 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76410709, - 0.96455099, - 0.16327596 - ], - "xyz" : [ - 3.72656578921308, - 6.43227526587078, - 0.39207616972046 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23585032, - 0.46457567, - 0.83671644 - ], - "xyz" : [ - 1.23674407421238, - 3.09802996207607, - 6.78316769284597 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23586763, - 0.03542795, - 0.83672884 - ], - "xyz" : [ - 1.23679979254879, - 0.236198370632896, - 6.7832856641592 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.41254978, - 0.24997739, - 0.75140053 - ], - "xyz" : [ - 2.08494407715086, - 1.66696934597329, - 5.83112062722247 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.75476504, - 0.24998253, - 0.92230702 - ], - "xyz" : [ - 3.76465976032233, - 1.66700956557566, - 6.83521297401371 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74125699, - 0.75000821, - 0.80351893 - ], - "xyz" : [ - 3.6860686636335, - 5.00151016857144, - 5.84625184973383 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24522244, - 0.75001634, - 0.07775203 - ], - "xyz" : [ - 1.19877371944294, - 5.00159697301545, - 0.340591943727884 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.58752069, - 0.75003314, - 0.24860474 - ], - "xyz" : [ - 2.87888627446757, - 5.0017149586073, - 1.34412097739845 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76411473, - 0.53544709, - 0.16329301 - ], - "xyz" : [ - 3.72657508934851, - 3.57073589324131, - 0.392246079080718 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25875702, - 0.24998979, - 0.19648892 - ], - "xyz" : [ - 1.27748794619703, - 1.66709057431859, - 1.32908485621913 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23316513, - 0.75000373, - 0.77512103 - ], - "xyz" : [ - 1.2169566578248, - 5.00145204685061, - 6.26475477595552 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76679262, - 0.24999602, - 0.22482379 - ], - "xyz" : [ - 3.7463199655749, - 1.66716036819307, - 0.910120884056533 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.411e-05, - 0.50000433, - 1.353e-05 - ], - "xyz" : [ - 0.0001045253431877, - 3.33434880489683, - 5.51250224733e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83930639, - 0.25001415, - 0.49937727 - ], - "xyz" : [ - 4.128458118228, - 1.66726198742614, - 3.14223376421048 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.794e-05, - 0.99999356, - 1.156e-05 - ], - "xyz" : [ - 0.0001574515615742, - 6.6685969140467, - -7.73844385560001e-06 - ], - "label" : "Co" - } - ] - } - }, - "output" : { - "ionic_steps" : [ - { - "e_fr_energy" : -79.62002633, - "e_wo_entrp" : -79.62002633, - "e_0_energy" : 0.0, - "forces" : [ - [ - -0.04315506, - 0.00035431, - -0.2874263 - ], - [ - -0.21239471, - -0.30871734, - 0.11157034 - ], - [ - 0.2176578, - -0.31623822, - -0.11780493 - ], - [ - 0.21628199, - 0.31434342, - -0.11704698 - ], - [ - -0.20414623, - 0.00194471, - 0.24690134 - ], - [ - -0.27282087, - 0.00088335, - 0.04163503 - ], - [ - 0.0419438, - -0.00025288, - -0.12917517 - ], - [ - 0.27264313, - -0.00064435, - -0.04262544 - ], - [ - 0.19622077, - -0.00376705, - -0.2373801 - ], - [ - -0.21388363, - 0.31137711, - 0.11263194 - ], - [ - -0.04267438, - 0.00037017, - 0.12905829 - ], - [ - -0.03765601, - -0.0006842, - 0.06194264 - ], - [ - 0.03719411, - 0.00105286, - -0.06176363 - ], - [ - 0.00034701, - 0.00056794, - 0.00024055 - ], - [ - 0.04403465, - -0.0002352, - 0.28908378 - ], - [ - 0.00040763, - -0.00035462, - 0.00015864 - ] - ], - "stress" : [ - [ - 6.95102257, - 0.02425011, - -3.58641172 - ], - [ - 0.02425697, - 16.9251919, - -0.02529413 - ], - [ - -3.58642498, - -0.02529036, - 16.7309935 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 271.21357809, - "ewald" : -4808.35925884, - "hartreedc" : -3281.48881068, - "XCdc" : 263.86403288, - "pawpsdc" : 5345.84278029, - "pawaedc" : -5455.51211834, - "eentropy" : 0.0, - "bandstr" : 837.78407636, - "atom" : 7933.79896004, - "e_fr_energy" : 1107.14323981, - "e_wo_entrp" : 1107.14323981, - "e_0_energy" : 1107.14323981 - }, - { - "e_fr_energy" : 107.8029642, - "e_wo_entrp" : 107.8029642, - "e_0_energy" : 107.8029642 - }, - { - "e_fr_energy" : -69.07227821, - "e_wo_entrp" : -69.07227821, - "e_0_energy" : -69.07227821 - }, - { - "e_fr_energy" : -79.04805464, - "e_wo_entrp" : -79.04805464, - "e_0_energy" : -79.04805464 - }, - { - "e_fr_energy" : -79.33508878, - "e_wo_entrp" : -79.33508878, - "e_0_energy" : -79.33508878 - }, - { - "e_fr_energy" : -79.50981735, - "e_wo_entrp" : -79.50981735, - "e_0_energy" : -79.50981735 - }, - { - "e_fr_energy" : -79.54751142, - "e_wo_entrp" : -79.54751142, - "e_0_energy" : -79.54751142 - }, - { - "e_fr_energy" : -79.55941015, - "e_wo_entrp" : -79.55941015, - "e_0_energy" : -79.55941015 - }, - { - "e_fr_energy" : -79.5712618, - "e_wo_entrp" : -79.5712618, - "e_0_energy" : -79.5712618 - }, - { - "e_fr_energy" : -79.57523624, - "e_wo_entrp" : -79.57523624, - "e_0_energy" : -79.57523624 - }, - { - "e_fr_energy" : -79.58191955, - "e_wo_entrp" : -79.58191955, - "e_0_energy" : -79.58191955 - }, - { - "e_fr_energy" : -79.58932415, - "e_wo_entrp" : -79.58932415, - "e_0_energy" : -79.58932415 - }, - { - "e_fr_energy" : -79.60324514, - "e_wo_entrp" : -79.60324514, - "e_0_energy" : -79.60324514 - }, - { - "e_fr_energy" : -79.60727567, - "e_wo_entrp" : -79.60727567, - "e_0_energy" : -79.60727567 - }, - { - "e_fr_energy" : -79.61161721, - "e_wo_entrp" : -79.61161721, - "e_0_energy" : -79.61161721 - }, - { - "e_fr_energy" : -79.61490422, - "e_wo_entrp" : -79.61490422, - "e_0_energy" : -79.61490422 - }, - { - "e_fr_energy" : -79.61768352, - "e_wo_entrp" : -79.61768352, - "e_0_energy" : -79.61768352 - }, - { - "e_fr_energy" : -79.61844036, - "e_wo_entrp" : -79.61844036, - "e_0_energy" : -79.61844036 - }, - { - "e_fr_energy" : -79.61898493, - "e_wo_entrp" : -79.61898493, - "e_0_energy" : -79.61898493 - }, - { - "e_fr_energy" : -79.61933486, - "e_wo_entrp" : -79.61933486, - "e_0_energy" : -79.61933486 - }, - { - "e_fr_energy" : -79.61967221, - "e_wo_entrp" : -79.61967221, - "e_0_energy" : -79.61967221 - }, - { - "e_fr_energy" : -79.61985635, - "e_wo_entrp" : -79.61985635, - "e_0_energy" : -79.61985635 - }, - { - "e_fr_energy" : -79.61996185, - "e_wo_entrp" : -79.61996185, - "e_0_energy" : -79.61996185 - }, - { - "alphaZ" : 271.21357809, - "ewald" : -4808.35925884, - "hartreedc" : -3279.92743426, - "XCdc" : 264.85688085, - "pawpsdc" : 5356.13079812, - "pawaedc" : -5464.15819651, - "eentropy" : 0.0, - "bandstr" : -353.17535382, - "atom" : 7933.79896004, - "e_fr_energy" : -79.62002633, - "e_wo_entrp" : -79.62002633, - "e_0_energy" : -79.62002633 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.85343059, - 6.041e-05, - -1.29721956 - ], - [ - 6.911e-05, - 6.66863986, - -8.241e-05 - ], - [ - 0.10998805, - -8.619e-05, - 8.47259034 - ] - ], - "a" : 5.02380006394002, - "b" : 6.66863986086731, - "c" : 8.4733042225588, - "alpha" : 90.0012830945821, - "beta" : 104.220410448655, - "gamma" : 89.9985545579525, - "volume" : 275.17347329123 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16069209, - 0.7499791, - 0.50056639 - ], - "xyz" : [ - 0.835016057364274, - 5.00130708401893, - 4.03257923237976 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76410709, - 0.96455099, - 0.16327596 - ], - "xyz" : [ - 3.72656578921308, - 6.43227526587078, - 0.39207616972046 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23585032, - 0.46457567, - 0.83671644 - ], - "xyz" : [ - 1.23674407421238, - 3.09802996207607, - 6.78316769284597 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23586763, - 0.03542795, - 0.83672884 - ], - "xyz" : [ - 1.23679979254879, - 0.236198370632896, - 6.7832856641592 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.41254978, - 0.24997739, - 0.75140053 - ], - "xyz" : [ - 2.08494407715086, - 1.66696934597329, - 5.83112062722247 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.75476504, - 0.24998253, - 0.92230702 - ], - "xyz" : [ - 3.76465976032233, - 1.66700956557566, - 6.83521297401371 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74125699, - 0.75000821, - 0.80351893 - ], - "xyz" : [ - 3.6860686636335, - 5.00151016857144, - 5.84625184973383 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24522244, - 0.75001634, - 0.07775203 - ], - "xyz" : [ - 1.19877371944294, - 5.00159697301545, - 0.340591943727884 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.58752069, - 0.75003314, - 0.24860474 - ], - "xyz" : [ - 2.87888627446757, - 5.0017149586073, - 1.34412097739845 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76411473, - 0.53544709, - 0.16329301 - ], - "xyz" : [ - 3.72657508934851, - 3.57073589324131, - 0.392246079080718 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25875702, - 0.24998979, - 0.19648892 - ], - "xyz" : [ - 1.27748794619703, - 1.66709057431859, - 1.32908485621913 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23316513, - 0.75000373, - 0.77512103 - ], - "xyz" : [ - 1.2169566578248, - 5.00145204685061, - 6.26475477595552 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76679262, - 0.24999602, - 0.22482379 - ], - "xyz" : [ - 3.7463199655749, - 1.66716036819307, - 0.910120884056533 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.411e-05, - 0.50000433, - 1.353e-05 - ], - "xyz" : [ - 0.0001045253431877, - 3.33434880489683, - 5.51250224733e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83930639, - 0.25001415, - 0.49937727 - ], - "xyz" : [ - 4.128458118228, - 1.66726198742614, - 3.14223376421048 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.794e-05, - 0.99999356, - 1.156e-05 - ], - "xyz" : [ - 0.0001574515615742, - 6.6685969140467, - -7.73844385560001e-06 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.67416304, - "e_wo_entrp" : -79.67416304, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00648512, - -4.462e-05, - -0.00314886 - ], - [ - 0.00453115, - 0.10691686, - -0.11407836 - ], - [ - -0.01061841, - 0.11726104, - 0.12258921 - ], - [ - -0.00953802, - -0.11512931, - 0.12042213 - ], - [ - -0.03071565, - -0.00222281, - -0.04023571 - ], - [ - -0.02409982, - 0.00100478, - 0.2006915 - ], - [ - 0.13492428, - -0.00058858, - -0.04419044 - ], - [ - 0.02521633, - -0.00108627, - -0.20069214 - ], - [ - 0.03876102, - 0.00443989, - 0.02896765 - ], - [ - 0.00656711, - -0.11075302, - -0.11750468 - ], - [ - -0.1344931, - 0.00061276, - 0.04374877 - ], - [ - -0.04142719, - -4.284e-05, - -0.06490821 - ], - [ - 0.04147275, - -0.00032162, - 0.06486384 - ], - [ - -0.00019875, - -0.00037306, - -0.00034301 - ], - [ - -0.0064927, - -0.00011681, - 0.00396751 - ], - [ - -0.00037411, - 0.00044359, - -0.00014923 - ] - ], - "stress" : [ - [ - -1.22708945, - -0.03577723, - -3.55987104 - ], - [ - -0.03577522, - 1.28384878, - 0.04145048 - ], - [ - -3.5598628, - 0.04144923, - 0.13164555 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.59255881, - "ewald" : -4783.40661256, - "hartreedc" : -3246.8985217, - "XCdc" : 262.16509213, - "pawpsdc" : 5356.10906106, - "pawaedc" : -5464.13909279, - "eentropy" : 0.0, - "bandstr" : -403.17815504, - "atom" : 7933.79896004, - "e_fr_energy" : -79.95671004, - "e_wo_entrp" : -79.95671004, - "e_0_energy" : -79.95671004 - }, - { - "e_fr_energy" : -79.71234733, - "e_wo_entrp" : -79.71234733, - "e_0_energy" : -79.71234733 - }, - { - "e_fr_energy" : -79.67863973, - "e_wo_entrp" : -79.67863973, - "e_0_energy" : -79.67863973 - }, - { - "e_fr_energy" : -79.67494131, - "e_wo_entrp" : -79.67494131, - "e_0_energy" : -79.67494131 - }, - { - "e_fr_energy" : -79.67435008, - "e_wo_entrp" : -79.67435008, - "e_0_energy" : -79.67435008 - }, - { - "e_fr_energy" : -79.67410738, - "e_wo_entrp" : -79.67410738, - "e_0_energy" : -79.67410738 - }, - { - "alphaZ" : 265.59255881, - "ewald" : -4783.40661256, - "hartreedc" : -3279.80365223, - "XCdc" : 264.30004373, - "pawpsdc" : 5331.07886014, - "pawaedc" : -5438.60461366, - "eentropy" : 0.0, - "bandstr" : -372.62970732, - "atom" : 7933.79896004, - "e_fr_energy" : -79.67416304, - "e_wo_entrp" : -79.67416304, - "e_0_energy" : -79.67416304 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87331032, - 0.00013888, - -1.31747291 - ], - [ - 0.00015328, - 6.727089, - -0.0001706 - ], - [ - 0.0946483, - -0.00019653, - 8.54579436 - ] - ], - "a" : 5.04825597240176, - "b" : 6.7270890039095, - "c" : 8.54631848123651, - "alpha" : 90.0027560484592, - "beta" : 104.493424596841, - "gamma" : 89.9967842891682, - "volume" : 280.997264034194 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16030158, - 0.74998164, - 0.49887 - ], - "xyz" : [ - 0.828531498733085, - 5.04511746040829, - 4.05191949642522 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76198889, - 0.96231767, - 0.1635869 - ], - "xyz" : [ - 3.72903904740207, - 6.47367028764622, - 0.393916115699412 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23802152, - 0.4622879, - 0.83637806 - ], - "xyz" : [ - 1.2391853508237, - 3.10972052997167, - 6.83384913706298 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23802504, - 0.03770197, - 0.83639272 - ], - "xyz" : [ - 1.23913881188875, - 0.253493188321624, - 6.83404221526331 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.41049585, - 0.24999149, - 0.75249191 - ], - "xyz" : [ - 2.07173406086301, - 1.68162412490119, - 5.88978130983301 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.75205725, - 0.24998894, - 0.92212951 - ], - "xyz" : [ - 3.75232466646188, - 1.68162106799394, - 6.8894714639903 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74168907, - 0.75000637, - 0.80284957 - ], - "xyz" : [ - 3.69058430699483, - 5.04530482330898, - 5.88370411877961 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.2479286, - 0.75001165, - 0.07792366 - ], - "xyz" : [ - 1.21572330873764, - 5.04541423857392, - 0.339152408036842 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.58949489, - 0.75000586, - 0.24755537 - ], - "xyz" : [ - 2.89633718684886, - 5.045389387735, - 1.33878578557557 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76198158, - 0.5376997, - 0.16360775 - ], - "xyz" : [ - 3.72894031147825, - 3.61722740734402, - 0.394176366064472 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25831771, - 0.24999248, - 0.19715651 - ], - "xyz" : [ - 1.27756120933453, - 1.68171879028537, - 1.34448975737996 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23278416, - 0.74999879, - 0.77541541 - ], - "xyz" : [ - 1.20793615942537, - 5.04518854689592, - 6.31972586296441 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76716899, - 0.25000363, - 0.22452973 - ], - "xyz" : [ - 3.75994223395134, - 1.68185908693456, - 0.908017887949984 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.751e-05, - 0.50000844, - 1.542e-05 - ], - "xyz" : [ - 0.0001634324341724, - 3.36360127603246, - 2.34057585131e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.8397054, - 0.25001247, - 0.50108439 - ], - "xyz" : [ - 4.13961009916117, - 1.68187427697062, - 3.17583238493794 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 2.196e-05, - 0.99999099, - 1.308e-05 - ], - "xyz" : [ - 0.0002615345133384, - 6.7270283894073, - -8.77511777688e-05 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.68227778, - "e_wo_entrp" : -79.68227778, - "e_0_energy" : 0.0, - "forces" : [ - [ - -0.00456832, - 0.00029432, - -0.03803005 - ], - [ - -0.06976719, - -0.04241796, - 0.01116367 - ], - [ - 0.07652974, - -0.05397549, - -0.01987664 - ], - [ - 0.07470403, - 0.05076917, - -0.01793897 - ], - [ - -0.15299433, - 0.00277747, - 0.24819119 - ], - [ - -0.08277096, - -0.000167, - 0.11069304 - ], - [ - 0.08667091, - 0.00011478, - -0.05251929 - ], - [ - 0.08145027, - 0.00028169, - -0.11185556 - ], - [ - 0.14546473, - -0.00538121, - -0.23597384 - ], - [ - -0.07246812, - 0.04755731, - 0.01432551 - ], - [ - -0.08729012, - -8.003e-05, - 0.05241377 - ], - [ - -0.02961264, - -0.00053011, - -0.01021237 - ], - [ - 0.02907, - 0.00081592, - 0.01047468 - ], - [ - 0.00021057, - 0.00060335, - 0.00018613 - ], - [ - 0.00515782, - -0.00019386, - 0.0389091 - ], - [ - 0.00021361, - -0.00046836, - 4.965e-05 - ] - ], - "stress" : [ - [ - -3.07779505, - 0.03791138, - -1.32818293 - ], - [ - 0.03790942, - -2.86491439, - -0.0501616 - ], - [ - -1.32820209, - -0.05015391, - -1.53193921 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.56824532, - "ewald" : -4781.55847949, - "hartreedc" : -3282.94035091, - "XCdc" : 264.28142865, - "pawpsdc" : 5330.46613643, - "pawaedc" : -5437.98077719, - "eentropy" : 0.0, - "bandstr" : -371.31233048, - "atom" : 7933.79896004, - "e_fr_energy" : -79.67716764, - "e_wo_entrp" : -79.67716764, - "e_0_energy" : -79.67716764 - }, - { - "e_fr_energy" : -79.68342676, - "e_wo_entrp" : -79.68342676, - "e_0_energy" : -79.68342676 - }, - { - "e_fr_energy" : -79.68263073, - "e_wo_entrp" : -79.68263073, - "e_0_energy" : -79.68263073 - }, - { - "e_fr_energy" : -79.68222095, - "e_wo_entrp" : -79.68222095, - "e_0_energy" : -79.68222095 - }, - { - "alphaZ" : 265.56824532, - "ewald" : -4781.55847949, - "hartreedc" : -3282.88641277, - "XCdc" : 264.23937498, - "pawpsdc" : 5328.80441215, - "pawaedc" : -5436.32977926, - "eentropy" : 0.0, - "bandstr" : -371.31859876, - "atom" : 7933.79896004, - "e_fr_energy" : -79.68227778, - "e_wo_entrp" : -79.68227778, - "e_0_energy" : -79.68227778 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87265857, - 2.329e-05, - -1.32632573 - ], - [ - 3.19e-05, - 6.73145258, - -3.001e-05 - ], - [ - 0.07921909, - -1.94e-05, - 8.54619253 - ] - ], - "a" : 5.04994470092464, - "b" : 6.73145258014248, - "c" : 8.54655968354663, - "alpha" : 90.0003829637163, - "beta" : 104.695776223085, - "gamma" : 89.9994066785021, - "volume" : 281.022989943888 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16036306, - 0.74998133, - 0.4988625 - ], - "xyz" : [ - 0.820937796309976, - 5.0484578157035, - 4.05065881143788 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76204351, - 0.96305023, - 0.16298004 - ], - "xyz" : [ - 3.72611969147368, - 6.48274154158366, - 0.382111984557187 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23790856, - 0.46309137, - 0.83702186 - ], - "xyz" : [ - 1.22557006643437, - 3.11726690002851, - 6.83779182549144 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23792254, - 0.03691315, - 0.83702641 - ], - "xyz" : [ - 1.22562495156282, - 0.24846842170703, - 6.83782495824213 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.4102104, - 0.24997626, - 0.75223089 - ], - "xyz" : [ - 2.05841424188151, - 1.6826983008367, - 5.8846299029321 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.75180903, - 0.24999586, - 0.92317369 - ], - "xyz" : [ - 3.73644966753456, - 1.68283487684904, - 6.89246893045944 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74296602, - 0.75000231, - 0.80280808 - ], - "xyz" : [ - 3.68384139518773, - 5.04860671385731, - 5.87551495990863 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24818735, - 0.75000417, - 0.0768811 - ], - "xyz" : [ - 1.21544659385631, - 5.0486217939473, - 0.327840906727526 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.58985738, - 0.75003628, - 0.2477675 - ], - "xyz" : [ - 2.89382545977365, - 5.04884258318848, - 1.33510322896363 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76205581, - 0.53694082, - 0.16298541 - ], - "xyz" : [ - 3.72616645769043, - 3.61440625445918, - 0.382154351347988 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25704488, - 0.24999671, - 0.19719625 - ], - "xyz" : [ - 1.26812161977808, - 1.68284315948902, - 1.34434437818398 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23240028, - 0.74999849, - 0.77500613 - ], - "xyz" : [ - 1.19382642132725, - 5.0485696479902, - 6.31509062043232 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.7675533, - 0.25000143, - 0.22493883 - ], - "xyz" : [ - 3.75785258964066, - 1.68288628348024, - 0.904337355173617 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.567e-05, - 0.50000588, - 1.329e-05 - ], - "xyz" : [ - 9.335756907e-05, - 3.3657658710483, - 7.77901980758e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83964376, - 0.25001167, - 0.50109629 - ], - "xyz" : [ - 4.13100173037947, - 1.68295153508675, - 3.16881674463655 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.845e-05, - 0.99999403, - 1.173e-05 - ], - "xyz" : [ - 0.0001227296000992, - 6.73141239343024, - 4.57663078181e-05 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.68662608, - "e_wo_entrp" : -79.68662608, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.0053242, - 0.00018544, - -0.03754055 - ], - [ - 0.00187128, - 0.04629296, - -0.07523858 - ], - [ - -0.00244692, - 0.047013, - 0.0764372 - ], - [ - -0.00234956, - -0.04698279, - 0.0758999 - ], - [ - -0.03705814, - -0.00037182, - -0.01246545 - ], - [ - -0.02744429, - 0.00019267, - 0.13915147 - ], - [ - 0.0579935, - -4.825e-05, - -0.05302216 - ], - [ - 0.02816044, - -0.00019125, - -0.13909478 - ], - [ - 0.03704326, - 0.00096442, - 0.01078627 - ], - [ - 0.00225401, - -0.04672037, - -0.07609565 - ], - [ - -0.05799282, - 8.54e-06, - 0.05297593 - ], - [ - -0.02914619, - -0.00019797, - -0.01874851 - ], - [ - 0.02918502, - 8.728e-05, - 0.01911915 - ], - [ - -1.947e-05, - 3.235e-05, - -0.00010503 - ], - [ - -0.00529712, - -0.00022176, - 0.03798497 - ], - [ - -7.72e-05, - -4.247e-05, - -4.419e-05 - ] - ], - "stress" : [ - [ - 0.06940516, - 0.002463, - -2.4463083 - ], - [ - 0.0024625, - 1.91939873, - -0.0014516 - ], - [ - -2.44629106, - -0.00143919, - 1.63922224 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 266.12462709, - "ewald" : -4781.67849016, - "hartreedc" : -3287.7580904, - "XCdc" : 264.56336065, - "pawpsdc" : 5328.74835523, - "pawaedc" : -5436.27137767, - "eentropy" : 0.0, - "bandstr" : -367.21538025, - "atom" : 7933.79896004, - "e_fr_energy" : -79.68803546, - "e_wo_entrp" : -79.68803546, - "e_0_energy" : -79.68803546 - }, - { - "e_fr_energy" : -79.68685031, - "e_wo_entrp" : -79.68685031, - "e_0_energy" : -79.68685031 - }, - { - "e_fr_energy" : -79.68666678, - "e_wo_entrp" : -79.68666678, - "e_0_energy" : -79.68666678 - }, - { - "alphaZ" : 266.12462709, - "ewald" : -4781.67849016, - "hartreedc" : -3284.4203262, - "XCdc" : 264.38747052, - "pawpsdc" : 5331.17852793, - "pawaedc" : -5438.66780965, - "eentropy" : 0.0, - "bandstr" : -370.40958566, - "atom" : 7933.79896004, - "e_fr_energy" : -79.68662608, - "e_wo_entrp" : -79.68662608, - "e_0_energy" : -79.68662608 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.86896615, - 9.524e-05, - -1.3274378 - ], - [ - 0.00010503, - 6.72599454, - -0.00012651 - ], - [ - 0.07620218, - -0.00014103, - 8.54249533 - ] - ], - "a" : 5.04667439922424, - "b" : 6.72599454200982, - "c" : 8.5428352000491, - "alpha" : 90.0020155306534, - "beta" : 104.738971987398, - "gamma" : 89.9977720592412, - "volume" : 280.435460817849 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16034014, - 0.74998245, - 0.49874565 - ], - "xyz" : [ - 0.818774990598501, - 5.04432279649174, - 4.04759594300977 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76167777, - 0.96287871, - 0.16296563 - ], - "xyz" : [ - 3.72110274675947, - 6.47636650529026, - 0.3809314561222 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.2383109, - 0.462875, - 0.83701527 - ], - "xyz" : [ - 1.22415870930457, - 3.11319937516909, - 6.83379757998542 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23831509, - 0.03711714, - 0.83702425 - ], - "xyz" : [ - 1.22413507722028, - 0.24955433257961, - 6.83392259225597 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40940348, - 0.24998701, - 0.7528498 - ], - "xyz" : [ - 2.05076673792043, - 1.68134408151107, - 5.88772662003125 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.751375, - 0.24999513, - 0.92342093 - ], - "xyz" : [ - 3.72881238586838, - 1.68140721030783, - 6.89088377829036 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74340252, - 0.7500028, - 0.80272255 - ], - "xyz" : [ - 3.68084968674394, - 5.04447233147949, - 5.87033814614321 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24861439, - 0.75000535, - 0.0766293 - ], - "xyz" : [ - 1.21641314208668, - 5.04454476007511, - 0.324490415304398 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59062326, - 0.75001543, - 0.24717958 - ], - "xyz" : [ - 2.89463905731075, - 5.04462107831887, - 1.32741988248608 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76167552, - 0.53713221, - 0.16297845 - ], - "xyz" : [ - 3.72104805234269, - 3.61279786884385, - 0.381097818837095 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25660508, - 0.24999634, - 0.19728099 - ], - "xyz" : [ - 1.26446094706419, - 1.68147063438978, - 1.34461302587178 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23225174, - 0.74999649, - 0.77495772 - ], - "xyz" : [ - 1.18995810014178, - 5.04438512412763, - 6.31167808319973 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76769899, - 0.25000456, - 0.22498759 - ], - "xyz" : [ - 3.75507119850907, - 1.68157069118709, - 0.902851150458247 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.679e-05, - 0.50000821, - 1.405e-05 - ], - "xyz" : [ - 0.0001353364445838, - 3.36305249003278, - 3.44783400774e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83966972, - 0.25001095, - 0.50121617 - ], - "xyz" : [ - 4.12654346731531, - 1.68158156826789, - 3.16699583681679 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.961e-05, - 0.99999221, - 1.207e-05 - ], - "xyz" : [ - 0.0002014293683304, - 6.72594214466796, - -4.9432151112e-05 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.69348361, - "e_wo_entrp" : -79.69348361, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.0039749, - -4.338e-05, - -0.03505036 - ], - [ - 0.01285508, - 0.02428651, - -0.06265743 - ], - [ - -0.01941503, - 0.0355016, - 0.07177183 - ], - [ - -0.01765841, - -0.03221989, - 0.06921166 - ], - [ - -0.01662109, - -0.00362581, - -0.01907612 - ], - [ - -0.02596681, - 0.00061768, - 0.1105114 - ], - [ - 0.02738414, - -0.00039527, - -0.05871135 - ], - [ - 0.02679989, - -0.00060431, - -0.11006495 - ], - [ - 0.0249161, - 0.00503755, - 0.00654013 - ], - [ - 0.01537186, - -0.02886202, - -0.0661657 - ], - [ - -0.02685556, - 0.0004618, - 0.05860747 - ], - [ - -0.01628391, - 0.00026949, - -0.00795029 - ], - [ - 0.01662608, - -0.00042184, - 0.00820744 - ], - [ - -0.00038514, - -0.00057245, - -0.00030497 - ], - [ - -0.0042783, - -1.342e-05, - 0.03529349 - ], - [ - -0.00046382, - 0.00058374, - -0.00016226 - ] - ], - "stress" : [ - [ - 0.48479651, - -0.05171325, - -1.54078249 - ], - [ - -0.05171108, - 1.52101847, - 0.0569636 - ], - [ - -1.54078422, - 0.05695185, - 0.82941783 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 266.00303505, - "ewald" : -4777.27319426, - "hartreedc" : -3287.93871852, - "XCdc" : 264.35110602, - "pawpsdc" : 5332.02206702, - "pawaedc" : -5439.55284916, - "eentropy" : 0.0, - "bandstr" : -371.10104082, - "atom" : 7933.79896004, - "e_fr_energy" : -79.69063463, - "e_wo_entrp" : -79.69063463, - "e_0_energy" : -79.69063463 - }, - { - "e_fr_energy" : -79.69460602, - "e_wo_entrp" : -79.69460602, - "e_0_energy" : -79.69460602 - }, - { - "e_fr_energy" : -79.69380831, - "e_wo_entrp" : -79.69380831, - "e_0_energy" : -79.69380831 - }, - { - "e_fr_energy" : -79.69344203, - "e_wo_entrp" : -79.69344203, - "e_0_energy" : -79.69344203 - }, - { - "alphaZ" : 266.00303505, - "ewald" : -4777.27319426, - "hartreedc" : -3288.35560304, - "XCdc" : 264.38373372, - "pawpsdc" : 5332.26575011, - "pawaedc" : -5439.83598745, - "eentropy" : 0.0, - "bandstr" : -370.68017778, - "atom" : 7933.79896004, - "e_fr_energy" : -79.69348361, - "e_wo_entrp" : -79.69348361, - "e_0_energy" : -79.69348361 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.86802001, - 0.00016858, - -1.33713825 - ], - [ - 0.00018125, - 6.72930489, - -0.00021919 - ], - [ - 0.06066134, - -0.00025751, - 8.54797234 - ] - ], - "a" : 5.04832225058907, - "b" : 6.72930489601071, - "c" : 8.54818758509001, - "alpha" : 90.0035812735367, - "beta" : 104.952503442138, - "gamma" : 89.9961042806317, - "volume" : 280.563649882976 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16038597, - 0.74998501, - 0.49840142 - ], - "xyz" : [ - 0.811131744061425, - 5.04677648973686, - 4.04569894791203 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76138849, - 0.96311406, - 0.16246027 - ], - "xyz" : [ - 3.71648402680202, - 6.48117467331327, - 0.370413116249378 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23862602, - 0.46307637, - 0.83750877 - ], - "xyz" : [ - 1.21252457710867, - 3.11600664177554, - 6.83982431997062 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23862276, - 0.03690505, - 0.83751834 - ], - "xyz" : [ - 1.21243204434072, - 0.248169891107842, - 6.84000389562824 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.4082697, - 0.24999344, - 0.75324099 - ], - "xyz" : [ - 2.03320298818402, - 1.68215693727861, - 5.89271531962608 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.7506627, - 0.24999606, - 0.9245049 - ], - "xyz" : [ - 3.71036806221707, - 1.6821881864999, - 6.8988477077398 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.744452, - 0.75000287, - 0.80239856 - ], - "xyz" : [ - 3.67281774236838, - 5.04691685467001, - 5.86328105891775 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24932887, - 0.75000483, - 0.07554304 - ], - "xyz" : [ - 1.2184564086402, - 5.04703374881529, - 0.312188253934548 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59172009, - 0.75000505, - 0.24680483 - ], - "xyz" : [ - 2.89561268856059, - 5.04704884795069, - 1.31830490097905 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76137789, - 0.53691089, - 0.16247475 - ], - "xyz" : [ - 3.71635605484156, - 3.61312359178308, - 0.370644484027143 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25555269, - 0.24999605, - 0.19760401 - ], - "xyz" : [ - 1.25606784434936, - 1.68229183780955, - 1.34734953842949 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23178666, - 0.74999306, - 0.77474256 - ], - "xyz" : [ - 1.17547495701782, - 5.04677153676258, - 6.31238277359622 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.768162, - 0.25000806, - 0.22520561 - ], - "xyz" : [ - 3.75313457496061, - 1.68245196475074, - 0.897857733429656 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.758e-05, - 0.50001055, - 1.4e-05 - ], - "xyz" : [ - 0.0001770559627233, - 3.36472343852509, - -1.34325901295e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83962681, - 0.25000844, - 0.50156601 - ], - "xyz" : [ - 4.11779109230727, - 1.68239540385767, - 3.16462045743772 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.978e-05, - 0.99999022, - 1.195e-05 - ], - "xyz" : [ - 0.0002782625661858, - 6.72923907765544, - -0.0001434881814438 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.69981565, - "e_wo_entrp" : -79.69981565, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00578534, - 0.00030172, - -0.02413764 - ], - [ - 0.02922603, - 0.00755451, - -0.03363743 - ], - [ - -0.01367329, - -0.01832738, - 0.01324959 - ], - [ - -0.01891966, - 0.00849523, - 0.02031912 - ], - [ - -0.02186636, - 0.01245013, - 0.04435777 - ], - [ - -0.02593819, - -0.00144186, - 0.05139006 - ], - [ - -0.02716655, - 0.00043437, - -0.05544768 - ], - [ - 0.02367695, - 0.00139021, - -0.05332729 - ], - [ - 0.00245613, - -0.0137637, - -0.01822324 - ], - [ - 0.02325495, - 0.00367181, - -0.02556008 - ], - [ - 0.02642131, - -0.00047729, - 0.05559603 - ], - [ - -0.00203216, - -0.00124783, - 0.01316405 - ], - [ - 0.00181642, - 0.00132632, - -0.01251534 - ], - [ - 0.00080644, - 0.00084822, - 0.00014972 - ], - [ - -0.00466735, - -0.00032957, - 0.02454805 - ], - [ - 0.00081999, - -0.0008849, - 7.433e-05 - ] - ], - "stress" : [ - [ - 0.30191498, - 0.11114078, - -0.72329209 - ], - [ - 0.11115747, - 0.02201854, - -0.14658437 - ], - [ - -0.72328383, - -0.14659918, - -0.71027394 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.77733486, - "ewald" : -4771.44414602, - "hartreedc" : -3292.78204342, - "XCdc" : 264.29973534, - "pawpsdc" : 5332.19213044, - "pawaedc" : -5439.74776683, - "eentropy" : 0.0, - "bandstr" : -371.7839484, - "atom" : 7933.79896004, - "e_fr_energy" : -79.68974397, - "e_wo_entrp" : -79.68974397, - "e_0_energy" : -79.68974397 - }, - { - "e_fr_energy" : -79.70213817, - "e_wo_entrp" : -79.70213817, - "e_0_energy" : -79.70213817 - }, - { - "e_fr_energy" : -79.70054926, - "e_wo_entrp" : -79.70054926, - "e_0_energy" : -79.70054926 - }, - { - "e_fr_energy" : -79.69973467, - "e_wo_entrp" : -79.69973467, - "e_0_energy" : -79.69973467 - }, - { - "alphaZ" : 265.77733486, - "ewald" : -4771.44414602, - "hartreedc" : -3293.7009106, - "XCdc" : 264.36180619, - "pawpsdc" : 5330.81395955, - "pawaedc" : -5438.36812535, - "eentropy" : 0.0, - "bandstr" : -370.93869432, - "atom" : 7933.79896004, - "e_fr_energy" : -79.69981565, - "e_wo_entrp" : -79.69981565, - "e_0_energy" : -79.69981565 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.86851828, - -9.587e-05, - -1.34996429 - ], - [ - -0.00010329, - 6.7350955, - 7.394e-05 - ], - [ - 0.0394474, - 0.00011284, - 8.5527233 - ] - ], - "a" : 5.05221474564972, - "b" : 6.7350955011979, - "c" : 8.55281427113102, - "alpha" : 89.9986191268441, - "beta" : 105.233604208541, - "gamma" : 90.0021020527129, - "volume" : 280.801906974531 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16045672, - 0.74998619, - 0.49778826 - ], - "xyz" : [ - 0.800745461002801, - 5.05126940077266, - 4.04088986165682 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76118231, - 0.96332219, - 0.16164166 - ], - "xyz" : [ - 3.71210683231731, - 6.488012212016, - 0.354978683095697 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23874259, - 0.46339408, - 0.83838695 - ], - "xyz" : [ - 1.19534698502645, - 3.12107509826597, - 6.8482318940371 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23876337, - 0.03662028, - 0.8383772 - ], - "xyz" : [ - 1.19549184968996, - 0.246712795275706, - 6.84808889707221 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40675709, - 0.24995259, - 0.75376048 - ], - "xyz" : [ - 2.01001240174034, - 1.68350062265269, - 5.89761575520537 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74945499, - 0.25000469, - 0.92623508 - ], - "xyz" : [ - 3.68524706156258, - 1.68383812871443, - 6.91011336187784 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74573824, - 0.74999751, - 0.80162146 - ], - "xyz" : [ - 3.66218466867342, - 5.05132381565268, - 5.84938199985046 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25054616, - 0.749997, - 0.07381512 - ], - "xyz" : [ - 1.22262290731836, - 5.05128572915128, - 0.29314738249785 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59335112, - 0.75005453, - 0.24620345 - ], - "xyz" : [ - 2.8983753870196, - 5.05165978678304, - 1.30476261895583 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76120592, - 0.5366598, - 0.16163185 - ], - "xyz" : [ - 3.71226546101317, - 3.6144002657373, - 0.35483136080612 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25427302, - 0.25000251, - 0.19838052 - ], - "xyz" : [ - 1.2457326189462, - 1.68378878819315, - 1.35345268394525 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.231183, - 0.74999409, - 0.77450014 - ], - "xyz" : [ - 1.15599321145832, - 5.05134705166718, - 6.31205205333921 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76876903, - 0.25000606, - 0.22545324 - ], - "xyz" : [ - 3.75163379666651, - 1.68376642793543, - 0.89044692649863 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.107e-05, - 0.50000511, - 1.001e-05 - ], - "xyz" : [ - 2.64383802170001e-06, - 3.36758216640625, - 0.0001076390333761 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83955381, - 0.25000689, - 0.50218569 - ], - "xyz" : [ - 4.10716716760469, - 1.68379645841749, - 3.16170607426558 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.155e-05, - 0.99999647, - 8.9e-06 - ], - "xyz" : [ - -4.67071673923e-05, - 6.73507172500986, - 0.0001344668888123 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.70080645, - "e_wo_entrp" : -79.70080645, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00581764, - 0.00023136, - -0.00037031 - ], - [ - 0.00967328, - -0.02236063, - 0.00138987 - ], - [ - -0.029243, - 0.00947774, - 0.02454768 - ], - [ - -0.02117636, - 0.00406818, - 0.01364315 - ], - [ - -0.01198831, - -0.01806235, - 0.0070782 - ], - [ - -0.0052424, - 0.00089308, - 0.04383163 - ], - [ - -0.02053027, - -0.0001904, - -0.0207153 - ], - [ - 0.00765631, - -0.00089171, - -0.04345609 - ], - [ - 0.03350813, - 0.01934577, - -0.03516023 - ], - [ - 0.01900608, - 0.00747761, - -0.01103619 - ], - [ - 0.02141135, - 0.00022296, - 0.02092986 - ], - [ - -0.00108155, - 0.0018845, - 0.01021005 - ], - [ - 0.00197552, - -0.00193713, - -0.0104096 - ], - [ - -0.00109879, - -0.00133813, - -0.00054819 - ], - [ - -0.00758692, - -0.00017386, - 0.00052638 - ], - [ - -0.00110073, - 0.00135302, - -0.00046091 - ] - ], - "stress" : [ - [ - 2.31959481, - -0.08317232, - -1.00207335 - ], - [ - -0.08317846, - 1.68696389, - 0.08927484 - ], - [ - -1.00208194, - 0.08925591, - -0.00797629 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.82885756, - "ewald" : -4772.57399077, - "hartreedc" : -3293.24581154, - "XCdc" : 264.38467102, - "pawpsdc" : 5330.67062835, - "pawaedc" : -5438.20209708, - "eentropy" : 0.0, - "bandstr" : -370.36150979, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70029221, - "e_wo_entrp" : -79.70029221, - "e_0_energy" : -79.70029221 - }, - { - "e_fr_energy" : -79.70085565, - "e_wo_entrp" : -79.70085565, - "e_0_energy" : -79.70085565 - }, - { - "alphaZ" : 265.82885756, - "ewald" : -4772.57399077, - "hartreedc" : -3292.79909186, - "XCdc" : 264.36442282, - "pawpsdc" : 5330.33554591, - "pawaedc" : -5437.84817908, - "eentropy" : 0.0, - "bandstr" : -370.80733107, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70080645, - "e_wo_entrp" : -79.70080645, - "e_0_energy" : -79.70080645 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.8698177, - 0.00029096, - -1.35119954 - ], - [ - 0.00028866, - 6.73516812, - -0.00044244 - ], - [ - 0.03640113, - -0.00054069, - 8.54952478 - ] - ], - "a" : 5.05379705892384, - "b" : 6.73516814071795, - "c" : 8.54960228890473, - "alpha" : 90.0073768016248, - "beta" : 105.263478772037, - "gamma" : 89.9933288060409, - "volume" : 280.747481981159 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.160514, - 0.74998831, - 0.49766809 - ], - "xyz" : [ - 0.800006090764306, - 5.05107497487854, - 4.03760739987883 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76147366, - 0.96337522, - 0.16150559 - ], - "xyz" : [ - 3.7143949814201, - 6.48862830326064, - 0.351466948967067 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23860447, - 0.46326364, - 0.83843336 - ], - "xyz" : [ - 1.19261391872114, - 3.11977459110633, - 6.84559957122784 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23857358, - 0.03668104, - 0.83845494 - ], - "xyz" : [ - 1.19234113825545, - 0.246669042383773, - 6.84601454573192 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40655802, - 0.25004084, - 0.75396549 - ], - "xyz" : [ - 2.00738081447883, - 1.68377772478673, - 5.89659500234328 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74921078, - 0.24999444, - 0.92646683 - ], - "xyz" : [ - 3.68231652038937, - 1.68347164148349, - 6.90840725209397 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74546272, - 0.75000061, - 0.80127707 - ], - "xyz" : [ - 3.65965143451332, - 5.05116385578659, - 5.84293745098976 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25076833, - 0.75000689, - 0.07356912 - ], - "xyz" : [ - 1.22409054812341, - 5.05145568077415, - 0.289811129291814 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59335885, - 0.74995699, - 0.2461142 - ], - "xyz" : [ - 2.89872474775542, - 5.05112598262336, - 1.30208143546429 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76143843, - 0.53668633, - 0.1615316 - ], - "xyz" : [ - 3.71410119652094, - 3.61480686986059, - 0.351925709098881 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25454122, - 0.24999909, - 0.19872459 - ], - "xyz" : [ - 1.2468753029077, - 1.68375251391182, - 1.35495421762792 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23116801, - 0.74998528, - 0.77457237 - ], - "xyz" : [ - 1.15415786705748, - 5.05092540543473, - 6.30953973895633 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76878188, - 0.25001543, - 0.22538424 - ], - "xyz" : [ - 3.75210401713749, - 1.68399777541517, - 0.888039805458283 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.898e-05, - 0.50001113, - 1.211e-05 - ], - "xyz" : [ - 0.0002372031704161, - 3.36765902139584, - -0.0001433359465406 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83950744, - 0.25000457, - 0.5023098 - ], - "xyz" : [ - 4.10660500124294, - 1.68379547891729, - 3.16005740356032 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.961e-05, - 0.99999019, - 1.059e-05 - ], - "xyz" : [ - 0.0003845397813091, - 6.73510204798056, - -0.0003783932152228 - ], - "label" : "Co" - } - ] - } - }, - { - "e_fr_energy" : -79.70158229, - "e_wo_entrp" : -79.70158229, - "e_0_energy" : 0.0, - "forces" : [ - [ - 0.00440768, - -0.00053393, - 0.00049883 - ], - [ - 0.01373559, - -0.01663589, - -0.0023476 - ], - [ - -0.0244377, - 0.00248968, - 0.01714763 - ], - [ - -0.02050907, - 0.00597018, - 0.01169937 - ], - [ - -0.01086369, - -0.00947576, - 0.01126956 - ], - [ - -0.01132573, - 0.00156625, - 0.03575857 - ], - [ - -0.03145728, - -0.00103636, - -0.02189126 - ], - [ - 0.01345822, - -0.00151866, - -0.0349171 - ], - [ - 0.02145776, - 0.00969401, - -0.02882298 - ], - [ - 0.01794775, - 0.00761246, - -0.00834796 - ], - [ - 0.03234597, - 0.00116165, - 0.02119386 - ], - [ - 0.0036889, - 0.00062498, - 0.01840181 - ], - [ - -0.00332004, - -0.00059912, - -0.01820206 - ], - [ - -0.00030643, - -0.00034113, - -0.00027653 - ], - [ - -0.00447858, - 0.00064934, - -0.0009571 - ], - [ - -0.00034335, - 0.00037229, - -0.00020704 - ] - ], - "stress" : [ - [ - 1.19862962, - -0.10301856, - -1.03039992 - ], - [ - -0.1030247, - 0.91354581, - 0.12791474 - ], - [ - -1.03040198, - 0.12791904, - -0.33669551 - ] - ], - "electronic_steps" : [ - { - "alphaZ" : 265.67316889, - "ewald" : -4771.61072577, - "hartreedc" : -3292.29124929, - "XCdc" : 264.29328523, - "pawpsdc" : 5330.46367517, - "pawaedc" : -5437.99727954, - "eentropy" : 0.0, - "bandstr" : -372.03145838, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70162365, - "e_wo_entrp" : -79.70162365, - "e_0_energy" : -79.70162365 - }, - { - "e_fr_energy" : -79.70166216, - "e_wo_entrp" : -79.70166216, - "e_0_energy" : -79.70166216 - }, - { - "alphaZ" : 265.67316889, - "ewald" : -4771.61072577, - "hartreedc" : -3293.01175417, - "XCdc" : 264.344081, - "pawpsdc" : 5330.4306603, - "pawaedc" : -5437.98946937, - "eentropy" : 0.0, - "bandstr" : -371.33650322, - "atom" : 7933.79896004, - "e_fr_energy" : -79.70158229, - "e_wo_entrp" : -79.70158229, - "e_0_energy" : -79.70158229 - } - ], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87196666, - 0.00023939, - -1.35336648 - ], - [ - 0.0002305, - 6.73722788, - -0.00039546 - ], - [ - 0.0325234, - -0.00048148, - 8.54921124 - ] - ], - "a" : 5.05644737168763, - "b" : 6.73722789554934, - "c" : 8.54927311702655, - "alpha" : 90.0065824481013, - "beta" : 105.306607273376, - "gamma" : 89.9944985329069, - "volume" : 280.912004386033 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16054504, - 0.74998936, - 0.49759572 - ], - "xyz" : [ - 0.798526459495694, - 5.05264807638522, - 4.03647805594133 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76149909, - 0.96333395, - 0.16142756 - ], - "xyz" : [ - 3.71547039968072, - 6.49030491681609, - 0.349110007397404 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23853208, - 0.46327695, - 0.83854001 - ], - "xyz" : [ - 1.18949929859866, - 3.12085574565198, - 6.84585114970239 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23852166, - 0.0366917, - 0.83854862 - ], - "xyz" : [ - 1.18935048483241, - 0.246853699515226, - 6.84610755789285 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40630505, - 0.25000793, - 0.75409072 - ], - "xyz" : [ - 2.00408787834035, - 1.68409458198314, - 5.89690235594297 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74902929, - 0.24999573, - 0.9267364 - ], - "xyz" : [ - 3.679443970891, - 1.68401130711681, - 6.90905525046155 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74549685, - 0.75000024, - 0.80111274 - ], - "xyz" : [ - 3.65826358347846, - 5.05271527166356, - 5.8396549984847 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25095492, - 0.75000564, - 0.07329935 - ], - "xyz" : [ - 1.22520082378278, - 5.0529836918925, - 0.286721052955218 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59366155, - 0.74999147, - 0.24596015 - ], - "xyz" : [ - 2.90047161230027, - 5.05288713319162, - 1.29902704511052 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76148788, - 0.53670171, - 0.16143891 - ], - "xyz" : [ - 3.71531781534373, - 3.61598628683288, - 0.349390928168849 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25450917, - 0.24999959, - 0.19888962 - ], - "xyz" : [ - 1.24648638247688, - 1.68426937331254, - 1.35580633045485 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23110117, - 0.74998843, - 0.77457714 - ], - "xyz" : [ - 1.15128194981518, - 5.05252534018115, - 6.30896242414374 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76885137, - 0.25001225, - 0.22538046 - ], - "xyz" : [ - 3.75320600781171, - 1.68446504018711, - 0.886188619803908 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.608e-05, - 0.50000858, - 1.057e-05 - ], - "xyz" : [ - 0.0001939369739208, - 3.36867174417536, - -0.0001291303632384 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83947218, - 0.25000364, - 0.50238286 - ], - "xyz" : [ - 4.10627729750546, - 1.68429056745522, - 3.15876481775135 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.66e-05, - 0.99999283, - 9.2e-06 - ], - "xyz" : [ - 0.000311672209151, - 6.73717957362036, - -0.0003392703047118 - ], - "label" : "Co" - } - ] - } - } - ], - "efermi" : 2.09530561, - "bandgap" : 2.443, - "cbm" : 4.5374, - "vbm" : 2.0944, - "is_gap_direct" : false, - "epsilon_static" : [], - "epsilon_static_wolfe" : [], - "epsilon_ionic" : [], - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.87196666, - 0.00023939, - -1.35336648 - ], - [ - 0.0002305, - 6.73722788, - -0.00039546 - ], - [ - 0.0325234, - -0.00048148, - 8.54921124 - ] - ], - "a" : 5.05644737168763, - "b" : 6.73722789554934, - "c" : 8.54927311702655, - "alpha" : 90.0065824481013, - "beta" : 105.306607273376, - "gamma" : 89.9944985329069, - "volume" : 280.912004386033 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16054504, - 0.74998936, - 0.49759572 - ], - "xyz" : [ - 0.798526459495694, - 5.05264807638522, - 4.03647805594133 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76149909, - 0.96333395, - 0.16142756 - ], - "xyz" : [ - 3.71547039968072, - 6.49030491681609, - 0.349110007397404 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23853208, - 0.46327695, - 0.83854001 - ], - "xyz" : [ - 1.18949929859866, - 3.12085574565198, - 6.84585114970239 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23852166, - 0.0366917, - 0.83854862 - ], - "xyz" : [ - 1.18935048483241, - 0.246853699515226, - 6.84610755789285 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40630505, - 0.25000793, - 0.75409072 - ], - "xyz" : [ - 2.00408787834035, - 1.68409458198314, - 5.89690235594297 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74902929, - 0.24999573, - 0.9267364 - ], - "xyz" : [ - 3.679443970891, - 1.68401130711681, - 6.90905525046155 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74549685, - 0.75000024, - 0.80111274 - ], - "xyz" : [ - 3.65826358347846, - 5.05271527166356, - 5.8396549984847 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25095492, - 0.75000564, - 0.07329935 - ], - "xyz" : [ - 1.22520082378278, - 5.0529836918925, - 0.286721052955218 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59366155, - 0.74999147, - 0.24596015 - ], - "xyz" : [ - 2.90047161230027, - 5.05288713319162, - 1.29902704511052 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76148788, - 0.53670171, - 0.16143891 - ], - "xyz" : [ - 3.71531781534373, - 3.61598628683288, - 0.349390928168849 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25450917, - 0.24999959, - 0.19888962 - ], - "xyz" : [ - 1.24648638247688, - 1.68426937331254, - 1.35580633045485 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23110117, - 0.74998843, - 0.77457714 - ], - "xyz" : [ - 1.15128194981518, - 5.05252534018115, - 6.30896242414374 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76885137, - 0.25001225, - 0.22538046 - ], - "xyz" : [ - 3.75320600781171, - 1.68446504018711, - 0.886188619803908 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.608e-05, - 0.50000858, - 1.057e-05 - ], - "xyz" : [ - 0.0001939369739208, - 3.36867174417536, - -0.0001291303632384 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83947218, - 0.25000364, - 0.50238286 - ], - "xyz" : [ - 4.10627729750546, - 1.68429056745522, - 3.15876481775135 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.66e-05, - 0.99999283, - 9.2e-06 - ], - "xyz" : [ - 0.000311672209151, - 6.73717957362036, - -0.0003392703047118 - ], - "label" : "Co" - } - ] - }, - "energy" : -79.70158229, - "energy_per_atom" : -4.981348893125, - "is_metal" : false, - "outcar" : { - "@module" : "pymatgen.io.vasp.outputs", - "@class" : "Outcar", - "efermi" : 2.0953, - "magnetization" : [ - { - "s" : 0.003, - "p" : 0.062, - "d" : 0.0, - "tot" : 0.065 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.0, - "p" : 0.026, - "d" : 0.005, - "tot" : 0.032 - }, - { - "s" : 0.01, - "p" : 0.073, - "d" : 0.0, - "tot" : 0.083 - }, - { - "s" : 0.01, - "p" : 0.094, - "d" : 0.0, - "tot" : 0.104 - }, - { - "s" : 0.01, - "p" : 0.073, - "d" : 0.0, - "tot" : 0.083 - }, - { - "s" : 0.0, - "p" : 0.026, - "d" : 0.005, - "tot" : 0.032 - }, - { - "s" : 0.009, - "p" : 0.072, - "d" : 0.0, - "tot" : 0.081 - }, - { - "s" : 0.01, - "p" : 0.094, - "d" : 0.0, - "tot" : 0.104 - }, - { - "s" : 0.02, - "p" : 0.019, - "d" : 2.644, - "tot" : 2.683 - }, - { - "s" : 0.02, - "p" : 0.019, - "d" : 2.644, - "tot" : 2.683 - }, - { - "s" : 0.014, - "p" : 0.01, - "d" : 2.673, - "tot" : 2.697 - }, - { - "s" : 0.003, - "p" : 0.062, - "d" : 0.0, - "tot" : 0.065 - }, - { - "s" : 0.014, - "p" : 0.01, - "d" : 2.673, - "tot" : 2.697 - } - ], - "charge" : [ - { - "s" : 1.597, - "p" : 3.533, - "d" : 0.0, - "tot" : 5.13 - }, - { - "s" : 1.569, - "p" : 3.467, - "d" : 0.0, - "tot" : 5.036 - }, - { - "s" : 1.569, - "p" : 3.468, - "d" : 0.0, - "tot" : 5.037 - }, - { - "s" : 1.569, - "p" : 3.468, - "d" : 0.0, - "tot" : 5.036 - }, - { - "s" : 1.428, - "p" : 1.539, - "d" : 0.231, - "tot" : 3.199 - }, - { - "s" : 1.57, - "p" : 3.439, - "d" : 0.0, - "tot" : 5.009 - }, - { - "s" : 1.597, - "p" : 3.548, - "d" : 0.0, - "tot" : 5.145 - }, - { - "s" : 1.57, - "p" : 3.439, - "d" : 0.0, - "tot" : 5.009 - }, - { - "s" : 1.428, - "p" : 1.539, - "d" : 0.231, - "tot" : 3.198 - }, - { - "s" : 1.569, - "p" : 3.468, - "d" : 0.0, - "tot" : 5.036 - }, - { - "s" : 1.597, - "p" : 3.548, - "d" : 0.0, - "tot" : 5.145 - }, - { - "s" : 0.304, - "p" : 0.346, - "d" : 7.093, - "tot" : 7.742 - }, - { - "s" : 0.304, - "p" : 0.346, - "d" : 7.093, - "tot" : 7.743 - }, - { - "s" : 0.289, - "p" : 0.34, - "d" : 7.086, - "tot" : 7.715 - }, - { - "s" : 1.597, - "p" : 3.533, - "d" : 0.0, - "tot" : 5.13 - }, - { - "s" : 0.289, - "p" : 0.341, - "d" : 7.086, - "tot" : 7.715 - } - ], - "total_magnetization" : 12.0000006, - "nelect" : 111.9999991, - "is_stopped" : false - } - }, - "formula_pretty" : "Co2TeCl2O3", - "composition_reduced" : { - "Co" : 2.0, - "Te" : 1.0, - "Cl" : 2.0, - "O" : 3.0 - }, - "composition_unit_cell" : { - "Cl" : 4.0, - "O" : 6.0, - "Te" : 2.0, - "Co" : 4.0 - }, - "formula_anonymous" : "AB2C2D3", - "formula_reduced_abc" : "Cl2 Co2 O3 Te1", - "dir_name" : "/global/projecta/projectdirs/matgen/garden/block_2013-06-23-09-28-21-424493/launcher_2013-06-23-20-21-15-188214", - "completed_at" : "2013-06-23 16:19:53", - "density" : 4.30776599273674, - "task" : { - "type" : "relax1", - "name" : "relax1" - }, - "output_file_paths" : {} - } - ], - "run_stats" : { - "relax1" : { - "Average memory used (kb)" : 0.0, - "Maximum memory used (kb)" : 141244.0, - "Elapsed time (sec)" : 1933.675, - "System time (sec)" : 59.99, - "User time (sec)" : 1866.201, - "Total CPU time used (sec)" : 1926.191, - "cores" : "32" - }, - "relax2" : { - "Average memory used (kb)" : 0.0, - "Maximum memory used (kb)" : 141728.0, - "Elapsed time (sec)" : 467.896, - "System time (sec)" : 15.323, - "User time (sec)" : 449.107, - "Total CPU time used (sec)" : 464.429, - "cores" : "32" - }, - "overall" : { - "Total CPU time used (sec)" : 2390.62, - "User time (sec)" : 2315.308, - "System time (sec)" : 75.313, - "Elapsed time (sec)" : 2401.571 - } - }, - "chemsys" : "Cl-Co-O-Te", - "formula_anonymous" : "AB2C2D3", - "formula_reduced_abc" : "Cl2 Co2 O3 Te1", - "completed_at" : "2013-06-23 16:27:42", - "nsites" : 16, - "composition_unit_cell" : { - "Cl" : 4.0, - "O" : 6.0, - "Te" : 2.0, - "Co" : 4.0 - }, - "composition_reduced" : { - "Co" : 2.0, - "Te" : 1.0, - "Cl" : 2.0, - "O" : 3.0 - }, - "formula_pretty" : "Co2TeCl2O3", - "elements" : [ - "Cl", - "Co", - "O", - "Te" - ], - "nelements" : 4, - "input" : { - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.85343059, - 6.041e-05, - -1.29721956 - ], - [ - 6.911e-05, - 6.66863986, - -8.241e-05 - ], - [ - 0.10998805, - -8.619e-05, - 8.47259034 - ] - ], - "a" : 5.02380006394002, - "b" : 6.66863986086731, - "c" : 8.4733042225588, - "alpha" : 90.0012830945821, - "beta" : 104.220410448655, - "gamma" : 89.9985545579525, - "volume" : 275.17347329123 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16069209, - 0.7499791, - 0.50056639 - ], - "xyz" : [ - 0.835016057364274, - 5.00130708401893, - 4.03257923237976 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76410709, - 0.96455099, - 0.16327596 - ], - "xyz" : [ - 3.72656578921308, - 6.43227526587078, - 0.39207616972046 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23585032, - 0.46457567, - 0.83671644 - ], - "xyz" : [ - 1.23674407421238, - 3.09802996207607, - 6.78316769284597 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23586763, - 0.03542795, - 0.83672884 - ], - "xyz" : [ - 1.23679979254879, - 0.236198370632896, - 6.7832856641592 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.41254978, - 0.24997739, - 0.75140053 - ], - "xyz" : [ - 2.08494407715086, - 1.66696934597329, - 5.83112062722247 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.75476504, - 0.24998253, - 0.92230702 - ], - "xyz" : [ - 3.76465976032233, - 1.66700956557566, - 6.83521297401371 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74125699, - 0.75000821, - 0.80351893 - ], - "xyz" : [ - 3.6860686636335, - 5.00151016857144, - 5.84625184973383 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.24522244, - 0.75001634, - 0.07775203 - ], - "xyz" : [ - 1.19877371944294, - 5.00159697301545, - 0.340591943727884 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.58752069, - 0.75003314, - 0.24860474 - ], - "xyz" : [ - 2.87888627446757, - 5.0017149586073, - 1.34412097739845 - ], - "label" : "Te" - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76411473, - 0.53544709, - 0.16329301 - ], - "xyz" : [ - 3.72657508934851, - 3.57073589324131, - 0.392246079080718 - ], - "label" : "O" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25875702, - 0.24998979, - 0.19648892 - ], - "xyz" : [ - 1.27748794619703, - 1.66709057431859, - 1.32908485621913 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23316513, - 0.75000373, - 0.77512103 - ], - "xyz" : [ - 1.2169566578248, - 5.00145204685061, - 6.26475477595552 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76679262, - 0.24999602, - 0.22482379 - ], - "xyz" : [ - 3.7463199655749, - 1.66716036819307, - 0.910120884056533 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.411e-05, - 0.50000433, - 1.353e-05 - ], - "xyz" : [ - 0.0001045253431877, - 3.33434880489683, - 5.51250224733e-05 - ], - "label" : "Co" - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83930639, - 0.25001415, - 0.49937727 - ], - "xyz" : [ - 4.128458118228, - 1.66726198742614, - 3.14223376421048 - ], - "label" : "Cl" - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.794e-05, - 0.99999356, - 1.156e-05 - ], - "xyz" : [ - 0.0001574515615742, - 6.6685969140467, - -7.73844385560001e-06 - ], - "label" : "Co" - } - ] - }, - "is_hubbard" : true, - "hubbards" : { - "Cl" : 0.0, - "O" : 0.0, - "Te" : 0.0, - "Co" : 3.32 - }, - "is_lasph" : false, - "potcar_spec" : [ - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE Te 08Apr2002", - "hash" : "72719856e22fb1d3032df6f96d98a0f2" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE O 08Apr2002", - "hash" : "7a25bc5b9a5393f46600a4939d357982" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Cl 17Jan2003", - "hash" : "779b9901046c78fe51c5d80224642aeb" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - }, - { - "titel" : "PAW_PBE Co 06Sep2000", - "hash" : "b169bca4e137294d2ab3df8cbdd09083" - } - ], - "xc_override" : null, - "pseudo_potential" : { - "functional" : "pbe", - "pot_type" : "paw", - "labels" : [ - "Cl", - "O", - "Te", - "O", - "Cl", - "O", - "Te", - "O", - "Cl", - "Co", - "Cl", - "Co" - ] - }, - "parameters" : { - "SYSTEM" : "unknown system", - "LCOMPAT" : false, - "PREC" : "accura", - "ENMAX" : 520.0, - "ENAUG" : 605.392, - "EDIFF" : 0.0001, - "IALGO" : 68, - "IWAVPR" : 11, - "NBANDS" : 81, - "NELECT" : 112.0, - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LREAL" : true, - "ROPT" : [ - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025, - -0.00025 - ], - "LMAXPAW" : -100, - "LMAXMIX" : 4, - "ISTART" : 0, - "ICHARG" : 1, - "INIWAV" : 1, - "ISPIN" : 2, - "LNONCOLLINEAR" : false, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "NUPDOWN" : -1.0, - "LSORBIT" : false, - "SAXIS" : [ - 0.0, - 0.0, - 1.0 - ], - "LSPIRAL" : false, - "QSPIRAL" : [ - 0.0, - 0.0, - 0.0 - ], - "LZEROZ" : false, - "LASPH" : false, - "LMETAGGA" : false, - "NELM" : 100, - "NELMDL" : -5, - "NELMIN" : 2, - "ENINI" : 520.0, - "LDIAG" : true, - "WEIMIN" : 0.001, - "EBREAK" : 3.1e-07, - "DEPER" : 0.3, - "NRMM" : 4, - "TIME" : 0.4, - "AMIX" : 0.4, - "BMIX" : 1.0, - "AMIN" : 0.1, - "AMIX_MAG" : 1.6, - "BMIX_MAG" : 1.0, - "IMIX" : 4, - "MAXMIX" : -45, - "WC" : 100.0, - "INIMIX" : 1, - "MIXPRE" : 1, - "MREMOVE" : 5, - "LDIPOL" : false, - "LMONO" : false, - "IDIPOL" : 0, - "EPSILON" : 1.0, - "DIPOL" : [ - -100.0, - -100.0, - -100.0 - ], - "EFIELD" : 0.0, - "NGX" : 40, - "NGY" : 50, - "NGZ" : 64, - "NGXF" : 80, - "NGYF" : 100, - "NGZF" : 128, - "ADDGRID" : false, - "NSW" : 99, - "IBRION" : 1, - "ISIF" : 3, - "PSTRESS" : 0.0, - "EDIFFG" : 0.001, - "NFREE" : 0, - "POTIM" : 0.5, - "SMASS" : -3.0, - "TEBEG" : 0.0001, - "TEEND" : 0.0001, - "NBLOCK" : 1, - "KBLOCK" : 99, - "NPACO" : 256, - "APACO" : 16.0, - "ISYM" : 2, - "SYMPREC" : 1e-05, - "LORBIT" : false, - "RWIGS" : [ - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0, - -1.0 - ], - "NEDOS" : 301, - "EMIN" : 10.0, - "EMAX" : -10.0, - "EFERMI" : 0.0, - "NWRITE" : 2, - "LWAVE" : false, - "LCHARG" : true, - "LPARD" : false, - "LVTOT" : false, - "LELF" : false, - "LOPTICS" : false, - "STM" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "NPAR" : 1, - "NSIM" : 4, - "NBLK" : 32, - "LPLANE" : true, - "LSCALAPACK" : false, - "LSCAAWARE" : false, - "LSCALU" : false, - "LASYNC" : false, - "IDIOT" : 3, - "LMUSIC" : false, - "POMASS" : [ - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 16.0, - 127.6, - 16.0, - 35.453, - 58.933, - 35.453, - 58.933 - ], - "LCORR" : true, - "LREAL_COMPAT" : false, - "GGA_COMPAT" : true, - "LBERRY" : false, - "ICORELEVEL" : 0, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0 - ], - "LDAUU" : [ - 0.0 - ], - "LDAUJ" : [ - 0.0 - ], - "LDAUPRINT" : 0, - "I_CONSTRAINED_M" : 0, - "GGA" : "--", - "VOSKOWN" : 0, - "LHFCALC" : false, - "LHFONE" : false, - "LRHFCALC" : false, - "LTHOMAS" : false, - "LMODELHF" : false, - "ENCUTFOCK" : 0.0, - "ENCUT4O" : -1.0, - "EXXOEP" : 0, - "FOURORBIT" : 0, - "AEXX" : 0.0, - "HFALPHA" : 0.0, - "ALDAX" : 1.0, - "AGGAX" : 1.0, - "ALDAC" : 1.0, - "AGGAC" : 1.0, - "NKREDX" : 1, - "NKREDY" : 1, - "NKREDZ" : 1, - "SHIFTRED" : false, - "ODDONLY" : false, - "EVENONLY" : false, - "LMAXFOCK" : 0, - "NMAXFOCKAE" : 0, - "HFSCREEN" : 0.0, - "HFSCREENC" : 0.0, - "MODEL_GW" : 0, - "MODEL_EPS0" : 10.31900526, - "MODEL_ALPHA" : 1.0, - "LEPSILON" : false, - "LRPA" : false, - "LNABLA" : false, - "LVEL" : false, - "KINTER" : 0, - "CSHIFT" : 0.1, - "OMEGAMAX" : -1.0, - "ORBITALMAG" : false, - "LMAGBLOCH" : false, - "LCHIMAG" : false, - "LGAUGE" : true, - "MAGATOM" : 0, - "MAGDIPOL" : [ - 0.0, - 0.0, - 0.0 - ], - "AVECCONST" : [ - 0.0, - 0.0, - 0.0 - ], - "LTCTE" : false, - "LTETE" : false, - "L2ORDER" : false, - "LGWLF" : false, - "ENCUTGW" : 346.66666667, - "ENCUTGWSOFT" : -2.0, - "ENCUTLF" : -1.0, - "LMAXMP2" : -1, - "SCISSOR" : 0.0, - "NOMEGA" : 0, - "NOMEGAR" : 0, - "NBANDSGW" : -1, - "NBANDSLF" : -1, - "DIM" : 3, - "ANTIRES" : 0, - "LUSEW" : false, - "OMEGATL" : -200.0, - "OMEGAGRID" : 0, - "SELFENERGY" : false, - "LSPECTRAL" : false, - "ODDONLYGW" : false, - "EVENONLYGW" : false, - "NKREDLFX" : 1, - "NKREDLFY" : 1, - "NKREDLFZ" : 1, - "MAXMEM" : 1024, - "TELESCOPE" : 0 - }, - "incar" : { - "PREC" : "accurate", - "ALGO" : "Fast", - "ISPIN" : 2, - "ICHARG" : 1, - "NELM" : 100, - "IBRION" : 1, - "EDIFF" : 0.0001, - "NSW" : 99, - "ISIF" : 3, - "ENCUT" : 520.0, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 0.6, - 5.0 - ], - "LREAL" : "Auto", - "ISMEAR" : -5, - "SIGMA" : 0.2, - "LMAXMIX" : 4, - "LWAVE" : false, - "LORBIT" : false, - "LPEAD" : false, - "LCALCPOL" : false, - "LCALCEPS" : false, - "EFIELD_PEAD" : [ - 0.0, - 0.0, - 0.0 - ], - "LEFG" : false, - "LDAU" : true, - "LDAUTYPE" : [ - 2 - ], - "LDAUL" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2 - ], - "LDAUU" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 3.32, - 0.0, - 3.32 - ], - "LDAUJ" : [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - } - }, - "output" : { - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "charge" : null, - "lattice" : { - "matrix" : [ - [ - 4.87503495, - -0.00010314, - -1.3544 - ], - [ - -0.00012155, - 6.74028524, - 4.213e-05 - ], - [ - 0.03119645, - 7.203e-05, - 8.55088908 - ] - ], - "a" : 5.05968033914786, - "b" : 6.74028524122764, - "c" : 8.55094598755858, - "alpha" : 89.9991630075578, - "beta" : 105.317518063952, - "gamma" : 90.0022593505773, - "volume" : 281.25953630278 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.16063903, - 0.74998854, - 0.49755777 - ], - "xyz" : [ - 0.798551760570978, - 5.05515595710777, - 4.03702339694734 - ], - "label" : "Cl", - "properties" : { - "magmom" : 0.065 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76165034, - 0.96320076, - 0.16141803 - ], - "xyz" : [ - 3.717990619629, - 6.49218093610942, - 0.348729029194131 - ], - "label" : "O", - "properties" : { - "magmom" : 0.081 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23827726, - 0.46327565, - 0.83861353 - ], - "xyz" : [ - 1.18771542419295, - 3.12264585516238, - 6.84818807287639 - ], - "label" : "O", - "properties" : { - "magmom" : 0.081 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.23830741, - 0.03675093, - 0.83859805 - ], - "xyz" : [ - 1.18791376765536, - 0.247747576226547, - 6.84799690046697 - ], - "label" : "O", - "properties" : { - "magmom" : 0.081 - } - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.40618477, - 0.24994075, - 0.75413034 - ], - "xyz" : [ - 2.00366075905484, - 1.68468437421074, - 5.89835876671848 - ], - "label" : "Te", - "properties" : { - "magmom" : 0.032 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.74893836, - 0.25000296, - 0.92694574 - ], - "xyz" : [ - 3.67998770896652, - 1.68508078364351, - 6.91185862375922 - ], - "label" : "O", - "properties" : { - "magmom" : 0.083 - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.74521998, - 0.74999604, - 0.80086186 - ], - "xyz" : [ - 3.65786633289204, - 5.05516806256149, - 5.83878658968365 - ], - "label" : "Cl", - "properties" : { - "magmom" : 0.104 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.25106481, - 0.74999839, - 0.07309656 - ], - "xyz" : [ - 1.22613891434002, - 5.05518244846148, - 0.285029995457735 - ], - "label" : "O", - "properties" : { - "magmom" : 0.083 - } - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.59388595, - 0.75005973, - 0.24584105 - ], - "xyz" : [ - 2.90279296082804, - 5.05557298177134, - 1.29783201919716 - ], - "label" : "Te", - "properties" : { - "magmom" : 0.032 - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.76168194, - 0.53677373, - 0.16140314 - ], - "xyz" : [ - 3.71819603842377, - 3.61794111553163, - 0.348540942044956 - ], - "label" : "O", - "properties" : { - "magmom" : 0.081 - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.25479684, - 0.25000525, - 0.19913897 - ], - "xyz" : [ - 1.24832554093208, - 1.68509476073144, - 1.35772893660063 - ], - "label" : "Cl", - "properties" : { - "magmom" : 0.104 - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.23109237, - 0.74999463, - 0.77468361 - ], - "xyz" : [ - 1.15065959708624, - 5.05520970026165, - 6.31127371254974 - ], - "label" : "Co", - "properties" : { - "magmom" : 2.683 - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.76886657, - 0.25000615, - 0.22527685 - ], - "xyz" : [ - 3.75524885037627, - 1.6850496885477, - 0.884975006992897 - ], - "label" : "Co", - "properties" : { - "magmom" : 2.683 - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.155e-05, - 0.50000395, - 7.69e-06 - ], - "xyz" : [ - -4.2289257495e-06, - 3.37016924348934, - 7.11781834387e-05 - ], - "label" : "Co", - "properties" : { - "magmom" : 2.697 - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.83937162, - 0.2500055, - 0.50241981 - ], - "xyz" : [ - 4.10760930985127, - 1.68505799807885, - 3.15930167750839 - ], - "label" : "Cl", - "properties" : { - "magmom" : 0.065 - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.119e-05, - 0.99999702, - 7.02e-06 - ], - "xyz" : [ - -6.67789976115e-05, - 6.7402651533015, - 8.70013797942e-05 - ], - "label" : "Co", - "properties" : { - "magmom" : 2.697 - } - } - ] - }, - "density" : 4.30244320015863, - "energy" : -79.70665916, - "energy_per_atom" : -4.9816661975, - "bandgap" : 2.4452, - "cbm" : 4.5251, - "vbm" : 2.0799, - "is_gap_direct" : false, - "is_metal" : false, - "spacegroup" : { - "source" : "spglib", - "symbol" : "P2_1/m", - "number" : 11, - "point_group" : "2/m", - "crystal_system" : "monoclinic", - "hall" : "-P 2yb" - } - }, - "state" : "successful", - "analysis" : { - "delta_volume" : 6.08606301155083, - "delta_volume_percent" : 0.0221171864379153, - "max_force" : 0.061076220946379, - "warnings" : [], - "errors" : [] - }, - "last_updated" : "2013-06-23T16:27:42.000Z", - "transformations" : {}, - "custodian" : [ - { - "corrections" : [], - "job" : { - "settings_override" : null, - "suffix" : ".relax1", - "auto_gamma" : true, - "output_file" : "vasp.out", - "auto_npar" : false, - "@module" : "custodian.vasp.jobs", - "default_vasp_input_set" : { - "user_incar_settings" : null, - "constrain_total_magmom" : false, - "name" : "MIT", - "@class" : "MITVaspInputSet", - "@module" : "pymatgen.io.vaspio_set" - }, - "gamma_vasp_cmd" : [ - "aprun", - "-n", - "32", - "gvasp" - ], - "vasp_cmd" : [ - "mpirun", - "-n", - "32", - "vasp" - ], - "gzipped" : false, - "backup" : true, - "final" : false, - "@class" : "VaspJob" - } - }, - { - "corrections" : [], - "job" : { - "settings_override" : [ - { - "action" : { - "_set" : { - "ISTART" : 1 - } - }, - "dict" : "INCAR" - }, - { - "action" : { - "_file_copy" : { - "dest" : "POSCAR" - } - }, - "filename" : "CONTCAR" - } - ], - "suffix" : ".relax2", - "auto_gamma" : true, - "output_file" : "vasp.out", - "auto_npar" : false, - "@module" : "custodian.vasp.jobs", - "default_vasp_input_set" : { - "user_incar_settings" : null, - "constrain_total_magmom" : false, - "name" : "MIT", - "@class" : "MITVaspInputSet", - "@module" : "pymatgen.io.vaspio_set" - }, - "gamma_vasp_cmd" : [ - "aprun", - "-n", - "32", - "gvasp" - ], - "vasp_cmd" : [ - "mpirun", - "-n", - "32", - "vasp" - ], - "gzipped" : false, - "backup" : false, - "final" : true, - "@class" : "VaspJob" - } - } - ], - "orig_inputs" : { - "potcar" : { - "functional" : "PBE", - "symbols" : [ - "Cl", - "O", - "Te", - "O", - "Cl", - "O", - "Te", - "O", - "Cl", - "Co", - "Cl", - "Co" - ], - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Potcar" - }, - "incar" : { - "ALGO" : "Fast", - "EDIFF" : 0.0001, - "ENCUT" : 520, - "IBRION" : 1, - "ICHARG" : 1, - "ISIF" : 3, - "ISMEAR" : -5, - "ISPIN" : 2, - "LDAU" : true, - "LDAUJ" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "LDAUL" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2 - ], - "LDAUTYPE" : 2, - "LDAUU" : [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3.32, - 0, - 3.32 - ], - "LMAXMIX" : 4, - "LORBIT" : 11, - "LREAL" : "Auto", - "LWAVE" : false, - "MAGMOM" : [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5, - 5, - 5, - 0.6, - 5 - ], - "NELM" : 100, - "NPAR" : 1, - "NSW" : 99, - "PREC" : "Accurate", - "SIGMA" : 0.2, - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Incar" - }, - "kpoints" : { - "comment" : "Automatic kpoint scheme", - "nkpoints" : 0, - "generation_style" : "Monkhorst", - "kpoints" : [ - [ - 6, - 4, - 4 - ] - ], - "usershift" : [ - 0, - 0, - 0 - ], - "kpts_weights" : null, - "coord_type" : null, - "labels" : null, - "tet_number" : 0, - "tet_weight" : 0, - "tet_connections" : null, - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Kpoints" - }, - "poscar" : { - "@module" : "pymatgen.io.vasp.inputs", - "@class" : "Poscar", - "structure" : { - "@module" : "pymatgen.core.structure", - "@class" : "Structure", - "lattice" : { - "matrix" : [ - [ - 4.85343059212385, - 6.04126165923e-05, - -1.29721955888892 - ], - [ - 6.91070227106e-05, - 6.66863986414793, - -8.24090625084e-05 - ], - [ - 0.109988050864569, - -8.61947386175e-05, - 8.47259033824259 - ] - ], - "a" : 5.02380006570498, - "b" : 6.6686398650152, - "c" : 8.47330422081282, - "alpha" : 90.0012831189018, - "beta" : 104.220410424159, - "gamma" : 89.9985545549042, - "volume" : 275.173473532171 - }, - "sites" : [ - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.160692092124477, - 0.749979095140858, - 0.500566390643178 - ], - "xyz" : [ - 0.835016066286838, - 5.00130705277447, - 4.03257923507557 - ], - "label" : "Cl", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.764107085729787, - 0.96455099115692, - 0.16327595579065 - ], - "xyz" : [ - 3.72656576691727, - 6.43227527881251, - 0.392076141061965 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.235850317178947, - 0.464575668048583, - 0.836716435122868 - ], - "xyz" : [ - 1.23674405982518, - 3.0980299476423, - 6.78316765441084 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.235867627654008, - 0.0354279540073287, - 0.836728840520845 - ], - "xyz" : [ - 1.23679978233912, - 0.236198394155325, - 6.78328567043985 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.412549776425686, - 0.249977389812936, - 0.751400531491405 - ], - "xyz" : [ - 2.08494406074877, - 1.66696934328125, - 5.83112064386744 - ], - "label" : "Te", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.754765044517832, - 0.249982529084906, - 0.922307024567344 - ], - "xyz" : [ - 3.76465978440774, - 1.66700955811447, - 6.83521300630248 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.741256986076674, - 0.750008214534492, - 0.803518932074337 - ], - "xyz" : [ - 3.68606864485641, - 5.0015102000529, - 5.84625187251248 - ], - "label" : "Cl", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.245222438182061, - 0.750016335875889, - 0.0777520334252487 - ], - "xyz" : [ - 1.19877370935117, - 5.00159694889706, - 0.340591975946173 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Te", - "occu" : 1 - } - ], - "abc" : [ - 0.587520693525747, - 0.750033140123147, - 0.24860474406942 - ], - "xyz" : [ - 2.87888629125681, - 5.00171496289873, - 1.34412100822233 - ], - "label" : "Te", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "O", - "occu" : 1 - } - ], - "abc" : [ - 0.764114732349919, - 0.535447094198994, - 0.163293010841053 - ], - "xyz" : [ - 3.72657510101634, - 3.57073592468955, - 0.392246084221906 - ], - "label" : "O", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.258757020452288, - 0.249989789176678, - 0.196488918304381 - ], - "xyz" : [ - 1.27748794818078, - 1.66709056961124, - 1.32908484144274 - ], - "label" : "Cl", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.233165129540522, - 0.750003734700252, - 0.775121034901736 - ], - "xyz" : [ - 1.21695665506659, - 5.0014520782425, - 6.26475481768156 - ], - "label" : "Co", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 0.766792619567399, - 0.249996023014811, - 0.224823788408838 - ], - "xyz" : [ - 3.74631996437912, - 1.66716039027587, - 0.91012087182743 - ], - "label" : "Co", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.41058153896e-05, - 0.500004328784573, - 1.35316697435e-05 - ], - "xyz" : [ - 0.00010450372842348, - 3.33434879886514, - 5.51450667263238e-05 - ], - "label" : "Co", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Cl", - "occu" : 1 - } - ], - "abc" : [ - 0.839306388350428, - 0.250014152762199, - 0.499377267929408 - ], - "xyz" : [ - 4.12845811146431, - 1.66726200671313, - 3.14223374909615 - ], - "label" : "Cl", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species" : [ - { - "element" : "Co", - "occu" : 1 - } - ], - "abc" : [ - 1.79425088352e-05, - 0.999993559577428, - 1.15602395523e-05 - ], - "xyz" : [ - 0.000157460787128268, - 6.66859691537675, - -7.73873121718553e-06 - ], - "label" : "Co", - "properties" : { - "velocities" : [ - 0.0, - 0.0, - 0.0 - ] - } - } - ] - }, - "true_names" : true, - "selective_dynamics" : null, - "velocities" : [ - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ] - ], - "predictor_corrector" : null, - "comment" : "Co4 Te2 Cl4 O6" - } - }, - "task_id" : "mp-637730", - "sbxn" : [ - "basf", - "core", - "jcesr", - "mkhorton", - "shyamd", - "vw" - ], - "task_type" : "GGA+U Structure Optimization", - "tags" : [ - "mp_2018", - "mp_production_old", - "prod" - ] -} diff --git a/test_files/old_aflow_ggau_task.json.gz b/test_files/old_aflow_ggau_task.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b4d53d3c8be6159681102669c22e76c1c500cc20 GIT binary patch literal 24295 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 literal 0 HcmV?d00001 diff --git a/test_files/test_si_tasks.json.gz b/test_files/test_si_tasks.json.gz index 689dde5220a7173f8f1bcfbcbeb060f01ceb5c30..a467e1fc11065a4109d603fedd97f0087789cf86 100644 GIT binary patch literal 24329 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 Q716bOk0i61=Wbm4AF}MCPXGV_ literal 49079 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 z%0A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 diff --git a/test_files/test_task.json b/test_files/test_task.json deleted file mode 100644 index 8bd8371f63..0000000000 --- a/test_files/test_task.json +++ /dev/null @@ -1,2742 +0,0 @@ -{ - "chemsys": "Ca-Mn-O-Zn", - "calcs_reversed": [ - { - "output": { - "ionic_steps": [ - { - "e_fr_energy": -142.14583249, - "electronic_steps": [ - { - "alphaZ": 1063.84680124, - "ewald": -13355.58847847, - "hartreedc": -5083.16359726, - "XCdc": 849.02698648, - "pawpsdc": 12918.26704971, - "pawaedc": -13406.28524818, - "eentropy": 0.0, - "bandstr": -1898.58769233, - "atom": 18770.46958238, - "e_fr_energy": -142.01459643, - "e_wo_entrp": -142.01459643, - "e_0_energy": -142.01459643 - }, - { - "e_fr_energy": -142.14448764, - "e_wo_entrp": -142.14448764, - "e_0_energy": -142.14448764 - }, - { - "e_fr_energy": -142.14565553, - "e_wo_entrp": -142.14565553, - "e_0_energy": -142.14565553 - }, - { - "e_fr_energy": -142.1457382, - "e_wo_entrp": -142.1457382, - "e_0_energy": -142.1457382 - }, - { - "e_fr_energy": -142.14578878, - "e_wo_entrp": -142.14578878, - "e_0_energy": -142.14578878 - }, - { - "e_fr_energy": -142.14581405, - "e_wo_entrp": -142.14581405, - "e_0_energy": -142.14581405 - }, - { - "e_fr_energy": -142.14582894, - "e_wo_entrp": -142.14582894, - "e_0_energy": -142.14582894 - }, - { - "e_fr_energy": -142.14583204, - "e_wo_entrp": -142.14583204, - "e_0_energy": -142.14583204 - }, - { - "alphaZ": 1063.84680124, - "ewald": -13355.58847847, - "hartreedc": -5083.16084494, - "XCdc": 849.02791891, - "pawpsdc": 12917.39465219, - "pawaedc": -13405.38080787, - "eentropy": 0.0, - "bandstr": -1898.75465594, - "atom": 18770.46958238, - "e_fr_energy": -142.14583249, - "e_wo_entrp": -142.14583249, - "e_0_energy": -142.14583249 - } - ] - }, - { - "e_fr_energy": -142.14584269, - "electronic_steps": [ - { - "alphaZ": 1063.39645502, - "ewald": -13353.58748225, - "hartreedc": -5082.54107162, - "XCdc": 848.90919928, - "pawpsdc": 12917.39167463, - "pawaedc": -13405.37805869, - "eentropy": 0.0, - "bandstr": -1900.8064369, - "atom": 18770.46958238, - "e_fr_energy": -142.14613816, - "e_wo_entrp": -142.14613816, - "e_0_energy": -142.14613816 - }, - { - "e_fr_energy": -142.14597835, - "e_wo_entrp": -142.14597835, - "e_0_energy": -142.14597835 - }, - { - "e_fr_energy": -142.14588096, - "e_wo_entrp": -142.14588096, - "e_0_energy": -142.14588096 - }, - { - "e_fr_energy": -142.14584744, - "e_wo_entrp": -142.14584744, - "e_0_energy": -142.14584744 - }, - { - "e_fr_energy": -142.14584342, - "e_wo_entrp": -142.14584342, - "e_0_energy": -142.14584342 - }, - { - "alphaZ": 1063.39645502, - "ewald": -13353.58748225, - "hartreedc": -5084.17293075, - "XCdc": 849.00500041, - "pawpsdc": 12916.6863311, - "pawaedc": -13404.6588993, - "eentropy": 0.0, - "bandstr": -1899.2838993, - "atom": 18770.46958238, - "e_fr_energy": -142.14584269, - "e_wo_entrp": -142.14584269, - "e_0_energy": -142.14584269 - } - ] - } - ] - }, - "input": { - "incar": { - "SYSTEM": "Rubyvaspy :: o ca mn zn", - "ISTART": 1, - "PREC": "accurate", - "ALGO": "Fast", - "ISPIN": 2, - "ICHARG": 1, - "NELM": 100, - "NELMIN": 3, - "IBRION": 1, - "EDIFF": 2e-06, - "NSW": 200, - "ISIF": 3, - "ENCUT": 520.0, - "NGX": 50, - "NGY": 50, - "MAGMOM": [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 5.0 - ], - "LREAL": "Auto", - "ISMEAR": -5, - "SIGMA": 0.05, - "LWAVE": true, - "LPEAD": false, - "LCALCPOL": false, - "LCALCEPS": false, - "EFIELD_PEAD": [ - 0.0, - 0.0, - 0.0 - ], - "LEFG": false, - "LDAU": true, - "LDAUTYPE": [ - 2 - ], - "LDAUL": [ - 0, - 2, - 0, - 0 - ], - "LDAUU": [ - 0.0, - 3.9, - 0.0, - 0.0 - ], - "LDAUJ": [ - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "parameters": { - "SYSTEM": "Rubyvaspy :: o ca mn zn", - "LCOMPAT": false, - "PREC": "accura", - "ENMAX": 520.0, - "ENAUG": 605.392, - "EDIFF": 2e-06, - "IALGO": 68, - "IWAVPR": 11, - "NBANDS": 124, - "NELECT": 182.0, - "ISMEAR": -5, - "SIGMA": 0.05, - "LREAL": true, - "ROPT": [ - -0.00025, - -0.00025, - -0.00025, - -0.00025 - ], - "LMAXPAW": -100, - "LMAXMIX": 2, - "ISTART": 1, - "ICHARG": 1, - "INIWAV": 1, - "ISPIN": 2, - "LNONCOLLINEAR": false, - "MAGMOM": [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 5.0 - ], - "NUPDOWN": -1.0, - "LSORBIT": false, - "SAXIS": [ - 0.0, - 0.0, - 1.0 - ], - "LSPIRAL": false, - "QSPIRAL": [ - 0.0, - 0.0, - 0.0 - ], - "LZEROZ": false, - "LASPH": false, - "LMETAGGA": false, - "NELM": 100, - "NELMDL": 0, - "NELMIN": 3, - "ENINI": 520.0, - "LDIAG": true, - "WEIMIN": 0.001, - "EBREAK": 0.0, - "DEPER": 0.3, - "NRMM": 4, - "TIME": 0.4, - "AMIX": 0.4, - "BMIX": 1.0, - "AMIN": 0.1, - "AMIX_MAG": 1.6, - "BMIX_MAG": 1.0, - "IMIX": 4, - "MAXMIX": -45, - "WC": 100.0, - "INIMIX": 1, - "MIXPRE": 1, - "MREMOVE": 5, - "LDIPOL": false, - "LMONO": false, - "IDIPOL": 0, - "EPSILON": 1.0, - "DIPOL": [ - -100.0, - -100.0, - -100.0 - ], - "EFIELD": 0.0, - "NGX": 50, - "NGY": 50, - "NGZ": 48, - "NGXF": 100, - "NGYF": 100, - "NGZF": 96, - "ADDGRID": false, - "NSW": 200, - "IBRION": 1, - "ISIF": 3, - "PSTRESS": 0.0, - "EDIFFG": 2e-05, - "NFREE": 0, - "POTIM": 0.5, - "SMASS": -3.0, - "TEBEG": 0.0001, - "TEEND": 0.0001, - "NBLOCK": 1, - "KBLOCK": 200, - "NPACO": 256, - "APACO": 16.0, - "ISYM": 2, - "SYMPREC": 1e-05, - "LORBIT": false, - "RWIGS": [ - -1.0, - -1.0, - -1.0, - -1.0 - ], - "NEDOS": 301, - "EMIN": 10.0, - "EMAX": -10.0, - "EFERMI": 0.0, - "NWRITE": 2, - "LWAVE": true, - "LCHARG": true, - "LPARD": false, - "LVTOT": false, - "LELF": false, - "LOPTICS": false, - "STM": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "NPAR": 1, - "NSIM": 4, - "NBLK": 32, - "LPLANE": true, - "LSCALAPACK": false, - "LSCAAWARE": false, - "LSCALU": false, - "LASYNC": false, - "IDIOT": 3, - "LMUSIC": false, - "POMASS": [ - 16.0, - 40.078, - 54.938, - 65.39 - ], - "LCORR": true, - "LREAL_COMPAT": false, - "GGA_COMPAT": true, - "LBERRY": false, - "ICORELEVEL": 0, - "LDAU": true, - "LDAUTYPE": [ - 2 - ], - "LDAUL": [ - 0 - ], - "LDAUU": [ - 0.0 - ], - "LDAUJ": [ - 0.0 - ], - "LDAUPRINT": 0, - "I_CONSTRAINED_M": 0, - "GGA": "--", - "VOSKOWN": 0, - "LHFCALC": false, - "LHFONE": false, - "LRHFCALC": false, - "LTHOMAS": false, - "LMODELHF": false, - "ENCUTFOCK": 0.0, - "ENCUT4O": -1.0, - "EXXOEP": 0, - "FOURORBIT": 0, - "AEXX": 0.0, - "HFALPHA": 0.0, - "ALDAX": 1.0, - "AGGAX": 1.0, - "ALDAC": 1.0, - "AGGAC": 1.0, - "NKREDX": 1, - "NKREDY": 1, - "NKREDZ": 1, - "SHIFTRED": false, - "ODDONLY": false, - "EVENONLY": false, - "LMAXFOCK": 0, - "NMAXFOCKAE": 0, - "HFSCREEN": 0.0, - "HFSCREENC": 0.0, - "MODEL_GW": 0, - "MODEL_EPS0": 7.33907885, - "MODEL_ALPHA": 1.0, - "LEPSILON": false, - "LRPA": false, - "LNABLA": false, - "LVEL": false, - "KINTER": 0, - "CSHIFT": 0.1, - "OMEGAMAX": -1.0, - "ORBITALMAG": false, - "LMAGBLOCH": false, - "LCHIMAG": false, - "LGAUGE": true, - "MAGATOM": 0, - "MAGDIPOL": [ - 0.0, - 0.0, - 0.0 - ], - "AVECCONST": [ - 0.0, - 0.0, - 0.0 - ], - "LTCTE": false, - "LTETE": false, - "L2ORDER": false, - "LGWLF": false, - "ENCUTGW": 346.66666667, - "ENCUTGWSOFT": -2.0, - "ENCUTLF": -1.0, - "LMAXMP2": -1, - "SCISSOR": 0.0, - "NOMEGA": 0, - "NOMEGAR": 0, - "NBANDSGW": -1, - "NBANDSLF": -1, - "DIM": 3, - "ANTIRES": 0, - "LUSEW": false, - "OMEGATL": -200.0, - "OMEGAGRID": 0, - "SELFENERGY": false, - "LSPECTRAL": false, - "ODDONLYGW": false, - "EVENONLYGW": false, - "NKREDLFX": 1, - "NKREDLFY": 1, - "NKREDLFZ": 1, - "MAXMEM": 1024, - "TELESCOPE": 0 - } - } - }, - { - "output": { - "ionic_steps": [ - { - "e_fr_energy": -142.05621711, - "electronic_steps": [ - { - "alphaZ": 1091.31295542, - "ewald": -13514.5429809, - "hartreedc": -5004.22626223, - "XCdc": 853.6073408, - "pawpsdc": 12277.32674994, - "pawaedc": -12693.99336411, - "eentropy": 0.0, - "bandstr": 864.26085832, - "atom": 18770.46958238, - "e_fr_energy": 2644.21487962, - "e_wo_entrp": 2644.21487962, - "e_0_energy": 2644.21487962 - }, - { - "e_fr_energy": 313.23211873, - "e_wo_entrp": 313.23211873, - "e_0_energy": 313.23211873 - }, - { - "e_fr_energy": -118.27569569, - "e_wo_entrp": -118.27569569, - "e_0_energy": -118.27569569 - }, - { - "e_fr_energy": -159.68639244, - "e_wo_entrp": -159.68639244, - "e_0_energy": -159.68639244 - }, - { - "e_fr_energy": -162.16079381, - "e_wo_entrp": -162.16079381, - "e_0_energy": -162.16079381 - }, - { - "e_fr_energy": -165.48018325, - "e_wo_entrp": -165.48018325, - "e_0_energy": -165.48018325 - }, - { - "e_fr_energy": -150.17924752, - "e_wo_entrp": -150.17924752, - "e_0_energy": -150.17924752 - }, - { - "e_fr_energy": -140.80814163, - "e_wo_entrp": -140.80814163, - "e_0_energy": -140.80814163 - }, - { - "e_fr_energy": -142.05991831, - "e_wo_entrp": -142.05991831, - "e_0_energy": -142.05991831 - }, - { - "e_fr_energy": -142.04670045, - "e_wo_entrp": -142.04670045, - "e_0_energy": -142.04670045 - }, - { - "e_fr_energy": -142.01986791, - "e_wo_entrp": -142.01986791, - "e_0_energy": -142.01986791 - }, - { - "e_fr_energy": -142.04970936, - "e_wo_entrp": -142.04970936, - "e_0_energy": -142.04970936 - }, - { - "e_fr_energy": -142.0528434, - "e_wo_entrp": -142.0528434, - "e_0_energy": -142.0528434 - }, - { - "e_fr_energy": -142.05402937, - "e_wo_entrp": -142.05402937, - "e_0_energy": -142.05402937 - }, - { - "e_fr_energy": -142.05522623, - "e_wo_entrp": -142.05522623, - "e_0_energy": -142.05522623 - }, - { - "e_fr_energy": -142.05575347, - "e_wo_entrp": -142.05575347, - "e_0_energy": -142.05575347 - }, - { - "e_fr_energy": -142.05599017, - "e_wo_entrp": -142.05599017, - "e_0_energy": -142.05599017 - }, - { - "e_fr_energy": -142.05609471, - "e_wo_entrp": -142.05609471, - "e_0_energy": -142.05609471 - }, - { - "e_fr_energy": -142.05614714, - "e_wo_entrp": -142.05614714, - "e_0_energy": -142.05614714 - }, - { - "e_fr_energy": -142.05617727, - "e_wo_entrp": -142.05617727, - "e_0_energy": -142.05617727 - }, - { - "e_fr_energy": -142.05619482, - "e_wo_entrp": -142.05619482, - "e_0_energy": -142.05619482 - }, - { - "e_fr_energy": -142.05620488, - "e_wo_entrp": -142.05620488, - "e_0_energy": -142.05620488 - }, - { - "e_fr_energy": -142.0562111, - "e_wo_entrp": -142.0562111, - "e_0_energy": -142.0562111 - }, - { - "e_fr_energy": -142.056214, - "e_wo_entrp": -142.056214, - "e_0_energy": -142.056214 - }, - { - "e_fr_energy": -142.05621609, - "e_wo_entrp": -142.05621609, - "e_0_energy": -142.05621609 - }, - { - "alphaZ": 1091.31295542, - "ewald": -13514.5429809, - "hartreedc": -4984.42420925, - "XCdc": 850.28992248, - "pawpsdc": 12958.34006333, - "pawaedc": -13446.18024445, - "eentropy": 0.0, - "bandstr": -1867.32130613, - "atom": 18770.46958238, - "e_fr_energy": -142.05621711, - "e_wo_entrp": -142.05621711, - "e_0_energy": -142.05621711 - } - ] - }, - { - "e_fr_energy": -142.11859671, - "electronic_steps": [ - { - "alphaZ": 1055.60179599, - "ewald": -13344.54097585, - "hartreedc": -4948.93906994, - "XCdc": 841.06930239, - "pawpsdc": 12958.34150216, - "pawaedc": -13446.18060535, - "eentropy": 0.0, - "bandstr": -2029.7731917, - "atom": 18770.46958238, - "e_fr_energy": -143.95165992, - "e_wo_entrp": -143.95165992, - "e_0_energy": -143.95165992 - }, - { - "e_fr_energy": -143.19094566, - "e_wo_entrp": -143.19094566, - "e_0_energy": -143.19094566 - }, - { - "e_fr_energy": -142.2819002, - "e_wo_entrp": -142.2819002, - "e_0_energy": -142.2819002 - }, - { - "e_fr_energy": -142.13624316, - "e_wo_entrp": -142.13624316, - "e_0_energy": -142.13624316 - }, - { - "e_fr_energy": -142.11581473, - "e_wo_entrp": -142.11581473, - "e_0_energy": -142.11581473 - }, - { - "e_fr_energy": -142.11744837, - "e_wo_entrp": -142.11744837, - "e_0_energy": -142.11744837 - }, - { - "e_fr_energy": -142.11823595, - "e_wo_entrp": -142.11823595, - "e_0_energy": -142.11823595 - }, - { - "e_fr_energy": -142.11842249, - "e_wo_entrp": -142.11842249, - "e_0_energy": -142.11842249 - }, - { - "e_fr_energy": -142.11853617, - "e_wo_entrp": -142.11853617, - "e_0_energy": -142.11853617 - }, - { - "e_fr_energy": -142.11856611, - "e_wo_entrp": -142.11856611, - "e_0_energy": -142.11856611 - }, - { - "e_fr_energy": -142.11857892, - "e_wo_entrp": -142.11857892, - "e_0_energy": -142.11857892 - }, - { - "e_fr_energy": -142.11858174, - "e_wo_entrp": -142.11858174, - "e_0_energy": -142.11858174 - }, - { - "e_fr_energy": -142.11859044, - "e_wo_entrp": -142.11859044, - "e_0_energy": -142.11859044 - }, - { - "e_fr_energy": -142.1185941, - "e_wo_entrp": -142.1185941, - "e_0_energy": -142.1185941 - }, - { - "e_fr_energy": -142.11859553, - "e_wo_entrp": -142.11859553, - "e_0_energy": -142.11859553 - }, - { - "alphaZ": 1055.60179599, - "ewald": -13344.54097585, - "hartreedc": -5075.5957797, - "XCdc": 848.48498388, - "pawpsdc": 12893.6377139, - "pawaedc": -13381.21188455, - "eentropy": 0.0, - "bandstr": -1908.96403276, - "atom": 18770.46958238, - "e_fr_energy": -142.11859671, - "e_wo_entrp": -142.11859671, - "e_0_energy": -142.11859671 - } - ] - }, - { - "e_fr_energy": -142.13492106, - "electronic_steps": [ - { - "alphaZ": 1066.33841571, - "ewald": -13369.02395502, - "hartreedc": -5111.76861267, - "XCdc": 851.40763853, - "pawpsdc": 12893.62685177, - "pawaedc": -13381.20614379, - "eentropy": 0.0, - "bandstr": -1862.12239864, - "atom": 18770.46958238, - "e_fr_energy": -142.27862171, - "e_wo_entrp": -142.27862171, - "e_0_energy": -142.27862171 - }, - { - "e_fr_energy": -142.19567529, - "e_wo_entrp": -142.19567529, - "e_0_energy": -142.19567529 - }, - { - "e_fr_energy": -142.157843, - "e_wo_entrp": -142.157843, - "e_0_energy": -142.157843 - }, - { - "e_fr_energy": -142.13647155, - "e_wo_entrp": -142.13647155, - "e_0_energy": -142.13647155 - }, - { - "e_fr_energy": -142.13465754, - "e_wo_entrp": -142.13465754, - "e_0_energy": -142.13465754 - }, - { - "e_fr_energy": -142.13476908, - "e_wo_entrp": -142.13476908, - "e_0_energy": -142.13476908 - }, - { - "e_fr_energy": -142.13483298, - "e_wo_entrp": -142.13483298, - "e_0_energy": -142.13483298 - }, - { - "e_fr_energy": -142.13490236, - "e_wo_entrp": -142.13490236, - "e_0_energy": -142.13490236 - }, - { - "e_fr_energy": -142.1349103, - "e_wo_entrp": -142.1349103, - "e_0_energy": -142.1349103 - }, - { - "e_fr_energy": -142.13491561, - "e_wo_entrp": -142.13491561, - "e_0_energy": -142.13491561 - }, - { - "e_fr_energy": -142.13491936, - "e_wo_entrp": -142.13491936, - "e_0_energy": -142.13491936 - }, - { - "alphaZ": 1066.33841571, - "ewald": -13369.02395502, - "hartreedc": -5075.16390508, - "XCdc": 849.15952915, - "pawpsdc": 12923.07091898, - "pawaedc": -13411.06236612, - "eentropy": 0.0, - "bandstr": -1895.92314109, - "atom": 18770.46958238, - "e_fr_energy": -142.13492106, - "e_wo_entrp": -142.13492106, - "e_0_energy": -142.13492106 - } - ] - }, - { - "e_fr_energy": -142.13624156, - "electronic_steps": [ - { - "alphaZ": 1063.83167854, - "ewald": -13357.71492389, - "hartreedc": -5071.88568584, - "XCdc": 848.4992362, - "pawpsdc": 12923.09579567, - "pawaedc": -13411.07044766, - "eentropy": 0.0, - "bandstr": -1907.37042154, - "atom": 18770.46958238, - "e_fr_energy": -142.14518613, - "e_wo_entrp": -142.14518613, - "e_0_energy": -142.14518613 - }, - { - "e_fr_energy": -142.14038883, - "e_wo_entrp": -142.14038883, - "e_0_energy": -142.14038883 - }, - { - "e_fr_energy": -142.13744118, - "e_wo_entrp": -142.13744118, - "e_0_energy": -142.13744118 - }, - { - "e_fr_energy": -142.13635941, - "e_wo_entrp": -142.13635941, - "e_0_energy": -142.13635941 - }, - { - "e_fr_energy": -142.13624624, - "e_wo_entrp": -142.13624624, - "e_0_energy": -142.13624624 - }, - { - "e_fr_energy": -142.13624707, - "e_wo_entrp": -142.13624707, - "e_0_energy": -142.13624707 - }, - { - "e_fr_energy": -142.13624496, - "e_wo_entrp": -142.13624496, - "e_0_energy": -142.13624496 - }, - { - "e_fr_energy": -142.13624004, - "e_wo_entrp": -142.13624004, - "e_0_energy": -142.13624004 - }, - { - "alphaZ": 1063.83167854, - "ewald": -13357.71492389, - "hartreedc": -5080.9898164, - "XCdc": 849.02829176, - "pawpsdc": 12918.11605196, - "pawaedc": -13406.03468285, - "eentropy": 0.0, - "bandstr": -1898.84242306, - "atom": 18770.46958238, - "e_fr_energy": -142.13624156, - "e_wo_entrp": -142.13624156, - "e_0_energy": -142.13624156 - } - ] - }, - { - "e_fr_energy": -142.13658114, - "electronic_steps": [ - { - "alphaZ": 1063.40543948, - "ewald": -13353.74811329, - "hartreedc": -5082.280932, - "XCdc": 848.9205413, - "pawpsdc": 12918.12258229, - "pawaedc": -13406.04773725, - "eentropy": 0.0, - "bandstr": -1900.97801953, - "atom": 18770.46958238, - "e_fr_energy": -142.13665663, - "e_wo_entrp": -142.13665663, - "e_0_energy": -142.13665663 - }, - { - "e_fr_energy": -142.13683312, - "e_wo_entrp": -142.13683312, - "e_0_energy": -142.13683312 - }, - { - "e_fr_energy": -142.13669125, - "e_wo_entrp": -142.13669125, - "e_0_energy": -142.13669125 - }, - { - "e_fr_energy": -142.13659518, - "e_wo_entrp": -142.13659518, - "e_0_energy": -142.13659518 - }, - { - "e_fr_energy": -142.13658185, - "e_wo_entrp": -142.13658185, - "e_0_energy": -142.13658185 - }, - { - "alphaZ": 1063.40543948, - "ewald": -13353.74811329, - "hartreedc": -5084.06303348, - "XCdc": 849.01260663, - "pawpsdc": 12917.93798192, - "pawaedc": -13405.89701516, - "eentropy": 0.0, - "bandstr": -1899.25402962, - "atom": 18770.46958238, - "e_fr_energy": -142.13658114, - "e_wo_entrp": -142.13658114, - "e_0_energy": -142.13658114 - } - ] - }, - { - "e_fr_energy": -142.13668119, - "electronic_steps": [ - { - "alphaZ": 1063.52562853, - "ewald": -13354.08273733, - "hartreedc": -5084.4127163, - "XCdc": 849.04416035, - "pawpsdc": 12917.90018049, - "pawaedc": -13405.86179927, - "eentropy": 0.0, - "bandstr": -1898.71889844, - "atom": 18770.46958238, - "e_fr_energy": -142.13659958, - "e_wo_entrp": -142.13659958, - "e_0_energy": -142.13659958 - }, - { - "e_fr_energy": -142.13670113, - "e_wo_entrp": -142.13670113, - "e_0_energy": -142.13670113 - }, - { - "e_fr_energy": -142.13668799, - "e_wo_entrp": -142.13668799, - "e_0_energy": -142.13668799 - }, - { - "e_fr_energy": -142.13668246, - "e_wo_entrp": -142.13668246, - "e_0_energy": -142.13668246 - }, - { - "alphaZ": 1063.52562853, - "ewald": -13354.08273733, - "hartreedc": -5083.98580014, - "XCdc": 849.01668736, - "pawpsdc": 12917.95755068, - "pawaedc": -13405.93673144, - "eentropy": 0.0, - "bandstr": -1899.10086123, - "atom": 18770.46958238, - "e_fr_energy": -142.13668119, - "e_wo_entrp": -142.13668119, - "e_0_energy": -142.13668119 - } - ] - }, - { - "e_fr_energy": -142.13677045, - "electronic_steps": [ - { - "alphaZ": 1063.61178177, - "ewald": -13354.53044227, - "hartreedc": -5084.05744483, - "XCdc": 849.038342, - "pawpsdc": 12917.98415684, - "pawaedc": -13405.96664258, - "eentropy": 0.0, - "bandstr": -1898.68596958, - "atom": 18770.46958238, - "e_fr_energy": -142.13663627, - "e_wo_entrp": -142.13663627, - "e_0_energy": -142.13663627 - }, - { - "e_fr_energy": -142.13678819, - "e_wo_entrp": -142.13678819, - "e_0_energy": -142.13678819 - }, - { - "e_fr_energy": -142.13677425, - "e_wo_entrp": -142.13677425, - "e_0_energy": -142.13677425 - }, - { - "e_fr_energy": -142.13677179, - "e_wo_entrp": -142.13677179, - "e_0_energy": -142.13677179 - }, - { - "alphaZ": 1063.61178177, - "ewald": -13354.53044227, - "hartreedc": -5083.71469885, - "XCdc": 849.01807361, - "pawpsdc": 12917.98490154, - "pawaedc": -13405.97138321, - "eentropy": 0.0, - "bandstr": -1899.00458544, - "atom": 18770.46958238, - "e_fr_energy": -142.13677045, - "e_wo_entrp": -142.13677045, - "e_0_energy": -142.13677045 - } - ] - }, - { - "e_fr_energy": -142.13683423, - "electronic_steps": [ - { - "alphaZ": 1063.83404838, - "ewald": -13355.46288759, - "hartreedc": -5084.10733908, - "XCdc": 849.07648089, - "pawpsdc": 12917.9957854, - "pawaedc": -13405.98289653, - "eentropy": 0.0, - "bandstr": -1897.95928569, - "atom": 18770.46958238, - "e_fr_energy": -142.13651184, - "e_wo_entrp": -142.13651184, - "e_0_energy": -142.13651184 - }, - { - "e_fr_energy": -142.13689019, - "e_wo_entrp": -142.13689019, - "e_0_energy": -142.13689019 - }, - { - "e_fr_energy": -142.13685413, - "e_wo_entrp": -142.13685413, - "e_0_energy": -142.13685413 - }, - { - "e_fr_energy": -142.13683782, - "e_wo_entrp": -142.13683782, - "e_0_energy": -142.13683782 - }, - { - "e_fr_energy": -142.13683328, - "e_wo_entrp": -142.13683328, - "e_0_energy": -142.13683328 - }, - { - "alphaZ": 1063.83404838, - "ewald": -13355.46288759, - "hartreedc": -5083.25048933, - "XCdc": 849.02607305, - "pawpsdc": 12918.23187288, - "pawaedc": -13406.22633402, - "eentropy": 0.0, - "bandstr": -1898.75869998, - "atom": 18770.46958238, - "e_fr_energy": -142.13683423, - "e_wo_entrp": -142.13683423, - "e_0_energy": -142.13683423 - } - ] - }, - { - "e_fr_energy": -142.13684, - "electronic_steps": [ - { - "alphaZ": 1063.79104206, - "ewald": -13355.23335967, - "hartreedc": -5083.21898891, - "XCdc": 849.01443504, - "pawpsdc": 12918.24406008, - "pawaedc": -13406.23783345, - "eentropy": 0.0, - "bandstr": -1898.96577392, - "atom": 18770.46958238, - "e_fr_energy": -142.13683638, - "e_wo_entrp": -142.13683638, - "e_0_energy": -142.13683638 - }, - { - "e_fr_energy": -142.13684097, - "e_wo_entrp": -142.13684097, - "e_0_energy": -142.13684097 - }, - { - "alphaZ": 1063.79104206, - "ewald": -13355.23335967, - "hartreedc": -5083.35534742, - "XCdc": 849.02265382, - "pawpsdc": 12918.29128031, - "pawaedc": -13406.28973031, - "eentropy": 0.0, - "bandstr": -1898.83296117, - "atom": 18770.46958238, - "e_fr_energy": -142.13684, - "e_wo_entrp": -142.13684, - "e_0_energy": -142.13684 - } - ] - }, - { - "e_fr_energy": -142.13683627, - "electronic_steps": [ - { - "alphaZ": 1063.84680124, - "ewald": -13355.58847847, - "hartreedc": -5083.36307515, - "XCdc": 849.03846011, - "pawpsdc": 12918.27361968, - "pawaedc": -13406.26712487, - "eentropy": 0.0, - "bandstr": -1898.54662149, - "atom": 18770.46958238, - "e_fr_energy": -142.13683657, - "e_wo_entrp": -142.13683657, - "e_0_energy": -142.13683657 - }, - { - "e_fr_energy": -142.13683862, - "e_wo_entrp": -142.13683862, - "e_0_energy": -142.13683862 - }, - { - "e_fr_energy": -142.1368366, - "e_wo_entrp": -142.1368366, - "e_0_energy": -142.1368366 - }, - { - "alphaZ": 1063.84680124, - "ewald": -13355.58847847, - "hartreedc": -5083.1621248, - "XCdc": 849.02704305, - "pawpsdc": 12918.18722202, - "pawaedc": -13406.17243031, - "eentropy": 0.0, - "bandstr": -1898.74445139, - "atom": 18770.46958238, - "e_fr_energy": -142.13683627, - "e_wo_entrp": -142.13683627, - "e_0_energy": -142.13683627 - } - ] - } - ] - } - } - ], - "input": { - "parameters": { - "SYSTEM": "Rubyvaspy :: o ca mn zn", - "LCOMPAT": false, - "PREC": "accura", - "ENMAX": 520.0, - "ENAUG": 605.392, - "EDIFF": 2e-06, - "IALGO": 68, - "IWAVPR": 11, - "NBANDS": 124, - "NELECT": 182.0, - "ISMEAR": -5, - "SIGMA": 0.05, - "LREAL": true, - "ROPT": [ - -0.00025, - -0.00025, - -0.00025, - -0.00025 - ], - "LMAXPAW": -100, - "LMAXMIX": 2, - "ISTART": 0, - "ICHARG": 1, - "INIWAV": 1, - "ISPIN": 2, - "LNONCOLLINEAR": false, - "MAGMOM": [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 5.0 - ], - "NUPDOWN": -1.0, - "LSORBIT": false, - "SAXIS": [ - 0.0, - 0.0, - 1.0 - ], - "LSPIRAL": false, - "QSPIRAL": [ - 0.0, - 0.0, - 0.0 - ], - "LZEROZ": false, - "LASPH": false, - "LMETAGGA": false, - "NELM": 100, - "NELMDL": 0, - "NELMIN": 3, - "ENINI": 520.0, - "LDIAG": true, - "WEIMIN": 0.001, - "EBREAK": 0.0, - "DEPER": 0.3, - "NRMM": 4, - "TIME": 0.4, - "AMIX": 0.4, - "BMIX": 1.0, - "AMIN": 0.1, - "AMIX_MAG": 1.6, - "BMIX_MAG": 1.0, - "IMIX": 4, - "MAXMIX": -45, - "WC": 100.0, - "INIMIX": 1, - "MIXPRE": 1, - "MREMOVE": 5, - "LDIPOL": false, - "LMONO": false, - "IDIPOL": 0, - "EPSILON": 1.0, - "DIPOL": [ - -100.0, - -100.0, - -100.0 - ], - "EFIELD": 0.0, - "NGX": 50, - "NGY": 50, - "NGZ": 48, - "NGXF": 100, - "NGYF": 100, - "NGZF": 96, - "ADDGRID": false, - "NSW": 200, - "IBRION": 1, - "ISIF": 3, - "PSTRESS": 0.0, - "EDIFFG": 2e-05, - "NFREE": 0, - "POTIM": 0.5, - "SMASS": -3.0, - "TEBEG": 0.0001, - "TEEND": 0.0001, - "NBLOCK": 1, - "KBLOCK": 200, - "NPACO": 256, - "APACO": 16.0, - "ISYM": 2, - "SYMPREC": 1e-05, - "LORBIT": false, - "RWIGS": [ - -1.0, - -1.0, - -1.0, - -1.0 - ], - "NEDOS": 301, - "EMIN": 10.0, - "EMAX": -10.0, - "EFERMI": 0.0, - "NWRITE": 2, - "LWAVE": true, - "LCHARG": true, - "LPARD": false, - "LVTOT": false, - "LELF": false, - "LOPTICS": false, - "STM": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ], - "NPAR": 1, - "NSIM": 4, - "NBLK": 32, - "LPLANE": true, - "LSCALAPACK": false, - "LSCAAWARE": false, - "LSCALU": false, - "LASYNC": false, - "IDIOT": 3, - "LMUSIC": false, - "POMASS": [ - 16.0, - 40.078, - 54.938, - 65.39 - ], - "LCORR": true, - "LREAL_COMPAT": false, - "GGA_COMPAT": true, - "LBERRY": false, - "ICORELEVEL": 0, - "LDAU": true, - "LDAUTYPE": [ - 2 - ], - "LDAUL": [ - 0 - ], - "LDAUU": [ - 0.0 - ], - "LDAUJ": [ - 0.0 - ], - "LDAUPRINT": 0, - "I_CONSTRAINED_M": 0, - "GGA": "--", - "VOSKOWN": 0, - "LHFCALC": false, - "LHFONE": false, - "LRHFCALC": false, - "LTHOMAS": false, - "LMODELHF": false, - "ENCUTFOCK": 0.0, - "ENCUT4O": -1.0, - "EXXOEP": 0, - "FOURORBIT": 0, - "AEXX": 0.0, - "HFALPHA": 0.0, - "ALDAX": 1.0, - "AGGAX": 1.0, - "ALDAC": 1.0, - "AGGAC": 1.0, - "NKREDX": 1, - "NKREDY": 1, - "NKREDZ": 1, - "SHIFTRED": false, - "ODDONLY": false, - "EVENONLY": false, - "LMAXFOCK": 0, - "NMAXFOCKAE": 0, - "HFSCREEN": 0.0, - "HFSCREENC": 0.0, - "MODEL_GW": 0, - "MODEL_EPS0": 7.15436898, - "MODEL_ALPHA": 1.0, - "LEPSILON": false, - "LRPA": false, - "LNABLA": false, - "LVEL": false, - "KINTER": 0, - "CSHIFT": 0.1, - "OMEGAMAX": -1.0, - "ORBITALMAG": false, - "LMAGBLOCH": false, - "LCHIMAG": false, - "LGAUGE": true, - "MAGATOM": 0, - "MAGDIPOL": [ - 0.0, - 0.0, - 0.0 - ], - "AVECCONST": [ - 0.0, - 0.0, - 0.0 - ], - "LTCTE": false, - "LTETE": false, - "L2ORDER": false, - "LGWLF": false, - "ENCUTGW": 346.66666667, - "ENCUTGWSOFT": -2.0, - "ENCUTLF": -1.0, - "LMAXMP2": -1, - "SCISSOR": 0.0, - "NOMEGA": 0, - "NOMEGAR": 0, - "NBANDSGW": -1, - "NBANDSLF": -1, - "DIM": 3, - "ANTIRES": 0, - "LUSEW": false, - "OMEGATL": -200.0, - "OMEGAGRID": 0, - "SELFENERGY": false, - "LSPECTRAL": false, - "ODDONLYGW": false, - "EVENONLYGW": false, - "NKREDLFX": 1, - "NKREDLFY": 1, - "NKREDLFZ": 1, - "MAXMEM": 1024, - "TELESCOPE": 0 - } - }, - "last_updated": "2019-11-16T01:45:57.862Z", - "orig_inputs": { - "incar": { - "ALGO": "Fast", - "EDIFF": 2e-06, - "ENCUT": 520, - "IBRION": 1, - "ICHARG": 1, - "ISIF": 3, - "ISMEAR": -5, - "ISPIN": 2, - "LDAU": true, - "LDAUJ": [ - 0, - 0, - 0, - 0 - ], - "LDAUL": [ - 0, - 2, - 0, - 0 - ], - "LDAUTYPE": 2, - "LDAUU": [ - 0, - 3.9, - 0, - 0 - ], - "LREAL": "Auto", - "LWAVE": true, - "MAGMOM": [ - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 0.6, - 5.0, - 5.0, - 5.0, - 5.0 - ], - "NELM": 100, - "NELMIN": 3, - "NPAR": 1, - "NSW": 200, - "PREC": "Accurate", - "SIGMA": 0.05, - "SYSTEM": "Rubyvaspy :: o ca mn zn", - "@module": "pymatgen.io.vasp.inputs", - "@class": "Incar" - }, - "poscar": { - "@module": "pymatgen.io.vasp.inputs", - "@class": "Poscar", - "structure": { - "@module": "pymatgen.core.structure", - "@class": "Structure", - "charge": null, - "lattice": { - "matrix": [ - [ - 6.40144538602047, - 0.003783884455619, - -0.214385955380613 - ], - [ - -0.221812522612234, - 6.39760240654963, - -0.214385955380659 - ], - [ - 0.0036528051373083, - 0.0037838844550362, - 6.40503325715211 - ] - ], - "a": 6.40503541643985, - "b": 6.40503541640026, - "c": 6.40503541645099, - "alpha": 91.8854360382053, - "beta": 91.8854360381928, - "gamma": 91.8854360376047, - "volume": 262.326862682586 - }, - "sites": [ - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.213473485513802, - 0.418069398356665, - 0.546969632895966 - ], - "xyz": [ - 1.27580380448856, - 2.67751921792617, - 3.36796476482853 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.786526514486198, - 0.581930601643335, - 0.453030367104034 - ], - "xyz": [ - 4.90748186405699, - 3.72765095753412, - 2.60829658156231 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.581930601643335, - 0.453030367104034, - 0.786526514486198 - ], - "xyz": [ - 3.6275821844193, - 2.90348625043428, - 4.81584738684946 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.453030367104034, - 0.786526514486198, - 0.581930601643335 - ], - "xyz": [ - 2.72771340203693, - 5.03580009461347, - 3.46154127057173 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.0469696328959659, - 0.918069398356665, - 0.713473485513802 - ], - "xyz": [ - 0.0996404302155866, - 5.87632042120089, - 4.36293058811742 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.918069398356665, - 0.713473485513802, - 0.0469696328959659 - ], - "xyz": [ - 5.71888533143444, - 4.56817128412185, - -0.0489378191281562 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.286526514486198, - 0.953030367104034, - 0.0819306016433352 - ], - "xyz": [ - 1.62308904079937, - 6.09850356925388, - 0.259024641995664 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.0819306016433352, - 0.286526514486198, - 0.953030367104034 - ], - "xyz": [ - 0.464400337111104, - 1.83699889133844, - 6.02519916551899 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.953030367104034, - 0.0819306016433352, - 0.286526514486198 - ], - "xyz": [ - 6.08364523832996, - 0.528849754259398, - 1.61333075827342 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.546969632895966, - 0.213473485513802, - 0.418069398356665 - ], - "xyz": [ - 3.45557226650862, - 1.36937008084682, - 2.51472007581911 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.418069398356665, - 0.546969632895966, - 0.213473485513802 - ], - "xyz": [ - 2.55570348412625, - 3.50168392502601, - 1.16041395954138 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.713473485513802, - 0.0469696328959659, - 0.918069398356665 - ], - "xyz": [ - 4.56019662774617, - 0.306666606206402, - 5.71723670439517 - ], - "label": "O", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.612045228021994, - 0.887954771978006, - 0.25 - ], - "xyz": [ - 3.72192781430356, - 5.68404346565192, - 1.27967938121707 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.112045228021994, - 0.75, - 0.387954771978006 - ], - "xyz": [ - 0.552309139171957, - 4.80009374713981, - 2.30005282699916 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.75, - 0.387954771978006, - 0.112045228021994 - ], - "xyz": [ - 4.71544009226799, - 2.48524226237719, - 0.473691890815615 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.387954771978006, - 0.112045228021994, - 0.75 - ], - "xyz": [ - 2.46135785424199, - 0.721126709808361, - 4.69658196517377 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.887954771978006, - 0.25, - 0.612045228021994 - ], - "xyz": [ - 5.63097652937359, - 1.60507642832048, - 3.67620851939168 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.25, - 0.612045228021994, - 0.887954771978006 - ], - "xyz": [ - 1.46784557627756, - 3.9199279130831, - 5.50256945557522 - ], - "label": "Ca", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Mn", - "occu": 1 - } - ], - "abc": [ - 0.5, - 0.5, - 0.5 - ], - "xyz": [ - 3.09164283427277, - 3.20258508773014, - 2.98813067319542 - ], - "label": "Mn", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Mn", - "occu": 1 - } - ], - "abc": [ - 0.0, - 0.0, - 0.0 - ], - "xyz": [ - 0.0, - 0.0, - 0.0 - ], - "label": "Mn", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Zn", - "occu": 1 - } - ], - "abc": [ - 0.75, - 0.75, - 0.75 - ], - "xyz": [ - 4.63746425140916, - 4.80387763159521, - 4.48219600979313 - ], - "label": "Zn", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - }, - { - "species": [ - { - "element": "Zn", - "occu": 1 - } - ], - "abc": [ - 0.25, - 0.25, - 0.25 - ], - "xyz": [ - 1.54582141713639, - 1.60129254386507, - 1.49406533659771 - ], - "label": "Zn", - "properties": { - "velocities": [ - 0.0, - 0.0, - 0.0 - ] - } - } - ] - }, - "true_names": true, - "selective_dynamics": null, - "velocities": [ - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - 0.0 - ] - ], - "predictor_corrector": null, - "comment": "Poscar v1.1 :: 1 :: O Ca Mn Zn" - }, - "potcar": { - "functional": "PBE", - "symbols": [ - "O", - "Ca_sv", - "Mn_pv", - "Zn" - ], - "@module": "pymatgen.io.vasp.inputs", - "@class": "Potcar" - }, - "kpoints": { - "comment": "Automatic kpoint scheme", - "nkpoints": 0, - "generation_style": "Monkhorst", - "kpoints": [ - [ - 4, - 4, - 4 - ] - ], - "usershift": [ - 0.0, - 0.0, - 0.0 - ], - "kpts_weights": null, - "coord_type": null, - "labels": null, - "tet_number": 0, - "tet_weight": 0, - "tet_connections": null, - "@module": "pymatgen.io.vasp.inputs", - "@class": "Kpoints" - } - }, - "output": { - "structure": { - "@module": "pymatgen.core.structure", - "@class": "Structure", - "charge": null, - "lattice": { - "matrix": [ - [ - 6.45727803, - -0.00461745, - -0.22440269 - ], - [ - -0.23217625, - 6.4531043, - -0.22440269 - ], - [ - -0.0044575, - -0.00461745, - 6.46117453 - ] - ], - "a": 6.46117771345476, - "b": 6.46117771656389, - "c": 6.46117771751184, - "alpha": 92.029833718888, - "beta": 92.0298337681492, - "gamma": 92.029833735924, - "volume": 269.213520882063 - }, - "sites": [ - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.21535912, - 0.4171493, - 0.54603306 - ], - "xyz": [ - 1.29134761160706, - 2.68839225125045, - 3.38607830891431 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.78464088, - 0.5828507, - 0.45396694 - ], - "xyz": [ - 4.92929666839294, - 3.75547714874955, - 2.62629084108569 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.5828507, - 0.45396694, - 0.78464088 - ], - "xyz": [ - 3.65473114140435, - 2.92318168857577, - 4.83703700159734 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.45396694, - 0.78464088, - 0.5828507 - ], - "xyz": [ - 2.74661771389798, - 5.05858198307197, - 3.48795317096964 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.04603306, - 0.9171493, - 0.71535912 - ], - "xyz": [ - 0.0811192685501468, - 5.91494440125045, - 4.40591941340267 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.9171493, - 0.71535912, - 0.04603306 - ], - "xyz": [ - 5.75599343487003, - 4.61183956692803, - -0.0689116460856879 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.28464088, - 0.95396694, - 0.0828507 - ], - "xyz": [ - 1.61614752711544, - 6.15435128857577, - 0.257365905969635 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.0828507, - 0.28464088, - 0.95396694 - ], - "xyz": [ - 0.464650845129971, - 1.83202983307197, - 6.08128079608569 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.95396694, - 0.0828507, - 0.28464088 - ], - "xyz": [ - 6.13952501144985, - 0.528924998749551, - 1.60644973659733 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.54603306, - 0.21535912, - 0.4171493 - ], - "xyz": [ - 3.47402656610202, - 1.38528741692803, - 2.52441597903036 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.4171493, - 0.54603306, - 0.21535912 - ], - "xyz": [ - 2.56591313859565, - 3.52068771142423, - 1.17533214840267 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "O", - "occu": 1 - } - ], - "abc": [ - 0.71535912, - 0.04603306, - 0.9171493 - ], - "xyz": [ - 4.60449675288456, - 0.289518111424229, - 5.75500324403036 - ], - "label": "O", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.61317969, - 0.88682031, - 0.25 - ], - "xyz": [ - 3.75245875167957, - 5.71875826672874, - 1.2786895975 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.11317969, - 0.75, - 0.38682031 - ], - "xyz": [ - 0.554976286647386, - 4.8375195, - 2.30561369026934 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.75, - 0.38682031, - 0.11317969 - ], - "xyz": [ - 4.75264353503219, - 2.49220611672874, - 0.476168194730662 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.38682031, - 0.11317969, - 0.75 - ], - "xyz": [ - 2.46818552832043, - 0.725111133271257, - 4.7336795525 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.88682031, - 0.25, - 0.61317969 - ], - "xyz": [ - 5.66566799335261, - 1.6063499, - 3.70675545973066 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Ca", - "occu": 1 - } - ], - "abc": [ - 0.25, - 0.61317969, - 0.88682031 - ], - "xyz": [ - 1.46800074496781, - 3.95166328327126, - 5.53620095526934 - ], - "label": "Ca", - "properties": {} - }, - { - "species": [ - { - "element": "Mn", - "occu": 1 - } - ], - "abc": [ - 0.5, - 0.5, - 0.5 - ], - "xyz": [ - 3.11032214, - 3.2219347, - 3.006184575 - ], - "label": "Mn", - "properties": {} - }, - { - "species": [ - { - "element": "Mn", - "occu": 1 - } - ], - "abc": [ - 0.0, - 0.0, - 0.0 - ], - "xyz": [ - 0.0, - 0.0, - 0.0 - ], - "label": "Mn", - "properties": {} - }, - { - "species": [ - { - "element": "Zn", - "occu": 1 - } - ], - "abc": [ - 0.75, - 0.75, - 0.75 - ], - "xyz": [ - 4.66548321, - 4.83290205, - 4.5092768625 - ], - "label": "Zn", - "properties": {} - }, - { - "species": [ - { - "element": "Zn", - "occu": 1 - } - ], - "abc": [ - 0.25, - 0.25, - 0.25 - ], - "xyz": [ - 1.55516107, - 1.61096735, - 1.5030922875 - ], - "label": "Zn", - "properties": {} - } - ] - } - }, - "tags": [ - "tasks_from_old_prod_2019", - "mp_2019", - "prod" - ], - "task_id": "mp-688194" -} diff --git a/test_files/test_task.json.gz b/test_files/test_task.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..64945d7f6ee120d4986d4865259480cc0bcb705c GIT binary patch literal 10120 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 U&j&%Tm#=Urlo>;>QSfm82Z{c>=>Px# literal 0 HcmV?d00001 From aeab113fa2b9fadde0020675290fa04dcbbc07cd Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Fri, 17 Jan 2025 16:12:48 -0800 Subject: [PATCH 04/15] precommit --- emmet-core/emmet/core/tasks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index cec28e1960..b6c0588ada 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -909,7 +909,8 @@ def from_directory( if additional_fields: config.update(**additional_fields) return cls(**config) - + + class TrajectoryDoc(BaseModel): """Model for task trajectory data.""" From 8d5770699886aed52675b8b701630263d29780a1 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Fri, 17 Jan 2025 16:34:17 -0800 Subject: [PATCH 05/15] update api test to reflect gzipped testfile --- emmet-api/tests/materials/tasks/test_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emmet-api/tests/materials/tasks/test_utils.py b/emmet-api/tests/materials/tasks/test_utils.py index 2442f8a58a..0c09e93d3d 100644 --- a/emmet-api/tests/materials/tasks/test_utils.py +++ b/emmet-api/tests/materials/tasks/test_utils.py @@ -1,5 +1,6 @@ import os from json import load +from monty.io import zopen from emmet.api.core.settings import MAPISettings from emmet.api.routes.materials.tasks.utils import ( @@ -24,7 +25,7 @@ def test_calcs_reversed_to_trajectory(): def test_task_to_entry(): - with open(os.path.join(MAPISettings().TEST_FILES, "test_task.json")) as file: + with zopen(os.path.join(MAPISettings().TEST_FILES, "test_task.json.gz")) as file: doc = load(file) entry_dict = task_to_entry(doc) From e170765e420a222b3e746e8b9665a34d41dbae4d Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 21 Jan 2025 09:28:22 -0800 Subject: [PATCH 06/15] ensure that DbTaskDoc has tags initialized to 0 --- emmet-core/emmet/core/tasks.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index b6c0588ada..cd5ea6e519 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -477,6 +477,10 @@ class DbTaskDoc(StructureMetadata): # _structure_entry: Optional[ComputedStructureEntry] = PrivateAttr(None) def model_post_init(self, __context: Any) -> None: + """Ensure that attrs are properly instantiated.""" + + self.tags = self.tags or [] + # Always refresh task_type, calc_type, run_type # See, e.g. https://github.com/materialsproject/emmet/issues/960 # where run_type's were set incorrectly in older versions of TaskDoc From 1a50a2cc2fb1b85cc28e05b76cbc2b429af985a6 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 21 Jan 2025 14:25:20 -0800 Subject: [PATCH 07/15] add fixed-schema replicas of pymatgen objects, revert xas doc change for separate pr --- .../builders/materials/corrected_entries.py | 1 - emmet-core/emmet/core/math.py | 21 +- emmet-core/emmet/core/structure_replicas.py | 505 ++++++++++++++++++ emmet-core/emmet/core/xas.py | 11 +- 4 files changed, 525 insertions(+), 13 deletions(-) create mode 100644 emmet-core/emmet/core/structure_replicas.py diff --git a/emmet-builders/emmet/builders/materials/corrected_entries.py b/emmet-builders/emmet/builders/materials/corrected_entries.py index cf4632281c..ec2c358956 100644 --- a/emmet-builders/emmet/builders/materials/corrected_entries.py +++ b/emmet-builders/emmet/builders/materials/corrected_entries.py @@ -143,7 +143,6 @@ def process_item(self, item): self.logger.debug(f"Processing {len(entries)} entries for {chemsys}") all_entry_types = {str(e.data["run_type"]) for e in entries} - corrected_entries = {} for compatibility in self.compatibility: diff --git a/emmet-core/emmet/core/math.py b/emmet-core/emmet/core/math.py index 80ca1f5855..ab31b87cd3 100644 --- a/emmet-core/emmet/core/math.py +++ b/emmet-core/emmet/core/math.py @@ -1,25 +1,26 @@ -from typing import Tuple, List +"""Define types used for array-like data.""" +from typing import TypeVar -Vector3D = Tuple[float, float, float] +Vector3D = TypeVar("Vector3D", bound=tuple[float, float, float]) Vector3D.__doc__ = "Real space vector" # type: ignore -Matrix3D = Tuple[Vector3D, Vector3D, Vector3D] +Matrix3D = TypeVar("Matrix3D", bound = tuple[Vector3D, Vector3D, Vector3D]) Matrix3D.__doc__ = "Real space Matrix" # type: ignore -Vector6D = Tuple[float, float, float, float, float, float] +Vector6D = TypeVar("Vector6D", bound=tuple[float, float, float, float, float, float]) Vector6D.__doc__ = "6D Voigt matrix component" # type: ignore -MatrixVoigt = Tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D] -Vector6D.__doc__ = "Voigt representation of a 3x3x3x3 tensor" # type: ignore +MatrixVoigt = TypeVar("MatrixVoigt",bound=tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D]) +MatrixVoigt.__doc__ = "Voigt representation of a 3x3x3x3 tensor" # type: ignore -Tensor3R = List[List[List[float]]] +Tensor3R = TypeVar("Tensor3R",bound=list[list[list[float]]]) Tensor3R.__doc__ = "Generic tensor of rank 3" # type: ignore -Tensor4R = List[List[List[List[float]]]] +Tensor4R = TypeVar("Tensor4R",bound=list[list[list[list[float]]]]) Tensor4R.__doc__ = "Generic tensor of rank 4" # type: ignore -ListVector3D = List[float] +ListVector3D = TypeVar("ListVector3D",bound=list[float]) ListVector3D.__doc__ = "Real space vector as list" # type: ignore -ListMatrix3D = List[ListVector3D] +ListMatrix3D = TypeVar("ListMatrix3D",bound=list[ListVector3D]) ListMatrix3D.__doc__ = "Real space Matrix as list" # type: ignore diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py new file mode 100644 index 0000000000..2dd243e6b0 --- /dev/null +++ b/emmet-core/emmet/core/structure_replicas.py @@ -0,0 +1,505 @@ +"""Tools for representing pymatgen objects as low-memory, strongly typed objects.""" + +from __future__ import annotations +from collections.abc import Iterator +from pydantic import BaseModel, Field + +from enum import Enum +from typing import TYPE_CHECKING + +import numpy as np + +from pymatgen.core import Structure, PeriodicSite, Lattice, Element +from pymatgen.io.vasp import Poscar + +from emmet.core.math import Vector3D, Matrix3D, ListMatrix3D + +if TYPE_CHECKING: + from pathlib import Path + from typing import Any + from typing_extensions import Self + +class EmmetReplica(BaseModel): + """Define strongly typed, fixed schema versions of generic pymatgen objects.""" + + @classmethod + def from_pymatgen(cls, pmg_obj : Any) -> Self: + """Convert pymatgen objects to an EmmetReplica representation.""" + raise NotImplementedError + + def to_pymatgen(self) -> Any: + """Convert EmmetReplica object to pymatgen equivalent.""" + raise NotImplementedError + + @classmethod + def from_dict(cls, dct : dict[str,Any]) -> Self: + """MSONable-like function to create this object from a dict.""" + raise NotImplementedError + + def as_dict(self) -> dict[str,Any]: + """MSONable-like function to create dict representation of this object.""" + raise NotImplementedError + + +class SiteProperties(Enum): + """Define a restricted set of structure site properties.""" + + magmom = "magmom" + charge = "charge" + velocities = "velocities" + selective_dynamics = "selective_dynamics" + +class ElementSymbol(Enum): + """Lightweight representation of a chemical element.""" + + H = 1 + He = 2 + Li = 3 + Be = 4 + B = 5 + C = 6 + N = 7 + O = 8 + F = 9 + Ne = 10 + Na = 11 + Mg = 12 + Al = 13 + Si = 14 + P = 15 + S = 16 + Cl = 17 + Ar = 18 + K = 19 + Ca = 20 + Sc = 21 + Ti = 22 + V = 23 + Cr = 24 + Mn = 25 + Fe = 26 + Co = 27 + Ni = 28 + Cu = 29 + Zn = 30 + Ga = 31 + Ge = 32 + As = 33 + Se = 34 + Br = 35 + Kr = 36 + Rb = 37 + Sr = 38 + Y = 39 + Zr = 40 + Nb = 41 + Mo = 42 + Tc = 43 + Ru = 44 + Rh = 45 + Pd = 46 + Ag = 47 + Cd = 48 + In = 49 + Sn = 50 + Sb = 51 + Te = 52 + I = 53 + Xe = 54 + Cs = 55 + Ba = 56 + La = 57 + Ce = 58 + Pr = 59 + Nd = 60 + Pm = 61 + Sm = 62 + Eu = 63 + Gd = 64 + Tb = 65 + Dy = 66 + Ho = 67 + Er = 68 + Tm = 69 + Yb = 70 + Lu = 71 + Hf = 72 + Ta = 73 + W = 74 + Re = 75 + Os = 76 + Ir = 77 + Pt = 78 + Au = 79 + Hg = 80 + Tl = 81 + Pb = 82 + Bi = 83 + Po = 84 + At = 85 + Rn = 86 + Fr = 87 + Ra = 88 + Ac = 89 + Th = 90 + Pa = 91 + U = 92 + Np = 93 + Pu = 94 + Am = 95 + Cm = 96 + Bk = 97 + Cf = 98 + Es = 99 + Fm = 100 + Md = 101 + No = 102 + Lr = 103 + Rf = 104 + Db = 105 + Sg = 106 + Bh = 107 + Hs = 108 + Mt = 109 + Ds = 110 + Rg = 111 + Cn = 112 + Nh = 113 + Fl = 114 + Mc = 115 + Lv = 116 + Ts = 117 + Og = 118 + + @property + def Z(self) -> int: + """The number of protons in the element.""" + return self.value + + def __str__(self): + """Get element name.""" + return self.name + +class LightLattice(tuple): + """Low memory representation of a Lattice as a tuple of a 3x3 matrix.""" + + def __new__(cls, matrix): + """Overset __new__ to define new tuple instance.""" + lattice_matrix = np.array(matrix) + if lattice_matrix.shape != (3, 3): + raise ValueError("Lattice matrix must be 3x3.") + return super(LightLattice,cls).__new__(cls,tuple([tuple(v) for v in lattice_matrix.tolist()])) + + def as_dict(self) -> dict[str, list | str]: + """Define MSONable-like as_dict.""" + return {"@class": self.__class__, "@module": self.__module__, "matrix": self} + + @classmethod + def from_dict(cls, dct: dict) -> Self: + """Define MSONable-like from_dict.""" + return cls(dct["matrix"]) + + def copy(self) -> Self: + """Return a new copy of LightLattice.""" + return LightLattice(self) + + @property + def volume(self) -> float: + """Get the volume enclosed by the direct lattice vectors.""" + return abs(np.linalg.det(self)) + + +class ElementReplica(EmmetReplica): + """Define a flexible schema for elements and periodic sites. + + The only required field in this model is `element`. + This is intended to mimic a `pymatgen` `.Element` object. + Additionally, the `lattice` and coordinates of the site can be specified + to mimic a `pymatgen` `.PeriodicSite`. + + Parameters + ----------- + element (required) : ElementSymbol + The symbol of the element. + lattice (optional) : Matrix3D + The 3x3 representation of the lattice the site exists in. + cart_coords (optional) : Vector3D + A tuple of 3 floats specifying the position of the site in Cartesian space. + frac_coords (optional) : Vector3D + A tuple of 3 floats specifying the position of the site in units of the + direct lattice vectors. + charge (optional) : float + The charge (either from the electron density or oxidation state) on the site. + magmom (optional) : float + The on-site magnetic moment. + velocities (optional) : Vector3D + A tuple of 3 floats specifying the Cartesian components of the site velocity. + selective_dynamics (optional) : tuple[bool, bool, bool] + A tuple of 3 booleans specifying which Cartesian directions the site position + was allowed to relax on. + """ + + element : ElementSymbol = Field(description="The element.") + lattice : Matrix3D | None = Field(default = None, description="The lattice in 3x3 matrix form.") + cart_coords : Vector3D | None = Field(default = None, description="The postion of the site in Cartesian coordinates.") + frac_coords : Vector3D | None = Field(default = None, description="The postion of the site in direct lattice vector coordinates.") + charge : float | None = Field(default = None, description="The on-site charge.") + magmom : float | None = Field(default = None, description="The on-site magnetic moment.") + velocities : Vector3D | None = Field(default = None, description="The Cartesian components of the site velocity.") + selective_dynamics : tuple[bool, bool, bool] | None = Field(default = None, description="The degrees of freedom which are allowed to relax on the site.") + + def model_post_init(self, __context : Any) -> None: + """Ensure both Cartesian and direct coordinates are set, if necessary.""" + if self.lattice: + if self.cart_coords is not None: + self.frac_coords = self.frac_coords or np.linalg.solve( + np.array(self.lattice).T, np.array(self.cart_coords) + ) + elif self.frac_coords is not None: + self.cart_coords = self.cart_coords or tuple( + np.matmul(np.array(self.lattice).T, np.array(self.frac_coords)) + ) + + @classmethod + def from_pymatgen(cls, pmg_obj : Element | PeriodicSite) -> Self: + """Convert a pymatgen .PeriodicSite or .Element to .ElementReplica. + + Parameters + ----------- + site : pymatgen .Element or .PeriodicSite + """ + if isinstance(pmg_obj, Element): + return cls(element = ElementSymbol(pmg_obj.name)) + + return cls( + element = ElementSymbol(next(iter(pmg_obj.species.remove_charges().as_dict()))), + lattice = LightLattice(pmg_obj.lattice.matrix), + frac_coords = pmg_obj.frac_coords, + cart_coords = pmg_obj.coords, + ) + + def to_pymatgen(self) -> PeriodicSite: + """Create a PeriodicSite from a ElementReplica.""" + return PeriodicSite( + self.element.name, + self.frac_coords, + Lattice(self.lattice), + coords_are_cartesian=False, + properties = self.properties + ) + + @property + def species(self) -> dict[str,int]: + """Composition-like representation of site.""" + return {self.element.name : 1} + + @property + def properties(self) -> dict[str,float]: + """Aggregate optional properties defined on the site.""" + props = {} + for k in SiteProperties.__members__: + if (prop := getattr(self,k,None)) is not None: + props[k] = prop + return props + + def __int__(self) -> int: + """Ensure pymatgen's get_el_sp recognizes this class as an element.""" + return self.element.Z + + def __float__(self) -> float: + """Ensure pymatgen's get_el_sp recognizes this class as an element.""" + return float(self.element.Z) + + @property + def elements(self) -> list[ElementSymbol]: + """Ensure compatibility with PeriodicSite.""" + return [self.element] + + @property + def Z(self) -> int: + """Ensure compatibility with PeriodicSite.""" + return self.element.Z + + @property + def name(self) -> str: + """Ensure compatibility with PeriodicSite.""" + return self.element.name + + @property + def species_string(self) -> str: + """Ensure compatibility with PeriodicSite.""" + return self.name + + @property + def label(self) -> str: + """Ensure compatibility with PeriodicSite.""" + return self.name + + def __str__(self): + return self.label + + def add_attrs(self, **kwargs) -> ElementReplica: + """Rapidly create a copy of this instance with additional fields set. + + Parameters + ----------- + **kwargs + Any of the fields defined in the model. This function is used to + add lattice and coordinate information to each site, and thereby + not store it in the StructureReplica object itself in addition to + each site. + + Returns + ----------- + ElementReplica + """ + config = self.model_dump() + config.update(**kwargs) + return ElementReplica(**config) + +class StructureReplica(BaseModel): + """Define a fixed schema structure. + + This class is intended to provide both a fixed schema for a generic structure, + and to reduce the memory footprint over a pymatgen .Structure. + To do this, the `lattice`, `frac_coords` and `cart_coords` are stored only on the + `StructureReplica`. + When the `.sites` attr of `StructureReplica` is accessed, all prior attributes + (respective aliases: `lattice`, `frac_coords`, and `coords`) are assigned to the + retrieved sites. + Compare this to pymatgen's .Structure, which stores the `lattice`, `frac_coords`, + and `cart_coords` both in the .Structure object and each .PeriodicSite within it. + + + Parameters + ----------- + lattice : LightLattice + A 3x3 tuple of the lattice vectors, with a, b, and c as subsequent rows. + species : list[ElementReplica] + A list of elements in the structure + frac_coords : ListMatrix3D + A list of 3-vectors corresponding to the coordinates of each site in units of + the direct lattice vectors. + cart_coords : ListMatrix3D + A list of 3-vectors corresponding to the Cartesian coordinates of each site. + charge (optional) : float + The total charge on the structure. + """ + + lattice : LightLattice = Field(description="The lattice in 3x3 matrix form.") + species : list[ElementReplica] = Field(description="The elements in the structure.") + frac_coords : ListMatrix3D = Field(description="The direct coordinates of the sites in the structure.") + cart_coords : ListMatrix3D = Field(description="The Cartesian coordinates of the sites in the structure.") + charge : float | None = Field(None, description="The net charge on the structure.") + + @property + def sites(self) -> list[ElementReplica]: + """Return a list of sites in the structure with lattice and coordinate info.""" + return [ + species.add_attrs( + lattice = self.lattice, + cart_coords = self.cart_coords[idx], + frac_coords = self.frac_coords[idx], + ) + for idx, species in enumerate(self.species) + ] + + def __getitem__(self, idx: int | slice) -> ElementReplica | list[ElementReplica]: + """Permit list-like access of the sites in StructureReplica.""" + if isinstance(idx, int) or isinstance(idx, slice): + return self.sites[idx] + raise IndexError("Index must be an integer or slice!") + + def __iter__(self) -> Iterator[ElementReplica]: + """Permit list-like iteration on the sites in StructureReplica.""" + yield from self.sites + + @property + def volume(self) -> float: + """Get the volume enclosed by the direct lattice vectors.""" + return self.lattice.volume + + def __len__(self) -> int: + """Define number of sites in StructureReplica.""" + return len(self.species) + + @property + def num_sites(self) -> int: + """Define number of sites in StructureReplica.""" + return self.__len__() + + @classmethod + def from_pymatgen(cls, pmg_obj: Structure) -> Self: + """Create a StructureReplica from a pymatgen .Structure. + + Parameters + ----------- + pmg_obj : pymatgen .Structure + + Returns + ----------- + StructureReplica + """ + if not pmg_obj.is_ordered: + raise ValueError( + "Currently, `StructureReplica` is intended to represent only ordered materials." + ) + + lattice = LightLattice(pmg_obj.lattice.matrix) + properties = [{} for _ in range(len(pmg_obj))] + for idx, site in enumerate(pmg_obj): + for k in ("charge","magmom","velocities","selective_dynamics"): + if (prop := site.properties.get(k)) is not None: + properties[idx][k] = prop + + species = [ + ElementReplica( + element = ElementSymbol[next(iter(site.species.remove_charges().as_dict()))], + **properties[idx] + ) + for idx, site in enumerate(pmg_obj) + ] + + return cls( + lattice=lattice, + species = species, + frac_coords = [site.frac_coords for site in pmg_obj], + cart_coords = [site.coords for site in pmg_obj], + charge = pmg_obj.charge, + ) + + def to_pymatgen(self) -> Structure: + """Convert to a pymatgen .Structure.""" + return Structure.from_sites([site.to_periodic_site() for site in self], charge = self.charge) + + @classmethod + def from_poscar(cls, poscar_path: str | Path) -> Self: + """Define convenience method to create a StructureReplica from a VASP POSCAR.""" + return cls.from_structure(Poscar.from_file(poscar_path).structure) + + def __str__(self): + """Define format for printing a Structure.""" + def _format_float(val: float | int) -> str: + nspace = 2 if val >= 0.0 else 1 + return " " * nspace + f"{val:.8f}" + + lattice_str = [ + [_format_float(self.lattice[i][j]) for j in range(3)] for i in range(3) + ] + coords_str = [ + [_format_float(self.cart_coords[i][j]) for j in range(3)] + for i in range(len(self)) + ] + as_str = "Lattice\n" + as_str += "\n".join( + f"{name} : " + ",".join(lattice_str[idx]) + for idx, name in enumerate(["a", "b", "c"]) + ) + as_str += "\nCartesian Coordinates\n" + + as_str += "\n".join( + f"{self[idx].element}{' '*(3-len(str(self[idx].element)))}: " + + ",".join(site_str) + for idx, site_str in enumerate(coords_str) + ) + return as_str diff --git a/emmet-core/emmet/core/xas.py b/emmet-core/emmet/core/xas.py index 864717cff9..274b582a53 100644 --- a/emmet-core/emmet/core/xas.py +++ b/emmet-core/emmet/core/xas.py @@ -70,8 +70,15 @@ class XASDoc(SpectrumDoc): @classmethod def check_spectrum_non_positive_values(cls, v, eps=1.0e-12) -> XAS: if isinstance(v, dict): - v["y"] = [y if y > 0.0 else abs(eps) for y in v["y"]] - v = XAS.from_dict(v) + try: + v = XAS.from_dict(v) + except ValueError as exc: + if ( + "Double check the intensities. Most of them are non-positive." + in str(exc) + ): + v["y"] = [y if y > 0.0 else abs(eps) for y in v["y"]] + v = XAS.from_dict(v) return v @classmethod From 1a65aeab89fc7bb53fbe6ac83ba00b22f6dedcdf Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 21 Jan 2025 14:25:33 -0800 Subject: [PATCH 08/15] precommit --- emmet-core/emmet/core/math.py | 15 +- emmet-core/emmet/core/structure_replicas.py | 147 ++++++++++++-------- 2 files changed, 98 insertions(+), 64 deletions(-) diff --git a/emmet-core/emmet/core/math.py b/emmet-core/emmet/core/math.py index ab31b87cd3..e6a38487d8 100644 --- a/emmet-core/emmet/core/math.py +++ b/emmet-core/emmet/core/math.py @@ -4,23 +4,26 @@ Vector3D = TypeVar("Vector3D", bound=tuple[float, float, float]) Vector3D.__doc__ = "Real space vector" # type: ignore -Matrix3D = TypeVar("Matrix3D", bound = tuple[Vector3D, Vector3D, Vector3D]) +Matrix3D = TypeVar("Matrix3D", bound=tuple[Vector3D, Vector3D, Vector3D]) Matrix3D.__doc__ = "Real space Matrix" # type: ignore Vector6D = TypeVar("Vector6D", bound=tuple[float, float, float, float, float, float]) Vector6D.__doc__ = "6D Voigt matrix component" # type: ignore -MatrixVoigt = TypeVar("MatrixVoigt",bound=tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D]) +MatrixVoigt = TypeVar( + "MatrixVoigt", + bound=tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D], +) MatrixVoigt.__doc__ = "Voigt representation of a 3x3x3x3 tensor" # type: ignore -Tensor3R = TypeVar("Tensor3R",bound=list[list[list[float]]]) +Tensor3R = TypeVar("Tensor3R", bound=list[list[list[float]]]) Tensor3R.__doc__ = "Generic tensor of rank 3" # type: ignore -Tensor4R = TypeVar("Tensor4R",bound=list[list[list[list[float]]]]) +Tensor4R = TypeVar("Tensor4R", bound=list[list[list[list[float]]]]) Tensor4R.__doc__ = "Generic tensor of rank 4" # type: ignore -ListVector3D = TypeVar("ListVector3D",bound=list[float]) +ListVector3D = TypeVar("ListVector3D", bound=list[float]) ListVector3D.__doc__ = "Real space vector as list" # type: ignore -ListMatrix3D = TypeVar("ListMatrix3D",bound=list[ListVector3D]) +ListMatrix3D = TypeVar("ListMatrix3D", bound=list[ListVector3D]) ListMatrix3D.__doc__ = "Real space Matrix as list" # type: ignore diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py index 2dd243e6b0..4a4a5fa773 100644 --- a/emmet-core/emmet/core/structure_replicas.py +++ b/emmet-core/emmet/core/structure_replicas.py @@ -19,24 +19,25 @@ from typing import Any from typing_extensions import Self + class EmmetReplica(BaseModel): """Define strongly typed, fixed schema versions of generic pymatgen objects.""" @classmethod - def from_pymatgen(cls, pmg_obj : Any) -> Self: + def from_pymatgen(cls, pmg_obj: Any) -> Self: """Convert pymatgen objects to an EmmetReplica representation.""" raise NotImplementedError def to_pymatgen(self) -> Any: """Convert EmmetReplica object to pymatgen equivalent.""" raise NotImplementedError - + @classmethod - def from_dict(cls, dct : dict[str,Any]) -> Self: + def from_dict(cls, dct: dict[str, Any]) -> Self: """MSONable-like function to create this object from a dict.""" raise NotImplementedError - def as_dict(self) -> dict[str,Any]: + def as_dict(self) -> dict[str, Any]: """MSONable-like function to create dict representation of this object.""" raise NotImplementedError @@ -49,6 +50,7 @@ class SiteProperties(Enum): velocities = "velocities" selective_dynamics = "selective_dynamics" + class ElementSymbol(Enum): """Lightweight representation of a chemical element.""" @@ -180,6 +182,7 @@ def __str__(self): """Get element name.""" return self.name + class LightLattice(tuple): """Low memory representation of a Lattice as a tuple of a 3x3 matrix.""" @@ -188,7 +191,9 @@ def __new__(cls, matrix): lattice_matrix = np.array(matrix) if lattice_matrix.shape != (3, 3): raise ValueError("Lattice matrix must be 3x3.") - return super(LightLattice,cls).__new__(cls,tuple([tuple(v) for v in lattice_matrix.tolist()])) + return super(LightLattice, cls).__new__( + cls, tuple([tuple(v) for v in lattice_matrix.tolist()]) + ) def as_dict(self) -> dict[str, list | str]: """Define MSONable-like as_dict.""" @@ -211,7 +216,7 @@ def volume(self) -> float: class ElementReplica(EmmetReplica): """Define a flexible schema for elements and periodic sites. - + The only required field in this model is `element`. This is intended to mimic a `pymatgen` `.Element` object. Additionally, the `lattice` and coordinates of the site can be specified @@ -239,43 +244,59 @@ class ElementReplica(EmmetReplica): was allowed to relax on. """ - element : ElementSymbol = Field(description="The element.") - lattice : Matrix3D | None = Field(default = None, description="The lattice in 3x3 matrix form.") - cart_coords : Vector3D | None = Field(default = None, description="The postion of the site in Cartesian coordinates.") - frac_coords : Vector3D | None = Field(default = None, description="The postion of the site in direct lattice vector coordinates.") - charge : float | None = Field(default = None, description="The on-site charge.") - magmom : float | None = Field(default = None, description="The on-site magnetic moment.") - velocities : Vector3D | None = Field(default = None, description="The Cartesian components of the site velocity.") - selective_dynamics : tuple[bool, bool, bool] | None = Field(default = None, description="The degrees of freedom which are allowed to relax on the site.") - - def model_post_init(self, __context : Any) -> None: + element: ElementSymbol = Field(description="The element.") + lattice: Matrix3D | None = Field( + default=None, description="The lattice in 3x3 matrix form." + ) + cart_coords: Vector3D | None = Field( + default=None, description="The postion of the site in Cartesian coordinates." + ) + frac_coords: Vector3D | None = Field( + default=None, + description="The postion of the site in direct lattice vector coordinates.", + ) + charge: float | None = Field(default=None, description="The on-site charge.") + magmom: float | None = Field( + default=None, description="The on-site magnetic moment." + ) + velocities: Vector3D | None = Field( + default=None, description="The Cartesian components of the site velocity." + ) + selective_dynamics: tuple[bool, bool, bool] | None = Field( + default=None, + description="The degrees of freedom which are allowed to relax on the site.", + ) + + def model_post_init(self, __context: Any) -> None: """Ensure both Cartesian and direct coordinates are set, if necessary.""" if self.lattice: if self.cart_coords is not None: self.frac_coords = self.frac_coords or np.linalg.solve( - np.array(self.lattice).T, np.array(self.cart_coords) - ) + np.array(self.lattice).T, np.array(self.cart_coords) + ) elif self.frac_coords is not None: self.cart_coords = self.cart_coords or tuple( np.matmul(np.array(self.lattice).T, np.array(self.frac_coords)) ) - + @classmethod - def from_pymatgen(cls, pmg_obj : Element | PeriodicSite) -> Self: + def from_pymatgen(cls, pmg_obj: Element | PeriodicSite) -> Self: """Convert a pymatgen .PeriodicSite or .Element to .ElementReplica. - + Parameters ----------- site : pymatgen .Element or .PeriodicSite """ if isinstance(pmg_obj, Element): - return cls(element = ElementSymbol(pmg_obj.name)) + return cls(element=ElementSymbol(pmg_obj.name)) return cls( - element = ElementSymbol(next(iter(pmg_obj.species.remove_charges().as_dict()))), - lattice = LightLattice(pmg_obj.lattice.matrix), - frac_coords = pmg_obj.frac_coords, - cart_coords = pmg_obj.coords, + element=ElementSymbol( + next(iter(pmg_obj.species.remove_charges().as_dict())) + ), + lattice=LightLattice(pmg_obj.lattice.matrix), + frac_coords=pmg_obj.frac_coords, + cart_coords=pmg_obj.coords, ) def to_pymatgen(self) -> PeriodicSite: @@ -285,20 +306,20 @@ def to_pymatgen(self) -> PeriodicSite: self.frac_coords, Lattice(self.lattice), coords_are_cartesian=False, - properties = self.properties + properties=self.properties, ) @property - def species(self) -> dict[str,int]: + def species(self) -> dict[str, int]: """Composition-like representation of site.""" - return {self.element.name : 1} + return {self.element.name: 1} @property - def properties(self) -> dict[str,float]: + def properties(self) -> dict[str, float]: """Aggregate optional properties defined on the site.""" props = {} for k in SiteProperties.__members__: - if (prop := getattr(self,k,None)) is not None: + if (prop := getattr(self, k, None)) is not None: props[k] = prop return props @@ -324,7 +345,7 @@ def Z(self) -> int: def name(self) -> str: """Ensure compatibility with PeriodicSite.""" return self.element.name - + @property def species_string(self) -> str: """Ensure compatibility with PeriodicSite.""" @@ -337,10 +358,10 @@ def label(self) -> str: def __str__(self): return self.label - + def add_attrs(self, **kwargs) -> ElementReplica: """Rapidly create a copy of this instance with additional fields set. - + Parameters ----------- **kwargs @@ -348,7 +369,7 @@ def add_attrs(self, **kwargs) -> ElementReplica: add lattice and coordinate information to each site, and thereby not store it in the StructureReplica object itself in addition to each site. - + Returns ----------- ElementReplica @@ -357,6 +378,7 @@ def add_attrs(self, **kwargs) -> ElementReplica: config.update(**kwargs) return ElementReplica(**config) + class StructureReplica(BaseModel): """Define a fixed schema structure. @@ -367,10 +389,10 @@ class StructureReplica(BaseModel): When the `.sites` attr of `StructureReplica` is accessed, all prior attributes (respective aliases: `lattice`, `frac_coords`, and `coords`) are assigned to the retrieved sites. - Compare this to pymatgen's .Structure, which stores the `lattice`, `frac_coords`, + Compare this to pymatgen's .Structure, which stores the `lattice`, `frac_coords`, and `cart_coords` both in the .Structure object and each .PeriodicSite within it. - + Parameters ----------- lattice : LightLattice @@ -385,21 +407,25 @@ class StructureReplica(BaseModel): charge (optional) : float The total charge on the structure. """ - - lattice : LightLattice = Field(description="The lattice in 3x3 matrix form.") - species : list[ElementReplica] = Field(description="The elements in the structure.") - frac_coords : ListMatrix3D = Field(description="The direct coordinates of the sites in the structure.") - cart_coords : ListMatrix3D = Field(description="The Cartesian coordinates of the sites in the structure.") - charge : float | None = Field(None, description="The net charge on the structure.") + + lattice: LightLattice = Field(description="The lattice in 3x3 matrix form.") + species: list[ElementReplica] = Field(description="The elements in the structure.") + frac_coords: ListMatrix3D = Field( + description="The direct coordinates of the sites in the structure." + ) + cart_coords: ListMatrix3D = Field( + description="The Cartesian coordinates of the sites in the structure." + ) + charge: float | None = Field(None, description="The net charge on the structure.") @property def sites(self) -> list[ElementReplica]: """Return a list of sites in the structure with lattice and coordinate info.""" return [ species.add_attrs( - lattice = self.lattice, - cart_coords = self.cart_coords[idx], - frac_coords = self.frac_coords[idx], + lattice=self.lattice, + cart_coords=self.cart_coords[idx], + frac_coords=self.frac_coords[idx], ) for idx, species in enumerate(self.species) ] @@ -431,7 +457,7 @@ def num_sites(self) -> int: @classmethod def from_pymatgen(cls, pmg_obj: Structure) -> Self: """Create a StructureReplica from a pymatgen .Structure. - + Parameters ----------- pmg_obj : pymatgen .Structure @@ -444,34 +470,38 @@ def from_pymatgen(cls, pmg_obj: Structure) -> Self: raise ValueError( "Currently, `StructureReplica` is intended to represent only ordered materials." ) - + lattice = LightLattice(pmg_obj.lattice.matrix) properties = [{} for _ in range(len(pmg_obj))] for idx, site in enumerate(pmg_obj): - for k in ("charge","magmom","velocities","selective_dynamics"): + for k in ("charge", "magmom", "velocities", "selective_dynamics"): if (prop := site.properties.get(k)) is not None: properties[idx][k] = prop species = [ ElementReplica( - element = ElementSymbol[next(iter(site.species.remove_charges().as_dict()))], - **properties[idx] + element=ElementSymbol[ + next(iter(site.species.remove_charges().as_dict())) + ], + **properties[idx], ) for idx, site in enumerate(pmg_obj) ] return cls( lattice=lattice, - species = species, - frac_coords = [site.frac_coords for site in pmg_obj], - cart_coords = [site.coords for site in pmg_obj], - charge = pmg_obj.charge, + species=species, + frac_coords=[site.frac_coords for site in pmg_obj], + cart_coords=[site.coords for site in pmg_obj], + charge=pmg_obj.charge, ) - + def to_pymatgen(self) -> Structure: """Convert to a pymatgen .Structure.""" - return Structure.from_sites([site.to_periodic_site() for site in self], charge = self.charge) - + return Structure.from_sites( + [site.to_periodic_site() for site in self], charge=self.charge + ) + @classmethod def from_poscar(cls, poscar_path: str | Path) -> Self: """Define convenience method to create a StructureReplica from a VASP POSCAR.""" @@ -479,6 +509,7 @@ def from_poscar(cls, poscar_path: str | Path) -> Self: def __str__(self): """Define format for printing a Structure.""" + def _format_float(val: float | int) -> str: nspace = 2 if val >= 0.0 else 1 return " " * nspace + f"{val:.8f}" From b9ac5497c4a53d828c1629a4058d428495473d74 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 21 Jan 2025 14:46:31 -0800 Subject: [PATCH 09/15] fix structure_entry property --- emmet-core/emmet/core/tasks.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/emmet-core/emmet/core/tasks.py b/emmet-core/emmet/core/tasks.py index cd5ea6e519..c3c0997030 100644 --- a/emmet-core/emmet/core/tasks.py +++ b/emmet-core/emmet/core/tasks.py @@ -804,7 +804,9 @@ def structure_entry(self) -> ComputedStructureEntry: ComputedStructureEntry The TaskDoc.entry with corresponding TaskDoc.structure added. """ - ce = self.entry.get_computed_entry() + ce = self.entry + if not getattr(self, "_use_pymatgen_rep", False): + ce = ce.get_computed_entry() return ComputedStructureEntry( structure=self.structure, energy=ce.energy, From 941e9d60e2da966bc5cf1d5a1d93c82738e60903 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 21 Jan 2025 16:19:36 -0800 Subject: [PATCH 10/15] fix type hinting / mypy --- emmet-core/emmet/core/math.py | 36 +++++------ emmet-core/emmet/core/structure_replicas.py | 72 ++++++++++----------- 2 files changed, 49 insertions(+), 59 deletions(-) diff --git a/emmet-core/emmet/core/math.py b/emmet-core/emmet/core/math.py index e6a38487d8..f1096e8fc3 100644 --- a/emmet-core/emmet/core/math.py +++ b/emmet-core/emmet/core/math.py @@ -1,29 +1,25 @@ """Define types used for array-like data.""" -from typing import TypeVar -Vector3D = TypeVar("Vector3D", bound=tuple[float, float, float]) -Vector3D.__doc__ = "Real space vector" # type: ignore +Vector3D = tuple[float, float, float] +"""Real space vector.""" -Matrix3D = TypeVar("Matrix3D", bound=tuple[Vector3D, Vector3D, Vector3D]) -Matrix3D.__doc__ = "Real space Matrix" # type: ignore +Matrix3D = tuple[Vector3D, Vector3D, Vector3D] +"""Real space Matrix.""" -Vector6D = TypeVar("Vector6D", bound=tuple[float, float, float, float, float, float]) -Vector6D.__doc__ = "6D Voigt matrix component" # type: ignore +Vector6D = tuple[float, float, float, float, float, float] +"""6D Voigt matrix component.""" -MatrixVoigt = TypeVar( - "MatrixVoigt", - bound=tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D], -) -MatrixVoigt.__doc__ = "Voigt representation of a 3x3x3x3 tensor" # type: ignore +MatrixVoigt = tuple[Vector6D, Vector6D, Vector6D, Vector6D, Vector6D, Vector6D] +""""Voigt representation of a 3x3x3x3 tensor.""" -Tensor3R = TypeVar("Tensor3R", bound=list[list[list[float]]]) -Tensor3R.__doc__ = "Generic tensor of rank 3" # type: ignore +Tensor3R = list[list[list[float]]] +"""Generic tensor of rank 3.""" -Tensor4R = TypeVar("Tensor4R", bound=list[list[list[list[float]]]]) -Tensor4R.__doc__ = "Generic tensor of rank 4" # type: ignore +Tensor4R = list[list[list[list[float]]]] +"""Generic tensor of rank 4.""" -ListVector3D = TypeVar("ListVector3D", bound=list[float]) -ListVector3D.__doc__ = "Real space vector as list" # type: ignore +ListVector3D = list[float] +"""Real space vector as list.""" -ListMatrix3D = TypeVar("ListMatrix3D", bound=list[ListVector3D]) -ListMatrix3D.__doc__ = "Real space Matrix as list" # type: ignore +ListMatrix3D = list[ListVector3D] +"""Real space Matrix as list.""" diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py index 4a4a5fa773..788dd1a181 100644 --- a/emmet-core/emmet/core/structure_replicas.py +++ b/emmet-core/emmet/core/structure_replicas.py @@ -35,11 +35,11 @@ def to_pymatgen(self) -> Any: @classmethod def from_dict(cls, dct: dict[str, Any]) -> Self: """MSONable-like function to create this object from a dict.""" - raise NotImplementedError + return cls(**dct) def as_dict(self) -> dict[str, Any]: """MSONable-like function to create dict representation of this object.""" - raise NotImplementedError + return self.model_dump() class SiteProperties(Enum): @@ -183,35 +183,26 @@ def __str__(self): return self.name -class LightLattice(tuple): +class LatticeReplica(EmmetReplica): """Low memory representation of a Lattice as a tuple of a 3x3 matrix.""" - def __new__(cls, matrix): - """Overset __new__ to define new tuple instance.""" - lattice_matrix = np.array(matrix) - if lattice_matrix.shape != (3, 3): - raise ValueError("Lattice matrix must be 3x3.") - return super(LightLattice, cls).__new__( - cls, tuple([tuple(v) for v in lattice_matrix.tolist()]) - ) - - def as_dict(self) -> dict[str, list | str]: - """Define MSONable-like as_dict.""" - return {"@class": self.__class__, "@module": self.__module__, "matrix": self} + matrix: Matrix3D = Field( + description="The matrix represenation of the lattice, with a, b, and c as rows." + ) @classmethod - def from_dict(cls, dct: dict) -> Self: - """Define MSONable-like from_dict.""" - return cls(dct["matrix"]) + def from_pymatgen(cls, pmg_obj: Lattice) -> Self: + """Create a LatticeReplica from a pymatgen .Lattice.""" + return cls(matrix=pmg_obj.matrix) - def copy(self) -> Self: - """Return a new copy of LightLattice.""" - return LightLattice(self) + def to_pymatgen(self) -> Lattice: + """Create a pymatgen .Lattice.""" + return Lattice(self.matrix) @property def volume(self) -> float: """Get the volume enclosed by the direct lattice vectors.""" - return abs(np.linalg.det(self)) + return abs(np.linalg.det(self.matrix)) class ElementReplica(EmmetReplica): @@ -294,20 +285,23 @@ def from_pymatgen(cls, pmg_obj: Element | PeriodicSite) -> Self: element=ElementSymbol( next(iter(pmg_obj.species.remove_charges().as_dict())) ), - lattice=LightLattice(pmg_obj.lattice.matrix), + lattice=LatticeReplica.from_pymatgen(pmg_obj.lattice), frac_coords=pmg_obj.frac_coords, cart_coords=pmg_obj.coords, ) - def to_pymatgen(self) -> PeriodicSite: - """Create a PeriodicSite from a ElementReplica.""" - return PeriodicSite( - self.element.name, - self.frac_coords, - Lattice(self.lattice), - coords_are_cartesian=False, - properties=self.properties, - ) + def to_pymatgen(self) -> PeriodicSite | Element: + """Create an Element or PeriodicSite from a ElementReplica.""" + + if self.lattice and self.frac_coords: + return PeriodicSite( + self.element.name, + self.frac_coords, + Lattice(self.lattice), + coords_are_cartesian=False, + properties=self.properties, + ) + return Element(self.element.name) @property def species(self) -> dict[str, int]: @@ -395,7 +389,7 @@ class StructureReplica(BaseModel): Parameters ----------- - lattice : LightLattice + lattice : LatticeReplica A 3x3 tuple of the lattice vectors, with a, b, and c as subsequent rows. species : list[ElementReplica] A list of elements in the structure @@ -408,7 +402,7 @@ class StructureReplica(BaseModel): The total charge on the structure. """ - lattice: LightLattice = Field(description="The lattice in 3x3 matrix form.") + lattice: LatticeReplica = Field(description="The lattice in 3x3 matrix form.") species: list[ElementReplica] = Field(description="The elements in the structure.") frac_coords: ListMatrix3D = Field( description="The direct coordinates of the sites in the structure." @@ -436,7 +430,7 @@ def __getitem__(self, idx: int | slice) -> ElementReplica | list[ElementReplica] return self.sites[idx] raise IndexError("Index must be an integer or slice!") - def __iter__(self) -> Iterator[ElementReplica]: + def __iter__(self) -> Iterator[ElementReplica]: # type: ignore[override] """Permit list-like iteration on the sites in StructureReplica.""" yield from self.sites @@ -471,8 +465,8 @@ def from_pymatgen(cls, pmg_obj: Structure) -> Self: "Currently, `StructureReplica` is intended to represent only ordered materials." ) - lattice = LightLattice(pmg_obj.lattice.matrix) - properties = [{} for _ in range(len(pmg_obj))] + lattice = LatticeReplica.from_pymatgen(pmg_obj.lattice) + properties: list[dict[str, Any]] = [{} for _ in range(len(pmg_obj))] for idx, site in enumerate(pmg_obj): for k in ("charge", "magmom", "velocities", "selective_dynamics"): if (prop := site.properties.get(k)) is not None: @@ -499,13 +493,13 @@ def from_pymatgen(cls, pmg_obj: Structure) -> Self: def to_pymatgen(self) -> Structure: """Convert to a pymatgen .Structure.""" return Structure.from_sites( - [site.to_periodic_site() for site in self], charge=self.charge + [site.to_pymatgen() for site in self], charge=self.charge # type: ignore[misc] ) @classmethod def from_poscar(cls, poscar_path: str | Path) -> Self: """Define convenience method to create a StructureReplica from a VASP POSCAR.""" - return cls.from_structure(Poscar.from_file(poscar_path).structure) + return cls.from_pymatgen(Poscar.from_file(poscar_path).structure) def __str__(self): """Define format for printing a Structure.""" From 373cd9af4606f9c86438b147b04ce9efafbd8e51 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 22 Jan 2025 11:10:52 -0800 Subject: [PATCH 11/15] make PotcarSummaryStats subscriptable --- emmet-core/emmet/core/vasp/calculation.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/emmet-core/emmet/core/vasp/calculation.py b/emmet-core/emmet/core/vasp/calculation.py index 67d7df6fcf..e5134bd7bb 100644 --- a/emmet-core/emmet/core/vasp/calculation.py +++ b/emmet-core/emmet/core/vasp/calculation.py @@ -98,6 +98,10 @@ class PotcarSummaryStats(BaseModel): ), ) + def __getitem__(self, name: str) -> Any: + """Make attributes subscriptable.""" + return getattr(self, name) + class PotcarSpec(BaseModel): """Document defining a VASP POTCAR specification.""" From 871bf9dc5be11418693510d74797e35baeae836b Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Tue, 28 Jan 2025 19:43:56 -0800 Subject: [PATCH 12/15] slight tweak to composition stub --- emmet-core/emmet/core/stubs.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/emmet-core/emmet/core/stubs.py b/emmet-core/emmet/core/stubs.py index 3ac0a5fd88..37caa87be5 100644 --- a/emmet-core/emmet/core/stubs.py +++ b/emmet-core/emmet/core/stubs.py @@ -1,10 +1,4 @@ -# mypy: ignore-errors -# isort: off -""" -This module stubs some pymatgen classes that implement custom behavior -outside the standard MSONable model -""" -from typing import Dict +"""Stub some pymatgen classes with behaviors besides those of MSONable.""" import pymatgen.core.composition from pydantic import RootModel @@ -20,7 +14,7 @@ class StubComposition(RootModel): """A dictionary mapping element to total quantity""" - root: Dict[Element, float] + root: dict[Element, float] @classmethod # type: ignore @@ -34,5 +28,5 @@ def validate_composition(cls, v): return pymatgen.core.composition.Composition(**v) -pymatgen.core.composition.Composition.__pydantic_model__ = StubComposition -pymatgen.core.composition.Composition.__get_validators__ = get_validators +setattr(pymatgen.core.composition.Composition,"__pydantic_model__", StubComposition) +setattr(pymatgen.core.composition.Composition,"__get_validators__", get_validators) From 4c034b3d1ee987842a0b0f4411fd2abc60345d42 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 29 Jan 2025 16:19:03 -0800 Subject: [PATCH 13/15] add strict composition, other enhancements --- emmet-core/emmet/core/structure_replicas.py | 170 +++++++++++++++++--- emmet-core/emmet/core/stubs.py | 4 +- 2 files changed, 149 insertions(+), 25 deletions(-) diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py index 788dd1a181..f701ab8a02 100644 --- a/emmet-core/emmet/core/structure_replicas.py +++ b/emmet-core/emmet/core/structure_replicas.py @@ -2,14 +2,15 @@ from __future__ import annotations from collections.abc import Iterator -from pydantic import BaseModel, Field +from pydantic import BaseModel, RootModel, Field +import re from enum import Enum from typing import TYPE_CHECKING import numpy as np -from pymatgen.core import Structure, PeriodicSite, Lattice, Element +from pymatgen.core import Structure, PeriodicSite, Lattice, Element, Species, Composition from pymatgen.io.vasp import Poscar from emmet.core.math import Vector3D, Matrix3D, ListMatrix3D @@ -41,7 +42,6 @@ def as_dict(self) -> dict[str, Any]: """MSONable-like function to create dict representation of this object.""" return self.model_dump() - class SiteProperties(Enum): """Define a restricted set of structure site properties.""" @@ -204,7 +204,6 @@ def volume(self) -> float: """Get the volume enclosed by the direct lattice vectors.""" return abs(np.linalg.det(self.matrix)) - class ElementReplica(EmmetReplica): """Define a flexible schema for elements and periodic sites. @@ -217,7 +216,7 @@ class ElementReplica(EmmetReplica): ----------- element (required) : ElementSymbol The symbol of the element. - lattice (optional) : Matrix3D + lattice (optional) : LatticeReplica The 3x3 representation of the lattice the site exists in. cart_coords (optional) : Vector3D A tuple of 3 floats specifying the position of the site in Cartesian space. @@ -236,7 +235,7 @@ class ElementReplica(EmmetReplica): """ element: ElementSymbol = Field(description="The element.") - lattice: Matrix3D | None = Field( + lattice: LatticeReplica | None = Field( default=None, description="The lattice in 3x3 matrix form." ) cart_coords: Vector3D | None = Field( @@ -271,7 +270,7 @@ def model_post_init(self, __context: Any) -> None: ) @classmethod - def from_pymatgen(cls, pmg_obj: Element | PeriodicSite) -> Self: + def from_pymatgen(cls, pmg_obj: Element | Species | PeriodicSite) -> Self: """Convert a pymatgen .PeriodicSite or .Element to .ElementReplica. Parameters @@ -281,33 +280,38 @@ def from_pymatgen(cls, pmg_obj: Element | PeriodicSite) -> Self: if isinstance(pmg_obj, Element): return cls(element=ElementSymbol(pmg_obj.name)) + elif isinstance(pmg_obj, Species): + return cls( + element=ElementSymbol(pmg_obj._el), + charge=getattr(pmg_obj, "_oxi_state", None), + ) + return cls( - element=ElementSymbol( - next(iter(pmg_obj.species.remove_charges().as_dict())) - ), + element=ElementSymbol[pmg_obj.specie.name], lattice=LatticeReplica.from_pymatgen(pmg_obj.lattice), frac_coords=pmg_obj.frac_coords, cart_coords=pmg_obj.coords, + charge=getattr(pmg_obj.specie, "_oxi_state", None), ) - def to_pymatgen(self) -> PeriodicSite | Element: + def to_pymatgen(self) -> Element | Species | PeriodicSite: """Create an Element or PeriodicSite from a ElementReplica.""" if self.lattice and self.frac_coords: return PeriodicSite( self.element.name, self.frac_coords, - Lattice(self.lattice), + Lattice(self.lattice.matrix), coords_are_cartesian=False, properties=self.properties, ) + elif self.charge is not None: + return Species( + symbol=self.element.name, + oxidation_state=self.charge, + ) return Element(self.element.name) - @property - def species(self) -> dict[str, int]: - """Composition-like representation of site.""" - return {self.element.name: 1} - @property def properties(self) -> dict[str, float]: """Aggregate optional properties defined on the site.""" @@ -324,6 +328,23 @@ def __int__(self) -> int: def __float__(self) -> float: """Ensure pymatgen's get_el_sp recognizes this class as an element.""" return float(self.element.Z) + + @classmethod + def from_str(self,string) -> Self: + """Create an ElementReplica from the element symbol and optional charge.""" + parsed = re.match("([A-Z][a-z]?)([0-9.0-9]+)?([+-])?",string).groups() + charge_str = parsed[1] + + charge_sign = "+" + if parsed[2] is not None: + charge_sign = parsed[2] + if charge_str is None: + charge_str = "1" + + charge = None + if charge_str is not None: + charge = float(charge_sign + charge_str) + return ElementReplica(element=ElementSymbol[parsed[0]],charge=charge) @property def elements(self) -> list[ElementSymbol]: @@ -350,9 +371,41 @@ def label(self) -> str: """Ensure compatibility with PeriodicSite.""" return self.name - def __str__(self): - return self.label + @property + def specie(self) -> str: + """The element with its optional charge/oxidation state.""" + charge_sign = "" + chg_str = "" + if self.charge is not None: + # specifically want to check if charge is set and zero here + if self.charge > 0: + charge_sign = "+" + elif self.charge < 0: + charge_sign = "-" + chg_str = f"{abs(self.charge)}" + return f"{self.label}{chg_str}{charge_sign}" + @property + def species(self) -> CompositionReplica: + """Composition-like representation of site.""" + return CompositionReplica.from_dict({self.specie: 1}) + + def __str__(self): + coord_str = "" + if self.frac_coords is not None: + coord_str += ( + " : " + f"xyz({', '.join([f'{pos:.8f}' for pos in self.cart_coords])}) " + f"abc[{', '.join([f'{pos:.8f}' for pos in self.frac_coords])}]" + ) + return f"{self.specie}{coord_str}" + + def __repr__(self) -> str: + return self.__str__() + + def __hash__(self) -> int: + return hash(str(self)) + def add_attrs(self, **kwargs) -> ElementReplica: """Rapidly create a copy of this instance with additional fields set. @@ -372,6 +425,65 @@ def add_attrs(self, **kwargs) -> ElementReplica: config.update(**kwargs) return ElementReplica(**config) +class CompositionReplica(RootModel): + """Strict format representation of a Composition.""" + root : dict[ElementReplica,float] + + @property + def formula(self) -> str: + """The formula sorted by ascending Z.""" + sorted_ele = sorted(self.root,key = lambda k : k.Z) + return " ".join([f"{ele.species_string}{self.root[ele]}" for ele in sorted_ele]) + + @property + def chemical_system(self) -> str: + """The chemical system in alphabetical order, dash separated.""" + eles = [ele.name for ele in self.root] + return "-".join(sorted(eles)) + + def __getitem__(self, item) -> int: + return self.root[item] + + @classmethod + def from_dict(cls,dct : dict[str | ElementSymbol | ElementReplica, int]) -> Self: + """Create a CompositionReplica from a dict representation. + + Parameters + ----------- + dct : dict[str or ElementSymbol or ElementReplica, int] + Dictionary mapping element symbols (with or without charges) to their + stoichiometry. + """ + new_dct = {} + for k, v in dct.items(): + if isinstance(k,str): + symb = ElementReplica.from_str(k) + elif isinstance(k, ElementSymbol): + symb = ElementReplica(element=k) + elif isinstance(k, ElementReplica): + symb = k + else: + raise ValueError(f"Expected str, ElementSymbol, or ElementReplica, not {type(k)}") + new_dct[symb] = v + return cls(root = new_dct) + + @classmethod + def from_pymatgen(cls, pmg_obj : Composition) -> Self: + """Create a CompositionReplica from a pymatgen Composition. + + Parameters + ----------- + pmg_obj : Composition + """ + return cls.from_dict(pmg_obj.as_dict()) + + def to_pymatgen(self) -> Composition: + """Create a pymatgen Composition.""" + return Composition({k.specie : v for k, v in self.root.items()}) + + def __hash__(self) -> int: + return hash(frozenset(self.root)) + class StructureReplica(BaseModel): """Define a fixed schema structure. @@ -423,6 +535,11 @@ def sites(self) -> list[ElementReplica]: ) for idx, species in enumerate(self.species) ] + + @property + def composition(self) -> CompositionReplica: + dct = {spec: len([s for s in self.species if s == spec]) for spec in set(self.species)} + return CompositionReplica.from_dict(dct) def __getitem__(self, idx: int | slice) -> ElementReplica | list[ElementReplica]: """Permit list-like access of the sites in StructureReplica.""" @@ -471,6 +588,8 @@ def from_pymatgen(cls, pmg_obj: Structure) -> Self: for k in ("charge", "magmom", "velocities", "selective_dynamics"): if (prop := site.properties.get(k)) is not None: properties[idx][k] = prop + if hasattr(site.specie, "_oxi_state"): + properties[idx]["charge"] = site.specie._oxi_state species = [ ElementReplica( @@ -509,7 +628,8 @@ def _format_float(val: float | int) -> str: return " " * nspace + f"{val:.8f}" lattice_str = [ - [_format_float(self.lattice[i][j]) for j in range(3)] for i in range(3) + [_format_float(self.lattice.matrix[i][j]) for j in range(3)] + for i in range(3) ] coords_str = [ [_format_float(self.cart_coords[i][j]) for j in range(3)] @@ -522,9 +642,13 @@ def _format_float(val: float | int) -> str: ) as_str += "\nCartesian Coordinates\n" + max_ele_len = max(len(str(_site)) for _site in self.sites) as_str += "\n".join( - f"{self[idx].element}{' '*(3-len(str(self[idx].element)))}: " - + ",".join(site_str) - for idx, site_str in enumerate(coords_str) + f"{str(_site)}{' '*(max_ele_len+3-len(str(_site)))}: " + + ",".join(coords_str[idx]) + for idx, _site in enumerate(self.sites) ) return as_str + + def __repr__(self) -> str: + return self.__str__() diff --git a/emmet-core/emmet/core/stubs.py b/emmet-core/emmet/core/stubs.py index 37caa87be5..d2c0715321 100644 --- a/emmet-core/emmet/core/stubs.py +++ b/emmet-core/emmet/core/stubs.py @@ -28,5 +28,5 @@ def validate_composition(cls, v): return pymatgen.core.composition.Composition(**v) -setattr(pymatgen.core.composition.Composition,"__pydantic_model__", StubComposition) -setattr(pymatgen.core.composition.Composition,"__get_validators__", get_validators) +setattr(pymatgen.core.composition.Composition, "__pydantic_model__", StubComposition) +setattr(pymatgen.core.composition.Composition, "__get_validators__", get_validators) From 4769340484472966ca4a002a31bf1720cf555dd9 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 29 Jan 2025 16:24:39 -0800 Subject: [PATCH 14/15] linting --- emmet-core/emmet/core/structure_replicas.py | 81 +++++++++++++-------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py index f701ab8a02..1ba3174b07 100644 --- a/emmet-core/emmet/core/structure_replicas.py +++ b/emmet-core/emmet/core/structure_replicas.py @@ -10,7 +10,14 @@ import numpy as np -from pymatgen.core import Structure, PeriodicSite, Lattice, Element, Species, Composition +from pymatgen.core import ( + Structure, + PeriodicSite, + Lattice, + Element, + Species, + Composition, +) from pymatgen.io.vasp import Poscar from emmet.core.math import Vector3D, Matrix3D, ListMatrix3D @@ -42,6 +49,7 @@ def as_dict(self) -> dict[str, Any]: """MSONable-like function to create dict representation of this object.""" return self.model_dump() + class SiteProperties(Enum): """Define a restricted set of structure site properties.""" @@ -204,6 +212,7 @@ def volume(self) -> float: """Get the volume enclosed by the direct lattice vectors.""" return abs(np.linalg.det(self.matrix)) + class ElementReplica(EmmetReplica): """Define a flexible schema for elements and periodic sites. @@ -328,23 +337,26 @@ def __int__(self) -> int: def __float__(self) -> float: """Ensure pymatgen's get_el_sp recognizes this class as an element.""" return float(self.element.Z) - + @classmethod - def from_str(self,string) -> Self: + def from_str(cls, string) -> Self: """Create an ElementReplica from the element symbol and optional charge.""" - parsed = re.match("([A-Z][a-z]?)([0-9.0-9]+)?([+-])?",string).groups() + _parsed = re.match("([A-Z][a-z]?)([0-9.0-9]+)?([+-])?", string) + if not _parsed: + raise ValueError(f"Unknown element symbol {string}") + parsed = _parsed.groups() charge_str = parsed[1] - + charge_sign = "+" if parsed[2] is not None: charge_sign = parsed[2] if charge_str is None: charge_str = "1" - + charge = None if charge_str is not None: charge = float(charge_sign + charge_str) - return ElementReplica(element=ElementSymbol[parsed[0]],charge=charge) + return cls(element=ElementSymbol[parsed[0]], charge=charge) @property def elements(self) -> list[ElementSymbol]: @@ -402,10 +414,10 @@ def __str__(self): def __repr__(self) -> str: return self.__str__() - + def __hash__(self) -> int: return hash(str(self)) - + def add_attrs(self, **kwargs) -> ElementReplica: """Rapidly create a copy of this instance with additional fields set. @@ -425,29 +437,31 @@ def add_attrs(self, **kwargs) -> ElementReplica: config.update(**kwargs) return ElementReplica(**config) + class CompositionReplica(RootModel): """Strict format representation of a Composition.""" - root : dict[ElementReplica,float] + + root: dict[ElementReplica, float] @property def formula(self) -> str: """The formula sorted by ascending Z.""" - sorted_ele = sorted(self.root,key = lambda k : k.Z) + sorted_ele = sorted(self.root, key=lambda k: k.Z) return " ".join([f"{ele.species_string}{self.root[ele]}" for ele in sorted_ele]) - + @property def chemical_system(self) -> str: """The chemical system in alphabetical order, dash separated.""" eles = [ele.name for ele in self.root] return "-".join(sorted(eles)) - - def __getitem__(self, item) -> int: + + def __getitem__(self, item) -> float: return self.root[item] - + @classmethod - def from_dict(cls,dct : dict[str | ElementSymbol | ElementReplica, int]) -> Self: + def from_dict(cls, dct: dict[str | ElementSymbol | ElementReplica, float]) -> Self: """Create a CompositionReplica from a dict representation. - + Parameters ----------- dct : dict[str or ElementSymbol or ElementReplica, int] @@ -456,34 +470,36 @@ def from_dict(cls,dct : dict[str | ElementSymbol | ElementReplica, int]) -> Self """ new_dct = {} for k, v in dct.items(): - if isinstance(k,str): + if isinstance(k, str): symb = ElementReplica.from_str(k) elif isinstance(k, ElementSymbol): symb = ElementReplica(element=k) elif isinstance(k, ElementReplica): symb = k else: - raise ValueError(f"Expected str, ElementSymbol, or ElementReplica, not {type(k)}") + raise ValueError( + f"Expected str, ElementSymbol, or ElementReplica, not {type(k)}" + ) new_dct[symb] = v - return cls(root = new_dct) - + return cls(root=new_dct) + @classmethod - def from_pymatgen(cls, pmg_obj : Composition) -> Self: + def from_pymatgen(cls, pmg_obj: Composition) -> Self: """Create a CompositionReplica from a pymatgen Composition. - + Parameters ----------- pmg_obj : Composition """ - return cls.from_dict(pmg_obj.as_dict()) - + return cls.from_dict(pmg_obj.as_dict()) # type: ignore[arg-type] + def to_pymatgen(self) -> Composition: """Create a pymatgen Composition.""" - return Composition({k.specie : v for k, v in self.root.items()}) - + return Composition({k.specie: v for k, v in self.root.items()}) + def __hash__(self) -> int: return hash(frozenset(self.root)) - + class StructureReplica(BaseModel): """Define a fixed schema structure. @@ -535,11 +551,14 @@ def sites(self) -> list[ElementReplica]: ) for idx, species in enumerate(self.species) ] - + @property def composition(self) -> CompositionReplica: - dct = {spec: len([s for s in self.species if s == spec]) for spec in set(self.species)} - return CompositionReplica.from_dict(dct) + dct = { + spec: len([s for s in self.species if s == spec]) + for spec in set(self.species) + } + return CompositionReplica.from_dict(dct) # type: ignore[arg-type] def __getitem__(self, idx: int | slice) -> ElementReplica | list[ElementReplica]: """Permit list-like access of the sites in StructureReplica.""" From fbdbfd0c7307bfa9a2a15911b6d6fadf1659f265 Mon Sep 17 00:00:00 2001 From: esoteric-ephemera Date: Wed, 29 Jan 2025 17:43:28 -0800 Subject: [PATCH 15/15] start migrating models to replica schema, ensure that replica objects can access pymatgen attributes if lookup fails --- emmet-core/emmet/core/structure.py | 53 ++++++++++++++++----- emmet-core/emmet/core/structure_replicas.py | 28 ++++++++++- 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/emmet-core/emmet/core/structure.py b/emmet-core/emmet/core/structure.py index 21cca36036..1828a3c421 100644 --- a/emmet-core/emmet/core/structure.py +++ b/emmet-core/emmet/core/structure.py @@ -1,7 +1,7 @@ """Core definition of Structure and Molecule metadata.""" from __future__ import annotations -from typing import List, Optional, Type, TypeVar +from typing import Optional, Type, TypeVar from pydantic import Field from pymatgen.core.composition import Composition @@ -11,8 +11,9 @@ from emmet.core.utils import get_graph_hash from emmet.core.base import EmmetBaseModel from emmet.core.symmetry import PointGroupData, SymmetryData +from emmet.core.structure_replicas import CompositionReplica, StructureReplica -T = TypeVar("T", bound="StructureMetadata") +T = TypeVar("T", bound="DbStructureMetadata") S = TypeVar("S", bound="MoleculeMetadata") try: @@ -21,21 +22,21 @@ openbabel = None -class StructureMetadata(EmmetBaseModel): +class DbStructureMetadata(EmmetBaseModel): """Mix-in class for structure metadata.""" # Structure metadata nsites: Optional[int] = Field( None, description="Total number of sites in the structure." ) - elements: Optional[List[Element]] = Field( + elements: Optional[list[Element]] = Field( None, description="List of elements in the material." ) nelements: Optional[int] = Field(None, description="Number of elements.") - composition: Optional[Composition] = Field( + composition: Optional[CompositionReplica] = Field( None, description="Full composition for the material." ) - composition_reduced: Optional[Composition] = Field( + composition_reduced: Optional[CompositionReplica] = Field( None, title="Reduced Composition", description="Simplified representation of the composition.", @@ -75,11 +76,13 @@ class StructureMetadata(EmmetBaseModel): None, description="Symmetry data for this material." ) + _use_pymatgen_rep: bool = False + @classmethod def from_composition( cls: Type[T], - composition: Composition, - fields: Optional[List[str]] = None, + composition: Composition | CompositionReplica, + fields: Optional[list[str]] = None, **kwargs, ) -> T: fields = ( @@ -95,6 +98,11 @@ def from_composition( if fields is None else fields ) + if isinstance(composition, Composition) and not cls._use_pymatgen_rep: + composition = CompositionReplica.from_pymatgen(composition) + elif isinstance(composition, CompositionReplica) and cls._use_pymatgen_rep: + composition = composition.to_pymatgen() + composition = composition.remove_charges() elsyms = sorted({e.symbol for e in composition.elements}) @@ -114,8 +122,8 @@ def from_composition( @classmethod def from_structure( cls: Type[T], - meta_structure: Structure, - fields: Optional[List[str]] = None, + meta_structure: Structure | StructureReplica, + fields: Optional[list[str]] = None, **kwargs, ) -> T: fields = ( @@ -137,6 +145,11 @@ def from_structure( else fields ) comp = meta_structure.composition.remove_charges() + if isinstance(comp, Composition) and not cls._use_pymatgen_rep: + comp = CompositionReplica.from_pymatgen(comp) + elif isinstance(comp, CompositionReplica) and cls._use_pymatgen_rep: + comp = comp.to_pymatgen() + elsyms = sorted({e.symbol for e in comp.elements}) symmetry = SymmetryData.from_structure(meta_structure) @@ -158,6 +171,20 @@ def from_structure( return cls(**kwargs) +class StructureMetadata(DbStructureMetadata): + """Pymatgen-object version of DbStructureMetadata.""" + + composition: Optional[Composition] = Field( + None, description="Full composition for the material." + ) + composition_reduced: Optional[Composition] = Field( + None, + title="Reduced Composition", + description="Simplified representation of the composition.", + ) + _use_pymatgen_rep: bool = True + + class MoleculeMetadata(EmmetBaseModel): """Mix-in class for molecule metadata.""" @@ -168,7 +195,7 @@ class MoleculeMetadata(EmmetBaseModel): natoms: Optional[int] = Field( None, description="Total number of atoms in the molecule" ) - elements: Optional[List[Element]] = Field( + elements: Optional[list[Element]] = Field( None, description="List of elements in the molecule" ) nelements: Optional[int] = Field(None, title="Number of Elements") @@ -223,7 +250,7 @@ class MoleculeMetadata(EmmetBaseModel): def from_composition( cls: Type[S], comp: Composition, - fields: Optional[List[str]] = None, + fields: Optional[list[str]] = None, **kwargs, ) -> S: """ @@ -276,7 +303,7 @@ def from_composition( def from_molecule( cls: Type[S], meta_molecule: Molecule, - fields: Optional[List[str]] = None, + fields: Optional[list[str]] = None, **kwargs, ) -> S: fields = ( diff --git a/emmet-core/emmet/core/structure_replicas.py b/emmet-core/emmet/core/structure_replicas.py index 1ba3174b07..7d001cb2ff 100644 --- a/emmet-core/emmet/core/structure_replicas.py +++ b/emmet-core/emmet/core/structure_replicas.py @@ -2,6 +2,7 @@ from __future__ import annotations from collections.abc import Iterator +from math import gcd from pydantic import BaseModel, RootModel, Field import re @@ -49,6 +50,10 @@ def as_dict(self) -> dict[str, Any]: """MSONable-like function to create dict representation of this object.""" return self.model_dump() + def __getattr__(self, name: str) -> Any: + """If __getattribute__ fails, try the pymatgen object.""" + return getattr(self.to_pymatgen(), name) + class SiteProperties(Enum): """Define a restricted set of structure site properties.""" @@ -500,8 +505,29 @@ def to_pymatgen(self) -> Composition: def __hash__(self) -> int: return hash(frozenset(self.root)) + def remove_charges(self) -> CompositionReplica: + """Return a copy of the current composition without charges/oxidation states.""" + return CompositionReplica( + root={ + ElementReplica(element=spec.element): coeff + for spec, coeff in self.root.items() + } + ) + + @property + def reduced_composition(self) -> CompositionReplica: + """Return a copy of the current composition reduced by the greatest common divisor.""" + _gcd = gcd(*[int(v) for v in self.root.values()]) + return CompositionReplica( + root={spec: coeff / _gcd for spec, coeff in self.root.items()} + ) + + def __getattr__(self, name: str) -> Any: + """If __getattribute__ fails, try the pymatgen object.""" + return getattr(self.to_pymatgen(), name) + -class StructureReplica(BaseModel): +class StructureReplica(EmmetReplica): """Define a fixed schema structure. This class is intended to provide both a fixed schema for a generic structure,