pub struct PhaseEquilibrium<E, const P: usize, N: Dim = Dyn, D: DualNum<f64> + Copy = f64>where
DefaultAllocator: Allocator<N>,{
pub states: [State<E, N, D>; P],
pub phase_fractions: [D; P],
/* private fields */
}Expand description
A thermodynamic equilibrium state.
The struct is parametrized over the number of phases with most features being implemented for the two phase vapor/liquid or liquid/liquid case.
§Contents
Fields§
§states: [State<E, N, D>; P]§phase_fractions: [D; P]Implementations§
Source§impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
§Pure component phase equilibria
impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
§Pure component phase equilibria
Sourcepub fn pure<TP: TemperatureOrPressure<D>>(
eos: &E,
temperature_or_pressure: TP,
initial_state: Option<&Self>,
options: SolverOptions,
) -> FeosResult<Self>
pub fn pure<TP: TemperatureOrPressure<D>>( eos: &E, temperature_or_pressure: TP, initial_state: Option<&Self>, options: SolverOptions, ) -> FeosResult<Self>
Calculate a phase equilibrium for a pure component.
Sourcepub fn pure_t(
eos: &E,
temperature: Temperature<D>,
initial_state: Option<&Self>,
options: SolverOptions,
) -> FeosResult<(Pressure<D>, [Density<D>; 2])>
pub fn pure_t( eos: &E, temperature: Temperature<D>, initial_state: Option<&Self>, options: SolverOptions, ) -> FeosResult<(Pressure<D>, [Density<D>; 2])>
Calculate a phase equilibrium for a pure component and given temperature.
Source§impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
Sourcepub fn pure_p(
eos: &E,
pressure: Pressure<D>,
initial_state: Option<&Self>,
options: SolverOptions,
) -> FeosResult<(Temperature<D>, [Density<D>; 2])>
pub fn pure_p( eos: &E, pressure: Pressure<D>, initial_state: Option<&Self>, options: SolverOptions, ) -> FeosResult<(Temperature<D>, [Density<D>; 2])>
Calculate a phase equilibrium for a pure component and given pressure.
Source§impl<E: Residual + Subset> PhaseEquilibrium<E, 2>
impl<E: Residual + Subset> PhaseEquilibrium<E, 2>
Sourcepub fn vapor_pressure(
eos: &E,
temperature: Temperature,
) -> Vec<Option<Pressure>>
pub fn vapor_pressure( eos: &E, temperature: Temperature, ) -> Vec<Option<Pressure>>
Calculate the pure component vapor pressures of all components in the system for the given temperature.
Sourcepub fn boiling_temperature(
eos: &E,
pressure: Pressure,
) -> Vec<Option<Temperature>>
pub fn boiling_temperature( eos: &E, pressure: Pressure, ) -> Vec<Option<Temperature>>
Calculate the pure component boiling temperatures of all components in the system for the given pressure.
Sourcepub fn vle_pure_comps<TP: TemperatureOrPressure>(
eos: &E,
temperature_or_pressure: TP,
) -> Vec<Option<PhaseEquilibrium<E, 2>>>
pub fn vle_pure_comps<TP: TemperatureOrPressure>( eos: &E, temperature_or_pressure: TP, ) -> Vec<Option<PhaseEquilibrium<E, 2>>>
Calculate the pure component phase equilibria of all components in the system.
Source§impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
§Bubble and dew point calculations
impl<E: Residual<N, D>, N: Gradients, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>
§Bubble and dew point calculations
Sourcepub fn bubble_point<TP: TemperatureOrPressure<D>, X: Composition<D, N>>(
eos: &E,
temperature_or_pressure: TP,
liquid_molefracs: X,
tp_init: Option<TP::Other>,
vapor_molefracs: Option<&OVector<f64, N>>,
options: (SolverOptions, SolverOptions),
) -> FeosResult<Self>
pub fn bubble_point<TP: TemperatureOrPressure<D>, X: Composition<D, N>>( eos: &E, temperature_or_pressure: TP, liquid_molefracs: X, tp_init: Option<TP::Other>, vapor_molefracs: Option<&OVector<f64, N>>, options: (SolverOptions, SolverOptions), ) -> FeosResult<Self>
Calculate a phase equilibrium for a given temperature or pressure and composition of the liquid phase.
Sourcepub fn dew_point<TP: TemperatureOrPressure<D>, X: Composition<D, N>>(
eos: &E,
temperature_or_pressure: TP,
vapor_molefracs: X,
tp_init: Option<TP::Other>,
liquid_molefracs: Option<&OVector<f64, N>>,
options: (SolverOptions, SolverOptions),
) -> FeosResult<Self>
pub fn dew_point<TP: TemperatureOrPressure<D>, X: Composition<D, N>>( eos: &E, temperature_or_pressure: TP, vapor_molefracs: X, tp_init: Option<TP::Other>, liquid_molefracs: Option<&OVector<f64, N>>, options: (SolverOptions, SolverOptions), ) -> FeosResult<Self>
Calculate a phase equilibrium for a given temperature or pressure and composition of the vapor phase.
Source§impl<E: Residual<N>, N: Gradients> PhaseEquilibrium<E, 2, N>
§Flash calculations
impl<E: Residual<N>, N: Gradients> PhaseEquilibrium<E, 2, N>
§Flash calculations
Sourcepub fn tp_flash<X: Composition<f64, N>>(
eos: &E,
temperature: Temperature,
pressure: Pressure,
feed: X,
initial_state: Option<&PhaseEquilibrium<E, 2, N>>,
options: SolverOptions,
non_volatile_components: Option<Vec<usize>>,
) -> FeosResult<Self>
pub fn tp_flash<X: Composition<f64, N>>( eos: &E, temperature: Temperature, pressure: Pressure, feed: X, initial_state: Option<&PhaseEquilibrium<E, 2, N>>, options: SolverOptions, non_volatile_components: Option<Vec<usize>>, ) -> FeosResult<Self>
Perform a Tp-flash calculation. If no initial values are given, the solution is initialized using a stability analysis.
The algorithm can be use to calculate phase equilibria of systems containing non-volatile components (e.g. ions).
Source§impl<E: Residual<U2, D>, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, U2, D>
impl<E: Residual<U2, D>, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, U2, D>
Sourcepub fn tp_flash_binary<X: Composition<D, U2>>(
eos: &E,
temperature: Temperature<D>,
pressure: Pressure<D>,
feed: X,
options: SolverOptions,
) -> FeosResult<Self>
pub fn tp_flash_binary<X: Composition<D, U2>>( eos: &E, temperature: Temperature<D>, pressure: Pressure<D>, feed: X, options: SolverOptions, ) -> FeosResult<Self>
Perform a Tp-flash calculation for a binary mixture. Compared to the version of the algorithm for a generic number of components (tp_flash), this can be used in combination with automatic differentiation.
Source§impl<E: Total<N, D>, N: Gradients + DimAdd<U2> + DimAdd<U3>, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N> + Allocator<N, N> + Allocator<<N as DimAdd<U3>>::Output> + Allocator<U1, <N as DimAdd<U3>>::Output> + Allocator<<N as DimAdd<U3>>::Output, <N as DimAdd<U3>>::Output> + Allocator<<N as DimAdd<U2>>::Output> + Allocator<U1, <N as DimAdd<U2>>::Output> + Allocator<<N as DimAdd<U2>>::Output, <N as DimAdd<U2>>::Output>,
<N as DimAdd<U3>>::Output: Gradients,
<N as DimAdd<U2>>::Output: Gradients,
impl<E: Total<N, D>, N: Gradients + DimAdd<U2> + DimAdd<U3>, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N> + Allocator<N, N> + Allocator<<N as DimAdd<U3>>::Output> + Allocator<U1, <N as DimAdd<U3>>::Output> + Allocator<<N as DimAdd<U3>>::Output, <N as DimAdd<U3>>::Output> + Allocator<<N as DimAdd<U2>>::Output> + Allocator<U1, <N as DimAdd<U2>>::Output> + Allocator<<N as DimAdd<U2>>::Output, <N as DimAdd<U2>>::Output>,
<N as DimAdd<U3>>::Output: Gradients,
<N as DimAdd<U2>>::Output: Gradients,
Sourcepub fn ph_flash<X: Composition<D, N>>(
eos: &E,
pressure: Pressure<D>,
molar_enthalpy: MolarEnergy<D>,
feed: X,
initial_temperature: Temperature,
options: SolverOptions,
) -> FeosResult<Self>
pub fn ph_flash<X: Composition<D, N>>( eos: &E, pressure: Pressure<D>, molar_enthalpy: MolarEnergy<D>, feed: X, initial_temperature: Temperature, options: SolverOptions, ) -> FeosResult<Self>
Perform a ph-flash calculation. An initial temperature is required and the system needs to be in the two-phase region at that initial temperature.
based on Michelsen’s work State function based flash specifications
Sourcepub fn ps_flash<X: Composition<D, N>>(
eos: &E,
pressure: Pressure<D>,
molar_entropy: MolarEntropy<D>,
feed: X,
initial_temperature: Temperature,
options: SolverOptions,
) -> FeosResult<Self>
pub fn ps_flash<X: Composition<D, N>>( eos: &E, pressure: Pressure<D>, molar_entropy: MolarEntropy<D>, feed: X, initial_temperature: Temperature, options: SolverOptions, ) -> FeosResult<Self>
Perform a ps-flash calculation. An initial temperature is required and the system needs to be in the two-phase region at that initial temperature.
based on Michelsen’s work State function based flash specifications
Source§impl<E: Residual> PhaseEquilibrium<E, 3>
§Heteroazeotropes
impl<E: Residual> PhaseEquilibrium<E, 3>
§Heteroazeotropes
Sourcepub fn heteroazeotrope<TP: TemperatureOrPressure>(
eos: &E,
temperature_or_pressure: TP,
x_init: (f64, f64),
tp_init: Option<TP::Other>,
options: SolverOptions,
bubble_dew_options: (SolverOptions, SolverOptions),
) -> FeosResult<Self>
pub fn heteroazeotrope<TP: TemperatureOrPressure>( eos: &E, temperature_or_pressure: TP, x_init: (f64, f64), tp_init: Option<TP::Other>, options: SolverOptions, bubble_dew_options: (SolverOptions, SolverOptions), ) -> FeosResult<Self>
Calculate a heteroazeotrope (three phase equilbrium) for a binary system and given temperature or pressure.
Source§impl<E: Residual + Subset> PhaseEquilibrium<E, 2>
§Azeotrope detection
impl<E: Residual + Subset> PhaseEquilibrium<E, 2>
§Azeotrope detection
Sourcepub fn binary_azeotrope<TP: TemperatureOrPressure>(
eos: &E,
temperature_or_pressure: TP,
) -> FeosResult<Option<Self>>
pub fn binary_azeotrope<TP: TemperatureOrPressure>( eos: &E, temperature_or_pressure: TP, ) -> FeosResult<Option<Self>>
Calculate the azeotropic state in a binary system. If no azeotrope is
expected, the function returns None.
Source§impl<E: Residual, const P: usize> PhaseEquilibrium<E, P>
impl<E: Residual, const P: usize> PhaseEquilibrium<E, P>
pub fn _repr_markdown_(&self) -> String
Source§impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N>,
Source§impl<E> PhaseEquilibrium<E, 3>
impl<E> PhaseEquilibrium<E, 3>
Source§impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>where
DefaultAllocator: Allocator<N>,
Source§impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 3, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 3, N, D>where
DefaultAllocator: Allocator<N>,
Source§impl<E: Residual<N, D>, N: Gradients, const P: usize, D: DualNum<f64> + Copy> PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Residual<N, D>, N: Gradients, const P: usize, D: DualNum<f64> + Copy> PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
pub fn total_moles(&self) -> FeosResult<Moles<D>>
Source§impl<E: Total<N, D>, N: Gradients, const P: usize, D: DualNum<f64> + Copy> PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Total<N, D>, N: Gradients, const P: usize, D: DualNum<f64> + Copy> PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
pub fn molar_enthalpy(&self) -> MolarEnergy<D>
pub fn enthalpy(&self) -> FeosResult<Energy<D>>
pub fn molar_entropy(&self) -> MolarEntropy<D>
pub fn entropy(&self) -> FeosResult<Entropy<D>>
Source§impl<E: Residual<N>, N: Dim> PhaseEquilibrium<E, 2, N>where
DefaultAllocator: Allocator<N>,
§Utility functions
impl<E: Residual<N>, N: Dim> PhaseEquilibrium<E, 2, N>where
DefaultAllocator: Allocator<N>,
§Utility functions
Sourcepub fn is_trivial_solution(state1: &State<E, N>, state2: &State<E, N>) -> bool
pub fn is_trivial_solution(state1: &State<E, N>, state2: &State<E, N>) -> bool
Check if the two states form a trivial solution
Trait Implementations§
Source§impl<E: Clone, const P: usize, N: Clone + Dim, D: Clone + DualNum<f64> + Copy> Clone for PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
impl<E: Clone, const P: usize, N: Clone + Dim, D: Clone + DualNum<f64> + Copy> Clone for PhaseEquilibrium<E, P, N, D>where
DefaultAllocator: Allocator<N>,
Source§fn clone(&self) -> PhaseEquilibrium<E, P, N, D>
fn clone(&self) -> PhaseEquilibrium<E, P, N, D>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<E, const P: usize, N = Dyn, D = f64> !Freeze for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !RefUnwindSafe for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !Send for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !Sync for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !Unpin for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !UnsafeUnpin for PhaseEquilibrium<E, P, N, D>
impl<E, const P: usize, N = Dyn, D = f64> !UnwindSafe for PhaseEquilibrium<E, P, N, D>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.