diff --git a/gpkitmodels/GP/aircraft/tail/empennage.py b/gpkitmodels/GP/aircraft/tail/empennage.py index c7c190de..bfa86f31 100644 --- a/gpkitmodels/GP/aircraft/tail/empennage.py +++ b/gpkitmodels/GP/aircraft/tail/empennage.py @@ -11,21 +11,21 @@ def setup(self): mfac = Variable("m_{fac}", 1.0, "-", "Tail weight margin factor") W = Variable("W", "lbf", "empennage weight") - self.horizontaltail = HorizontalTail() + self.htail = HorizontalTail() self.verticaltail = VerticalTail() self.tailboom = TailBoom() - self.components = [self.horizontaltail, self.verticaltail, + self.components = [self.htail, self.verticaltail, self.tailboom] state = TailBoomState() - loading = [self.tailboom.horizontalbending(self.horizontaltail, state), + loading = [self.tailboom.horizontalbending(self.htail, state), self.tailboom.verticalbending(self.verticaltail, state), self.tailboom.verticaltorsion(self.verticaltail, state)] constraints = [ - W/mfac >= (self.horizontaltail["W"] + self.verticaltail["W"] + W/mfac >= (self.htail.topvar("W") + self.verticaltail["W"] + self.tailboom["W"]), - self.tailboom["l"] >= self.horizontaltail["l_h"], + self.tailboom["l"] >= self.htail["l_h"], self.tailboom["l"] >= self.verticaltail["l_v"], ] diff --git a/gpkitmodels/GP/aircraft/tail/horizontal_tail.py b/gpkitmodels/GP/aircraft/tail/horizontal_tail.py index 48eb604f..46920141 100644 --- a/gpkitmodels/GP/aircraft/tail/horizontal_tail.py +++ b/gpkitmodels/GP/aircraft/tail/horizontal_tail.py @@ -2,47 +2,51 @@ import numpy as np from gpkit import Model, Variable from tail_aero import TailAero +from gpkitmodels.GP.aircraft.wing.wing import AeroSurf +from gpkitmodels.GP.aircraft.wing.constant_taper_chord import c_bar +from gpkitmodels.GP.aircraft.wing.wing_interior import WingInterior +from gpkitmodels.GP.aircraft.wing.wing_skin import WingSkin class HorizontalTail(Model): "horizontal tail model" - def setup(self, lam=0.8): - Sh = Variable("S", "ft**2", "horizontal tail area") + def setup(self, N=3, lam=0.8): + Vh = Variable("V_h", "-", "horizontal tail volume coefficient") - ARh = Variable("AR_h", "-", "horizontal tail aspect ratio") - Abar = Variable("\\bar{A}_{NACA0008}", 0.0548, "-", - "cross sectional area of NACA 0008") - rhofoam = Variable("\\rho_{foam}", 1.5, "lbf/ft^3", - "Density of formular 250") - rhoskin = Variable("\\rho_{skin}", 0.049, "g/cm**2", - "horizontal tail skin density") - bh = Variable("b", "ft", "horizontal tail span") W = Variable("W", "lbf", "horizontal tail weight") - Vh = Variable("V_h", "-", "horizontal tail volume coefficient") - g = Variable("g", 9.81, "m/s^2", "Gravitational acceleration") 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") - cth = Variable("c_{t_h}", "ft", "horizontal tail tip chord") - crh = Variable("c_{r_h}", "ft", "horizontal tail root chord") - lamh = Variable("\\lambda", lam, "-", "horizontal tail taper ratio") - lamhfac = Variable("\\lambda_h/(\\lambda_h+1)", lam/(lam+1), "-", - "horizontal tail taper ratio factor") - CLhtmax = Variable("C_{L_{max}}", 1.5, "-", - "maximum CL of horizontal tail") mfac = Variable("m_{fac}", 1.1, "-", "horizontal tail margin factor") - tau = Variable("\\tau", 0.08, "-", "horizontal tail thickness ratio") + + 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.skin.substitutions.update({"\\rho_{CFRP}": 0.049}) + self.foam = WingInterior() + self.foam.substitutions.update({"\\bar{A}_{jh01}": 0.0548}) + self.foam.substitutions.update({"\\rho_{foam}": 0.024}) + + self.components = [self.skin, self.foam] constraints = [ - bh**2 == ARh*Sh, - mh*(1+2/ARh) <= 2*np.pi, - W/mfac >= g*rhoskin*Sh + rhofoam*Sh**2/bh*Abar, - cth == 2*Sh/bh*lamhfac, - crh == cth/lam, - lamh == lamh + W/mfac >= sum([c["W"] for c in self.components]), + mh*(1+2.0/self.surf["AR"]) <= 2*np.pi, + self.skin["W"] >= (self.skin["\\rho_{CFRP}"]*self.surf["S"]*2 + * self.skin["t"]*self.skin["g"]), + self.foam["W"] >= 2*( + self.foam["g"]*self.foam["\\rho_{foam}"] + *self.foam["\\bar{A}_{jh01}"]*self.surf["c_{ave}"]**2 + * (self.surf["b"]/2)*self.surf["d\\eta"]).sum() ] - return constraints + return constraints, self.surf, self.components def flight_model(self, state): return TailAero(self, state) diff --git a/gpkitmodels/GP/aircraft/wing/wing.py b/gpkitmodels/GP/aircraft/wing/wing.py index 6ad4f22c..932bb24a 100644 --- a/gpkitmodels/GP/aircraft/wing/wing.py +++ b/gpkitmodels/GP/aircraft/wing/wing.py @@ -56,7 +56,7 @@ def setup(self, N=5, lam=0.5, hollow=False): self.components.extend([self.foam]) constraints.extend([ self.foam["W"] >= 2*( - self.foam["g"]*self.foam["\\rho"] + self.foam["g"]*self.foam["\\rho_{foam}"] * self.foam["\\bar{A}_{jh01}"]*self.surf["c_{ave}"]**2 * (self.surf["b"]/2)*self.surf["d\\eta"]).sum()])