def calculateEquilibria(self, gmStat, setverb, T, P, x0): # setting verbosity (True or False - default), if set to yes, in particular, when getters are called the returned values are displayed in a comprehensive way oc.setVerbosity(setverb) # set pressure oc.setPressure(P) # set temperature oc.setTemperature(T) # set initial molar amounts oc.setElementMolarAmounts(x0) #Equilibrium if gmStat == 'Off': oc.calculateEquilibrium(gmstat.Off) elif gmStat == 'On': oc.calculateEquilibrium(gmstat.On) else: raise ValueError( 'No suitable parameter for gmstat found: Choose from On/Off') self.gibbs = oc.getGibbsEnergy() self.mu = oc.getChemicalPotentials() self.cd = oc.getConstituentsDescription() self.mass = oc.getScalarResult('B') phasesAtEquilibrium = oc.getPhasesAtEquilibrium() self.pec = phasesAtEquilibrium.getPhaseElementComposition() self.pcc = phasesAtEquilibrium.getPhaseConstituentComposition() self.ps = phasesAtEquilibrium.getPhaseSites() self.ma = phasesAtEquilibrium.getPhaseMolarAmounts()
def eqfunc(self, x, calc_value): # setting verbosity (True or False - default), if set to yes, in particular, when getters are called the returned values are displayed in a comprehensive way oc.setVerbosity(self.setverb) # set pressure oc.setPressure(self.P) # set temperature oc.setTemperature(self.T) # set initial molar amounts oc.setElementMolarAmounts(x) #Equilibrium oc.calculateEquilibrium(gmstat.Off) if calc_value == 'gibbs': self.eq_val = oc.getGibbsEnergy() elif calc_value == 'mu': self.eq_val = oc.getChemicalPotentials() elif calc_value == 'cd': self.eq_val = oc.getConstituentsDescription() elif calc_value == 'mass': self.eq_val = oc.getScalarResult('B') elif calc_value == 'pec': self.eq_val = oc.getPhasesAtEquilibrium( ).getPhaseElementComposition() elif calc_value == 'pcc': self.eq_val = oc.getPhasesAtEquilibrium( ).getPhaseConstituentComposition() elif calc_value == 'ps': self.eq_val = oc.getPhasesAtEquilibrium().getPhaseSites() elif calc_value == 'ma': self.eq_val = oc.getPhasesAtEquilibrium().getPhaseMolarAmounts() return self.eq_val
def eqfunc(self, x): """Calculate Phase Equilibrium""" # setting verbosity (True or False - default), if set to yes, in particular, when getters are called the returned values are displayed in a comprehensive way oc.setVerbosity(self.setverb) # tdb filepath tdbFile=self.pathname+self.db #print(tdbFile) # reading tdb oc.readtdb(tdbFile,self.comps) oc.setPhasesStatus((self.phasename[0],self.phasename[1]),phStat.Entered) #Equilibrium variable = oc.setElementMolarAmounts(self.x)+ [oc.setTemperature(self.T), oc.setPressure(self.P)] xs = [v.X(each) for each in self.comps if each != "VA"] xxs = [xs[i] for i in range(1, len(xs))] xxxs = xxs + [v.T, v.P] var = {xxxs[i]: variable[i] for i in range(len(variable))} eq_result = oc.calculateEquilibrium(self.db, self.comps, self.phasename, var) return eq_result
def __init__(self, T, P, phasenames, verbosity=False, enforceGridMinimizerForLocalEq=False): if (self.__db==None): raise RuntimeError('database has not been set, class method initOC should be called first') self.__T = T self.__P = P if (type(phasenames) is list): self.__phasenames = phasenames else: self.__phasenames = [phasenames] # see in which case we are: global or local equilibrium if (len(self.__phasenames)==2): self.__gridMinimizerStatus = gmStat.On elif(len(self.__phasenames)==1): if (enforceGridMinimizerForLocalEq): self.__gridMinimizerStatus = gmStat.On else: self.__gridMinimizerStatus = gmStat.Off else: raise ValueError('invalid number of phases provided (should be one or two)') # set verbosity oc.setVerbosity(verbosity) self.__eq_val = None
import os import pyOC import numpy as np import matplotlib.pyplot as plt from pyOC import opencalphad as oc from pyOC import PhaseStatus as phStat from pyOC import GridMinimizerStatus as gmStat import math ###### # An example of Interfacil energy calculation ###### # oc setup ## setting verbosity (True or False - default), if set to yes, in particular, when getters are called the returned values are displayed in a comprehensive way oc.setVerbosity(False) ## tdb filepath tdbFile = os.environ.get('OCDATA') + '/feouzr.tdb' ## reading tdb elems = ('O', 'U', 'ZR') oc.readtdb(tdbFile, elems) ## suspend all phases except the liquid one oc.setPhasesStatus(('*', ), phStat.Suspended) oc.setPhasesStatus(('LIQUID', ), phStat.Entered) ## set pressure oc.setPressure(1E5) # mass density laws (from Barrachin2004) coriumMassDensityLaws = { 'U1': lambda T: 17270.0 - 1.358 * (T - 1408),
Returns: ----------- Components:list of str - Given components. Temperature: float - Given temperature. Initial_Alloy_Composition: list - Given initial alloy composition. Interfacial_Composition: list - Interfacial composition of the grid minimization. Partial_Interfacial_Energies: list - Partial interfacial energies of components. Interfacial_Energy: float - Requested interfacial energies. Return type: xarray Dataset """ # oc setup ## setting verbosity (True or False - default), if set to yes, in particular, when getters are called the returned values are displayed in a comprehensive way oc.setVerbosity(True) ## tdb filepath tdbFile = os.environ.get('OCDATA') + '/feouzr.tdb' #reading tdb elems = ('O', 'U', 'ZR') oc.readtdb(tdbFile, elems) ## suspend all phases except the liquid one ##oc.setPhasesStatus(('C1_FCC',),phStat.Suspended) oc.setPhasesStatus(('LIQUID', 'C1_FCC'), phStat.Entered) ## set pressure oc.setPressure(1E5) # mass density laws (from Barrachin2004) coriumMassDensityLaws = { 'U1': lambda T: 17270.0 - 1.358 * (T - 1408),