Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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