------------------------------------------------------------------- David Lednicer | "Applied Computational Fluid Dynamics" Analytical Methods, Inc. | email: dave@amiwest.com 2133 152nd Ave NE | tel: (206) 643-9090 Redmond, WA 98052 USA | fax: (206) 746-1299 ------------------------------------------------------------------- 7-25-95 At the request of a user, I have added another output format to my NACA airfoil generation program. The new format is for the AutoCAD script reader. Here is a new copy of the source: 6-25-95 My NACA airfoil code has had a couple of recent additions (66 and 67 series and biconvex airfoils). Here is the source code: 10000 'PROGRAM TO GENERATE NACA AIRFOIL COORDINATES 10010 ' 10020 'COMPILER METACOMMAND 10030 '$DYNAMIC 10040 ' 10050 'WRITTEN BY D. LEDNICER, dave@amiwest.com 10060 ' COPYRIGHT 1995 - THIS SOFTWARE IS DECLARED TO BE FREEWARE 10070 ' 10080 VERSN = 3.5 10090 ' 10100 'SET INPUT POINT LIMITS AND OTHER CONSTANTS 10110 PI = 4 * ATN(1) 10120 DEF FNR5 (X) = INT(X * 100000! + .5) 10130 DEF FNX (X) = 9 + INT(X * 300 + .5) 10140 DEF FNY (Y) = 95 - INT(Y * 270 + .5) 10150 NP = 100 10160 MPTS = 400 10170 DTP = 3 10180 QM = 640 'HORIZONTAL SCREEN COORDINATES 10190 RM = 350 'VERTICAL SCREEN COORDINATES 10200 STOL = .0001 10210 N6S = 5 'NUMBER OF 6 SERIES IN DATABASE (63 - 67) 10220 N6T = 8 'NUMBER OF 6 SERIES THICKNESS FORMS FOR EACH SUBSERIES 10230 N6C = 11 'NUMBER OF NACA CAMBERLINES IN DATABASE 10240 N6P = 26 'NUMBER OF 6 SERIES X POINTS IN DATABASE 10250 ' 10260 WIDTH 80: SCREEN 0, 0, 0: COLOR 7, 1: KEY OFF: CLS 10270 LOCATE 2, 14: COLOR 0, 7 10280 PRINT USING " THE NACA AIRFOIL ORDINATE GENERATION PROGRAM v#.# "; VERSN 10290 COLOR 7, 1: PRINT : PRINT 10300 VIEW PRINT 5 TO 24 10310 ' 10320 INPUT " Do You Want To Reset Constants Used In The Program (Y/N)[N]"; CHGE$ 10330 IF CHGE$ = "y" OR CHGE$ = "Y" THEN GOSUB 23540 10340 ' 10350 DIM XCC(MPTS), XU(MPTS), YU(MPTS), XL(MPTS), YL(MPTS), YT(MPTS), YC(MPTS) 10360 DIM XDD(MPTS), DYC(MPTS), XQ(2), YQ(2), ALP(14) 10370 DIM P(2, NP * 4), A1(3), B1(3), DT(3), X(MPTS), Y(MPTS), YP(MPTS), DY(2) 10380 DIM N(NP * 4, 4), B(3, NP * 4), L(NP * 4), U(3, NP * 4), C(2, NP * 4), R(2), F(4, 2) 10390 DIM X6(N6P), YT6(40, N6P), T6(N6S), YC6(N6C, N6P), DYC6(N6C, N6P) 10400 DIM ENDSLP(2), DYDX(2), XI(30), YI(30), TF6(1 + N6S * N6T + 2 * N6C, N6P) 10410 ' 10420 PRINT 10430 PRINT " You Have The Following Options:" 10440 PRINT " 1 - NACA 4 Digit Airfoil" 10450 PRINT " 2 - NACA 5 Digit Airfoil" 10460 PRINT " 3 - NACA Modified 4 Digit Airfoil" 10470 PRINT " 4 - NACA 16 Series Airfoil" 10480 PRINT " 5 - NACA 6 Series Airfoil" 10490 PRINT " 6 - Symmetrical Biconvex Airfoil" 10500 PRINT "" 10510 INPUT " Your Choice [1]"; OPT 10520 IF OPT = 0 THEN OPT = 1 10530 ' 10540 PRINT "" 10550 PRINT " You Have The Following Options For Coordinate Spacing:" 10560 PRINT " 1 - Equal Spacing" 10570 PRINT " 2 - Half Cosine With Smaller Increments Near 0" 10580 PRINT " 3 - Half Cosine With Smaller Increments Near 1" 10590 PRINT " 4 - Full Cosine" 10600 PRINT " 5 - Read X/C Values From A File" 10610 PRINT " 6 - Manual Entry Of X/C Values" 10620 PRINT "" 10630 INPUT " Your Choice [4]"; SPAC 10640 IF SPAC = 0 THEN SPAC = 4 10650 VIEW PRINT 1 TO 24 10660 CLS : PRINT 10670 ' 10680 ' MANUAL ENTRY 10690 ' 10700 IF SPAC = 6 THEN 10710 PRINT " You Have Chosen Manual Entry" 10720 INPUT " How Many Points Are You Going To Enter"; NPP 10730 PRINT " Ok, Now Enter The Points, The First Being 0 And The Last Being 1" 10740 PRINT "" 10750 FOR I = 1 TO NPP 10760 PRINT USING " Point Number ### = "; I: INPUT XDD(I) 10770 NEXT I 10780 IF XDD(1) <> 0 THEN PRINT " *** THE FIRST POINT IS NOT 0, TRY AGAIN ***": GOTO 10740 10790 IF XDD(NPP) <> 1 THEN PRINT " *** THE LAST POINT IS NOT 1, TRY AGAIN ***": GOTO 10740 10800 END IF 10810 ' 10820 ' FILE INPUT 10830 ' 10840 IF SPAC = 5 THEN 10850 PRINT 10860 INPUT " Enter Name Of File Containing Values"; XVAL$ 10870 OPEN XVAL$ FOR INPUT AS 3 10880 NPP = 0 10890 IF EOF(3) THEN GOTO 10930 10900 NPP = NPP + 1 10910 INPUT #3, XDD(NPP) 10920 GOTO 10890 10930 CLOSE 3 10940 END IF 10950 ' 10960 IF SPAC < 5 THEN 10970 CLS : PRINT 10980 INPUT " How Many Points Do You Want Generated"; NPP 10990 END IF 11000 ' 11010 ' EQUAL SPACING 11020 ' 11030 IF SPAC = 4 THEN 11040 DELTH = PI / (NPP - 1) 11050 FOR I = 1 TO NPP 11060 XDD(I) = .5 - .5 * COS(DELTH * (I - 1)) 11070 NEXT I 11080 END IF 11090 ' 11100 ' HALF COSINE AFT PACKED 11110 ' 11120 IF SPAC = 3 THEN 11130 DELTH = PI / 2 / (NPP - 1) 11140 FOR I = 1 TO NPP 11150 XDD(I) = COS(PI / 2 - DELTH * (I - 1)) 11160 NEXT I 11170 END IF 11180 ' 11190 ' HALF COSINE FWD PACKED 11200 ' 11210 IF SPAC = 2 THEN 11220 DELTH = PI / 2 / (NPP - 1) 11230 FOR I = 1 TO NPP 11240 XDD(I) = 1 - COS(DELTH * (I - 1)) 11250 NEXT I 11260 END IF 11270 ' 11280 ' FULL COSINE 11290 ' 11300 IF SPAC = 1 THEN 11310 DELTH = 1 / (NPP - 1) 11320 FOR I = 1 TO NPP 11330 XDD(I) = DELTH * (I - 1) 11340 NEXT I 11350 END IF 11360 ' 11370 ' REJOIN PATHS 11380 ' 11390 DELTH = PI / NP 11400 FOR I = 1 TO NP 11410 XCC(I) = .5 - .5 * COS(DELTH * I) 11420 NEXT I 11430 CLS : PRINT 11440 ' 11450 ' NACA 4 DIGIT -------------------------------------------------- 11460 ' 11470 IF OPT > 1 THEN GOTO 11860 11480 PRINT " You Have Chosen To Create A NACA 4 Digit Airfoil" 11490 PRINT "" 11500 INPUT " Enter The First Digit Of The 4 Digit Designation"; MM 11510 INPUT " Enter The Second Digit Of The 4 Digit Designation"; PP 11520 INPUT " Enter The Last Two Digits Of The 4 Digit Designation"; TOC 11530 PRINT "" 11540 IF MM = 0 THEN 11550 NP = NPP 11560 FOR I = 1 TO NP 11570 XCC(I) = XDD(I) 11580 NEXT I 11590 END IF 11600 MC = MM / 100 11610 PC = PP / 10 11620 TC = TOC / 100 11630 FOR I = 1 TO NP 11640 YT(I) = TC * (1.4845 * SQR(XCC(I)) - .63 * XCC(I) - 1.758 * XCC(I) ^ 2 + 1.4215 * XCC(I) ^ 3 - .5075 * XCC(I) ^ 4) 11650 IF MC = 0 THEN 11660 YC(I) = 0 11670 DYC(I) = 0 11680 ELSE 11690 IF XCC(I) > PC THEN 11700 YC(I) = MC / (1 - PC) ^ 2 * (1 - 2 * PC + 2 * PC * XCC(I) - XCC(I) ^ 2) 11710 DYC(I) = 2 * MC / (1 - PC) ^ 2 * (PC - XCC(I)) 11720 ELSE 11730 YC(I) = MC / PC ^ 2 * (2 * PC * XCC(I) - XCC(I) ^ 2) 11740 DYC(I) = 2 * MC / PC ^ 2 * (PC - XCC(I)) 11750 END IF 11760 END IF 11770 NEXT I 11780 LER = 1.1019 * TC ^ 2 11790 TEANG = 2 * ATN(1.16925 * TC) 11800 DESIG = MM * 1000 + PP * 100 + TOC 11810 DESIG$ = STR$(DESIG) 11820 GOTO 14610 11830 ' 11840 ' NACA 5 DIGIT -------------------------------------------------- 11850 ' 11860 IF OPT > 2 THEN GOTO 12460 11870 PRINT " You Have Chosen To Create A NACA 5 Digit Airfoil" 11880 PRINT "" 11890 INPUT " Enter The First Digit Of The 5 Digit Designation"; LL 11900 INPUT " Enter The Second Digit Of The 5 Digit Designation"; PP 11910 INPUT " Enter The Third Digit Of The 5 Digit Designation"; QQ 11920 INPUT " Enter The Last Two Digits Of The 5 Digit Designation"; TOC 11930 PRINT "" 11940 IF LL = 0 THEN 11950 NP = NPP 11960 FOR I = 1 TO NP 11970 XCC(I) = XDD(I) 11980 NEXT I 11990 END IF 12000 LC = LL / 10 12010 PC = PP / 20 12020 TC = TOC / 100 12030 MC = PC / 2 12040 PCT = SQR(MC ^ 2 * (MC / 3 - 2 * SQR(MC / 3) + 1)) 12050 IF ABS(PC - PCT) <= .0001 THEN GOTO 12080 12060 MC = MC * PC / PCT 12070 GOTO 12040 12080 SVAL = 1 - 2 * MC 12090 GOSUB 18460 12100 QC = (3 * MC - 7 * MC ^ 2 + 8 * MC ^ 3 - 4 * MC ^ 4) / SQR(MC * (1 - MC)) - 1.5 * (1 - 2 * MC) * (PI / 2 - THETA) 12110 K1 = 9 * LC / QC 12120 K2K1 = (3 * (MC - PC) ^ 2 - MC ^ 3) / (1 - MC) ^ 3 12130 FOR I = 1 TO NP 12140 YT(I) = TC * (1.4845 * SQR(XCC(I)) - .63 * XCC(I) - 1.758 * XCC(I) ^ 2 + 1.4215 * XCC(I) ^ 3 - .5075 * XCC(I) ^ 4) 12150 IF LL = 0 THEN GOTO 12300 12160 IF QQ > 0 THEN GOTO 12240 12170 IF XCC(I) > MC THEN GOTO 12210 12180 YC(I) = K1 / 6 * (XCC(I) ^ 3 - 3 * MC * XCC(I) ^ 2 + MC ^ 2 * (3 - MC) * XCC(I)) 12190 DYC(I) = K1 / 6 * (3 * XCC(I) ^ 2 - 6 * MC * XCC(I) + MC ^ 2 * (3 - MC)) 12200 GOTO 12300 12210 YC(I) = K1 / 6 * MC ^ 3 * (1 - XCC(I)) 12220 DYC(I) = -K1 / 6 * MC ^ 3 12230 GOTO 12300 12240 IF XCC(I) > MC THEN GOTO 12280 12250 YC(I) = K1 / 6 * ((XCC(I) - MC) ^ 3 - K2K1 * (1 - MC) ^ 3 * XCC(I) - MC ^ 3 * XCC(I) + MC ^ 3) 12260 DYC(I) = K1 / 6 * (3 * (XCC(I) - MC) ^ 2 - K2K1 * (1 - MC) ^ 3 - MC ^ 3) 12270 GOTO 12300 12280 YC(I) = K1 / 6 * (K2K1 * (XCC(I) - MC) ^ 3 - K2K1 * (1 - MC) ^ 3 * XCC(I) - MC ^ 3 * XCC(I) + MC ^ 3) 12290 DYC(I) = K1 / 6 * (3 * K2K1 * (XCC(I) - MC) ^ 2 - K2K1 * (1 - MC) ^ 3 - MC ^ 3) 12300 NEXT I 12310 LER = 1.1019 * TC ^ 2 12320 TEANG = 2 * ATN(1.16925 * TC) 12330 DESIG = LL * 10000 + PP * 1000 + QQ * 100 + TOC 12340 DESIG$ = STR$(DESIG) 12350 'INPUT " Enter Name Of Camberline Output File"; DEST2$ 12360 'OPEN DEST2$ FOR OUTPUT AS 3 12370 'FOR I = 1 TO NP 12380 ' PRINT #3, USING " #.####### #.#######"; XCC(I); YC(I) 12390 'NEXT I 12400 'PRINT "" 12410 'CLOSE 3 12420 GOTO 14610 12430 ' 12440 ' NACA MODIFIED 4 DIGIT ----------------------------------------- 12450 ' 12460 IF OPT > 3 THEN GOTO 12960 12470 PRINT " You Have Chosen To Create A NACA Modified 4 Digit Airfoil" 12480 PRINT "" 12490 INPUT " Enter The First Digit Of The 4 Digit Designation"; MM 12500 INPUT " Enter The Second Digit Of The 4 Digit Designation"; PP 12510 INPUT " Enter The Last Two Digits Of The 4 Digit Designation"; TOC 12520 INPUT " Enter The First Digit Of The Appended Number"; IP 12530 INPUT " Enter The Second Digit Of The Appended Number"; TT 12540 PRINT "" 12550 IF MM = 0 THEN 12560 NP = NPP 12570 FOR I = 1 TO NP 12580 XCC(I) = XDD(I) 12590 NEXT I 12600 END IF 12610 MC = MM / 100 12620 PC = PP / 10 12630 TC = TOC / 100 12640 TP = TT / 10 12650 D1 = (2.24 - 5.42 * TP + 12.3 * TP ^ 2) / 10 / (1 - .878 * TP) 12660 D2 = (.294 - 2 * (1 - TP) * D1) / (1 - TP) ^ 2 12670 D3 = (-.196 + (1 - TP) * D1) / (1 - TP) ^ 3 12680 A0 = .296904 * IP / 6 12690 R1 = (1 - TP) ^ 2 / 5 / (.588 - 2 * D1 * (1 - TP)) 12700 AA1 = .3 / TP - 15 * A0 / 8 / SQR(TP) - TP / 10 / R1 12710 A2 = -.3 / TP ^ 2 + 5 * A0 / 4 / TP ^ (1.5) + 1 / 5 / R1 12720 A3 = .1 / TP ^ 3 - .375 * A0 / TP ^ (2.5) - 1 / 10 / R1 / TP 12730 FOR I = 1 TO NP 12740 IF XCC(I) > TP THEN GOTO 12770 12750 YT(I) = 5 * TC * (A0 * SQR(XCC(I)) + AA1 * XCC(I) + A2 * XCC(I) ^ 2 + A3 * XCC(I) ^ 3) 12760 GOTO 12780 12770 YT(I) = 5 * TC * (.002 + D1 * (1 - XCC(I)) + D2 * (1 - XCC(I)) ^ 2 + D3 * (1 - XCC(I)) ^ 3) 12780 IF MM = 0 THEN GOTO 12850 12790 IF XCC(I) > PC THEN GOTO 12830 12800 YC(I) = MC / PC ^ 2 * (2 * PC * XCC(I) - XCC(I) ^ 2) 12810 DYC(I) = 2 * MC / PC ^ 2 * (PC - XCC(I)) 12820 GOTO 12850 12830 YC(I) = MC / (1 - PC) ^ 2 * (1 - 2 * PC + 2 * PC * XCC(I) - XCC(I) ^ 2) 12840 DYC(I) = 2 * MC / (1 - PC) ^ 2 * (PC - XCC(I)) 12850 NEXT I 12860 LER = 1.1019 * (IP / 6 * TC) ^ 2 12870 IF IP >= 9 THEN LER = 3 * 1.1019 * (TC) ^ 2 12880 TEANG = 2 * ATN(1.16925 * TC) 12890 DESIG = MM * 1000 + PP * 1000 + TOC 12900 SESIG = IP * 10 + TT 12910 DESIG$ = STR$(DESIG) + "-" + STR$(SESIG) 12920 GOTO 14610 12930 ' 12940 ' NACA 16 SERIES ------------------------------------------------ 12950 ' 12960 IF OPT > 4 THEN GOTO 13410 12970 PRINT " You Have Chosen To Create A NACA 16 Series Airfoil" 12980 PRINT "" 12990 INPUT " Enter The First Two Digits Of The Designation"; FSTTWO 13000 INPUT " Enter The Third Digit Of The Designation"; MM 13010 INPUT " Enter The Last Two Digits Of The Designation"; TOC 13020 PRINT "" 13030 IF MM = 0 THEN 13040 NP = NPP 13050 FOR I = 1 TO NP 13060 XCC(I) = XDD(I) 13070 NEXT I 13080 END IF 13090 IP = 4 13100 T = 5 13110 MC = MM / 10 13120 TC = TOC / 100 13130 TP = T / 10 13140 D1 = (2.24 - 5.42 * TP + 12.3 * TP ^ 2) / 10 / (1 - .878 * TP) 13150 D2 = (.294 - 2 * (1 - TP) * D1) / (1 - TP) ^ 2 13160 D3 = (-.196 + (1 - TP) * D1) / (1 - TP) ^ 3 13170 A0 = .296904 * IP / 6 13180 R1 = (1 - TP) ^ 2 / 5 / (.588 - 2 * D1 * (1 - TP)) 13190 AA1 = .3 / TP - 15 * A0 / 8 / SQR(TP) - TP / 10 / R1 13200 A2 = -.3 / TP ^ 2 + 5 * A0 / 4 / TP ^ (1.5) + 1 / 5 / R1 13210 A3 = .1 / TP ^ 3 - .375 * A0 / TP ^ (2.5) - 1 / 10 / R1 / TP 13220 FOR I = 1 TO NP 13230 IF XCC(I) > TP THEN GOTO 13260 13240 YT(I) = 5 * TC * (A0 * SQR(XCC(I)) + AA1 * XCC(I) + A2 * XCC(I) ^ 2 + A3 * XCC(I) ^ 3) 13250 GOTO 13270 13260 YT(I) = 5 * TC * (.002 + D1 * (1 - XCC(I)) + D2 * (1 - XCC(I)) ^ 2 + D3 * (1 - XCC(I)) ^ 3) 13270 IF MM = 0 THEN GOTO 13310 13280 IF XCC(I) = 0 OR XCC(I) = 1 THEN GOTO 13310 13290 YC(I) = -MC / 4 / PI * ((1 - XCC(I)) * LOG(1 - XCC(I)) + XCC(I) * LOG(XCC(I))) 13300 DYC(I) = -MC / 4 / PI * (-1 / (1 - XCC(I)) - LOG(1 - XCC(I)) + XCC(I) / (1 - XCC(I)) + LOG(XCC(I)) + 1) 13310 NEXT I 13320 LER = 1.1019 * (IP / 6 * TC) ^ 2 13330 IF IP >= 9 THEN LER = 3 * 1.1019 * (TC) ^ 2 13340 TEANG = 2 * ATN(1.16925 * TC) 13350 DESIG = FSTTWO * 1000 + MM * 100 + TOC 13360 DESIG$ = STR$(DESIG) 13370 GOTO 14610 13380 ' 13390 ' NACA 6 SERIES ------------------------------------------------ 13400 ' 13410 IF OPT > 5 THEN GOTO 14380 13420 PRINT " You Have Chosen To Create A NACA 6 Series Airfoil" 13430 PRINT "" 13440 INPUT " Enter The First Digit Of The 6 Series Designation"; LL 13450 INPUT " Enter The Second Digit Of The 6 Series Designation"; PP 13460 INPUT " Enter The Third Digit Of The 6 Series Designation"; MM 13470 INPUT " Enter The Last Two Digits Of The 6 Series Designation"; TOC 13480 IF MM <> 0 THEN 13490 INPUT " Enter Value Of a For Camberline (0-1)[1]"; AA$ 13500 IF AA$ = "" THEN AA = 1 ELSE AA = VAL(AA$) 13510 END IF 13520 INPUT " Do You Want The Lower Surface Cove Filled In (Y/N)[N]"; AMOD$ 13530 IF AMOD$ = "" OR AMOD$ = "N" OR AMOD$ = "n" THEN AMOD$ = "N" ELSE AMOD$ = "Y" 13540 PRINT 13550 IF PP < 3 OR PP > 7 THEN 13560 PRINT " YOU HAVE ASKED FOR A 6 SERIES AIRFOIL OUTSIDE THE THICKNESS" 13570 PRINT " FORM DATABASE. RESULTS WILL NOT NECESSARILY BE VALID" 13580 PRINT 13590 END IF 13600 GOSUB 21460 13610 ' 13620 NP = N6P 13630 MC = MM / 10 13640 TC = TOC / 100 13650 FOR I = 1 TO NP 13660 XCC(I) = X6(I) 13670 IF TC < .06 THEN 13680 JJ = 1 13690 FOR J = 1 TO N6S 13700 T6(J) = YT6(JJ, I) * TC / .06 13710 JJ = JJ + N6T 13720 NEXT J 13730 ELSEIF TC > .21 THEN 13740 JJ = N6T 13750 FOR J = 1 TO N6S 13760 T6(J) = YT6(JJ, I) * TC / .21 13770 JJ = JJ + N6T 13780 NEXT J 13790 ELSE 13800 JJ = 1 13810 FOR J = 1 TO N6S 13820 N = N6T 13830 XI(1) = .06: XI(2) = .08: XI(3) = 9.000001E-02: XI(4) = .1 13840 XI(5) = .12: XI(6) = .15: XI(7) = .18: XI(8) = .21 13850 FOR K = 1 TO N 13860 YI(K) = YT6(JJ + K - 1, I) 13870 NEXT K 13880 XD = TC 13890 GOSUB 22440 13900 T6(J) = YD 13910 JJ = JJ + N6T 13920 NEXT J 13930 END IF 13940 FOR J = 1 TO N6S 13950 XI(J) = J + 2 13960 YI(J) = T6(J) 13970 NEXT J 13980 N = N6S 13990 XD = PP 14000 GOSUB 22440 14010 YT(I) = YD 14020 ' 14030 IF MC = 0 THEN 14040 YC(I) = 0 14050 DYC(I) = 0 14060 ELSE 14070 N = N6C 14080 FOR K = 1 TO N 14090 XI(K) = (K - 1) / 10 14100 YI(K) = YC6(K, I) 14110 NEXT K 14120 XD = AA 14130 GOSUB 22440 14140 YC(I) = YD * MC 14150 ' 14160 N = N6C 14170 FOR K = 1 TO N 14180 XI(K) = (K - 1) / 10 14190 YI(K) = DYC6(K, I) 14200 NEXT K 14210 XD = AA 14220 GOSUB 22440 14230 DYC(I) = YD * MC 14240 END IF 14250 ' 14260 NEXT I 14270 DESIG = LL * 10 + PP 14280 SESIG = MM * 100 + TOC 14290 IF AMOD$ = "N" THEN 14300 DESIG$ = STR$(DESIG) + "-" + STR$(SESIG) 14310 ELSE 14320 DESIG$ = STR$(DESIG) + "A" + STR$(SESIG) 14330 END IF 14340 GOTO 14610 14350 ' 14360 ' BICONVEX AIRFOIL --------------------------------------------- 14370 ' 14380 IF OPT > 6 THEN GOTO 10300 14390 PRINT " You Have Chosen To Create A Biconvex Airfoil" 14400 PRINT "" 14410 INPUT " Enter The Desired Thickness To Chord Ratio"; TOC 14420 PRINT "" 14430 RAD = (2 + 8 * (TOC / 2) ^ 2) / 16 / (TOC / 2) 14440 NP = NPP 14450 FOR I = 1 TO NP 14460 XCC(I) = XDD(I) 14470 NEXT I 14480 FOR I = 1 TO NP 14490 YT(I) = SQR(RAD ^ 2 - (XCC(I) - .5) ^ 2) 14500 YC(I) = 0 14510 DYC(I) = 0 14520 NEXT I 14530 Y0 = YT(1) 14540 FOR I = 1 TO NP 14550 YT(I) = YT(I) - Y0 14560 NEXT I 14570 DESIG$ = "BICONVEX" 14580 GOTO 14610 14590 ' 14600 ' REJOIN PATHS ---------------------------------------------------- 14610 ' 14620 FOR I = 1 TO NP 14630 THET = ATN(DYC(I)) 14640 XU(I) = XCC(I) - YT(I) * SIN(THET) 14650 YU(I) = YC(I) + YT(I) * COS(THET) 14660 XL(I) = XCC(I) + YT(I) * SIN(THET) 14670 YL(I) = YC(I) - YT(I) * COS(THET) 14680 NEXT I 14690 IF AMOD$ = "Y" THEN GOSUB 23060 14700 INPUT " Do You Want To Bypass Point Redistribution (Y/N)[N]"; ANSD$ 14710 IF ANSD$ = "Y" OR ANSD$ = "y" THEN 14720 NPP = NP 14730 GOTO 14760 14740 END IF 14750 GOSUB 18890 14760 CLS : LOCATE 12, 18 14770 INPUT " Would You Like To View The Airfoil (Y/N)[Y]"; WOW$ 14780 IF WOW$ = "N" OR WOW$ = "n" THEN GOTO 14880 14790 LOCATE 14, 18 14800 INPUT " Connect Points With Lines (Y/N)[N]"; ANSC$ 14810 IF ANSC$ = "" OR ANSC$ = "n" OR ANSC$ = "N" THEN ANSC$ = "N" ELSE ANSC$ = "Y" 14820 GOSUB 18530 14830 ' 14840 TITLE$ = "NACA " + DESIG$ + " AIRFOIL" 14850 ' 14860 ' OUTPUT 14870 ' 14880 CLS : PRINT 14890 INPUT " Enter The Filename For Output Of The Coordinates"; DEST$ 14900 OPEN DEST$ FOR OUTPUT AS #1 14910 PRINT : PRINT 14920 PRINT " You Have The Following OUTPUT Format Options:" 14930 PRINT " 1 - LED Format" 14940 PRINT " 2 - ISES Format" 14950 PRINT " 3 - Eppler Format" 14960 PRINT " 4 - WIBCO Format" 14970 PRINT " 5 - VSAERO Format" 14980 PRINT " 6 - AutoCAD SCR Format" 14990 INPUT " Your Choice [1]"; OOPT 15000 ON OOPT + 1 GOSUB 15040, 15040, 15320, 15520, 17740, 18030, 18160 15010 CLOSE #1 15020 END 15030 '----------------------------------------------------------------- 15040 'LED FORMAT OUTPUT 15050 ' 15060 IF OPT = 1 THEN 15070 PRINT #1, USING " NACA 4-DIGIT AIRFOIL M = #.#, P = #.#, T/C = ##.#"; MM; PP; TOC 15080 ELSEIF OPT = 2 THEN 15090 PRINT #1, USING " NACA 5-DIGIT AIRFOIL L = #.#, P = #.#, Q = #.#, T/C = ##.#"; LL; PP; QQ; TOC 15100 ELSEIF OPT = 3 THEN 15110 PRINT #1, USING " NACA MODIFIED 4-DIGIT AIRFOIL M = #.#, P = #.#, T/C = ##.# IP = #.#, T = #.#"; MM; PP; TOC; IP; TT 15120 ELSEIF OPT = 4 THEN 15130 PRINT #1, USING " NACA 16 SERIES AIRFOIL M = #.#, T/C = ##.#"; MM; TOC 15140 ELSEIF OPT = 5 THEN 15150 IF AMOD$ <> "Y" THEN 15160 PRINT #1, USING " NACA 6 SERIES AIRFOIL P = #.#, M = #.#, T/C = ##.#"; PP; MM; TOC 15170 ELSE 15180 PRINT #1, USING " NACA 6 SERIES AIRFOIL P = #.#, M = #.#, T/C = ##.#, COVE FILLED"; PP; MM; TOC 15190 END IF 15200 END IF 15210 PRINT #1, USING " ###. ###."; NPP; NPP 15220 PRINT #1, "" 15230 FOR I = 1 TO NPP 15240 PRINT #1, USING " #.####### #.#######"; XU(I); YU(I) 15250 NEXT I 15260 PRINT #1, "" 15270 FOR I = 1 TO NPP 15280 PRINT #1, USING " #.####### #.#######"; XL(I); YL(I) 15290 NEXT I 15300 RETURN 15310 '----------------------------------------------------------------- 15320 'ISES FORMAT OUTPUT 15330 ' 15340 CLS : PRINT : PRINT 15350 INPUT " Enter Length Of Computational Domain Upstream (~2)[2]"; CHINL 15360 IF CHINL = 0 THEN CHINL = 2 15370 INPUT " Enter Length Of Computational Domain Downstream (~2)[2]"; CHOUT 15380 IF CHOUT = 0 THEN CHOUT = 2 15390 INPUT " Enter Approximate Mach Number For Analysis [0.2]"; MACH 15400 IF MACH = 0 THEN MACH = .2 15410 CHWID = 6 / SQR(1 - MACH ^ 2) 15420 PRINT #1, TITLE$ 15430 PRINT #1, USING " 0.0 0.0 ##.# ##.# ##.#"; CHINL; CHOUT; CHWID 15440 FOR I = NPP TO 1 STEP -1 15450 PRINT #1, USING " #.####### #.#######"; XU(I); YU(I) 15460 NEXT I 15470 FOR I = 2 TO NPP 15480 PRINT #1, USING " #.####### #.#######"; XL(I); YL(I) 15490 NEXT I 15500 RETURN 15510 '----------------------------------------------------------------- 15520 'EPPLER FORMAT OUTPUT 15530 ' 15540 PRINT #1, "FXPR" 15550 PRINT #1, TITLE$ 15560 PRINT #1, USING " ## ##"; NPP; NPP 15570 FORMAT$ = "#.####### #.####### #.####### #.####### #.####### #.####### #.####### #.#######" 15580 FOR I = 1 TO NPP 15590 PRINT #1, USING FORMAT$; XU(I); 15600 GOSUB 17660 15610 NEXT I 15620 GOSUB 17710 15630 FOR I = 1 TO NPP 15640 PRINT #1, USING FORMAT$; YU(I); 15650 GOSUB 17660 15660 NEXT I 15670 GOSUB 17710 15680 FOR I = 1 TO NPP 15690 PRINT #1, USING FORMAT$; XL(I); 15700 GOSUB 17660 15710 NEXT I 15720 GOSUB 17710 15730 FOR I = 1 TO NPP 15740 PRINT #1, USING FORMAT$; YL(I); 15750 GOSUB 17660 15760 NEXT 15770 GOSUB 17710 15780 L% = 3 15790 WHILE ADD$(L%) <> "" 15800 PRINT #1, ADD$(L%) 15810 L% = L% + 1 15820 WEND 15830 ' 15840 CLS : PRINT : PRINT 15850 'MACH CARD 15860 INPUT " Enter Mach Number For This Case [0]"; MACHN 15870 MN = INT(MACHN * 1000) 15880 IF MN <> 0 THEN 15890 PRINT #1, USING "MACH ####"; MN 15900 END IF 15910 'ALFA CARD 15920 PRINT 15930 INPUT " Enter Number Of Angles Of Attack To Be Entered (14 max)[1]"; NALP 15940 IF NALP < 1 THEN GOTO 17620 15950 IF NALP <> 0 THEN 15960 FOR I = 1 TO NALP 15970 PRINT " Angle Of Attack #"; I; : INPUT ALP(I) 15980 NEXT I 15990 END IF 16000 PRINT #1, "ALFA"; 16010 PRINT 16020 PRINT " Is A Printout Of Moment Coefficient Required" 16030 INPUT " For Each Angle Of Attack (Y/N)[Y]"; MOM$ 16040 IF MOM$ <> "N" AND MOM$ <> "n" THEN NUPA = 1 ELSE NUPA = 2 16050 PRINT #1, USING "#"; NUPA; 16060 NUPE = 1 16070 PRINT #1, USING "#"; NUPE; 16080 PRINT 16090 PRINT " Are The Angles Of Attack Relative To:" 16100 PRINT " 1) The Chord Line" 16110 PRINT " 2) The Zero-Lift Line" 16120 INPUT " Option (1/2)[1]"; AREF 16130 IF AREF <> 2 THEN AREF = 1 16140 PRINT 16150 PRINT " What Should Be Printed Out (And Plotted):" 16160 PRINT " 1) Velocity Ratios v/V" 16170 PRINT " 2) Pressure Coefficients Cp" 16180 INPUT " Option (1/2)[2]"; PPR 16190 IF PPR <> 1 THEN PPR = 2 16200 IF AREF = 1 AND PPR = 1 THEN NUPI = 1 16210 IF AREF = 2 AND PPR = 1 THEN NUPI = 0 16220 IF AREF = 1 AND PPR = 2 THEN NUPI = 3 16230 IF AREF = 2 AND PPR = 2 THEN NUPI = 2 16240 PRINT #1, USING "#"; NUPI; 16250 PRINT #1, USING "###"; NALP; 16260 FOR I = 1 TO NALP 16270 PRINT #1, USING "#####"; INT(ALP(I) * 100); 16280 NEXT I 16290 PRINT #1, "" 16300 'DIAG CARD 16310 PRINT 16320 IF PPR = 1 THEN 16330 INPUT " Is A Plot Of The Velocity Distributions Required (Y/N)[N]", PL$ 16340 ELSE 16350 INPUT " Is A Plot Of The Cp Distributions Required (Y/N)[N]", PL$ 16360 END IF 16370 IF PL$ = "y" OR PL$ = "Y" THEN 16380 PRINT #1, USING "DIAG #"; PPR 16390 END IF 16400 'RE CARD 16410 PRINT 16420 INPUT " How Many Combinations Of Re And Transition Type Are Required (5 max)[1]"; NCOMBO 16430 IF NCOMBO < 1 THEN NCOMBO = 1 16440 INPUT " Print Just A Summary Or The Entire Boundary Layer History (1/2)[1]"; PRTO 16450 IF PRTO = 2 THEN 16460 PRINT " At Each Step In The Boundary Layer Print:" 16470 PRINT " 1) Momentum Thickness" 16480 PRINT " 2) Reynolds Number Based Upon Momentum Thickness" 16490 PRINT " 3) Displacement Thickness" 16500 INPUT " Option (1/2/3)[1]"; BLO 16510 IF BLO < 1 OR BLO > 3 THEN BLO = 1 16520 END IF 16530 RST$ = "RE 1" 16540 DUM$ = STR$((BLO + 1) * 10) 16550 NUPE$ = MID$(DUM$, 2, 1) 16560 RST$ = RST$ + NUPE$ + " " 16570 GOSUB 23380 16580 ITRANS = 0 16590 FOR I = 1 TO NCOMBO 16600 PRINT " For Case #"; I 16610 INPUT " Enter Reynolds Number"; REY 16620 REYN = INT(REY / 1000) 16630 PRINT " Enter Transition Type (1/2/3/4)[3]" 16640 INPUT " (Enter ? To See Options Again)"; TTYPE$ 16650 IF TTYPE$ = "?" THEN 16660 GOSUB 23380 16670 GOTO 16630 16680 END IF 16690 TTYPE = VAL(TTYPE$) 16700 IF TTYPE < 1 OR TTYPE > 4 THEN TTYPE = 3 16710 IF TTYPE = 1 THEN 16720 MU = 0 16730 END IF 16740 IF TTYPE = 2 THEN 16750 ITRANS = ITRANS + 1 16760 IF ITRANS > 2 THEN 16770 PRINT " ONLY TWO FIXED TRANSITION CASES ALLOWED" 16780 ITRANS = 2 16790 GOTO 16630 16800 ELSE 16810 INPUT " Enter X/C Location of Transition On Upper Surface"; XTU(ITRANS) 16820 INPUT " Enter X/C Location of Transition On Lower Surface"; XTL(ITRANS) 16830 MU = ITRANS 16840 END IF 16850 END IF 16860 IF TTYPE = 3 THEN 16870 MU = 3 16880 END IF 16890 IF TTYPE = 4 THEN 16900 INPUT " Enter Roughness Level (0-6, ? For Options)[0]"; ROUGH$ 16910 IF ROUGH$ = "?" THEN 16920 GOSUB 23380 16930 GOTO 16900 16940 END IF 16950 ROUGH = VAL(ROUGH$) 16960 MU = INT(ROUGH + 3) 16970 END IF 16980 DUM$ = STR$(MU) 16990 MU$ = " " + MID$(DUM$, 2, 1) + " " 17000 RST$ = RST$ + MU$ 17010 DUM$ = STR$(REYN) 17020 LD = LEN(DUM$) 17030 REY$ = MID$(DUM$, 2, LD - 1) 17040 LR = LEN(REY$) 17050 IF LR <> 5 THEN 17060 FOR J = 1 TO LR 17070 REY$ = " " + REY$ 17080 NEXT J 17090 END IF 17100 RST$ = RST$ + REY$ 17110 NEXT I 17120 IF ITRANS > 0 THEN 17130 LR = LEN(RST$) 17140 DR = 60 - LR 17150 FOR J = 1 TO DR 17160 RST$ = RST$ + " " 17170 NEXT J 17180 FOR J = 1 TO ITRANS 17190 DUM$ = STR$(INT(XTU(ITRANS) * 10000)) 17200 LD = LEN(DUM$) 17210 XT$ = MID$(DUM$, 2, LD - 1) 17220 LD = LEN(XT$) 17230 DL = 5 - LD 17240 FOR K = 1 TO DL 17250 RST$ = RST$ + " " 17260 NEXT K 17270 RST$ = RST$ + XT$ 17280 DUM$ = STR$(INT(XTL(ITRANS) * 10000)) 17290 LD = LEN(DUM$) 17300 XT$ = MID$(DUM$, 2, LD - 1) 17310 LD = LEN(XT$) 17320 DL = 5 - LD 17330 FOR K = 1 TO DL 17340 RST$ = RST$ + " " 17350 NEXT K 17360 RST$ = RST$ + XT$ 17370 NEXT J 17380 END IF 17390 PRINT #1, RST$ 17400 PRINT 17410 INPUT " Is A CD-CL Plot Required (Y/N)[Y]"; PL$ 17420 IF PL$ <> "n" AND PL$ <> "N" THEN 17430 PRINT #1, "CDCL" 17440 END IF 17450 PRINT 17460 INPUT " Is A Flap Deflection Case Required (Y/N)[N]"; FLP$ 17470 IF FLP$ = "Y" OR FLP$ = "y" THEN 17480 INPUT " Enter X/C Location Of Hinge"; XLOC 17490 INPUT " Enter Y/C Location Of Hinge"; YLOC 17500 INPUT " Enter Flap Deflection (deg, Negative Is Upwards)"; DEFL 17510 FST$ = "FLAP " 17520 DUM$ = STR$(INT((1 - XLOC) * 10000)) 17530 FLC$ = LEFT$(DUM$, 5) 17540 DUM$ = STR$(INT(YLOC * 10000)) 17550 YLC$ = LEFT$(DUM$, 5) 17560 TRS$ = " 400" 17570 DUM$ = STR$(INT(DEFL * 100)) 17580 DFL$ = LEFT$(DUM$, 5) 17590 FST$ = FST$ + FLC$ + YLC$ + TRS$ + DFL$ 17600 PRINT #1, RST$ 17610 END IF 17620 PRINT #1, "ENDE" 17630 RETURN 17640 '----------------------------------------------------------------- 17650 'EPPLER OUTPUT UTILITY SUBROUTINE 17660 IF I / 8 = INT(I / 8) THEN PRINT #1, "" 17670 RETURN 17680 '----------------------------------------------------------------- 17690 'EPPLER OUTPUT UTILITY SUBROUTINE 17700 I = I - 1 17710 IF I / 8 <> INT(I / 8) THEN PRINT #1, "" 17720 RETURN 17730 '----------------------------------------------------------------- 17740 'WIBCO FORMAT OUTPUT 17750 ' 17760 GOSUB 17330 17770 PRINT #1, USING " ##."; NPP 17780 FORMAT$ = " #.###### #.###### #.###### #.###### #.###### #.######" 17790 FOR I = 1 TO NPP 17800 PRINT #1, USING FORMAT$; XU(I); 17810 GOSUB 17960 17820 NEXT I 17830 GOSUB 17990 17840 FOR I = 1 TO NPP 17850 PRINT #1, USING FORMAT$; YU(I); 17860 GOSUB 17960 17870 NEXT I 17880 GOSUB 17990 17890 FOR I = 1 TO NPP 17900 PRINT #1, USING FORMAT$; YL(I); 17910 GOSUB 17960 17920 NEXT I 17930 GOSUB 17990 17940 RETURN 17950 ' 17960 IF I / 7 = INT(I / 7) THEN PRINT #1, "" 17970 RETURN 17980 ' 17990 I = I - 1 18000 IF I / 7 <> INT(I / 7) THEN PRINT #1, "" 18010 RETURN 18020 '----------------------------------------------------------------- 18030 'VSAERO FORMAT OUTPUT 18040 ' 18050 PRINT #1, " 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 2 0 0 0" 18060 FOR I = NPP TO 1 STEP -1 18070 PRINT #1, USING " #.####### #.#######"; XL(I); YL(I) 18080 NEXT I 18090 PRINT 18100 FOR I = 2 TO NPP 18110 PRINT #1, USING " #.####### #.#######"; XU(I); YU(I) 18120 NEXT I 18130 PRINT #1, " 3 0 0" 18140 RETURN 18150 '----------------------------------------------------------------- 18160 'AUTOCAD SCRIPT FORMAT OUTPUT 18170 PRINT 18180 IF RIGHT$(DEST$, 3) <> "SCR" AND RIGHT$(DEST$, 3) <> "scr" THEN 18190 PRINT " ERROR: Output Filename Must Have A .SCR Extension" 18200 CLOSE 1 18210 INPUT " Enter The Filename For Output Of The Coordinates"; DEST$ 18220 OPEN DEST$ FOR OUTPUT AS #1 18230 END IF 18240 ' 18250 'TURN OFF LIMITS TO PREVENT LOCKUP 18260 PRINT #1, "LIMITS OFF" 18270 'PLACE NODE POINT AT CHORD LINE LEADING EDGE 18280 PRINT #1, "POINT 0,0" 18290 'DRAW CHORD LINE 18300 PRINT #1, "LINE 0,0 1,0 " 18310 'DRAW UPPER SURFACE STARTING AT 0,0 18320 PRINT #1, "PLINE" 18330 FOR I = 1 TO NPP 18340 PRINT #1, USING "#.#######,#.#######"; XU(I); YU(I) 18350 NEXT I 18360 'DRAW LOWER SURFACE STARTING AT 0,0 18370 PRINT #1, " PLINE" 18380 FOR I = 1 TO NPP 18390 PRINT #1, USING "#.#######,#.#######"; XL(I); YL(I) 18400 NEXT I 18410 'RESTORE LIMITS 18420 PRINT #1, " LIMITS ON" 18430 RETURN 18440 '----------------------------------------------------------------- 18450 'ASIN SUBROUTINE 18460 IF SVAL = 0 THEN THETA = 0 18470 IF SVAL = 1 THEN THETA = PI / 2 18480 IF SVAL = -1 THEN THETA = -PI / 2 18490 IF SVAL = 0 OR SVAL = 1 OR SVAL = -1 THEN GOTO 18510 18500 THETA = ATN(SVAL / SQR(1 - SVAL ^ 2)) 18510 RETURN 18520 '----------------------------------------------------------------- 18530 'SCREEN DISPLAY SUBROUTINE 18540 KEY OFF 18550 IF DTP = 1 THEN SCREEN 1 18560 IF DTP > 1 THEN SCREEN 9 18570 COLOR 1, 0: CLS 18580 LINE (.05 * QM, .25 * RM)-(.05 * QM, .75 * RM) 18590 LINE (.05 * QM, .5 * RM)-(.95 * QM, .5 * RM) 18600 COLR = 7 18610 FOR I = 1 TO NPP 18620 XQ(1) = .05 * QM + XU(I) * QM * .9 18630 YQ(1) = .5 * RM - YU(I) * QM * .9 18640 IF ANSC$ = "N" THEN 18650 PSET (XQ(1), YQ(1)), COLR 18660 GOTO 18720 18670 END IF 18680 IF I = 1 THEN GOTO 18700 18690 LINE (XQ(2), YQ(2))-(XQ(1), YQ(1)), COLR 18700 XQ(2) = XQ(1) 18710 YQ(2) = YQ(1) 18720 NEXT I 18730 FOR I = 1 TO NPP 18740 XQ(1) = .05 * QM + XL(I) * QM * .9 18750 YQ(1) = .5 * RM - YL(I) * QM * .9 18760 IF ANSC$ = "N" THEN 18770 PSET (XQ(1), YQ(1)), COLR 18780 GOTO 18840 18790 END IF 18800 IF I = 1 THEN GOTO 18820 18810 LINE (XQ(2), YQ(2))-(XQ(1), YQ(1)), COLR 18820 XQ(2) = XQ(1) 18830 YQ(2) = YQ(1) 18840 NEXT I 18850 IF INKEY$ = "" THEN 18850 ELSE 18860 18860 WIDTH 80: SCREEN 0, 0, 0: COLOR 7, 1: CLS 18870 RETURN 18880 '----------------------------------------------------------------- 18890 'POINT REDISTRIBUTION ROUTINE 18900 'set up constants 18910 DEG.TO.RAD = PI / 180 18920 RAD.TO.DEG = 180 / PI 18930 N.TOT = NP * 2 - 1 18940 NUP = NP 18950 NLO = NP 18960 S = 2 18970 C1 = 1 18980 C2 = 1 18990 COLOR 7, 1: CLS 19000 II = 0 19010 FOR I = NUP TO 1 STEP -1 19020 II = II + 1 19030 P(1, I) = XU(II) 19040 P(2, I) = YU(II) 19050 NEXT I 19060 II = 0 19070 FOR I = NUP TO N.TOT 19080 II = II + 1 19090 P(1, I) = XL(II) 19100 P(2, I) = YL(II) 19110 NEXT I 19120 XTRAIL = P(1, N.TOT) 19130 YTRAIL = P(2, N.TOT) 19140 'compute number of points to add 19150 'print fancy titles, date & time, job identification 19160 N = N.TOT 19170 Z = INT(300 / N.TOT + .5) 19180 LOCATE 12, 19: PRINT "Will Insert"; Z; " Points Between Given Points" 19190 LOCATE 13, 28: PRINT "Calculating Cubic Spline" 19200 N(1, 2) = 1 19210 N(1, 3) = .5 19220 FOR J = 1 TO N - 1 19230 L(J) = SQR((P(1, J + 1) - P(1, J)) ^ 2 + (P(2, J + 1) - P(2, J)) ^ 2) 19240 NEXT J 19250 FOR K = 1 TO 2 19260 B(K, 1) = (3 / (2 * L(1))) * (P(K, 2) - P(K, 1)) 19270 NEXT K 19280 N(N, 1) = 2 19290 N(N, 2) = 4 19300 FOR K = 1 TO 2 19310 B(K, N) = (6 / L(N - 1)) * (P(K, N) - P(K, N - 1)) 19320 NEXT K 19330 FOR K = 1 TO 2 19340 B(K, N) = (6 / L(N - 1)) * (P(K, N) - P(K, N - 1)) 19350 NEXT K 19360 FOR J = 2 TO N - 1 19370 N(J, 1) = L(J) 19380 N(J, 2) = 2 * (L(J) + L(J - 1)) 19390 N(J, 3) = L(J - 1) 19400 FOR K = 1 TO 2 19410 B(K, J) = 3 * (L(J - 1) ^ 2 * (P(K, J + 1) - P(K, J)) + L(J) ^ 2 * (P(K, J) - P(K, J - 1))) 19420 B(K, J) = B(K, J) / (L(J) * L(J - 1)) 19430 NEXT K 19440 NEXT J 19450 FOR I = 2 TO N 19460 IF N(I, 1) = 0 THEN GOTO 19570 19470 D = N(I - 1, 2) / N(I, 1) 19480 FOR K = 1 TO 3 19490 N(I, K) = N(I, K) * D - N(I - 1, K + 1) 19500 B(K, I) = B(K, I) * D - B(K, I - 1) 19510 NEXT K 19520 Q = N(I, 2) 19530 FOR K = 1 TO 3 19540 N(I, K) = N(I, K) / Q 19550 B(K, I) = B(K, I) / Q 19560 NEXT K 19570 NEXT I 19580 FOR K = 1 TO 2 19590 FOR J = 0 TO N - 1 19600 U(K, N - J) = (B(K, N - J) - N(N - J, 3) * U(K, N + 1 - J)) / N(N - J, 2) 19610 NEXT J 19620 NEXT K 19630 IF FLAG THEN RETURN 19640 CLS : LOCATE 12, 28: PRINT "Performing Interpolation" 19650 I = 1 19660 FOR J = 1 TO N - 1 19670 FOR K = 1 TO 2 19680 F(1, K) = P(K, J) 19690 F(2, K) = U(K, J) 19700 F(3, K) = (3 / L(J) ^ 2) * (P(K, J + 1) - P(K, J)) - (1 / L(J)) * (U(K, J + 1) + 2 * U(K, J)) 19710 F(4, K) = (-2 / L(J) ^ 3) * (P(K, J + 1) - P(K, J)) + (1 / L(J) ^ 2) * (U(K, J + 1) + U(K, J)) 19720 NEXT K 19730 TINC = L(J) / Z 19740 T = 0 19750 IF J = 1 OR T <> 0 THEN 19760 FOR K = 1 TO 2 19770 R(K) = F(1, K) + F(2, K) * T + F(3, K) * T * T + F(4, K) * T ^ 3 19780 NEXT K 19790 C(1, I) = R(1) 19800 C(2, I) = R(2) 19810 I = I + 1 19820 END IF 19830 IF T = 0 AND ABS(C(1, I - 1) - P(1, J)) > .00001 THEN 19840 C(1, I) = P(1, J) 19850 C(2, I) = P(2, J) 19860 I = I + 1 19870 END IF 19880 T = T + TINC 19890 IF T <= L(J) THEN GOTO 19750 19900 NEXT J 19910 NUM.PTS = I - 1 19920 CLS : LOCATE 12, 27: PRINT "Number Of Points = "; NUM.PTS 19930 'move points to P array, go back to find first derivatives for all points 19940 IF ABS(C(1, NUM.PTS) - XTRAIL) > .00001 THEN 19950 NUM.PTS = NUM.PTS + 1 19960 C(1, NUM.PTS) = XTRAIL 19970 C(2, NUM.PTS) = YTRAIL 19980 END IF 19990 FOR I = 1 TO NUM.PTS 20000 P(1, I) = C(1, I) 20010 P(2, I) = C(2, I) 20020 NEXT I 20030 N = NUM.PTS 20040 FLAG = -1 20050 PRINT TAB(26); "Computing First Derivatives" 20060 GOSUB 19200 20070 'convert to slopes in radians, store as B array 20080 FOR I = 1 TO NUM.PTS 20090 B(1, I) = U(2, I) / U(1, I) 20100 NEXT I 20110 'split airfoil into upper and lower surfaces 20120 MIN = P(1, 1) 20130 FOR I = 1 TO NUM.PTS 20140 IF P(1, I) < MIN THEN 20150 IMIN = I 20160 MIN = P(1, I) 20170 END IF 20180 NEXT I 20190 GOSUB 21160 20200 'move upper surface to N arrays 1&2, move slopes to C1 array 20210 FOR I = IMIN TO 1 STEP -1 20220 N(I, 1) = P(1, I) 20230 N(I, 2) = P(2, I) 20240 C(1, I) = B(1, I) 20250 NEXT I 20260 'move lower surface to N arrays 3&4, move slopes to C2 array 20270 K = 0 20280 FOR I = IMIN TO N 20290 K = K + 1 20300 N(K, 3) = P(1, I) 20310 N(K, 4) = P(2, I) 20320 C(2, K) = B(1, I) 20330 NEXT I 20340 NUM.UP.PTS = IMIN 20350 NUM.LO.PTS = NUM.PTS - IMIN + 1 20360 PRINT 20370 CLS : LOCATE 11, 1 20380 PRINT TAB(26); "Number Of Upper Points ="; NUM.UP.PTS 20390 PRINT TAB(26); "Number Of Lower Points ="; NUM.LO.PTS 20400 FOR I = 1 TO NUM.UP.PTS 20410 K = NUM.UP.PTS - I + 1 20420 X(I) = N(K, 1) 20430 Y(I) = N(K, 2) 20440 YP(I) = C(1, K) 20450 NEXT I 20460 PRINT TAB(24); "Calculating Desired Coordinates" 20470 IF SGN(YP(1)) <> SGN(YP(2)) THEN YP(1) = -YP(1) 20480 N% = NUM.UP.PTS 20490 XU(1) = XDD(1) 20500 YU(1) = 0 20510 FOR I = 2 TO NPP 20520 XU(I) = XDD(I) 20530 XD = XDD(I) 20540 GOSUB 20770 20550 YU(I) = YD 20560 NEXT 20570 FOR I = 1 TO NUM.LO.PTS 20580 X(I) = N(I, 3) 20590 Y(I) = N(I, 4) 20600 YP(I) = C(2, I) 20610 NEXT I 20620 IF SGN(YP(1)) <> SGN(YP(2)) THEN YP(1) = -YP(1) 20630 RESTORE 20640 N% = NUM.LO.PTS 20650 XL(1) = XDD(1) 20660 YL(1) = 0 20670 FOR I = 2 TO NPP 20680 XL(I) = XDD(I) 20690 XD = XDD(I) 20700 GOSUB 20770 20710 YL(I) = YD 20720 NEXT 20730 CLS 20740 RETURN 20750 '----------------------------------------------------------------- 20760 'INTERPOLATION ROUTINE FOR REDISTRIBUTION 20770 LL% = 0 20780 UL% = N% + 1 20790 IF (UL% - LL% = 1) THEN GOTO 20940 20800 IN% = (UL% - LL%) \ 2 + LL% 20810 DX = XD - X(IN%) 20820 IF DX < 0 THEN 20830 UL% = IN% 20840 GOTO 20790 20850 END IF 20860 IF DX = 0 THEN 20870 YD = Y(IN%) 20880 GOTO 21130 20890 END IF 20900 IF DX > 0 THEN 20910 LL% = IN% 20920 GOTO 20790 20930 END IF 20940 IF UL% < 2 THEN UL% = 2 20950 IF UL% > N% THEN UL% = N% 20960 LL% = UL% - 1 20970 SL = (Y(UL%) - Y(LL%)) / (X(UL%) - X(LL%)) 20980 YZ = Y(LL%) + SL * (XD - X(LL%)) 20990 FOR I% = 1 TO 2 21000 K2% = LL% + I% - 1 21010 DY(I%) = Y(K2%) + YP(K2%) * (XD - X(K2%)) - YZ 21020 NEXT I% 21030 TEST = DY(1) * DY(2) 21040 IF TEST = 0 THEN 21050 YD = YZ 21060 GOTO 21130 21070 END IF 21080 IF TEST > 0 THEN 21090 YD = YZ + TEST / (DY(1) + DY(2)) 21100 GOTO 21130 21110 END IF 21120 YD = YZ + (TEST * (XD + XD - X(LL%) - X(UL%))) / ((DY(1) - DY(2)) * (X(UL%) - X(LL%))) 21130 RETURN 21140 '----------------------------------------------------------------- 21150 'ROTATION SUBROUTINE 21160 CLS : LOCATE 12, 30: PRINT "Performing Rotation" 21170 XRP = 1 21180 YRP = 0 21190 YTE = (P(2, 1) + P(2, NUM.PTS)) / 2 21200 DELTA = ATN(((P(2, IMIN) - YTE) - YRP) / (P(1, IMIN) - XRP)) 21210 DDELTA = DELTA * 180 / 3.1415927# 21220 LOCATE 13, 28: PRINT USING "Angle = ##.######## Deg"; DDELTA 21230 CDLT = COS(DELTA) 21240 SDLT = SIN(DELTA) 21250 TDLT = TAN(DELTA) 21260 FOR I = 1 TO NUM.PTS 21270 XRS = P(1, I) 21280 P(2, I) = P(2, I) - YTE 21290 P(1, I) = XRP + (P(1, I) - XRP) * CDLT + (P(2, I) - YRP) * SDLT 21300 P(2, I) = YRP + (P(2, I) - YRP) * CDLT - (XRS - XRP) * SDLT 21310 B(1, I) = B(1, I) - TDLT 21320 NEXT I 21330 P(1, NUM.PTS) = (P(1, 1) + P(1, NUM.PTS)) / 2 21340 P(1, 1) = P(1, NUM.PTS) 21350 XRLE = P(1, IMIN) 21360 FOR I = 1 TO NUM.PTS 21370 P(1, I) = P(1, I) - XRLE 21380 NEXT I 21390 XRCRD = P(1, 1) 21400 FOR I = 1 TO NUM.PTS 21410 P(1, I) = P(1, I) / XRCRD 21420 P(2, I) = P(2, I) / XRCRD 21430 NEXT I 21440 RETURN 21450 '----------------------------------------------------------------- 21460 'NACA CONSTANTS 21470 N = 1 + N6S * N6T + 2 * N6C 21480 FOR I = 1 TO N 21490 FOR J = 1 TO N6P 21500 READ TF6(I, J) 21510 NEXT J 21520 NEXT I 21530 FOR I = 1 TO N6P 21540 X6(I) = TF6(1, I) / 100 21550 NEXT I 21560 FOR I = 2 TO 1 + N6S * N6T 21570 FOR J = 1 TO N6P 21580 YT6(I - 1, J) = TF6(I, J) / 100 21590 NEXT J 21600 NEXT I 21610 TFI = 1 + N6S * N6T 21620 FOR I = 1 TO N6C 21630 TFI = TFI + 1 21640 FOR J = 1 TO N6P 21650 YC6(I, J) = TF6(TFI, J) / 100 21660 NEXT J 21670 TFI = TFI + 1 21680 FOR J = 1 TO N6P 21690 DYC6(I, J) = TF6(TFI, J) 21700 NEXT J 21710 NEXT I 21720 RETURN 21730 'NACA X/C LOCATIONS 21740 DATA 0.0000, 0.5000, 0.7500, 1.2500, 2.5000, 5.0000, 7.5000, 10.0000, 15.0000, 20.0000, 25.0000, 30.0000, 35.0000, 40.0000, 45.0000, 50.0000, 55.0000, 60.0000, 65.0000, 70.0000, 75.0000, 80.0000, 85.0000, 90.0000, 95.0000, 100.0000 21750 'NACA THICKNESS FORMS 6-21%, 63-67 SERIES 21760 DATA 0.0000, 0.5030, 0.6090, 0.7710, 1.0570, 1.4620, 1.7660, 2.0100, 2.3860, 2.6560, 2.8410, 2.9540, 3.0000, 2.9710, 2.8770, 2.7230, 2.5170, 2.2670, 1.9820, 1.6700, 1.3420, 1.0080, 0.6830, 0.3830, 0.1380, 0.0000 21770 DATA 0.0000, 0.6683, 0.8089, 1.0244, 1.4073, 1.9517, 2.3588, 2.6858, 3.1896, 3.5501, 3.7965, 3.9459, 3.9999, 3.9579, 3.8254, 3.6133, 3.3338, 2.9984, 2.6173, 2.2003, 1.7616, 1.3171, 0.8870, 0.4963, 0.1777, 0.0000 21780 DATA 0.0000, 0.7490, 0.9060, 1.1510, 1.5820, 2.1960, 2.6550, 3.0240, 3.5910, 3.9970, 4.2750, 4.4420, 4.5000, 4.4470, 4.2960, 4.0560, 3.7390, 3.3580, 2.9280, 2.4580, 1.9660, 1.4710, 0.9900, 0.5500, 0.1960, 0.0000 21790 DATA 0.0000, 0.8290, 1.0040, 1.2750, 1.7560, 2.4400, 2.9500, 3.3620, 3.9940, 4.4450, 4.7530, 4.9380, 5.0000, 4.9380, 4.7660, 4.4960, 4.1400, 3.7150, 3.2340, 2.7120, 2.1660, 1.6180, 1.0880, 0.6040, 0.2140, 0.0000 21800 DATA 0.0000, 0.9850, 1.1940, 1.5190, 2.1020, 2.9250, 3.5420, 4.0390, 4.7990, 5.3420, 5.7120, 5.9300, 6.0000, 5.9200, 5.7040, 5.3700, 4.9350, 4.4200, 3.8400, 3.2100, 2.5560, 1.9020, 1.2740, 0.7070, 0.2500, 0.0000 21810 DATA 0.0000, 1.2040, 1.4620, 1.8780, 2.6100, 3.6480, 4.4270, 5.0550, 6.0110, 6.6930, 7.1550, 7.4210, 7.5000, 7.3860, 7.0990, 6.6650, 6.1080, 5.4530, 4.7210, 3.9340, 3.1190, 2.3100, 1.5410, 0.8520, 0.3000, 0.0000 21820 DATA 0.0000, 1.4040, 1.7130, 2.2170, 3.1040, 4.3620, 5.3080, 6.0680, 7.2250, 8.0480, 8.6000, 8.9130, 9.0000, 8.8450, 8.4820, 7.9420, 7.2560, 6.4550, 5.5670, 4.6220, 3.6500, 2.6910, 1.7870, 0.9850, 0.3480, 0.0000 21830 DATA 0.0000, 1.5830, 1.9370, 2.5270, 3.5770, 5.0650, 6.1820, 7.0800, 8.4410, 9.4100, 10.0530, 10.4120, 10.5000, 10.2980, 9.8540, 9.2060, 8.3900, 7.4410, 6.3960, 5.2900, 4.1600, 3.0540, 2.0210, 1.1130, 0.3920, 0.0000 21840 DATA 0.0000, 0.4940, 0.5960, 0.7540, 1.0240, 1.4050, 1.6920, 1.9280, 2.2980, 2.5720, 2.7720, 2.9070, 2.9810, 2.9950, 2.9190, 2.7750, 2.5750, 2.3310, 2.0500, 1.7400, 1.4120, 1.0720, 0.7370, 0.4230, 0.1570, 0.0000 21850 DATA 0.0000, 0.6580, 0.7940, 1.0050, 1.3650, 1.8750, 2.2590, 2.5740, 3.0690, 3.4370, 3.7040, 3.8840, 3.9790, 3.9920, 3.8830, 3.6840, 3.4110, 3.0810, 2.7040, 2.2910, 1.8540, 1.4040, 0.9610, 0.5500, 0.2060, 0.0000 21860 DATA 0.0000, 0.7390, 0.8920, 1.1280, 1.5330, 2.1090, 2.5430, 2.8980, 3.4550, 3.8680, 4.1700, 4.3730, 4.4790, 4.4900, 4.3640, 4.1360, 3.8260, 3.4520, 3.0260, 2.5610, 2.0690, 1.5640, 1.0690, 0.6110, 0.2270, 0.0000 21870 DATA 0.0000, 0.8200, 0.9890, 1.2500, 1.7010, 2.3430, 2.8260, 3.2210, 3.8420, 4.3020, 4.6390, 4.8640, 4.9800, 4.9880, 4.8430, 4.5860, 4.2380, 3.8200, 3.3450, 2.8270, 2.2810, 1.7220, 1.1760, 0.6710, 0.2480, 0.0000 21880 DATA 0.0000, 0.9780, 1.1790, 1.4900, 2.0350, 2.8100, 3.3940, 3.8710, 4.6200, 5.1730, 5.5760, 5.8440, 5.9780, 5.9810, 5.7980, 5.4800, 5.0560, 4.5480, 3.9740, 3.3500, 2.6950, 2.0290, 1.3820, 0.7860, 0.2880, 0.0000 21890 DATA 0.0000, 1.2080, 1.4560, 1.8420, 2.5280, 3.5040, 4.2400, 4.8420, 5.7850, 6.4800, 6.9850, 7.3190, 7.4820, 7.4730, 7.2240, 6.8100, 6.2660, 5.6200, 4.8950, 4.1130, 3.2960, 2.4720, 1.6770, 0.9500, 0.3460, 0.0000 21900 DATA 0.0000, 1.4280, 1.7200, 2.1770, 3.0050, 4.1860, 5.0760, 5.8030, 6.9420, 7.7820, 8.3910, 8.7890, 8.9790, 8.9520, 8.6300, 8.1140, 7.4450, 6.6580, 5.7820, 4.8420, 3.8660, 2.8880, 1.9510, 1.1010, 0.4000, 0.0000 21910 DATA 0.0000, 1.6460, 1.9850, 2.5170, 3.4850, 4.8710, 5.9150, 6.7690, 8.1080, 9.0950, 9.8070, 10.2690, 10.4810, 10.4310, 10.0300, 9.4040, 8.6070, 7.6780, 6.6490, 5.5490, 4.4160, 3.2870, 2.2130, 1.2450, 0.4490, 0.0000 21920 DATA 0.0000, 0.4760, 0.5740, 0.7170, 0.9560, 1.3100, 1.5890, 1.8240, 2.1970, 2.4820, 2.6970, 2.8520, 2.9520, 2.9980, 2.9830, 2.9000, 2.7410, 2.5180, 2.2460, 1.9350, 1.5940, 1.2330, 0.8650, 0.5100, 0.1950, 0.0000 21930 DATA 0.0000, 0.6270, 0.7560, 0.9450, 1.2670, 1.7450, 2.1180, 2.4320, 2.9310, 3.3120, 3.5990, 3.8050, 3.9380, 3.9980, 3.9740, 3.8570, 3.6380, 3.3370, 2.9710, 2.5530, 2.0960, 1.6170, 1.1310, 0.6640, 0.2520, 0.0000 21940 DATA 0.0000, 0.7000, 0.8450, 1.0580, 1.4210, 1.9610, 2.3830, 2.7360, 3.2990, 3.7270, 4.0500, 4.2820, 4.4310, 4.4960, 4.4690, 4.3360, 4.0860, 3.7430, 3.3280, 2.8560, 2.3420, 1.8050, 1.2600, 0.7380, 0.2800, 0.0000 21950 DATA 0.0000, 0.7720, 0.9320, 1.1690, 1.5740, 2.1770, 2.6470, 3.0400, 3.6660, 4.1430, 4.5030, 4.7600, 4.9240, 4.9960, 4.9630, 4.8120, 4.5300, 4.1460, 3.6820, 3.1560, 2.5840, 1.9870, 1.3850, 0.8100, 0.3060, 0.0000 21960 DATA 0.0000, 0.9230, 1.1090, 1.3870, 1.8750, 2.6060, 3.1720, 3.6470, 4.4020, 4.9750, 5.4060, 5.7160, 5.9120, 5.9970, 5.9490, 5.7570, 5.4120, 4.9430, 4.3810, 3.7430, 3.0590, 2.3450, 1.6300, 0.9470, 0.3560, 0.0000 21970 DATA 0.0000, 1.1240, 1.3560, 1.7020, 2.3240, 3.2450, 3.9590, 4.5550, 5.5040, 6.2230, 6.7640, 7.1520, 7.3960, 7.4980, 7.4270, 7.1680, 6.7200, 6.1180, 5.4030, 4.6000, 3.7440, 2.8580, 1.9770, 1.1440, 0.4280, 0.0000 21980 DATA 0.0000, 1.3370, 1.6080, 2.0140, 2.7510, 3.8660, 4.7330, 5.4570, 6.6060, 7.4760, 8.1290, 8.5950, 8.8860, 8.9990, 8.9010, 8.5680, 8.0080, 7.2670, 6.3950, 5.4260, 4.3960, 3.3380, 2.2950, 1.3190, 0.4900, 0.0000 21990 DATA 0.0000, 1.5220, 1.8380, 2.3010, 3.1540, 4.4720, 5.4980, 6.3520, 7.7000, 8.7200, 9.4870, 10.0360, 10.3750, 10.4990, 10.3660, 9.9520, 9.2770, 8.3900, 7.3600, 6.2240, 5.0240, 3.8000, 2.5980, 1.4840, 0.5460, 0.0000 22000 DATA 0.0000, 0.4610, 0.5540, 0.6930, 0.9180, 1.2570, 1.5240, 1.7520, 2.1190, 2.4010, 2.6180, 2.7820, 2.8990, 2.9710, 3.0000, 2.9850, 2.9250, 2.8150, 2.6110, 2.3160, 1.9530, 1.5430, 1.1070, 0.6650, 0.2620, 0.0000 22010 DATA 0.0000, 0.6100, 0.7350, 0.9190, 1.2190, 1.6730, 2.0310, 2.3350, 2.8260, 3.2010, 3.4900, 3.7090, 3.8650, 3.9620, 4.0000, 3.9780, 3.8960, 3.7400, 3.4590, 3.0620, 2.5740, 2.0270, 1.4470, 0.8640, 0.3380, 0.0000 22020 DATA 0.0000, 0.6870, 0.8240, 1.0300, 1.3680, 1.8800, 2.2830, 2.6260, 3.1780, 3.6010, 3.9270, 4.1730, 4.3480, 4.4570, 4.4990, 4.4750, 4.3810, 4.2040, 3.8820, 3.4280, 2.8770, 2.2630, 1.6110, 0.9610, 0.3740, 0.0000 22030 DATA 0.0000, 0.7590, 0.9130, 1.1410, 1.5160, 2.0870, 2.5360, 2.9170, 3.5300, 4.0010, 4.3630, 4.6360, 4.8320, 4.9530, 5.0000, 4.9710, 4.8650, 4.6650, 4.3020, 3.7870, 3.1760, 2.4940, 1.7730, 1.0540, 0.4080, 0.0000 22040 DATA 0.0000, 0.9060, 1.0870, 1.3580, 1.8080, 2.4960, 3.0370, 3.4960, 4.2340, 4.8010, 5.2380, 5.5680, 5.8030, 5.9470, 6.0000, 5.9650, 5.8360, 5.5880, 5.1390, 4.5150, 3.7670, 2.9440, 2.0830, 1.2340, 0.4740, 0.0000 22050 DATA 0.0000, 1.1220, 1.3430, 1.6750, 2.2350, 3.1000, 3.7810, 4.3580, 5.2860, 5.9950, 6.5430, 6.9560, 7.2500, 7.4300, 7.4950, 7.4500, 7.2830, 6.9590, 6.3720, 5.5760, 4.6320, 3.5980, 2.5300, 1.4890, 0.5660, 0.0000 22060 DATA 0.0000, 1.3230, 1.5710, 1.9520, 2.6460, 3.6900, 4.5130, 5.2100, 6.3330, 7.1880, 7.8480, 8.3460, 8.7010, 8.9180, 8.9980, 8.9420, 8.7330, 8.3230, 7.5800, 6.5970, 5.4510, 4.2060, 2.9340, 1.7140, 0.6460, 0.0000 22070 DATA 0.0000, 1.5250, 1.8040, 2.2400, 3.0450, 4.2690, 5.2330, 6.0520, 7.3690, 8.3760, 9.1530, 9.7380, 10.1540, 10.4070, 10.5000, 10.4340, 10.1860, 9.6920, 8.7930, 7.6100, 6.2510, 4.7960, 3.3240, 1.9240, 0.7170, 0.0000 22080 DATA 0.0000, 0.4879, 0.5847, 0.7351, 0.9888, 1.3236, 1.5808, 1.7909, 2.1262, 2.3856, 2.5886, 2.7464, 2.8649, 2.9451, 2.9902, 2.9985, 2.9686, 2.8954, 2.7713, 2.5854, 2.3063, 1.9056, 1.4274, 0.8994, 0.3585, 0.0000 22090 DATA 0.0000, 0.6462, 0.7740, 0.9739, 1.3118, 1.7595, 2.1036, 2.3844, 2.8325, 3.1791, 3.4503, 3.6611, 3.8196, 3.9267, 3.9869, 3.9980, 3.9579, 3.8592, 3.6917, 3.4395, 3.0581, 2.5134, 1.8738, 1.1706, 0.4637, 0.0000 22100 DATA 0.0000, 0.7240, 0.8669, 1.0915, 1.4715, 1.9759, 2.3637, 2.6800, 3.1848, 3.5752, 3.8807, 4.1182, 4.2967, 4.4174, 4.4853, 4.4977, 4.4525, 4.3410, 4.1514, 3.8652, 3.4308, 2.8123, 2.0917, 1.3013, 0.5139, 0.0000 22110 DATA 0.0000, 0.8008, 0.9586, 1.2078, 1.6297, 2.1911, 2.6229, 2.9748, 3.5365, 3.9709, 4.3108, 4.5750, 4.7737, 4.9081, 4.9837, 4.9975, 4.9471, 4.8227, 4.6109, 4.2901, 3.8013, 3.1081, 2.3061, 1.4288, 0.5628, 0.0000 22120 DATA 0.0000, 0.9507, 1.1374, 1.4354, 1.9412, 2.6173, 3.1376, 3.5615, 4.2377, 4.7605, 5.1696, 5.4876, 5.7269, 5.8889, 5.9802, 5.9971, 5.9365, 5.7860, 5.5290, 5.1373, 4.5356, 3.6902, 2.7246, 1.6744, 0.6565, 0.0000 22130 DATA 0.0000, 1.1651, 1.3925, 1.7625, 2.3940, 3.2443, 3.8994, 4.4325, 5.2826, 5.9396, 6.4537, 6.8536, 7.1547, 7.3588, 7.4747, 7.4966, 7.4209, 7.2307, 6.9048, 6.4020, 5.6210, 4.5399, 3.3270, 2.0209, 0.7880, 0.0000 22140 DATA 0.0000, 1.3646, 1.6289, 2.0689, 2.8258, 3.8530, 4.6458, 5.2904, 6.3174, 7.1106, 7.7315, 8.2148, 8.5791, 8.8268, 8.9683, 8.9963, 8.9060, 8.6761, 8.2797, 7.6591, 6.6858, 5.3628, 3.8991, 2.3435, 0.9097, 0.0000 22150 DATA 0.0000, 1.5470, 1.8438, 2.3506, 3.2327, 4.4397, 5.3736, 6.1323, 7.3397, 8.2720, 9.0017, 9.5703, 9.9994, 10.2922, 10.4609, 10.4966, 10.3924, 10.1232, 9.6546, 8.9093, 7.7296, 6.1596, 4.4414, 2.6443, 1.0229, 0.0000 22160 'NACA CAMBER LINES AND DERIVATIVES 22170 DATA 0.00000, 0.46000, 0.64100, 0.96400, 1.64100, 2.69300, 3.50700, 4.16100, 5.12400, 5.74700, 6.11400, 6.27700, 6.27300, 6.13000, 5.87100, 5.51600, 5.08100, 4.58100, 4.03200, 3.44500, 2.83600, 2.21700, 1.60400, 1.01300, 0.46700, 0.00000 22180 DATA 0.00000, 0.75867, 0.69212, 0.60715, 0.48892, 0.36561, 0.29028, 0.23515, 0.15508, 0.09693, 0.05156, 0.01482, -.01554, -.04086, -.06201, -.07958, -.09395, -.10539, -.11406, -.12003, -.12329, -.12371, -.12099, -.11455, -.10301, -.07958 22190 DATA 0.00000, 0.44000, 0.61600, 0.93300, 1.60800, 2.68900, 3.55100, 4.25300, 5.26100, 5.90500, 6.28200, 6.44900, 6.44300, 6.29600, 6.02900, 5.66400, 5.21800, 4.70600, 4.14200, 3.54100, 2.91600, 2.28100, 1.65200, 1.04500, 0.48200, 0.00000 22200 DATA 0.00000, 0.73441, 0.67479, 0.59896, 0.49366, 0.38235, 0.31067, 0.25057, 0.16087, 0.09981, 0.05281, 0.01498, -.01617, -.04210, -.06373, -.08168, -.09637, -.10806, -.11694, -.12307, -.12644, -.12693, -.12425, -.11781, -.10620, -.08258 22210 DATA 0.00000, 0.41400, 0.58100, 0.88200, 1.53000, 2.58300, 3.44300, 4.16900, 5.31700, 6.11700, 6.57200, 6.77700, 6.78900, 6.64600, 6.37300, 5.99400, 5.52700, 4.98900, 4.39600, 3.76200, 3.10200, 2.43100, 1.76400, 1.11900, 0.51800, 0.00000 22220 DATA 0.00000, 0.69492, 0.64047, 0.57135, 0.47592, 0.37661, 0.31487, 0.26803, 0.19373, 0.12405, 0.06345, 0.02030, -.01418, -.04246, -.06588, -.08522, -.10101, -.11359, -.12317, -.12985, -.13363, -.13440, -.13186, -.12541, -.11361, -.08941 22230 DATA 0.00000, 0.38900, 0.54600, 0.83200, 1.44800, 2.45800, 3.29300, 4.00800, 5.17200, 6.05200, 6.68500, 7.07200, 7.17500, 7.07400, 6.81600, 6.43300, 5.94900, 5.38300, 4.75300, 4.07600, 3.36800, 2.64500, 1.92400, 1.22400, 0.57000, 0.00000 22240 DATA 0.00000, 0.65536, 0.60524, 0.54158, 0.45399, 0.36344, 0.30780, 0.26621, 0.20246, 0.15068, 0.10278, 0.04833, -.00205, -.03710, -.06492, -.08746, -.10567, -.12014, -.13119, -.13901, -.14365, -.14500, -.14279, -.13638, -.12430, -.09907 22250 DATA 0.00000, 0.36600, 0.51400, 0.78400, 1.36700, 2.33000, 3.13100, 3.82400, 4.96800, 5.86200, 6.54600, 7.03900, 7.34300, 7.43900, 7.27500, 6.92900, 6.44900, 5.86400, 5.19900, 4.47500, 3.70900, 2.92200, 2.13200, 1.36100, 0.63600, 0.00000 22260 DATA 0.00000, 0.61759, 0.57105, 0.51210, 0.43106, 0.34764, 0.29671, 0.25892, 0.20185, 0.15682, 0.11733, 0.07988, 0.04136, -.00721, -.05321, -.08380, -.10734, -.12567, -.13962, -.14963, -.15589, -.15837, -.15683, -.15062, -.13816, -.11138 22270 DATA 0.00000, 0.34500, 0.48500, 0.73500, 1.29500, 2.20500, 2.97000, 3.63000, 4.74000, 5.62000, 6.31000, 6.84000, 7.21500, 7.43000, 7.49000, 7.35000, 6.96500, 6.40500, 5.72500, 4.95500, 4.13000, 3.26500, 2.39500, 1.53500, 0.72000, 0.00000 22280 DATA 0.00000, 0.58195, 0.53855, 0.48360, 0.40815, 0.33070, 0.28365, 0.24890, 0.19690, 0.15650, 0.12180, 0.09000, 0.05930, 0.02800, -.00630, -.05305, -.09765, -.12550, -.14570, -.16015, -.16960, -.17435, -.17415, -.16850, -.15565, -.12660 22290 DATA 0.00000, 0.32500, 0.45500, 0.69500, 1.22000, 2.08000, 2.80500, 3.43500, 4.49500, 5.34500, 6.03500, 6.57000, 6.96500, 7.23500, 7.37000, 7.37000, 7.22000, 6.88000, 6.27500, 5.50500, 4.63000, 3.69500, 2.72000, 1.75500, 0.82500, 0.00000 22300 DATA 0.00000, 0.54825, 0.50760, 0.45615, 0.38555, 0.31325, 0.26950, 0.23730, 0.18935, 0.15210, 0.12125, 0.09310, 0.06660, 0.04060, 0.01405, -.01435, -.04700, -.09470, -.14015, -.16595, -.18270, -.19225, -.19515, -.19095, -.17790, -.14550 22310 DATA 0.00000, 0.30500, 0.42500, 0.65500, 1.16000, 1.95500, 2.64500, 3.24000, 4.24500, 5.06000, 5.71500, 6.24000, 6.63500, 6.92500, 7.09500, 7.15500, 7.09000, 6.90000, 6.56500, 6.03000, 5.20500, 4.21500, 3.14000, 2.03500, 0.96500, 0.00000 22320 DATA 0.00000, 0.51620, 0.47795, 0.42960, 0.36325, 0.29545, 0.25450, 0.22445, 0.17995, 0.14595, 0.11740, 0.09200, 0.06840, 0.04570, 0.02315, 0.00000, -.02455, -.05185, -.08475, -.13650, -.18510, -.20855, -.21955, -.21960, -.20725, -.16985 22330 DATA 0.00000, 0.28700, 0.40400, 0.61600, 1.07700, 1.84100, 2.48300, 3.04300, 3.98500, 4.74800, 5.36700, 5.86300, 6.24800, 6.52800, 6.70900, 6.79000, 6.77000, 6.64400, 6.40500, 6.03700, 5.51400, 4.77100, 3.68300, 2.43500, 1.16300, 0.00000 22340 DATA 0.00000, 0.48535, 0.44925, 0.40359, 0.34104, 0.27718, 0.23868, 0.21050, 0.16892, 0.13734, 0.11101, 0.08775, 0.06634, 0.04601, 0.02613, 0.00620, -.01433, -.03611, -.06010, -.08790, -.12311, -.18412, -.23921, -.25583, -.24904, -.20385 22350 DATA 0.00000, 0.26900, 0.37900, 0.57700, 1.00800, 1.72000, 2.31600, 2.83500, 3.70700, 4.41000, 4.98000, 5.43500, 5.78700, 6.04500, 6.21200, 6.29000, 6.27900, 6.17800, 5.98100, 5.68100, 5.26500, 4.71400, 3.98700, 2.98400, 1.50300, 0.00000 22360 DATA 0.00000, 0.45482, 0.42064, 0.37740, 0.31821, 0.25786, 0.22153, 0.19500, 0.15595, 0.12644, 0.10196, 0.08047, 0.06084, 0.04234, 0.02447, 0.00678, -.01111, -.02965, -.04938, -.07103, -.09583, -.12605, -.16727, -.25204, -.31463, -.26086 22370 DATA 0.00000, 0.25000, 0.35000, 0.53500, 0.93000, 1.58000, 2.12000, 2.58500, 3.36500, 3.98000, 4.47500, 4.86000, 5.15000, 5.35500, 5.47500, 5.51500, 5.47500, 5.35500, 5.15000, 4.86000, 4.47500, 3.98000, 3.36500, 2.58500, 1.58000, 0.00000 22380 DATA 0.00000, 0.42120, 0.38875, 0.34770, 0.29155, 0.23430, 0.19995, 0.17485, 0.13805, 0.11030, 0.08745, 0.06745, 0.04925, 0.03225, 0.01595, 0.00000, -.01595, -.03225, -.04925, -.06745, -.08745, -.11030, -.13805, -.17485, -.23430, 0.00000 22390 ' 22400 '----------------------------------------------------------------- 22410 'MONOTONE SPLINE SUBROUTINE 22420 'HOST MUST DIMENSION ENDSLP(2), DYDX(2) 22430 'IF ONLY ONE POINT IS IN SET, RETURN THAT VALUE 22440 IF N = 1 THEN 22450 XD = XI(1) 22460 YD = YI(1) 22470 GOTO 23030 22480 END IF 22490 'FIND POINTS IN SET THAT BOUND XD VIA BINARY SEARCH 22500 LOWLIM = 1: UPPLIM = N 22510 WHILE UPPLIM - LOWLIM > 1 22520 TSTLCN = (UPPLIM + LOWLIM) \ 2 22530 IF XI(TSTLCN) > XD THEN 22540 UPPLIM = TSTLCN 22550 ELSE 22560 LOWLIM = TSTLCN 22570 END IF 22580 IF XI(LOWLIM) = XD THEN YD = YI(LOWLIM): GOTO 23030 22590 WEND 22600 IF LOWLIM = N THEN LOWLIM = N - 1 22610 UPPLIM = LOWLIM + 1 22620 'CALC LINEAR INTERPOLANT 22630 LNSLP = (YI(UPPLIM) - YI(LOWLIM)) / (XI(UPPLIM) - XI(LOWLIM)) 22640 YLINR = LNSLP * (XD - XI(LOWLIM)) + YI(LOWLIM) 22650 'CALC END SLOPES 22660 PTBFR = LOWLIM 22670 WHCHEND = 1 22680 FOR SGMN = 1 TO 2 22690 IF PTBFR > 1 AND PTBFR < N - 1 THEN 22700 PNT1 = PTBFR - 1 22710 ELSEIF PTBFR > N - 2 THEN 22720 PNT1 = N - 2 22730 ELSE 22740 PNT1 = 1 22750 WHCHEND = 0 22760 END IF 22770 PNT2 = PNT1 + 1 22780 PNT3 = PNT1 + 2 22790 DELTX1 = XI(PNT1) - XI(PNT2) 22800 DELTX2 = XI(PNT3) - XI(PNT2) 22810 DELTY1 = YI(PNT1) - YI(PNT2) 22820 DELTY2 = YI(PNT3) - YI(PNT2) 22830 KNST = (DELTY1 * DELTX2 / DELTX1 - DELTY2 * DELTX1 / DELTX2) / (DELTX2 - DELTX1) 22840 CFCNT = (DELTY1 / DELTX1 - DELTY2 / DELTX2) / (DELTX1 - DELTX2) 22850 ENDSLP(SGMN) = KNST - 2 * CFCNT * XI(PNT2) + 2 * CFCNT * XI(PTBFR) 22860 PTBFR = PTBFR + 1 22870 IF WHCHEND > 0 THEN PNT1 = PNT1 + 1 22880 NEXT SGMN 22890 'FIND DIST END SLOPES PUT POINT ABOVE LINEAR 22900 FOR SGMN = 1 TO 2 22910 PTBFR = LOWLIM + SGMN - 1 22920 DYDX(SGMN) = ENDSLP(SGMN) * (XD - XI(PTBFR)) + YI(PTBFR) - YLINR 22930 NEXT SGMN 22940 'TEST FOR ABOVE, BELOW OR ON LINEAR AND PRODUCE YD 22950 POSN = DYDX(1) * DYDX(2) 22960 IF POSN = 0 THEN 22970 YD = YLINR 22980 ELSEIF POSN > 0 THEN 22990 YD = YLINR + POSN / (DYDX(1) + DYDX(2)) 23000 ELSE 23010 YD = YLINR + (POSN * (2 * XD - XI(LOWLIM) - XI(UPPLIM))) / ((DYDX(1) - DYDX(2)) * (XI(UPPLIM) - XI(LOWLIM))) 23020 END IF 23030 RETURN 23040 '----------------------------------------------------------------- 23050 'SUBROUTINE TO FILL IN LOWER SURFACE COVE 23060 LOCATE 11, 30: PRINT "Filling Lower Cove" 23070 STP = .01 23080 N = NP 23090 FOR I = 1 TO N 23100 XI(I) = XL(I) 23110 YI(I) = YL(I) 23120 NEXT I 23130 XD = PP / 10 + STP * 5 23140 GOSUB 22440 23150 XP = XD 23160 YP = YD 23170 XD = XD + .00001 23180 GOSUB 22440 23190 LSLP = (YD - YP) / (XD - XP) 23200 SLP2TE = (YP - YL(N)) / (XP - XL(N)) 23210 SLPDIF = ABS(LSLP - SLP2TE) 23220 IF SLPDIF > STOL AND LSLP < SLP2TE THEN 23230 XD = XP + STP 23240 IF XP < XL(N) THEN GOTO 23140 23250 ELSEIF SLPDIF > STOL AND LSLP > SLP2TE THEN 23260 XD = XP - STP 23270 STP = STP * .5 23280 IF STP > .000001 THEN GOTO 23140 23290 END IF 23300 FOR I = 1 TO N 23310 IF XL(I) > XP THEN 23320 YL(I) = (XL(I) - XP) / (XL(N) - XP) * (YL(N) - YP) + YP 23330 END IF 23340 NEXT I 23350 LOCATE 11, 30: PRINT " " 23360 RETURN 23370 '----------------------------------------------------------------- 23380 ' TRANSITION AND ROUGHNESS SUMMARY 23390 PRINT 23400 PRINT " Available Transition Options" 23410 PRINT " 1) Transition At Laminar Separation" 23420 PRINT " 2) Fixed Transition" 23430 PRINT " 3) Natural Transtion" 23440 PRINT " 4) Transition With Roughness Factor" 23450 PRINT 23460 PRINT " Available Roughness Levels Are 0 To 6" 23470 PRINT " 0 = Clean Surface" 23480 PRINT " 2 = Dirty Surface" 23490 PRINT " 4 = Excessively Dirty Surface" 23500 PRINT " 6 = Severely Wavy Surface" 23510 PRINT 23520 RETURN 23530 '----------------------------------------------------------------- 23540 'SET INPUT LIMITS SUBROUTINE 23550 PRINT 23560 PRINT " Input Point Limits Are " 23570 PRINT " 1) Number Of Computational Points ="; NP 23580 PRINT " 2) Number Of Points On The Airfoil ="; MPTS 23590 PRINT 23600 INPUT " Input Limit To Be Changed (0=None)[0]"; LCH 23610 ON LCH + 1 GOTO 23690, 23630, 23660 23620 GOTO 23600 23630 PRINT 23640 INPUT " Enter New Number Of Computational Points"; NP 23650 GOTO 23590 23660 PRINT 23670 INPUT " Enter New Limit On Number Of Points On The Airfoil ="; MPTS 23680 GOTO 23590 23690 PRINT 23700 PRINT " Possible Monitor Types Are:" 23710 PRINT " 1) CGA (RGB)" 23720 PRINT " 2) EGA With 64K Of Memory" 23730 PRINT " 3) EGA With More Than 64K Of Memory" 23740 PRINT " 4) VGA" 23750 PRINT 23760 INPUT " Your Choice [3 or 4]:"; DTP 23770 IF DTP = 0 THEN DTP = 3 23780 IF DTP = 1 THEN QM = 320: RM = 100: NCLR = 3 23790 IF DTP = 2 THEN NCLR = 3 23800 CLS : PRINT 23810 RETURN ------------------------------------------------------------------- David Lednicer | "Applied Computational Fluid Dynamics" Analytical Methods, Inc. | email: dave@amiwest.com 2133 152nd Ave NE | tel: (206) 643-9090 Redmond, WA 98052 USA | fax: (206) 746-1299