Source code for mmqprop.Propeller

import os
import sys

from .file_io import load_data


[docs]class Propeller(object): """Load standard QPROP propeller file from data dir""" def __init__(self, ctx, fname="data/default_prop"): """set propfile name and initial data values""" self.name, self.rdata = load_data(fname) self.debug = ctx.debug self.runfile = None self.radius = 0 self.irdim = 81
[docs] def read_error(self, msg): print("Read failed:", msg) sys.exit(1)
[docs] def parse(self): nlines = len(self.rdata) if nlines == 0: self.read_error("not enough parameters") try: # get number of blades and optional radius dline = self.rdata[0] self.nblades = dline[0] if len(dline) > 1: self.radius = dline[1] # load base properties ----------- # read CL0 and CL_a dline = self.rdata[1] cl0b = dline[0] clab = dline[1] # read CLMIN and CLMAX dline = self.rdata[2] clminb = dline[0] clmaxb = dline[1] # read CL/CD quadratic params dline = self.rdata[3] cd0b = dline[0] cd2ub = dline[1] cd2lb = dline[2] clcd0b = dline[3] # read REREF and REEXP dline = self.rdata[4] rerefb = dline[0] reexpb = dline[1] # Read scaling factors (1) dline = self.rdata[5] self.rfac = dline[0] self.cfac = dline[1] self.bfac = dline[2] # Read scaling factors (2) dline = self.rdata[6] self.radd = dline[0] self.cadd = dline[1] self.badd = dline[2] if self.debug: print("base props complete") # read prop coordinate data r = [] c = [] beta = [] exdata = [] for line in self.rdata[7:]: pline = 7 if self.debug: print("processing line:", pline) r.append(line[0]) c.append(line[1]) beta.append(line[2]) # check for optional element data props = [] # initial values for props if self.debug: print("initial values") cl0 = cl0b cla = clab clmin = clminb clmax = clmaxb cd0 = cd0b cd2u = cd2ub cd2l = cd2lb clcd0 = clcd0b reref = rerefb reexp = reexpb if self.debug: print("initial base complete") # check for extended aero data if len(line) > 3: if self.debug: print("loading extended data", line) try: cl0 = line[3] cla = line[4] clmin = line[5] clmax = line[6] cd0 = line[7] cd2u = line[8] cd2l = line[9] clcd0 = line[10] reref = rerefb reexp = reexpb if len(line) > 11: reref = line[11] if len(line) == 13: reexp = line[12] except IndexError: self.read_error("bad extended aero data") # save props for this bld=ade section if self.debug: print("...done") props = [] props.append([cl0, cla, clmin, clmax]) props.append([cd0, cd2u, cd2l, clcd0]) props.append([reref, reexp]) if self.debug: print(props) exdata.append(props) self.r = r self.c = c self.beta = beta self.props = exdata except: msg = f"general read error on line {pline}" self.read_error(msg)
[docs] def dump(self): print("Propeller:", self.name) print("Runfile:", self.runfile) print("Blades:", self.nblades) print("Initial radius:", self.radius) print("RFAC:", self.rfac) print("CFAC:", self.cfac) print("BFAC:", self.bfac) print("RADD:", self.radd) print("CADD:", self.cadd) print("BADD:", self.badd) print("R:", self.r) print("C:", self.c) print("BETA:", self.beta) print("PROPS:") for p in self.props: print("\t", p)
[docs] def prepare(self): """use splines to henerate fine grid of data"""
if __name__ == "__main__": data_dir = "../data" pname = "gcam6x3f" pfile = os.path.join(data_dir, pname) p = Propeller(pfile) p.parse() p.dump()