Skip to content

Commit

Permalink
modularize wing class for htail and vtail use
Browse files Browse the repository at this point in the history
  • Loading branch information
mjburton committed Oct 13, 2017
1 parent ba05a3e commit 79d9c36
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 91 deletions.
36 changes: 9 additions & 27 deletions gpkitmodels/GP/aircraft/tail/horizontal_tail.py
Expand Up @@ -10,38 +10,20 @@
#pylint: disable=invalid-name, too-many-locals, unused-variable
#pylint: disable=attribute-defined-outside-init

class HorizontalTail(Model):
class HorizontalTail(AeroSurf):
"horizontal tail model"
def setup(self, N=3, lam=0.8):
flight_model = TailAero
sparModel = None

def setup(self, N=3, lam=0.8):
self.ascs = AeroSurf.setup(self, N, lam)
self.skin.substitutions.update({"\\rho_{CFRP}": 0.049})
self.foam.substitutions.update({"\\bar{A}_{jh01}": 0.0548,
"\\rho_{foam}": 0.024})
Vh = Variable("V_h", "-", "horizontal tail volume coefficient")
W = Variable("W", "lbf", "horizontal tail weight")
lh = Variable("l_h", "ft", "horizontal tail moment arm")
CLhmin = Variable("(C_{L_h})_{min}", 0.75, "-",
"max downlift coefficient")
mh = Variable("m_h", "-", "horizontal tail span effectiveness")
mfac = Variable("m_{fac}", 1.1, "-", "horizontal tail margin factor")

cb, eta, deta, cbarmac = c_bar(lam, N)
subdict = {"\\lambda": lam, "\\bar{c}": cb, "\\eta": eta, "AR": 5.0,
"\\bar{c}_{ave}": (cb[1:]+cb[:-1])/2, "\\tau": 0.08,
"\\bar{c}_{MAC}": cbarmac, "d\\eta": deta,
"C_{L_{max}}": 1.5}

self.surf = AeroSurf(N=N)
self.surf.substitutions.update(subdict)

self.skin = WingSkin(self.surf)
self.skin.substitutions.update({"\\rho_{CFRP}": 0.049})
self.foam = WingInterior(self.surf)
self.foam.substitutions.update({"\\bar{A}_{jh01}": 0.0548})
self.foam.substitutions.update({"\\rho_{foam}": 0.024})

self.components = [self.skin, self.foam]

constraints = [W/mfac >= sum([c["W"] for c in self.components]),
mh*(1+2.0/self.surf["AR"]) <= 2*np.pi]

self.flight_model = TailAero

return constraints, self.surf, self.components
return self.ascs, mh*(1+2.0/self.planform["AR"]) <= 2*np.pi
34 changes: 9 additions & 25 deletions gpkitmodels/GP/aircraft/tail/vertical_tail.py
Expand Up @@ -9,34 +9,18 @@
#pylint: disable=invalid-name, too-many-locals, unused-variable
#pylint: disable=attribute-defined-outside-init

class VerticalTail(Model):
class VerticalTail(AeroSurf):
"vertical tail model"
flight_model = TailAero
sparModel = None
def setup(self, N=3, lam=0.8):

Vv = Variable("V_v", "-", "vertical tail volume coefficient")
W = Variable("W", "lbf", "vertical tail weight")
lv = Variable("l_v", "ft", "vertical tail moment arm")
mfac = Variable("m_{fac}", 1.1, "-", "vertical tail margin factor")

cb, eta, deta, cbarmac = c_bar(lam, N)
subdict = {"\\lambda": lam, "\\bar{c}": cb, "\\eta": eta,
"\\bar{c}_{ave}": (cb[1:]+cb[:-1])/2, "\\tau": 0.08,
"\\bar{c}_{MAC}": cbarmac, "d\\eta": deta,
"C_{L_{max}}": 1.5}

self.surf = AeroSurf(N=N)
self.surf.substitutions.update(subdict)

self.skin = WingSkin(self.surf)
self.ascs = AeroSurf.setup(self, N, lam)
self.skin.substitutions.update({"\\rho_{CFRP}": 0.049})
self.foam = WingInterior(self.surf)
self.foam.substitutions.update({"\\bar{A}_{jh01}": 0.0548})
self.foam.substitutions.update({"\\rho_{foam}": 0.024})
self.foam.substitutions.update({"\\bar{A}_{jh01}": 0.0548,
"\\rho_{foam}": 0.024})

self.components = [self.skin, self.foam]

constraints = [W/mfac >= sum([c["W"] for c in self.components])]

self.flight_model = TailAero
Vv = Variable("V_v", "-", "vertical tail volume coefficient")
lv = Variable("l_v", "ft", "vertical tail moment arm")

return constraints, self.surf, self.components
return self.ascs, self.components
83 changes: 44 additions & 39 deletions gpkitmodels/GP/aircraft/wing/wing.py
Expand Up @@ -12,45 +12,7 @@
#pylint: disable=invalid-name, attribute-defined-outside-init, unused-variable
#pylint: disable=too-many-instance-attributes, too-many-locals

class Wing(Model):
"""
Aicraft wing model for constant tapered wing
INPUTS
------
N : int number of sections
lam : float taper ratio
hollow: boolean True if wing is not hollow (filled with foam)
"""
def setup(self, N=5, lam=0.5, spar=CapSpar, hollow=False):

self.N = N

W = Variable("W", "lbf", "wing weight")
mfac = Variable("m_{fac}", 1.2, "-", "wing weight margin factor")

cb, eta, deta, cbarmac = c_bar(lam, N)
subdict = {"\\lambda": lam, "\\bar{c}": cb, "\\eta": eta,
"\\bar{c}_{ave}": (cb[1:]+cb[:-1])/2,
"\\bar{c}_{MAC}": cbarmac, "d\\eta": deta}

self.surf = AeroSurf(N)
self.surf.substitutions.update(subdict)
self.spar = spar(N, self.surf)
self.skin = WingSkin(self.surf)
self.components = [self.spar, self.skin]

if not hollow:
self.foam = WingInterior(self.surf)
self.components.extend([self.foam])

constraints = [W/mfac >= sum(c["W"] for c in self.components)]

self.flight_model = WingAero
self.loading = WingLoading

return constraints, self.surf, self.components

class AeroSurf(Model):
class Planform(Model):
"The thing that creates the lift"
def setup(self, N):

Expand Down Expand Up @@ -120,3 +82,46 @@ def setup(self, static, state):
]

return constraints

class AeroSurf(Model):
"""
Aicraft wing model for constant tapered wing
INPUTS
------
N : int number of sections
lam : float taper ratio
hollow: boolean True if wing is not hollow (filled with foam)
"""

sparModel = CapSpar
fillModel = WingInterior
flight_model = WingAero
loading = WingLoading

def setup(self, N=5, lam=0.5):

self.N = N

W = Variable("W", "lbf", "wing weight")
mfac = Variable("m_{fac}", 1.2, "-", "wing weight margin factor")

cb, eta, deta, cbarmac = c_bar(lam, N)
subdict = {"\\lambda": lam, "\\bar{c}": cb, "\\eta": eta,
"\\bar{c}_{ave}": (cb[1:]+cb[:-1])/2,
"\\bar{c}_{MAC}": cbarmac, "d\\eta": deta}

self.planform = Planform(N)
self.planform.substitutions.update(subdict)
self.skin = WingSkin(self.planform)
self.components = [self.skin]

if self.sparModel:
self.spar = self.sparModel(N, self.planform)
self.components.extend([self.spar])
if self.fillModel:
self.foam = self.fillModel(self.planform)
self.components.extend([self.foam])

constraints = [W/mfac >= sum(c["W"] for c in self.components)]

return constraints, self.planform, self.components

0 comments on commit 79d9c36

Please sign in to comment.