Source code for idaes.surrogate.helmet.DataImport

##############################################################################
# Institute for the Design of Advanced Energy Systems Process Systems
# Engineering Framework (IDAES PSE Framework) Copyright (c) 2018-2019, by the
# software owners: The Regents of the University of California, through
# Lawrence Berkeley National Laboratory,  National Technology & Engineering
# Solutions of Sandia, LLC, Carnegie Mellon University, West Virginia
# University Research Corporation, et al. All rights reserved.
#
# Please see the files COPYRIGHT.txt and LICENSE.txt for full copyright and
# license information, respectively. Both files are also available online
# at the URL "https://github.com/IDAES/idaes-pse".
##############################################################################
"""
Importing thermodynamic data, specific structures for text files
"""

import numpy as np


filename, sampleRatio = "", ""
Values, DVValues, DLValues, CPValues, PVTValues, PVTSamples, CP0Values, BValues, CVValues, CVValuesn, SNDValues = (
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
)
InSatValues = []
PVTindexes, CVindexes, CPindexes, SNDindexes = [], [], [], []
isothermIndex = 0

critT, critD, critP, acc, R, M, Rm = [0, 0, 0, 0, 0, 0, 0]


[docs]def molData(fluidData, RVal): """ Molecular data passed to the module """ global critT, critP, critD, M, triple, acc, R, Rm (critT, critP, critD, M, triple, acc) = fluidData R = RVal Rm = RVal
[docs]def regionsOfData(molecule, DataValues, PVT=False, CV=False): """ Organization of data into regions """ Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = [], [], [], [], [], [] if PVT: for P, D, T in DataValues: T = float(T) P = float(P) D = float(D) vals = [P, D, T] if T < float(critT): if D < float(critD): Reg1.append(vals) else: Reg2.append(vals) else: if ( T / float(critT) < 1.1 and T / float(critT) > 0.98 and D / float(critD) > 0.7 and D / float(critD) < 1.4 ): Reg3.append(vals) else: Rho = D / float(critD) if Rho < 0.6: Reg4.append(vals) elif Rho < 1.5: Reg5.append(vals) else: Reg6.append(vals) elif CV: for D, T, CV in CVValues: T = float(T) CV = float(CV) D = float(D) vals = [D, T, CV] if D > 0: if T < float(critT): if D < float(critD): Reg1.append(vals) else: Reg2.append(vals) else: if ( T / float(critT) < 1.1 and T / float(critT) > 0.98 and D / float(critD) > 0.7 and D / float(critD) < 1.4 ): Reg3.append(vals) else: Rho = D / float(critD) if Rho < 0.6: Reg4.append(vals) elif Rho < 1.5: Reg5.append(vals) else: Reg6.append(vals) else: for D, T, Prop in DataValues: T = float(T) Prop = float(Prop) D = float(D) vals = [D, T, Prop] if T < float(critT): if D < float(critD): Reg1.append(vals) else: Reg2.append(vals) else: if ( T / float(critT) < 1.1 and T / float(critT) > 0.98 and D / float(critD) > 0.7 and D / float(critD) < 1.4 ): Reg3.append(vals) else: Rho = D / float(critD) if Rho < 0.6: Reg4.append(vals) elif Rho < 1.5: Reg5.append(vals) else: Reg6.append(vals) return Reg1, Reg2, Reg3, Reg4, Reg5, Reg6
[docs]def sampleData(Regions, ratio): """ Sampling of the data regions """ global isothermIndex Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = Regions Indexes = [] ind1, ind2, ind3, ind4, ind5, ind6 = 0, 0, 0, 0, 0, 0 ind1_size = int(len(Reg1) / ratio) if len(Reg1) < ratio: ind1_size = len(Reg1) ind2_size = int(len(Reg2) / ratio) if len(Reg2) < ratio: ind2_size = len(Reg2) ind3_size = int(len(Reg3) / ratio) if len(Reg3) < ratio: ind3_size = len(Reg3) ind4_size = int(len(Reg4) / ratio) if len(Reg4) < ratio: ind4_size = len(Reg4) ind5_size = int(len(Reg5) / ratio) if len(Reg5) < ratio: ind5_size = len(Reg5) ind6_size = int(len(Reg6) / ratio) if len(Reg6) < ratio: ind6_size = len(Reg6) ind1 = np.random.choice(len(Reg1), size=ind1_size, replace=False) ind1 = np.asarray(ind1) Reg1s = [] for i in ind1: Reg1s.append(Reg1[i]) ind2 = np.random.choice(len(Reg2), size=ind2_size, replace=False) ind2 = np.asarray(ind2) Reg2s = [] for i in ind2: Reg2s.append(Reg2[i]) ind3 = np.random.choice(len(Reg3), size=ind3_size, replace=False) ind3 = np.asarray(ind3) Reg3s = [] for i in ind3: Reg3s.append(Reg3[i]) ind4 = np.random.choice(len(Reg4), size=ind4_size, replace=False) ind4 = np.asarray(ind4) Reg4s = [] for i in ind4: Reg4s.append(Reg4[i]) ind5 = np.random.choice(len(Reg5), size=ind5_size, replace=False) ind5 = np.asarray(ind5) Reg5s = [] for i in ind5: Reg5s.append(Reg5[i]) ind6 = np.random.choice(len(Reg6), size=ind6_size, replace=False) ind6 = np.asarray(ind6) Reg6s = [] for i in ind6: Reg6s.append(Reg6[i]) # ind = np.concatenate((ind1, ind2, ind3, ind4, ind5, ind6)) Total = 0 for x in [ len(Reg1s), len(Reg2s), len(Reg3s), len(Reg4s), len(Reg5s), len(Reg6s), ]: Total = Total + x Indexes.append(Total) if len(Reg1s) > 0: Reg1s.sort(key=lambda row: row[2:], reverse=False) # PUT BACK AFTER CHECK ENGLE try: isothermIndex = next( i for i, x in enumerate(Reg1s) if x[2] > float(critT) - 20 ) except Exception: pass Data= [] [Data.append(x) for x in Reg1s[:]] [Data.append(x) for x in Reg2s[:]] [Data.append(x) for x in Reg3s[:]] [Data.append(x) for x in Reg4s[:]] [Data.append(x) for x in Reg5s[:]] [Data.append(x) for x in Reg6s[:]] return Data, Indexes
[docs]def PVT(molecule, sample=False, ratio=5): """ Import pressure-volume-temperature data """ global PVTValues, PVTindexes, isothermIndex PVTValues, PVTindexes, isothermIndex = [], [], 0 rawfile = molecule + "PVT.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i > 1: line = line.strip() b = line.split() PVTValues.append(b[0:3]) i += 1 else: i += 1 Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = regionsOfData(molecule, PVTValues, PVT=True) if sample: PVTValues, PVTindexes = sampleData((Reg1, Reg2, Reg3, Reg4, Reg5, Reg6), ratio) else: Reg1.sort(key=lambda row: row[2:], reverse=False) if len(Reg1) > 0: try: isothermIndex = next( i for i, x in enumerate(Reg1) if x[2] > (float(critT) - 30) ) except Exception: pass Total = 0 for x in [len(Reg1), len(Reg2), len(Reg3), len(Reg4), len(Reg5), len(Reg6)]: Total = Total + x PVTindexes.append(Total) PVTValues = [] [PVTValues.append(x) for x in Reg1[:]] [PVTValues.append(x) for x in Reg2[:]] [PVTValues.append(x) for x in Reg3[:]] [PVTValues.append(x) for x in Reg4[:]] [PVTValues.append(x) for x in Reg5[:]] [PVTValues.append(x) for x in Reg6[:]]
[docs]def CP(molecule, sample=False, ratio=5): """ Import isobaric heat capacity data """ global CPValues, CPindexes CPValues, CPindexes = [], [] rawfile = molecule + "CP.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() CPValues.append(b[0:3]) else: i += 1 Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = regionsOfData(molecule, CPValues) if sample: CPValues, CPindexes = sampleData((Reg1, Reg2, Reg3, Reg4, Reg5, Reg6), ratio) else: Total = 0 for x in [len(Reg1), len(Reg2), len(Reg3), len(Reg4), len(Reg5), len(Reg6)]: if x == 0: CPindexes.append(0) else: Total = Total + x CPindexes.append(Total) CPValues = [] [CPValues.append(x) for x in Reg1[:]] [CPValues.append(x) for x in Reg2[:]] [CPValues.append(x) for x in Reg3[:]] [CPValues.append(x) for x in Reg4[:]] [CPValues.append(x) for x in Reg5[:]] [CPValues.append(x) for x in Reg6[:]]
[docs]def CV(molecule, sample=False, ratio=5): """ Import isochoric heat capacity """ global CVValues, CVindexes CVValues, CVindexes = [], [] rawfile = molecule + "CV.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() CVValues.append(b[0:3]) else: i += 1 Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = regionsOfData(molecule, CVValues, CV=True) if sample: CVValues, CVindexes = sampleData((Reg1, Reg2, Reg3, Reg4, Reg5, Reg6), ratio) else: Total = 0 for x in [len(Reg1), len(Reg2), len(Reg3), len(Reg4), len(Reg5), len(Reg6)]: if x == 0: CVindexes.append(0) else: Total = Total + x CVindexes.append(Total) CVValues = [] [CVValues.append(x) for x in Reg1[:]] [CVValues.append(x) for x in Reg2[:]] [CVValues.append(x) for x in Reg3[:]] [CVValues.append(x) for x in Reg4[:]] [CVValues.append(x) for x in Reg5[:]] [CVValues.append(x) for x in Reg6[:]]
[docs]def SND(molecule, sample=False, ratio=5): """ Import speed of sound data """ global SNDValues, SNDindexes SNDValues, SNDindexes = [], [] rawfile = molecule + "SND.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() SNDValues.append(b[0:3]) i += 1 else: i += 1 Reg1, Reg2, Reg3, Reg4, Reg5, Reg6 = regionsOfData(molecule, SNDValues) if sample: SNDValues, SNDindexes = sampleData((Reg1, Reg2, Reg3, Reg4, Reg5, Reg6), ratio) else: Total = 0 for x in [len(Reg1), len(Reg2), len(Reg3), len(Reg4), len(Reg5), len(Reg6)]: if x == 0: SNDindexes.append(0) else: Total = Total + x SNDindexes.append(Total) SNDValues = [] [SNDValues.append(x) for x in Reg1[:]] [SNDValues.append(x) for x in Reg2[:]] [SNDValues.append(x) for x in Reg3[:]] [SNDValues.append(x) for x in Reg4[:]] [SNDValues.append(x) for x in Reg5[:]] [SNDValues.append(x) for x in Reg6[:]]
[docs]def CP0(molecule): """ Import ideal isobaric heat capacity """ rawfile = molecule + "CP0.RAW" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i > 1: line = line.strip() b = line.split() CP0Values.append(b[0:2]) i += 1 else: i += 1
[docs]def DL(molecule): """ Import saturated liquid density """ rawfile = "" dataFile = "" try: rawfile = molecule + "DL.RAW" dataFile = open(filename + "/" + rawfile) except Exception: rawfile = molecule + "DL.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() DLValues.append(b[0:2]) i += 1 else: i += 1
[docs]def DV(molecule): """ Import of saturated vapor density """ rawfile = "" dataFile = "" try: rawfile = molecule + "DV.RAW" dataFile = open(filename + "/" + rawfile) except Exception: rawfile = molecule + "DV.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() DVValues.append(b[0:2]) i += 1 else: i += 1
[docs]def PV(molecule): """ Import saturated vapor pressure """ rawfile = "" dataFile = "" try: rawfile = molecule + "PV.RAW" dataFile = open(filename + "/" + rawfile) except Exception: rawfile = molecule + "PV.txt" dataFile = open(filename + "/" + rawfile) i = 0 for line in dataFile: if i != 0 and i != 1: line = line.strip() b = line.split() Values.append(b[0:2]) i += 1 else: i += 1
# def InSat(molecule): # # Cubic-ness # Tsat = float(critT) * 0.75 # DL = SoaveDensity.Sat_Liq_Density(Tsat) # DV = SoaveDensity.Sat_Vap_Density(Tsat) # for d in np.linspace(DV, DL, 10): # Dc = d / float(critD) # InSatValues.append([Dc, Tsat]) # return Tsat, DV, DL