From f08b57dd018c13dacac4b8731e9c7f49c8b34a8d Mon Sep 17 00:00:00 2001 From: mjburton Date: Wed, 13 Dec 2017 15:31:03 -0500 Subject: [PATCH] fix tail flex model to use theta from bending model --- gpkitmodels/GP/aircraft/tail/empennage.py | 7 +-- gpkitmodels/GP/aircraft/tail/tail_boom.py | 4 +- .../SP/aircraft/tail/tail_boom_flex.py | 52 +++++++++++++------ gpkitmodels/SP/aircraft/wing/wing.py | 12 +++-- 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/gpkitmodels/GP/aircraft/tail/empennage.py b/gpkitmodels/GP/aircraft/tail/empennage.py index 8e70c170..9ed1fb26 100644 --- a/gpkitmodels/GP/aircraft/tail/empennage.py +++ b/gpkitmodels/GP/aircraft/tail/empennage.py @@ -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), diff --git a/gpkitmodels/GP/aircraft/tail/tail_boom.py b/gpkitmodels/GP/aircraft/tail/tail_boom.py index 7e7e487b..f549a09d 100644 --- a/gpkitmodels/GP/aircraft/tail/tail_boom.py +++ b/gpkitmodels/GP/aircraft/tail/tail_boom.py @@ -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): diff --git a/gpkitmodels/SP/aircraft/tail/tail_boom_flex.py b/gpkitmodels/SP/aircraft/tail/tail_boom_flex.py index 91cf00f5..d29b8125 100644 --- a/gpkitmodels/SP/aircraft/tail/tail_boom_flex.py +++ b/gpkitmodels/SP/aircraft/tail/tail_boom_flex.py @@ -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 diff --git a/gpkitmodels/SP/aircraft/wing/wing.py b/gpkitmodels/SP/aircraft/wing/wing.py index c1fd9801..288f114c 100644 --- a/gpkitmodels/SP/aircraft/wing/wing.py +++ b/gpkitmodels/SP/aircraft/wing/wing.py @@ -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]