Skip to content

Commit

Permalink
fix tail flex model to use theta from bending model
Browse files Browse the repository at this point in the history
  • Loading branch information
mjburton committed Dec 13, 2017
1 parent 761babf commit f08b57d
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 26 deletions.
7 changes: 4 additions & 3 deletions gpkitmodels/GP/aircraft/tail/empennage.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ def setup(self):
l = self.l = self.tailboom.l

state = TailBoomState()
loading = [self.tailboom.hbending(self.tailboom, self.htail, state),
self.tailboom.vbending(self.tailboom, self.vtail, state),
self.tailboom.vtorsion(self.tailboom, self.vtail, state)]
self.hbend = self.tailboom.hbending(self.tailboom, self.htail, state)
self.vbend = self.tailboom.vbending(self.tailboom, self.vtail, state)
self.vtor = self.tailboom.vtorsion(self.tailboom, self.vtail, state)
loading = [self.hbend, self.vbend, self.vtor]

constraints = [
W/mfac >= sum(c.W for c in self.components),
Expand Down
4 changes: 2 additions & 2 deletions gpkitmodels/GP/aircraft/tail/tail_boom.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,9 @@ def setup(self, tailboom, htail, state):
Vne = self.Vne = state.Vne
CLmax = htail.planform.CLmax

return [F >= 0.5*rhosl*Vne**2*S*CLmax,
return [F >= 0.5*rhosl*Vne**2*S,
th >= F*l**2/E/I0*(1+k)/2,
th <= thmax,
th*CLmax <= thmax,
]

class TailBoom(Model):
Expand Down
52 changes: 35 additions & 17 deletions gpkitmodels/SP/aircraft/tail/tail_boom_flex.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,48 @@
" tail boom flexibility "
import numpy as np
from gpkit import Model, Variable, SignomialsEnabled
from numpy import pi
from gpkit import Model, parse_variables, SignomialsEnabled

class TailBoomFlexibility(Model):
"tail boom flexibility model"
def setup(self, htail, tailboom, wing, state):
""" Tail Boom Flexibility Model
Fne = Variable("F_{NE}", "-", "tail boom flexibility factor")
deda = Variable("d\\epsilon/d\\alpha", "-", "wing downwash derivative")
SMcorr = Variable("SM_{corr}", 0.55, "-", "corrected static margin")
Variables
---------
Fne [-] tail boom flexibility factor
deda [-] wing downwash derivative
SMcorr 0.55 [-] corrected static margin
sph1 [-] flexibility helper variable 1
sph2 [-] flexibility helper variable 2
# signomial helper variables
sph1 = Variable("sph1", "-", "first term involving $V_h$")
sph2 = Variable("sph2", "-", "second term involving $V_h$")
LaTex Strings
-------------
Fne F_{\mathrm{NE}}
deda d\\epsilon/d\\alpha
SMcorr SM_{\\mathrm{corr}}
"""
def setup(self, htail, hbending, wing):
exec parse_variables(TailBoomFlexibility.__doc__)

mh = htail.mh
mw = wing.mw
Vh = htail.Vh
th = hbending.th
CLhmin = htail.CLhmin
CLwmax = wing.planform.CLmax
Sw = wing.planform.S
bw = wing.planform.b
lh = htail.lh
CM = wing.planform.CM

constraints = [
Fne >= (1 + htail.mh*0.5*state.Vne**2*state.rhosl
* htail["S"]*htail.lh**2/tailboom.E
/ tailboom.I0*tailboom.kfac),
sph1*(wing["m_w"]*Fne/htail.mh/htail.Vh) + deda <= 1,
sph2 <= htail.Vh*htail.CLhmin/wing.planform.CLmax,
Fne >= 1 + mh*th,
sph1*(mw*Fne/mh/Vh) + deda <= 1,
sph2 <= Vh*CLhmin/CLwmax,
# (sph1 + sph2).mono_lower_bound({"sph1": .48, "sph2": .52}) >= (
# SMcorr + wing["C_M"]/wing["C_{L_{max}}"]),
deda >= wing["m_w"]*wing["S"]/wing["b"]/4/np.pi/htail.lh]
deda >= mw*Sw/bw/4/pi/lh]

with SignomialsEnabled():
constraints.extend([sph1 + sph2 >= SMcorr + wing.planform.CM/wing.planform.CLmax])
constraints.extend([sph1 + sph2 >= SMcorr + CM/CLwmax])

return constraints
12 changes: 8 additions & 4 deletions gpkitmodels/SP/aircraft/wing/wing.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
" wing.py "
import numpy as np
from gpkit.constraints.array import ArrayConstraint
from gpkitmodels.GP.aircraft.wing.wing import Wing as WingGP
from gpkit import Variable, SignomialsEnabled
from gpkit import parse_variables, SignomialsEnabled

#pylint: disable=attribute-defined-outside-init, invalid-name

class Wing(WingGP):
""" SP wing model
Variables
---------
mw [-] span wise effectiveness
"""
def setup(self, N=5):
exec parse_variables(Wing.__doc__)

self.wing = WingGP.setup(self, N=N)
mw = Variable("m_w", "-", "span wise effectiveness")

with SignomialsEnabled():
constraints = [mw*(1 + 2/self.planform["AR"]) >= 2*np.pi]

Expand Down

0 comments on commit f08b57d

Please sign in to comment.