Skip to content

Commit

Permalink
modify fuse to match elliptical parsing (#31)
Browse files Browse the repository at this point in the history
* modify to allow for fuse parsing model

* fix tau; deleted in wing model now

* change tau sub from gplibrary to model

* change to accomodate changes in loading definitions in library

* change solar for loading changes in library
  • Loading branch information
Michael Burton committed Jan 24, 2018
1 parent 79b89de commit 4a05c56
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 58 deletions.
5 changes: 5 additions & 0 deletions gassolar/gas/flight_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,16 @@ def setup(self, Vwind, latitude=45, percent=90, altitude=15000, day=355):
mu = self.mu = Variable("\\mu", vis, "N*s/m**2", "dynamic viscosity")
h = Variable("h", altitude, "ft", "flight altitude")
href = Variable("h_{ref}", 15000, "ft", "reference altitude")
qne = self.qne = Variable("qne", "kg/s^2/m",
"never exceed dynamic pressure")
Vne = Variable("Vne", 40, "m/s", "never exceed velocity")
rhosl = Variable("rhosl", 1.225, "kg/m^3", "air density at sea level")

constraints = [V/mfac >= Vwind,
rho == rho,
mu == mu,
h == h,
qne == 0.5*rhosl*Vne**2,
href == href]

return constraints
37 changes: 17 additions & 20 deletions gassolar/gas/gas.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,14 @@ def setup(self, sp=False):
etaprop = Variable("\\eta_{prop}", 0.8, "-", "propulsive efficiency")

self.emp.substitutions[self.emp.vtail.Vv] = 0.04
self.emp.substitutions[self.emp.vtail.planform.tau] = 0.08
self.emp.substitutions[self.emp.htail.planform.tau] = 0.08
self.wing.substitutions[self.wing.planform.tau] = 0.115

loading = []
if not sp:
self.emp.substitutions[self.emp.htail.Vh] = 0.45
self.emp.substitutions[self.emp.htail.planform.AR] = 5.0
self.emp.substitutions[self.emp.htail.mh] = 0.1
else:
loading.append(TailBoomFlexibility(self.emp.htail,
self.emp.hbend,
self.wing))

constraints = [
Wzfw >= sum(summing_vars(components, "W")) + Wpay + Wavn,
Expand All @@ -63,27 +61,17 @@ def setup(self, sp=False):
self.wing.planform.tau*self.wing.planform.croot >= self.emp.tailboom.d0
]

return components, constraints, loading
return components, constraints

def flight_model(self, state):
return AircraftPerf(self, state)

class AircraftLoadingSP(Model):
"aircraft loading model"
def setup(self, aircraft, Wcent, Wwing, V, CL):

# loading = [aircraft.wing.loading(aircraft.wing, Wcent, Wwing, V, CL)]
loading = []


return loading

class AircraftPerf(Model):
"performance model for aircraft"
def setup(self, static, state):

self.wing = static.wing.flight_model(static.wing, state)
self.fuselage = static.fuselage.flight_model(state)
self.fuselage = static.fuselage.flight_model(static.fuselage, state)
self.engine = static.engine.flight_model(state)
self.htail = static.emp.htail.flight_model(static.emp.htail, state)
self.vtail = static.emp.vtail.flight_model(static.emp.vtail, state)
Expand Down Expand Up @@ -172,16 +160,25 @@ def setup(self, latitude=38, percent=90, sp=False):
# mission = [climb1, cruise1, loiter1, cruise2]
mission = [climb1, loiter1]

loading = [JHO.wing.spar.loading(JHO.wing),
JHO.wing.spar.gustloading(JHO.wing)]
hbend = JHO.emp.tailboom.tailLoad(JHO.emp.tailboom, JHO.emp.htail,
loiter1.fs.fs)
vbend = JHO.emp.tailboom.tailLoad(JHO.emp.tailboom, JHO.emp.vtail,
loiter1.fs.fs)
loading = [JHO.wing.spar.loading(JHO.wing, loiter1.fs.fs),
JHO.wing.spar.gustloading(JHO.wing, loiter1.fs.fs),
hbend, vbend]

if sp:
loading.append(TailBoomFlexibility(JHO.emp.htail,
hbend, JHO.wing))

constraints = [
mtow >= climb1["W_{start}"][0],
Wfueltot >= sum(fs["W_{fuel-fs}"] for fs in mission),
mission[-1]["W_{end}"][-1] >= JHO["W_{zfw}"],
Wcent >= Wfueltot + JHO["W_{pay}"] + JHO["W_{avn}"] + sum(summing_vars(JHO.smeared_loads, "W")),
LS == mtow/JHO.wing["S"],
JHO.fuselage["\\mathcal{V}"] >= Wfueltot/JHO.fuselage["\\rho_{fuel}"],
JHO.fuselage.Vol >= Wfueltot/JHO.fuselage.rhofuel,
Wcent == loading[0]["W"],
Wcent == loading[1]["W"],
loiter1["V"][0] == loading[1].v,
Expand Down
87 changes: 49 additions & 38 deletions gassolar/solar/solar.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,16 @@ def setup(self, sp=False):

self.components = [self.solarcells, self.wing, self.battery,
self.emp, self.motor]
loading = []
if sp:
loading = TailBoomFlexibility(self.emp.htail,
self.emp.hbend,
self.wing)

Wpay = Variable("W_{pay}", 0, "lbf", "payload weight")
Wavn = Variable("W_{avn}", 8, "lbf", "avionics weight")
Wtotal = Variable("W_{total}", "lbf", "aircraft weight")
Wwing = Variable("W_{wing}", "lbf", "wing weight")
Wcent = Variable("W_{cent}", "lbf", "center weight")

self.emp.substitutions[self.emp.vtail.Vv] = 0.04
self.emp.substitutions[self.emp.vtail.planform.tau] = 0.08
self.emp.substitutions[self.emp.htail.planform.tau] = 0.08
self.wing.substitutions[self.wing.planform.tau] = 0.115

if not sp:
self.emp.substitutions[self.emp.htail.Vh] = 0.45
Expand Down Expand Up @@ -81,7 +78,7 @@ def setup(self, sp=False):
self.wing.planform.tau*self.wing.planform.croot)
]

return constraints, self.components, loading
return constraints, self.components

def flight_model(self, state):
" what happens during flight "
Expand Down Expand Up @@ -233,12 +230,17 @@ def setup(self, latitude=45, day=355):
rhoref = Variable("\\rho_{ref}", 1.0, "kg/m**3",
"reference air density")
mfac = Variable("m_{fac}", 1.0, "-", "wind speed margin factor")
qne = self.qne = Variable("qne", "kg/s^2/m",
"never exceed dynamic pressure")
Vne = Variable("Vne", 40, "m/s", "never exceed velocity")
rhosl = Variable("rhosl", 1.225, "kg/m^3", "air density at sea level")

constraints = [
V/mfac >= Vwind,
FCS(df, Vwind/Vwindref, [rho/rhoref, pct]),
FCS(dfd, ESday/ESvar, [PSmin/PSvar]),
FCS(dft, ESc/ESvar, [PSmin/PSvar]),
qne == 0.5*Vne**2*rhosl
]

return constraints
Expand Down Expand Up @@ -266,9 +268,18 @@ def setup(self, aircraft, latitude=35, day=355):
self.slf = SteadyLevelFlight(self.fs, self.aircraft,
self.aircraftPerf)

hbend = self.aircraft.emp.tailboom.tailLoad(
self.aircraft.emp.tailboom, self.aircraft.emp.htail, self.fs)
vbend = self.aircraft.emp.tailboom.tailLoad(
self.aircraft.emp.tailboom, self.aircraft.emp.vtail, self.fs)
self.loading = [
self.aircraft.wing.spar.loading(self.aircraft.wing),
self.aircraft.wing.spar.gustloading(self.aircraft.wing)]
self.aircraft.wing.spar.loading(self.aircraft.wing, self.fs),
self.aircraft.wing.spar.gustloading(self.aircraft.wing, self.fs),
hbend, vbend]

if self.aircraft.sp:
self.loading.append(TailBoomFlexibility(
self.aircraft.emp.htail, hbend, self.aircraft.wing))

self.loading[0].substitutions[self.loading[0].Nmax] = 5
self.loading[1].substitutions[self.loading[1].Nmax] = 2
Expand Down Expand Up @@ -320,35 +331,35 @@ def setup(self, latitude=35, day=355, sp=False):

return self.solar, self.mission

def process_result(self, result):
super(Mission, self).process_result(result)
result["latitude"] = []
result["day"] = []
sens = result["sensitivities"]["constants"]
for f in self.mission:
const = False
for sub in f.substitutions:
if sub not in f.varkeys:
continue
if sub in self.solar.varkeys:
continue
if any(s > 1e-5 for s in np.hstack([abs(sens[sub])])):
const = True
break
if const:
print "%d is a constraining latitude" % f.latitude
result["latitude"].append(f.latitude)
result["day"].append(f.day)
continue
for vk in f.varkeys:
if vk in self.solar.varkeys:
continue
del result["variables"][vk]
if vk in result["freevariables"]:
del result["freevariables"][vk]
else:
del result["constants"][vk]
del result["sensitivities"]["constants"][vk]
# def process_result(self, result):
# super(Mission, self).process_result(result)
# result["latitude"] = []
# result["day"] = []
# sens = result["sensitivities"]["constants"]
# for f in self.mission:
# const = False
# for sub in f.substitutions:
# if sub not in f.varkeys:
# continue
# if sub in self.solar.varkeys:
# continue
# if any(s > 1e-5 for s in np.hstack([abs(sens[sub])])):
# const = True
# break
# if const:
# print "%d is a constraining latitude" % f.latitude
# result["latitude"].append(f.latitude)
# result["day"].append(f.day)
# continue
# for vk in f.varkeys:
# if vk in self.solar.varkeys:
# continue
# del result["variables"][vk]
# if vk in result["freevariables"]:
# del result["freevariables"][vk]
# else:
# del result["constants"][vk]
# del result["sensitivities"]["constants"][vk]

def test():
" test model for continuous integration "
Expand Down

0 comments on commit 4a05c56

Please sign in to comment.