/
sparloading.py
71 lines (57 loc) · 2.11 KB
/
sparloading.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
" spar loading "
from gpkit import Model, parse_variables
from gpkitmodels.GP.beam.beam import Beam
#pylint: disable=no-member, unused-argument, exec-used, invalid-name
#pylint: disable=undefined-variable, attribute-defined-outside-init
class SparLoading(Model):
""" Spar Loading Model
Variables
---------
Nmax 5 [-] max loading
kappa 0.2 [-] max tip deflection ratio
W [lbf] loading weight
Variables of length wing.N-1
----------------------------
Mr [N*m] wing section root moment
Upper Unbounded
---------------
I, tshear, Sy, cave
Lower Unbounded
---------------
b, W
LaTex Strings
-------------
Nmax N_{\\mathrm{max}}
kappa \\kappa
Mr M_r
"""
def new_qbarFun(self, c):
" define qbar model for chord loading "
barc = self.wing.planform.cbar
return [f(c) for f in self.wing.substitutions[barc]]
new_SbarFun = None
def setup(self, wing):
self.wing = wing
exec parse_variables(SparLoading.__doc__)
Beam.qbarFun = self.new_qbarFun
Beam.SbarFun = self.new_SbarFun
self.beam = Beam(self.wing.N)
b = self.b = self.wing.planform.b
I = self.I = self.wing.spar.I
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.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,
sigma >= Mr/Sy,
self.beam["\\bar{\\delta}"][-1] <= kappa,
taumat >= self.beam["\\bar{S}"][-1]*W*Nmax/4/tshear/cave/tau
]
return self.beam, constraints