예제 #1
0
def load(sheetName):
    """
    loads list of constants from xls database
    """
    pth    = MyPaths()
    output = {}
    sh = ReadDatabase(pth.db.constants,sheetName)
    for irow in range(1,sh.nrows):
        name  = sh.read_cell(irow,1)
        value = sh.read_row(irow,2,False)
        output[str(name)] = value
    return output
예제 #2
0
 def _read_db(self,sheetName='Sheet1'):
     db = ReadDatabase(self.dbPath,sheetName)
     nComp = db.nrows - 1
     self.name = db.read_column(1,0,nComp,True)
     self.desc = db.read_column(1,1,nComp,True)
     self.relCD = db.read_column(1,2,nComp,True)
     mode = db.read_column(1,3,nComp,True)
     for m in mode:
         if m=='*':
             self.mode.append(True)
         else:
             self.mode.append(False)        
예제 #3
0
 def load(self,name, xlsPath=None):
     """ loads turbofan engine from database file"""
     path = MyPaths()
     if xlsPath==None:
         xlsPath = path.db.engineTurbofan
     self.name = str(name)
     db = ReadDatabase(xlsPath,self.name)
     self.thrustMC       = db.read_row(-1,1) *constants.GRAVITY_ACCEL
     self.sfcMC          = db.read_row(-1,1)
     self.length         = db.read_row(-1,1)
     self.diameter       = db.read_row(-1,1)
     self.mass           = db.read_row(-1,1,False)
     self.BPR            = db.read_row(-1,1)
     self._calc_data()
예제 #4
0
 def load_xls(self, name, xlsPath=None):
     """
     Loads aircraft data from *.xls datasheet and calculates necessary 
     parameters:
     - full geometry data set
     - weight and cg
     - parasite drag curve: CD0 vs Mach
     - engine thrust table if it does not exist for selected engine
     
     Parameters
     ----------
     
     name : string
         name of aircraft in database
     xlsPath : path, optional
         database path
     """
     self.name = str(name)
     if xlsPath == None:
         xlsPath = path.db.aircraftFW
     keyword = "SECTION: "
     db = ReadDatabase(xlsPath, name, keyword)
     idx = db.find_header(keyword + "DESIGN QUANTITIES")
     self.type = db.read_row(idx + 1, 1)
     self.designGoals.fuelMass = db.read_row(-1, 1)
     self.designGoals.avionicsMass = db.read_row(-1, 1)
     self.designGoals.grossMass = db.read_row(-1, 1)
     self.designGoals.cruiseMach = db.read_row(-1, 1)
     self.designGoals.cruiseAltitude = db.read_row(-1, 1)
     self.designGoals.loadFactor = db.read_row(-1, 1)
     self.designGoals.loadFactorLanding = db.read_row(-1, 1)
     self.designGoals.staticThrust = db.read_row(-1, 1)
     self.designGoals.numberOfOccupants = db.read_row(-1, 1)
     idx = db.find_header(keyword + "FUSELAGE")
     self.fusWidth = db.read_row(idx + 1, 1, False)
     idx = db.find_header(keyword + "MAIN WING")
     self.wing.segSpans = db.read_row(idx + 1, 1, True)
     self.wing.chords = db.read_row(-1, 1, True)
     self.wing.airfoilNames = db.read_row(-1, 1, True)
     self.wing.secOffset = db.read_row(-1, 1, True)
     self.wing.segDihedral = db.read_row(-1, 1, True)
     self.wing.secTwist = db.read_row(-1, 1, True)
     self.wing.incidence = db.read_row(-1, 1, False)
     elevonLocation = db.read_row(-1, 1, True)
     flapLocation = db.read_row(-1, 1, True)
     self.wing.set_elevon(elevonLocation)
     self.wing.set_flap(flapLocation)
     self.wing.flap.type = db.read_row(-1, 1, False)
     self.wing.material = db.read_row(-1, 1, False)
     self.wing.fuelTankCGratio = db.read_row(-1, 1, True)
     idx = db.find_header(keyword + "PROPULSION")
     engineName = db.read_row(idx + 1, 1, False)
     self.propulsion.load(engineName, True)
     self.propulsion.sfcModel = None
     self.propulsion.numberOfEngines = int(db.read_row(-1, 1, False))
     self.propulsion.CGx = db.read_row(-1, 1, True)
     self.propulsion.CGy = db.read_row(-1, 1, True)
     self.propulsion.CGz = db.read_row(-1, 1, True)
     self.propulsion.engine.deignAltitude = self.designGoals.cruiseAltitude
     self.propulsion.engine.designMach = self.designGoals.cruiseMach
     self.propulsion.engine.designThrust = self.designGoals.staticThrust / self.propulsion.numberOfEngines
     idx = db.find_header(keyword + "LANDING GEAR")
     self.landingGear.groundContactX = db.read_row(idx + 1, 1, True)
     self.landingGear.groundContactY = db.read_row(-1, 1, True)
     self.landingGear.groundContactZ = db.read_row(-1, 1, True)
     self.landingGear.tireWidth = db.read_row(-1, 1, True)
     self.landingGear.tireDiameter = db.read_row(-1, 1, True)
     self.landingGear.strutLength = db.read_row(-1, 1, True)
     # self.landingGear._set_right_mlg()
     idx = db.find_header(keyword + "VLM PARAM")
     self.vlm.panelsChordwise = db.read_row(idx + 1, 1, False)
     self.vlm.panelsSpanwise = db.read_row(-1, 1, False)
     self.vlm.distribution = db.read_row(-1, 1, False)
     sec = db.read_section("PAYLOAD", 0)
     for line in sec:
         name = str(line[0])
         mass = float(line[1])
         CG = np.array([float(val) for val in line[2:5]])
         MOI = np.array([float(val) for val in line[5:8]])
         self.mass.payload.add_item(name, mass, CG, MOI)
     self.mass.update_total()
     self._process_data(True)
     #        fuelCG = self.wing.locate_on_wing(self.wing.fuelTankCGratio[0],self.wing.fuelTankCGratio[1])
     #        fuelCG[1] = 0.0
     #        self.mass.set_fuel_mass(self.designGoals.fuelMass,fuelCG)
     self.designGoals._process_data()
     self._update_parasite_drag()
     self._update_mass()