from CoolProp.CoolProp import Props from CoolProp.HumidAirProp import HAProps from scipy.optimize import fsolve import Correlations from math import pi from Solvers import MultiDimNewtRaph import numpy as np def DXPreconditioner(Cycle,epsilon=0.96): #Assume the heat exchangers are highly effective def OBJECTIVE(x): Tevap=x[0] Tcond=x[1] #Condensing heat transfer rate from enthalpies rho_air=1.1 #Use fixed effectiveness to get a guess for the condenser capacity Qcond=epsilon*Cycle.Condenser.Fins.Air.Vdot_ha/rho_air*(Cycle.Condenser.Fins.Air.Tdb-Tcond)*1000 pevap=Props('P','T',Tevap,'Q',1.0,Cycle.Ref) pcond=Props('P','T',Tcond,'Q',1.0,Cycle.Ref) Cycle.Compressor.pin_r=pevap Cycle.Compressor.pout_r=pcond Cycle.Compressor.Tin_r=Tevap+Cycle.Evaporator.DT_sh Cycle.Compressor.Ref=Cycle.Ref Cycle.Compressor.Calculate() W=Cycle.Compressor.W # Evaporator fully-dry analysis Qevap_dry=epsilon*Cycle.Evaporator.Fins.Air.Vdot_ha/rho_air*(Cycle.Evaporator.Fins.Air.Tdb-Tevap)*1000 #Air-side heat transfer UA Evap=Cycle.Evaporator Evap.mdot_r=Cycle.Compressor.mdot_r Evap.psat_r=pevap Evap.Ref=Cycle.Ref Evap.Initialize() UA_a=Evap.Fins.h_a*Evap.Fins.A_a*Evap.Fins.eta_a Tin_a=Evap.Fins.Air.Tdb Tout_a=Tin_a+Qevap_dry/(Evap.Fins.mdot_da*Evap.Fins.cp_da) #Refrigerant-side heat transfer UA UA_r=Evap.A_r_wetted*Correlations.ShahEvaporation_Average(0.5,0.5,Cycle.Ref,Evap.G_r,Evap.ID,Evap.psat_r,Qevap_dry/Evap.A_r_wetted,Evap.Tbubble_r,Evap.Tdew_r) #Get wall temperatures at inlet and outlet from energy balance T_so_a=(UA_a*Evap.Tin_a+UA_r*Tevap)/(UA_a+UA_r) T_so_b=(UA_a*Tout_a+UA_r*Tevap)/(UA_a+UA_r) Tdewpoint=HAProps('D','T',Cycle.Evaporator.Fins.Air.Tdb, 'P',101.325, 'R',Evap.Fins.Air.RH) #Now calculate the fully-wet analysis #Evaporator is bounded by saturated air at the refrigerant temperature. h_ai=HAProps('H','T',Cycle.Evaporator.Fins.Air.Tdb, 'P',101.325, 'R', Cycle.Evaporator.Fins.Air.RH)*1000 #[J/kg_da] h_s_w_o=HAProps('H','T',Tevap, 'P',101.325, 'R', 1.0)*1000 #[J/kg_da] Qevap_wet=epsilon*Cycle.Evaporator.Fins.Air.Vdot_ha/rho_air*(h_ai-h_s_w_o) #Coil is either fully-wet, fully-dry or partially wet, partially dry if T_so_a>Tdewpoint and T_so_b>Tdewpoint: #Fully dry, use dry Q f_dry=1.0 elif T_so_aTdewpoint and T_so_b>Tdewpoint: #Fully dry, use dry Q f_dry=1.0 elif T_so_a