def execute(self): # -------------------------------------- # --- Execute file-wrapped component --- # -------------------------------------- self.command = ['sh', 'run_supinEGADS'] split = '\n---------------------------------------------------------------------------\n' # -------------------- # --- Header Input --- # -------------------- header_input = ['SUPIN Input File'] header_input.append(' '.join(['Streamline-Traced External-Compression (STEX) Inlet.'])) header_input.append(' '.join(['GE F404 Conditions.'])) header_input.append(split) # ------------------ # --- Main Input --- # ------------------ main_input = [_2str('DataID')] main_input.append(' '.join([_2str(self.DataID)])) main_input.append(' '.join([_2str(x) for x in ['Kmode', 'Ktype', 'Kcomp', 'Ksurf', 'KgCFD']])) main_input.append(' '.join([_2str(x) for x in [self.Kmode, self.Ktype, self.Kcomp, self.Ksurf, self.KgCFD]])) main_input.append(' '.join([_2str(x) for x in ['KWinp', 'FWinp', 'KWunit', 'Flapeng']])) main_input.append(' '.join([_2str(x) for x in [self.KWinp, self.FWinp, self.KWunit, self.Flapeng]])) main_input.append(' '.join([_2str(x) for x in ['WRspill', 'WRbleed', 'WRbypass', 'WRother']])) main_input.append(' '.join([_2str(x) for x in [self.WRspill, self.WRbleed, self.WRbypass, self.WRother]])) main_input.append(split) # ------------------------ # --- Freestream Input --- # ------------------------ freestream_input = [_2str('DataID')] freestream_input.append(' '.join([_2str(self.Freestream.DataID)])) freestream_input.append(' '.join([_2str(x) for x in ['Kfs', 'Mach', 'Pres (psf)', 'Temp (R)', 'Alpha (deg)', 'Beta (deg)', 'Alt (ft)']])) freestream_input.append(' '.join([_2str(x) for x in [self.Freestream.Kfs, self.Freestream.Mach, self.Freestream.Pres, self.Freestream.Temp, self.Freestream.Alpha, self.Freestream.Beta, self.Freestream.Alt]])) freestream_input.append(split) # --------------------------- # --- Approach Flow Input --- # --------------------------- approach_input = [_2str('DataID')] approach_input.append(' '.join([_2str(self.Approach.DataID)])) approach_input.append(' '.join([_2str(x) for x in ['Kapp', 'Nsapp', 'Alpha_Inlet (deg)', 'Beta_Inlet (deg)']])) approach_input.append(' '.join([_2str(x) for x in [self.Approach.Kapp, self.Approach.Nsapp, self.Approach.IAlpha, self.Approach.IBeta]])) approach_input.append(' '.join([_2str(x) for x in ['Mach_L', 'pt_L/pt_0', 'Alpha_L (deg)', 'Beta_L (deg)']])) approach_input.append(' '.join([_2str(x) for x in [self.Freestream.Mach*1.01, self.Approach.ptL_pt0, self.Approach.LAlpha, self.Approach.LBeta]])) approach_input.append(split) # ------------------------------------------ # --- External Supersonic Diffuser Input --- # ------------------------------------------ extsupdiff_input = [_2str('DataID')] extsupdiff_input.append(' '.join([_2str(self.ExtSupDiff.DataID)])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Kexd']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Kexd]])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Kstex', 'Mstex', 'Fstrunc', 'Kstle', 'Fstle']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Kstex, self.ExtSupDiff.Mstex, self.ExtSupDiff.Fstrunc, self.ExtSupDiff.Kstle, self.ExtSupDiff.Fstle]])) extsupdiff_input.append(' '.join([_2str(x) for x in ['strbot', 'strtop', 'stpbot', 'stptop', 'stdyax']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.strbot, self.ExtSupDiff.strtop, self.ExtSupDiff.stpbot, self.ExtSupDiff.stptop, self.ExtSupDiff.stdyax]])) extsupdiff_input.append(split) # ---------------------- # --- Cowl Lip Input --- # ---------------------- cowllip_input = [_2str('DataID')] cowllip_input.append(' '.join([_2str(self.CowlLip.DataID)])) cowllip_input.append(' '.join([_2str(x) for x in ['Kclip', 'Kclin', 'Kclex']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.Kclip, self.CowlLip.Kclin, self.CowlLip.Kclex]])) cowllip_input.append(' '.join([_2str(x) for x in ['bclin', 'ARclin', 'thclin']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.bclin, self.CowlLip.ARclin, self.CowlLip.thclin]])) cowllip_input.append(' '.join([_2str(x) for x in ['bclex', 'ARclex', 'thclex']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.bclex, self.CowlLip.ARclex, self.CowlLip.thclex]])) cowllip_input.append(split) # --------------------------- # --- Cowl Exterior Input --- # --------------------------- cowlext_input = [_2str('DataID')] cowlext_input.append(' '.join([_2str(self.CowlExt.DataID)])) cowlext_input.append(' '.join([_2str(x) for x in ['Kcex', 'Frcex', 'FXcext', 'Thswex']])) cowlext_input.append(' '.join([_2str(x) for x in [self.CowlExt.Kcex, self.CowlExt.Frcex, self.CowlExt.FXcext, self.CowlExt.Thswex]])) cowlext_input.append(split) # -------------------- # --- Throat Input --- # -------------------- throat_input = [_2str('DataID')] throat_input.append(' '.join([_2str(self.Throat.DataID)])) throat_input.append(' '.join([_2str(x) for x in ['Kthrt']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.Kthrt]])) throat_input.append(' '.join([_2str(x) for x in ['Fxstsh', 'Frstsh']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.Fxstsh, self.Throat.Frstsh]])) throat_input.append(' '.join([_2str(x) for x in ['stclphi', 'Fstcldx', 'Fstcldy', 'stclth', 'stclb', 'stclar']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.stclphi, self.Throat.Fstcldx, self.Throat.Fstcldy, self.Throat.stclth, self.Throat.stclb, self.Throat.stclar]])) throat_input.append(' '.join([_2str(x) for x in ['aSDa1', 'FdxSD', 'FdySD', 'pbotSD', 'ptopSD']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.aSDa1, self.Throat.FdxSD, self.Throat.FdySD, self.Throat.pbotSD, self.Throat.ptopSD]])) throat_input.append(split) # ------------------------------- # --- Subsonic Diffuser Input --- # ------------------------------- subdiff_input = [_2str('DataID')] subdiff_input.append(' '.join([_2str(self.SubDiff.DataID)])) subdiff_input.append(' '.join([_2str(x) for x in ['Ksubd', 'KLsubd', 'FLsubd', 'theqsd', 'dptsubd']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.Ksubd, self.SubDiff.KLsubd, self.SubDiff.FLsubd, self.SubDiff.theqsd, self.SubDiff.dptsubd]])) subdiff_input.append(' '.join([_2str(x) for x in ['FncwSD', 'FncwX', 'FLcwX']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.FncwSD, self.SubDiff.FncwX, self.SubDiff.FLcwX]])) subdiff_input.append(split) # ------------------------- # --- Engine Face Input --- # ------------------------- engineface_input = [_2str('DataID')] engineface_input.append(' '.join([_2str(self.EngineFace.DataID)])) engineface_input.append(' '.join([_2str(x) for x in ['KxEF', 'FxEF', 'KyEF', 'FyEF', 'ThetEF']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.KxEF, self.EngineFace.FxEF, self.EngineFace.KyEF, self.EngineFace.FyEF, self.EngineFace.ThetEF]])) engineface_input.append(' '.join([_2str(x) for x in ['Kef']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.Kef]])) engineface_input.append(' '.join([_2str(x) for x in ['diamEF', 'Hubtip']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.diamEF, self.EngineFace.Hubtip]])) engineface_input.append(' '.join([_2str(x) for x in ['Kspin']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.Kspin]])) engineface_input.append(' '.join([_2str(x) for x in ['ARspin']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.ARspin]])) engineface_input.append(split) # -------------------------- # --- Grid Spacing Input --- # -------------------------- gridspacing_input = [_2str('DataID')] gridspacing_input.append(' '.join([_2str(self.GridSpacing.DataID)])) gridspacing_input.append(' '.join([_2str(x) for x in ['Fgdds', 'Rgsmax', 'Fdswall', 'Fdssym', 'Fdscex', 'Fdsthrt']])) gridspacing_input.append(' '.join([_2str(x) for x in [self.GridSpacing.Fgdds, self.GridSpacing.Rgsmax, self.GridSpacing.Fdswall, self.GridSpacing.Fdssym, self.GridSpacing.Fdscex, self.GridSpacing.Fdsthrt]])) gridspacing_input.append(' '.join([_2str(x) for x in ['Ddinf', 'Ddfar', 'Ddnoz', 'Ddclp', 'thfar', 'Fgnoz']])) gridspacing_input.append(' '.join([_2str(x) for x in [self.GridSpacing.Ddinf, self.GridSpacing.Ddfar, self.GridSpacing.Ddnoz, self.GridSpacing.Ddclp, self.GridSpacing.thfar, self.GridSpacing.Fgnoz]])) gridspacing_input.append(split) # --------------------------------------- # --- Write Header Output to SUPIN.in --- # --------------------------------------- filename = '../SUPIN/SUPIN.in' file_handle = open(filename, 'w') file_handle.write("\n".join(header_input)) file_handle.close() # ------------------------------------ # --- Write Main Input to SUPIN.in --- # ------------------------------------ file_handle = open(filename, 'a') file_handle.write("\n".join(main_input)) file_handle.close() # ------------------------------------------ # --- Write Freestream Input to SUPIN.in --- # ------------------------------------------ file_handle = open(filename, 'a') file_handle.write("\n".join(freestream_input)) file_handle.close() # ---------------------------------------- # --- Write Approach Input to SUPIN.in --- # ---------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(approach_input)) file_handle.close() # ------------------------------------------ # --- Write ExtSupDiff Input to SUPIN.in --- # ------------------------------------------ file_handle = open(filename, 'a') file_handle.write("\n".join(extsupdiff_input)) file_handle.close() # --------------------------------------- # --- Write CowlLip Input to SUPIN.in --- # --------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(cowllip_input)) file_handle.close() # --------------------------------------- # --- Write CowlExt Input to SUPIN.in --- # --------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(cowlext_input)) file_handle.close() # -------------------------------------- # --- Write Throat Input to SUPIN.in --- # -------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(throat_input)) file_handle.close() # ------------------------------------------------- # --- Write Subsonic Diffuser Input to SUPIN.in --- # ------------------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(subdiff_input)) file_handle.close() # ------------------------------------------- # --- Write Engine Face Input to SUPIN.in --- # ------------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(engineface_input)) file_handle.close() # -------------------------------------------- # --- Write Grid Spacing Input to SUPIN.in --- # -------------------------------------------- file_handle = open(filename, 'a') file_handle.write("\n".join(gridspacing_input)) file_handle.close() # ------------------------------- # --- Execute SUPIN Component --- # ------------------------------- super(SUPIN, self).execute() # ------------------------- # --- Parse Output File --- # ------------------------- with open('../SUPIN/SUPIN.out') as f: lines = f.readlines() for line in lines: if "pt_2 / pt_L =" in line: self.Outputs.pt2_ptL = float(line.split("=")[-1]) elif "Tt2 / TtL =" in line: self.Outputs.tt2_ttL = float(line.split("=")[-1]) elif "Mach_2 =" in line: self.Outputs.M2 = float(line.split("=")[-1]) elif "rhub (ft) =" in line: self.Outputs.Rspin = float(line.split("=")[-1]) elif "diamEF (ft) =" in line: self.Outputs.diamEF = float(line.split("=")[-1]) elif "Inlet Drag Coefficient, cdrag" in line: self.Outputs.Cd = float(line.split("=")[-1]) elif "Wa2 (actual) =" in line: self.Outputs.mdot = float(line.split("=")[-1]) elif "A_2 (ft) =" in line: self.Outputs.A2 = float(line.split("=")[-1]) elif "y_EF (ft) =" in line: self.Outputs.yEF = float(line.split("=")[-1]) elif "rhub (ft) =" in line: self.Outputs.Rspin = float(line.split("=")[-1]) else: pass if not self.Outputs.pt2_ptL: self.Outputs.pt2_ptL = 0.8 if not self.Outputs.Cd: self.Outputs.Cd = 1.0 try: src_file = '../SUPIN/SUPIN.egads' dst_folder = os.path.join(os.getcwd(), '../ESP/') shutil.copy2(src_file, dst_folder) except: pass print "---------------------------------" print "------- SUPIN Parameters --------" print "---------------------------------" print '---Outputs---' print 'Precov: ', self.Outputs.pt2_ptL print 'CdWave: ', self.Outputs.Cd print 'Obj: ', -1.0*self.Outputs.pt2_ptL + 0.5*self.Outputs.Cd
def execute(self): # -------------------------------------- # --- Execute file-wrapped component --- # -------------------------------------- self.command = ['sh', self.supin_exec] split = '\n---------------------------------------------------------------------------\n' # -------------------- # --- Header Input --- # -------------------- header_input = ['SUPIN Input File'] header_input.append(' '.join(['AxiSpike Inlet.'])) header_input.append(' '.join(['GE F404 Conditions.'])) header_input.append(split) # ------------------ # --- Main Input --- # ------------------ main_input = [_2str('DataID')] main_input.append(' '.join([_2str(self.DataID)])) main_input.append(' '.join([_2str(x) for x in ['Kmode', 'Ktype', 'Kcomp', 'Ksurf', 'KgCFD']])) main_input.append(' '.join([_2str(x) for x in [self.Kmode, self.Ktype, self.Kcomp, self.Ksurf, self.KgCFD]])) main_input.append(' '.join([_2str(x) for x in ['KWinp', 'FWinp', 'KWunit', 'Flapeng']])) main_input.append(' '.join([_2str(x) for x in [self.KWinp, self.FWinp, self.KWunit, self.Flapeng]])) main_input.append(' '.join([_2str(x) for x in ['WRspill', 'WRbleed', 'WRbypass', 'WRother']])) main_input.append(' '.join([_2str(x) for x in [self.WRspill, self.WRbleed, self.WRbypass, self.WRother]])) main_input.append(split) # ------------------------ # --- Freestream Input --- # ------------------------ freestream_input = [_2str('DataID')] freestream_input.append(' '.join([_2str(self.Freestream.DataID)])) freestream_input.append(' '.join([_2str(x) for x in ['Kfs', 'Mach', 'Pres (psf)', 'Temp (R)', 'Alpha (deg)', 'Beta (deg)', 'Alt (ft)']])) freestream_input.append(' '.join([_2str(x) for x in [self.Freestream.Kfs, self.Freestream.Mach, self.Freestream.Pres, self.Freestream.Temp, self.Freestream.Alpha, self.Freestream.Beta, self.Freestream.Alt]])) freestream_input.append(split) # ------------------------------- # --- Capture X-Section Input --- # ------------------------------- capture_input = [_2str('DataID')] capture_input.append(' '.join([_2str(self.Capture.DataID)])) capture_input.append(' '.join([_2str(x) for x in ['FAcap', 'Fhclip', 'Fwclip']])) capture_input.append(' '.join([_2str(x) for x in [self.Capture.FAcap, self.Capture.Fhclip, self.Capture.Fwclip]])) capture_input.append(' '.join([_2str(x) for x in ['Xinlet', 'Yinlet', 'ThetaInlet']])) capture_input.append(' '.join([_2str(x) for x in [self.Capture.Xinlet, self.Capture.Yinlet, self.Capture.Thetinlet]])) capture_input.append(' '.join([_2str(x) for x in ['ARtopcap', 'ptopcap', 'ARbotcap', 'pbotcap']])) capture_input.append(' '.join([_2str(x) for x in [self.Capture.ARtopcap, self.Capture.ptopcap, self.Capture.ARbotcap, self.Capture.pbotcap]])) capture_input.append(split) # --------------------------- # --- Approach Flow Input --- # --------------------------- approach_input = [_2str('DataID')] approach_input.append(' '.join([_2str(self.Approach.DataID)])) approach_input.append(' '.join([_2str(x) for x in ['Kapp', 'Nsapp', 'Alpha_Inlet (deg)', 'Beta_Inlet (deg)']])) approach_input.append(' '.join([_2str(x) for x in [self.Approach.Kapp, self.Approach.Nsapp, self.Approach.IAlpha, self.Approach.IBeta]])) approach_input.append(' '.join([_2str(x) for x in ['Mach_L', 'pt_L/pt_0', 'Alpha_L (deg)', 'Beta_L (deg)']])) approach_input.append(' '.join([_2str(x) for x in [self.Freestream.Mach, self.Approach.ptL_pt0, self.Approach.LAlpha, self.Approach.LBeta]])) approach_input.append(split) # ------------------------------------------ # --- External Supersonic Diffuser Input --- # ------------------------------------------ extsupdiff_input = [_2str('DataID')] extsupdiff_input.append(' '.join([_2str(self.ExtSupDiff.DataID)])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Kexd']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Kexd]])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Kmatch', 'Fmatch', 'Kfocal', 'Tcap']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Kmatch, self.ExtSupDiff.Fmatch, self.ExtSupDiff.Kfocal, self.ExtSupDiff.Tcap]])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Knose', 'Xnose', 'Rnose']])) extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Knose, self.ExtSupDiff.Xnose, self.ExtSupDiff.Rnose]])) extsupdiff_input.append(' '.join([_2str(x) for x in ['Stage', 'Angle', 'Xstage', 'Dyfocal']])) for j in [0,1,2]: extsupdiff_input.append(' '.join([_2str(x) for x in [self.ExtSupDiff.Stage[0][j], self.ExtSupDiff.Angle[0][j], self.ExtSupDiff.Xstage[0][j], self.ExtSupDiff.Dyfocal[0][j]]])) extsupdiff_input.append(split) # ---------------------- # --- Cowl Lip Input --- # ---------------------- cowllip_input = [_2str('DataID')] cowllip_input.append(' '.join([_2str(self.CowlLip.DataID)])) cowllip_input.append(' '.join([_2str(x) for x in ['Kclip', 'Kclin', 'Kclex']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.Kclip, self.CowlLip.Kclin, self.CowlLip.Kclex]])) cowllip_input.append(' '.join([_2str(x) for x in ['bclin', 'ARclin', 'thclin']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.bclin, self.CowlLip.ARclin, self.CowlLip.thclin]])) cowllip_input.append(' '.join([_2str(x) for x in ['bclex', 'ARclex', 'thclex']])) cowllip_input.append(' '.join([_2str(x) for x in [self.CowlLip.bclex, self.CowlLip.ARclex, self.CowlLip.thclex]])) cowllip_input.append(split) # --------------------------- # --- Cowl Exterior Input --- # --------------------------- cowlext_input = [_2str('DataID')] cowlext_input.append(' '.join([_2str(self.CowlExt.DataID)])) cowlext_input.append(' '.join([_2str(x) for x in ['Kcex', 'Frcex', 'FXcext', 'Thswex']])) cowlext_input.append(' '.join([_2str(x) for x in [self.CowlExt.Kcex, self.CowlExt.Frcex, self.CowlExt.FXcext, self.CowlExt.Thswex]])) cowlext_input.append(split) # -------------------- # --- Throat Input --- # -------------------- throat_input = [_2str('DataID')] throat_input.append(' '.join([_2str(self.Throat.DataID)])) throat_input.append(' '.join([_2str(x) for x in ['Kthrt']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.Kthrt]])) throat_input.append(' '.join([_2str(x) for x in ['Kthcb']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.Kthcb]])) throat_input.append(' '.join([_2str(x) for x in ['dthcb1', 'dxcbSD', 'dycbSD', 'thcbSD', 'Fncb1', 'FncbSD']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.dthcb1, self.Throat.dxcbSD, self.Throat.dycbSD, self.Throat.thcbSD, self.Throat.Fncb1, self.Throat.FncbSD]])) throat_input.append(' '.join([_2str(x) for x in ['Kthcw']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.Kthcw]])) throat_input.append(' '.join([_2str(x) for x in ['aTHa1', 'thcwTH', 'machTH']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.aTHa1, self.Throat.thcwTH, self.Throat.machTH]])) throat_input.append(' '.join([_2str(x) for x in ['aSDa1', 'thcwSD', 'machSD']])) throat_input.append(' '.join([_2str(x) for x in [self.Throat.aSDa1, self.Throat.thcwSD, self.Throat.machSD]])) throat_input.append(split) # ------------------------------- # --- Subsonic Diffuser Input --- # ------------------------------- subdiff_input = [_2str('DataID')] subdiff_input.append(' '.join([_2str(self.SubDiff.DataID)])) subdiff_input.append(' '.join([_2str(x) for x in ['Ksubd', 'KLsubd', 'FLsubd', 'theqsd', 'dptsubd']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.Ksubd, self.SubDiff.KLsubd, self.SubDiff.FLsubd, self.SubDiff.theqsd, self.SubDiff.dptsubd]])) subdiff_input.append(' '.join([_2str(x) for x in ['Ksdcb']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.Ksdcb]])) subdiff_input.append(' '.join([_2str(x) for x in ['Ksdcb', 'FdcbX', 'thcbX', 'FLcbX']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.Ksdcb, self.SubDiff.FdcbX, self.SubDiff.thcbX, self.SubDiff.FLcbX]])) subdiff_input.append(' '.join([_2str(x) for x in ['Ksdcw']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.Ksdcw]])) subdiff_input.append(' '.join([_2str(x) for x in ['FncwSD', 'FncwX', 'FLcwX']])) subdiff_input.append(' '.join([_2str(x) for x in [self.SubDiff.FncwSD, self.SubDiff.FncwX, self.SubDiff.FLcwX]])) subdiff_input.append(split) # ------------------------- # --- Engine Face Input --- # ------------------------- engineface_input = [_2str('DataID')] engineface_input.append(' '.join([_2str(self.EngineFace.DataID)])) engineface_input.append(' '.join([_2str(x) for x in ['KxEF', 'FxEF', 'KyEF', 'FyEF', 'ThetEF']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.KxEF, self.EngineFace.FxEF, self.EngineFace.KyEF, self.EngineFace.FyEF, self.EngineFace.ThetEF]])) engineface_input.append(' '.join([_2str(x) for x in ['Kef']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.Kef]])) engineface_input.append(' '.join([_2str(x) for x in ['diamEF', 'Hubtip']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.diamEF, self.EngineFace.Hubtip]])) engineface_input.append(' '.join([_2str(x) for x in ['Kspin']])) engineface_input.append(' '.join([_2str(x) for x in [self.EngineFace.Kspin]])) engineface_input.append(split) # -------------------------- # --- Grid Spacing Input --- # -------------------------- gridspacing_input = [_2str('DataID')] gridspacing_input.append(' '.join([_2str(self.GridSpacing.DataID)])) gridspacing_input.append(' '.join([_2str(x) for x in ['Fgdds', 'Rgsmax', 'Fdswall', 'Fdssym', 'Fdscex', 'Fdsthrt']])) gridspacing_input.append(' '.join([_2str(x) for x in [self.GridSpacing.Fgdds, self.GridSpacing.Rgsmax, self.GridSpacing.Fdswall, self.GridSpacing.Fdssym, self.GridSpacing.Fdscex, self.GridSpacing.Fdsthrt]])) gridspacing_input.append(' '.join([_2str(x) for x in ['Ddinf', 'Ddfar', 'Ddnoz', 'Ddclp', 'thfar', 'Fgnoz']])) gridspacing_input.append(' '.join([_2str(x) for x in [self.GridSpacing.Ddinf, self.GridSpacing.Ddfar, self.GridSpacing.Ddnoz, self.GridSpacing.Ddclp, self.GridSpacing.thfar, self.GridSpacing.Fgnoz]])) gridspacing_input.append(split) # --------------------------------------- # --- Write Header Output to SUPIN.in --- # --------------------------------------- filename = '../SUPIN/SUPIN.in' file_handle = open(filename, 'w') file_handle.write("\n".join(header_input)) # ------------------------------------ # --- Write Input to SUPIN.in --- # ------------------------------------ file_handle.write("\n".join(main_input)) file_handle.write("\n".join(freestream_input)) file_handle.write("\n".join(approach_input)) file_handle.write("\n".join(capture_input)) file_handle.write("\n".join(extsupdiff_input)) file_handle.write("\n".join(cowllip_input)) file_handle.write("\n".join(cowlext_input)) file_handle.write("\n".join(throat_input)) file_handle.write("\n".join(subdiff_input)) file_handle.write("\n".join(engineface_input)) file_handle.write("\n".join(gridspacing_input)) file_handle.close() # ------------------------------- # --- Execute SUPIN Component --- # ------------------------------- super(SUPIN, self).execute() # ------------------------- # --- Parse Output File --- # ------------------------- with open('../SUPIN/SUPIN.out') as f: lines = f.readlines() for line in lines: if "pt_2 / pt_L =" in line: self.Outputs.pt2_ptL = float(line.split("=")[-1]) elif "Tt2 / TtL =" in line: self.Outputs.tt2_ttL = float(line.split("=")[-1]) elif "Mach_2 =" in line: self.Outputs.M2 = float(line.split("=")[-1]) elif "rhub (ft) =" in line: self.Outputs.Rspin = float(line.split("=")[-1]) elif "diamEF (ft) =" in line: self.Outputs.diamEF = float(line.split("=")[-1]) elif "Inlet Drag Coefficient, cdrag" in line: self.Outputs.Cd = float(line.split("=")[-1]) elif "Wa2 (actual) =" in line: self.Outputs.mdot = float(line.split("=")[-1]) elif "A_2 (ft) =" in line: self.Outputs.A2 = float(line.split("=")[-1]) elif "y_EF (ft) =" in line: self.Outputs.yEF = float(line.split("=")[-1]) elif "rhub (ft) =" in line: self.Outputs.Rspin = float(line.split("=")[-1]) else: pass if not self.Outputs.pt2_ptL: self.Outputs.pt2_ptL = 0.8 if not self.Outputs.Cd: self.Outputs.Cd = 1.0 print "---------------------------------" print "------- SUPIN Parameters --------" print "---------------------------------" print '---Outputs---' print 'Precov: ', self.Outputs.pt2_ptL print 'CdWave: ', self.Outputs.Cd print 'Obj: ', -1.0*self.Outputs.pt2_ptL + 0.5*self.Outputs.Cd try: src_file = '../SUPIN/SUPIN.egads' dst_folder = os.path.join(os.getcwd(), '../ESP/') shutil.copy2(src_file, dst_folder) except: pass