Cantera / enhancements

Repository for proposed and ongoing enhancements to Cantera
11 stars 5 forks source link

Implement an interface to the CoolProp library #35

Open bryanwweber opened 4 years ago

bryanwweber commented 4 years ago

Idea

Cantera currently provides equations of state for a limited number of pure substances covering the liquid/vapor/supercritical regions. The goal of this project would be to introduce a new class to wrap the CoolProp library and provide access to its large range of equations of state within Cantera.

Difficulty

Medium

Required Knowledge

C++

Mentors

@decaluwe

References

ischoegl commented 4 years ago

FWIW, here's a list of substances currently included

In [1]: import CoolProp.CoolProp as cp

In [2]: list = cp.FluidsList()
   ...: len(cp.FluidsList())
Out[2]: 123

In [3]: while len(list):
   ...:     print(', '.join(list[:10]) + [‘ ’])
   ...:     list = list[10:]
   ...:     
1-Butene, Acetone, Air, Ammonia, Argon, Benzene, CarbonDioxide, CarbonMonoxide, CarbonylSulfide, CycloHexane,  
CycloPropane, Cyclopentane, D4, D5, D6, Deuterium, Dichloroethane, DiethylEther, DimethylCarbonate, DimethylEther,  
Ethane, Ethanol, EthylBenzene, Ethylene, EthyleneOxide, Fluorine, HFE143m, HeavyWater, Helium, Hydrogen,  
HydrogenChloride, HydrogenSulfide, IsoButane, IsoButene, Isohexane, Isopentane, Krypton, MD2M, MD3M, MD4M,  
MDM, MM, Methane, Methanol, MethylLinoleate, MethylLinolenate, MethylOleate, MethylPalmitate, MethylStearate, Neon,  
Neopentane, Nitrogen, NitrousOxide, Novec649, OrthoDeuterium, OrthoHydrogen, Oxygen, ParaDeuterium, ParaHydrogen, Propylene,  
Propyne, R11, R113, R114, R115, R116, R12, R123, R1233zd(E), R1234yf,  
R1234ze(E), R1234ze(Z), R124, R1243zf, R125, R13, R134a, R13I1, R14, R141b,  
R142b, R143a, R152A, R161, R21, R218, R22, R227EA, R23, R236EA,  
R236FA, R245ca, R245fa, R32, R365MFC, R40, R404A, R407C, R41, R410A,  
R507A, RC318, SES36, SulfurDioxide, SulfurHexafluoride, Toluene, Water, Xenon, cis-2-Butene, m-Xylene,  
n-Butane, n-Decane, n-Dodecane, n-Heptane, n-Hexane, n-Nonane, n-Octane, n-Pentane, n-Propane, n-Undecane,  
o-Xylene, p-Xylene, trans-2-Butene,
ischoegl commented 4 years ago

One additional comment is that it would probably make sense to wrap CoolProp into a generic SpeciesThermo object, and build a light-weight SingleSpecies thermo object around it (I.e. a PureFluid), which is different from the current tpx approach (and the incomplete implementation of the IAPWS water classes).

CoolProp supports an entire host of EOS, see the low level backend AbstractState and it’s associated factory.

corykinney commented 3 years ago

Is this still being considered? This would be very useful to me, as I have several algorithms that need to calculate the thermodynamic properties of mixtures and are designed to interface with a ct.ThermoPhase object, and it would be useful to be able to leverage CoolProp without having to wrap CP.AbstractState and ct.Solution into a generic thermo object to standardize the interface in my code.

bryanwweber commented 3 years ago

Yes, this is definitely being considered. If you'd like to take a shot at implementing it, I'd be happy to give some pointers. Feel free to send an email to the address associated with my GH profile.