Ejemplo n.º 1
0
    def __init__(self, entries, comp_dict=None):
        self._solid_entries = list()
        self._ion_entries = list()
        for entry in entries:
            if entry.phase_type == "Solid":
                self._solid_entries.append(entry)
            elif entry.phase_type == "Ion":
                self._ion_entries.append(entry)
            else:
                raise Exception("Incorrect Phase type - needs to be \
                Pourbaix entry of phase type Ion/Solid")
        if len(self._ion_entries) == 0:
            raise Exception("No ion phase. Equilibrium between ion/solid "
                            "is required to make a Pourbaix Diagram")
        self._unprocessed_entries = self._solid_entries + self._ion_entries
        self._elt_comp = comp_dict

        if comp_dict and len(comp_dict) > 1:
            self._multielement = True
            pbx_elements = set()
            for comp in comp_dict.keys():
                for el in [
                        el for el in ion_or_solid_comp_object(comp).elements
                        if el not in ["H", "O"]
                ]:
                    pbx_elements.add(el.symbol)
            self.pourbaix_elements = pbx_elements
            w = [comp_dict[key] for key in comp_dict]
            A = []
            for comp in comp_dict:
                comp_obj = ion_or_solid_comp_object(comp)
                Ai = []
                for elt in self.pourbaix_elements:
                    Ai.append(comp_obj[elt])
                A.append(Ai)
            A = np.array(A).T.astype(float)
            w = np.array(w)
            A /= np.dot([a.sum() for a in A], w)
            x = np.linalg.solve(A, w)
            self._elt_comp = dict(zip(self.pourbaix_elements, x))

        else:
            self._multielement = False
            self.pourbaix_elements = [
                el.symbol for el in entries[0].composition.elements
                if el.symbol not in ["H", "O"]
            ]
            # TODO: document the physical meaning
            # of ternary oxide of pbx diagrams in both modes
            self._elt_comp = {self.pourbaix_elements[0]: 1.0}
        self._make_pourbaix_diagram()
Ejemplo n.º 2
0
    def __init__(self, entries, comp_dict=None):
        self._solid_entries = list()
        self._ion_entries = list()
        for entry in entries:
            if entry.phase_type == "Solid":
                self._solid_entries.append(entry)
            elif entry.phase_type == "Ion":
                self._ion_entries.append(entry)
            else:
                raise Exception("Incorrect Phase type - needs to be \
                Pourbaix entry of phase type Ion/Solid")
        if len(self._ion_entries) == 0:
            raise Exception("No ion phase. Equilibrium between ion/solid "
                            "is required to make a Pourbaix Diagram")
        self._unprocessed_entries = self._solid_entries + self._ion_entries
        self._elt_comp = comp_dict

        if comp_dict and len(comp_dict) > 1:
            self._multielement = True
            pbx_elements = set()
            for comp in comp_dict.keys():
                for el in [el for el in
                           ion_or_solid_comp_object(comp).elements
                           if el not in ["H", "O"]]:
                    pbx_elements.add(el.symbol)
            self.pourbaix_elements = pbx_elements
            w = [comp_dict[key] for key in comp_dict]
            A = []
            for comp in comp_dict:
                comp_obj = ion_or_solid_comp_object(comp)
                Ai = []
                for elt in self.pourbaix_elements:
                    Ai.append(comp_obj[elt])
                A.append(Ai)
            A = np.array(A).T.astype(float)
            w = np.array(w)
            A /= np.dot([a.sum() for a in A], w)
            x = np.linalg.solve(A, w)
            self._elt_comp = dict(zip(self.pourbaix_elements, x))

        else:
            self._multielement = False
            self.pourbaix_elements = [el.symbol
                                      for el in entries[0].composition.elements
                                      if el.symbol not in ["H", "O"]]
            # TODO: document the physical meaning
            # of ternary oxide of pbx diagrams in both modes
            self._elt_comp = {self.pourbaix_elements[0]: 1.0}
        self._make_pourbaix_diagram()
Ejemplo n.º 3
0
    def __init__(self, entries, comp_dict=None):
        self._solid_entries = list()
        self._ion_entries = list()
        for entry in entries:
            if entry.phase_type == "Solid":
                self._solid_entries.append(entry)
            elif entry.phase_type == "Ion":
                self._ion_entries.append(entry)
            else:
                raise Exception("Incorrect Phase type - needs to be \
                Pourbaix entry of phase type Ion/Solid")
        self._unprocessed_entries = self._solid_entries + self._ion_entries
        self._elt_comp = comp_dict
        if comp_dict:
            self._multielement = True
            pbx_elements = set()
            for comp in comp_dict.keys():
                for el in [
                        el for el in ion_or_solid_comp_object(comp).elements
                        if el not in ["H", "O"]
                ]:
                    pbx_elements.add(el.symbol)
            self.pourbaix_elements = pbx_elements
            w = [comp_dict[key] for key in comp_dict]
            A = []
            for comp in comp_dict:
                comp_obj = ion_or_solid_comp_object(comp)
                Ai = []
                for elt in self.pourbaix_elements:
                    Ai.append(comp_obj[elt])
                A.append(Ai)
            A = np.array(A).T.astype(float)
            w = np.array(w)
            A /= np.dot([a.sum() for a in A], w)
            x = np.linalg.solve(A, w)
            self._elt_comp = dict(zip(self.pourbaix_elements, x))

        else:
            self._multielement = False
            self.pourbaix_elements = [
                el.symbol for el in entries[0].composition.elements
                if el.symbol not in ["H", "O"]
            ]
            self._elt_comp = {self.pourbaix_elements[0]: 1.0}
        self._make_pourbaixdiagram()
Ejemplo n.º 4
0
    def __init__(self, entries, comp_dict=None):
        self._solid_entries = list()
        self._ion_entries = list()
        for entry in entries:
            if entry.phase_type == "Solid":
                self._solid_entries.append(entry)
            elif entry.phase_type == "Ion":
                self._ion_entries.append(entry)
            else:
                raise Exception("Incorrect Phase type - needs to be \
                Pourbaix entry of phase type Ion/Solid")
        self._unprocessed_entries = self._solid_entries + self._ion_entries
        self._elt_comp = comp_dict
        if comp_dict:
            self._multielement = True
            pbx_elements = set()
            for comp in comp_dict.keys():
                for el in [el for el in
                           ion_or_solid_comp_object(comp).elements
                           if el not in ["H", "O"]]:
                    pbx_elements.add(el.symbol)
            self.pourbaix_elements = pbx_elements
            w = [comp_dict[key] for key in comp_dict]
            A = []
            for comp in comp_dict:
                comp_obj = ion_or_solid_comp_object(comp)
                Ai = []
                for elt in self.pourbaix_elements:
                    Ai.append(comp_obj[elt])
                A.append(Ai)
            A = np.array(A).T.astype(float)
            w = np.array(w)
            A /= np.dot([a.sum() for a in A], w)
            x = np.linalg.solve(A, w)
            self._elt_comp = dict(zip(self.pourbaix_elements, x))

        else:
            self._multielement = False
            self.pourbaix_elements = [el.symbol
                                      for el in entries[0].composition.elements
                                      if el.symbol not in ["H", "O"]]
            self._elt_comp = {self.pourbaix_elements[0]: 1.0}
        self._make_pourbaixdiagram()