1058 lines
27 KiB
Fortran
Executable File
1058 lines
27 KiB
Fortran
Executable File
PROGRAM stopit
|
|
|
|
C
|
|
C PROGRAM DESCRIPTION:
|
|
C
|
|
C Program calculates energy loss in absorber sandwich. Uses energy
|
|
C routine "absorb.for" obtained from Dan Shapira who obtained it from
|
|
C somebody in Germany. I don't know - it works!
|
|
C
|
|
C
|
|
C The the program can be compiled using the command
|
|
C g77 stopit.for desorb.for -o stopit
|
|
C or, for more recent compilers
|
|
C gfortran stopit.for desorb.for -o stopit
|
|
|
|
c
|
|
c
|
|
C
|
|
C AUTHORS:
|
|
C
|
|
C Dan Bardayan
|
|
C Jonathan Wheeler
|
|
C Patrick O'Malleyst
|
|
C S.D. Pain
|
|
C
|
|
C CREATION DATE: 12/23/97
|
|
C
|
|
C
|
|
C C H A N G E L O G
|
|
C
|
|
C Date | Name | Description
|
|
C ----------------+------------------+-----------------------------------------
|
|
C 12/23/97 | Dan Bardayan | Creation of the program
|
|
C 10/03/03 | Dan Bardayan | Modified to compile w/ g77
|
|
C 05/27/11 | Jonathan Wheeler| Modified to include standardized media
|
|
C | | and to find the thickness required to
|
|
C | | stop a "stopee"
|
|
C 6/4/2020 | S.D. Pain | Modified to correct unset molar
|
|
C | | concentration of second element in
|
|
C | | gas layers for standard materials
|
|
C | | Corrected CD2 density from 0.93 to 1.063 g/cm3
|
|
C ----------------+------------------+-----------------------------------------
|
|
C ----------------+------------------+-----------------------------------------
|
|
C
|
|
IMPLICIT NONE
|
|
|
|
INTEGER i, j, k,imm, ism, iedit, issm
|
|
integer ianz, ianzi, ianzide
|
|
integer isg,inn
|
|
integer stdm, siupb, soupb, gaupb
|
|
|
|
c stdm: index for standard media
|
|
|
|
c imm: which main menu item we are on
|
|
c ism: which sub menu item we are on
|
|
c iedit: which layer to edit
|
|
c ianz : # of energy loss layers
|
|
c ianzi : index of last layer in which the energy of the pariticle
|
|
c is not recorded - don't blame me for this vague description
|
|
c i got it straight from desorb.for- i always set it to 2
|
|
c ianzide : element # for DE calculation- i always set it to 1
|
|
c isg(i): 0,1-0 means ith layer is solid,1 means ith layer is gas
|
|
c inn(i): no. of elements in ith layer
|
|
|
|
c sithk: thickness in microns of standard silicon
|
|
c tethk: test thickness for iteration purposes
|
|
c error: error in iteration thickness for bisection method
|
|
|
|
|
|
real den, thk,prs,xln,elnum,concn
|
|
real anumb, znumb
|
|
real arden, prden, prthk
|
|
real z, a, energy, loste(19),zp, edep
|
|
real sithk, tethk, error
|
|
|
|
c z : proton number of stopee
|
|
c a : mass number of stopee
|
|
c energy: energy of stopee in MeV
|
|
c den(i) : density (g/cm3) of ith layer-only for solid
|
|
c thk(i): thickness (mg/cm3) of ith layer-only for solid
|
|
c prs(i): pressure (torr) of ith layer-only for gas
|
|
c xln(i): thickness (cm) of ith layer-only for gas
|
|
c elnum(i,j):# atoms of jth element in ith layer per molecule
|
|
c concn(i,j): concentration(molar) j element in ith layer = 1 usually
|
|
c anumb(i,j): atomic mass in amu for j element in ith layer
|
|
c znumb(i,j): atomic no. for jth element in ith layer
|
|
c loste(i):energy lost in ith layer
|
|
c edep: energy deposited in absorber = sum(loste)
|
|
|
|
COMMON ISG(19),INN(19)
|
|
+ ,DEN(19),THK(19),PRS(19),XLN(19),ARDEN(19)
|
|
+ ,ZNUMB(19,4),ANUMB(19,4),ELNUM(19,4),CONCN(19,4)
|
|
+ ,PRDEN(19,4),PRTHK(19,4)
|
|
|
|
|
|
open(unit=7,file='stopit.log',status='unknown')
|
|
|
|
c define some initial values in case the program is run before all the
|
|
c important parameters are defined
|
|
|
|
ianz = 1
|
|
ianzi = 2
|
|
ianzide = 1
|
|
isg(1) = 1
|
|
inn(1) = 1
|
|
stdm = 1
|
|
sithk = 10.
|
|
z = 1.
|
|
a = 1.
|
|
energy = 10.
|
|
den(1) = 1.0
|
|
thk(1) = 0.1
|
|
prs(1) = 10.
|
|
xln(1) = 10.
|
|
elnum(1,1) = 1.
|
|
concn(1,1) = 1.
|
|
anumb(1,1) = 12.
|
|
znumb(1,1) = 6.
|
|
|
|
c For finding thicknesses, upper bounds need to be set.
|
|
c Silicon upper bound in microns
|
|
siupb = 1500
|
|
c Other solids' upper bound in mg/cm2
|
|
soupb = 1000
|
|
c Gas upper bound in cm
|
|
gaupb = 100
|
|
|
|
c This is the control portion of the program
|
|
|
|
10 write(6,15)
|
|
15 format(/' 1 define stopee'/
|
|
* ' 2 define absorber'/
|
|
* ' 3 edit absorber'/
|
|
* ' 4 run with current parameters'/
|
|
* ' 5 find thickness of absorber to stop the stopee'/
|
|
* ' 6 print status of data'/
|
|
* ' 7 stop')
|
|
read(5,*)imm
|
|
|
|
if(imm.eq.1)then
|
|
goto 100
|
|
elseif(imm.eq.2)then
|
|
goto 200
|
|
elseif(imm.eq.3)then
|
|
goto 300
|
|
elseif(imm.eq.4)then
|
|
goto 400
|
|
c This section was editted to add a new function, it's easier to
|
|
c have a discontinuity in labels than to relabel everything.
|
|
elseif(imm.eq.5)then
|
|
goto 600
|
|
elseif(imm.eq.6)then
|
|
goto 500
|
|
elseif(imm.eq.7)then
|
|
goto 1000
|
|
else
|
|
goto 10
|
|
endif
|
|
|
|
c Define stopee
|
|
100 write(6,*)'Enter Z and A of stopee.'
|
|
read(5,*)z,a
|
|
write(6,*)'Enter energy in MeV.'
|
|
read(5,*)energy
|
|
goto 10
|
|
|
|
c Define absorber
|
|
200 write(6,*)
|
|
write(6,*)'How many stopping layers are there in the absorber?'
|
|
read(5,*)ianz
|
|
|
|
do i = 1, ianz
|
|
201 write(6,210)i
|
|
read(5,*)isg(i)
|
|
|
|
if(isg(i).eq.0)then
|
|
write(6,220)i
|
|
read(5,*)den(i),thk(i)
|
|
elseif(isg(i).eq.1)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
elseif(isg(i).eq.2)then
|
|
write(6,260)i
|
|
read(5,*)stdm
|
|
if(stdm.eq.1)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
c CO2 standardized medium
|
|
isg(i) = 1
|
|
inn(i) = 2
|
|
znumb(i,1)=6
|
|
znumb(i,2)=8
|
|
anumb(i,1)=12
|
|
anumb(i,2)=16
|
|
elnum(i,1)=1
|
|
elnum(i,2)=2
|
|
concn(i,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(i,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 202
|
|
elseif(stdm.eq.2)then
|
|
write(6,221)i
|
|
read(5,*)sithk
|
|
c Si standardized medium
|
|
isg(i) = 0
|
|
den(i) = 2.329
|
|
thk(i) = 0.2329*sithk
|
|
inn(i) = 1
|
|
znumb(i,1)=14
|
|
anumb(i,1)=28
|
|
elnum(i,1)=1
|
|
goto 202
|
|
elseif(stdm.eq.3)then
|
|
write(6,222)i
|
|
read(5,*)thk(i)
|
|
c C (graphite) standardized medium
|
|
isg(i) = 0
|
|
den(i) = 2.267
|
|
inn(i) = 1
|
|
znumb(i,1)=6
|
|
anumb(i,1)=12
|
|
elnum(i,1)=1
|
|
goto 202
|
|
elseif(stdm.eq.4)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
c C4H10 standardized medium
|
|
isg(i) = 1
|
|
inn(i) = 2
|
|
znumb(i,1)=6.0
|
|
znumb(i,2)=1.0
|
|
anumb(i,1)=12.0
|
|
anumb(i,2)=1.0
|
|
elnum(i,1)=4.0
|
|
elnum(i,2)=10.0
|
|
concn(i,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(i,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 202
|
|
elseif(stdm.eq.5)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
c CF4 standardized medium
|
|
isg(i) = 1
|
|
inn(i) = 2
|
|
znumb(i,1)=6
|
|
znumb(i,2)=9
|
|
anumb(i,1)=12
|
|
anumb(i,2)=19
|
|
elnum(i,1)=1
|
|
elnum(i,2)=4
|
|
concn(i,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(i,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 202
|
|
elseif(stdm.eq.6)then
|
|
write(6,222)i
|
|
read(5,*)thk(i)
|
|
c CH2 standardized medium
|
|
isg(i) = 0
|
|
inn(i) = 2
|
|
den(i) = 0.94
|
|
znumb(i,1)=6
|
|
znumb(i,2)=1
|
|
anumb(i,1)=12
|
|
anumb(i,2)=1
|
|
elnum(i,1)=1
|
|
elnum(i,2)=2
|
|
goto 202
|
|
elseif(stdm.eq.7)then
|
|
write(6,222)i
|
|
read(5,*)thk(i)
|
|
c CD2 standardized medium
|
|
isg(i) = 0
|
|
inn(i) = 2
|
|
den(i) = 1.063 !Changed 6/4/2020 by SDP to correct CD2 density from 0.93
|
|
znumb(i,1)=6
|
|
znumb(i,2)=1
|
|
anumb(i,1)=12
|
|
anumb(i,2)=2
|
|
elnum(i,1)=1
|
|
elnum(i,2)=2
|
|
goto 202
|
|
elseif(stdm.eq.8)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
c helium gas standardized medium
|
|
isg(i) = 1
|
|
inn(i) = 1
|
|
znumb(i,1)=2
|
|
anumb(i,1)=4
|
|
elnum(i,1)=1
|
|
concn(i,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
goto 202
|
|
elseif(stdm.eq.9)then
|
|
write(6,230)i
|
|
read(5,*)prs(i),xln(i)
|
|
c hydrogen gas standardized medium
|
|
isg(i) = 1
|
|
inn(i) = 1
|
|
znumb(i,1)=1
|
|
anumb(i,1)=1
|
|
elnum(i,1)=2
|
|
concn(i,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
goto 202
|
|
else
|
|
goto 201
|
|
endif
|
|
else
|
|
goto 201
|
|
endif
|
|
|
|
write(6,240)i
|
|
read(5,*)inn(i)
|
|
|
|
do j = 1, inn(i)
|
|
write(6,250)i,j
|
|
read(5,*)znumb(i,j),anumb(i,j), elnum(i,j)
|
|
concn(i,j)=1.
|
|
enddo
|
|
|
|
202 j = 1
|
|
|
|
enddo
|
|
|
|
goto 10
|
|
|
|
210 format(/'Is layer ',I2,' a solid, gas, or standardized medium?',
|
|
+/'(0 = solid, 1 = gas, 2 = standardized medium)',
|
|
+/'(Standardized media are: CO2, Si, C [graphite], C4H10, CF4,',
|
|
+/'CH2, CD2, He, and H2)')
|
|
220 format('Enter density(g/cm3) and thickness(mg/cm2) for layer ',I2)
|
|
221 format('Enter thickness(microns) for layer ',I2)
|
|
222 format('Enter thickness(mg/cm2) for layer ',I2)
|
|
230 format('Enter pressure(Torr) and length(cm) for layer ',I2)
|
|
240 format('How many elements are in layer ', I2 ,'?')
|
|
250 format('For layer ',I2,' ,element ',I2,' - enter Z, A, and the
|
|
+ number of atoms per molecule. ')
|
|
260 format('Which standardized medium for layer ', I2, '?',
|
|
+/'1: CO2',
|
|
+/'2: Si',
|
|
+/'3: C (graphite)',
|
|
+/'4: C4H10',
|
|
+/'5: CF4',
|
|
+/'6: CH2',
|
|
+/'7: CD2',
|
|
+/'8: He-gas',
|
|
+/'9: H2-gas')
|
|
|
|
c Edit absorber
|
|
300 write(6,301)
|
|
read(5,*)ism
|
|
301 format(/' 1 edit layer'/
|
|
* ' 2 add layer onto end of absorber'/
|
|
* ' 3 add new layer in front of absorber'/
|
|
* ' 4 return to main menu')
|
|
|
|
if(ism.eq.1)then
|
|
goto 310
|
|
elseif(ism.eq.2)then
|
|
goto 340
|
|
elseif(ism.eq.3)then
|
|
goto 360
|
|
elseif(ism.eq.4)then
|
|
goto 10
|
|
else
|
|
goto 300
|
|
endif
|
|
|
|
c Edit layer
|
|
310 write(6,311)
|
|
read(5,*)iedit
|
|
311 format(/'Which layer would you like to edit?')
|
|
|
|
312 write(6,313)
|
|
read(5,*)issm
|
|
313 format(/' 1 change state, density, thickness, etc...'/
|
|
* ' 2 change elemental composition'/
|
|
* ' 3 go back to previous menu'/)
|
|
|
|
if(issm.eq.1)then
|
|
goto 315
|
|
elseif(issm.eq.2)then
|
|
goto 320
|
|
elseif(issm.eq.3)then
|
|
goto 300
|
|
else
|
|
goto 312
|
|
endif
|
|
|
|
315 write(6,210)iedit
|
|
read(5,*)isg(iedit)
|
|
|
|
if(isg(iedit).eq.0)then
|
|
write(6,220)iedit
|
|
read(5,*)den(iedit),thk(iedit)
|
|
elseif(isg(iedit).eq.1)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
elseif(isg(iedit).eq.2)then
|
|
write(6,260)iedit
|
|
read(5,*)stdm
|
|
if(stdm.eq.1)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
c CO2 standardized medium
|
|
isg(iedit) = 1
|
|
inn(iedit) = 2
|
|
znumb(iedit,1)=6
|
|
znumb(iedit,2)=8
|
|
anumb(iedit,1)=12
|
|
anumb(iedit,2)=16
|
|
elnum(iedit,1)=1
|
|
elnum(iedit,2)=2
|
|
concn(iedit,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(iedit,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 312
|
|
elseif(stdm.eq.2)then
|
|
write(6,221)iedit
|
|
read(5,*)sithk
|
|
c Si standardized medium
|
|
isg(iedit) = 0
|
|
den(iedit) = 2.329
|
|
thk(iedit) = 0.2329*sithk
|
|
inn(iedit) = 1
|
|
znumb(iedit,1)=14
|
|
anumb(iedit,1)=28
|
|
elnum(iedit,1)=1
|
|
goto 312
|
|
elseif(stdm.eq.3)then
|
|
write(6,222)iedit
|
|
read(5,*)thk(iedit)
|
|
c C (graphite) standardized medium
|
|
isg(iedit) = 0
|
|
den(iedit) = 2.267
|
|
inn(iedit) = 1
|
|
znumb(iedit,1)=6
|
|
anumb(iedit,1)=12
|
|
elnum(iedit,1)=1
|
|
goto 312
|
|
elseif(stdm.eq.4)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
c C4H10 standardized medium
|
|
isg(iedit) = 1
|
|
inn(iedit) = 2
|
|
znumb(iedit,1)=6
|
|
znumb(iedit,2)=1
|
|
anumb(iedit,1)=12
|
|
anumb(iedit,2)=1
|
|
elnum(iedit,1)=4
|
|
elnum(iedit,2)=10
|
|
concn(iedit,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(iedit,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 312
|
|
elseif(stdm.eq.5)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
c CF4 standardized medium
|
|
isg(iedit) = 1
|
|
inn(iedit) = 2
|
|
znumb(iedit,1)=6
|
|
znumb(iedit,2)=9
|
|
anumb(iedit,1)=12
|
|
anumb(iedit,2)=19
|
|
elnum(iedit,1)=1
|
|
elnum(iedit,2)=4
|
|
concn(iedit,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(iedit,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 312
|
|
elseif(stdm.eq.6)then
|
|
write(6,222)iedit
|
|
read(5,*)thk(iedit)
|
|
c CH2 standardized medium
|
|
isg(iedit) = 0
|
|
inn(iedit) = 2
|
|
den(iedit) = 0.94
|
|
znumb(iedit,1)=6
|
|
znumb(iedit,2)=1
|
|
anumb(iedit,1)=12
|
|
anumb(iedit,2)=1
|
|
elnum(iedit,1)=1
|
|
elnum(iedit,2)=2
|
|
goto 312
|
|
elseif(stdm.eq.7)then
|
|
write(6,222)iedit
|
|
read(5,*)thk(iedit)
|
|
c CD2 standardized medium
|
|
isg(iedit) = 0
|
|
inn(iedit) = 2
|
|
den(iedit) = 1.063 !Changed 6/4/2020 by SDP to correct CD2 density from 0.93
|
|
znumb(iedit,1)=6
|
|
znumb(iedit,2)=1
|
|
anumb(iedit,1)=12
|
|
anumb(iedit,2)=2
|
|
elnum(iedit,1)=1
|
|
elnum(iedit,2)=2
|
|
goto 312
|
|
elseif(stdm.eq.8)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
c helium gas standardized medium
|
|
isg(iedit) = 1
|
|
inn(iedit) = 1
|
|
znumb(iedit,1)=2
|
|
anumb(iedit,1)=4
|
|
elnum(iedit,1)=1
|
|
concn(iedit,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
elseif(stdm.eq.9)then
|
|
write(6,230)iedit
|
|
read(5,*)prs(iedit),xln(iedit)
|
|
c hydrogen gas standardized medium
|
|
isg(iedit) = 1
|
|
inn(iedit) = 1
|
|
znumb(iedit,1)=1
|
|
anumb(iedit,1)=1
|
|
elnum(iedit,1)=2
|
|
concn(iedit,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
else
|
|
goto 315
|
|
endif
|
|
else
|
|
goto 315
|
|
endif
|
|
|
|
goto 312
|
|
|
|
320 write(6,240)iedit
|
|
read(5,*)inn(iedit)
|
|
|
|
do j = 1, inn(iedit)
|
|
write(6,250)iedit,j
|
|
read(5,*)znumb(iedit,j),anumb(iedit,j), elnum(iedit,j)
|
|
concn(iedit,j)=1.
|
|
enddo
|
|
|
|
goto 312
|
|
|
|
c Add layer onto end
|
|
340 ianz = ianz + 1
|
|
|
|
345 write(6,210)ianz
|
|
read(5,*)isg(ianz)
|
|
|
|
if(isg(ianz).eq.0)then
|
|
write(6,220)ianz
|
|
read(5,*)den(ianz),thk(ianz)
|
|
elseif(isg(ianz).eq.1)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
elseif(isg(ianz).eq.2)then
|
|
write(6,260)ianz
|
|
read(5,*)stdm
|
|
if(stdm.eq.1)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
c CO2 standardized medium
|
|
isg(ianz) = 1
|
|
inn(ianz) = 2
|
|
znumb(ianz,1)=6
|
|
znumb(ianz,2)=8
|
|
anumb(ianz,1)=12
|
|
anumb(ianz,2)=16
|
|
elnum(ianz,1)=1
|
|
elnum(ianz,2)=2
|
|
concn(ianz,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(ianz,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.2)then
|
|
write(6,221)ianz
|
|
read(5,*)sithk
|
|
c Si standardized medium
|
|
isg(ianz) = 0
|
|
den(ianz) = 2.329
|
|
thk(ianz) = 0.2329*sithk
|
|
inn(ianz) = 1
|
|
znumb(ianz,1)=14
|
|
anumb(ianz,1)=28
|
|
elnum(ianz,1)=1
|
|
goto 300
|
|
elseif(stdm.eq.3)then
|
|
write(6,222)ianz
|
|
read(5,*)thk(ianz)
|
|
c C (graphite) standardized medium
|
|
isg(ianz) = 0
|
|
den(ianz) = 2.267
|
|
inn(ianz) = 1
|
|
znumb(ianz,1)=6
|
|
anumb(ianz,1)=12
|
|
elnum(ianz,1)=1
|
|
goto 300
|
|
elseif(stdm.eq.4)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
c C4H10 standardized medium
|
|
isg(ianz) = 1
|
|
inn(ianz) = 2
|
|
znumb(ianz,1)=6
|
|
znumb(ianz,2)=1
|
|
anumb(ianz,1)=12
|
|
anumb(ianz,2)=1
|
|
elnum(ianz,1)=4
|
|
elnum(ianz,2)=10
|
|
concn(ianz,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(ianz,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.5)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
c CF4 standardized medium
|
|
isg(ianz) = 1
|
|
inn(ianz) = 2
|
|
znumb(ianz,1)=6
|
|
znumb(ianz,2)=9
|
|
anumb(ianz,1)=12
|
|
anumb(ianz,2)=19
|
|
elnum(ianz,1)=1
|
|
elnum(ianz,2)=4
|
|
concn(ianz,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(ianz,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.6)then
|
|
write(6,222)ianz
|
|
read(5,*)thk(ianz)
|
|
c CH2 standardized medium
|
|
isg(ianz) = 0
|
|
inn(ianz) = 2
|
|
den(ianz) = 0.94
|
|
znumb(ianz,1)=6
|
|
znumb(ianz,2)=1
|
|
anumb(ianz,1)=12
|
|
anumb(ianz,2)=1
|
|
elnum(ianz,1)=1
|
|
elnum(ianz,2)=2
|
|
goto 300
|
|
elseif(stdm.eq.7)then
|
|
write(6,222)ianz
|
|
read(5,*)thk(ianz)
|
|
c CD2 standardized medium
|
|
isg(ianz) = 0
|
|
inn(ianz) = 2
|
|
den(ianz) = 1.063 !Changed 6/4/2020 by SDP to correct CD2 density from 0.93
|
|
znumb(ianz,1)=6
|
|
znumb(ianz,2)=1
|
|
anumb(ianz,1)=12
|
|
anumb(ianz,2)=2
|
|
elnum(ianz,1)=1
|
|
elnum(ianz,2)=2
|
|
goto 300
|
|
elseif(stdm.eq.8)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
c helium gas standardized medium
|
|
isg(ianz) = 1
|
|
inn(ianz) = 1
|
|
znumb(ianz,1)=2
|
|
anumb(ianz,1)=4
|
|
elnum(ianz,1)=1
|
|
concn(ianz,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
elseif(stdm.eq.9)then
|
|
write(6,230)ianz
|
|
read(5,*)prs(ianz),xln(ianz)
|
|
c hydrogen gas standardized medium
|
|
isg(ianz) = 1
|
|
inn(ianz) = 1
|
|
znumb(ianz,1)=1
|
|
anumb(ianz,1)=1
|
|
elnum(ianz,1)=2
|
|
concn(ianz,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
goto 300
|
|
else
|
|
goto 345
|
|
endif
|
|
else
|
|
goto 345
|
|
endif
|
|
|
|
write(6,240)ianz
|
|
read(5,*)inn(ianz)
|
|
|
|
do j = 1, inn(ianz)
|
|
write(6,250)ianz,j
|
|
read(5,*)znumb(ianz,j),anumb(ianz,j), elnum(ianz,j)
|
|
concn(ianz,j)=1.
|
|
enddo
|
|
|
|
goto 300
|
|
|
|
c Add new layer in front of absorber
|
|
360 ianz = ianz + 1
|
|
|
|
do j = ianz, 2, -1
|
|
isg(j)=isg(j-1)
|
|
den(j)=den(j-1)
|
|
thk(j)=thk(j-1)
|
|
prs(j)=prs(j-1)
|
|
xln(j)=xln(j-1)
|
|
inn(j)=inn(j-1)
|
|
|
|
do k = 1, inn(j)
|
|
znumb(j,k)=znumb(j-1,k)
|
|
anumb(j,k)=anumb(j-1,k)
|
|
elnum(j,k)=elnum(j-1,k)
|
|
concn(j,k)=concn(j-1,k)
|
|
enddo
|
|
|
|
enddo
|
|
|
|
365 write(6,210)1
|
|
read(5,*)isg(1)
|
|
|
|
if(isg(1).eq.0)then
|
|
write(6,220)1
|
|
read(5,*)den(1),thk(1)
|
|
elseif(isg(1).eq.1)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
elseif(isg(1).eq.2)then
|
|
write(6,260)1
|
|
read(5,*)stdm
|
|
if(stdm.eq.1)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
c CO2 standardized medium
|
|
isg(1) = 1
|
|
inn(1) = 2
|
|
znumb(1,1)=6
|
|
znumb(1,2)=8
|
|
anumb(1,1)=12
|
|
anumb(1,2)=16
|
|
elnum(1,1)=1
|
|
elnum(1,2)=2
|
|
concn(1,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(1,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.2)then
|
|
write(6,221)1
|
|
read(5,*)sithk
|
|
c Si standardized medium
|
|
isg(1) = 0
|
|
den(1) = 2.329
|
|
thk(1) = 0.2329*sithk
|
|
inn(1) = 1
|
|
znumb(1,1)=14
|
|
anumb(1,1)=28
|
|
elnum(1,1)=1
|
|
goto 300
|
|
elseif(stdm.eq.3)then
|
|
write(6,222)1
|
|
read(5,*)thk(1)
|
|
c C (graphite) standardized medium
|
|
isg(1) = 0
|
|
den(1) = 2.267
|
|
inn(1) = 1
|
|
znumb(1,1)=6
|
|
anumb(1,1)=12
|
|
elnum(1,1)=1
|
|
goto 300
|
|
elseif(stdm.eq.4)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
c C4H10 standardized medium
|
|
isg(1) = 1
|
|
inn(1) = 2
|
|
znumb(1,1)=6
|
|
znumb(1,2)=1
|
|
anumb(1,1)=12
|
|
anumb(1,2)=1
|
|
elnum(1,1)=4
|
|
elnum(1,2)=10
|
|
concn(1,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(1,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.5)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
c CF4 standardized medium
|
|
isg(1) = 1
|
|
inn(1) = 2
|
|
znumb(1,1)=6
|
|
znumb(1,2)=9
|
|
anumb(1,1)=12
|
|
anumb(1,2)=19
|
|
elnum(1,1)=1
|
|
elnum(1,2)=4
|
|
concn(1,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
concn(1,2)=1 !Added 6/4/2020 by SDP to fix bug where element 2 was not included correctly
|
|
goto 300
|
|
elseif(stdm.eq.6)then
|
|
write(6,222)1
|
|
read(5,*)thk(1)
|
|
c CH2 standardized medium
|
|
isg(1) = 0
|
|
inn(1) = 2
|
|
den(1) = 0.94
|
|
znumb(1,1)=6
|
|
znumb(1,2)=1
|
|
anumb(1,1)=12
|
|
anumb(1,2)=1
|
|
elnum(1,1)=1
|
|
elnum(1,2)=2
|
|
goto 300
|
|
elseif(stdm.eq.7)then
|
|
write(6,222)1
|
|
read(5,*)thk(1)
|
|
c CD2 standardized medium
|
|
isg(1) = 0
|
|
inn(1) = 2
|
|
den(1) = 1.063 !Changed 6/4/2020 by SDP to correct CD2 density from 0.93
|
|
znumb(1,1)=6
|
|
znumb(1,2)=1
|
|
anumb(1,1)=12
|
|
anumb(1,2)=2
|
|
elnum(1,1)=1
|
|
elnum(1,2)=2
|
|
goto 300
|
|
elseif(stdm.eq.8)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
c helium gas standardized medium
|
|
isg(1) = 1
|
|
inn(1) = 1
|
|
znumb(1,1)=2
|
|
anumb(1,1)=4
|
|
elnum(1,1)=1
|
|
concn(1,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
goto 300
|
|
elseif(stdm.eq.9)then
|
|
write(6,230)1
|
|
read(5,*)prs(1),xln(1)
|
|
c hydrogen gas standardized medium
|
|
isg(1) = 1
|
|
inn(1) = 1
|
|
znumb(1,1)=1
|
|
anumb(1,1)=1
|
|
elnum(1,1)=2
|
|
concn(1,1)=1 !Added 6/4/2020 by SDP for explicit completeness
|
|
goto 300
|
|
else
|
|
goto 365
|
|
endif
|
|
else
|
|
goto 365
|
|
endif
|
|
|
|
write(6,240)1
|
|
read(5,*)inn(1)
|
|
|
|
do j = 1, inn(1)
|
|
write(6,250)1,j
|
|
read(5,*)znumb(1,j),anumb(1,j), elnum(1,j)
|
|
concn(1,j)=1.
|
|
enddo
|
|
|
|
goto 300
|
|
|
|
c Find the thickness of the material required to stop the stopee.
|
|
600 write(6,610)
|
|
read(5,*)j
|
|
|
|
615 tethk = 0.01
|
|
if(den(j).eq.(2.329).AND.znumb(j,1).eq.14.AND.
|
|
+ anumb(j,1).eq.28.AND.elnum(j,1).eq.1.and.isg(j).eq.0)then
|
|
error = siupb * 0.2329
|
|
do while (1.eq.1)
|
|
zp = z
|
|
thk(j) = tethk
|
|
edep = 0.0
|
|
call desorb(ianz, zp, a, energy, loste)
|
|
do k=1,ianz
|
|
edep = edep + loste(k)
|
|
enddo
|
|
if(edep.ge.energy.AND.error.lt.(0.01/0.2329))then
|
|
write(6,625)
|
|
write(6,620)tethk/0.2329+0.01
|
|
exit
|
|
elseif(edep.ge.energy.AND.tethk.eq.0.01)then
|
|
write(6,625)
|
|
write(6,620)0.01
|
|
write(6,*)edep
|
|
exit
|
|
elseif(edep.lt.energy.AND.tethk.ge.siupb*0.2329)then
|
|
write(6,630)
|
|
exit
|
|
elseif(edep.ge.energy)then
|
|
tethk = tethk - error
|
|
error = error/2.0
|
|
elseif(edep.lt.energy)then
|
|
tethk = tethk + error
|
|
error = error/2.0
|
|
endif
|
|
enddo
|
|
elseif(isg(j).eq.0)then
|
|
error = soupb
|
|
do while (1.eq.1)
|
|
zp = z
|
|
thk(j) = tethk
|
|
edep = 0.0
|
|
call desorb(ianz, zp, a, energy, loste)
|
|
do k=1,ianz
|
|
edep = edep + loste(k)
|
|
enddo
|
|
if(edep.ge.energy.AND.error.lt.0.01)then
|
|
write(6,625)
|
|
write(6,621)tethk+0.01
|
|
exit
|
|
elseif(edep.ge.energy.AND.tethk.eq.0.01)then
|
|
write(6,625)
|
|
write(6,621)0.01
|
|
exit
|
|
elseif(edep.lt.energy.AND.tethk.ge.siupb)then
|
|
write(6,631)
|
|
exit
|
|
elseif(edep.ge.energy)then
|
|
tethk = tethk - error
|
|
error = error/2.0
|
|
elseif(edep.lt.energy)then
|
|
tethk = tethk + error
|
|
error = error/2.0
|
|
endif
|
|
enddo
|
|
elseif(isg(j).eq.1)then
|
|
error = gaupb
|
|
do while (1.eq.1)
|
|
zp = z
|
|
xln(j) = tethk
|
|
edep = 0.0
|
|
call desorb(ianz, zp, a, energy, loste)
|
|
do k=1,ianz
|
|
edep = edep + loste(k)
|
|
enddo
|
|
if(edep.ge.energy.AND.error.lt.0.01)then
|
|
write(6,625)
|
|
write(6,622)tethk+0.01
|
|
exit
|
|
elseif(edep.ge.energy.AND.tethk.eq.0.01)then
|
|
write(6,625)
|
|
write(6,622)0.01
|
|
exit
|
|
elseif(edep.lt.energy.AND.tethk.ge.siupb)then
|
|
write(6,632)
|
|
exit
|
|
elseif(edep.ge.energy)then
|
|
tethk = tethk - error
|
|
error = error/2.0
|
|
elseif(edep.lt.energy)then
|
|
tethk = tethk + error
|
|
error = error/2.0
|
|
endif
|
|
enddo
|
|
else
|
|
write(6,630)
|
|
endif
|
|
|
|
goto 10
|
|
|
|
610 format(/'Which layer would you like to vary to determine',
|
|
+/'how much of it is required to stop the stopee?')
|
|
|
|
620 format(/f10.2, ' microns')
|
|
621 format(/f10.2, ' mg/cm2')
|
|
622 format(/f10.2, ' cm')
|
|
625 format(/'Amount of absorber to stop the stopee')
|
|
|
|
630 format(/'Not even 232 microns of the absorber stop the stopee.')
|
|
631 format(/'Not even 1 g/cm2 of the absorber stop the stopee.')
|
|
632 format(/'Not even 1 m of the absorber stop the stopee.')
|
|
|
|
633 format(/'The absorber is neither a gas nor a solid...')
|
|
|
|
|
|
c Perform caculation
|
|
400 zp = z
|
|
call desorb(ianz, zp, a, energy, loste)
|
|
|
|
edep = 0.0
|
|
|
|
|
|
c If particle stopped in a layer set the energy loss to zero in the rest
|
|
|
|
do j = 1, ianz
|
|
edep = edep + loste(j)
|
|
if(edep.ge.energy)then
|
|
do k = j + 1, ianz + 1
|
|
loste(k) = 0.0
|
|
enddo
|
|
goto 402
|
|
endif
|
|
enddo
|
|
|
|
c Produce output
|
|
402 write(6,510)z,a, energy
|
|
write(7,510)z,a, energy
|
|
write(6,520)ianz
|
|
write(7,520)ianz
|
|
|
|
do i = 1 ,ianz
|
|
if(isg(i).eq.0)then
|
|
write(6,530)i
|
|
write(7,530)i
|
|
write(6,540)den(i),thk(i)
|
|
write(7,540)den(i),thk(i)
|
|
elseif(isg(i).eq.1)then
|
|
write(6,550)i
|
|
write(7,550)i
|
|
write(6,560)prs(i),xln(i)
|
|
write(7,560)prs(i),xln(i)
|
|
endif
|
|
|
|
do j = 1, inn(i)
|
|
write(6,570)znumb(i,j),anumb(i,j),elnum(i,j)
|
|
write(7,570)znumb(i,j),anumb(i,j),elnum(i,j)
|
|
enddo
|
|
|
|
write(6,410)loste(i)
|
|
write(7,410)loste(i)
|
|
|
|
enddo
|
|
|
|
write(6,420)loste(ianz+1)
|
|
write(7,420)loste(ianz+1)
|
|
write(6,430)
|
|
|
|
goto 10
|
|
|
|
410 format('Energy lost in layer = ',f7.3,' MeV')
|
|
420 format(/'Energy remaining = ',f7.3,' MeV')
|
|
430 format(/'Output also written to stopit.log')
|
|
|
|
500 write(6,510)z,a, energy
|
|
write(6,520)ianz
|
|
|
|
do i = 1 ,ianz
|
|
if(isg(i).eq.0)then
|
|
write(6,530)i
|
|
write(6,540)den(i),thk(i)
|
|
elseif(isg(i).eq.1)then
|
|
write(6,550)i
|
|
write(6,560)prs(i),xln(i)
|
|
endif
|
|
|
|
do j = 1, inn(i)
|
|
write(6,570)znumb(i,j),anumb(i,j),elnum(i,j)
|
|
enddo
|
|
enddo
|
|
|
|
goto 10
|
|
|
|
510 format(//'Charged particle has Z = ',f3.0,' A = ',f3.0,' Initial
|
|
+energy = ',f8.3,' MeV.')
|
|
520 format(//'Absorber contains ',I2,' layers.')
|
|
530 format(//'Layer # ',I2,' - Solid Absorber')
|
|
540 format('Density = ',e10.4,' g/cm3 Thickness = ',e10.4,'
|
|
+mg/cm2')
|
|
550 format(//'Layer # ',I2,' - Gas Absorber')
|
|
560 format('Pressure = ',e10.4,' Torr Length = ',e10.4,' cm')
|
|
570 format('Z = ',f3.0,' A = ',f3.0,4x,'Atoms per molecule = ',f3.0)
|
|
|
|
1000 stop
|
|
end
|