yaeos__models_ge_group_contribution_unifac Module

UNIFAC module

Classic liquid-vapor UNIFAC model implementation module.

Description

Classic liquid-vapor UNIFAC model implementation module. The implementation is based on the Thermopack library (SINTEF) implementation.

Examples

 ! Instantiate an UNIFAC model with ethanol-water mix and calculate gammas
 use yaeos, only: pr, Groups, setup_unifac, UNIFAC

 type(UNIFAC) :: model
 type(Groups) :: molecules(2)
 real(pr) :: ln_gammas(2)

 ! Ethanol definition [CH3, CH2, OH]
 molecules(1)%groups_ids = [1, 2, 14] ! Subgroups ids
 molecules(1)%number_of_groups = [1, 1, 1] ! Subgroups occurrences

 ! Water definition [H2O]
 molecules(2)%groups_ids = [16]
 molecules(2)%number_of_groups = [1]

 ! Model setup
 model = setup_unifac(molecules)

 ! Calculate ln_gammas
 call model%ln_activity_coefficient([0.5_pr, 0.5_pr], 298.0_pr, ln_gammas)

 print *, ln_gammas ! result: 0.18534142000449058    0.40331395945417559

References

  1. Dortmund Data Bank Software & Separation Technology
  2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). Group‐contribution estimation of activity coefficients in nonideal liquid mixtures. AIChE Journal, 21(6), 1086–1099. https://doi.org/10.1002/aic.690210607
  3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and Extension. Industrial & Engineering Chemistry Process Design and Development, 18(4), 714–722. https://doi.org/10.1021/i260072a024
  4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid equilibriums by UNIFAC group contribution. Revision and extension. 2. Industrial & Engineering Chemistry Process Design and Development, 21(1), 118–127. https://doi.org/10.1021/i200016a021
  5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). Vapor-liquid equilibriums by UNIFAC group contribution. Revision and extension. 3. Industrial & Engineering Chemistry Process Design and Development, 22(4), 676–678. https://doi.org/10.1021/i200023a023
  6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. https://doi.org/10.1021/ie00061a030
  7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group contribution. 5. Revision and extension. Industrial & Engineering Chemistry Research, 30 (10), 2352–2355. https://doi.org/10.1021/ie00058a017
  8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & Engineering Chemistry Research, 42(1), 183–188. https://doi.org/10.1021/ie020506l
  9. SINTEF - Thermopack


Derived Types

type, public, extends(GeModel) ::  UNIFAC

Classic liquid-vapor UNIFAC model derived type

Read more…

Components

Type Visibility Attributes Name Initial
type(Substances), public :: components

Substances contained in the module

real(kind=pr), public, allocatable :: group_area(:)

Group areas

real(kind=pr), public, allocatable :: group_volume(:)

Group volumes

type(Groups), public :: groups_stew

All the groups present in the system

type(Groups), public, allocatable :: molecules(:)

Substances present in the system

integer, public :: ngroups

Total number of individual groups in the mixture

integer, public :: nmolecules

Total number of molecules in the mixture

class(PsiFunction), public, allocatable :: psi_function

Temperature dependance function of the model

real(kind=pr), public, allocatable :: qk(:)

Area of each group k

real(kind=pr), public, allocatable :: thetas_ij(:,:)

Area fractions of the groups j on molecules i

real(kind=pr), public, allocatable :: vij(:,:)

Ocurrences of each group j on each molecule i

real(kind=pr), public :: z = 10

Model constant

Type-Bound Procedures

procedure, public :: excess_gibbs
procedure, public :: ln_activity_coefficient

Functions

public function setup_unifac(molecules, parameters)

Instantiate a UNIFAC model

Read more…

Arguments

Type IntentOptional Attributes Name
type(Groups), intent(in) :: molecules(:)

Molecules (Group type) objects

type(GeGCModelParameters), intent(in), optional :: parameters

UNIFAC parameters

Return Value type(UNIFAC)

public function thetas_i(nm, ng, parameters, stew, molecules) result(thetas_ij)

Calculate the area fraciton of each froup on each molecule.

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nm

Number of molecules

integer, intent(in) :: ng

Number of groups

type(GeGCModelParameters), intent(in) :: parameters

UNIFAC parameters

type(Groups), intent(in) :: stew

All the groups present in the system

type(Groups), intent(in) :: molecules(:)

Molecules

Return Value real(kind=pr), (nm,ng)

Group j area fraction on molecule i


Subroutines

public subroutine Ge_combinatorial(self, n, T, Ge, dGe_dn, dGe_dn2)

Calculate the UNIFAC combinatorial term of Gibbs excess energy

Read more…

Arguments

Type IntentOptional Attributes Name
class(UNIFAC) :: self
real(kind=pr), intent(in) :: n(self%nmolecules)

Moles vector [mol]

real(kind=pr), intent(in) :: T

Temperature [K]

real(kind=pr), intent(out), optional :: Ge

Combinatorial Gibbs excess energy

real(kind=pr), intent(out), optional :: dGe_dn(self%nmolecules)

real(kind=pr), intent(out), optional :: dGe_dn2(self%nmolecules,self%nmolecules)

public subroutine Ge_residual(self, n, T, Ge, dGe_dn, dGe_dn2, dGe_dT, dGe_dT2, dGe_dTn)

Evaluate the UNIFAC residual therm

Read more…

Arguments

Type IntentOptional Attributes Name
class(UNIFAC) :: self
real(kind=pr), intent(in) :: n(self%nmolecules)

Moles vector

real(kind=pr), intent(in) :: T

Temperature [K]

real(kind=pr), intent(out), optional :: Ge

Residual Gibbs excess energy

real(kind=pr), intent(out), optional :: dGe_dn(self%nmolecules)

real(kind=pr), intent(out), optional :: dGe_dn2(self%nmolecules,self%nmolecules)

real(kind=pr), intent(out), optional :: dGe_dT

real(kind=pr), intent(out), optional :: dGe_dT2

real(kind=pr), intent(out), optional :: dGe_dTn(self%nmolecules)

public subroutine excess_gibbs(self, n, T, Ge, GeT, GeT2, Gen, GeTn, Gen2)

Calculate the Gibbs excess energy of the UNIFAC model

Read more…

Arguments

Type IntentOptional Attributes Name
class(UNIFAC), intent(in) :: self

UNIFAC model

real(kind=pr), intent(in) :: n(:)

Moles vector [mol]

real(kind=pr), intent(in) :: T

Temperature [K]

real(kind=pr), intent(out), optional :: Ge

Excess Gibbs energy

real(kind=pr), intent(out), optional :: GeT

real(kind=pr), intent(out), optional :: GeT2

real(kind=pr), intent(out), optional :: Gen(size(n))

real(kind=pr), intent(out), optional :: GeTn(size(n))

real(kind=pr), intent(out), optional :: Gen2(size(n),size(n))