Abstract residual Helmholtz model.
This derived type defines the basics needed for the calculation
of residual properties.
The basics of a residual Helmholtz model is a routine that calculates
all the needed derivatives of
residual_helmholtz and
a volume initializer function, that is used to initialize a Newton
solver of volume when specifying pressure.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| type(Substances), | public | :: | components |
Substances contained in the module |
|||
| character(len=:), | public, | allocatable | :: | name |
Name of the model |
Calculate residual heat capacity at constant pressure given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Cp |
Residual heat capacity at constant pressure [bar L K^-1] |
Calculate residual heat capacity pressure constant given V and T.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out) | :: | Cp |
heat capacity P constant [bar L / K] |
Calculate residual heat capacity at constant volume given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Cv |
Residual heat capacity at constant volume [bar L K^-1] |
Calculate residual heat capacity volume constant given V and T.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out) | :: | Cv |
heat capacity V constant [bar L / K] |
Calculation of saturation pressure of a pure component using the secant method.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model that will be used |
||
| integer, | intent(in) | :: | ncomp |
Number of component in the mixture from which the saturation pressure will be calculated |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
Calculate excess enthalpy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | He |
Excess enthalpy [bar L] |
Calculate residual enthalpy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Hr |
Residual enthalpy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | HrP |
|
|
| real(kind=pr), | intent(out), | optional | :: | HrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Hrn(size(n)) |
|
Calculate residual enthalpy given volume and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | Hr |
Residual enthalpy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | HrV |
|
|
| real(kind=pr), | intent(out), | optional | :: | HrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Hrn(size(n)) |
|
Calculate excess entropy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Se |
Excess entropy [bar L K^-1] |
Calculate residual entropy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Sr |
Residual entropy [bar L K^-1] |
|
| real(kind=pr), | intent(out), | optional | :: | SrP |
|
|
| real(kind=pr), | intent(out), | optional | :: | SrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Srn(size(n)) |
|
Calculate residual entropy given volume and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | Sr |
Entropy [bar L / K] |
|
| real(kind=pr), | intent(out), | optional | :: | SrV |
|
|
| real(kind=pr), | intent(out), | optional | :: | SrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Srn(size(n)) |
|
Function that provides an initializer value for the liquid-root
of newton solver of volume. In the case the model will use the
volume_michelsen routine this value should provide the co-volume
of the model.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | self |
Ar Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles vector |
||
| real(kind=pr), | intent(in) | :: | p |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | t |
Temperature [K] |
Initial volume [L]
Calculate excess Gibbs energy and its derivatives given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Ge |
Excess Gibbs energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | GeP |
|
|
| real(kind=pr), | intent(out), | optional | :: | GeT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Gen(size(n)) |
|
Calculate residual Gibbs energy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Gr |
Residual Gibbs energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | GrP |
|
|
| real(kind=pr), | intent(out), | optional | :: | GrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Grn(size(n)) |
|
Calculate residual Gibbs energy given volume and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | Gr |
Gibbs energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | GrV |
|
|
| real(kind=pr), | intent(out), | optional | :: | GrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Grn(size(n)) |
|
Calculate excess Helmholtz energy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Ae |
Excess Helmholtz energy [bar L] |
Calculate residual Helmholtz energy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Ar |
Residual Helmholtz energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | ArP |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Arn(size(n)) |
|
Calculate excess internal energy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Ue |
Excess internal energy [bar L] |
Calculate residual internal energy given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | Ur |
Residual internal energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | UrP |
|
|
| real(kind=pr), | intent(out), | optional | :: | UrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Urn(size(n)) |
|
Calculate residual internal energy given volume and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | Ur |
Internal energy [bar L] |
|
| real(kind=pr), | intent(out), | optional | :: | UrV |
|
|
| real(kind=pr), | intent(out), | optional | :: | UrT |
|
|
| real(kind=pr), | intent(out), | optional | :: | Urn(size(n)) |
|
Calculate natural logarithm of activity coefficients and its derivatives given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out), | optional | :: | lngamma(size(n)) |
Natural logarithm of activity coefficient |
|
| real(kind=pr), | intent(out), | optional | :: | dlngammadP(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | dlngammadT(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | dlngammadn(size(n),size(n)) |
|
Calculate natural logarithm of fugacity given volume and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel) | :: | eos |
Model |
|||
| real(kind=pr), | intent(in) | :: | n(:) |
Mixture mole numbers |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | P |
Pressure [bar] |
|
| real(kind=pr), | intent(out), | optional | :: | lnf(size(n)) |
vector |
|
| real(kind=pr), | intent(out), | optional | :: | dlnfdV(size(n)) |
Volume derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnfdT(size(n)) |
Temp derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnfdn(size(n),size(n)) |
compositional derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dPdV |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdT |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdn(:) |
|
Calculate natural logarithm of fugacity given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Mixture mole numbers |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | V |
Volume [L] |
|
| character(len=*), | intent(in) | :: | root_type |
Type of root desired [“liquid”, “vapor”, “stable”] |
||
| real(kind=pr), | intent(out), | optional | :: | lnPhi(size(n)) |
vector |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidP(size(n)) |
ln(phi) Presssure derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidT(size(n)) |
ln(phi) Temperature derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidn(size(n),size(n)) |
ln(phi) compositional derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dPdV |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdT |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdn(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | lnPhiP(:) |
. It is useful to calculate fugacity coefficients at negatives pressures. |
Calculate natural logarithm of fugacity coefficent.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel) | :: | eos |
Model |
|||
| real(kind=pr), | intent(in) | :: | n(:) |
Mixture mole numbers |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | P |
Pressure [bar] |
|
| real(kind=pr), | intent(out), | optional | :: | lnPhi(size(n)) |
vector |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidP(size(n)) |
Presssure derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidT(size(n)) |
Temp derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dlnPhidn(size(n),size(n)) |
compositional derivative |
|
| real(kind=pr), | intent(out), | optional | :: | dPdV |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdT |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdn(:) |
|
|
| real(kind=pr), | intent(out), | optional | :: | lnPhiP(:) |
. It is useful to calculate fugacity coefficients at negatives pressures. |
Calculate pressure.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | V |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(out), | optional | :: | dPdV |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdT |
|
|
| real(kind=pr), | intent(out), | optional | :: | dPdn(:) |
|
Residual Helmholtz model generic interface.
This interface represents how an Ar model should be implemented. By our standard, a Resiudal Helmholtz model takes as input:
All the output arguments are optional. While this keeps a long signature for the implementation, this is done this way to take advantage of any inner optimizations to calculate derivatives inside the procedure.
Once the model is implemented, the signature can be short like
model%residual_helmholtz(n, v, t, ArT2=dArdT2)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | self |
ArModel |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles vector |
||
| real(kind=pr), | intent(in) | :: | v |
Volume [L] |
||
| real(kind=pr), | intent(in) | :: | t |
Temperature [K] |
||
| real(kind=pr), | intent(out), | optional | :: | Ar |
Residual Helmoltz energy |
|
| real(kind=pr), | intent(out), | optional | :: | ArV |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArT |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArTV |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArV2 |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArT2 |
|
|
| real(kind=pr), | intent(out), | optional | :: | Arn(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArVn(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | ArTn(size(n)) |
|
|
| real(kind=pr), | intent(out), | optional | :: | Arn2(size(n),size(n)) |
|
Volume solver routine for residual Helmholtz models.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| real(kind=pr), | intent(out) | :: | V |
Volume [L] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
Calculate excess volume given pressure and temperature.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ArModel), | intent(in) | :: | eos |
Model |
||
| real(kind=pr), | intent(in) | :: | n(:) |
Moles number vector |
||
| real(kind=pr), | intent(in) | :: | P |
Pressure [bar] |
||
| real(kind=pr), | intent(in) | :: | T |
Temperature [K] |
||
| character(len=*), | intent(in) | :: | root_type |
Desired root-type to solve. Options are:
|
||
| real(kind=pr), | intent(out) | :: | Ve |
Excess volume [L] |