Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def flash_UNIFAC_sequential_substitution(T, P, zs, Psats, chemgroups):
gammas = UNIFAC(chemgroups=chemgroups, T=T, xs=zs)
Ks = [K_value(P=P, Psat=Psat, gamma=gamma) for Psat, gamma in zip(Psats, gammas)]
V_over_F, xs, ys = flash_inner_loop(zs, Ks)
for i in range(100):
gammas = UNIFAC(chemgroups=chemgroups, T=T, xs=xs)
Ks = [K_value(P=P, Psat=Psat, gamma=gamma) for Psat, gamma in zip(Psats, gammas)]
V_over_F, xs_new, ys_new = flash_inner_loop(zs, Ks)
err = (sum([abs(x_new - x_old) for x_new, x_old in zip(xs_new, xs)]) +
sum([abs(y_new - y_old) for y_new, y_old in zip(ys_new, ys)]))
xs, ys = xs_new, ys_new
if err < 1E-11:
break
return V_over_F, xs, ys
def flash_UNIFAC_sequential_substitution(T, P, zs, Psats, chemgroups):
gammas = UNIFAC(chemgroups=chemgroups, T=T, xs=zs)
Ks = [K_value(P=P, Psat=Psat, gamma=gamma) for Psat, gamma in zip(Psats, gammas)]
V_over_F, xs, ys = flash_inner_loop(zs, Ks)
for i in range(100):
gammas = UNIFAC(chemgroups=chemgroups, T=T, xs=xs)
Ks = [K_value(P=P, Psat=Psat, gamma=gamma) for Psat, gamma in zip(Psats, gammas)]
V_over_F, xs_new, ys_new = flash_inner_loop(zs, Ks)
err = (sum([abs(x_new - x_old) for x_new, x_old in zip(xs_new, xs)]) +
sum([abs(y_new - y_old) for y_new, y_old in zip(ys_new, ys)]))
xs, ys = xs_new, ys_new
if err < 1E-11:
break
return V_over_F, xs, ys
def _P_VF_err(self, T, P, VF, zs):
Psats = self._Psats(T)
Ks = [K_value(P=P, Psat=Psat) for Psat in Psats]
return flash_inner_loop(zs=zs, Ks=Ks)[0] - VF
def _flash_sequential_substitution_TP(self, T, P, zs, Psats=None, restart=None):
Psats = self._Psats(Psats=Psats, T=T)
if self.retention and restart:
V_over_F, xs, ys = restart
else:
Ks = self.Ks(T, P, zs, zs, Psats)
V_over_F, xs, ys = flash_inner_loop(zs, Ks)
for i in range(100):
if any(i < 0 for i in xs):
xs = zs
if any(i < 0 for i in ys):
ys = zs
Ks = self.Ks(T, P, xs, ys, Psats)
V_over_F, xs_new, ys_new = flash_inner_loop(zs, Ks)
err = (sum([abs(x_new - x_old) for x_new, x_old in zip(xs_new, xs)]) +
sum([abs(y_new - y_old) for y_new, y_old in zip(ys_new, ys)]))
xs, ys = xs_new, ys_new
if err < 1E-7:
break
return V_over_F, xs, ys
def flash_TP_zs(self, T, P, zs):
Psats = self._Psats(T)
if self.N == 1:
Pdew = Pbubble = Psats[0]
else:
Pdew = dew_at_T(zs, Psats)
Pbubble = bubble_at_T(zs, Psats)
if P <= Pdew:
# phase, ys, xs, quality - works for 1 comps too
return 'g', None, zs, 1
elif P >= Pbubble:
return 'l', zs, None, 0
else:
Ks = [K_value(P=P, Psat=Psat) for Psat in Psats]
V_over_F, xs, ys = flash_inner_loop(zs=zs, Ks=Ks)
return 'l/g', xs, ys, V_over_F
def _flash_sequential_substitution_TP(self, T, P, zs, Psats=None, restart=None):
Psats = self._Psats(Psats=Psats, T=T)
if self.retention and restart:
V_over_F, xs, ys = restart
else:
Ks = self.Ks(T, P, zs, zs, Psats)
V_over_F, xs, ys = flash_inner_loop(zs, Ks)
for i in range(100):
if any(i < 0 for i in xs):
xs = zs
if any(i < 0 for i in ys):
ys = zs
Ks = self.Ks(T, P, xs, ys, Psats)
V_over_F, xs_new, ys_new = flash_inner_loop(zs, Ks)
err = (sum([abs(x_new - x_old) for x_new, x_old in zip(xs_new, xs)]) +
sum([abs(y_new - y_old) for y_new, y_old in zip(ys_new, ys)]))
xs, ys = xs_new, ys_new
if err < 1E-7:
break
return V_over_F, xs, ys
def _T_VF_err(self, P, VF, zs, Psats):
Ks = [K_value(P=P, Psat=Psat) for Psat in Psats]
return flash_inner_loop(zs=zs, Ks=Ks)[0] - VF
def flash_TVF_zs(self, T, VF, zs):
assert 0 <= VF <= 1
Psats = self._Psats(T)
# handle one component
if self.N == 1:
return 'l/g', [1.0], [1.0], VF, Psats[0]
if VF == 0:
P = bubble_at_T(zs, Psats)
elif VF == 1:
P = dew_at_T(zs, Psats)
else:
P = brenth(self._T_VF_err, min(Psats)*(1+1E-7), max(Psats)*(1-1E-7), args=(VF, zs, Psats))
Ks = [K_value(P=P, Psat=Psat) for Psat in Psats]
V_over_F, xs, ys = flash_inner_loop(zs=zs, Ks=Ks)
return 'l/g', xs, ys, V_over_F, P