Exemple #1
0
def check(N=5000, param='D', fluid='R245fa'):
    values = []
    CP.enable_TTSE_LUT(fluid)

    try:
        CP.Props('D', 'P', CP.Props(fluid, 'ptriple') + 1, 'Q', 1, fluid)
    except:
        return []
    # CP.set_TTSESinglePhase_LUT_size(fluid,500,500)
    hmin, hmax, pmin, pmax = CP.get_TTSESinglePhase_LUT_range(fluid)
    for i in range(N):
        x1 = random.random()
        h = x1 * hmin + (1 - x1) * hmax
        x2 = random.random()
        logp = x2 * log(pmin) + (1 - x2) * log(pmax)
        p = exp(logp)
        try:
            CP.enable_TTSE_LUT(fluid)
            value_withTTSE = CP.Props(param, 'P', p, 'H', h, fluid)
            CP.disable_TTSE_LUT(fluid)
            value_noTTSE = CP.Props(param, 'P', p, 'H', h, fluid)
            values.append((h, p, value_withTTSE, value_noTTSE))
        except ValueError:
            pass

    return values
Exemple #2
0
def check_Props(parameter, SI_over_kSI):
    
    CP.set_standard_unit_system(CoolProp.unit_systems_constants.UNIT_SYSTEM_SI)
    val_SI = CP.Props(parameter,'T',300.0,'D',1.0,'R134a')
    
    CP.set_standard_unit_system(CoolProp.unit_systems_constants.UNIT_SYSTEM_KSI)
    val_kSI = CP.Props(parameter,'T',300.0,'D',1.0,'R134a')
    
    try:
        val_SI = val_SI()
        val_kSI = val_kSI()
    except:
        pass
            
    print(val_SI,val_kSI, val_SI/val_kSI - SI_over_kSI)
    if abs(val_SI/val_kSI - SI_over_kSI) > 1e-12:
        raise ValueError(val_SI/val_kSI-SI_over_kSI)
def critical_table(Fluid):
    params = dict(
        Tc=CP.Props(Fluid, 'Tcrit'),
        rhoc=CP.Props(Fluid, 'rhocrit'),
        pc=CP.Props(Fluid, 'pcrit'),
    )

    return textwrap.dedent("""
    Critical Parameters
    
    ==============================  ==============================
    Temperature [K]                 {Tc:0.3f}
    Density [kg/m\ :sup:`3`\ ]      {rhoc:0.6f}
    Pressure [kPa]                  {pc:0.5f}
    ==============================  ==============================
    
    """.format(**params))
Exemple #4
0
    def __sat_bounds(self, kind, smin=None, smax=None):
        """
        Generates limits for the saturation line in either T or p determined
        by 'kind'. If xmin or xmax are provided, values will be checked
        against the allowable range for the EOS and an error might be
        generated.

        Returns a tuple containing (xmin, xmax)
        """
        if kind == 'P':
            name = 'pressure'
            min_key = 'ptriple'
        elif kind == 'T':
            name = 'temperature'
            min_key = 'Tmin'

        fluid_min = CP.Props(self.fluid_ref, min_key)
        fluid_crit = CP.Props(self.fluid_ref, ''.join([kind, 'crit']))

        if smin is None:
            smin = fluid_min + SMALL
        elif smin > fluid_crit:
            raise ValueError(''.join([
                'Minimum ', name, ' cannot be greater than fluid critical ',
                name, '.'
            ]))

        if smax is None:
            smax = fluid_crit - SMALL
        elif smax > fluid_crit:
            raise ValueError(''.join([
                'Maximum ', name, ' cannot be greater than fluid critical ',
                name, '.'
            ]))

        smin = max(smin, fluid_min + SMALL)
        smax = min(smax, fluid_crit - SMALL)

        return (smin, smax)
def params_table(Fluid):
    params = dict(mm=CP.Props(Fluid, 'molemass'),
                  Tt=CP.Props(Fluid, 'Ttriple'),
                  pt=CP.Props(Fluid, 'ptriple'),
                  Tmin=CP.Props(Fluid, 'Tmin'),
                  CAS=CP.get_CAS_code(Fluid),
                  ASHRAE=CP.get_ASHRAE34(Fluid))

    return textwrap.dedent("""
    Fluid Data
    ==========
        
    Fluid Parameters
    
    =========================  ==============================
    Mole Mass [kg/kmol]        {mm:0.5f}
    Triple Point Temp. [K]     {Tt:0.3f}
    Triple Point Press. [kPa]  {pt:0.10g}
    Minimum temperature [K]    {Tmin:0.3f}
    CAS number                 {CAS:s}
    ASHRAE classification      {ASHRAE:s}
    =========================  ==============================
    """.format(**params))
Exemple #6
0
def build_all_ancillaries():
    for fluid in sorted(CoolProp.__fluids__):
        print fluid
        if fluid in ['SES36']:
            build_ancillaries(fluid, Tlims = [CP.Props(fluid,'Ttriple'), CP.Props(fluid, 'Tcrit')-1])
        elif fluid == 'R507A':
            build_ancillaries(fluid, Tlims = [CP.Props(fluid,'Ttriple'), CP.Props(fluid, 'Tcrit')-0.1])
        elif fluid == 'R407F':
            build_ancillaries(fluid, Tlims = [CP.Props(fluid,'Ttriple'), CP.Props(fluid, 'Tcrit')-2])
        else:
            build_ancillaries(fluid)
Exemple #7
0
def time_check(N, h, p, TTSE=False, mode='TTSE'):

    if TTSE:
        if mode == 'TTSE':
            setup = "import CoolProp; import CoolProp.CoolProp as CP; CP.enable_TTSE_LUT('Water'); CP.set_TTSE_mode('Water','TTSE'); CP.Props('T','H',500,'P',10000,'Water'); IWater = CP.get_Fluid_index('Water'); from CoolProp.param_constants import iT,iH,iP,iD"
        elif mode == 'BICUBIC':
            setup = "import CoolProp; import CoolProp.CoolProp as CP; CP.enable_TTSE_LUT('Water'); CP.set_TTSE_mode('Water','BICUBIC'); CP.Props('T','H',500,'P',10000,'Water'); IWater = CP.get_Fluid_index('Water'); from CoolProp.param_constants import  iT,iH,iP,iD"
        else:
            raise ValueError()
    else:
        setup = "import CoolProp.CoolProp as CP; IWater = CP.get_Fluid_index('Water'); CP.disable_TTSE_LUT('Water'); from CoolProp.param_constants import  iT,iH,iP,iD"

    time = timeit.Timer(
        "CP.IProps(iD,iH," + str(h) + ",iP," + str(p) + ",IWater)",
        setup).timeit(N) / N * 1e6
    value = CP.Props('D', 'H', h, 'P', p, 'Water')

    return time, value
Exemple #8
0
def drawLines(Ref, lines, axis, plt_kwargs=None):
    """
    Just an internal method to systematically plot values from
    the generated 'line' dicts, method is able to cover the whole
    saturation curve. Closes the gap at the critical point and
    adds a marker between the two last points of bubble and
    dew line if they reach up to critical point.
    Returns the an array of line objects that can be used to change
    the colour or style afterwards.
    """
    if not plt_kwargs is None:
        for line in lines:
            line['opts'] = plt_kwargs
    plottedLines = []
    if len(lines) == 2 and (
            'q' in str(lines[0]['type']).lower()
            and 'q' in str(lines[1]['type']).lower()) and (
                (0 == lines[0]['value'] and 1 == lines[1]['type']) or
                (1 == lines[0]['value'] and 0 == lines[1]['type'])):
        # We plot the saturation curve
        bubble = lines[0]
        dew = lines[1]
        line, = axis.plot(bubble['x'], bubble['y'], **bubble['opts'])
        plottedLines.extend([line])
        line, = axis.plot(dew['x'], dew['y'], **dew['opts'])
        plottedLines.extend([line])
        # Do we need to test if this is T or p?
        Tmax = min(bubble['kmax'], dew['kmax'])
        if Tmax > CP.Props(Ref, 'Tcrit') - 2e-5:
            axis.plot(numpy.r_[bubble['x'][-1], dew['x'][-1]],
                      numpy.r_[bubble['y'][-1],
                               dew['y'][-1]], **bubble['opts'])
            #axis.plot((bubble['x'][-1]+dew['x'][-1])/2.,(bubble['y'][-1]+dew['y'][-1])/2.,'o',color='Tomato')
    else:
        for line in lines:
            line, = axis.plot(line['x'], line['y'], **line['opts'])
            plottedLines.extend([line])

    return plottedLines
Exemple #9
0
    def _get_fluid_data(self, req_prop, prop1_name, prop2_name, prop1_vals,
                        prop2_vals):
        """
        Calculates lines for constant iName (iVal) over an interval of xName
        (xVal). Returns (x[],y[]) - a tuple of arrays containing the values
        in x and y dimensions.
        """
        if len(prop1_vals) != len(prop2_vals):
            raise ValueError(''.join([
                'We need the same number of x value ',
                'arrays as iso quantities.'
            ]))

        y_vals = []
        x_vals = []
        for i, p1_val in enumerate(prop1_vals):
            x_vals.append(prop2_vals[i])
            y_vals.append([
                CP.Props(req_prop, prop1_name, p1_val, prop2_name, x,
                         self.fluid_ref) for x in prop2_vals[i]
            ])
        return [x_vals, y_vals]
Exemple #10
0
def check_Trho(N=5000, param='P', fluid='R245fa'):
    values = []
    CP.enable_TTSE_LUT(fluid)
    try:
        CP.Props('D', 'P', CP.Props(fluid, 'ptriple') + 1, 'Q', 1, fluid)
    except:
        return []
    # CP.set_TTSESinglePhase_LUT_size(fluid,500,500)
    hmin, hmax, pmin, pmax = CP.get_TTSESinglePhase_LUT_range(fluid)
    for i in range(N):
        x1 = random.random()
        h = x1 * hmin + (1 - x1) * hmax
        x2 = random.random()
        logp = x2 * log(pmin) + (1 - x2) * log(pmax)
        p = exp(logp)
        try:
            try:
                # Get the T,rho from the EOS directly without the LUT
                CP.disable_TTSE_LUT(fluid)
                s = CP.Props('S', 'P', p, 'H', h, fluid)
                T = CP.Props('T', 'P', p, 'H', h, fluid)
                rho = CP.Props('D', 'P', p, 'H', h, fluid)
            except:
                print('EOS failed: %s %s' % (p, h))
                raise
            # Now get p,h from the T,rho
            CP.enable_TTSE_LUT(fluid)
            val = CP.Props(param, 'T', T, 'D', rho, fluid)
            CP.disable_TTSE_LUT(fluid)
            valREFPROP = CP.Props(param, 'T', T, 'D', rho, fluid)
            # print T,rho,val,valREFPROP,(val/valREFPROP-1)*100
            if abs(val - valREFPROP) > 0.00001:
                raise ValueError
        except ValueError:
            print('TTSE failed: %s %s' % (T, rho))
            values.append((T, rho, 0, 0))
            pass
    return values
Exemple #11
0
def check_Pother(N=5000, param='T', other='S', fluid='R245fa'):
    values = []
    CP.enable_TTSE_LUT(fluid)
    try:
        CP.Props('D', 'P', CP.Props(fluid, 'ptriple') + 1, 'Q', 1, fluid)
    except:
        return []
    # CP.set_TTSESinglePhase_LUT_size(fluid,500,500)
    hmin, hmax, pmin, pmax = CP.get_TTSESinglePhase_LUT_range(fluid)
    for i in range(N):
        x1 = random.random()
        h = x1 * hmin + (1 - x1) * hmax
        x2 = random.random()
        logp = x2 * log(pmin) + (1 - x2) * log(pmax)
        p = exp(logp)
        try:
            try:
                # Get the T,rho from the EOS directly without the LUT
                CP.disable_TTSE_LUT(fluid)
                s = CP.Props('S', 'P', p, 'H', h, fluid)
                T = CP.Props('T', 'P', p, 'H', h, fluid)
                rho = CP.Props('D', 'P', p, 'H', h, fluid)
            except:
                print('EOS failed: %s %s' % (p, h))
                raise
            # Now get p,h from the T,rho
            CP.enable_TTSE_LUT(fluid)
            if other == 'S':
                other_val = s
            elif other == 'T':
                other_val = T
            elif other == 'D':
                other_val = rho
            else:
                raise ValueError
            val = CP.Props(param, 'P', p, other, other_val, fluid)
        except ValueError:
            print('TTSE failed: %s %s' % (p, other_val))
            values.append((p, other_val, 0, 0))
            pass
    return values
Exemple #12
0
import CoolProp.CoolProp as CP

fluid = 'Propane'
print(CP.enable_TTSE_LUT(fluid))
print(CP.isenabled_TTSE_LUT(fluid))
print(CP.Props('H', 'P', 300, 'Q', 0, fluid))
print(CP.Props('H', 'P', 310, 'Q', 0, fluid))
print(CP.Props('H', 'P', 315, 'Q', 0, fluid))
#
fluid = 'TestSolution-0.3'
print(CP.enable_TTSE_LUT(fluid))
print(CP.isenabled_TTSE_LUT(fluid))
print(CP.Props('H', 'P', 3000, 'T', 280, fluid))
Exemple #13
0
from CoolProp import CoolProp as CP
from PDSim.misc.datatypes import Collector
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from scipy.odr import *
import textwrap

fluid_REF = 'Propane'
Tcrit_REF = CP.Props(fluid_REF, 'Tcrit')
omega_REF = CP.Props(fluid_REF, "accentric")
molemass_REF = CP.Props(fluid_REF, 'molemass')
rhocrit_REF = CP.Props(fluid_REF, 'rhocrit')
Zcrit_REF = CP.DerivTerms('Z', Tcrit_REF, rhocrit_REF, fluid_REF)

fluid = 'DimethylEther'
molemass = CP.Props(fluid, 'molemass')
Ttriple = CP.Props(fluid, 'Ttriple')
Tcrit = CP.Props(fluid, 'Tcrit')
omega = CP.Props(fluid, "accentric")
rhocrit = CP.Props(fluid, 'rhocrit')
pcrit = CP.Props(fluid, 'pcrit')
Zcrit = CP.DerivTerms('Z', Tcrit, rhocrit, fluid)

N = 12

RHO, TTT, RHO0, TTT0 = Collector(), Collector(), Collector(), Collector()

rhomax = CP.Props('D', 'T', Ttriple, 'Q', 0, fluid)
#Build a database of "experimental" data
for T in np.linspace(Ttriple, Tcrit + 50, 80):
def Tr():
    global ip, irho
    for fluid, values in polynomial_in_Tr.iteritems():

        axp = figp.add_subplot(Nrow, Ncol, ip)
        ip += 1
        axrho = figrho.add_subplot(Nrow, Ncol, irho)
        irho += 1
        axp.set_xlabel('T [K]')
        axp.set_ylabel('p [Pa]')
        axrho.set_xlabel('T [K]')
        axrho.set_ylabel('rho [mol/m$^3$]')
        axp.set_title(fluid + ' - ' +
                      str(round(CP.Props(fluid, "molemass"), 2)))
        axrho.set_title(fluid)

        fname = os.path.join('fluids', fluid + '.json')
        j = json.load(open(fname, 'r'))
        for part in values['parts']:
            if 'T_min' not in part:
                part['T_min'] = round(CP.Props(fluid, "Tmin"), 4)
        values['type'] = 'polynomial_in_Tr'

        j['ANCILLARIES']['melting_line'] = values

        fp = open(fname, 'w')
        from package_json import json_options
        fp.write(json.dumps(j, **json_options))
        fp.close()

        if fluid == 'Ethylene':
            T = [
                104.003, 104.059, 104.13, 104.2, 104.27, 104.41, 104.55,
                104.69, 104.83, 104.969, 105.108, 105.386, 106.077, 106.764,
                107.446, 111.384, 119.283, 127.136, 158.146, 188.621
            ]
            p = np.array([
                0.1, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 50, 75,
                100, 200, 300
            ]) * 1e6

            axp.plot(T, p, '*')


#         if not isinstance(values, list):
#             values = [values]
#             df = pandas.read_csv('melting_curves/'+fluid+'.mlt',names=['T','p','rho'])
#             axp.plot(df['T'], df['p'], 'o', mfc='none')
#             x,y = plot_rho(df['T'],df['rho'],fit = True)
#             axrho.plot(x,y, 'o', mfc='none')
#
#         else:
#             for i in ['I','II']:
#                 df = pandas.read_csv('melting_curves/'+fluid+'-'+i+'.mlt',names=['T','p','rho'])
#                 axp.plot(df['T'], df['p'], 'o', mfc='none')
#                 x,y = plot_rho(df['T'],df['rho'],fit = True)
#                 axrho.plot(x,y, 'o', mfc='none')

        T_m = values['T_m']
        for i, value in enumerate(values['parts']):

            Tmin = value.get('T_min', CP.Props(fluid, "Tmin"))
            Tmax = value['T_max']
            T = np.linspace(Tmin, Tmax, 200)

            a = value['a']
            t = value['t']
            T_t = value['T_0']
            p_t = value['p_0']

            RHS = 0
            for i in range(len(a)):
                RHS += a[i] * ((T / T_t)**t[i] - 1)

            p = p_t * (RHS + 1)

            axp.plot(T, p)

            cc = 1.75
            aa = 3e8  #(101325-p_0)/((T_m/T_0)**cc-1)
            pt = CP.Props(fluid, 'ptriple')
            pp = pt + aa * ((T / Tmin)**cc - 1)
            axp.plot(T_m, 101325, '*')
            axp.plot(T, pp, '--')

            print fluid, CP.Props(fluid, "molemass"), CP.Props(
                fluid, 'accentric'), pp[-1] / p[-1] - 1
def theta():
    global ip, irho
    for fluid, values in polynomial_in_theta.iteritems():

        axp = figp.add_subplot(Nrow, Ncol, ip)
        ip += 1
        axrho = figrho.add_subplot(Nrow, Ncol, irho)
        irho += 1
        axp.set_xlabel('T [K]')
        axp.set_ylabel('p [Pa]')
        axrho.set_xlabel('T [K]')
        axrho.set_ylabel('rho [mol/m$^3$]')
        axp.set_title(fluid + ' - ' +
                      str(round(CP.Props(fluid, "molemass"), 2)))
        axrho.set_title(fluid)

        fname = os.path.join('fluids', fluid + '.json')
        j = json.load(open(fname, 'r'))
        for part in values['parts']:
            if 'T_min' not in part:
                part['T_min'] = round(CP.Props(fluid, "Tmin"), 4)
        values['type'] = 'polynomial_in_Theta'

        j['ANCILLARIES']['melting_line'] = values

        fp = open(fname, 'w')
        from package_json import json_options
        fp.write(json.dumps(j, **json_options))
        fp.close()

        T_m = values['T_m']
        for value in values['parts']:

            a = value['a']
            t = value['t']
            T_t = value['T_0']
            p_t = value['p_0']

            Tmin = T_t
            Tmax = value['T_max']
            T = np.linspace(Tmin, Tmax, 200)

            RHS = 0
            for i in range(len(a)):
                RHS += a[i] * (T / T_t - 1)**t[i]

            p = p_t * (RHS + 1)

            #df = pandas.read_csv('melting_curves/' + fluid + '.mlt', names=['T','p','rho'])

            #axp.plot(df['T'], df['p'], 'o', mfc='none')

            axp.plot(T, p)

            #x,y = plot_rho(df['T'],df['rho'],fit = True)
            #axrho.plot(x,y, 'o', mfc='none')

            cc = 1.75
            aa = 3e8  #(101325-p_0)/((T_m/T_0)**cc-1)
            pt = CP.Props(fluid, 'ptriple')
            pp = pt + aa * ((T / Tmin)**cc - 1)
            axp.plot(T_m, 101325, '*')
            axp.plot(T, pp, '--')

            print fluid, CP.Props(fluid, "molemass"), CP.Props(
                fluid, 'accentric'), pp[-1] / p[-1] - 1
Exemple #16
0
    def __set_axis_limits(self, swap_xy):
        """
        Generates limits for the axes in terms of x,y defined by 'plot'
        based on temperature and pressure.

        Returns a tuple containing ((xmin, xmax), (ymin, ymax))
        """
        # Get current axis limits, be sure to set those before drawing isolines
        # if no limits are set, use triple point and critical conditions
        X = [
            CP.Props(self.graph_type[1], 'T',
                     1.5 * CP.Props(self.fluid_ref, 'Tcrit'), 'P',
                     CP.Props(self.fluid_ref, 'ptriple'), self.fluid_ref),
            CP.Props(self.graph_type[1], 'T',
                     1.1 * CP.Props(self.fluid_ref, 'Tmin'), 'P',
                     1.5 * CP.Props(self.fluid_ref, 'pcrit'), self.fluid_ref),
            CP.Props(self.graph_type[1], 'T',
                     1.5 * CP.Props(self.fluid_ref, 'Tcrit'), 'P',
                     1.5 * CP.Props(self.fluid_ref, 'pcrit'), self.fluid_ref),
            CP.Props(self.graph_type[1], 'T',
                     1.1 * CP.Props(self.fluid_ref, 'Tmin'), 'P',
                     CP.Props(self.fluid_ref, 'ptriple'), self.fluid_ref)
        ]

        Y = [
            CP.Props(self.graph_type[0], 'T',
                     1.5 * CP.Props(self.fluid_ref, 'Tcrit'), 'P',
                     CP.Props(self.fluid_ref, 'ptriple'), self.fluid_ref),
            CP.Props(self.graph_type[0], 'T',
                     1.1 * CP.Props(self.fluid_ref, 'Tmin'), 'P',
                     1.5 * CP.Props(self.fluid_ref, 'pcrit'), self.fluid_ref),
            CP.Props(self.graph_type[0], 'T',
                     1.1 * CP.Props(self.fluid_ref, 'Tcrit'), 'P',
                     1.5 * CP.Props(self.fluid_ref, 'pcrit'), self.fluid_ref),
            CP.Props(self.graph_type[0], 'T',
                     1.5 * CP.Props(self.fluid_ref, 'Tmin'), 'P',
                     CP.Props(self.fluid_ref, 'ptriple'), self.fluid_ref)
        ]

        limits = [[min(X), max(X)], [min(Y), max(Y)]]
        if not self.axis.get_autoscalex_on():
            limits[0][0] = max([limits[0][0], min(self.axis.get_xlim())])
            limits[0][1] = min([limits[0][1], max(self.axis.get_xlim())])
            limits[1][0] = max([limits[1][0], min(self.axis.get_ylim())])
            limits[1][1] = min([limits[1][1], max(self.axis.get_ylim())])

        self.axis.set_xlim(limits[0])
        self.axis.set_ylim(limits[1])
        return limits
def simon():
    global ip, irho

    for fluid, values in Simon_curves.iteritems():
        axp = figp.add_subplot(Nrow, Ncol, ip)
        ip += 1
        axrho = figrho.add_subplot(Nrow, Ncol, irho)
        irho += 1
        axp.set_xlabel('T [K]')
        axp.set_ylabel('p [Pa]')
        axrho.set_xlabel('T [K]')
        axrho.set_ylabel('rho [mol/m$^3$]')
        axp.set_title(fluid + ' - ' +
                      str(round(CP.Props(fluid, "molemass"), 2)))
        axrho.set_title(fluid)

        fname = os.path.join('fluids', fluid + '.json')
        j = json.load(open(fname, 'r'))
        for part in values['parts']:
            if 'T_min' not in part:
                part['T_min'] = round(CP.Props(fluid, "Tmin"), 4)
        values['type'] = 'Simon'

        j['ANCILLARIES']['melting_line'] = values

        fp = open(fname, 'w')
        from package_json import json_options
        fp.write(json.dumps(j, **json_options))
        fp.close()

        #         if not isinstance(values, list):
        #             values = [values]
        #             df = pandas.read_csv('melting_curves/'+fluid+'.mlt',names=['T','p','rho'])
        #             axp.plot(df['T'], df['p'], 'o', mfc='none')
        #             x,y = plot_rho(df['T'],df['rho'],fit = True)
        #             axrho.plot(x,y, 'o', mfc='none')
        #         else:
        #             for i in ['I','II']:
        #                 df = pandas.read_csv('melting_curves/'+fluid+'-'+i+'.mlt',names=['T','p','rho'])
        #                 axp.plot(df['T'], df['p'], 'o', mfc='none')
        #                 x,y = plot_rho(df['T'],df['rho'],fit = True)
        #                 axrho.plot(x,y, 'o', mfc='none')

        T_m = values['T_m']
        for i, value in enumerate(values['parts']):

            Tmin = value.get('T_min', CP.Props(fluid, "Tmin"))
            Tmax = value['T_max']

            T = np.linspace(Tmin, Tmax, 200)
            T_0 = value['T_0']
            p_0 = value['p_0']
            a = value['a']
            c = value['c']

            p = p_0 + a * ((T / T_0)**c - 1)

            axp.plot(T, p)

            cc = 1.75
            aa = 3e8  #(101325-p_0)/((T_m/T_0)**cc-1)
            pt = CP.Props(fluid, 'ptriple')
            pp = pt + aa * ((T / Tmin)**cc - 1)
            axp.plot(T_m, 101325, '*')
            axp.plot(T, pp, '--')

            print fluid, CP.Props(fluid, "molemass"), CP.Props(
                fluid, 'accentric'), pp[-1] / p[-1] - 1
Exemple #18
0
from pyrp.refpropClasses import RefpropSI
import CoolProp.CoolProp as cp

p = 30000
T = 273.15

ref = False

if ref:
    xkg = [0.473194694453358, 0.205109095413331, 0.321696210133311]
    names = "R32|R125|R134a"
    RP = RefpropSI()
    RP.SETUPFLEX(xkg=xkg, FluidNames=names)
    T_A, p_A, D_A, Dl_A, Dv_A, q_A, e_A, h_A, s_A, cv_A, cp_A, w_A = RP.PQFLSH(
        p, 0)
    T_B, p_B, D_B, Dl_B, Dv_B, q_B, e_B, h_B, s_B, cv_B, cp_B, w_B = RP.PQFLSH(
        p, 1)
    T_C, p_C, D_C, Dl_C, Dv_C, q_C, e_C, h_C, s_C, cv_C, cp_C, w_C = RP.TQFLSH(
        T, 0)
    hlb = h_A / 1000.
    hrb = h_B / 1000.
    h200 = h_C / 1000.
    print "Refprop: ", hlb, hrb, h200
else:
    R407F = 'REFPROP-MIX:R32[0.473194694453358]&R125[0.205109095413331]&R134a[0.321696210133311]'
    #R407F='REFPROP-MIX:R32[0.651669604033581]&R125[0.122438378639971]&R134a[0.225892017326446]'
    hlb = cp.Props('H', 'P', 30, 'Q', 0, R407F)  # 30 kPa saturated liquid
    hrb = cp.Props('H', 'P', 30, 'Q', 1, R407F)  # 30 kPa saturated vapour
    h200 = cp.Props('H', 'T', 273.15, 'Q', 0,
                    R407F)  # saturated liquid at 0C IIR
    print "CoolProp: ", hlb, hrb, h200
Exemple #19
0
def PropertyConsistency(Fluid):

    Tmax = CP.Props(Fluid, "Tcrit") - 1 if Fluid == 'SES36' else CP.Props(
        Fluid, "Tcrit") - 0.01

    return textwrap.dedent("""
    Check of p,h and p,s as inputs (X: Failure .: Success)
    =================================================================
    .. plot::
    
        from CoolProp.Plots.Plots import Ph,Ps
        from CoolProp.CoolProp import Props
        from matplotlib import pyplot as plt
        import numpy as np

        Ref = "{Fluid:s}"
        fig = plt.figure(figsize=(10,5))
        ax1 = fig.add_subplot(121)
        ax2 = fig.add_subplot(122)

        Tmin = Props(Ref,'Tmin')+3
        pmin = Props('P','T',Tmin,'Q',0,Ref)
        pmax = Props(Ref,'pcrit')*2
        hmin = Props('H','T',Tmin,'Q',0,Ref)
        hmax = 2*Props('H','T',Props(Ref,'Tcrit')-1,'Q',1,Ref)-hmin
        smin = Props('S','T',Tmin,'Q',0,Ref)
        smax = 2*Props('S','T',Props(Ref,'Tcrit')-1,'Q',1,Ref)-smin
            
        Ph(Ref, axis = ax1, Tmin = Tmin, Tmax = {Tmax:f})
        Ps(Ref, axis = ax2, Tmin = Tmin, Tmax = {Tmax:f})

        for p in np.linspace(pmin,pmax,10):
            for h in np.linspace(hmin,hmax):
                _bad = False
                try:
                    T = Props('T','H',h,'P',p,Ref)
                    rho = Props('D','H',h,'P',p,Ref)
                    hEOS = Props('H','T',T,'D',rho,Ref)
                except ValueError:
                    _bad = True
                if _bad or abs(hEOS/h-1)>1e-6:
                    ax1.plot(h,p,'x',ms = 10)
                else:
                    ax1.plot(h,p,'k.', ms = 1)
                    
        for p in np.linspace(pmin,pmax,10):
            for s in np.linspace(smin,smax):
                _bad = False
                try:
                    T = Props('T','S',s,'P',p,Ref)
                    rho = Props('D','S',s,'P',p,Ref)
                    sEOS = Props('S','T',T,'D',rho,Ref)
                except ValueError:
                    _bad = True
                if _bad or abs(sEOS/s-1)>1e-6:
                    ax2.plot(s,p,'x',ms = 10)
                else:
                    ax2.plot(s,p,'k.', ms = 1)
                    
        plt.tight_layout()
    """.format(Fluid=Fluid, Tmax=Tmax))
Exemple #20
0
    gaseous = CP.DerivTerms(key, T[2], D[2], fluid)
    supercrit = CP.DerivTerms(key, T[3], D[3], fluid)
    print '{:<25}: {:>10.5f}; {:>10.5f}; {:>10.5f}; {:>10.5f}'.format(
        key, liquid, twophase, gaseous, supercrit)

for key in keys:
    liquid = CP.DerivTermsU(key, T[0], D[0], fluid, 'SI')
    twophase = CP.DerivTermsU(key, T[1], D[1], fluid, 'SI')
    gaseous = CP.DerivTermsU(key, T[2], D[2], fluid, 'SI')
    supercrit = CP.DerivTermsU(key, T[3], D[3], fluid, 'SI')
    print '{:<25}: {:>10.5f}; {:>10.5f}; {:>10.5f}; {:>10.5f}'.format(
        key, liquid, twophase, gaseous, supercrit)

print
print "Testing Props: "
for key in keys:
    liquid = CP.Props(key, "T", float(T[0]), "D", float(D[0]), fluid)
    twophase = CP.Props(key, "T", float(T[1]), "D", float(D[1]), fluid)
    gaseous = CP.Props(key, "T", float(T[2]), "D", float(D[2]), fluid)
    supercrit = CP.Props(key, "T", float(T[3]), "D", float(D[3]), fluid)
    print '{:<25}: {:>10.5f}; {:>10.5f}; {:>10.5f}; {:>10.5f}'.format(
        key, liquid, twophase, gaseous, supercrit)

for key in keys:
    liquid = CP.PropsU(key, "T", float(T[0]), "D", float(D[0]), fluid, 'SI')
    twophase = CP.PropsU(key, "T", float(T[1]), "D", float(D[1]), fluid, 'SI')
    gaseous = CP.PropsU(key, "T", float(T[2]), "D", float(D[2]), fluid, 'SI')
    supercrit = CP.PropsU(key, "T", float(T[3]), "D", float(D[3]), fluid, 'SI')
    print '{:<25}: {:>10.5f}; {:>10.5f}; {:>10.5f}; {:>10.5f}'.format(
        key, liquid, twophase, gaseous, supercrit)
#!/usr/bin/python
import sys
import CoolProp.CoolProp as CP
# print "{0:14.8f}".format(CP.Props('V','D',13,'P',500,'n-Pentane'))
# print "{0:14.8f}".format(CP.Props('V','H',158,'P',1000,'TX22'))
#T = 300
T = float(sys.argv[1])
P = float(sys.argv[2])
print("Temperature: " + str(T))
print("Pressure:    " + str(P))
print("")
print("Viscosity: ")
print("{0:14.8f}".format(CP.Props('V', 'T', T, 'P', P, 'SecCoolSolution-20%')))
print("{0:14.8f}".format(CP.Props('V', 'T', T, 'P', P, 'MEG-20%')))
print("{0:14.8f}".format(CP.Props('V', 'T', T, 'P', P, 'EG-20%')))
print("{0:14.8f}".format(CP.Props('V', 'T', T, 'P', P, 'water')))
# print
# print "{0:14.8f}".format(CP.Props('L','D',13,'P',500,'n-Pentane'))
# print "{0:14.8f}".format(CP.Props('L','H',158,'P',P,'TX22'))
print("")
print("Conductivity: ")
print("{0:14.8f}".format(CP.Props('L', 'T', T, 'P', P, 'SecCoolSolution-20%')))
print("{0:14.8f}".format(CP.Props('L', 'T', T, 'P', P, 'MEG-20%')))
print("{0:14.8f}".format(CP.Props('L', 'T', T, 'P', P, 'EG-20%')))
print("{0:14.8f}".format(CP.Props('L', 'T', T, 'P', P, 'water')))
print("")
print("Density: ")
print("{0:14.8f}".format(CP.Props('D', 'T', T, 'P', P, 'SecCoolSolution-20%')))
print("{0:14.8f}".format(CP.Props('D', 'T', T, 'P', P, 'MEG-20%')))
print("{0:14.8f}".format(CP.Props('D', 'T', T, 'P', P, 'EG-20%')))
print("{0:14.8f}".format(CP.Props('D', 'T', T, 'P', P, 'water')))
from CoolProp.Plots import Ph
import CoolProp.CoolProp as CP
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx
import matplotlib.ticker
import numpy as np
import random

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_axes((0.08,0.1,0.32,0.83))
ax2 = fig.add_axes((0.50,0.1,0.32,0.83))

Ref = 'R245fa'

T = np.linspace(CP.Props(Ref,'Tmin')+0.1,CP.Props(Ref,'Tcrit')-0.01,300)
pV = CP.Props('P','T',T,'Q',1,Ref)
hL = CP.Props('H','T',T,'Q',0,Ref)
hV = CP.Props('H','T',T,'Q',1,Ref)

HHH1, PPP1, EEE1 = [], [], []
HHH2, PPP2, EEE2 = [], [], []

cNorm  = colors.LogNorm(vmin=1e-12, vmax=10)
scalarMap = cmx.ScalarMappable(norm = cNorm, cmap = plt.get_cmap('jet'))

for a_useless_counter in range(40000):
        
    h = random.uniform(100,590)
    p = 10**random.uniform(np.log10(100),np.log10(7000))
    
Exemple #23
0
import numpy as np
import matplotlib.pyplot as plt
from scipy.odr import *
import textwrap

#
#fluid = 'Propane'
#Rfluid = 'REFPROP-propane'
#e_k = 263.88
#sigma = 0.49748
#
fluid = 'DimethylEther'
Rfluid = 'REFPROP-DME'
e_k = 329.72
sigma = 0.5529
molemass = CP.Props(fluid, 'molemass')

Ttriple = CP.Props(fluid, 'Ttriple')
Tcrit = CP.Props(fluid, 'Tcrit')
rhocrit = CP.Props(fluid, 'rhocrit')
n = 6
m = 3
NP = 1
Nb = 0
N = (n - 1) * (m + 1) + 3 + Nb

mu, mu_dilute, RHO, TTT = Collector(), Collector(), Collector(), Collector()

rhomax = CP.Props('D', 'T', Ttriple, 'Q', 0, fluid)
# Build a database of "experimental" data
for T in np.linspace(Ttriple, Tcrit + 30, 400):
Exemple #24
0

if not os.path.exists('hsancillaries.json'):
    from matplotlib.backends.backend_pdf import PdfPages
    pp = PdfPages('multipage.pdf')

    jj = {}
    for i, fluid in enumerate(sorted(CoolProp.__fluids__)):

        fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)

        plt.suptitle(fluid)
        print i, fluid

        N = 10000
        Tc = CP.Props(fluid, 'Tcrit')
        rhoc = CP.Props(fluid, 'rhocrit')
        MM = CP.Props(fluid, 'molemass')
        try:
            T = np.r_[np.linspace(Tc - 0.1, CP.Props(fluid, 'Tmin'),
                                  N)]  #, np.linspace(Tc-0.1, Tc-1e-1, N)]
            hfg = (CP.PropsSI('H', 'T', T, 'Q', 1, fluid) -
                   CP.PropsSI('H', 'T', T, 'Q', 0, fluid)) * MM / 1000
            sfg = (CP.PropsSI('S', 'T', T, 'Q', 1, fluid) -
                   CP.PropsSI('S', 'T', T, 'Q', 0, fluid)) * MM / 1000
        except BaseException as E:
            print E
            continue

        try:
            p = CP.PropsSI('P', 'T', T, 'Q', 0, fluid)
Exemple #25
0
from CoolProp import CoolProp as CP
from PDSim.misc.datatypes import Collector
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fluid = 'R245fa'
Ttriple = CP.Props(fluid, 'Ttriple')
Tcrit = CP.Props(fluid, 'Tcrit')

RHO, TTT, RHO0, TTT0, ERR = Collector(), Collector(), Collector(), Collector(
), Collector()

rhomax = CP.Props('D', 'T', Ttriple, 'Q', 0, 'R245fa')
# Build a database of "experimental" data
for T in np.linspace(Ttriple, Tcrit + 50, 80):
    for rho in np.linspace(1e-10, rhomax, 80):
        if (T > Tcrit or rho > CP.rhosatL_anc(fluid, T)
                or rho < CP.rhosatV_anc(fluid, T)):
            h = CP.Props('H', 'T', T, 'D', rho, 'R245fa')
            p = CP.Props('P', 'T', T, 'D', rho, 'R245fa')

            RHO << rho
            TTT << T
            ERR << h
            TTT0 << p

fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax1.scatter(np.array(RHO.vec), np.array(TTT.vec), ERR.vec)
ax2 = fig.add_subplot(122, projection='3d')
Exemple #26
0
from __future__ import print_function

import CoolProp
import CoolProp.CoolProp as CP

print('CoolProp version: ', CoolProp.__version__)
print('CoolProp gitrevision: ', CoolProp.__gitrevision__)
print('CoolProp fluids: ', CoolProp.__fluids__)


print(' ')
print('************ USING EOS *************')
print(' ')
print('FLUID STATE INDEPENDENT INPUTS')
print('Critical Density Propane:', CP.Props('Propane', 'rhocrit'), 'kg/m^3')
print('TWO PHASE INPUTS (Pressure)')
print('Density of saturated liquid Propane at 101.325 kPa:',
       CP.Props('D', 'P', 101.325, 'Q', 0, 'Propane'), 'kg/m^3')
print('Density of saturated vapor R290 at 101.325 kPa:',
       CP.Props('D', 'P', 101.325, 'Q', 1, 'R290'), 'kg/m^3')
print('TWO PHASE INPUTS (Temperature)')
print('Density of saturated liquid Propane at 300 K:',
       CP.Props('D', 'T', 300, 'Q', 0, 'Propane'), 'kg/m^3')
print('Density of saturated vapor R290 at 300 K:',
       CP.Props('D', 'T', 300, 'Q', 1, 'R290'), 'kg/m^3')

p = CP.Props('P', 'T', 300, 'D', 1, 'Propane')
h = CP.Props('H', 'T', 300, 'D', 1, 'Propane')
T = CP.Props('T', 'P', p, 'H', h, 'Propane')
D = CP.Props('D', 'P', p, 'H', h, 'Propane')
Exemple #27
0
def compareProperty(fluid="", p=0, what=""):
    global c_diff, c_unit, c_exce

    if p == 0:
        p = 0.75 * CP.Props(fluid, "pcrit")

    Delta_T = 50
    T_bub = CP.Props("T", "P", p, "Q", 0, fluid)
    T_dew = CP.Props("T", "P", p, "Q", 1, fluid)
    h_bub = CP.Props("H", "P", p, "Q", 0, fluid)
    h_dew = CP.Props("H", "P", p, "Q", 1, fluid)

    T_1 = T_bub - Delta_T
    if T_1 < CP.Props(fluid, "Tmin"):
        T_1 = CP.Props(fluid, "Tmin") + 0.5 * (T_bub - CP.Props(fluid, "Tmin"))
    T_2 = T_dew + Delta_T

    h_1 = CP.Props("H", "P", p, "T", T_1, fluid)
    h_2 = CP.Props("H", "P", p, "T", T_2, fluid)

    h_liq = numpy.linspace(h_1, h_bub, num=100)
    h_vap = numpy.linspace(h_dew, h_2, num=100)

    T_liq = CP.Props("T", "P", p, "H", h_liq, fluid) - T_bub
    T_vap = CP.Props("T", "P", p, "H", h_vap, fluid) - T_dew

    X_liq_STDV = CP.Props(what, "P", p, "H", h_liq, fluid)
    X_vap_STDV = CP.Props(what, "P", p, "H", h_vap, fluid)

    CP.enable_TTSE_LUT(fluid)
    X_liq_TTSE = CP.Props(what, "P", p, "H", h_liq, fluid)
    X_vap_TTSE = CP.Props(what, "P", p, "H", h_vap, fluid)

    if numpy.max([X_liq_STDV / X_liq_TTSE, X_vap_STDV / X_vap_TTSE
                  ]) > 1.25 or numpy.min([
                      X_liq_STDV / X_liq_TTSE, X_vap_STDV / X_vap_TTSE
                  ]) < 0.75:
        c_diff += 1
        print ""
        print "There were problems with " + what + " for " + fluid
        print "Relative difference liquid: " + str(
            numpy.mean((X_liq_STDV - X_liq_TTSE) / X_liq_STDV))
        print "Relative difference vapour: " + str(
            numpy.mean((X_vap_STDV - X_vap_TTSE) / X_vap_STDV))
        print "Average factor liquid: " + str(
            numpy.mean(X_liq_STDV / X_liq_TTSE))
        print "Average factor vapour: " + str(
            numpy.mean(X_vap_STDV / X_vap_TTSE))
Exemple #28
0
def props(cp1,cp2,cp3,cp4,cp5,cp6):
    return cp.Props(cp1,cp2,cp3,cp4,cp5,cp6)
Exemple #29
0
import matplotlib.pyplot as plt
import CoolProp.CoolProp as CP
import itertools, numpy as np

variables = ['T','P','H','S','U','D']

for fluid in ['Water','CO2','n-Propane']:
    T = np.linspace(CP.Props(fluid,'Tmin'),CP.Props(fluid,'Tcrit'),1000)

    fig = plt.figure(1, figsize=(10, 10), dpi=100)
    for i, types in enumerate(itertools.combinations(variables,2)):
        ax = plt.subplot(5, 3, i+1)
        
        types = list(types)
        
        if types[0] in ['T','P'] and types != ['T','P']:
            types[0],types[1] = types[1],types[0]
        
        xL = CP.Props(types[0],'T',T,'Q',0,fluid)
        yL = CP.Props(types[1],'T',T,'Q',0,fluid)
        xV = CP.Props(types[0],'T',T,'Q',1,fluid)
        yV = CP.Props(types[1],'T',T,'Q',1,fluid)
        xc = CP.Props(types[0],'T',CP.Props(fluid,'Tcrit'),'Q',1,fluid)
        yc = CP.Props(types[1],'T',CP.Props(fluid,'Tcrit'),'Q',1,fluid)
        
        ax.plot(xL,yL,'k')
        ax.plot(xV,yV,'k')
        ax.plot(xc,yc,'o')
        
        if types[0] in ['P','D']:
            ax.set_xscale('log')
Exemple #30
0
from __future__ import division

from CoolProp import CoolProp as CP

Fluid = 'CO2'
R = 8.314472 / CP.Props(Fluid, 'molemass')
Tc = CP.Props(Fluid, 'Tcrit')
pc = CP.Props(Fluid, 'pcrit')
w = CP.Props(Fluid, 'accentric')

a = 0.457235 * R**2 * Tc**2 / pc
b = 0.077796 * R * Tc / pc
kappa = 0.37464 + 1.54226 * w - 0.26992 * w**2

T = 298.15
rho = 1000
v = 1 / rho
Tr = T / Tc
alpha = (1 + kappa * (1 - Tr**0.5))**2

p = R * T / (v - b) - a * alpha / (v**2 + 2 * b * v - b**2)
print("%s %s" % (p, CP.Props('P', 'T', T, 'D', rho, Fluid)))