Skip to main content

PhaseEquilibrium

Struct PhaseEquilibrium 

Source
pub struct PhaseEquilibrium<E, const P: usize, N: Dim = Dyn, D: DualNum<f64> + Copy = f64>{
    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

Source

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.

Source

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>

Source

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>

Source

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.

Source

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.

Source

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

Source

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.

Source

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

Source

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>

Source

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,

Source

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

Source

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

Source

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

Source

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>

Source

pub fn _repr_markdown_(&self) -> String

Source§

impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>

Source

pub fn vapor(&self) -> &State<E, N, D>

Source

pub fn liquid(&self) -> &State<E, N, D>

Source

pub fn vapor_phase_fraction(&self) -> D

Source§

impl<E> PhaseEquilibrium<E, 3>

Source

pub fn vapor(&self) -> &State<E>

Source

pub fn liquid1(&self) -> &State<E>

Source

pub fn liquid2(&self) -> &State<E>

Source§

impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 2, N, D>

Source

pub fn single_phase(state: State<E, N, D>) -> Self

Source

pub fn two_phase(vapor: State<E, N, D>, liquid: State<E, N, D>) -> Self

Source

pub fn with_vapor_phase_fraction( vapor: State<E, N, D>, liquid: State<E, N, D>, vapor_phase_fraction: D, total_moles: Option<Moles<D>>, ) -> Self

Source§

impl<E: Residual<N, D>, N: Dim, D: DualNum<f64> + Copy> PhaseEquilibrium<E, 3, N, D>

Source

pub fn new( vapor: State<E, N, D>, liquid1: State<E, N, D>, liquid2: State<E, N, D>, ) -> Self

Source§

impl<E: Residual<N, D>, N: Gradients, const P: usize, D: DualNum<f64> + Copy> PhaseEquilibrium<E, P, N, D>

Source

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>

Source

pub fn molar_enthalpy(&self) -> MolarEnergy<D>

Source

pub fn enthalpy(&self) -> FeosResult<Energy<D>>

Source

pub fn molar_entropy(&self) -> MolarEntropy<D>

Source

pub fn entropy(&self) -> FeosResult<Entropy<D>>

Source§

impl<E: Residual<N>, N: Dim> PhaseEquilibrium<E, 2, N>

§Utility functions

Source

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>

Source§

fn clone(&self) -> PhaseEquilibrium<E, P, N, D>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<E: Debug, const P: usize, N: Debug + Dim, D: Debug + DualNum<f64> + Copy> Debug for PhaseEquilibrium<E, P, N, D>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<E: Residual<N>, N: Dim, const P: usize> Display for PhaseEquilibrium<E, P, N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto 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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.