""" model the XLR-134 """ from rocketisp.rocket_isp import RocketThruster from rocketisp.geometry import Geometry from rocketisp.stream_tubes import CoreStream from rocketisp.efficiencies import Efficiencies geomObj = Geometry(Rthrt=1, CR=3.0, eps=767.9, pcentBell=80, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=None) effObj = Efficiencies() effObj.set_const('ERE', (490.45-8.6)/490.45) core = CoreStream( geomObj, effObj, oxName='LOX', fuelName='LH2', MRcore=6.0, Pc=510 ) R = RocketThruster(name='xlr134',coreObj=core, injObj=None) R.scale_Rt_to_Thrust( 500 , Pamb=0.0 , use_scipy=False ) R.summ_print()
from rocketisp.geometry import Geometry from rocketisp.efficiencies import Efficiencies geomObj = Geometry(Rthrt=5.868 / 2, CR=2.5, eps=150, pcentBell=80, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=16) effObj = Efficiencies() effObj.set_const('Mix', 0.997329) effObj.set_const('Em', 0.99644) effObj.set_const('Kin', 0.975011) effObj.set_const('BL', 0.9795) effObj.set_const('Div', 0.994775) core = CoreStream(geomObj, effObj, oxName='N2O4', fuelName='MMH', MRcore=1.85, Pc=150, CdThroat=0.995, Pamb=14.7, pcentFFC=14.0,
dpOxInp = 200 dpFuelInp = 200 geomObj = Geometry(Rthrt=Rt, CR=CR, eps=eps, pcentBell=pcentBell, RupThroat=0.5, RdwnThroat=1.0, RchmConv=0.5, cham_conv_deg=30, LchmOvrDt=3, LchmMin=2.0, LchamberInp=Lcham) effObj = Efficiencies() effObj.set_const('ERE', 0.975) effObj.set_const('Noz', 0.933177) # Huzel based on frozen Isp core = CoreStream(geomObj, effObj, oxName=oxName, fuelName=fuelName, MRcore=MR, Pc=Pc, Pamb=14.7, CdThroat=1.0, adjCstarODE=0.978196, adjIspIdeal=1.0084418978404621) C = RocketThruster(name='Huzel A-1', coreObj=core, calc_CdThroat=False)
from rocketisp.geometry import Geometry from rocketisp.efficiencies import Efficiencies from rocketisp.stream_tubes import CoreStream from rocketisp.rocket_isp import RocketThruster # create CoreStream with area ratio=375:1, Pc=137, FFC=30% and effERE=0.99 C = CoreStream( geomObj=Geometry(eps=375), effObj=Efficiencies(ERE=0.99), pcentFFC=30, oxName='N2O4', fuelName='N2H4', MRcore=1.26 , Pc=137, Pamb=0) # instantiate RocketThruster R = RocketThruster(name='100 lbf Aerojet HiPAT R-4D', coreObj=C) R.scale_Rt_to_Thrust( 100 , Pamb=0.0 ) R.summ_print() #C.effObj.summ_print()
dpOxInp = 25 dpFuelInp = 25 geomObj = Geometry(Rthrt=Rt, CR=CR, eps=eps, pcentBell=pcentBell, RupThroat=0.5, RdwnThroat=1.0, RchmConv=0.5, cham_conv_deg=30, LchmOvrDt=3, LchmMin=2.0, LchamberInp=Lcham) effObj = Efficiencies() effObj.set_const('ERE', 0.98) effObj.set_const('Noz', 0.946901) core = CoreStream(geomObj, effObj, oxName=oxName, fuelName=fuelName, MRcore=MR, Pc=Pc, Pamb=14.7, CdThroat=1.0, adjCstarODE=0.975554, adjIspIdeal=1.01214) C = RocketThruster(name='Huzel A-4', coreObj=core, calc_CdThroat=False)
""" Apollo SPS, Aerojet AJ10-137 (Apollo Service Module Engine) """ from rocketisp.rocket_isp import RocketThruster from rocketisp.geometry import Geometry from rocketisp.stream_tubes import CoreStream from rocketisp.efficiencies import Efficiencies # create basic Geometry. # Use "place-holder" of 1 inch for throat radius... correct later with "scale_Rt_to_Thrust" geomObj = Geometry(Rthrt=1, CR=2.5, eps=62.5, pcentBell=72.3, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=None) effObj = Efficiencies() effObj.set_const('ERE', 0.98) # don't know injector details so set effERE=0.98 # It's an ablative chamber, so some FFC (fuel film cooling) is required... guess about 15% core = CoreStream( geomObj=geomObj, effObj=effObj, pcentFFC=15.0, oxName='N2O4', fuelName='A50', MRcore=1.6, Pc=100 ) R = RocketThruster(name='Apollo SPS',coreObj=core) # scale geometry to give 20,500 lbf of thrust for current conditions R.scale_Rt_to_Thrust( 20500 , Pamb=0.0 ) # figure out best mixture ratio to run the engine. R.set_mr_to_max_ispdel() # re-scale geometry to give 20,500 lbf of thrust after MR change
def test_overall_Isp_efficiency(self): """test overall Isp efficiency""" E = Efficiencies(Isp=0.95) self.assertAlmostEqual(E('Isp'), .95, places=5)
def calc_PI_adiabatic_isp(oxName='N2O4', fuelName='MMH', eps=10.0, pcentBell=80.0, Pc=100., Fvac=1000.0, NumRuns=20, do_show=True): # ============ use RocketCEA to find MR range =================== mc = MR_Temperature_Limits( oxName=oxName, fuelName=fuelName, PcNominal=Pc, epsNominal=eps) mr_peak = MR_Peak_At_EpsPc(mc, pc=Pc, eps=eps, ispType='CEAODE', # ispType can be CEAODE, CEAFROZEN NterpSize=100) print('Peak IspODE=%g sec at MR ='%mr_peak.ispPeak, mr_peak.mrPeak) print() print('MR at 97% Isp (on low side) =', mr_peak.calc_mrLow_minus_NPcentIsp()) print('MR at 97% Isp (on high side) =', mr_peak.calc_mrHigh_minus_NPcentIsp()) mr_lo = round( mr_peak.mrLeftOfPeak - (mr_peak.mrRightOfPeak - mr_peak.mrLeftOfPeak)/10.0, 2) mr_hi = round( mr_peak.mrRightOfPeak, 2) delMR = (mr_hi - mr_lo) / (NumRuns - 1) geomObj = Geometry(Rthrt=5.868/2, CR=2.5, eps=eps, pcentBell=pcentBell, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=16) effObj = Efficiencies() core = CoreStream( geomObj, effObj, oxName=oxName, fuelName=fuelName, MRcore=1.6, Pc=Pc) R = RocketThruster(name='sample',coreObj=core, injObj=None, calc_CdThroat=False, noz_regen_eps=eps) ispodeL = [] ispodkL = [] isptdkL = [] ispPIL = [] mrL = [] MR = mr_lo for _ in range(NumRuns): mrL.append( MR ) core.reset_attr( 'MRcore', MR, re_evaluate=True) R.scale_Rt_to_Thrust( Fvac, Pamb=0.0, use_scipy=False ) ispodeL.append( R.coreObj.IspODE ) ispodkL.append( R.coreObj.IspODK ) isptdkL.append( R.coreObj.IspODK * R.coreObj.effObj('Div') ) ispPIL.append( R.coreObj.IspODK * R.coreObj.effObj('Div') * R.coreObj.effObj('BL') ) MR += delMR fig, ax = plt.subplots( figsize=(8,6) ) plt.plot(mrL, ispodeL, label='IspODE', color=COLORL[0]) plt.plot(mrL, ispodkL, label='IspODK', color=COLORL[1]) plt.plot(mrL, isptdkL, label='IspTDK', color=COLORL[2]) plt.plot(mrL, ispPIL, label='IspPI', color=COLORL[3]) # ======= find peaks ====== mr_ode_terp = InterpProp(mrL, ispodeL) mr_ode_Peak, isp_ode_peak = gold_search_max(mr_ode_terp, mrL[0], mrL[-1], tol=1.0e-5) mr_odk_terp = InterpProp(mrL, ispodkL) mr_odk_Peak, isp_odk_peak = gold_search_max(mr_odk_terp, mrL[0], mrL[-1], tol=1.0e-5) mr_tdk_terp = InterpProp(mrL, isptdkL) mr_tdk_Peak, isp_tdk_peak = gold_search_max(mr_tdk_terp, mrL[0], mrL[-1], tol=1.0e-5) mr_pi_terp = InterpProp(mrL, ispPIL) mr_pi_Peak, isp_pi_peak = gold_search_max(mr_pi_terp, mrL[0], mrL[-1], tol=1.0e-5) # show ========= optimum MR difference ======== def span_mrpeak( isL ): minpt = min(isL) maxpt = max(isL) span = maxpt - minpt return [maxpt-0.8*span, maxpt] plt.plot([mr_ode_Peak, mr_ode_Peak], span_mrpeak(ispodeL), '--', label='MRode=%.2f'%mr_ode_Peak, linewidth=2, color=COLORL[0]) plt.plot([mr_odk_Peak, mr_odk_Peak], span_mrpeak(ispodkL), '--', label='MRodk=%.2f'%mr_odk_Peak, linewidth=2, color=COLORL[1]) plt.plot([mr_tdk_Peak, mr_tdk_Peak], span_mrpeak(isptdkL), '--', label='MRtdk=%.2f'%mr_tdk_Peak, linewidth=2, color=COLORL[2]) plt.plot([mr_pi_Peak, mr_pi_Peak], span_mrpeak(ispPIL), '--', label='MRpi=%.2f'%mr_pi_Peak, linewidth=2, color=COLORL[3]) isp_pi_peak = abs(isp_pi_peak) plt.text( mr_pi_Peak, isp_pi_peak, '%i'%int(isp_pi_peak), ha='left', va='bottom', transform=ax.transData, color=COLORL[3] ) plt.legend() plt.title('Perfect Injector') plt.title( "%s/%s RocketIsp\nPerfect Injector w Adiabatic Wall\nFvac=%.0f lbf, Pc=%.0f psia, AR=%.0f:1, %%Bell=%.0f%%"%\ (oxName, fuelName, Fvac, Pc, eps, pcentBell)) plt.ylabel('Isp (sec)') plt.xlabel('Mixture Ratio') png_name = '%s_%s_Fvac%g_Pc%g_eps%g.png'%(oxName, fuelName, int(Fvac), Pc, eps) plt.savefig(png_name, dpi=120) if do_show: plt.show()
from rocketisp.efficiencies import Efficiencies from rocketisp.examples.compare_vals import compare_header, compare geomObj = Geometry(Rthrt=3, CR=2.5, eps=55, pcentBell=80, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=None) effObj = Efficiencies() effObj.set_const('ERE', 0.97) core = CoreStream(geomObj=geomObj, effObj=effObj, oxName='N2O4', fuelName='MMH', MRcore=1.65, Pc=125) R = RocketThruster(name='Shuttle OMS', coreObj=core, injObj=None) R.scale_Rt_to_Thrust(6000, Pamb=0.0) compare_header() compare('Fvacuum', 6000, core('FvacTotal')) compare('Isp Vacuum', 313.2, core('IspDel'))
from rocketisp.rocket_isp import RocketThruster from rocketisp.injector import Injector geomObj = Geometry(Rthrt=1, CR=2.5, eps=20.0, pcentBell=80, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=None) effObj = Efficiencies() # It's an ablative chamber, so some FFC (fuel film cooling) is required... guess about 10% C = CoreStream(geomObj=geomObj, effObj=effObj, pcentFFC=0.0, Pamb=0.0, oxName='N2O4', fuelName='MMH', MRcore=1.9, Pc=500) I = Injector( C, Tox=None, Tfuel=None,
from rocketisp.geometry import Geometry from rocketisp.efficiencies import Efficiencies from rocketisp.stream_tubes import CoreStream C = CoreStream(geomObj=Geometry(eps=35), effObj=Efficiencies(ERE=0.98, Noz=0.97), oxName='LOX', fuelName='CH4', MRcore=3.6, Pc=500, Pamb=14.7) for name in ['IspODE', 'IspDel', 'IspODF']: print('%8s =' % name, '%.1f' % C(name)) print('%8s =' % 'IspAmb', '%.1f' % C('IspAmb'), C('noz_mode')) C.summ_print()
from plothelp.plot_help import Figure, sample_data, Curve, plt from plothelp.plot_help import CWheel geomObj = Geometry(Rthrt=1, CR=2.5, eps=20.0, pcentBell=80, RupThroat=1.5, RdwnThroat=1.0, RchmConv=1.0, cham_conv_deg=30, LchmOvrDt=3.10, LchmMin=2.0, LchamberInp=None) effObj = Efficiencies(Vap=0.99, Mix=0.99) # It's an ablative chamber, so some FFC (fuel film cooling) is required... guess about 10% C = CoreStream(geomObj=geomObj, effObj=effObj, pcentFFC=0.0, Pamb=0.0, oxName='N2O4', fuelName='MMH', MRcore=1.9, Pc=500) mrr = MRrange(C.ceaObj, Pc=C.Pc, eps=geomObj.eps, edge_frac=0.97) mrlo, mrhi = mrr.get_mr_range() print('mrlo, mrhi', mrlo, mrhi) mrcoreL = np.linspace(mrlo, mrhi,
from rocketisp.geometry import Geometry from rocketisp.efficiencies import Efficiencies from rocketisp.stream_tubes import CoreStream from rocketisp.rocket_isp import RocketThruster # create CoreStream with area ratio=375:1, Pc=137, FFC=30% and effERE=0.99 C = CoreStream(geomObj=Geometry(eps=375), effObj=Efficiencies(ERE=0.99), pcentFFC=30, oxName='N2O4', fuelName='N2H4', MRcore=1.26, Pc=137, Pamb=0) # instantiate RocketThruster R = RocketThruster(name='100 lbf Aerojet HiPAT R-4D', coreObj=C) R.scale_Rt_to_Thrust(100, Pamb=0.0) R.summ_print() #C.effObj.summ_print()