Esempio n. 1
0
def get_state_objects(fluids=None):
    if fluids is None:
        fluids = get_fluid_strings()
    states = []
    for fld in fluids:
        states.append(process_fluid_state(fld))
    return states
Esempio n. 2
0
def get_state_objects(fluids=None):
    if fluids is None:
        fluids = get_fluid_strings()
    states = []
    for fld in fluids:
        states.append(process_fluid_state(fld))
    return states
Esempio n. 3
0
#                     crit_state.stable = crit_state_tmp.stable
#         except:
#             raise ValueError("Could not calculate the critical point data.")
#     new_state = AbstractState(state.backend_name(), '&'.join(state.fluid_names()))
#     masses = state.get_mass_fractions()
#     if len(masses)>1:
#         new_state.set_mass_fractions(masses) # Uses mass fraction to work with incompressibles
#     if np.isfinite(crit_state.p) and np.isfinite(crit_state.T):
#         new_state.specify_phase(CoolProp.iphase_critical_point)
#         new_state.update(CoolProp.PT_INPUTS, crit_state.p, crit_state.T)
#         #new_state.update(CoolProp.DmolarT_INPUTS, crit_state.rhomolar, crit_state.T)
#         return new_state
#     raise ValueError("Could not calculate the critical point data.")

from CoolProp.Plots.Common import process_fluid_state, get_critical_point
state = process_fluid_state("HEOS::R32[0.381109419953993]&R125[0.179558888662016]&R134A[0.439331691383991]")
cstate = get_critical_point(state)
print(cstate.T())


import matplotlib.pyplot as plt
from CoolProp.Plots import PropertyPlot

fluid = "R407C"
fluid = "R32[0.381109419953993]&R125[0.179558888662016]&R134A[0.439331691383991]"
#fluid = "R32[0.40]&R125[0.15]&R134A[0.45]"

plot_RP = PropertyPlot("REFPROP::"+fluid, 'PH', unit_system='EUR', tp_limits='ACHP')
plot_RP.calc_isolines()
plot_RP.draw()
Esempio n. 4
0
#         except:
#             raise ValueError("Could not calculate the critical point data.")
#     new_state = AbstractState(state.backend_name(), '&'.join(state.fluid_names()))
#     masses = state.get_mass_fractions()
#     if len(masses)>1:
#         new_state.set_mass_fractions(masses) # Uses mass fraction to work with incompressibles
#     if np.isfinite(crit_state.p) and np.isfinite(crit_state.T):
#         new_state.specify_phase(CoolProp.iphase_critical_point)
#         new_state.update(CoolProp.PT_INPUTS, crit_state.p, crit_state.T)
#         #new_state.update(CoolProp.DmolarT_INPUTS, crit_state.rhomolar, crit_state.T)
#         return new_state
#     raise ValueError("Could not calculate the critical point data.")

from CoolProp.Plots.Common import process_fluid_state, get_critical_point
state = process_fluid_state(
    "HEOS::R32[0.381109419953993]&R125[0.179558888662016]&R134A[0.439331691383991]"
)
cstate = get_critical_point(state)
print(cstate.T())

import matplotlib.pyplot as plt
from CoolProp.Plots import PropertyPlot

fluid = "R407C"
fluid = "R32[0.381109419953993]&R125[0.179558888662016]&R134A[0.439331691383991]"
#fluid = "R32[0.40]&R125[0.15]&R134A[0.45]"

plot_RP = PropertyPlot("REFPROP::" + fluid,
                       'PH',
                       unit_system='EUR',
                       tp_limits='ACHP')
Esempio n. 5
0
def calc_isolines(fluid="HEOS::water",
                  kind_a="P",
                  range_a=[1e6, 10e6],
                  kind_b="T",
                  range_b=[50 + 273.15],
                  kind_o=["Hmass"],
                  CUR_CONF=CONF_PYT_DIR):

    state = process_fluid_state(fluid)

    kind_a_index = get_parameter_index(kind_a)
    kind_b_index = get_parameter_index(kind_b)
    kind_o_index = [
        get_parameter_index(kind_o_single) for kind_o_single in kind_o
    ]

    (input_pair, one, two) = generate_update_pair(kind_a_index, 0,
                                                  kind_b_index, 1)
    if one == 0:
        swap = False
    else:
        swap = True

    range_one = np.asanyarray(range_b)
    range_two = np.asanyarray(range_a)

    result = []

    #for i in range(10):
    #    pbar.update(10)
    #pbar.close()

    progress_bar = tqdm(total=range_two.size * range_one.size,
                        desc="{0:40s}".format(fluid))
    progress_bar.clear()

    for cnt, one in np.ndenumerate(range_one):
        if not swap:
            kind_in1 = kind_b
            kind_in2 = kind_a
            vector_in1 = np.zeros_like(range_two) + one
            vector_in2 = range_two
        else:
            kind_in2 = kind_b
            kind_in1 = kind_a
            vector_in2 = np.zeros_like(range_two) + one
            vector_in1 = range_two

        # At this point, everything is prepared for the loop
        # vector_in1 contains the first set of inputs and
        # vector_in2 contains the second set of inputs

        #CONF_CPP_DIR = "Call PropsSI_multi"
        #CONF_CPP_GUE = "Call PropsSI_multi, guesses enabled"
        #CONF_PYT_DIR = "Call AbstractState.update"
        #CONF_PYT_GUE

        tmp_result = 0.0
        err_count = 0
        single_result = ResClass()
        guesses = CoolProp.CoolProp.PyGuessesStructure()

        if CUR_CONF == CONF_CPP_DIR:
            set_config_bool(CoolProp.USE_GUESSES_IN_PROPSSI, False)
            start = timer()
            try:
                tmp_result = PS(kind_o, kind_in1, vector_in1, kind_in2,
                                vector_in2, fluid)
            except:
                ++err_count
                pass
            end = timer()

        elif CUR_CONF == CONF_CPP_GUE:
            set_config_bool(CoolProp.USE_GUESSES_IN_PROPSSI, True)
            start = timer()
            try:
                tmp_result = PS(kind_o, kind_in1, vector_in1, kind_in2,
                                vector_in2, fluid)
            except:
                ++err_count
                pass
            end = timer()

        elif CUR_CONF == CONF_PYT_DIR:
            start = timer()
            for i, two in np.ndenumerate(vector_in1):
                try:
                    state.update(input_pair, two, one)
                    for kind_o_single in kind_o_index:
                        tmp_result = state.keyed_output(kind_o_single)
                except:
                    ++err_count
                    pass
            end = timer()

        elif CUR_CONF == CONF_PYT_GUE:
            start = timer()
            for i, two in np.ndenumerate(vector_in1):
                try:
                    if i < 1: state.update(input_pair, two, one)
                    else:
                        state.update_with_guesses(input_pair, two, one, guess)
                    guesses.rhomolar = state.rhomolar()
                    guesses.T = state.T()
                    for kind_o_single in kind_o_index:
                        tmp_result = state.keyed_output(kind_o_single)
                except:
                    ++err_count
                    guesses.rhomolar = np.NaN
                    guesses.T = np.NaN
                    pass
            end = timer()

        single_result.time = (end - start) * 1e6 / (1.0 * range_two.size)
        single_result.err_count = err_count
        single_result.size = range_two.size
        single_result.fluid = fluid
        single_result.comment = CUR_CONF
        result.append(single_result)

        progress_bar.update(range_two.size)

    progress_bar.close()

    return result
Esempio n. 6
0
def calc_isolines(fluid="HEOS::water", kind_a="P", range_a=[1e6,10e6], kind_b="T", range_b=[50+273.15], kind_o=["Hmass"], CUR_CONF=CONF_PYT_DIR):

    state = process_fluid_state(fluid)

    kind_a_index = get_parameter_index(kind_a)
    kind_b_index = get_parameter_index(kind_b)
    kind_o_index = [get_parameter_index(kind_o_single) for kind_o_single in kind_o]

    (input_pair, one, two) =generate_update_pair(kind_a_index,0,kind_b_index,1)
    if one == 0:
        swap = False
    else:
        swap = True

    range_one = np.asanyarray(range_b)
    range_two = np.asanyarray(range_a)

    result = []

    #for i in range(10):
    #    pbar.update(10)
    #pbar.close()

    progress_bar = tqdm(total=range_two.size*range_one.size, desc="{0:40s}".format(fluid))
    progress_bar.clear()

    for cnt,one in np.ndenumerate(range_one):
        if not swap:
            kind_in1 = kind_b
            kind_in2 = kind_a
            vector_in1 = np.zeros_like(range_two)+one
            vector_in2 = range_two
        else:
            kind_in2 = kind_b
            kind_in1 = kind_a
            vector_in2 = np.zeros_like(range_two)+one
            vector_in1 = range_two

        # At this point, everything is prepared for the loop
        # vector_in1 contains the first set of inputs and
        # vector_in2 contains the second set of inputs

        #CONF_CPP_DIR = "Call PropsSI_multi"
        #CONF_CPP_GUE = "Call PropsSI_multi, guesses enabled"
        #CONF_PYT_DIR = "Call AbstractState.update"
        #CONF_PYT_GUE

        tmp_result = 0.0
        err_count = 0
        single_result = ResClass()
        guesses = CoolProp.CoolProp.PyGuessesStructure()

        if CUR_CONF==CONF_CPP_DIR:
            set_config_bool(CoolProp.USE_GUESSES_IN_PROPSSI, False)
            start = timer()
            try:
                tmp_result = PS(kind_o, kind_in1, vector_in1, kind_in2, vector_in2, fluid)
            except:
                err_count += 1
                pass
            end = timer()

        elif CUR_CONF==CONF_CPP_GUE:
            set_config_bool(CoolProp.USE_GUESSES_IN_PROPSSI, True)
            start = timer()
            try:
                tmp_result = PS(kind_o, kind_in1, vector_in1, kind_in2, vector_in2, fluid)
            except:
                err_count += 1
                pass
            end = timer()

        elif CUR_CONF==CONF_PYT_DIR:
            start = timer()
            for i,two in np.ndenumerate(vector_in1):
                try:
                    state.update(input_pair, two, one)
                    for kind_o_single in kind_o_index:
                        tmp_result = state.keyed_output(kind_o_single)
                except:
                    err_count += 1
                    pass
            end = timer()

        elif CUR_CONF==CONF_PYT_GUE:
            start = timer()
            for i,two in np.ndenumerate(vector_in1):
                try:
                    if i<1: state.update(input_pair, two, one)
                    else: state.update_with_guesses(input_pair, two, one, guess)
                    guesses.rhomolar = state.rhomolar()
                    guesses.T = state.T()
                    for kind_o_single in kind_o_index:
                        tmp_result = state.keyed_output(kind_o_single)
                except:
                    err_count += 1
                    guesses.rhomolar = np.NaN
                    guesses.T = np.NaN
                    pass
            end = timer()

        single_result.time = (end - start)*1e6/(1.0*range_two.size)
        single_result.err_count = err_count
        single_result.size = range_two.size
        single_result.fluid = fluid
        single_result.comment = CUR_CONF
        result.append(single_result)

        progress_bar.update(range_two.size)

    progress_bar.close()

    return result