Source code for pyrfume.physics
from math import exp
from math import log as ln
import quantities as pq
from sympy import Symbol
from sympy.solvers import solve
[docs]def mackay(vp):
"""Mackay, D., & van Wesenbeeck, I. (2014).
Correlation of Chemical Evaporation Rate with Vapor Pressure.
Environmental Science & Technology, 48(17), 10259–10263.
doi:10.1021/es5029074
Note typo in intercept parameter in Figure 1.
"""
# Units of Pascals
vp = vp.rescale(pq.Pa)
# Strip units for logarithm
vp /= vp.units
# # Evaporation rate
if vp > 0:
er = exp(1.0243 * ln(vp) - 15.08)
else:
er = 0
# Attach units
er *= pq.mol / (pq.m ** 2 * pq.s)
return er
[docs]def bernoulli(v=None, p=None, rho=None, g=9.8 * pq.m / (pq.s) ** 2, z=0, k=None):
g = float(g.simplified)
if v is None:
v = Symbol("v", real=True, positive=True)
else:
v = v.rescale(pq.m / pq.s)
v = float(v.simplified)
if p is None:
p = Symbol("p", real=True, positive=True)
else:
p = p.rescale(pq.Pa)
p = float(p.simplified)
if rho is None:
rho = Symbol("rho", real=True, positive=True)
else:
rho = rho.rescale(pq.kg / (pq.m ** 3))
rho = float(rho.simplified)
if k is None:
k = Symbol("k", real=True, positive=True)
else:
k = k.rescale((pq.m / pq.s) ** 2)
k = float(k.simplified)
result = solve((v ** 2) / 2 + g * z + p / rho - k, [v, p, rho], dict=True)
return result
[docs]def venturi(rho=None, p1=None, p2=None, v1=None, v2=None):
assert rho is not None
rho = rho.rescale(pq.kg / (pq.m ** 3))
rho = float(rho.simplified)
if v1 is None:
v1 = Symbol("v1", real=True, positive=True)
else:
v1 = v1.rescale(pq.m / pq.s)
v1 = float(v1.simplified)
if v2 is None:
v2 = Symbol("v2", real=True, positive=True)
else:
v2 = v2.rescale(pq.m / pq.s)
v2 = float(v2.simplified)
if p1 is None:
p1 = Symbol("p1", real=True, positive=True)
else:
p1 = p1.rescale(pq.Pa)
p1 = float(p1.simplified)
if p2 is None:
p2 = Symbol("p2", real=True, positive=True)
else:
p2 = p2.rescale(pq.Pa)
p2 = float(p2.simplified)
result = solve(rho * (v2 ** 2 - v1 ** 2) / 2 - p1 + p2, [v1, v2, p1, p2], dict=True)
return result
if __name__ == "__main__":
# print(bernoulli(None, 10*pq.psi, 1.225*pq.kg/(pq.m**3)))
print(
venturi(rho=1.225 * pq.kg / (pq.m ** 3), p1=10 * pq.psi, p2=1 * pq.psi, v1=10 * pq.m / pq.s)
)