mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-21 20:07:57 -05:00
169 lines
4.9 KiB
Python
169 lines
4.9 KiB
Python
"""
|
|
CPIncomp - Jorrit's collection of routines for fitting incompressible liquids
|
|
=====
|
|
|
|
readme.md - General instructions and copyright information / credits.
|
|
|
|
"""
|
|
from __future__ import division, absolute_import, print_function
|
|
import inspect
|
|
from . import DataObjects, ExampleObjects, PureFluids, CoefficientFluids, DigitalFluids, MelinderFluids, SolutionFluids
|
|
from .SecCoolFluids import SecCoolSolutionData
|
|
|
|
|
|
def getBaseClassNames():
|
|
"""
|
|
Returns a list of names of the abstract base
|
|
classes that should not be instantiated. Can
|
|
be used to build an ignore list.
|
|
"""
|
|
ignList = []
|
|
for i in inspect.getmembers(DataObjects):
|
|
if inspect.isclass(i[1]):
|
|
ignList.append(i[0])
|
|
return ignList
|
|
|
|
|
|
def getExampleNames(obj=False):
|
|
"""
|
|
Returns a list of names of the example fluid
|
|
classes that should not be treated like the
|
|
normal fluids. Can be used to build an ignore
|
|
list.
|
|
Use the obj switch to return the objects instead
|
|
of the names.
|
|
"""
|
|
ignList = getBaseClassNames()
|
|
outList = []
|
|
for i in inspect.getmembers(ExampleObjects):
|
|
if inspect.isclass(i[1]):
|
|
if i[0] not in ignList:
|
|
if obj: outList.append(i[1]())
|
|
else: outList.append(i[0])
|
|
return outList
|
|
|
|
|
|
def getIgnoreNames():
|
|
"""
|
|
Returns a list of names of classes that should
|
|
not be treated like the normal fluids.
|
|
"""
|
|
ignList = []
|
|
ignList += getBaseClassNames()
|
|
ignList += getExampleNames()
|
|
return ignList
|
|
|
|
|
|
def getCoefficientFluids():
|
|
"""
|
|
Returns a list of CoefficientData objects, which
|
|
already contain all coefficients. These objects
|
|
can be written to JSON without further processing.
|
|
"""
|
|
classes = []
|
|
ignList = getIgnoreNames()
|
|
for name, obj in inspect.getmembers(CoefficientFluids):
|
|
if inspect.isclass(obj):
|
|
# print(name)
|
|
if not name in ignList: # Ignore the base classes
|
|
classes.append(obj())
|
|
return classes
|
|
|
|
|
|
def getDigitalFluids():
|
|
"""
|
|
Returns a list of DigitalData objects, which
|
|
contain data for the fitting. These objects
|
|
only hold the data and you still have to call
|
|
the fitting routines.
|
|
a) Data in these classes is based on equations
|
|
that cannot be converted to the forms available
|
|
in CoolProp.
|
|
b) There are no equations available, but the
|
|
fluid data can be accessed from python in the
|
|
form of another library.
|
|
c) There are data files that contain the experimental
|
|
data. The fit has to be done after loading the fluids.
|
|
"""
|
|
classes = []
|
|
ignList = getIgnoreNames()
|
|
for name, obj in inspect.getmembers(DigitalFluids):
|
|
if inspect.isclass(obj):
|
|
# print(name)
|
|
if not name in ignList: # Ignore the base classes
|
|
classes.append(obj())
|
|
return classes
|
|
|
|
|
|
def getMelinderFluids():
|
|
"""
|
|
Returns a list of CoefficientData objects, which
|
|
already contain all coefficients. These objects
|
|
can be written to JSON without further processing.
|
|
All coefficients are taken from the same reference:
|
|
"Properties of Secondary Working Fluids for Indirect Systems"
|
|
written by Aake Melinder and published in 2010 by IIR
|
|
"""
|
|
classes = []
|
|
ignList = getIgnoreNames()
|
|
for name, obj in inspect.getmembers(MelinderFluids):
|
|
if inspect.isclass(obj):
|
|
# print(name)
|
|
if not name in ignList: # Ignore the base classes
|
|
classes.append(obj())
|
|
return classes
|
|
|
|
|
|
def getPureFluids():
|
|
"""
|
|
Returns a list of SolutionData objects, which
|
|
contain data for fitting pure fluids. These
|
|
objects only hold the data and you still have
|
|
to call the fitting routines.
|
|
"""
|
|
classes = []
|
|
ignList = getIgnoreNames()
|
|
for name, obj in inspect.getmembers(PureFluids):
|
|
if inspect.isclass(obj):
|
|
# print(name)
|
|
if not name in ignList: # Ignore the base classes
|
|
classes.append(obj())
|
|
return classes
|
|
|
|
|
|
def getSolutionFluids():
|
|
"""
|
|
Returns a list of SolutionData objects, which
|
|
contain data for fitting solutions. These
|
|
objects only hold the data and you still have
|
|
to call the fitting routines.
|
|
"""
|
|
classes = []
|
|
ignList = getIgnoreNames()
|
|
for name, obj in inspect.getmembers(SolutionFluids):
|
|
if inspect.isclass(obj):
|
|
# print(name)
|
|
if not name in ignList: # Ignore the base classes
|
|
classes.append(obj())
|
|
return classes
|
|
|
|
|
|
def getSecCoolFluids():
|
|
"""
|
|
Returns a list of DigitalData objects, which
|
|
contain data for the fits. All objects here
|
|
implement the fitFluid() function, which can
|
|
be called to set the coefficients before writing
|
|
the JSON files.
|
|
"""
|
|
return SecCoolSolutionData.factory()
|
|
|
|
|
|
def get_version():
|
|
return 0.5
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print('You are using version %s of the Python package for incompressible liquids in CoolProp.' % (get_version()))
|
|
print()
|