def Compressor(ScrollClass, Te=253, Tc=310, f=None, OneCycle=False, Ref='R410A', HDF5file='scroll_compressor.h5', discharge_valve=True): ScrollComp = ScrollClass() ScrollComp.set_scroll_geo(83e-6, 2.2, 0.005, 0.006) #Set the scroll wrap geometry ScrollComp.set_disc_geo('2Arc', r2=0) ScrollComp.geo.delta_flank = 10e-6 ScrollComp.geo.delta_radial = 10e-6 ScrollComp.geo.delta_suction_offset = 0.0e-3 ScrollComp.geo.phi_ie_offset = 0.0 # print(ScrollComp.geo); quit() ScrollComp.omega = 3000 / 60 * 2 * pi ScrollComp.Tamb = 298.0 #Temporarily set the bearing dimensions ScrollComp.mech = struct() ScrollComp.mech.D_upper_bearing = 0.04 ScrollComp.mech.L_upper_bearing = 0.04 ScrollComp.mech.c_upper_bearing = 20e-6 ScrollComp.mech.D_crank_bearing = 0.04 ScrollComp.mech.L_crank_bearing = 0.04 ScrollComp.mech.c_crank_bearing = 20e-6 ScrollComp.mech.D_lower_bearing = 0.025 ScrollComp.mech.L_lower_bearing = 0.025 ScrollComp.mech.c_lower_bearing = 20e-6 ScrollComp.mech.thrust_ID = 0.05 ScrollComp.mech.thrust_friction_coefficient = 0.028 #From Chen thesis ScrollComp.mech.orbiting_scroll_mass = 2.5 ScrollComp.mech.L_ratio_bearings = 3 ScrollComp.mech.mu_oil = 0.008 ScrollComp.h_shell = 0.02 ScrollComp.A_shell = 0.05 ScrollComp.HTC = 0.01 ScrollComp.motor = Motor() ScrollComp.motor.set_eta(0.9) ScrollComp.motor.suction_fraction = 1.0 Tin = Te + 11.1 temp = State.State(Ref, {'T': Te, 'Q': 1}) pe = temp.p temp.update(dict(T=Tc, Q=1)) pc = temp.p inletState = State.State(Ref, {'T': Tin, 'P': pe}) T2s = ScrollComp.guess_outlet_temp(inletState, pc) outletState = State.State(Ref, {'T': T2s, 'P': pc}) mdot_guess = inletState.rho * ScrollComp.Vdisp * ScrollComp.omega / (2 * pi) ScrollComp.add_tube( Tube(key1='inlet.1', key2='inlet.2', L=0.3, ID=0.02, mdot=mdot_guess, State1=inletState.copy(), fixed=1, TubeFcn=ScrollComp.TubeCode)) ScrollComp.add_tube( Tube(key1='outlet.1', key2='outlet.2', L=0.3, ID=0.02, mdot=mdot_guess, State2=outletState.copy(), fixed=2, TubeFcn=ScrollComp.TubeCode)) ScrollComp.auto_add_CVs(inletState, outletState) ScrollComp.auto_add_leakage(flankFunc=ScrollComp.FlankLeakage, radialFunc=ScrollComp.RadialLeakage) FP = FlowPath( key1='inlet.2', key2='sa', MdotFcn=IsentropicNozzleWrapper(), ) FP.A = pi * 0.01**2 / 4 ScrollComp.add_flow(FP) ScrollComp.add_flow( FlowPath(key1='sa', key2='s1', MdotFcn=ScrollComp.SA_S1, MdotFcn_kwargs=dict(X_d=0.7))) ScrollComp.add_flow( FlowPath(key1='sa', key2='s2', MdotFcn=ScrollComp.SA_S2, MdotFcn_kwargs=dict(X_d=0.7))) if not discharge_valve: ScrollComp.add_flow( FlowPath(key1='outlet.1', key2='dd', MdotFcn=ScrollComp.DISC_DD, MdotFcn_kwargs=dict(X_d=0.7))) ScrollComp.add_flow( FlowPath(key1='outlet.1', key2='ddd', MdotFcn=ScrollComp.DISC_DD, MdotFcn_kwargs=dict(X_d=0.7))) else: E = 1.93e11 # Youngs Modulus, [Pa] h_valve = 0.0006 # Valve thickness, [m] d_discharge = ScrollComp.geo.ra_arc1 * 1.9 # Port diameter [m] l_valve = 5 * d_discharge # Total length of valve, [m] a_valve = l_valve / 1.5 # Distance from anchor to force, [m] assert (a_valve < l_valve) rho_valve = 8000 # Density of spring steel, [kg/m^3] C_D = 1.17 # Drag coefficient [-] d_valve = d_discharge * 1.5 # Valve Diameter [m] x_stopper = 0.006 # Stopper location [m] I = (d_valve * h_valve**3) / 12 # Moment of Inertia for valve,[m^4] k_valve = (6 * E * I) / (a_valve**2 * (3 * l_valve - a_valve)) # Valve stiffness m_eff = ( 1 / 3 ) * rho_valve * l_valve * d_valve * h_valve # Effective mass of valve reeds x_tr_discharge = 0.25 * (d_discharge**2 / d_valve) # Construct the valve ScrollComp.discharge_valve = ValveModel( d_valve=d_valve, d_port=d_discharge, C_D=C_D, m_eff=m_eff, k_valve=k_valve, rho_valve=rho_valve, # Not used directly x_stopper=x_stopper, x_tr=x_tr_discharge, key_up=['ddd', 'dd'], key_down='outlet.1') # Inform the model about the valve ScrollComp.add_valve(ScrollComp.discharge_valve) ScrollComp.add_flow( FlowPath(key1='outlet.1', key2='dd', MdotFcn=ScrollComp.DischargeValve, MdotFcn_kwargs=dict(X_d=0.7))) ScrollComp.add_flow( FlowPath(key1='outlet.1', key2='ddd', MdotFcn=ScrollComp.DischargeValve, MdotFcn_kwargs=dict(X_d=0.7))) # ScrollComp.add_flow(FlowPath(key1 = 'outlet.1', # key2 = 'd1', # MdotFcn = ScrollComp.DISC_D1, # MdotFcn_kwargs = dict(X_d = 0.7) # ) # ) # # FP = FlowPath(key1='outlet.1', # key2='dd', # MdotFcn=IsentropicNozzleWrapper(), # ) # FP.A = pi*0.006**2/4 # ScrollComp.add_flow(FP) # # FP = FlowPath(key1='outlet.1', # key2='ddd', # MdotFcn=IsentropicNozzleWrapper(), # ) # FP.A = pi*0.006**2/4 # ScrollComp.add_flow(FP) ScrollComp.add_flow( FlowPath(key1='d1', key2='dd', MdotFcn=ScrollComp.D_to_DD)) ScrollComp.add_flow( FlowPath(key1='d2', key2='dd', MdotFcn=ScrollComp.D_to_DD)) #Connect the callbacks for the step, endcycle, heat transfer and lump energy balance ScrollComp.connect_callbacks( step_callback=ScrollComp.step_callback, endcycle_callback=ScrollComp.endcycle_callback, heat_transfer_callback=ScrollComp.heat_transfer_callback, lumps_energy_balance_callback=ScrollComp.lump_energy_balance_callback) t1 = timeit.default_timer() ScrollComp.RK45_eps = 1e-6 ScrollComp.eps_cycle = 3e-3 try: ScrollComp.solve( key_inlet='inlet.1', key_outlet='outlet.2', solver_method='RK45', OneCycle=OneCycle, plot_every_cycle=False, #hmin = 1e-3 eps_cycle=3e-3) except BaseException as E: print(E) raise print('time taken', timeit.default_timer() - t1) del ScrollComp.FlowStorage from PDSim.misc.hdf5 import HDF5Writer h5 = HDF5Writer() h5.write_to_file(ScrollComp, HDF5file) debug_plots(ScrollComp, family='Scroll Compressor') return ScrollComp
def Compressor(): recip = Recip() recip.piston_stroke = 0.02 #Piston stroke, m recip.piston_diameter = 0.02 #Piston diameter, m recip.piston_length = 0.02 #Piston Length, m recip.omega = 377 #Frequency, rad/sec (60Hz) recip.crank_length = 0.01 #length of crank, m recip.connecting_rod_length = 0.04 #length of connecting rod, m recip.x_TDC = 0.003 #Distance to the TDC position of the piston from the valve plate recip.d_discharge = 0.0059 #discharge port diameter in meters recip.d_suction = recip.d_discharge #suction diameter in meters #These are parameters needed for the ambient heat transfer model recip.h_shell = 0.010 #[kW/m2/K] recip.A_shell = pi * 10 * 2 * (0.0254**2) #[m2] recip.Tamb = 298 #[K] recip.mu_oil = 0.0086 recip.delta_gap = 10e-6 recip.eta_motor = 0.95 recip.shell_volume = 100e-6 #Calculate Vdisp recip.pre_solve() recip.Vdisp = recip.Vdisp() Ref = 'R410A' inletState = State.State(Ref, dict(T=289.15, D=33.1)) p_outlet = inletState.p * 2.5 T2s = recip.guess_outlet_temp(inletState, p_outlet) outletState = State.State(Ref, {'T': T2s, 'P': p_outlet}) mdot_guess = inletState.rho * recip.Vdisp * recip.omega / (2 * pi) #First add the control volumes. recip.add_CV( ControlVolume(key='A', initialState=outletState.copy(), VdVFcn=recip.V_dV, becomes='A')) recip.add_CV( ControlVolume(key='shell', initialState=inletState.copy(), VdVFcn=recip.V_shell, becomes='shell')) recip.add_tube( Tube(key1='inlet.1', key2='inlet.2', L=0.03, ID=0.02, mdot=mdot_guess, State1=inletState.copy(), fixed=1, TubeFcn=recip.TubeCode)) recip.add_tube( Tube(key1='outlet.1', key2='outlet.2', L=0.03, ID=0.02, mdot=mdot_guess, State2=outletState.copy(), fixed=2, TubeFcn=recip.TubeCode)) recip.add_flow(FlowPath(key1='shell', key2='inlet.2', MdotFcn=recip.Inlet)) recip.add_flow(FlowPath(key1='inlet.2', key2='A', MdotFcn=recip.Suction)) recip.add_flow(FlowPath(key1='outlet.1', key2='A', MdotFcn=recip.Discharge)) recip.add_flow( FlowPath(key1='shell', key2='A', MdotFcn=recip.PistonLeakage)) E = 1.93e11 # Youngs Modulus, [Pa] h_valve = 0.0001532 # Valve thickness, [m] l_valve = 0.018 # Total length of valve, [m] a_valve = 0.0140 # Distance from anchor to force, [m] rho_valve = 8000 # Density of spring steel, [kg/m^3] C_D = 1.17 # Drag coefficient [-] d_valve = 0.007 # Valve Diameter [m] x_stopper = 0.0018 # Stopper location [m] I = (d_valve * h_valve**3) / 12 # Moment of Inertia for valve, [m^4] k_valve = (6 * E * I) / (a_valve**2 * (3 * l_valve - a_valve)) # Valve stiffness m_eff = ( 1 / 3 ) * rho_valve * l_valve * d_valve * h_valve # Effective mass of valve reeds, [kg] x_tr_suction = 0.25 * (recip.d_suction**2 / d_valve) x_tr_discharge = 0.25 * (recip.d_discharge**2 / d_valve) #The suction valve parameters recip.suction_valve = ValveModel(d_valve=d_valve, d_port=recip.d_suction, C_D=C_D, rho_valve=rho_valve, x_stopper=x_stopper, m_eff=m_eff, k_valve=k_valve, x_tr=x_tr_suction, key_up='inlet.2', key_down='A') recip.add_valve(recip.suction_valve) #The discharge valve parameters recip.discharge_valve = ValveModel(d_valve=d_valve, d_port=recip.d_discharge, C_D=C_D, rho_valve=rho_valve, x_stopper=x_stopper, m_eff=m_eff, k_valve=k_valve, x_tr=x_tr_discharge, key_up='A', key_down='outlet.1') recip.add_valve(recip.discharge_valve) recip.connect_callbacks( endcycle_callback=recip.endcycle_callback, heat_transfer_callback=recip.heat_transfer_callback, lumps_energy_balance_callback=recip.lump_energy_balance_callback) t1 = timeit.default_timer() recip.solve(key_inlet='inlet.1', key_outlet='outlet.2', solver_method='RK45', OneCycle=False, UseNR=True, eps_cycle=3e-2, eps_energy_balance=3e-2) print('time taken', timeit.default_timer() - t1) if plotting: debug_plots(recip, family='Recip Compressor') del recip.FlowStorage from PDSim.misc.hdf5 import HDF5Writer h5 = HDF5Writer() h5.write_to_file(recip, 'recipsample.h5')
def Compressor(**kwargs): recip = PURecip() #Instantiate the model recip.Vdead = 8e-8 #Dead volume [m3] recip.Vdisp = 8e-6 #Displacement/rev [m3] recip.omega = 377 #Frequency, rad/sec (60Hz) recip.d_discharge = 0.0059 #Discharge port diameter [m] recip.d_suction = recip.d_discharge #Suction diameter [m] recip.A_discharge = pi * recip.d_discharge**2 / 4 recip.A_suction = pi * recip.d_suction**2 / 4 recip.RK45_eps = 1e-8 recip.h_shell = 0.010 #[kW/m2/K] recip.A_shell = pi * 10 * 2 * (0.0254**2) #[m2] recip.Tamb = 293 #[K] recip.plot_names = 'recip_plot_buttons' recip.Wdot_parasitic = 0 #Parasitic losses [kW] Ref = 'R134a' inletState = State.State(Ref, dict(T=293.15, D=23.75)) outletState = State.State(Ref, {'T': 400, 'P': inletState.p * 2.5}) mdot_guess = inletState.rho * recip.Vdisp * recip.omega / (2 * pi) #First add the control volumes. recip.add_CV( ControlVolume(key='A', initialState=outletState.copy(), VdVFcn=recip.V_dV, becomes='A')) #Add the inlet tube recip.add_tube( Tube(key1='inlet.1', key2='inlet.2', L=0.03, ID=0.01, mdot=mdot_guess, State1=inletState.copy(), fixed=1, TubeFcn=recip.TubeCode)) #Add the outlet tube recip.add_tube( Tube(key1='outlet.1', key2='outlet.2', L=0.03, ID=0.01, mdot=mdot_guess, State2=outletState.copy(), fixed=2, TubeFcn=recip.TubeCode)) #Add the flow paths that link flow nodes together recip.add_flow(FlowPath(key1='inlet.2', key2='A', MdotFcn=recip.Suction)) recip.add_flow(FlowPath(key1='outlet.1', key2='A', MdotFcn=recip.Discharge)) E = 1.93e11 #Youngs Modulus, [Pa] h_valve = 0.0001532 #Valve thickness, [m] l_valve = 0.018 #Total length of valve, [m] a_valve = 0.0140 #Distance from anchor to force, [m] rho_valve = 8000 #Density of spring steel, [kg/m^3] C_D = 1.17 #Drag coefficient [-] d_valve = 0.0059 #Valve Diameter [m] x_stopper = 0.0018 #Stopper location [m] I = (d_valve * h_valve**3) / 12 #Moment of Intertia for valve,[m^4] k_valve = (6 * E * I) / (a_valve**2 * (3 * l_valve - a_valve)) #Valve stiffness m_eff = ( 1 / 3 ) * rho_valve * l_valve * d_valve * h_valve #Effective mass of valve reeds x_tr_suction = 0.25 * (recip.d_suction**2 / d_valve) x_tr_discharge = 0.25 * (recip.d_discharge**2 / d_valve) #The suction valve parameters recip.suction_valve = ValveModel(d_valve=d_valve, d_port=recip.d_suction, C_D=C_D, rho_valve=rho_valve, x_stopper=x_stopper, m_eff=m_eff, k_valve=k_valve, x_tr=x_tr_suction, key_up='inlet.2', key_down='A') recip.add_valve(recip.suction_valve) #The discharge valve parameters recip.discharge_valve = ValveModel(d_valve=d_valve, d_port=recip.d_discharge, C_D=C_D, rho_valve=rho_valve, x_stopper=x_stopper, m_eff=m_eff, k_valve=k_valve, x_tr=x_tr_discharge, key_up='A', key_down='outlet.1') recip.add_valve(recip.discharge_valve) recip.connect_callbacks( endcycle_callback=recip.endcycle_callback, # Provided by PDSimCore heat_transfer_callback=recip.heat_transfer_callback, lumps_energy_balance_callback=recip.lump_energy_balance_callback) t1 = clock() recip.precond_solve( key_inlet='inlet.1', key_outlet='outlet.2', solver_method='RK45', OneCycle=False, UseNR=True, ) print('time taken', clock() - t1) debug_plots(recip) del recip.FlowStorage # from PDSim.plot.plots import debug_plots # debug_plots(recip) return recip