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
ReferenceSystemtrait to handle conversion between SI units and reduced units. #257 - Readded
Molarweighttrait to avoid extra implementation requirements for some models. #258
- Removed
simodule after the compile-time units are incorporated into thequantitycrate. #257
- Updated
quantitydependency to 0.10. #262 - Updated
num-dualdependency to 0.11. #262 - Updated
numpyandPyO3dependencies to 0.23. #262
- Added specific isochoric and isobaric heat capacities to the Python interface. #223)
- Added
to_dictmethod forPyStateVec. #224 - Added
State::henrys_law_constantto calculate Henry's law constants for arbitrary mixtures. #234
- Changed the interface for Helmholtz energy calculation in
ResidualandIdealGaswhich removes the need for theHelmholtzEnergyandHelmholtzEnergyDualtraits and trait objects. #226 - Adjusted Python macros to account for the removal of trait objects. #226
- Changed deprecated
removemethod ofIndexMaptoshift_remove. #226 - Added
contributionsargument toState::chemical_potential_contributionsand fixed the corresponding Python function. #228
- Removed
HelmholtzEnergyDual,HelmholzEnergy,DeBroglieWavelengthDualandDeBroglieWavelengthtraits. #226
- Added comparison for pressures of both phases in
PyPhaseDiagram.to_dictto make the method work withspinodalconstructor. #224 - Enforce the total moles when providing
State::newwith molefracs that do not add up to 1. #227
- Updated
quantitydependency to 0.8. #238 - Updated
num-dualdependency to 0.9. #238 - Updated
numpyandPyO3dependencies to 0.21. #238
- Improved convergence of
tp_flashfor certain edge cases. #219
- Added
EquationOfState::ideal_gasto initialize an equation of state that only consists of an ideal gas contribution. #204 - Added
NoBinaryModelRecordfor models that do not use binary interaction parameters. #211
- Made members of
JobackRecordpublic. #206
- Removed
JobackParametersandJobackBinaryRecord. #204 - Moved the remaining implementation of
Jobacktofeos. #204
- Aligned how binary segment records are treated in Rust and Python. #200
- 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 - Added
molar_weightmethod toResidualtrait. #177 - Added molar versions for entropy, enthalpy, etc. for residual properties. #177
- Python only: Added
SmartsRecordandChemicalRecord.from_smilesthat uses rdkit to calculate segments and bonds from a SMILES code. #191 - Python only: Added
from_smilesandfrom_json_smilesto parameter objects that build parameters from SMILES codes using rdkit. #191
- 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 - Renamed
c_vandc_ptoisochoric_heat_capacityandisobaric_heat_capacity, respectively, and added prefixes for molar and specific properties. #177 State.helmholtz_energy_contributionsin Python now accepts optionalContributions. #177- Changed
StateVecPython getters for entropy and enthalpy to functions that accept optionalContributions. #177 PhaseDiagram.to_dictin Python now accepts optionalContributionsand includes mass specific properties. #177- Replaced the run-time unit checks from the
quantitycrate with compile-time unit checks with custom implementations in the newfeos_core.simodule. #181 - Renamed the keyword argument
search_optiontoidentifier_optionin parameter constructors. #196
- 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
- Removed
MolarWeighttrait. #177
- 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
Parameter::from_multiple_jsonreturns the correct parameters if a component occurs in multiple input files. #196
- Updated
quantitydependency to 0.7. - Updated
num-dualdependency to 0.8. #137 - Updated
numpyandPyO3dependencies to 0.20.
- 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