Language: GWBasic.
Objective: This program is part of a Quantitative Metallography Package. Given a set of data about the number of intercepts between a test line and grain boundaries of two phases in a two-phase microstructure, it makes the necessary calculations requerired for the determination of its grain sizes and other topological parameters like mean free path, contiguity volume, and so on. Of course, it is included a simple statistical analysis of the results.
***** Begin of Program Listing *****
10 REM
12 REM *** QUANTITATIVE METALLOGRAPHY PACKAGE
14 REM ***
16 REM *** Calculation of the Topological Parameters of a Two-Phase
18 REM *** Microstructure, Including the Grain Size of Both Constituents.
20 REM ***
22 REM *** References:
24 REM ***
26 REM *** - HORNBOGEN, E. et alii. Zeitschrift fuer Metallkunde,
28 REM *** Januar 1980, 27-31.
30 REM ***
32 REM *** - CRIBB, W.R. Scripta Metallurgica, 1978, 892-898.
34 REM ***
36 REM *** - MAID, O. et alii. Stahl und Eisen, 18 April 1988,
37 REM *** 355-364.
38 REM ***
40 REM *** - UNDERWOOD, N. Quantitative Stereology. Addison-
42 REM *** Wesley, Reading, 1970.
44 REM ***
46 REM *** - UGGOWITZER, P. et alii. Zeitschrift fuer
48 REM *** Metallkunde, Mai 1977, 277-285.
50 REM ***
52 REM ***
54 REM ***
56 REM *** Authors: Antonio Gorni & Osvaldo Branchini
57 REM *** COSIPA - I.ME - C.P. 11
58 REM *** 11573-900 Cubatao SP Brazil
59 REM ***
60 REM *** April 17, 1989
62 REM ***
100 SCREEN 1: SCREEN 0: KEY OFF: OPTION BASE 1: DIM NI(100, 3), DG(100, 8), NV(100, 8), VS(50): B$ = CHR$(7): ON ERROR GOTO 2040
110 FOR I = 1 TO 8: READ MS$(I): NEXT I
120 VIEW PRINT 1 TO 24: CLS : BF$ = "TOPOLOGICAL ANALYSIS OF TWO-PHASE MICROSTRUCTURES": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: PRINT : PRINT : LOCATE 5
130 LOCATE , 10: PRINT "<1> Data Input": PRINT
140 LOCATE , 10: PRINT "<2> Data Correction": PRINT
150 LOCATE , 10: PRINT "<3> Data Suppression": PRINT
160 LOCATE , 10: PRINT "<4> Data Output": PRINT
170 LOCATE , 10: PRINT "<5> Data Saving": PRINT
180 LOCATE , 10: PRINT "<6> Results Output"
190 PRINT : LOCATE , 10: PRINT "<7> End"
200 LOCATE 23: BF$ = "(c) 1989, by": PRINT TAB((40 - LEN(BF$)) / 2 + 1); BF$: LOCATE 24: BF$ = "ANTONIO GORNI & OSVALDO BRANCHINI": PRINT TAB((40 - LEN(BF$)) / 2 + 1); BF$;
210 LOCATE 20: LOCATE , 10: INPUT "Your Option"; RR
220 IF RR > 7 OR RR < 1 THEN PRINT B$: GOTO 120
230 ON RR GOTO 240, 640, 730, 830, 1210, 1330, 1830
240 CLS : BF$ = "DATA INPUT": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0
250 VIEW PRINT 4 TO 24: LOCATE 8, 13: PRINT "<1> New Data": LOCATE 13, 13: PRINT "<2> More Data": LOCATE 22, 13: INPUT "Your Choice"; RF: IF RF < 1 OR RF > 2 THEN PRINT B$: GOTO 250
260 R$ = ""
270 IF FS <> 0 AND RF = 1 THEN CLS : LOCATE 8: BF$ = "DATA NOT SAVED YET!": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 31, 0: PRINT B$; BF$: COLOR 7, 0 ELSE 290
280 LOCATE 20: INPUT "Do You Really Want to Enter New Data (Y/N)"; R$: IF R$ <> "Y" AND R$ <> "N" THEN PRINT B$: GOTO 270
290 IF R$ = "N" THEN 120
300 IF RF = 1 THEN NP = 0: FS = 0: AQ$ = ""
310 IF RF = 2 THEN FS = -1
320 VIEW PRINT 1 TO 24: CLS : BF$ = "INPUT OPTION": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0
330 LOCATE 8, 14: PRINT "<1> Keyboard": LOCATE 13, 14: PRINT "<2> Disk": LOCATE 20, 14: INPUT "Your Choice"; RE: IF RE < 1 OR RE > 2 THEN PRINT B$: GOTO 320
340 ON RE GOTO 350, 550
350 CLS : BF$ = "INPUT VIA KEYBOARD": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: VIEW PRINT 2 TO 24: LOCATE 7: FS = -1
360 IF RF = 2 THEN PRINT "Length of Line Test: "; LT; " microns": PRINT : PRINT "Magnification: "; M; "x": PRINT : PRINT "Volumetric Fraction of Second Phase [Fv], (%): "; VV * 100; "%"
365 PRINT : PRINT "Statistical Percentual Error Associated with Fv: "; PE; "%": GOTO 410
370 INPUT "Length of Test Line (microns)"; LT
380 PRINT : INPUT "Magnification (x)"; M
390 PRINT : INPUT "Volumetric Fraction of Second Phase [Fv], (%)"; VV: VV = VV / 100
400 PRINT : INPUT "Statistical Percentual Error Associated with Fv"; PE
410 PRINT : PRINT
420 PRINT "Now Enter the Number of Intercepts;"; : PRINT "Enter END to Finish."
430 NP = NP + 1: PRINT : PRINT "----------------------------------------"
440 PRINT "A-A ("; NP; ")? ";
450 INPUT "", B1$: IF B1$ = "END" THEN NP = NP - 1: GOTO 120
460 PRINT "B-B ("; NP; ")? ";
470 INPUT "", B2$: IF B2$ = "END" THEN NP = NP - 1: GOTO 120
480 PRINT "A-B ("; NP; ")? ";
490 INPUT "", B3$: IF B3$ = "END" THEN NP = NP - 1: GOTO 120
500 NI(NP, 1) = VAL(B1$): NI(NP, 2) = VAL(B2$): NI(NP, 3) = VAL(B3$)
510 N1 = (2 * NI(NP, 1) + NI(NP, 3)) / 2: N2 = (2 * NI(NP, 2) + NI(NP, 3)) / 2: DG(NP, 1) = ((1 - VV) * LT) / (N1 * M): DG(NP, 2) = (VV * LT) / (N2 * M)
520 DG(NP, 3) = 4 * NI(NP, 1) / (4 * NI(NP, 1) + 2 * NI(NP, 3)): DG(NP, 4) = 4 * NI(NP, 2) / (4 * NI(NP, 2) + 2 * NI(NP, 3))
530 DG(NP, 5) = DG(NP, 1) / (1 - DG(NP, 3)): DG(NP, 6) = DG(NP, 2) / (1 - DG(NP, 4)): DG(NP, 7) = NI(NP, 2) / NI(NP, 1): DG(NP, 8) = NI(NP, 3) / NI(NP, 1)
540 GOTO 430
550 CLS : BF$ = "INPUT VIA DISK": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0
560 VIEW PRINT 2 TO 24: LOCATE 10: PRINT "Input File (? to List Directory)?": PRINT : INPUT "", AQ$
570 IF AQ$ = "?" THEN CLS : LOCATE 6: INPUT "Directory"; DD$: PRINT : FILES DD$ + "*.TGB": PRINT : INPUT "Press to Continue...", R$: CLS : GOTO 560
580 AQ$ = AQ$ + ".TGB": LOCATE 20: COLOR 31, 0: PRINT "READING "; AQ$: COLOR 7, 0
590 OPEN "I", #1, AQ$: INPUT #1, NR: INPUT #1, LT: INPUT #1, M: INPUT #1, VV: INPUT #1, PE: FOR I = NP + 1 TO NR + NP: FOR J = 1 TO 3: INPUT #1, NI(I, J): NEXT J, I
600 FOR I = NP + 1 TO NP + NR: N1 = (2 * NI(I, 1) + NI(I, 3)) / 2: N2 = (2 * NI(I, 2) + NI(I, 3)) / 2: DG(I, 1) = ((1 - VV) * LT) / (N1 * M): DG(I, 2) = (VV * LT) / (N2 * M)
610 DG(I, 3) = 4 * NI(I, 1) / (4 * NI(I, 1) + 2 * NI(I, 3)): DG(I, 4) = 4 * NI(I, 2) / (4 * NI(I, 2) + 2 * NI(I, 3))
620 DG(I, 5) = DG(I, 1) / (1 - DG(I, 3)): DG(I, 6) = DG(I, 2) / (1 - DG(I, 4)): DG(I, 7) = NI(I, 2) / NI(I, 1): DG(I, 8) = NI(I, 3) / NI(I, 1): NEXT I
630 CLOSE #1: NP = NP + NR: GOTO 120
640 CLS : BF$ = "DATA CORRECTION": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: PRINT : PRINT
650 VIEW PRINT 2 TO 24: LOCATE 6: PRINT "Length of Test Line: "; LT; " microns": PRINT : PRINT "Magnification: "; M; "x": PRINT : PRINT "Volumetric Fraction of Second Phase [Fv]: "; VV * 100; "%"
660 PRINT : PRINT "----------------------------------------": INPUT "Index of the Point to be Corrected (END to finish)"; BF$: IF BF$ = "END" THEN FS = -1: GOTO 120
670 IC = VAL(BF$): PRINT : PRINT "A-A="; : PRINT " "; NI(IC, 1); TAB(20); : INPUT ""; NI(IC, 1)
680 PRINT "B-B="; : PRINT " "; NI(IC, 2); TAB(20); : INPUT ""; NI(IC, 2)
690 PRINT "A-B="; : PRINT " "; NI(IC, 3); TAB(20); : INPUT ""; NI(IC, 3)
700 N1 = (2 * NI(IC, 1) + NI(IC, 3)) / 2: N2 = (2 * NI(IC, 2) + NI(IC, 3)) / 2: DG(IC, 1) = ((1 - VV) * LT) / (N1 * M): DG(IC, 2) = (VV * LT) / (N2 * M)
710 DG(IC, 3) = 4 * NI(IC, 1) / (4 * NI(IC, 1) + 2 * NI(IC, 3)): DG(IC, 4) = 4 * NI(IC, 2) / (4 * NI(IC, 2) + 2 * NI(IC, 3))
720 DG(IC, 5) = DG(IC, 1) / (1 - DG(IC, 3)): DG(IC, 6) = DG(IC, 2) / (1 - DG(IC, 4)): DG(IC, 7) = NI(IC, 2) / NI(IC, 1): DG(IC, 8) = NI(IC, 3) / NI(IC, 1): GOTO 660
730 CLS : BF$ = "DATA SUPPRESSION": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: LOCATE 10: VIEW PRINT 2 TO 24: ISA = 0
740 LOCATE 7: INPUT "Index of the Point to be Suppressed (END to finish)"; BF$: IF BF$ = "END" THEN 790
750 IC = VAL(BF$): PRINT : PRINT : PRINT NI(IC, 1); TAB(14); NI(IC, 2); TAB(28); NI(IC, 3): PRINT DG(IC, 1); TAB(14); DG(IC, 2)
760 LOCATE 14: PRINT B$; : INPUT "Confirm (Y/N)! ", BF$: IF BF$ = "N" THEN CLS : GOTO 740
770 IF BF$ <> "Y" THEN 760
780 CLS : ISA = ISA + 1: VS(ISA) = IC: GOTO 740
790 IF ISA = 0 THEN 120
800 LOCATE 16: COLOR 31, 0: PRINT "PROCEEDING SUPPRESSIONS...": COLOR 7, 0: FOR I = 1 TO ISA - 1: FOR J = I + 1 TO ISA: IF VS(J) > VS(I) THEN IA = VS(J): VS(J) = VS(I): VS(I) = IA
810 NEXT J, I: FS = -1
820 FOR J = 1 TO ISA: FOR I = VS(J) TO NP - 1: FOR K = 1 TO 3: NI(I, K) = NI(I + 1, K): NEXT K: FOR K = 1 TO 8: DG(I, K) = DG(I + 1, K): NEXT K: NEXT I: NP = NP - 1: NEXT J: CLS : GOTO 120
830 CLS : BF$ = "DATA OUTPUT": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: VIEW PRINT 2 TO 24: CL = 0
840 VIEW PRINT 2 TO 24: LOCATE 8, 13: PRINT "<1> Screen": LOCATE 13, 13: PRINT "<2> Printer": LOCATE 22, 13: INPUT "Your Choice"; RE: IF RE < 1 OR RE > 2 THEN PRINT B$: GOTO 840
850 CLS
860 IF RE = 2 THEN 2080
870 LOCATE 8: PRINT "Data were determined with:": PRINT : PRINT
880 PRINT "Length of Test Line: "; LT; " microns": PRINT
890 PRINT "Magnification: "; M; " x": PRINT
900 PRINT "Volumetric Fraction of Second Phase [Fv]: "; VV * 100; "%": PRINT
910 PRINT "Statistical Error Associated with Fv: "; PE; "%": LOCATE 22
920 INPUT "Press to Start Data Output.", BF$: CLS
930 FOR I = 1 TO NP
940 PRINT : PRINT : PRINT "Point #"; I: PRINT : PRINT "A-A = "; NI(I, 1); TAB(14); "B-B = "; NI(I, 2); TAB(28); "A-B = "; NI(I, 3): PRINT "TG ALPHA = "; DG(I, 1): PRINT "TG BETA = "; DG(I, 2): CL = CL + 1
950 IF CL >= 3 AND I < NP THEN PRINT : PRINT "Press to Continue... "; : CL = 0: INPUT "", R$: CLS
960 GOTO 970
970 NEXT
980 PRINT : INPUT "Press to Continue...", BF$
990 FOR NK = 1 TO 2
1000 CLS : LOCATE 12: PRINT "Crunching Numbers... Please Wait for a While!"
1010 FOR I = 1 TO 5: VM(I) = 0: VI(I) = 2000: NEXT I
1020 FOR I = 1 TO NP: IF DG(I, NK) > VM(5) THEN GOSUB 1050
1030 IF DG(I, NK) < VI(5) THEN GOSUB 1070
1040 NEXT I: GOTO 1090
1050 VM(5) = DG(I, NK): V1(5) = I: FOR K = 1 TO 4: FOR J = K + 1 TO 5: IF VM(J) > VM(K) THEN IA = VM(K): VM(K) = VM(J): VM(J) = IA: IA = V1(K): V1(K) = V1(J): V1(J) = IA
1060 NEXT J, K: RETURN
1070 VI(5) = DG(I, NK): V2(5) = I: FOR K = 1 TO 4: FOR J = K + 1 TO 5: IF VI(J) < VI(K) THEN IA = VI(K): VI(K) = VI(J): VI(J) = IA: IA = V2(K): V2(K) = V2(J): V2(J) = IA
1080 NEXT J, K: RETURN
1090 FOR I = 1 TO 5: IF VM(I) = 0 THEN VM(I) = -1
1100 IF VI(I) = 2000 THEN VI(I) = -1
1110 NEXT I
1120 BF$ = MS$(NK)
1130 CLS : PRINT : PRINT TAB((40 - LEN(BF$)) / 2 + 1); : PRINT BF$: LOCATE 8: PRINT "The 5 Lowest Points Are:": PRINT
1140 PRINT USING "###.#"; VI(1); : PRINT TAB(8); : PRINT USING "###.#"; VI(2); : PRINT TAB(16); : PRINT USING "###.#"; VI(3); : PRINT TAB(24); : PRINT USING "###.#"; VI(4); : PRINT TAB(32); : PRINT USING "###.#"; VI(5)
1150 PRINT "("; V2(1); ")"; TAB(8); "("; V2(2); ")"; TAB(16); "("; V2(3); ")"; TAB(24); "("; V2(4); ")"; TAB(32); "("; V2(5); ")": PRINT : PRINT : PRINT
1160 PRINT "The 5 Highest Points Are:": PRINT
1170 PRINT USING "###.#"; VM(1); : PRINT TAB(8); : PRINT USING "###.#"; VM(2); : PRINT TAB(16); : PRINT USING "###.#"; VM(3); : PRINT TAB(24); : PRINT USING "###.#"; VM(4); : PRINT TAB(32); : PRINT USING "###.#"; VM(5)
1180 PRINT "("; V1(1); ")"; TAB(8); "("; V1(2); ")"; TAB(16); "("; V1(3); ")"; TAB(24); "("; V1(4); ")"; TAB(32); "("; V1(5); ")"
1190 LOCATE 22: INPUT "Press to Continue...", BF$
1200 NEXT NK: GOTO 120
1210 CLS : BF$ = "DATA SAVING ON DISK": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: VIEW PRINT 2 TO 24
1220 IF AQ$ = "" THEN 1270
1230 LOCATE 10: PRINT "Current File is "; LEFT$(AQ$, LEN(AQ$) - 4)
1240 LOCATE 12: INPUT "Keep it (Y/N)"; R$: IF R$ <> "Y" AND R$ <> "N" THEN PRINT B$: GOTO 1240
1250 IF R$ = "Y" THEN 1300
1260 CLS
1270 LOCATE 10: PRINT "File Name (? for Directory Listing)? ": PRINT : INPUT "", AQ$
1280 IF AQ$ = "?" THEN CLS : LOCATE 6: INPUT "Directory"; DD$: PRINT : FILES DD$ + "*.TGB": PRINT : PRINT : INPUT "Press to Continue...", R$: CLS : GOTO 1270
1290 AQ$ = AQ$ + ".TGB"
1300 LOCATE 20: COLOR 31, 0: PRINT "SAVING IN "; AQ$: COLOR 7, 0
1310 OPEN "O", #1, AQ$: PRINT #1, NP: PRINT #1, LT: PRINT #1, M: PRINT #1, VV: PRINT #1, PE: FOR I = 1 TO NP: FOR J = 1 TO 3: PRINT #1, NI(I, J): NEXT J, I: CLOSE #1: FS = 0
1320 GOTO 120
1330 CLS : B2$ = "OUTPUT OF RESULTS": PRINT TAB((40 - LEN(B2$)) / 2 + 1); : COLOR 0, 7: PRINT B2$: COLOR 7, 0: VIEW PRINT 2 TO 24
1340 LOCATE 8: LOCATE , 14: PRINT "<1> Screen": LOCATE 14: LOCATE , 14: PRINT "<2> Printer": LOCATE 21: LOCATE , 14: INPUT "Your Choice"; RE: IF RE < 1 OR RE > 2 THEN PRINT B$: GOTO 1340
1350 FOR I = 1 TO NP: FOR J = 1 TO 8
1360 IF DG(I, J) >= 100 THEN NV(I, J) = DG(I, J): MASC$(J) = "###": GOTO 1390
1370 IF J = 3 OR J = 4 OR J = 7 OR J = 8 THEN NV(I, J) = DG(I, J): MASC$(J) = "#.##": GOTO 1390
1380 NV(I, J) = DG(I, J): MASC$(J) = "##.#"
1390 NEXT J, I
1400 IF RE = 2 THEN 2190
1410 FOR NK = 1 TO 8
1420 B1$ = MS$(NK): IF NK > 1 THEN 1500
1430 VIEW PRINT 1 TO 24: CLS : BF$ = "MEASURING CONDITIONS": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0
1440 LOCATE 6: PRINT "Number of Points: "; NP: PRINT : PRINT
1450 PRINT "Manigication: "; M; "x": PRINT : PRINT
1460 PRINT "Length of Test Line: "; LT; " microns": PRINT : PRINT
1470 PRINT "Volumetric Fraction of Second Phase [Fv]: "; VV * 100; "%": PRINT : PRINT
1480 PRINT "Statistical Error Associated with Fv: "; PE; "%"
1490 LOCATE 22: INPUT "Press to Continue...", BF$: CLS
1500 CL = 6: VIEW PRINT 1 TO 24: CLS : PRINT TAB((40 - LEN(B1$)) / 2 + 1); : COLOR 0, 7: PRINT B1$: COLOR 7, 0: VIEW PRINT 4 TO 24: LOCATE 6
1510 PRINT "Data Collected:"
1520 FOR I = 1 TO NP STEP 6: FOR J = 0 TO 5: IF I + J > NP THEN 1570
1530 PRINT USING MASC$(NK); NV(I + J, NK); : IF J < 5 THEN PRINT TAB(J * 6 + 7);
1540 NEXT J: PRINT : CL = CL + 1
1550 IF CL >= 22 AND I < NP - 5 THEN PRINT : INPUT "Press to Continue...", R$: CLS : PRINT : PRINT "Data Collected:"
1560 NEXT
1570 PRINT : PRINT
1580 INPUT "Press to Continue...", R$: CLS
1590 GOSUB 1870
1600 PRINT : BF$ = "=> Statistical Analysis <=": PRINT TAB((40 - LEN(BF$)) / 2 + 1); BF$: PRINT : LOCATE 10
1610 PRINT "Average = "; MD
1620 IF NK = 1 OR NK = 2 THEN TA(NK) = -10 - 6.64 * LOG(MD / 10000) / 2.30258409#: PRINT "ASTM Grain Size = "; : PRINT USING "##.##"; TA(NK): D(NK) = MD
1630 IF NK = 3 THEN VC = INT(MD * (1 - VV) * 100) / 100: PRINT "Contiguity Volume = "; VC
1640 IF NK = 4 THEN VC = INT(MD * VV * 100) / 100: PRINT "Contiguity Volume = "; VC
1650 PRINT "Standard Deviation = "; INT(DP * 100) / 100
1660 PRINT : PRINT "N(1%)= "; INT(NM(1) + .5); TAB(14); "N(3%) = "; INT(NM(3) + .5); TAB(28); "N(5%) = "; INT(NM(5) + .5): PRINT
1670 PRINT "Real Precision = "; INT(PRE * 100) / 100; " %"
1680 PRINT "Precision of the Mean = "; INT((MD * PRE / 100) * 100) / 100
1690 PB = MD * PRE / 100: PRINT "Mean Amplitude = "; INT(MD * 100) / 100; "+/-"; INT(PB * 100) / 100
1700 IF NK = 1 THEN P1 = PRE
1710 IF NK = 2 THEN P2 = PRE: P4 = PB
1720 LOCATE 22: INPUT "Press to Continue...", BF$
1730 NEXT NK
1740 VIEW PRINT 1 TO 24: CLS : COLOR 0, 7: PRINT "GENERAL PARAMETERS OF THE TWO-PHASE MICROSTRUCTURE": COLOR 7, 0: LOCATE 7
1750 PRINT "Global ASTM Grain Size: ": PRINT TA(1) * (1 - VV) + TA(2) * VV: PRINT : AX = VV / (1 - VV): P3 = PE * VV / 100: PA = P3 * 100 / (1 - VV): PX = (PA + PE) / 100 * AX
1760 PRINT "Volumetric Fraction Ratio between the Two Phases: ": PRINT INT(AX * 1000) / 1000; " +/- "; : PRINT INT(PX * 1000) / 1000: PRINT
1770 R1 = P1 * D(1) / 100: R2 = P2 * D(2) / 100: AX = (D(2) / D(1)) ^ 3: PX = SQR((3 * D(2) ^ 2 / D(1) ^ 3 * R2) ^ 2 + (3 * D(2) ^ 3 / D(1) ^ 4 * R1) ^ 2)
1780 PRINT "Grain Size Ratio between the Two Phases:": PRINT INT(AX * 1000) / 1000; " +/- "; INT(PX * 1000) / 1000: PRINT
1790 AX = .98 * D(2) * (.885 / SQR(VV) - 1): PX = SQR((.867 / SQR(VV) - .98) ^ 2 * P4 * P4 + (-.867 * D(2) / (2 * (VV) ^ 1.5)) ^ 2 * P3 * P3)
1800 PRINT "Spacing between the Grains of the Second Phase:": PRINT INT(AX * 1000) / 1000; " +/- "; INT(PX * 1000) / 1000
1810 LOCATE 22: INPUT "Press to Continue...", BF$
1820 GOTO 120
1830 CLS : BF$ = "END OF PROGRAM RUN ": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 0, 7: PRINT BF$: COLOR 7, 0: VIEW PRINT 2 TO 24: IF FS = 0 THEN 1860
1840 LOCATE 8: BF$ = "DATA NOT SAVED YET!": PRINT TAB((40 - LEN(BF$)) / 2 + 1); : COLOR 31, 0: PRINT B$; BF$: COLOR 7, 0: LOCATE 20: INPUT "Do Your Really Want to Quit (Y/N)"; R$: IF R$ <> "Y" AND R$ <> "N" THEN PRINT B$: GOTO 1840
1850 IF R$ = "N" THEN 120
1860 VIEW PRINT 1 TO 24: SCREEN 0: SCREEN 2: SCREEN 0: CLS : KEY ON: END
1870 REM SUB-ROTINA PARA CALCULAR MEDIA, DESVIO PADRAO E ERRO DA MEDIA
1880 HP = 0: TX = 0
1890 REM HP- SOMATORIA DE DG; TX- SOMATORIA DE DG^2; MD- MEDIA DE DG; DP- DESVIO PADRAO DE DG.
1900 FOR I = 1 TO NP
1910 HP = HP + DG(I, NK)
1920 TX = TX + (DG(I, NK) ^ 2)
1930 NEXT I
1940 MD = HP / NP
1950 DP = ((TX - (HP ^ 2 / NP)) / (NP - 1))
1960 DP = SQR(DP)
1970 IF MD = 0 THEN FOR KJ = 1 TO 5 STEP 2: NM(KJ) = 0: NEXT KJ: PRE = 0: RETURN
1980 IF NK = 1 OR NK = 2 OR NK = 5 OR NK = 6 THEN DP = DP + PE * MD * SQR(NP) / 200
1990 FOR KJ = 1 TO 5 STEP 2
2000 NM(KJ) = (200 * DP / (KJ * MD)) ^ 2
2010 NEXT KJ
2020 PRE = 200 * DP / MD / SQR(NP)
2030 RETURN
2040 CLS : LOCATE 12: COLOR 31, 0: IF ERR = 53 THEN PRINT "File Not Found!" ELSE PRINT B$; "ERROR #"; ERR; " IN LINE "; ERL; "!"
2050 COLOR 7, 0: LOCATE 22: INPUT "Pressione para continuar...", BF$: GOTO 120
2060 DATA "GRAIN SIZE, ALPHA PHASE","GRAIN SIZE, BETA PHASE","CONTIGUITY, ALPHA PHASE","CONTIGUITY, BETA PHASE"
2070 DATA "MEAN PATH, ALPHA PHASE","MEAN PATH, BETA PHASE","GRAIN SIZE DENSITY RATIO","GRAIN BOUNDARIES/PHASE BOUNDARIES RATIO"
2080 LOCATE 10: PRINT "Prepare Printer;": PRINT "Mark Start of Report.": PRINT : PRINT : PRINT
2090 PRINT "Identification Message to be Printed? ": PRINT : LINE INPUT "", BF$: LPRINT "COLLECTED DATA OF THE TWO-PHASE MICROSTRUCTURE - "; BF$: CL = 6: LPRINT DATE$, TIME$: LPRINT : LPRINT
2100 LPRINT "Length of the Test Line: "; LT; " microns"
2110 LPRINT "Magnification: "; M; " x"
2120 LPRINT "Volumetric Fraction of Second Phase [Fv]: "; VV * 100; "%"
2130 LPRINT "Statistical Error Associated with Fv: "; PE; "%"
2140 LPRINT : LPRINT
2150 FOR I = 1 TO NP
2160 LPRINT "#"; I; TAB(10); NI(I, 1); TAB(20); NI(I, 2); TAB(30); NI(I, 3): CL = CL + 1
2170 IF CL >= 57 THEN LPRINT CHR$(12): CL = 0
2180 NEXT: LPRINT CHR$(12): GOTO 120
2190 CLS : LOCATE 8: PRINT "Prepare Printer!": PRINT : PRINT "Now enter with the Identification Message "; : PRINT "to be Printed in the Report.": PRINT : LINE INPUT "", BF$:
2200 LPRINT "TOPOLOGICAL ANALYSIS OF TWO-PHASE MICROSTRUCTURES - "; BF$: LPRINT DATE$, TIME$: LPRINT : LPRINT
2210 FOR NK = 1 TO 8
2220 B1$ = MS$(NK): IF NK > 1 THEN 2300
2230 LPRINT "MEASURING CONDITIONS:": LPRINT
2240 LPRINT "Number of Points: "; NP
2250 LPRINT "Magnification: "; M; "x"
2260 LPRINT "Length of Test Line: "; LT; " microns"
2270 LPRINT "Volumetric Fraction of Second Phase [Fv]: "; VV * 100; "%"
2280 LPRINT "Statistical Error Associated with Fv: "; PE; "%"
2290 LPRINT : LPRINT : LPRINT
2300 LPRINT B1$: LPRINT : LPRINT
2310 LPRINT "Data Collected:"
2320 FOR I = 1 TO NP STEP 11: FOR J = 0 TO 10: IF I + J > NP THEN 2360
2330 LPRINT USING MASC$(NK); NV(I + J, NK); : IF J < 10 THEN LPRINT TAB(J * 6 + 7);
2340 NEXT J: LPRINT : CL = CL + 1
2350 NEXT
2360 LPRINT : LPRINT
2370 GOSUB 1870
2380 LPRINT : BF$ = "=> Statistical Analysis <=": LPRINT TAB((40 - LEN(BF$)) / 2 + 1); BF$: LPRINT : LOCATE 10
2390 LPRINT "Average = "; MD
2400 IF NK = 1 OR NK = 2 THEN TA(NK) = INT(((-10 - 6.64 * LOG(MD / 10000) / 2.30258409#) + .5) * 100) / 100: LPRINT "ASTM Grain Size = "; TA(NK): D(NK) = MD
2410 IF NK = 3 THEN VC = INT(MD * (1 - VV) * 100) / 100: LPRINT "Contiguity Volume = "; VC
2420 IF NK = 4 THEN VC = INT(MD * VV * 100) / 100: LPRINT "Contiguity Volume = "; VC
2430 LPRINT "Standard Deviation = "; INT(DP * 100) / 100
2440 LPRINT : LPRINT "N(1%)= "; INT(NM(1) + .5); TAB(14); "N(3%) = "; INT(NM(3) + .5); TAB(28); "N(5%) = "; INT(NM(5) + .5): LPRINT
2450 LPRINT "Real Precision = "; INT(PRE * 100) / 100; " %"
2460 LPRINT "Precision of the Mean = "; INT((MD * PRE / 100) * 100) / 100
2470 PB = MD * PRE / 100: LPRINT "Mean Amplitude = "; INT(MD * 100) / 100; " +/- "; INT(PB * 100) / 100
2480 IF NK = 1 THEN P1 = PRE
2490 IF NK = 2 THEN P2 = PRE: P4 = PB
2500 LPRINT : LPRINT : LPRINT
2510 NEXT NK
2520 LPRINT "GENERAL PARAMETERS OF THE TWO-PHASE MICROSTRUCTURE ": LPRINT : LPRINT
2530 LPRINT "Global ASTM Grain Size: "; TA(1) * (1 - VV) + TA(2) * VV: LPRINT : AX = VV / (1 - VV): P3 = PE * VV / 100: PA = P3 * 100 / (1 - VV): PX = (PA + PE) / 100 * AX
2540 LPRINT "Volumetric Fraction Ratio between the Two Phases: "; : LPRINT USING "##.##"; AX; : LPRINT " +/- "; : LPRINT USING "##.##"; PX: LPRINT
2550 R1 = P1 * D(1) / 100: R2 = P2 * D(2) / 100: AX = (D(2) / D(1)) ^ 3: PX = SQR((3 * D(2) ^ 2 / D(1) ^ 3 * R2) ^ 2 + (3 * D(2) ^ 3 / D(1) ^ 4 * R1) ^ 2)
2560 LPRINT "Grain Size Ratio between the Two Phases: "; : LPRINT USING "##.##"; AX; : LPRINT " +/- "; : LPRINT USING "##.##"; PX: LPRINT
2570 AX = .98 * D(2) * (.885 / SQR(VV) - 1): PX = SQR((.867 / SQR(VV) - .98) ^ 2 * P4 * P4 + (-.867 * D(2) / (2 * (VV) ^ 1.5)) ^ 2 * P3 * P3)
2580 LPRINT "Spacing between the Second Phase Grains: "; : LPRINT USING "###.##"; AX; : LPRINT " +/- "; : LPRINT USING "###.##"; PX
2590 LPRINT CHR$(12): GOTO 120
***** End of Program Listing ******

Return to the Software Menu.
![]() |
Last Update: 25 June 1996 | |
| © Antonio Augusto Gorni |