def dichotomy(maxValue, minValue, press, sumheat, dQ, initVolume): error1 = -1 error2 = 1 k = minValue count = 0 while (abs(error1 - error2) > 0.00001): if (error1 * error2 < 0): maxValue = maxValue minValue = k k = (maxValue + minValue) / 2 h2 = seuif97.pt2h(press, k) rho2 = 1 / seuif97.pt2v(press, k) h2up = seuif97.pt2h(press, maxValue) rho2up = 1 / seuif97.pt2v(press, maxValue) error1 = (sumheat - dQ * 1) - (initVolume * rho2 * h2) error2 = (sumheat - dQ * 1) - (initVolume * rho2up * h2up) count = count + 1 else: maxValue = k minValue = minValue k = (maxValue + minValue) / 2 h2 = seuif97.pt2h(press, k) rho2 = seuif97.pt2v(press, k) h2down = seuif97.pt2h(press, minValue) rho2down = 1 / seuif97.pt2v(press, minValue) error1 = (sumheat - dQ * 1) - (initVolume * h2 * rho2) error2 = (sumheat - dQ * 1) - (initVolume * h2down * rho2down) count = count + 1 return k
def SteamFlow(inletstate, RatedState): inletstate['v'] = pt2v(inletstate['p'], inletstate['t']) RatedState['v'] = pt2v(RatedState['p'], RatedState['t']) inletstate['G'] = RatedState['G']*inletstate['p']/RatedState['p']\ *square(RatedState['p']*RatedState['v']/(inletstate['p']*inletstate['v'])) return inletstate['G']
def calcOverHeatSteam(tempe, maxValue, minValue, press, seconds, innerDiameter, outerDiameter, oneInsulaDiameter, twoInsulaDiameter, pipeLength, insulaType, sumheat): # 计算这一段管段产生的饱和水量 # 就当是这条管道是稳态的已经饱和的蒸汽 #dQ = calcheatLossPermeter(tempe,seconds) heatLossPerSquare = CalcOverHeadPipeThermalFlux(tempe, innerDiameter, outerDiameter, oneInsulaDiameter, twoInsulaDiameter, insulaType) dQ = heatLossPerSquare * math.pi * twoInsulaDiameter * 1e-3 * 3.6 * seconds / 3600 # 计算每米的热损,kJ initVolume = math.pi * pow( (twoInsulaDiameter / 2), 2) * 1e-6 # 单位:m^3 ,单位体积 h1 = seuif97.pt2h(press, tempe) # 输入的焓值,kJ/kg rho = 1 / seuif97.pt2v(press, tempe) # kg/m^3 #sumheat = h1 * rho * initVolume # 单位:kJ,管道中预留的总热量 mass = rho * initVolume * 1e-3 # 单位:t,管道中总的蒸汽质量 # 计算压降 #dropPress = calculateDropPressure(innerDiameter, pipeLength, mass, press, tempe) # Mpa # 二分法计算 outTempe = dichotomy(maxValue, minValue, press, sumheat, dQ, initVolume) # 出口的温度 sumheat = sumheat - dQ #press = press - dropPress # 出口的压强 return outTempe, press, heatLossPerSquare, dQ, rho, h1, sumheat
def calculateDropPressure(innerDiameter, pipeLength, flowMass, press, tempe): #flowRate:流速(m/s); #innerDiameter: 管道内径(mm) #mu :介质的动力粘度(pa*s) #V_steam:介质的比容(m^3/kg) press = press + 0.1 absRough = 0.0457 KinematicViscosity = seuif97.pt(press, tempe, 25) # 运动粘度 volume = seuif97.pt2v(1, 300) dynamicViscosity = KinematicViscosity / volume #Pas rhoSteam = 1 / volume #计算雷诺数,确定管道的摩擦阻力系数 reynold = flowMass * innerDiameter * 1e-3 / (dynamicViscosity * volume ) #雷诺数 a = -2 * math.log10(absRough / (innerDiameter * 3.7) + 12 / reynold) b = -2 * math.log10(absRough / (innerDiameter * 3.7) + 2.51 * a / reynold) mediumValueNum1 = pow((a - 4.781), 2) mediumValueNum2 = b - 2 * a + 4.781 lambda1 = pow(4.781 - mediumValueNum1 / mediumValueNum2, -2) #k = 1.15; % 修正系数 dropPressure = lambda1 * pipeLength * rhoSteam * pow( flowMass, 2) * 1e-6 / (2 * innerDiameter * 1e-3) #MPa return dropPressure
def pt(self): self.h = if97.pt2h(self.p, self.t) self.s = if97.pt2s(self.p, self.t) self.v = if97.pt2v(self.p, self.t) self.x = None
count = 0 tempelist,pressList = [],[] sumTime = 0 innerDiameter = 150 outerDiameter = 159 oneInsulaThick = 60 twoInsulaThick = 50 pipeLength = 87 oneInsulaDiameter = outerDiameter + 2 * oneInsulaThick twoInsulaDiameter = oneInsulaDiameter + 2 * twoInsulaThick insulaType = ['GSL','GLASS'] #原管道中的蒸汽质量 initVolume = math.pi * pow((twoInsulaDiameter / 2), 2) * 1e-6 # 单位:m^3 ,单位体积 rho1 = 1 / seuif97.pt2v(press, tempe) # kg/m^3 massSteam = rho1 * initVolume # 单位:kg,管道中总的蒸汽质量 sumtime,heatLossPerSquareList,heatLossPerMeterList, rhoList, hList, sumHeatList = [],[],[],[],[],[] # 初始的温度和压强下每米管道的蒸汽总热量 initVolume = math.pi * pow((twoInsulaDiameter / 2), 2) * 1e-6 # 单位:m^3 ,单位体积 h1 = seuif97.pt2h(press, tempe) # 输入的焓值,kJ/kg rho = 1 / seuif97.pt2v(press, tempe) # kg/m^3 sumheat = h1 * rho * initVolume # 单位:kJ,管道中预留的总热量 # 过热蒸汽到饱和蒸汽的过渡计算 while abs(tempe - satT) > 0.5: maxValue = tempe minValue = tempe - 1
def pt(self): self.h = if97.pt2h(self.p, self.t) self.s = if97.pt2s(self.p, self.t) self.v = if97.pt2v(self.p, self.t) self.x = None
1 ??2?(in1,in2) , e.g: h=pt2h(p,t) 2 ??(in1,in2,propertyID), , e.g: h=pt(p,t,4), the propertyID h is 4 License: this code is in the public domain Author: Cheng Maohua([email protected]) Last modified: 2018.11.28 """ import seuif97 p, t = 16.10, 535.10 # ??2?(in1,in2) h = seuif97.pt2h(p, t) s = seuif97.pt2s(p, t) v = seuif97.pt2v(p, t) print("(p,t),h,s,v:", "{:>.2f}\t {:>.2f}\t {:>.2f}\t {:>.3f}\t {:>.4f}".format(p, t, h, s, v)) # ??(in1,in2,propertyid) t = seuif97.ph(p, h, 1) s = seuif97.ph(p, h, 5) v = seuif97.ph(p, h, 3) print("(p,h),t,s,v:", "{:>.2f}\t {:>.2f}\t {:>.2f}\t {:>.3f}\t {:>.4f}".format(p, h, t, s, v))