'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» 'º TRIM-90 -- Ions in Solids (2-Dimensional, 3 Layers, 4 Elements) º 'º º 'º (C) 1985,1986,1987,1988,1989,1990,1991 by J.P.Biersack and J.F.Ziegler º 'º º 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº 'º Calculation proceeds as follows: º 'º * Have Ion Energy (E), and Position (X,Y,Z) with X being Depth. º 'º * Calculate Ion jump to next collision, the free-flight-path (FFPATH). º 'º * Calculate Electronic energy loss over FFPATH. Include straggling. º 'º * Calculate new energy, E, and position, XYZ. º 'º * Calculate collision, with new Ion trajectory (PHI1 and PSI1). º 'º From collision, also get Recoil energy (DEN), trajectory (PHI2, PSI2)º 'º * Determine new trajectory Directional Cosines (COSX,COSY,COSZ). º 'º * Calculate Recoil Cascade using Kinchin-Pease or Monte-Carlo. º 'º * Loop back to top of loop if Ion energy > Final Energy (EF). º 'ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ 'º Z(x), ZMASS(x)= Atomic Number and Mass of elements ;Z(1),ZMASS(1)=Ion º 'º Z2(L), M2(L), RHO(g/cm3) and ATMRHO are average values for layer L. º 'º Every collision starts with ion at (X,Y) with energy, E, and with º 'º impact parameter B. Final results are in: RANGE, EIONIZ(1), VAC,PHONON º 'º RANGE(1)= Ion Distribution, RANGE(2-5)= Target atom redistribution º 'º VAC(1)= Vacancies by Ion, VAC(2-5)= Vacancies of target atom #2-#5 º 'º VACTOTAL= Total vacancies in target, NOVAC= Replacement Collisions. º 'º E2REC= Energy transferred to Recoils, Recoils loss=IONIZ(2),PHONON(2) º 'º STOICH=Fraction of each element in layers (L). º 'º M2M1=M2/M1; A=Screening length; F=LSS Epsilon/Energy; EC=Recoil factor º 'º RHO= Density(g/cm3); ATMRHO (atoms/Ang3); M1M2=M1/M2 º 'º NATOM=Total Elements; NLAYER=Number of layers; XWIDTH=Layer thickness º 'º XDEPTH=Depth at bottom of each layer; M2=; Z2= º 'º FFPATH=Free flight path; º 'º P=Impact parameter; PMAX=Maximum P; ATDIST= Distance between atoms º 'º SE=Electronic stopping (eV/Ang); X1,X2= Depths of Display. º 'ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ 'º DiskFile Allocation Numbers : º 'º #1 = Miscellaneous short In/Out Data Files. º 'º #2 = BACKSCAT.TXT ( Backscattered Ion data ) º 'º #3 = TRANSMIT.TXT ( Transmitted Ion data ) º 'º #4 = COLLISON.TXT ( Collision and Cascade data ) º 'º #5 = SPUTTER.TXT ( Sputtered Atom data ) º 'º #6 = RECOILS.DAT ( Neutron/Photon/Electron Recoil File - Input) º 'ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ 'º Special FLAGS used during calculation : º 'º NEWTRIM : Calculation toggle : 0 = NEW, 1= OLD TRIM calculation. º 'º CASCADE : 0=Kinchin-Pease; 1=Full; 2=Sputtering; 3,4=Neutron/Elec. º 'º LFLAG : Ion is near layer boundary. Take small steps. º 'º SHOWE : Ion/Recoil Energy Toggle: 0 = Display, 1 = No display. º 'º BDISKFLAG (Off/On BACKSCAT.TXT); CDISKFLAG (Off/On of COLLISON.TXT) º 'º SDISKFLAG (Off/On SPUTTER.TXT) ; TDISKFLAG (Off/On of TRANSMIT.TXT) º 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ OPTION BASE 1 ' Left over from FORTRAN days. ON ERROR GOTO TRIMERR '!!! Display ERROR !!! (TINOUT) GOSUB TRIMNEWOLD ' NEWTRIM=0(NEW); =1(OLD) (TRIM) GOSUB DIMENSION ' Dimension Arrays (TRIM) GOSUB INITDATA ' Fonts, Version,etc. (TINOUT) IF NEWTRIM=0 THEN GOSUB NEWTRIM: EXIT IF ' Get TRIM.IN (TGOSUB) ELSE CALL TRWDATA (1,0,0) ' Get Old TRIM data (TRWDATA) IF INUMB=IONTOTAL THEN GOSUB SHOWOLDTRIM' Show Completed TRIM (TGOSUB) END IF GOSUB TRIMSTART ' Set up Variables (TGOSUB) 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ Start of ion penetration LOOP ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ FOR INUMB=INUMB0 TO IONTOTAL 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÑÍÍ͸ '    IF CASCADE > 3 THEN GOSUB NEUTRONDATA ' Get Neutron Recoil (TINOUT) IF CASCADE > 3 GOTO STARTRECOIL ' Skip Ion Penetration '''CALL TIONMOVE (4) '-- Animated Ion IF NEWTRIM=0 THEN ' Resuming Calc. if NEWTRIM=1 E=E0 ' Current Ion Energy COSX=COS(ALPHA) ' ALPHA= Ion Direction (XY Plane) SINX=SIN(ALPHA) ' CosX = X-Axis Directional Cosine COSY=SINX ' CosY = Y-Axis Directional Cosine COSZ =0 ' CosZ = Z-Axis Directional Cosine LAYER =1 ' Current Layer of Target LFLAG =0 ' Jumping into Layer #1 X=0 ' X = Ion Depth position Y=ATDIST(1)*COSY*FNRANDOM ' Y = Transverse Position Z=ATDIST(1)*COSZ*FNRANDOM ' Z = Transverse Position END IF 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÑÍÍ͸ IONCYCLE: ' Cycling through ion collisions    NEWTRIM=0 ' Resuming calculating IKEY$=INKEY$ ' Look for HotKey Command IF IKEY$<>"" THEN GOSUB KEYCOMMAND ' DETECT HotKey COMMANDS (TGOSUB) $EVENT OFF ' Event Trapping OFF (ON KEY) IF SHOWE>0 THEN CALL SHOWEXYZ (2) ' Show Ion Energy, Depth (TSUB) '*********************** Find next collision position = X+FFPATH CALL TLAYER (X,LAYER) ' Determine layer (TSUB) GOSUB FREEPATH ' Returns FFPATH,Impact Parameter (TGOSUB) CALL SELOSS (1,E,FFPATH,LAYER,DEE) ' Electronic Loss of FFPATH (TSUB) E=E-DEE ' Elec.Stopping Lost BEFORE Collision IF E>E0 THEN E=E0 ' Straggle may Increase E>E0 IF EXDEPTH(3) THEN GOSUB TRANSMIT: GOTO NEXTION ' Transmitted Ion (TINOUT) '********************** Calculate Collision with ATOM2 CALL NEXTATOM (LAYER,ATOM2) ' Next Atom Hit = ATOM2 (TSUB) ATOMRECOIL=ATOM2 ' Save Starting Recoil Atom Type P=SQR(FNRANDOM/(PI*FFPATH*ATMRHO(LAYER))) ' Impact Parameter for Collision IF (Z<3)AND(XX2 GOTO AFTERECOIL ' Skip Recoils if Not in Window 'ßßßßßßßßßßßßßßßßßßßßßßßßßßß RECOIL CALCULATION ßßßßßßßßßßßßßßßßßßßßßßßßßßßßß STARTRECOIL: '******************** NOCASS = 0,2 (MC Recoils); NOCASS = 1 (KP Damage) IF DEN < ED(ATOM2) GOTO AFTERECOIL ' Skip Recoils if No Damage IF SHOWE>0 THEN CALL SHOWEXYZ (3) ' Recoil Cascade Energy (TSUB) IF NOCASS=1 THEN GOSUB KPDAMAGE ' Kinchin-Pease Damage (TGOSUB) ELSE '=====>> Jump to RECOIL CASCADE program <<==== GOTO RECOILS ' TRIM Damage Calculation ENDRECOIL: ' RETURN from Cascade Section SEED#=SEED0# ' Restore Seed END IF 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß AFTERECOIL: IF CDISKFLAG>0 THEN GOSUB FILECOLLISON ' Append to COLLISON file (TINOUT) IF X>X1 AND X0 THEN CALL SHOWEXYZ (4) ' Erase Cascade Energy (TSUB) END IF IF E>EF GOTO IONCYCLE ' LOOP Moving Ion    'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÏÍ; CALL TIONPLOT(1,COLIONSTOP,X,Y,Z) ' Show Stopped Ion (TIONPLOT) GOSUB IONSTOPDATA ' Data for STOPPED ION (TGOSUB) NEXTION: $EVENT ON ' Event Trapping ON CALL TIONDATA (INUMB) ' Display Completed Ions CALL TAUTOSAVE ' Automatic Saves (TINOUT) IF NEUTRONEND>0 GOTO TRIMSTOP ' End Neutron Calculations NEXT INUMB ' LOOP to Next ION    'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÏÍ; INUMB=INUMB-1 ' Correct for End-of-Loop Increment 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß 'ßßßßßßßßßßßßßßßß COMPLETED ALL IONS ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß TRIMSTOP: GOSUB ENDCALC ' Store Final Data/Plots (TGOSUB) A$=INPUT$(1) CALL TRWDATA(0,1,0) ' Store Data (TRWDATA) END 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ END OF TRIM CALCULATION ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» 'º *** RECOIL CASCADES ****** RECOIL CASCADES ****** RECOIL CASCADES *** º 'º From before: ATOM2= Atom type, DEN= Energy of recoil. º 'º We follow Primary recoil until it stops. Every time it hits an º 'º atom we store that recoil as Atom(RNUMB) and the primary = Atom(RNUMB+1)º 'º This way the recoil arrays only contain moving atoms, and no dead atoms.º 'º When the recoil stops, the loop follows back from the last atom º 'º hit until it get to RNUMB=1, the first atom hit by the recoil atom. º 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ RECOILS: ' Following DIM statements use >> 72k << and are not used for KP calculations. IF DIMRECOIL = 0 THEN 'Must be Dynamic or space is reserved even if not used! DIM DYNAMIC ATOM%(2000),RLAYER%(2000) ' Recoil Data DIM DYNAMIC COSXR(2000),COSYR(2000),COSZR(2000),SINXR(2000)' Recoil Data DIM DYNAMIC ER(2000),XR(2000),YR(2000),ZR(2000) ' Recoil Data DIMRECOIL = 1 END IF SEED0#=SEED# '*** Save SEED so have same Distribution w/wo cascades! CALL TIONPLOT (2,COLRECMOVE(ATOM2),X,Y,Z) ' Plot Collision ATOM%(1)=ATOM2 ' Atom Type Hit by Ion RLAYER%(1)=LAYER ' Layer of Collision ER(1)=DEN-EB : IF ER(1)<0 THEN ER(1)=0 ' Cascade Energy=DEN-EBinding 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß Get Recoil direction IF CASCADE < 4 THEN CALL COSINES (COSX,COSY,COSZ,SINX,PHI2,PSI2,CSX,CSY,CSZ,SNX): END IF COSXR(1)=CSX: COSYR(1)=CSY: COSZR(1)=CSZ: SINXR(1)=SNX RFPATH=ATDIST(LAYER) ' Recoil Free Path XR(1)=X+RFPATH*COSXR(1) ' Next Collision Position YR(1)=Y+RFPATH*COSYR(1) ' Next Collision Position ZR(1)=Z+RFPATH*COSZR(1) ' Next Collision Position '------------------------- Store Vacancy since DEN > ED CALL DATABIN(XR(1),RBIN) ' Bin for Data Storage VACTOTAL#=VACTOTAL#+PERANG ' Increment Total Vacancies DISPTOTAL#=DISPTOTAL#+PERANG ' Increment Total Displacement VAC(1,RBIN)=VAC(1,RBIN)+PERANG ' Ion Creates Vacancy E2REC(1,RBIN)= E2REC(1,RBIN)-EB*PERANG ' Remove EB from Cascade Energy IF RDISKFLAG>0 THEN RFLAG=1: GOSUB FILERECOIL ' File Every Recoil (TINOUT) RNUMB=1 ' RNUMB=Recoil Atom Index ' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÑÍÍÍÑÍÍ͸ ' ÈÍÍÍÍÍÍÍÍÍÍÍÍÍ Cycle LOOP of recoil particles     RECLOOP: IF ER(RNUMB)ER(RNUMB) THEN RDEE=ER(RNUMB) ' No Negative Energies IF (NOCASS=2 AND XR(RNUMB+1)<0) THEN ' If leave surface, then need RDEE=RDEE*XR(RNUMB)/(XR(RNUMB)-XR(RNUMB+1)) ' Pro-Rate Se for Sputtering END IF ' (5/90) ER(RNUMB+1)=ER(RNUMB)-RDEE ' Recoil Energy at Collision GOSUB RECMOVEDATA ' Store Ioniz. Energy Loss IF XR(RNUMB+1)>XDEPTH(3) GOTO NEXTRECOIL ' Transmitted: Get Next Recoil IF XR(RNUMB+1)<0 THEN GOSUB SPUTTER ' See if Sputtered Atom IF ER(RNUMB+1)EDLOW THEN ' Omit Calc. if low enery recoil 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß Get Direction of (RNUMB) Recoil ' (PHI2, PSI2 calculated in MAGIC above) CALL COSINES (COSXR(RNUMB),COSYR(RNUMB),COSZR(RNUMB),SINXR,PHI2,PSI2,CSX,CSY,CSZ,SNX) COSXR(RNUMB)=CSX: COSYR(RNUMB)=CSY: COSZR(RNUMB)=CSZ: SINXR(RNUMB)=SNX END IF RNUMB=RNUMB+1 ' Continue Following Primary Recoil which is now (RNUMB+1) IF RNUMB>1999 THEN ' -------- 2000 is limit of Cascade Storage. RNUMB=1999: BEEP : COLOR 15 LOCATE 11,01: PRINT " Minor TRIM Error --- "; LOCATE 12,01: PRINT " Cascade > 2000 Atoms "; END IF IF ER(RNUMB) > EDLOW GOTO RECLOOP ' LOOP Moving Recoil    'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÏÍ; STOREREC: 'Current Recoil(RNUMB) Stopped(ERED(ATOM1)) AND (XR(RNUMB)>X1 AND XR(RNUMB)0 THEN GOSUB FILERECOIL ' File Every Recoil (TINOUT) END IF GOTO RECLOOP '--------- LOOP NEXT Recoil    'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÏÍ; 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ END OF RECOIL CASCADES ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº 'ºÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛº TRIMNEWOLD: SCREEN 0: WIDTH 80: COLOR ,4: CLS: COLOR 11,0 LOCATE 6,22: PRINT" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» " LOCATE ,22: PRINT" º º " LOCATE ,22: PRINT" º T R I M º " LOCATE ,22: PRINT" º º " LOCATE 10,22: PRINT" º New Calculation or º " LOCATE ,22: PRINT" º º " LOCATE 12,22: PRINT" º Resume Old Calculation ? º " LOCATE ,22: PRINT" º º " LOCATE ,22: PRINT" º [NEW] º " LOCATE ,22: PRINT" º º " LOCATE ,22: PRINT" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ "; LOCATE 10,28:COLOR 14:PRINT"N" LOCATE 12,28:COLOR 14:PRINT"R" LOCATE 12,35:COLOR 14:PRINT"O" COLOR 15,0: LOCATE 14,34,1,0,7: PRINT" "; ' Makes a White Cursor LOCATE ,34: K$=UCASE$(INPUT$(1)) IF K$="R" OR K$="O" THEN NEWTRIM=1 ELSE NEWTRIM=0 RETURN 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ' IMPORTANT : Make Arrays IDENTICAL in TRIM.BAS, TRWDATA and TASCII !!!! º 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ Dimensioned Arrays ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ DIMENSION: º DIM BX(4),BY(4),BOXORDER(4,2,2),COLRECMOVE(5) 'º DIM COLRECSTOP(5),E2REC(5,100),ED(5),EIONIZ(2,100) 'º DIM ESPUTT(5),NOVAC(100),PHONON(2,100) 'º DIM RANGE(5,100),RHO(3),SE(1000,3,5),SPUTT(5),STOICH(3,5),TNAMES$(3) 'º DIM VAC(5,100),XDEPTH(3),XWIDTH(3),YZRADIAL(2,100),YZRANGE(2,100) 'º DIM Z(5),ZMASS(5),SPUTTE%(5,200) 'º 'º '>>>>>>>>> Recoil Dimensioned Arrays (72k) are made in RECOIL (above). 'º '>>>>>>>>> This reduces size by 72K until after first ion starts, 'º '>>>>>>>>> allowing temporary arrays such as SE0(1000) in STOPPING (TINOUT) 'º 'º DIM YY(8),ZMASS2(3) ' Used in TGOSUB 'º DIM ATMRHO(3),ATDIST(3),PMAX(3),KPELEC(3),KPVAC(3) ' Used in TGOSUB 'º DIM FFPA(3),FFPF(3),EPSDG(3),EC(5,5),A(5,5),FKIN(5,5) ' Used in TGOSUB 'º DIM M1M2(3),UNIT(3),Z2(3),M2M1(5,5),STBOHR(3) ' Used in TGOSUB 'º DIM STFIRSOV(5) ' Used in TGOSUB 'º DIM ELOSS(6) ' Used in TIONDATA 'º DIM DUMMY%(25) ' Used in TINOUT 'º DIM F12%(1281) ' FONT-12 'º DIM F24%(3457) ' FONT-24 'º '''DIM F0%(833) ' FONT-0 (Not Used) 'º '''DIM F21%(2497) ' FONT-21 (Not Used) 'º 'PLOT used in GET/PUT'º DIM DYNAMIC PLOT%(32760) ' TINOUT,TGOSUB,TSUB 'º 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ 'Program storage= 230k, Static Variable Storage= 200k, Dynamic= 60k (max) 'º 'Variable Storage: Se(60k),Recoils(72k),PLOT%(64k),Fonts(10k),Dist.(10k) 'º 'You may use FRE(-1) to determine space remaining for arrays. 'º 'ÍÍÍÍÍÍ*** NOTE : Temporary BIG Arrays Dimensioned in TINOUT ***ÍÍÍÍÍÍÍÍÍÍÍ͹ RETURN 'º 'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß 'ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß '------ Include the source code of the subroutines used by TRIM $INCLUDE "TINOUT.BAS" ' Subroutines with Input/Output to Disk Files ' Contains In/Out for TRIM.IN, F12.BIN, VERSION, ZNAME$, ' TRIM.PRO, BACKSCAT, TRANSMIT, STOP91, FILEERR, COLLISON, SPUTTER $INCLUDE "TSUB.BAS" ' SUB COSINES, SUB TQUESTION, SUB ENERGY, SUB DEPTH, ' SUB BINCHECK, SUB POPHELP, SUB TLAYER, SUB TLAYER, ' SUB NEXTATOM, SUB SHOWEXYZ $INCLUDE "TGOSUB.BAS" ' NEWTRIM TRIMSTART T3PLOTDIM KPDAMAGE FREEPATH SELOSS ' IONMOVEDATA IONSTOPDATA KEYCOMMAND ' DEF FNRANDOM DEF FNARCCOS DEF FNAMAX1 DEF FNAMIN1 $INCLUDE "TMAGIC.BAS" $INCLUDE "TIONDATA.BAS" $INCLUDE "TIONPLOT.BAS" $SEGMENT 'SEGMENT above = 53k (3/91) $INCLUDE "TPIC.BAS" $INCLUDE "FONT.BAS" $INCLUDE "STOP91.BAS" $INCLUDE "TRWDATA.BAS" ''''' $INCLUDE "TIONMOVE.BAS" ' Starting Animated Ion '--------------------------- These Functions are ONLY for TMENU.BAS $INCLUDE "TMENU.BAS" $INCLUDE "TLABEL.BAS" ' Labels RIGHT side of Plots $INCLUDE "FONT24.BAS" ' Draws Fancy Font #24 $INCLUDE "TRANGE.BAS" ' Ion Range Distribution $INCLUDE "TVAC.BAS" ' Vacancies/Displacements $INCLUDE "TIONIZ.BAS" ' Ionization $INCLUDE "TPHONON.BAS" ' Phonons $SEGMENT ' SEGMENT above = 55k (3/91) $INCLUDE "TRECOIL.BAS" ' Recoil Atom Distributions $INCLUDE "TE2REC.BAS" ' Energy to Recoils $INCLUDE "TLAT.BAS" ' Lateral Ion Range Distribution $INCLUDE "TSPUTT.BAS" ' Sputtered Atom Energy Plot $INCLUDE "TASCII.BAS" ' Text (ASCII) File of Data $INCLUDE "THELP.BAS" ' Two Pages of HELP from TMENU