Skip to content

Commit

Permalink
Merge pull request #57 from askprash/dev_fuse_remodel
Browse files Browse the repository at this point in the history
Refactoring the fuselage sizing.

Some of the other PR's may have to be updated to use the new fuselage layouts.
More unit tests, documentation and plotting tools coming in the next PR...
  • Loading branch information
askprash authored Aug 6, 2024
2 parents 90a11ce + cb36835 commit d2d9b34
Show file tree
Hide file tree
Showing 46 changed files with 3,824 additions and 2,848 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ docs/build/*
.VSCodeCounter/*
.vscode/*
.CondaPkg/*
__pycache__/*
2 changes: 1 addition & 1 deletion docs/src/aero/drag.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ aerodynamics.blax(ndim, n,ite, xi, bi, rni, uinv, Reyn, Mach, fexcr)
aerodynamics.blvar(simi,lami,wake, Reyn,Mach, fexcr,
x, θ ,δs ,ue )
aerodynamics.fusebl!(pari, parg, para, parm, ip)
aerodynamics.fusebl!(fuse, parm, para, ip)
```

---
Expand Down
4 changes: 2 additions & 2 deletions docs/src/sizing/sizing.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ TASOPT.woper(ac, itermax)
A sized aircraft's mission performance can be obtained (`mission!`), along with operation constraints via a pitch trim calculation (`balance`) and balanced field length calculation (`takeoff!`).

```@docs
TASOPT.mission!(pari, parg, parm, para, pare, Ldebug)
TASOPT.mission!(pari, parg, parm, para, pare, fuse, Ldebug)
TASOPT.takeoff!(ac; printTO)
TASOPT.balance(pari, parg, para, rfuel, rpay, ξpay, itrim)
TASOPT.balance(pari, parg, para, fuse, rfuel, rpay, ξpay, itrim)
```

2 changes: 1 addition & 1 deletion docs/src/structures/fuselage.md
Original file line number Diff line number Diff line change
Expand Up @@ -339,5 +339,5 @@ x \hspace{-0.45ex} W_{\rm vbend}
\end{aligned}$$

```@docs
TASOPT.fusew
TASOPT.fusew!
```
2 changes: 1 addition & 1 deletion example/example_opt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ function obj(x, grad)
# f = f + penfac*max(0.0, constraint)^2

# # Ensure fans will fit within fuselage
# daftfanmax = min(3.0, 0.9*ac.parg[igRfuse])
# daftfanmax = min(3.0, 0.9*ac.fuselage.layout.radius)
# daftfan = ac.parg[igdaftfan]
# constraint = daftfan/daftfanmax - 1.0
# penfac = ac.parg[igWpay]
Expand Down
2 changes: 1 addition & 1 deletion example/example_regional.toml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
dRadius = "13.0 in" # Downward shift of lower bubbles
y_offset = 0.0 # y offset of bubble center
floor_depth = "6.0 in" # depth of floor beams
Nwebs = 1 # number of webs (for double bubble designs)
Nwebs = 0 # number of webs (for double bubble designs)

a_nose = 1.7 # Nose radius = Rfuse*(1 - xi^a_nose)^(1/a_nose)
b_tail = 1.75 # Tail radius = Rfuse*(1 - xi^b_tail)
Expand Down
2 changes: 1 addition & 1 deletion example/example_widebody.toml
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@
dRadius = "0 in" # Downward shift of lower bubbles
y_offset = 0.0 # y offset of bubble center
floor_depth = "8.0 in" # depth of floor beams
Nwebs = 1 # number of webs (for double bubble designs)
Nwebs = 0 # number of webs (for double bubble designs)

a_nose = 1.65 # Nose radius = Rfuse*(1 - xi^a_nose)^(1/a_nose)
b_tail = 2.0 # Tail radius = Rfuse*(1 - xi^b_tail)
Expand Down
25 changes: 19 additions & 6 deletions src/IO/default_input.toml
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,11 @@
cabin_pressure_altitude = "8000.0 ft"

[Fuselage.Geometry]
number_of_bubbles = 1 # SingleBubble or MultiBubble Designs
radius = "77 in" # Fuselage radius
dRadius = "15 in" # Downward shift of lower bubbles
y_offset = 0.0 # y offset of bubble center
floor_depth = "5.0 in" # depth of floor beams
Nwebs = 1 # number of webs (for double bubble designs)

a_nose = 1.65 # Nose radius = Rfuse*(1 - xi^a_nose)^(1/a_nose)
b_tail = 2.0 # Tail radius = Rfuse*(1 - xi^b_tail)
tailcone_taper = 0.3
Expand Down Expand Up @@ -373,8 +372,24 @@

# Allowable stresses at sizing cases:
## Fuselage pressurization skin stress and bending skin+stringer stress
sigma_fuse_skin = "15e3 lbf/in2"
sigma_fuse_bending = "30e3 lbf/in2"
skin_material = "TASOPT-Al"
skin_max_avg_stress = 1.1
skin_safety_factor = 3.0
# the sigma_max works out to be roughly 15e3 lbf/in2

bending_material = "TASOPT-Al"
bending_max_avg_stress = 1.1
bending_safety_factor = 1.5
# the sigma_max works out to be roughly 30e3 lbf/in2

cone_material = "TASOPT-Al"
cone_max_avg_stress = 1.1
cone_safety_factor = 2.0

floor_material = "TASOPT-Al"
floor_max_avg_stress = 1.1
floor_safety_factor = 1.5

## Wing and tail bending and shear stresses
sigma_caps = "30e3 lbf/in2"
sigma_struts = "30e3 lbf/in2"
Expand All @@ -386,8 +401,6 @@
E_struts = "10e6 lbf/in2"

# Material densities (Aluminium)
skin_density = 2700.0
fuse_stringer_density = 2700.0
wing_tail_cap_density = 2700.0
wing_tail_web_density = 2700.0
strut_density = 2700.0
Expand Down
4 changes: 2 additions & 2 deletions src/IO/output_csv.jl
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,9 @@ Example usage:
default_output_indices =
Dict("pari" => Colon(),
"parg" => [#weights
igWMTO, igWfuel, igWpay, igWpaymax, igfhpesys, igflgnose,igflgmain,
igWMTO, igWfuel, igWpay, igWpaymax, igflgnose,igflgmain,
igWweb,igWcap, igfflap,igfslat, igfaile, igflete, igfribs, igfspoi, igfwatt,
igWfuse, igWwing, igWvtail, igWhtail, igWtesys, igWftank,
igWwing, igWvtail, igWhtail, igWtesys, igWftank,

#other
igdfan, igGearf,
Expand Down
94 changes: 50 additions & 44 deletions src/IO/outputs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ using PythonCall
function weight_buildup(ac::aircraft; io=stdout)
parg = ac.parg
pari = ac.pari
fuselage = ac.fuselage
Wempty = parg[igWMTO] - parg[igWfuel] - parg[igWpay]
Whpesys = parg[igWMTO] * parg[igfhpesys]
Whpesys = parg[igWMTO] * fuselage.HPE_sys.W
Wlgnose = parg[igWMTO] * parg[igflgnose]
Wlgmain = parg[igWMTO] * parg[igflgmain]
Wtotadd = Whpesys + Wlgnose + Wlgmain
Expand All @@ -30,7 +31,7 @@ function weight_buildup(ac::aircraft; io=stdout)
printstyled(io, @sprintf("WMTO = %10.1f N (%8.1f lb)\n\n",
parg[igWMTO], parg[igWMTO]/lbf_to_N); color=:bold)

@printf(io,"Wfuse + %10.1f N (%8.1f lb)\n", parg[igWfuse ], parg[igWfuse ]/lbf_to_N)
@printf(io,"Wfuse + %10.1f N (%8.1f lb)\n", fuselage.weight, fuselage.weight/lbf_to_N)
@printf(io,"Wwing + %10.1f N (%8.1f lb)\n", parg[igWwing ], parg[igWwing ]/lbf_to_N)
@printf(io,"Wvtail + %10.1f N (%8.1f lb)\n", parg[igWvtail], parg[igWvtail]/lbf_to_N)
@printf(io,"Whtail + %10.1f N (%8.1f lb)\n", parg[igWhtail], parg[igWhtail]/lbf_to_N)
Expand All @@ -39,9 +40,9 @@ function weight_buildup(ac::aircraft; io=stdout)
@printf(io,"Wadd + %10.1f N (%8.1f lb)\n", Wtotadd, Wtotadd/lbf_to_N)
@printf(io,"--------------------\n")
printstyled(io, @sprintf("Wempty = %10.1f N (%8.1f lb)\n\n",
parg[igWfuse] + parg[igWwing]+ parg[igWvtail] + parg[igWhtail] +
fuselage.weight + parg[igWwing]+ parg[igWvtail] + parg[igWhtail] +
parg[igWtesys] + +parg[igWftank] + Wtotadd,
(parg[igWfuse] + parg[igWwing]+ parg[igWvtail] + parg[igWhtail] +
(fuselage.weight + parg[igWwing]+ parg[igWvtail] + parg[igWhtail] +
parg[igWtesys] + +parg[igWftank] + Wtotadd)/lbf_to_N); color=:bold)

@printf(io,"Wcap + %10.1f N (%8.1f lb)\n", parg[igWcap], parg[igWcap]/lbf_to_N)
Expand Down Expand Up @@ -122,18 +123,19 @@ end
"""
function geometry(ac::aircraft; io = stdout)
parg = ac.parg
fuselage = ac.fuselage
printstyled(io, "Fuselage Layout:\n -------------- \n", color=:bold )
@printf(io, "xnose = %5.1f m (%8.1f ft)\n", parg[igxnose ] , parg[igxnose ]/ft_to_m)
@printf(io, "xend = %5.1f m (%8.1f ft)\n", parg[igxend ] , parg[igxend ]/ft_to_m)
@printf(io, "xnose = %5.1f m (%8.1f ft)\n", fuselage.layout.x_nose , fuselage.layout.x_nose/ft_to_m)
@printf(io, "xend = %5.1f m (%8.1f ft)\n", fuselage.layout.x_end , fuselage.layout.x_end/ft_to_m)
@printf(io, "xwing = %5.1f m (%8.1f ft)\n", parg[igxwing ] , parg[igxwing ]/ft_to_m)
@printf(io, "xhtail = %5.1f m (%8.1f ft)\n", parg[igxhtail ] , parg[igxhtail ]/ft_to_m)
@printf(io, "xvtail = %5.1f m (%8.1f ft)\n", parg[igxvtail ] , parg[igxvtail ]/ft_to_m)
@printf(io, "xblend1 = %5.1f m (%8.1f ft)\n", parg[igxblend1] , parg[igxblend1 ]/ft_to_m)
@printf(io, "xblend2 = %5.1f m (%8.1f ft)\n", parg[igxblend2] , parg[igxblend2 ]/ft_to_m)
@printf(io, "xshell1 = %5.1f m (%8.1f ft)\n", parg[igxshell1] , parg[igxshell1 ]/ft_to_m)
@printf(io, "xshell2 = %5.1f m (%8.1f ft)\n", parg[igxshell2] , parg[igxshell2 ]/ft_to_m)
@printf(io, "xhbend = %5.1f m (%8.1f ft)\n", parg[igxhbend ] , parg[igxhbend ]/ft_to_m)
@printf(io, "xvbend = %5.1f m (%8.1f ft)\n", parg[igxvbend ] , parg[igxvbend ]/ft_to_m)
@printf(io, "xblend1 = %5.1f m (%8.1f ft)\n", fuselage.layout.x_start_cylinder , fuselage.layout.x_start_cylinder/ft_to_m)
@printf(io, "xblend2 = %5.1f m (%8.1f ft)\n", fuselage.layout.x_end_cylinder , fuselage.layout.x_end_cylinder/ft_to_m)
@printf(io, "xshell1 = %5.1f m (%8.1f ft)\n", fuselage.layout.x_pressure_shell_fwd , fuselage.layout.x_pressure_shell_fwd/ft_to_m)
@printf(io, "xshell2 = %5.1f m (%8.1f ft)\n", fuselage.layout.x_pressure_shell_aft , fuselage.layout.x_pressure_shell_aft/ft_to_m)
@printf(io, "xhbend = %5.1f m (%8.1f ft)\n", fuselage.bendingmaterial_h.weight.x , fuselage.bendingmaterial_h.weight.x/ft_to_m)
@printf(io, "xvbend = %5.1f m (%8.1f ft)\n", fuselage.bendingmaterial_v.weight.x , fuselage.bendingmaterial_v.weight.x/ft_to_m)
@printf(io, "xwbox = %5.1f m (%8.1f ft)\n", parg[igxwbox ] , parg[igxwbox ]/ft_to_m)
@printf(io, "xhbox = %5.1f m (%8.1f ft)\n", parg[igxhbox ] , parg[igxhbox ]/ft_to_m)
@printf(io, "xvbox = %5.1f m (%8.1f ft)\n", parg[igxvbox ] , parg[igxvbox ]/ft_to_m)
Expand All @@ -143,7 +145,7 @@ function geometry(ac::aircraft; io = stdout)
@printf(io, "xftank = %5.1f m (%8.1f ft)\n", parg[igxftank ] , parg[igxftank ]/ft_to_m)
@printf(io, "xftankaft = %5.1f m (%8.1f ft)\n", parg[igxftankaft ] , parg[igxftankaft ]/ft_to_m)

@printf(io, "\nRfuse = %5.1f m (%8.1f ft)\n", parg[igRfuse ] , parg[igRfuse ]/ft_to_m)
@printf(io, "\nRfuse = %5.1f m (%8.1f ft)\n", fuselage.layout.cross_section.radius , fuselage.layout.cross_section.radius/ft_to_m)


SMfwd = (parg[igxNP] - parg[igxCGfwd])/parg[igcma]
Expand Down Expand Up @@ -235,16 +237,17 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)
yw[5] = bs/2.0
yw[6] = bo/2.0
# Fuse
Rfuse = parg[igRfuse]
wfb = parg[igwfb]
fuselage = ac.fuselage
Rfuse = fuselage.layout.radius
wfb = fuselage.layout.bubble_center_y_offset

anose = parg[iganose]
btail = parg[igbtail]
anose = fuselage.layout.nose_radius
btail = fuselage.layout.tail_radius

xnose = parg[igxnose ]
xend = parg[igxend ]
xblend1 = parg[igxblend1 ]
xblend2 = parg[igxblend2 ]
xnose = fuselage.layout.x_nose
xend = fuselage.layout.x_end
xblend1 = fuselage.layout.x_start_cylinder
xblend2 = fuselage.layout.x_end_cylinder
xhtail = parg[igxhtail ]
xvtail = parg[igxvtail ]
xwing = parg[igxwing ]
Expand All @@ -264,7 +267,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)
xf = zeros(nnose + ntail + 1)
yf = zeros(nnose + ntail + 1)

if pari[iifclose] == 0
if fuselage.layout.taper_fuse == 0
dytail = -hwidth
else
dytail = -0.2*hwidth
Expand Down Expand Up @@ -324,7 +327,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)
ytTEh = 0.5*bh


if (pari[iifclose] == 0)
if (fuselage.layout.taper_fuse == 0)
xcLEh = xoLEh
xcTEh = xoTEh
ycLEh = yoLEh
Expand Down Expand Up @@ -382,7 +385,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)
yh[ 6] = ycTEh

#Initialize seat start x-position
xseats0 = parg[igxshell1 ]
xseats0 = fuselage.layout.x_pressure_shell_fwd
# Fuel tank
ntank = 8
Rtank = Rfuse - 0.1 # Account for clearance_fuse
Expand Down Expand Up @@ -438,7 +441,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)
xshell = zeros(ntank)
yshell = zeros(ntank)
AR = 3.0
xshellcenter = parg[igxshell2] - Rfuse/AR
xshellcenter = fuselage.layout.x_pressure_shell_aft - Rfuse/AR
for i = 1: ntank
fraci = float(i-1)/float(ntank-1)
fracx = sin(0.5*pi*fraci)
Expand All @@ -450,7 +453,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)

pax = parg[igWpay]/parm[imWperpax]

wcabin = find_cabin_width(parg[igRfuse], parg[igdRfuse], parg[igwfb], parg[ignfweb], parg[igfloordist]) #Find cabin width
wcabin = find_cabin_width(fuselage.layout.radius, fuselage.layout.bubble_lower_downward_shift, fuselage.layout.bubble_center_y_offset, fuselage.layout.n_webs, parg[igfloordist]) #Find cabin width
_, xseats, seats_per_row = place_cabin_seats(pax, wcabin)
xseats = xseats .+ xseats0
rows = length(xseats)
Expand Down Expand Up @@ -569,7 +572,7 @@ function stickfig(ac::aircraft; ax = nothing, label_fs = 16)

# Annotations
ax.text(0, 16, @sprintf("PFEI = %5.3f J/Nm\nM\$_{cruise}\$ = %.2f\nWMTO = %.1f tonnes\nSpan = %5.1f m\nco = %5.1f m\n\$ \\Lambda \$ = %.1f\$^\\circ\$\nRfuse = %5.1f m\nL/D = %3.2f",
parm[imPFEI], para[iaMach, ipcruise1],parg[igWMTO]/9.81/1000, parg[igb], parg[igco], parg[igsweep], parg[igRfuse], para[iaCL, ipcruise1]/para[iaCD, ipcruise1]),
parm[imPFEI], para[iaMach, ipcruise1],parg[igWMTO]/9.81/1000, parg[igb], parg[igco], parg[igsweep], fuselage.layout.radius, para[iaCL, ipcruise1]/para[iaCD, ipcruise1]),
fontsize = label_fs, ha="left", va="top")

yloc = -20
Expand Down Expand Up @@ -627,6 +630,7 @@ function plot_details(ac::aircraft; ax = nothing)

pari = ac.pari
parg = ac.parg
fuselage = ac.fuselage
@views pare = ac.pare[:,:,1]
@views para = ac.para[:,:,1]
@views parm = ac.parm[:,:,1]
Expand Down Expand Up @@ -669,7 +673,7 @@ function plot_details(ac::aircraft; ax = nothing)

# Weight build-up
Wempty = parg[igWMTO] - parg[igWfuel] - parg[igWpay]
Whpesys = parg[igWMTO] * parg[igfhpesys]
Whpesys = parg[igWMTO] * fuselage.HPE_sys.W
Wlgnose = parg[igWMTO] * parg[igflgnose]
Wlgmain = parg[igWMTO] * parg[igflgmain]
Wtotadd = Whpesys + Wlgnose + Wlgmain
Expand All @@ -679,7 +683,7 @@ function plot_details(ac::aircraft; ax = nothing)
WMTO = parg[igWMTO]

Wwing = parg[igWwing]
Wfuse = parg[igWfuse]
Wfuse = fuselage.weight
Wvtail = parg[igWvtail]
Whtail = parg[igWhtail]
Weng = parg[igWeng]
Expand Down Expand Up @@ -1087,6 +1091,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not

pari = ac.pari
parg = ac.parg
fuselage = ac.fuselage
@views pare = ac.pare[:,:,1]
@views para = ac.para[:,:,1]
@views parm = ac.parm[:,:,1]
Expand Down Expand Up @@ -1135,16 +1140,17 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
yw[5] = bs/2.0
yw[6] = bo/2.0
# Fuse
Rfuse = parg[igRfuse]
wfb = parg[igwfb]
fuselage = ac.fuselage
Rfuse = fuselage.layout.radius
wfb = fuselage.layout.bubble_center_y_offset

anose = parg[iganose]
btail = parg[igbtail]
anose = fuselage.layout.nose_radius
btail = fuselage.layout.tail_radius

xnose = parg[igxnose ]
xend = parg[igxend ]
xblend1 = parg[igxblend1 ]
xblend2 = parg[igxblend2 ]
xnose = fuselage.layout.x_nose
xend = fuselage.layout.x_end
xblend1 = fuselage.layout.x_start_cylinder
xblend2 = fuselage.layout.x_end_cylinder
xhtail = parg[igxhtail ]
xvtail = parg[igxvtail ]
xwing = parg[igxwing ]
Expand All @@ -1164,7 +1170,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
xf = zeros(nnose + ntail + 1)
yf = zeros(nnose + ntail + 1)

if pari[iifclose] == 0
if fuselage.layout.taper_fuse == 0
dytail = -hwidth
else
dytail = -0.2*hwidth
Expand Down Expand Up @@ -1224,7 +1230,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
ytTEh = 0.5*bh


if (pari[iifclose] == 0)
if (fuselage.layout.taper_fuse == 0)
xcLEh = xoLEh
xcTEh = xoTEh
ycLEh = yoLEh
Expand Down Expand Up @@ -1331,7 +1337,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
yv[ 6] = ycTEv

#Initialize seat start x-position
xseats0 = parg[igxshell1 ]
xseats0 = fuselage.layout.x_pressure_shell_fwd
# Fuel tank
ntank = 8
Rtank = Rfuse - 0.1 # Account for clearance_fuse
Expand All @@ -1346,7 +1352,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
xseats0 = xtanks[1] + l/2 + 1.0 * ft_to_m #move seats backwards
elseif tank_placement == "rear"
xtanks = [parg[igxftankaft]]
xseats0 = parg[igxshell1 ]
xseats0 = fuselage.layout.x_pressure_shell_fwd
elseif tank_placement == "both"
xtanks = [parg[igxftank], parg[igxftankaft]]
xseats0 = xtanks[1] + l/2 + 1.0 * ft_to_m #move seats backwards
Expand Down Expand Up @@ -1384,7 +1390,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not
xshell = zeros(ntank)
yshell = zeros(ntank)
AR = 3.0
xshellcenter = parg[igxshell2] - Rfuse/AR
xshellcenter = fuselage.layout.x_pressure_shell_aft - Rfuse/AR
for i = 1: ntank
fraci = float(i-1)/float(ntank-1)
fracx = sin(0.5*pi*fraci)
Expand All @@ -1396,7 +1402,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not

#Seats
pax = parg[igWpay]/parm[imWperpax]
wcabin = find_cabin_width(parg[igRfuse], parg[igdRfuse], parg[igwfb], parg[ignfweb], parg[igfloordist]) #Find cabin width
wcabin = find_cabin_width(fuselage.layout.radius, fuselage.layout.bubble_lower_downward_shift, fuselage.layout.bubble_center_y_offset, fuselage.layout.n_webs, parg[igfloordist]) #Find cabin width
_, xseats, seats_per_row = place_cabin_seats(pax, wcabin)
xseats = xseats .+ xseats0
rows = length(xseats)
Expand Down Expand Up @@ -1524,7 +1530,7 @@ function high_res_airplane_plot(ac; ax = nothing, label_fs = 16, save_name = not

# Annotations
ax.text(0, 16, @sprintf("PFEI = %5.3f J/Nm\nM\$_{cruise}\$ = %.2f\nWMTO = %.1f tonnes\nSpan = %5.1f m\nco = %5.1f m\n\$ \\Lambda \$ = %.1f\$^\\circ\$\nRfuse = %5.1f m\nL/D = %3.2f",
parm[imPFEI], para[iaMach, ipcruise1],parg[igWMTO]/9.81/1000, parg[igb], parg[igco], parg[igsweep], parg[igRfuse], para[iaCL, ipcruise1]/para[iaCD, ipcruise1]),
parm[imPFEI], para[iaMach, ipcruise1],parg[igWMTO]/9.81/1000, parg[igb], parg[igco], parg[igsweep], fuselage.layout.radius, para[iaCL, ipcruise1]/para[iaCD, ipcruise1]),
fontsize = label_fs, ha="left", va="top")

yloc = -20
Expand Down
Loading

0 comments on commit d2d9b34

Please sign in to comment.