Source code for sandlercubics.vanderwaals
# Author: Cameron F. Abrams, <cfa22@drexel.edu>
from .eos import CubicEOS
from dataclasses import dataclass
import numpy as np
import logging
from sandlermisc import ureg, R
logger = logging.getLogger(__name__)
[docs]
@dataclass
class VanDerWaalsEOS(CubicEOS):
"""
Generalized van der Waals equation of state, in which 'a' and 'b'
are calculated from critical constants
"""
name: str = "Van der Waals Equation of State"
description: str = "Van der Waals Equation of State"
def _calc_a(self):
"""
Calculates parameter a for Van der Waals EOS
"""
return (27 / 64) * R**2 * self.Tc**2 / self.Pc
def _calc_da_dT(self) -> float:
return 0.0
def _calc_b(self):
"""
Calculates parameter b for Van der Waals EOS
"""
return R * self.Tc / (8 * self.Pc)
def _calc_P(self):
"""
Calculates pressure from Van der Waals EOS
"""
v = self.v
a = self.a
b = self.b
T = self.T
return R * T / (v - b) - a / v**2
@property
def cubic_coeff(self):
"""
cubic coefficients for Van der Waals EOS
"""
A, B = self.A, self.B
return np.array([1.0, -1.0 - B, A, -A * B])
def _calc_h_departure(self) -> np.ndarray:
"""
Enthalpy departure for Van der Waals EOS
"""
return R * self.T * (self.Z - 1 - self.A * np.reciprocal(self.Z))
def _calc_s_departure(self) -> np.ndarray:
"""
Entropy departure for Van der Waals EOS
"""
return R * (np.log(self.Z - self.B) - self.A / self.Z)
def _calc_logphi(self) -> np.ndarray:
"""
natural log of fugacity coefficient for Van der Waals EOS
"""
return self.Z - 1 - np.log(self.Z - self.B) - self.A / self.Z