Skip to content

Commit

Permalink
git add materials models to spar
Browse files Browse the repository at this point in the history
  • Loading branch information
mjburton committed Nov 30, 2017
1 parent 1293218 commit a4e0466
Show file tree
Hide file tree
Showing 10 changed files with 103 additions and 35 deletions.
6 changes: 3 additions & 3 deletions gpkitmodels/GP/aircraft/tail/horizontal_tail.py
Expand Up @@ -48,8 +48,8 @@ def setup(self, N=3):
self.planform.substitutions.update(
{self.planform.AR: 4, self.planform.tau: 0.08,
self.planform.lam: 0.8})
# self.skin.substitutions.update({self.skin.rhocfrp: 0.049})
self.foam.substitutions.update({self.foam.Abar: 0.0548,
self.foam.rhocore: 0.024})
if self.fillModel:
self.foam.substitutions.update({self.foam.Abar: 0.0548,
self.foam.material.rho: 0.024})

return self.ascs, mh*(1+2.0/self.planform["AR"]) <= 2*np.pi
7 changes: 5 additions & 2 deletions gpkitmodels/GP/aircraft/tail/vertical_tail.py
Expand Up @@ -30,17 +30,20 @@ class VerticalTail(Wing):
lv l_{\\mathrm{v}}
"""

flight_model = TailAero
fillModel = WingCore
sparModel = None

def setup(self, N=3):
exec parse_variables(VerticalTail.__doc__)

WingSkin.material = Kevlar()
self.ascs = Wing.setup(self, N)
self.planform.substitutions.update(
{self.planform.tau: 0.08, self.planform.lam: 0.8})
self.foam.substitutions.update({self.foam.Abar: 0.0548,
self.foam.rhocore: 0.024})
if self.fillModel:
self.foam.substitutions.update({self.foam.Abar: 0.0548,
self.foam.material.rho: 0.024})

return self.ascs, self.components
18 changes: 10 additions & 8 deletions gpkitmodels/GP/aircraft/wing/boxspar.py
Expand Up @@ -2,6 +2,8 @@
from gpkit import Model, parse_variables
from .sparloading import SparLoading
from .gustloading import GustL
from gpkitmodels.GP.materials.cfrp import CFRPUD, CFRPFabric
from gpkitmodels.GP.materials.foam import Foam

#pylint: disable=exec-used, undefined-variable, unused-argument, invalid-name

Expand All @@ -10,14 +12,10 @@ class BoxSpar(Model):
Scalar Variables
----------------
rhocfrp 1.6 [g/cm^3] density of CFRP
E 2e7 [psi] Young modulus of CFRP
W [lbf] spar weight
wlim 0.15 [-] spar width to chord ratio
tshearmin 0.012 [in] min gauge shear web thickness
g 9.81 [m/s^2] gravitational acceleration
mfac 0.97 [-] curvature knockdown factor
rhocore 0.036 [g/cm^3] foam core density
tcoret 0.02 [-] core to thickness ratio
Variables of length N-1
Expand All @@ -41,11 +39,8 @@ class BoxSpar(Model):
LaTex Strings
-------------
rhocfrp \\rho_{\\mathrm{CFRP}}
wlim w_{\\mathrm{lim}}
tshearmin t_{\\mathrm{shear-min}}
mfac m_{\\mathrm{fac}}
rhocore \\rho_{\\mathrm{core}}
hin h_{\\mathrm{in}_i}
I I_i
Sy S_{y_i}
Expand All @@ -58,6 +53,9 @@ class BoxSpar(Model):
"""
loading = SparLoading
gustloading = GustL
material = CFRPUD()
shearMaterial = CFRPFabric()
coreMaterial = Foam()

def setup(self, N, surface):
exec parse_variables(BoxSpar.__doc__)
Expand All @@ -66,9 +64,13 @@ def setup(self, N, surface):
cave = surface.cave
tau = surface.tau
deta = surface.deta
rho = self.material.rho
rhoshear = self.shearMaterial.rho
rhocore = self.coreMaterial.rho
tshearmin = self.shearMaterial.tmin

return [I/mfac <= w*t*hin**2,
dm >= (rhocfrp*(4*w*t + 2*tshear*(hin + 2*tcore + 4*t))
dm >= (rho*(4*w*t) + 2*tshear*rhoshear*(hin + 2*tcore + 4*t)
+ rhocore*w*tcore*2)*b/2*deta,
w <= wlim*cave,
cave*tau >= hin + 4*t + 2*tcore,
Expand Down
18 changes: 11 additions & 7 deletions gpkitmodels/GP/aircraft/wing/capspar.py
Expand Up @@ -2,6 +2,8 @@
from gpkit import Model, parse_variables
from .sparloading import SparLoading
from .gustloading import GustL
from gpkitmodels.GP.materials.cfrp import CFRPUD, CFRPFabric
from gpkitmodels.GP.materials.foam import Foam

#pylint: disable=exec-used, undefined-variable, unused-argument, invalid-name

Expand All @@ -10,14 +12,11 @@ class CapSpar(Model):
Scalar Variables
----------------
rhocfrp 1.6 [g/cm^3] density of CFRP
E 2e7 [psi] Young modulus of CFRP
W [lbf] spar weight
wlim 0.15 [-] spar width to chord ratio
tshearmin 0.012 [in] min gauge shear web thickness
g 9.81 [m/s^2] gravitational acceleration
mfac 0.97 [-] curvature knockdown factor
rhocore 0.036 [g/cm^3] foam core density
Variables of length N-1
-----------------------
Expand All @@ -39,11 +38,8 @@ class CapSpar(Model):
LaTex Strings
-------------
rhocfrp \\rho_{\\mathrm{CFRP}}
wlim w_{\\mathrm{lim}}
tshearmin t_{\\mathrm{shear-min}}
mfac m_{\\mathrm{fac}}
rhocore \\rho_{\\mathrm{core}}
hin h_{\\mathrm{in}_i}
I I_i
Sy S_{y_i}
Expand All @@ -55,6 +51,9 @@ class CapSpar(Model):
"""
loading = SparLoading
gustloading = GustL
material = CFRPUD()
shearMaterial = CFRPFabric()
coreMaterial = Foam()

def setup(self, N, surface):
exec parse_variables(CapSpar.__doc__)
Expand All @@ -63,13 +62,18 @@ def setup(self, N, surface):
b = self.b = surface.b
deta = surface.deta
tau = surface.tau
rho = self.material.rho
rhoshear = self.shearMaterial.rho
rhocore = self.coreMaterial.rho
tshearmin = self.shearMaterial.tmin

return [I/mfac <= 2*w*t*(hin/2)**2,
dm >= (rhocfrp*(2*w*t + 2*tshear*(hin + 2*t))
dm >= (rho*(2*w*t) + 2*tshear*rhoshear*(hin + 2*t)
+ rhocore*w*hin)*b/2*deta,
W >= 2*dm.sum()*g,
w <= wlim*cave,
cave*tau >= hin + 2*t,
Sy*(hin/2 + t) <= I,
tshear >= tshearmin
]

12 changes: 5 additions & 7 deletions gpkitmodels/GP/aircraft/wing/sparloading.py
Expand Up @@ -11,8 +11,6 @@ class SparLoading(Model):
Variables
---------
Nmax 5 [-] max loading
sigmacfrp 1700e6 [Pa] CFRP max stress
taucfrp 450e6 [Pa] CFRP fabric stress
kappa 0.2 [-] max tip deflection ratio
W [lbf] loading weight
Expand All @@ -31,8 +29,6 @@ class SparLoading(Model):
LaTex Strings
-------------
Nmax N_{\\mathrm{max}}
sigmacfrp \\sigma_{\\mathrm{CFRP}}
taucfrp \\tau_{\\mathrm{CFRP}}
kappa \\kappa
Mr M_r
Expand All @@ -54,17 +50,19 @@ def setup(self, wing):
Sy = self.Sy = self.wing.spar.Sy
cave = self.cave = self.wing.planform.cave
tshear = self.tshear = self.wing.spar.tshear
E = self.wing.spar.E
E = self.wing.spar.material.E
sigma = self.wing.spar.material.sigma
tau = self.wing.planform.tau
taumat = self.wing.spar.shearMaterial.tau

constraints = [
# dimensionalize moment of inertia and young's modulus
self.beam["dx"] == self.wing.planform.deta,
self.beam["\\bar{EI}"] <= 8*E*I/Nmax/W/b**2,
Mr >= self.beam["\\bar{M}"][:-1]*W*Nmax*b/4,
sigmacfrp >= Mr/Sy,
sigma >= Mr/Sy,
self.beam["\\bar{\\delta}"][-1] <= kappa,
taucfrp >= self.beam["\\bar{S}"][-1]*W*Nmax/4/tshear/cave/tau
taumat >= self.beam["\\bar{S}"][-1]*W*Nmax/4/tshear/cave/tau
]

return self.beam, constraints
7 changes: 5 additions & 2 deletions gpkitmodels/GP/aircraft/wing/wing_core.py
@@ -1,5 +1,6 @@
" wing interior "
from gpkit import Model, parse_variables
from gpkitmodels.GP.materials.foam import Foam

#pylint: disable=exec-used, no-member, undefined-variable

Expand All @@ -9,7 +10,6 @@ class WingCore(Model):
Variables
---------
W [lbf] wing core weight
rhocore 0.036 [g/cm^3] core density
Abar 0.0753449 [-] normalized cross section area
g 9.81 [m/s^2] graviataional constant
Expand All @@ -27,11 +27,14 @@ class WingCore(Model):
Abar \\bar{A}
"""
material = Foam()

def setup(self, surface):
exec parse_variables(WingCore.__doc__)

cave = self.cave = surface.cave
b = self.b = surface.b
deta = surface.deta
rho = self.material.rho

return [W >= 2*(g*rhocore*Abar*cave**2*b/2*deta).sum()]
return [W >= 2*(g*rho*Abar*cave**2*b/2*deta).sum()]
4 changes: 2 additions & 2 deletions gpkitmodels/GP/aircraft/wing/wing_skin.py
@@ -1,6 +1,6 @@
" wing skin "
from gpkit import Model, Variable, parse_variables
from gpkitmodels.GP.materials.cfrp import CFRP
from gpkitmodels.GP.materials.cfrp import CFRPFabric

class WingSkin(Model):
""" Wing Skin model
Expand Down Expand Up @@ -33,7 +33,7 @@ class WingSkin(Model):
Vne V_{\\mathrm{NE}}
"""
material = CFRP()
material = CFRPFabric()

def setup(self, surface):
exec parse_variables(WingSkin.__doc__)
Expand Down
39 changes: 39 additions & 0 deletions gpkitmodels/GP/aircraft/wing/wing_test.py
@@ -1,7 +1,11 @@
" wing test "
from gpkitmodels.GP.aircraft.wing.wing import Wing
from gpkitmodels.GP.aircraft.wing.wing_skin import WingSkin
from gpkitmodels.GP.aircraft.wing.wing_core import WingCore
from gpkitmodels.GP.aircraft.wing.boxspar import BoxSpar
from gpkit import Model, parse_variables
from gpkitmodels.GP.materials.cfrp import CFRPFabric
from gpkitmodels.GP.materials.foam import Foam

#pylint: disable=no-member, exec-used

Expand Down Expand Up @@ -73,10 +77,45 @@ def box_spar():
W, fs, perf, loading])
m.solve(verbosity=0)

def materials():
" test wing models "

cfrp = CFRPFabric()
foam = Foam()
WingCore.material = foam
WingSkin.material = cfrp
Wing.sparModel.shearMaterial = cfrp
Wing.sparModel.coreMaterial = foam
Wing.sparModel = BoxSpar
W = Wing()
W.substitutions[W.W] = 50
fs = FlightState()
perf = W.flight_model(W, fs)
loading = [W.spar.loading(W)]
loading[0].substitutions["W"] = 100
loading.append(W.spar.gustloading(W))
loading[1].substitutions["W"] = 100

from gpkit import settings
if settings["default_solver"] == "cvxopt":
for l in loading:
for v in ["\\bar{M}_{tip}", "\\bar{S}_{tip}",
"\\bar{\\delta}_{root}", "\\theta_{root}"]:
l.substitutions[v] = 1e-3

m = Model(perf.Cd, [
loading[1].v == fs.V,
loading[1].cl == perf.CL,
loading[1].Ww == W.W,
loading[1].Ww <= 0.5*fs.rho*fs.V**2*perf.CL*W.planform.S,
W, fs, perf, loading])
m.solve(verbosity=0)

def test():
" tests "
wing_test()
box_spar()
materials()

if __name__ == "__main__":
test()
25 changes: 22 additions & 3 deletions gpkitmodels/GP/materials/cfrp.py
@@ -1,7 +1,7 @@
from gpkit import Model, parse_variables

class CFRP(Model):
""" Carbon Fiber Reinforced Plastic Material Properties
class CFRPFabric(Model):
""" Carbon Fiber Reinforced Plastic Fabric Material Properties
Variables
---------
Expand All @@ -17,5 +17,24 @@ class CFRP(Model):
"""
def setup(self):
exec parse_variables(CFRP.__doc__)
exec parse_variables(CFRPFabric.__doc__)

class CFRPUD(Model):
""" Carbon Fiber Reinforced Plastic Unidirectional Material Properties
Variables
---------
rho 1.6 [g/m^3] density of CFRP
E 2e7 [psi] Youngs Modulus of CFRP
sigma 1700 [MPa] maximum stress limit of CFRP
LaTex Strings
-------------
rho \\rho_{\\mathrm{CFRP}}
tmin t_{\\mathrm{min-CFRP}}
sigma \\sigma_{\\mathrm{CFRP}}
"""
def setup(self):
exec parse_variables(CFRPUD.__doc__)

2 changes: 1 addition & 1 deletion gpkitmodels/GP/materials/kevlar.py
Expand Up @@ -5,7 +5,7 @@ class Kevlar(Model):
Variables
---------
rho 0.049 [g/m^3] density of Kevlar
rho 0.049 [g/cm^3] density of Kevlar
tmin 0.012 [in] minimum gauge thickness
tau 200 [MPa] torsional stress limit
Expand Down

0 comments on commit a4e0466

Please sign in to comment.