REM ********************************************************** REM * * 100 REM * acsweep.QB * REM * NICOLAI'S A/C SIZING METHOD - WEIGHT SWEEP VERSION * REM * Chapter 5 of Fundamentals of Aircraft Design * REM * code by W.H. MASON; SEPT. 22, 1984 (APPLE ][) * REM * Department of Aerospace and Ocean Engineering * REM * Virginia Tech, Blacksburg, VA, 24062 * REM * contact: mason@aoe.vt.edu * REM * see also: http://www.aoe.vt.edu/ * REM * * REM * originally coded on a TI-59 and TI CC-40 (1982) * REM * * REM * modified to run on a Mac :Sept. 1, 1989 * REM * modified to QuickBASIC for a Mac:Sept. 6, 1990 * REM * comments for GA users added: Sept.11, 1991 * REM * large aircraft example tested: August 31, 1992 * REM * last mods: July 1993 * REM * * REM * This version computes and prints out the WEmptyReqd * REM * and WEmptyAvail over the range of assumed TOGWs from * REM * TOGWlwr to TOGWup in increments of DELTATOGW. These * REM * values are set below just after the * REM * "REM Begine Weight Sweep." You can then see how the * REM * values intersect in the solution of the problem. * REM * * REM * Output is sent to both the screen and * REM * a file called size.sweep * REM * * REM * This program follows Nicolai's example exactly, * REM * with one exception: a supersonic leg has been added, * REM * denoted W5PW5 & W6PW6 * REM ********************************************************** REM *************************************************** REM WARNING: THIS VERSION ASSUMES JET ENGINE PROPULSION REM *************************************************** CALL TEXTFONT(4) :REM for the Mac, sets a monospace screen font OPEN "size.sweep" FOR OUTPUT AS #1 PRINT "NICOLAI'S AIRCRAFT SIZING ALGORITHM" PRINT "sweep version to generate Nicolai's Figure 5.7" PRINT PRINT "coded by W.H. Mason, AOE, Virginia Tech, http://www.aoe.vt.edu/" PRINT PRINT #1, " NICOLAI'S AIRCRAFT SIZING ALGORITHM" PRINT #1, " sweep version to generate Nicolai's Figure 5.7" PRINT #1, PRINT #1, " programmed in QuickBASIC by W.H. Mason" PRINT #1, " Department of Aerospace and Ocean Engineering" PRINT #1, " Virginia Tech, Blacksburg, VA 24061" PRINT #1, " http://www.aoe.vt.edu" PRINT #1, REM ****** all input is defined between statements 230 and 800 **** 200 REM A/C TYPE, STATISTICAL CURVE FIT CONSTANTS REM FOR Required EMPTY WEIGHT = KS*A*TOGW^B REM constants A B config REM 1.605 .916 Fighter, T//W > .9 and/or W/S < 70 REM 0.911 .947 Fighter, T/W < 0.9, W/S > 70 and REM Transport and Civil Aircraft 230 A = .911:B = .947: REM CONSTANTS FOR general aviation aircraft REM A/C WEIGHT DATA 300 WFIXED = 50000&: REM FIXED WEIGHT, IN POUNDS (includes things that are dropped) Wbombs = 0: REM BOMBS AND AMMO, IN POUNDS WcomFuel = 0: REM COMBAT FUEL, IN POUNDS WresFuel = .05: REM RESERVE FUEL, as a fraction of TOGW WtrapFuel = .01: REM trapped fuel, as a fraction of TOGW W2W1 = .97: REM W2/W1; THE ENGINE START AND TAKEOFF FRACTION W3W2 = .978: REM W3/W2; CLIMB AND ACCEL TO CRUISE CONDITIONS FRACTION W5W4 = 1!: REM W5/W4; ACCEL TO HIGH SPEED PRINT PRINT "Defined input for this case:":PRINT PRINT USING "Weight constants: A = #.###, B = #.###";A;B PRINT USING "WFIXED = ######.# Wbombs =#####.#";WFIXED;Wbombs PRINT USING "WcomFuel = ######.#";WcomFuel PRINT USING "WresFuel = #####.## WtrapFuel = ###.##";WresFuel;WtrapFuel PRINT USING "Engine Start and takeoff fraction, W2/W1 = #.####";W2W1 PRINT USING "Initial Climb and Accel, W3/W2 = #.####";W3W2 PRINT USING "Accel to high speed, W5/W4 = #.####";W5W4 PRINT #1, PRINT #1,"Defined input for this case:":PRINT #1, PRINT #1, USING "Weight constants: A = #.###, B = #.###";A;B PRINT #1, USING "WFIXED = ######.# Wbombs =#####.#";WFIXED;Wbombs PRINT #1, USING "WcomFuel = ######.#";WcomFuel PRINT #1, USING "WresFuel = #####.## WtrapFuel = ###.##";WresFuel;WtrapFuel PRINT #1, USING "Engine Start and takeoff fraction, W2/W1 = #.####";W2W1 PRINT #1, USING "Climb and Accel, W3/W2 = #.####";W3W2 PRINT #1, USING "Accel to high speed, W5/W4 = #.####";W5W4 REM AERO & FLIGHT CONDITION DATA REM SUBSONIC CONDITIONS 400 AR = 10: REM AIRCRAFT ASPECT RATIO Msub = .8: REM SUBSONIC CRUISE MACH NUMBER Qsub = 223: REM DYNAMIC PRESSURE AT SUBSONIC CRUISE, PSF Asub = 968.7: REM SPEED OF SOUND AT SUBSONIC CRUISE, FPS Cd0sub = .016: REM SUBSONIC CD0 Esub = .85: REM SUBSONIC OSWALD E REM SUPERSONIC CONDITIONS 450 Msup = 1.6: REM SUPERSONIC CRUISE MACH NUMBER Qsup = 450: REM DYNAMIC PRESSURE AT SUPERSONIC CRUISE, PSF Asup = 968: REM SPEED OF SOUND AT SUPERSONIC CRUISE, FPS LDsup = 5: REM L/D AT SUPERSONIC CRUISE CONDITION PRINT : PRINT "Flight conditions: subsonic supersonic" PRINT USING " cruise Mach number ##.### ##.###";Msub;Msup PRINT USING " dynamic pressure(psf) ####.# ####.#";Qsub;Qsup PRINT USING " speed of sound (ft/sec) ####.# ####.#";Asub;Asup PRINT PRINT USING "Aero data: Aspect Ratio = ##.###";AR PRINT USING " CD0 subsonic = .####";Cd0sub PRINT USING " Subsonic Oswald E = #.###";Esub PRINT PRINT USING " Supersonic L/D = ##.###";LDsup PRINT #1,:PRINT #1, "Flight conditions: subsonic supersonic" PRINT #1, USING " cruise Mach number ##.### ##.###";Msub;Msup PRINT #1, USING " dynamic pressure(psf) ####.# ####.#";Qsub;Qsup PRINT #1, USING " speed of sound (ft/sec) ####.# ####.#";Asub;Asup PRINT #1, PRINT #1, USING "Aero data: Aspect Ratio = ##.###";AR PRINT #1, USING " CD0 subsonic = .####";Cd0sub PRINT #1, USING " Subsonic Oswald E = #.###";Esub PRINT #1, PRINT #1, USING " Supersonic L/D = ##.###";LDsup REM STRUCTURAL DETAILS 500 KS = .75: REM COMPOSITE STRUCTURAL FACTOR PRINT: PRINT USING "Structures: technology factor = #.###";KS PRINT #1, :PRINT #1, USING "Structures: technology factor = #.###";KS REM ENGINE DATA 600 SFCsub = .5: REM SUBSONIC CRUISE SFC SFCsup = 1!: REM SUPERSONIC CRUISE SFC SFCltr = .55: REM LOITER SFC PRINT PRINT "Engine data: subsonic supersonic loiter" PRINT USING " sfc #.### #.### #.###";SFCsub;SFCsup;SFCltr PRINT #1, PRINT #1, "Engine data: subsonic supersonic loiter" PRINT #1, USING " sfc #.### #.### #.###";SFCsub;SFCsup;SFCltr REM MISSION SPECIFICATION 700 Rsub = 1500: REM SUBSONIC MISSION RADIUS, NAUTICAL MILES Rsup = 0: REM SUPERSONIC MISSION RADIUS, NAUTICAL MILES LtrTime = 45: REM LOITER TIME, IN MINUTES PRINT : PRINT "Mission Specification:": PRINT USING " Subsonic mission radius (nautical miles) = ####.#";Rsub PRINT USING " Supersonic mission radius, nm = ####.#";Rsup PRINT USING " Loiter time (minutes) = ###.";LtrTime PRINT #1,:PRINT #1, "Mission Specification:": PRINT #1, USING " Subsonic mission radius (nautical miles) = ####.#";Rsub PRINT #1, USING " Supersonic mission radius, nm = ####.#";Rsup PRINT #1, USING " Loiter time (minutes) = ###.#";LtrTime REM ****** input definition complete, computations begin **************** PRINT:PRINT "RESULTS (based on the ability to cruise at the L/D given below):" PRINT #1,:PRINT #1, "RESULTS (based on the ability to cruise at the L/D given below):" 800 PI = 3.141592654# Vsub = Asub * Msub Vsup = Asup * Msup K = 1 / (PI * AR * Esub) LDmaxSub = .5 / SQR (Cd0sub * K) LDcruiseSub = SQR (8 / 9) * LDmaxSub: REM for jet transports, mod as required CLcruise = SQR (Cd0sub / K / 2):REM not used in this code, use to find Swing PRINT PRINT USING " subsonic L/D max = ##.###, cruise L/D = ##.###";LDmaxSub,LDcruiseSub PRINT #1, PRINT #1, USING " subsonic L/D max = ##.###, cruise L/D = ##.###";LDmaxSub,LDcruiseSub REM INITIALIZE ITERATION PARAMETERS TOGW = 13000:imax = 100:i = 0: PRINT : REM TOGW here is the first guess REM BEGIN weight sweep TOGWlwr = 80000& TOGWup = 160000& DELTATOGW = 2000 PRINT " TOGW WEmptyReqd WEmptyAvail WEmptyAvail-WEmptyReqd " PRINT #1, " TOGW WEmptyReqd WEmptyAvail WEmptyAvail-WEmptyReqd " FOR TOGW = TOGWlwr TO TOGWup STEP DELTATOGW WEmptyReqd = KS * A * TOGW^B: REM empty weight required based on previous similar aircraft REM: range uses Brequet range eqn. - modify as required REM: fuel fraction for subsonic cruise out (cruise back is the same) W4W3 = EXP (-(Rsub * 6080 * SFCsub) / (LDcruiseSub * 3600 * Vsub)) W7W6P = W4W3 REM: fuel fraction for supersonic cruise out (cruise back is the same) W5PW5 = EXP (-(Rsup * 6080 * SFCsup) / (LDsup * 3600 * Vsup)) W6PW6 = W5PW5 REM: fuel fraction for loiter W8W7 = EXP (-(SFCltr * LtrTime) / (60 * LDmaxSub)) WoutboundRat = W5PW5 * W5W4 * W4W3 * W3W2 * W2W1 DeltaCmbtRat = (WcomFuel + Wbombs)/TOGW WreturnRat = W8W7 * W7W6P * W6PW6 W8W1 = WreturnRat*(WoutboundRat - DeltaCmbtRat) Wfuel = (1! + WtrapFuel + WresFuel) * (TOGW - TOGW * W8W1 - Wbombs) REM: WEmptyAvail is available empty weight for this mission WEmptyAvail = TOGW - Wfuel - WFIXED PRINT USING " #######.# #######.# #######.# #######.#";TOGW;WEmptyReqd;WEmptyAvail;WEmptyReqd - WEmptyAvail PRINT #1, USING " #######.# #######.# #######.# #######.#";TOGW;WEmptyReqd;WEmptyAvail;WEmptyReqd - WEmptyAvail NEXT TOGW PRINT:PRINT "end of case":PRINT PRINT #1,:PRINT #1, " end of case" 5000 END