All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added new functions
isenthalpic_compressibility,thermal_expansivityandgrueneisen_parametertoState. #154 - Readded
PhaseEquilibrium::new_nptto the public interface in Rust and Python. #164 - Added
Components,Residual,IdealGasandDeBroglieWavelengthtraits to decouple ideal gas models from residual models. #158 - Added
JobackParametersstruct that implementsParametersincluding Python bindings. #158 - Added
Parameter::from_model_recordsas a simpler interface to generate parameters. #169 - Added optional
Phaseargument for constructors of dynamic properties ofDataSets. #174
- Changed constructors of
Parametertrait to returnResults. #161 - Changed
EquationOfStatefrom a trait to astructthat is generic overResidualandIdealGasand implements all necessary traits to be used as equation of state including the ideal gas contribution. #158 - The
Parametertrait no longer has an associated typeIdealGas. #158 - Split properties of
Stateinto those that require theResidualtrait (residual_properties.rs) and those that require bothResidual + IdealGas(properties.rs). #158 - State creation routines are split into those that can be used with
Residualand those that requireResidual + IdealGas. #158 Contributionsenum no longer includes theResidualNptvariant.ResidualNvtvariant is renamed toResidual. #158- Moved
VerbosityandSolverOptionfromphase_equilibriamodule tolib.rs. #158 - Moved
StateVecinto own file and module. #158 - Ideal gas and residual Helmholtz energy models can now be separately implemented in Python via the
PyIdealGasandPyResidualstructs. #158 - Bubble and dew point iterations will not attempt a second iteration if no solution is found for the given initial pressure. #166
- Made the binary records in the constructions and getters of the
Parametertrait optional. #169 - Changed the second argument of
new_binaryin Python from aBinaryRecordto the corresponding binary model record (analogous to the Rust implementation). #169
- Removed
EquationOfStatetrait. #158 - Removed ideal gas dependencies from
PureRecordandSegmentRecord. #158 - Removed Python getter and setter functions and optional arguments for ideal gas records in macros. #158
- The vapor and liquid states in a bubble or dew point iteration are assigned correctly according to the inputs, rather than based on the mole density which can be incorrect for mixtures with large differences in molar weights. #166
- Updated
num-dualdependency to 0.7. #137
- Fixed a wrong reference state in the implementation of the Peng-Robinson equation of state. #151
- Fixed a bug that caused the bubble and dew point solvers to ignore the initial values for the opposing phase given by the user if no initial value for temperature/pressure was also given. #138
- Added
PhaseDiagram::par_purethat uses rayon to calculate phase diagrams in parallel. #57 - Added
StateVec::molesgetter. #113 - Added public constructors
PhaseDiagram::newandStateVec::newthat allow the creation of the respective structs from a list ofPhaseEquilibriums orStates in Rust and Python. #113 - Added new variant
EosError::Errorwhich allows dispatching generic errors that are not covered by the existing variants. #98 - Added
binary_recordsgetter for parameter classes in Python. #104 - Added
BinaryRecord::from_jsonandBinarySegmentRecord::from_jsonthat read a list of records from a file. #104
- Added
SyncandSendas supertraits toEquationOfState. #57 - Added
Dual2_64dual number toHelmholtzEnergytrait to facilitate efficient non-mixed second order derivatives. #94 - Renamed
PartialDerivative::SecondtoPartialDerivative::SecondMixed. #94 - Added
PartialDerivative::Secondto enable non-mixed second order partial derivatives. #94 - Changed
dp_dv_andds_dt_to useDual2_64instead ofHyperDual64. #94 - Added
get_or_insert_with_d2_64toCache. #94 - The critical point algorithm now uses vector dual numbers to reduce the number of model evaluations and computation times. #96
- Renamed
State::molar_volumetoState::partial_molar_volumeandState::ln_phi_puretoState::ln_phi_pure_liquid. #107 - Added a const generic parameter to
PhaseDiagramthat accounts for the number of phases analogously toPhaseEquilibrium. #113 - Removed generics for units in all structs and traits in favor of static SI units. #115
- Automatically generate all required data types to calculate higher order derivatives for equations of state implemented in Python. #114
- Updated
pyo3andnumpydependencies to 0.18. #119 - Updated
quantitydependency to 0.6. #119 - Updated
num-dualdependency to 0.6. #119
Parameter::from_segmentsonly calculates binary interaction parameters for unlike molecules. #104
- Added
State::spinodalthat calculates both spinodal points for a given temperature and composition using the same objective function that is also used in the critical point calculation. #23 - Added
PhaseDiagram::bubble_point_line,PhaseDiagram::dew_point_line, andPhaseDiagram::spinodalto calculate phase envelopes for mixtures with fixed compositions. #23
- Made binary parameters in
from_recordsPython routine anOption. #35 - Added panic with message when parsing missing Identifiers variants. #35
- Generalized the initialization routines for pure component VLEs at given temperature to multicomponent systems. #23
- Increased the default number of maximum iterations for binary critical point calculations from 50 to 200. #48
- Removed the (internal)
SpinodalPointstruct that was used within density iterations in favor of a simpler interface. #23
- Avoid panicking when calculating
ResidualNptproperties of states with negative pressures. #42
- Added
pure_recordsgetter in theimpl_parametermacro. #54 - Implemented
DerefandIntoIteratorforStateVecfor additional vector functionalities of theStateVec. #55 - Added
StateVec.__len__andStateVec.__getitem__to allow indexing and iterating overStateVecs in Python. #55 - Added
SegmentCounttrait that allows the construction of parameter sets from arbitrary chemical records. #56 - Added
ParameterHeterotrait to generically provide utility functions for parameter sets of heterosegmented Helmholtz energy models. #56
- Changed datatype for binary parameters in interfaces of the
from_recordsandnew_binarymethods for parameters to take either numpy arrays off64or a list ofBinaryRecordas input. #54 - Modified
PhaseDiagram.to_dictfunction in Python to account for pure components and mixtures. #55 - Changed
StateVecto a tuple struct. #55 - Made
casfield ofIdentifieroptional. #56 - Added type parameter to
FromSegmentsand made itsfrom_segmentsfunction fallible for more control over model limitations. #56 - Reverted
ChemicalRecordback to a struct that only contains the structural information (and not segment and bond counts). #56 - Made
IdentifierOptiondirectly usable in Python usingPyO3's new#[pyclass]for fieldless enums feature. #58
- Added conversions between
ParameterErrorandEosErrorto improve the error messages in some cases. #40 - Added new struct
StateVec, that gives easy access to properties of lists of states, e.g. in phase diagrams. #48 - Added
ln_symmetric_activity_coefficientandln_phi_pureto the list of state properties that can be calculated. #50
- Removed
StatefromEntropyScalingtrait and adjusted associated methods to use temperature, volume and moles instead of state. #36 - Replaced the outer loop iterations for the critical point of binary systems with dedicated algorithms. #34
- Renamed
VLEOptionstoSolverOptions. #38 - Renamed methods of
StateBuilderand the parameters in theStateconstructor in python tomolar_enthalpy,molar_entropy, andmolar_internal_energy. #35 - Removed
PyContributionsandPyVerbosityin favor of a simpler implementation usingPyO3's new#[pyclass]for fieldless enums feature. #41 - Renamed
Contributions::ResidualtoContributions::ResidualNvtandContributions::ResidualPtoContributions::ResidualNpt. #43 - Renamed macro
impl_vle_state!toimpl_phase_equilibrium!. #48 - Removed
_tand_pfunctions in favor of simpler interfaces. The kind of specification (temperature or pressure) is determined from the unit of the argument. #48PhaseEquilibrium::pure_t,PhaseEquilibrium::pure_p->PhaseEquilibrium::purePhaseEquilibrium::vle_pure_comps_t,PhaseEquilibrium::vle_pure_comps_p->PhaseEquilibrium::vle_pure_comps
ThePhaseEquilibriareturned by this function now have the same number of components as the (mixture) eos, that it is called with.PhaseEquilibrium::bubble_point_tx,PhaseEquilibrium::bubble_point_px->PhaseEquilibrium::bubble_pointPhaseEquilibrium::dew_point_tx,PhaseEquilibrium::dew_point_px->PhaseEquilibrium::dew_pointPhaseEquilibrium::heteroazeotrope_t,PhaseEquilibrium::heteroazeotrope_p->PhaseEquilibrium::heteroazeotropeState::critical_point_binary_t,State::critical_point_binary_p->State::crititcal_point_binary
- Combined
PhaseDiagramPureandPhaseDiagramBinaryinto a single structPhaseDiagramand renamed its constructors. Properties of the phase diagram are available from thevaporandliquidgetters, that returnStateVecs. #48PhaseDiagramPure::new->PhaseDiagram::purePhaseDiagramBinary::new_txy,PhaseDiagramBinary::new_pxy->PhaseDiagram::binary_vlePhaseDiagramBinary::new_txy_lle,PhaseDiagramBinary::new_pxy_lle->PhaseDiagram::llePhaseDiagramHetero::new_txy,PhaseDiagramHetero::new_pxy->PhaseDiagram::binary_vlle
which still returns an instance ofPhaseDiagramHetero
- Changed the internal implementation of the Peng-Robinson equation of state to use contributions like the more complex equations of state and removed the suggestion to overwrite the
evaluate_residualfunction ofEquationOfState. #51 - Moved the creation of the python module to the
build_wheelauxilliary crate, so that only the relevant structs and macros are available for the dependents. #47
- Removed the
utilsmodule containingDataSetandEstimatorin favor of a separate crate. #47
- Updated
pyo3andnumpydependencies to 0.16. - Updated
num-dualdependency to 0.5. - Updated
quantitydependency to 0.5.
- Fixed bug in
predictofEstimator. #30
- Add
pyproject.toml. #29
- Fix state constructor for
T,p,V,x_ispecification. #26
- Added method
predicttoEstimator. #27
- Changed method for vapor pressure in
DataSettovapor_pressure(waspressureof VLE liquid phase). #27
- Added the following properties to
State: #21dp_drhopartial derivative of pressure w.r.t. densityd2p_drho2second partial derivative of pressure w.r.t. densityisothermal_compressibilitythe isothermal compressibility
- Read a list of segment records directly from a JSON file. #22
- Changed
ChemicalRecordto an enum that can hold either the full structural information of a molecule or only segment and bond counts and added anIdentifier. #19 - Removed the
chemical_recordfield fromPureRecordand mademodel_recordnon-optional. #19
- Added
from_multiple_jsonfunction toParametertrait that is able to read parameters from separate JSON files. #15
- Updated
pyo3andnumpydependencies to 0.15. - Updated
quantitydependency to 0.4. - Updated
num-dualdependency to 0.4. - Removed
ndarray-linalgandndarray-statsdependencies. - Removed obsolete features for the selection of the BLAS/LAPACK library.
- Initial release