public static CalcResult ElementCalc1(string fluid, double l, double Aa_fin, double Aa_tube, double A_r_cs, double Ar, Geometry geo, double tai, double RHi, double tri, double pri, double hri, double mr, double g, double ma, double ha, double haw, double eta_surface, double zh, double zdp, int hexType, double thickness, double conductivity, AbstractState coolprop, double[,] SourceTableData) { Model.HumidAirProp humidairprop = new Model.HumidAirProp(); RHi = RHi > 1 ? 1 : RHi; double dh = geo.Di; double r_metal = thickness / conductivity / Ar; double gg = 9.8; double q_initial = 0.01; double q = q_initial; bool flag = false; double err = 0.01; int iter = 1; CalcResult res = new CalcResult(); double EnthalpyL, EnthalpyV; coolprop.update(input_pairs.PQ_INPUTS, pri * 1000, 0); tri = coolprop.T() - 273.15; //tri = CoolProp.PropsSI("T", "P", pri * 1000, "Q", 0, fluid) - 273.15; coolprop.update(input_pairs.QT_INPUTS, 0, tri + 273.15); EnthalpyL = coolprop.hmass() / 1000; //EnthalpyL = CoolProp.PropsSI("H", "T", tri + 273.15, "Q", 0, fluid) / 1000; coolprop.update(input_pairs.QT_INPUTS, 1, tri + 273.15); EnthalpyV = coolprop.hmass() / 1000; //EnthalpyV = CoolProp.PropsSI("H", "T", tri + 273.15, "Q", 1, fluid) / 1000; res.x_i = (hri - EnthalpyL) / (EnthalpyV - EnthalpyL); RefHTCandDPResult htc_dp = new RefHTCandDPResult(); do { flag = false; htc_dp = RefrigerantHTCandDP.HTCandDP_2p(fluid, dh, g, pri, res.x_i, l, q, zh, zdp, hexType, coolprop); res.href = htc_dp.Href; res.DP = htc_dp.DPref; double k_fin = 237; double Fthickness = geo.Fthickness; double Pt = geo.Pt; double Pr = geo.Pr; double Do = geo.Do; double r_eta = Do / 2; double XD = Math.Pow((Pr * Pr + Pt * Pt / 4), 0.5) / 2; double XT = Pt / 2; double rf_r = 1.27 * XT / r_eta * Math.Pow((XD / XT - 0.3), 0.5); double m = Math.Pow((2 * ha / k_fin / Fthickness), 0.5); double fai = (rf_r - 1) * (1 + (0.3 + Math.Pow((m * r_eta * (rf_r - r_eta) / 2.5), (1.5 - 1 / 12 * rf_r)) * (0.26 * Math.Pow(rf_r, 0.3) - 0.3)) * Math.Log(rf_r)); double eta_0 = Math.Tanh(m * r_eta * fai) / m / r_eta / fai * Math.Cos(0.1 * m * r_eta * fai); double eta_a = (eta_0 * Aa_fin + Aa_tube) / (Aa_fin + Aa_tube); //// //double cp_a0 = CoolProp.HAPropsSI("C", "T", tai + 273.15, "P", 101325, "R", RHi); //double cp_a = 1005.1458551 + 0.1541627 * tai + 4.3454442 * RHi - 0.0090904 * Math.Pow(tai, 2) - 0.3409659 * Math.Pow(RHi, 2) - 0.0007819 * tai * RHi + 0.0001851 * Math.Pow(tai, 3) + 0.0049274 * Math.Pow(RHi, 3) + 0.0476513 * tai * Math.Pow(RHi, 2) + 0.020268209 * Math.Pow(tai, 2) * RHi; double cp_a = humidairprop.Cp(tai, RHi, SourceTableData); double UA = 1 / (1 / ha / (Aa_fin * eta_0 + Aa_tube) + 1 / (res.href * Ar) + r_metal); double Ntu_dry = UA / (ma * cp_a); double epsilon_dry = 1 - Math.Exp(-Ntu_dry); double Q_dry = epsilon_dry * ma * cp_a * (tai - tri) * Math.Pow(-1, hexType); double tao = tai - Q_dry / (ma * cp_a) * Math.Pow(-1, hexType); double hro = hri + Q_dry / 1000 / mr * Math.Pow(-1, hexType); double UA_o = ha * (Aa_fin * eta_0 + Aa_tube); double UA_i = res.href * Ar; double NTU_o = UA_o / (cp_a * ma); double T_so_a = (UA_o * tai + UA_i * tri) / (UA_o + UA_i); double T_so_b = (UA_o * tao + UA_i * tri) / (UA_o + UA_i); double Q = Q_dry; double Q_sensible = 0; //double omega_in0 = CoolProp.HAPropsSI("W", "T", tai + 273.15, "P", 101325, "R", RHi); //double omega_in = (-0.0682340 + 0.0292341 * tai + 4.1604535 * RHi - 0.0025985 * Math.Pow(tai, 2) - 0.0769009 * Math.Pow(RHi, 2) + 0.1246489 * tai * RHi + 6.008 * Math.Pow(10, -5) * Math.Pow(tai, 3) - 0.0006775 * Math.Pow(RHi, 3) + 0.0267183 * tai * Math.Pow(RHi, 2) + 0.019904969 * Math.Pow(tai, 2) * RHi) / 1000; double omega_in = humidairprop.O(tai, RHi, SourceTableData); //double hai0 = CoolProp.HAPropsSI("H", "T", tai + 273.15, "P", 101325, "R", RHi); //double hai = -244.2924077 + 1135.8711 * tai + 10101.404 * RHi - 12.968219 * Math.Pow(tai, 2) - 11.356807 * Math.Pow(RHi, 2) + 357.25464 * tai * RHi + 0.3178346 * Math.Pow(tai, 3) - 0.0024329 * Math.Pow(RHi, 3) + 44.100799 * tai * Math.Pow(RHi, 2) + 50.31444812 * Math.Pow(tai, 2) * RHi; double hai = humidairprop.H(tai, "R", RHi, SourceTableData); //double ha2 = ((1.006 + 1.805 * omega_in1) * tai + 2501 * omega_in1) * 1000;//采用湿空气 物性的关系来写 //double omega_out = omega_in; double hout_a = hai - Q / ma * Math.Pow(-1, hexType); ///// //***delete***// //res.RHout = CoolProp.HAPropsSI("R", "T", tao + 273.15, "P", 101325, "W", omega_out); //res.RHout = 0.0215344 - 0.0059467 * tao + 0.2386894 * (omega_out * 1000) + 0.0004378 * Math.Pow(tao, 2) + 0.0004635 * Math.Pow((omega_out * 1000), 2) - 0.0125912 * tao * (omega_out * 1000) - 9.134 * Math.Pow(10, -6) * Math.Pow(tao, 3) + 1.696 * Math.Pow(10, -6) * Math.Pow((omega_out * 1000), 3) - 2.214 * Math.Pow(10, -5) * tao * Math.Pow((omega_out * 1000), 2) + 0.000200865 * Math.Pow(tao, 2) * (omega_out * 1000); //***delete***// //double resRHout0 = CoolProp.HAPropsSI("R", "T", tao + 273.15, "P", 101325, "H", hout_a); //res.RHout = 0.0259124 - 0.0996818 * tao + 0.0934877 * (hout_a / 1000) + 0.0040018 * Math.Pow(tao, 2) - 0.0003662 * Math.Pow((hout_a / 1000), 2) - 0.0034077 * tao * (hout_a / 1000) - 1.76447 * Math.Pow(10, -5) * Math.Pow(tao, 3) - 2.74524 * Math.Pow(10, -6) * Math.Pow((hout_a / 1000), 3) + 2.99291 * Math.Pow(10, -5) * tao * Math.Pow((hout_a / 1000), 2) - 9.56644 * Math.Pow(10, -6) * Math.Pow(tao, 2) * (hout_a / 1000); double Tdp_out = humidairprop.Ts(hout_a, SourceTableData); res.RHout = humidairprop.RHI(tao, Tdp_out, SourceTableData); double f_dry = 0; if (hexType == 0 && tri < tai) { double hao = 0; //double Tdp0 = CoolProp.HAPropsSI("D", "T", tai + 273.15, "P", 101325, "R", RHi) - 273.15; //double Tdp = -273.15 + 241.0212518 + 0.5718833 * tai + 84.99553 * RHi + 0.002691 * Math.Pow(tai, 2) - 95.003186 * Math.Pow(RHi, 2) + 0.7135779 * tai * RHi - 2.691 / Math.Pow(10, 5) * Math.Pow(tai, 3) + 42.58183 * Math.Pow(RHi, 3) - 0.3227474 * tai * Math.Pow(RHi, 2) - 0.000884612 * Math.Pow(tai, 2) * RHi; double Tdp = humidairprop.Tdp(tai, RHi, SourceTableData); /* * double Ps = omega_in * 101325 / (0.622 + omega_in); * double Tdp1 = -39.957 - 1.8762 * Math.Log(Ps) + 1.1689 * Math.Pow(Math.Log(Ps), 2); * double Tdp3 = 8.22 + 12.4 * Math.Log(Ps) + 1.9 * Math.Pow(Math.Log(Ps), 2); * if (Tdp1 <= 0) * { * Tdp1 = -60.45 + 7.0322 * Math.Log(Ps) + 0.37 * Math.Pow(Math.Log(Ps), 2); * } */ if (T_so_b > Tdp) { f_dry = 1.0; Q = Q_dry; Q_sensible = Q; //omega_out = omega_in; } else { double T_ac = 0; double h_ac = 0; if (T_so_a < Tdp) { f_dry = 0.0; Q_dry = 0.0; T_ac = tai; h_ac = hai; } else { T_ac = Tdp + UA_i / UA_o * (Tdp - tri); epsilon_dry = (tai - T_ac) / (tai - tri); f_dry = -1.0 / Ntu_dry * Math.Log(1.0 - epsilon_dry); //double h_ac0 = CoolProp.HAPropsSI("H", "T", T_ac + 273.15, "P", 101325, "W", omega_in); //h_ac = -244.2924077 + 1135.8711 * T_ac + 10101.404 * RHi - 12.968219 * Math.Pow(T_ac, 2) - 11.356807 * Math.Pow(RHi, 2) + 357.25464 * T_ac * RHi + 0.3178346 * Math.Pow(T_ac, 3) - 0.0024329 * Math.Pow(RHi, 3) + 44.100799 * T_ac * Math.Pow(RHi, 2) + 50.31444812 * Math.Pow(T_ac, 2) * RHi; h_ac = humidairprop.H(T_ac, "Omega", omega_in, SourceTableData); Q_dry = ma * cp_a * (tai - T_ac); } //double h1 = 58.732687 * Math.Pow(tri + 273.15 + 0.01, 2) - 30921.970577 * (tri + 273.15 + 0.01) + 4075493.951473; double h1 = humidairprop.H(tri + 0.01, "R", 1, SourceTableData); //double h2 = 58.732687 * Math.Pow(tri + 273.15 - 0.01, 2) - 30921.970577 * (tri + 273.15 - 0.01) + 4075493.951473; double h2 = humidairprop.H(tri - 0.01, "R", 1, SourceTableData); double c_s = (h1 - h2) / 0.02; //double c_s0 = (CoolProp.HAPropsSI("H", "T", tri + 273.15 + 0.01, "P", 101325, "R", 1.0) - CoolProp.HAPropsSI("H", "T", tri + 273.15 - 0.01, "P", 101325, "R", 1.0)) / 0.02; m = Math.Pow((2 * haw / k_fin / Fthickness), 0.5); fai = (rf_r - 1) * (1 + (0.3 + Math.Pow((m * r_eta * (rf_r - r_eta) / 2.5), (1.5 - 1 / 12 * rf_r)) * (0.26 * Math.Pow(rf_r, 0.3) - 0.3)) * Math.Log(rf_r)); double eta_wet = Math.Tanh(m * r_eta * fai) / m / r_eta / fai * Math.Cos(0.1 * m * r_eta * fai); //eta_a = (eta_0 * Aa_fin + Aa_tube) / (Aa_fin + Aa_tube); UA_o = haw * (eta_wet * Aa_fin + Aa_tube); NTU_o = UA_o / (ma * cp_a); double UA_wet = 1 / (c_s / UA_i + cp_a / UA_o); double Ntu_wet = UA_wet / ma; double epsilon_wet = 1 - Math.Exp(-(1 - f_dry) * Ntu_wet); //double h_s_s_o0 = CoolProp.HAPropsSI("H", "T", tri + 273.15, "P", 101325, "R", 1.0); //double h_s_s_o = 58.732687 * Math.Pow(tri + 273.15, 2) - 30921.970577 * (tri + 273.15 - 0.01) + 4075493.951473; double h_s_s_o = humidairprop.H(tri, "R", 1, SourceTableData); double Q_wet = epsilon_wet * ma * (h_ac - h_s_s_o); Q = Q_wet + Q_dry; hao = h_ac - Q_wet / ma; double h_s_s_e = h_ac - (h_ac - hao) / (1 - Math.Exp(-(1 - f_dry) * NTU_o)); //double T_s_e0 = CoolProp.HAPropsSI("T","H",h_s_s_e,"P",101325,"R",1.0)-273.15; //double T_s_e = -273.15 - 1.96 * Math.Pow(10, -3) * Math.Pow(h_s_s_e / 1000, 2) + 0.5357597 * h_s_s_e / 1000 + 268.871551; double T_s_e = humidairprop.Ts(h_s_s_e, SourceTableData); tao = T_s_e + (T_ac - T_s_e) * Math.Exp(-(1 - f_dry) * NTU_o); Q_sensible = ma * cp_a * (tai - tao); hro = hri + Q / 1000 / mr; } hout_a = hai - Q / ma * Math.Pow(-1, hexType); //double resRHout00 = CoolProp.HAPropsSI("R", "T", tao + 273.15, "P", 101325, "H", hout_a); //res.RHout = 0.0259124 - 0.0996818 * tao + 0.0934877 * (hout_a / 1000) + 0.0040018 * Math.Pow(tao, 2) - 0.0003662 * Math.Pow((hout_a / 1000), 2) - 0.0034077 * tao * (hout_a / 1000) - 1.76447 * Math.Pow(10, -5) * Math.Pow(tao, 3) - 2.74524 * Math.Pow(10, -6) * Math.Pow((hout_a / 1000), 3) + 2.99291 * Math.Pow(10, -5) * tao * Math.Pow((hout_a / 1000), 2) - 9.56644 * Math.Pow(10, -6) * Math.Pow(tao, 2) * (hout_a / 1000); Tdp_out = humidairprop.Ts(hout_a, SourceTableData); res.RHout = humidairprop.RHI(tao, Tdp_out, SourceTableData); if (res.RHout > 1) { res.RHout = 1; //double tao0 = CoolProp.HAPropsSI("T", "H", hao, "P", 101325, "R", 1)-273.15; //tao = -273.15 - 1.96 * Math.Pow(10, -3) * Math.Pow(hao / 1000, 2) + 0.5357597 * hao / 1000 + 268.871551; tao = humidairprop.Ts(hao, SourceTableData); Q_sensible = ma * cp_a * (tai - tao); } } res.R_1a = 1 / ((eta_0 * Aa_fin + Aa_tube) * ha); res.R_1r = 1 / (res.href * Ar); res.R_1 = res.R_1a + res.R_1r + r_metal; res.Q = Q / 1000; res.Tao = tao; res.hro = hro; res.Pro = pri - res.DP; if (res.Pro < 0) { res.Pro = -10000000; return(res); } coolprop.update(input_pairs.HmassP_INPUTS, res.hro * 1000, res.Pro * 1000); res.Tro = coolprop.T() - 273.15; //res.Tro = CoolProp.PropsSI("T", "P", res.Pro * 1000, "H", res.hro * 1000, fluid); double rho_o = coolprop.rhomass(); //double rho_o = CoolProp.PropsSI("D", "P", res.Pro * 1000, "H", res.hro * 1000, fluid); res.Vel_r = g / rho_o; res.x_o = (res.hro - EnthalpyL) / (EnthalpyV - EnthalpyL); //+ 139.17 for reference state, to be changed if (Math.Abs(q - res.Q) / res.Q > err) { q = res.Q; flag = true; } iter++; } while (flag && iter < 20); //if (iter >= 20) //{ // throw new Exception("iter for href > 100."); //} return(res); }
public static CalcResult ElementCalc3(string fluid, double l, double Aa_fin, double Aa_tube, double A_r_cs, double Ar, Geometry geo, double tai, double RHi, double tri, double pri, double hri, double mr, double g, double ma, double ha, double haw, double eta_surface, double zh, double zdp, int hexType, double thickness, double conductivity, double Pwater, AbstractState coolprop, double[,] SourceTableData) { Model.HumidAirProp humidairprop = new Model.HumidAirProp(); RHi = RHi > 1 ? 1 : RHi; double dh = geo.Di; double Q = 0; double Tout_a = 0; double Q_sensible = 0; double r_metal = thickness / conductivity / Ar; CalcResult res = new CalcResult(); coolprop.update(input_pairs.HmassP_INPUTS, hri * 1000, (fluid == "Water" ? Pwater : pri) * 1000); double mu_r = coolprop.viscosity(); //double mu_r = CoolProp.PropsSI("V", "H", hri * 1000, "P", (fluid == "Water" ? Pwater : pri) * 1000, fluid); double k_r = coolprop.conductivity(); //double k_r = CoolProp.PropsSI("L", "H", hri * 1000, "P", (fluid == "Water" ? Pwater : pri) * 1000, fluid); double rho_r = coolprop.rhomass(); //double rho_r = CoolProp.PropsSI("D", "H", hri * 1000, "P", (fluid == "Water" ? Pwater : pri) * 1000, fluid); double cp_r = coolprop.cpmass(); //double cp_r = CoolProp.PropsSI("C", "H", hri * 1000, "P", (fluid == "Water" ? Pwater : pri) * 1000, fluid); double Pr_r = cp_r * mu_r / k_r; res.Vel_r = g / rho_r; double Re_r = rho_r * res.Vel_r * dh / mu_r; double fh = RefrigerantSPHTC.ff_CHURCHILL(Re_r); double Nusselt = RefrigerantSPHTC.NU_GNIELINSKI(Re_r, Pr_r, fh); res.href = Nusselt * k_r / dh * zh; double cp_da = 1.0; cp_da = (hexType == 0 ? 1.027 : 1.02) * 1000; double Tin_a = tai; double Tin_r = tri; //double cp_da0 = CoolProp.HAPropsSI("C", "T", Tin_a + 273.15, "P", 101325, "R", RHi); //cp_da = 1005.1458551 + 0.1541627 * Tin_a + 4.3454442 * RHi - 0.0090904 * Math.Pow(Tin_a, 2) - 0.3409659 * Math.Pow(RHi, 2) - 0.0007819 * Tin_a * RHi + 0.0001851 * Math.Pow(Tin_a, 3) + 0.0049274 * Math.Pow(RHi, 3) + 0.0476513 * Tin_a * Math.Pow(RHi, 2) + 0.020268209 * Math.Pow(Tin_a, 2) * RHi; cp_da = humidairprop.Cp(Tin_a, RHi, SourceTableData); double h_r = res.href; double k_fin = 237; double Fthickness = geo.Fthickness; double Pt = geo.Pt; double Pr = geo.Pr; double Do = geo.Do; //double h_fin = (Pt - Do) / 2; //double dc = Do + 2 * Fthickness; //double df = Math.Pow(4 / Math.PI * Pt * Pr, 0.5); //double eta_a = 1 / (1 + ha * Math.Pow(df - dc, 2) * Math.Pow(df, 0.5) / 6 / Fthickness / k_fin / Math.Pow(dc, 0.5)); //double m = Math.Sqrt(2 * ha / (k_fin * Fthickness)); //double eta_a= Math.Tanh(m * h_fin) / (m * h_fin);// may cause error //double eta_dry = eta_surface; double r_eta = Do / 2; double XD = Math.Pow((Pr * Pr + Pt * Pt / 4), 0.5) / 2; double XT = Pt / 2; double rf_r = 1.27 * XT / r_eta * Math.Pow((XD / XT - 0.3), 0.5); double m = Math.Pow((2 * ha / k_fin / Fthickness), 0.5); double fai = (rf_r - 1) * (1 + (0.3 + Math.Pow((m * r_eta * (rf_r - r_eta) / 2.5), (1.5 - 1 / 12 * rf_r)) * (0.26 * Math.Pow(rf_r, 0.3) - 0.3)) * Math.Log(rf_r)); double eta_0 = Math.Tanh(m * r_eta * fai) / m / r_eta / fai * Math.Cos(0.1 * m * r_eta * fai); double eta_a = (eta_0 * Aa_fin + Aa_tube) / (Aa_fin + Aa_tube); double UA_i = h_r * Ar; double UA_o = eta_a * (Aa_fin + Aa_tube) * ha; double Ntu_i = UA_i / (mr * cp_r); double Ntu_o = UA_o / (ma * cp_da); double UA = 1 / (1 / (UA_i) + 1 / (UA_o) + r_metal); double Cmin = Math.Min(cp_r * mr, cp_da * ma); double Cmax = Math.Max(cp_r * mr, cp_da * ma); double C_star = Cmin / Cmax; double Ntu_dry = UA / Cmin; double epsilon_dry = (1 - Math.Exp(-Ntu_dry * (1 - C_star))) / (1 - C_star * Math.Exp(-Ntu_dry * (1 - C_star))); double Q_dry = epsilon_dry * Cmin * (Tin_a - Tin_r) * Math.Pow(-1, hexType);//need to be modified//所以蒸发器算不出Q double Tout_a_dry = Tin_a - Q_dry / (ma * cp_da) * Math.Pow(-1, hexType); double Tout_r = Tin_r + Q_dry / (mr * cp_r) * Math.Pow(-1, hexType); double Tout_s = (UA_o * Tout_a_dry + UA_i * Tin_r) / (UA_o + UA_i); double Tin_s = (UA_o * Tin_a + UA_i * Tout_r) / (UA_o + UA_i); double Tout_r_dry = Tout_r; double f_dry = 1.0; //double omega_in0 = CoolProp.HAPropsSI("W", "T", Tin_a + 273.15, "P", 101325, "R", RHi); //double omega_in = (-0.0682340 + 0.0292341 * Tin_a + 4.1604535 * RHi - 0.0025985 * Math.Pow(Tin_a, 2) - 0.0769009 * Math.Pow(RHi, 2) + 0.1246489 * Tin_a * RHi + 6.008 * Math.Pow(10, -5) * Math.Pow(Tin_a, 3) - 0.0006775 * Math.Pow(RHi, 3) + 0.0267183 * Tin_a * Math.Pow(RHi, 2) + 0.019904969 * Math.Pow(Tin_a, 2) * RHi) / 1000; double omega_in = humidairprop.O(Tin_a, RHi, SourceTableData); //double omega_out = omega_in; double hin_a = 0; if (hexType == 0 && tri < tai) { bool isFullyWet = true; //double hin_a0 = CoolProp.HAPropsSI("H", "T", Tin_a + 273.15, "P", 101325, "R", RHi); //hin_a = -244.2924077 + 1135.8711 * Tin_a + 10101.404 * RHi - 12.968219 * Math.Pow(Tin_a, 2) - 11.356807 * Math.Pow(RHi, 2) + 357.25464 * Tin_a * RHi + 0.3178346 * Math.Pow(Tin_a, 3) - 0.0024329 * Math.Pow(RHi, 3) + 44.100799 * Tin_a * Math.Pow(RHi, 2) + 50.31444812 * Math.Pow(Tin_a, 2) * RHi; hin_a = humidairprop.H(Tin_a, "R", RHi, SourceTableData); double hout_a = hin_a - Q_dry / ma * Math.Pow(-1, hexType); //double Tdp0 = CoolProp.HAPropsSI("D", "T", Tin_a + 273.15, "P", 101325, "R", RHi) - 273.15; //double Tdp = -273.15 + 241.0212518 + 0.5718833 * tai + 84.99553 * RHi + 0.002691 * Math.Pow(tai, 2) - 95.003186 * Math.Pow(RHi, 2) + 0.7135779 * tai * RHi - 2.691 / Math.Pow(10, 5) * Math.Pow(tai, 3) + 42.58183 * Math.Pow(RHi, 3) - 0.3227474 * tai * Math.Pow(RHi, 2) - 0.000884612 * Math.Pow(tai, 2) * RHi; double Tdp = humidairprop.Tdp(Tin_a, RHi, SourceTableData); //***delete***// //res.RHout = CoolProp.HAPropsSI("R", "T", Tout_a_dry + 273.15, "P", 101325, "W", omega_out); //res.RHout = 0.0215344 - 0.0059467 * Tout_a_dry + 0.2386894 * (omega_out * 1000) + 0.0004378 * Math.Pow(Tout_a_dry, 2) + 0.0004635 * Math.Pow((omega_out * 1000), 2) - 0.0125912 * Tout_a_dry * (omega_out * 1000) - 9.134 * Math.Pow(10, -6) * Math.Pow(Tout_a_dry, 3) + 1.696 * Math.Pow(10, -6) * Math.Pow((omega_out * 1000), 3) - 2.214 * Math.Pow(10, -5) * Tout_a_dry * Math.Pow((omega_out * 1000), 2) + 0.000200865 * Math.Pow(Tout_a_dry, 2) * (omega_out * 1000); //***delete***// //res.RHout = CoolProp.HAPropsSI("R", "T", Tout_a_dry + 273.15, "P", 101325, "H", hout_a); //double resRHout0 = CoolProp.HAPropsSI("R", "T", Tout_a_dry + 273.15, "P", 101325, "H", hout_a); //res.RHout = 0.0259124 - 0.0996818 * Tout_a_dry + 0.0934877 * (hout_a / 1000) + 0.0040018 * Math.Pow(Tout_a_dry, 2) - 0.0003662 * Math.Pow((hout_a / 1000), 2) - 0.0034077 * Tout_a_dry * (hout_a / 1000) - 1.76447 * Math.Pow(10, -5) * Math.Pow(Tout_a_dry, 3) - 2.74524 * Math.Pow(10, -6) * Math.Pow((hout_a / 1000), 3) + 2.99291 * Math.Pow(10, -5) * Tout_a_dry * Math.Pow((hout_a / 1000), 2) - 9.56644 * Math.Pow(10, -6) * Math.Pow(Tout_a_dry, 2) * (hout_a / 1000); //double Tdp_out0 = CoolProp.HAPropsSI("T", "H", hout_a, "P", 101325, "R", 1.0) - 273.15;//@@@@@@@@@@@@@@@@@@@@@@@@@@ double Tdp_out = humidairprop.Ts(hout_a / 1000, SourceTableData); res.RHout = humidairprop.RHI(Tout_a_dry, Tdp_out, SourceTableData); Tout_a = Tout_a_dry; Q = Q_dry; if (Tin_s < Tdp) { isFullyWet = true; } else { isFullyWet = false; } if (Tout_s < Tdp | isFullyWet == true) { double x1 = Tin_r + 0.001; double x2 = Tin_a - 0.001; double eps = 1e-8; int iter = 1; double change = 999; double y1 = 0, y2 = 0, x3 = 0; double m_star = 0, epsilon_wet = 0, h_s_w_i = 0, h_s_w_o = 0, h_s_s_e = 0, T_s_e = 0, h_a_x = 0, T_a_x = 0; double Q_wet = 0, Ntu_owet = 0, mdot_min = 0; double Ntu_wet = 0; while ((iter <= 3 | change > eps) && iter < 100) { if (iter == 1) { Tout_r = x1; } if (iter > 1) { Tout_r = x2; } double Tout_r_start = Tout_r; //double h_s_w_i0 = CoolProp.HAPropsSI("H", "T", Tin_r + 273.15, "P", 101325, "R", 1.0); //h_s_w_i = 58.732687 * Math.Pow(Tin_r + 273.15, 2) - 30921.970577 * (Tin_r + 273.15) + 4075493.951473; h_s_w_i = humidairprop.H(Tin_r, "R", 1, SourceTableData); /////// //double h10 = 58.732687 * Math.Pow((Tin_r + Tout_r) / 2 + 273.15 + 0.01, 2) - 30921.970577 * ((Tin_r + Tout_r) / 2 + 273.15 + 0.01) + 4075493.951473; double h1 = humidairprop.H((Tin_r + Tout_r) / 2 + 0.01, "R", 1, SourceTableData); //double h20 = 58.732687 * Math.Pow((Tin_r + Tout_r) / 2 + 273.15, 2) - 30921.970577 * ((Tin_r + Tout_r) / 2 + 273.15 ) + 4075493.951473; double h2 = humidairprop.H((Tin_r + Tout_r) / 2, "R", 1, SourceTableData); double c_s = (h1 - h2) / 0.01; //double c_s = (CoolProp.HAPropsSI("H", "T", (Tin_r + Tout_r) / 2 + 273.15 + 0.01, "P", 101325, "R", 1) - CoolProp.HAPropsSI("H", "T", (Tin_r + Tout_r) / 2 + 273.15, "P", 101325, "R", 1)) / 0.01; //double c_s = 2500; //m = Math.Sqrt(2 * ha*c_s/cp_da / (k_fin * Fthickness)); //eta_a= Math.Tanh(m * h_fin) / (m * h_fin);// may cause error //double m_star=ma/(mr*(cp_r/c_s)); //eta_a = eta_a * c_s / cp_da; m = Math.Pow((2 * haw / k_fin / Fthickness), 0.5); fai = (rf_r - 1) * (1 + (0.3 + Math.Pow((m * r_eta * (rf_r - r_eta) / 2.5), (1.5 - 1 / 12 * rf_r)) * (0.26 * Math.Pow(rf_r, 0.3) - 0.3)) * Math.Log(rf_r)); eta_0 = Math.Tanh(m * r_eta * fai) / m / r_eta / fai * Math.Cos(0.1 * m * r_eta * fai); double eta_wet = (eta_0 * Aa_fin + Aa_tube) / (Aa_fin + Aa_tube); Ntu_owet = (eta_0 * Aa_fin + Aa_tube) * haw / (ma * cp_da);//zzc m_star = Math.Min(cp_r * mr / c_s, ma) / Math.Max(cp_r * mr / c_s, ma); mdot_min = Math.Min(cp_r * mr / c_s, ma); Ntu_wet = Ntu_owet / (1 + m_star * (Ntu_owet / Ntu_i));//zzc if (cp_r * mr > c_s * ma) { Ntu_wet = Ntu_owet / (1 + m_star * (Ntu_owet / Ntu_i));//zzc } else { Ntu_wet = Ntu_i / (1 + m_star * (Ntu_i / Ntu_owet)); } epsilon_wet = ((1 - Math.Exp(-Ntu_wet * (1 - m_star))) / (1 - m_star * Math.Exp(-Ntu_wet * (1 - m_star)))); Q_wet = epsilon_wet * mdot_min * (hin_a - h_s_w_i); hout_a = hin_a - Q_wet / ma; Tout_r = Tin_r + ma / (mr * cp_r) * (hin_a - hout_a); //double h_s_w_o0 = CoolProp.HAPropsSI("H", "T", Tout_r + 273.15, "P", 101325, "R", 1.0); //h_s_w_o = 58.732687 * Math.Pow(Tout_r + 273.15, 2) - 30921.970577 * (Tout_r + 273.15) + 4075493.951473; h_s_w_o = humidairprop.H(Tout_r, "R", 1, SourceTableData); //double UA_star = 1 / (cp_da / (eta_a * Aa_fin + Aa_tube) / haw + CoolProp.HAPropsSI("C", "T", (Tin_a + Tout_r) / 2.0 + 273.15, "P", 101325, "R", 1) / h_r / Ar);//zzc double UA_star = 1 / (cp_da / (eta_a * Aa_fin + Aa_tube) / haw + c_s / h_r / Ar); //zzc Tin_s = Tout_r + UA_star / h_r / Ar * (hin_a - h_s_w_o); h_s_s_e = hin_a + (hout_a - hin_a) / (1 - Math.Exp(-Ntu_owet)); //zzc //double T_s_e0 = CoolProp.HAPropsSI("T", "H", h_s_s_e, "P", 101325, "R", 1.0) - 273.15; //T_s_e = -273.15 - 1.96 * Math.Pow(10, -3) * Math.Pow(h_s_s_e / 1000, 2) + 0.5357597 * h_s_s_e / 1000 + 268.871551; T_s_e = humidairprop.Ts(h_s_s_e, SourceTableData); Tout_a = T_s_e + (Tin_a - T_s_e) * Math.Exp(-Ntu_owet);//zzc Q_sensible = ma * cp_da * (Tin_a - Tout_a); double errorToutr = Tout_r - Tout_r_start; if (iter == 1) { y1 = errorToutr; } if (iter > 1) { y2 = errorToutr; x3 = x2 - y2 / (y2 - y1) * (x2 - x1); change = Math.Abs(y2 / (y2 - y1) * (x2 - x1)); y1 = y2; x1 = x2; x2 = x3; } iter++; } //if (iter > 500) // Q = Q_dry; double Tout_r_wet = Tout_r; f_dry = 0.0; if ((Tin_s > Tdp) && isFullyWet == false) { double iter1 = 1; double error = 1; double Tout_r_guess = 0; x1 = 0.0001; x2 = 0.9999; eps = 1e-8; while ((iter1 <= 3 | change > eps) && iter < 100) { if (iter1 == 1) { f_dry = x1; } if (iter1 > 1) { f_dry = x2; } double K = Ntu_dry * (1.0 - C_star); double expk = Math.Exp(-K * f_dry); if (cp_da * ma < cp_r * mr) { Tout_r_guess = (Tdp + C_star * (Tin_a - Tdp) - expk * (1 - K / Ntu_o) * Tin_a) / (1 - expk * (1 - K / Ntu_o));//zzc } else { Tout_r_guess = (expk * (Tin_a + (C_star - 1) * Tdp) - C_star * (1 + K / Ntu_o) * Tin_a) / (expk * C_star - C_star * (1 + K / Ntu_o));//zzc } epsilon_dry = ((1 - Math.Exp(-f_dry * Ntu_dry * (1 - C_star))) / (1 - C_star * Math.Exp(-f_dry * Ntu_dry * (1 - C_star)))); epsilon_wet = ((1 - Math.Exp(-(1 - f_dry) * Ntu_wet * (1 - m_star))) / (1 - m_star * Math.Exp(-(1 - f_dry) * Ntu_wet * (1 - m_star)))); double T_w_x = (Tin_r + (mdot_min) / (cp_r * mr) * epsilon_wet * (hin_a - h_s_w_i - epsilon_dry * Cmin / ma * Tin_a)) / (1 - (Cmin * mdot_min) / (cp_r * mr * ma) * epsilon_wet * epsilon_dry); T_a_x = Tin_a - epsilon_dry * Cmin * (Tin_a - T_w_x) / (ma * cp_da); h_a_x = hin_a - cp_da * (Tin_a - T_a_x); Tout_r = (Cmin) / (cp_r * mr) * epsilon_dry * Tin_a + (1 - (Cmin) / (cp_r * mr) * epsilon_dry) * T_w_x; error = Tout_r - Tout_r_guess; if (iter1 > 500) { Q = Q_dry; } if (iter1 == 1) { y1 = error; } if (iter1 > 1) { y2 = error; x3 = x2 - y2 / (y2 - y1) * (x2 - x1); change = Math.Abs(y2 / (y2 - y1) * (x2 - x1)); y1 = y2; x1 = x2; x2 = x3; } iter1++; } //if (iter1 > 500) // Q = Q_dry; Q = mr * cp_r * (Tout_r - Tin_r); hout_a = hin_a - Q / ma; h_s_s_e = h_a_x + (hout_a - h_a_x) / (1 - Math.Exp(-(1 - f_dry) * Ntu_owet));//zzc //double T_s_e0 = CoolProp.HAPropsSI("T", "H", h_s_s_e, "P", 101325, "R", 1.0) - 273.15;//////////////// //T_s_e = -273.15 - 1.96 * Math.Pow(10, -3) * Math.Pow(h_s_s_e / 1000, 2) + 0.5357597 * h_s_s_e / 1000 + 268.871551; T_s_e = humidairprop.Ts(h_s_s_e, SourceTableData); Tout_a = T_s_e + (T_a_x - T_s_e) * Math.Exp(-(1 - f_dry) * Ntu_owet);//zzc Q_sensible = ma * cp_da * (Tin_a - Tout_a); } else { Q = Q_wet; } //res.RHout = CoolProp.HAPropsSI("R", "T", Tout_a + 273.15, "P", 101325, "H", hout_a); //double resRHout1 = CoolProp.HAPropsSI("R", "T", Tout_a + 273.15, "P", 101325, "H", hout_a); //res.RHout = 0.0259124 - 0.0996818 * Tout_a + 0.0934877 * (hout_a / 1000) + 0.0040018 * Math.Pow(Tout_a, 2) - 0.0003662 * Math.Pow((hout_a / 1000), 2) - 0.0034077 * Tout_a * (hout_a / 1000) - 1.76447 * Math.Pow(10, -5) * Math.Pow(Tout_a, 3) - 2.74524 * Math.Pow(10, -6) * Math.Pow((hout_a / 1000), 3) + 2.99291 * Math.Pow(10, -5) * Tout_a * Math.Pow((hout_a / 1000), 2) - 9.56644 * Math.Pow(10, -6) * Math.Pow(Tout_a, 2) * (hout_a / 1000); Tdp_out = humidairprop.Ts(hout_a, SourceTableData); res.RHout = humidairprop.RHI(Tout_a, Tdp_out, SourceTableData); if (res.RHout > 1) { //res.RHout = 1; //double Tout_a0 = CoolProp.HAPropsSI("T", "H", hout_a, "P", 101325, "R", 1)-273.15; //Tout_a = -273.15 - 1.96 * Math.Pow(10, -3) * Math.Pow(hout_a / 1000, 2) + 0.5357597 * hout_a / 1000 + 268.871551; //Tdp_out0 = CoolProp.HAPropsSI("T", "H", hout_a, "P", 101325, "R", 1.0) - 273.15;//@@@ Tout_a = humidairprop.Ts(hout_a, SourceTableData); Q_sensible = ma * cp_da * (Tin_a - Tout_a); } } } else { Tout_a = Tout_a_dry; Q = Q_dry; Q_sensible = Q_dry; double hout_a = hin_a - Q / ma * Math.Pow(-1, hexType); //***delete***// //res.RHout = CoolProp.HAPropsSI("R", "T", Tout_a + 273.15, "P", 101325, "W", omega_out); //res.RHout = 0.0215344 - 0.0059467 * Tout_a + 0.2386894 * (omega_out * 1000) + 0.0004378 * Math.Pow(Tout_a, 2) + 0.0004635 * Math.Pow((omega_out * 1000), 2) - 0.0125912 * Tout_a * (omega_out * 1000) - 9.134 * Math.Pow(10, -6) * Math.Pow(Tout_a, 3) + 1.696 * Math.Pow(10, -6) * Math.Pow((omega_out * 1000), 3) - 2.214 * Math.Pow(10, -5) * Tout_a * Math.Pow((omega_out * 1000), 2) + 0.000200865 * Math.Pow(Tout_a, 2) * (omega_out * 1000); //***delete***// //res.RHout = CoolProp.HAPropsSI("R", "T", Tout_a + 273.15, "P", 101325, "H", hout_a); //double resRHout0 = CoolProp.HAPropsSI("R", "T", Tout_a + 273.15, "P", 101325, "H", hout_a); //res.RHout = 0.0259124 - 0.0996818 * Tout_a + 0.0934877 * (hout_a / 1000) + 0.0040018 * Math.Pow(Tout_a, 2) - 0.0003662 * Math.Pow((hout_a / 1000), 2) - 0.0034077 * Tout_a * (hout_a / 1000) - 1.76447 * Math.Pow(10, -5) * Math.Pow(Tout_a, 3) - 2.74524 * Math.Pow(10, -6) * Math.Pow((hout_a / 1000), 3) + 2.99291 * Math.Pow(10, -5) * Tout_a * Math.Pow((hout_a / 1000), 2) - 9.56644 * Math.Pow(10, -6) * Math.Pow(Tout_a, 2) * (hout_a / 1000); //double Tdp_out0 = CoolProp.HAPropsSI("T", "H", hout_a, "P", 101325, "R", 1.0) - 273.15;//@@@ double Tdp_out = humidairprop.Ts(hout_a, SourceTableData); res.RHout = humidairprop.RHI(Tout_a, Tdp_out, SourceTableData); } res.Tao = Tout_a; res.Tro = Tout_r; res.Q = Q / 1000; //res.hro = (hri + Math.Pow(-1, hexType) * res.Q / mr); double f_sp = RefrigerantSPDP.ff_Friction(Re_r); res.DP = zdp * f_sp * l / dh * Math.Pow(g, 2.0) / rho_r / 2000; res.Pro = fluid == "Water" ? pri : pri - res.DP; if (res.Pro < 0) { res.Pro = -10000000; return(res); } res.hro = hri + Math.Pow(-1, hexType) * res.Q / mr; res.R_1a = 1 / ((eta_0 * Aa_fin + Aa_tube) * ha); res.R_1r = 1 / (res.href * Ar); res.R_1 = res.R_1a + res.R_1r + r_metal; if (fluid != "Water") { coolprop.update(input_pairs.HmassP_INPUTS, res.hro * 1000, res.Pro * 1000); res.Tro = coolprop.T() - 273.15; //res.Tro = CoolProp.PropsSI("T", "P", res.Pro * 1000, "H", res.hro * 1000, fluid) - 273.15; } return(res); }