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._calc_data()
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
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()