Cleanup code in progress.

This commit is contained in:
salman 2013-02-20 14:53:56 +00:00
parent f9269571f5
commit abca9a346e

View File

@ -34,7 +34,7 @@ C
C MAJOR CHANGES: C MAJOR CHANGES:
C C
C Sep 1998: to create an executable for PC running under WIN95 C Sep 1998: to create an executable for PC running under WIN95
C using the DIGITAL VISUAL FORTRAN compiler (ed. Aug. 97) C using the DIGITAL VISUAL FORTRAN compiler (ed. Aug. 97)
C Insertion of !DEC$REAL:8 (all REAL are REAL*8) C Insertion of !DEC$REAL:8 (all REAL are REAL*8)
C Conversion of function to double precession C Conversion of function to double precession
C Conversion of function to integer*4 C Conversion of function to integer*4
@ -46,7 +46,7 @@ C UNIT 21 (output.data) changed to file name AUSGABE1.out
C Insertion of UNIT 22 (only range data), file name AUSGABE1.rge C Insertion of UNIT 22 (only range data), file name AUSGABE1.rge
C Dec 1998: Introduction of gaussian distributed projectile energies C Dec 1998: Introduction of gaussian distributed projectile energies
C new variable RI2 = random number initializer for gaussian energy distribution C new variable RI2 = random number initializer for gaussian energy distribution
C new variable ISEED2 = random number for gaussian energy distribution C new variable ISEED2 = random number for gaussian energy distribution
C new variable Esig = sigma of the energy distribution C new variable Esig = sigma of the energy distribution
C if Esig=0. then fixed projectile energy C if Esig=0. then fixed projectile energy
C new variable Epar = projectile energy C new variable Epar = projectile energy
@ -69,7 +69,7 @@ C Unit 99 for file ausgabe1.err inserted, if and IF... (see below
C then a message is included into this file C then a message is included into this file
C IF's inserted - can be found by using find WRITE(99, C IF's inserted - can be found by using find WRITE(99,
C DABS inserted for DLOG and DLOG10 arguments C DABS inserted for DLOG and DLOG10 arguments
C Mai 1999: Version h C Mai 1999: Version h
C for TRIMSP simulations running in batch mode (i.e. to calculate C for TRIMSP simulations running in batch mode (i.e. to calculate
C a serie of different range profiles using the same target an output C a serie of different range profiles using the same target an output
C file FOR33 is created. In this file the following parameters are C file FOR33 is created. In this file the following parameters are
@ -87,8 +87,8 @@ C Range file (output to unit 22) slightly changed. Now the midth o
C is calculated and only the number of particles is written to the file C is calculated and only the number of particles is written to the file
C C
C C
C Jun 1999: Version j1 C Jun 1999: Version j1
C changed calculation of Firsoc screening length according to the IRCU 49 report. C changed calculation of Firsoc screening length according to the IRCU 49 report.
C the Andersen-Ziegler tables (file stopping.dat) are revised,i.e. the coefficients C the Andersen-Ziegler tables (file stopping.dat) are revised,i.e. the coefficients
C from the ICRU 49 report are included for all elements (file stopicru.dat) C from the ICRU 49 report are included for all elements (file stopicru.dat)
C C
@ -103,8 +103,8 @@ C Nov 1999: Version j1a
C UNIT33: now Etrans, sigmaEtrans, Eback, sigmaEback included C UNIT33: now Etrans, sigmaEtrans, Eback, sigmaEback included
C Bug fixed in line 2084, location of 'write to unit33' changed. C Bug fixed in line 2084, location of 'write to unit33' changed.
C Dec 1999: Version k C Dec 1999: Version k
C inclusion of variables C inclusion of variables
C tryE :how often a random energy is calculated by the random generator C tryE :how often a random energy is calculated by the random generator
C for large E0 this number should be the same as the number of projectiles nh C for large E0 this number should be the same as the number of projectiles nh
C negE :how often a negative energy is calculated by the random generator C negE :how often a negative energy is calculated by the random generator
C tryE - negE should be nh C tryE - negE should be nh
@ -118,8 +118,8 @@ C the options alpha = -1 or alpha = -2 (see file TRVMC95-v4k.txt)
C inclusion of RI3: random seed for the calculation of the gaussian distribution C inclusion of RI3: random seed for the calculation of the gaussian distribution
C of alpha. C of alpha.
C Header line for file for33 included. C Header line for file for33 included.
C Jan 2000: no new version but C Jan 2000: no new version but
C included energy scaling of particle reflection coefficients after Thomas et al. C included energy scaling of particle reflection coefficients after Thomas et al.
C NIM B69 (1992) 427 C NIM B69 (1992) 427
C the calculated particle reflection coefficients prcoeff are written to the fort.33 file C the calculated particle reflection coefficients prcoeff are written to the fort.33 file
C prc is calculated if 1st layer consists only one element ! C prc is calculated if 1st layer consists only one element !
@ -149,47 +149,40 @@ C in the 100 depth intervals agrees wit
C number of particles stopped in the different layers C number of particles stopped in the different layers
C IF 0 not, message will be written in the range file C IF 0 not, message will be written in the range file
C UNIT 21 and UNIT22 C UNIT 21 and UNIT22
c November 2000. Tanya Riseman c Nov 2000: Tanya Riseman
c Starts porting program to Open VMS and DEC UNIX. c Starts porting program to Open VMS and DEC UNIX.
c Compile options: f90/list/warn/ext c Compile options: f90/list/warn/ext
c Minor problems with continuation characters in wrong column and c Minor problems with continuation characters in wrong column and
c with a few variables undeclared, mostly functions. c with a few variables undeclared, mostly functions.
c Make code fit on 72 columns, because -extend_source c Make code fit on 72 columns, because -extend_source
c does not appear to work on DEC Unix. c does not appear to work on DEC Unix.
c Start changing strings in format and write statments so that c Start changing strings in format and write statments so that
c strings don't straddle continuation character in c strings don't straddle continuation character in
c column 6. Straddling can be non-portable! c column 6. Straddling can be non-portable!
c Comment out !DEC$REAL:8 because all c Comment out !DEC$REAL:8 because all
c reals are already declared REAL*8. Add implicit none. c reals are already declared REAL*8. Add implicit none.
c c
c June 2002. Thomas Prokscha PSI c Jun 2002: Thomas Prokscha PSI
c Stopped porting to f90, use f77 only. c Stopped porting to f90, use f77 only.
c replaced all non-standard f77 function by standard functions. c replaced all non-standard f77 function by standard functions.
c use ranlux random number generator from the CERN library (libmathlib.a must c use ranlux random number generator from the CERN library (libmathlib.a must
c be installed) to get rid of machine specific random number generators. c be installed) to get rid of machine specific random number generators.
c Add pre-compiler instructions for making different output for the .rge files c Add pre-compiler instructions for making different output for the .rge files
c on Windows and Unix. c on Windows and Unix.
c c
c October 2002 Thomas Prokscha PSI c Oct 2002: Thomas Prokscha PSI
c corrected error in the calculation of the Thomas-Fermi reduced energy: c corrected error in the calculation of the Thomas-Fermi reduced energy:
c it was 1/(Z1 Z2 * sqrt( Z1**2/3 + Z2**2/3)) c it was 1/(Z1 Z2 * sqrt( Z1**2/3 + Z2**2/3))
c it must be: c it must be:
c 1/(Z1 Z2 * sqrt( Z1**(2/3) + Z2**(2/3))) c 1/(Z1 Z2 * sqrt( Z1**(2/3) + Z2**(2/3)))
c c
c August 2009 Zaher Salman PSI c Aug 2009: Zaher Salman PSI
c changed input file reading to non-formatted. This still works c Changed input file reading to non-formatted. This still works
c with old input files, but makes it much easier to create new c with old input files, but makes it much easier to create new
c input files without the hassle of formatting. c input files without the hassle of formatting.
c Included the source of ranlux for random numbers generation c Included the source of ranlux for random numbers generation
c into trimsp7l source. No need for cern libraries to be installed. c into trimsp7l source. No need for cern libraries to be installed.
c c
CDIR$ NOLIST
C
cTR !DEC$REAL:8
C
C IMPLICIT INTEGER (i-j)
C IMPLICIT REAL*8 (a-h,k-z)
C
c------------------------------------------- c-------------------------------------------
c check OS c check OS
c c
@ -237,9 +230,7 @@ c
# ,MEAGS(102,12,22,30) # ,MEAGS(102,12,22,30)
# ,MEASL(75,21,30) # ,MEASL(75,21,30)
INTEGER*4 MEAST(102,22,30),MAGST(62,22,30) INTEGER*4 MEAST(102,22,30),MAGST(62,22,30)
C # ,MEAGST(102,36,22,10) von Eckstein herauskommentiert
# ,MEASTL(75,21,30) # ,MEASTL(75,21,30)
C REAL*8 MEAGSL(75,36,21),EAGSL(75) von Eckstein herauskommentiert
INTEGER*4 NJ(7),JT(7),ILD(7) INTEGER*4 NJ(7),JT(7),ILD(7)
INTEGER*4 LLL(64),JJJ(64),IK(64) INTEGER*4 LLL(64),JJJ(64),IK(64)
INTEGER*4 me(5000),nli(0:7),irpl(7) INTEGER*4 me(5000),nli(0:7),irpl(7)
@ -257,7 +248,7 @@ C REAL*8 MEAGSL(75,36,21),EAGSL(75) von Eckstein herauskommentiert
INTEGER*4 IPB1,KIB,IPT,IE,IERLOG,IAGB,KIT,IMA,IIM INTEGER*4 IPB1,KIB,IPT,IE,IERLOG,IAGB,KIT,IMA,IIM
INTEGER*4 im1,im2,im3,IG2,ies,ias INTEGER*4 im1,im2,im3,IG2,ies,ias
INTEGER*4 JE,JA,JG,JTJ,JTK,JTL INTEGER*4 JE,JA,JG,JTJ,JTK,JTL
C REAL Variablen C REAL Variables
REAL*8 CVMGT REAL*8 CVMGT
REAL*8 X(64),Y(64),Z(64),E(64),PL(64) REAL*8 X(64),Y(64),Z(64),E(64),PL(64)
# ,COSX(64),COSY(64),COSZ(64),SINE(64) # ,COSX(64),COSY(64),COSZ(64),SINE(64)
@ -320,13 +311,11 @@ C REAL Variablen
# ,KL(35,35),KOR(35,35),KLM(7,35) # ,KL(35,35),KOR(35,35),KLM(7,35)
REAL*8 MU1(35),EC1(35),A1(35),F1(35),KL1(35),KOR1(35) REAL*8 MU1(35),EC1(35),A1(35),F1(35),KL1(35),KOR1(35)
# ,DI(35),EP(35),ZZ(35),TM(35) # ,DI(35),EP(35),ZZ(35),TM(35)
C REAL*8 SL(64,5),SM(64,5),SH(64,5),CH(92,12),CHE(92,9)
REAL*8 CH1(7,5),CH2(7,5),CH3(7,5),CH4(7,5),CH5(7,5) REAL*8 CH1(7,5),CH2(7,5),CH3(7,5),CH4(7,5),CH5(7,5)
REAL*8 CHM1(7) REAL*8 CHM1(7)
REAL*8 SM(64),SH(64,5) REAL*8 SM(64),SH(64,5)
REAL*8 FIESB(30),SEESB(30),THESB(30),FOESB(30) REAL*8 FIESB(30),SEESB(30),THESB(30),FOESB(30)
# ,SGMESB(30),DFIESB(30),DSEESB(30),DTHESB(30) # ,SGMESB(30),DFIESB(30),DSEESB(30),DTHESB(30)
C REAL*8 ESVDL(2000)
REAL*8 pi,c,E0,de,alfa,z1,rtheta,cu,enot,esb,est,esp REAL*8 pi,c,E0,de,alfa,z1,rtheta,cu,enot,esb,est,esp
REAL*8 E2,AB,FP,AN REAL*8 E2,AB,FP,AN
REAL*8 Esig,Epar REAL*8 Esig,Epar
@ -406,7 +395,7 @@ c fuer part. reflec. coeff. Berechnung
REAL*8 PL1S,PL2S,PL3S,PL4S,PL5S,PL6S REAL*8 PL1S,PL2S,PL3S,PL4S,PL5S,PL6S
REAL*8 YH,HN,CST,BI,BIL,YSP,YSPL,EEE REAL*8 YH,HN,CST,BI,BIL,YSP,YSPL,EEE
REAL*4 random,ran2(2) REAL*4 random,ran2(2)
C CHARACTER Variablen C CHARACTER Variables
CHARACTER*18 DPOT,DPOTR,DKDEE1,DKDEE2 CHARACTER*18 DPOT,DPOTR,DKDEE1,DKDEE2
CHARACTER filein*8,inext*4,fileout*8,outext*4,innam*12,outnam*12 CHARACTER filein*8,inext*4,fileout*8,outext*4,innam*12,outnam*12
CHARACTER rgenam*12,rgeext*4,errnam*12,errext*4 CHARACTER rgenam*12,rgeext*4,errnam*12,errext*4
@ -416,10 +405,10 @@ C CHARACTER Variablen
CHARACTER month_start*4,month_stop*4,day_start*2,day_stop*2 CHARACTER month_start*4,month_stop*4,day_start*2,day_stop*2
CHARACTER year_start*4,year_stop*4,hour_start*2,hour_stop*2 CHARACTER year_start*4,year_stop*4,hour_start*2,hour_stop*2
CHARACTER min_start*2,min_stop*2,sec_start*2,sec_stop*2 CHARACTER min_start*2,min_stop*2,sec_start*2,sec_stop*2
C
COMMON /A/ M1,VELC,ZARG COMMON /A/ M1,VELC,ZARG
COMMON /B/ TI,SHEATH,CALFA COMMON /B/ TI,SHEATH,CALFA
C
DATA PI/3.14159265358979D0/, ICW/100/, E2/14.399651D0/ DATA PI/3.14159265358979D0/, ICW/100/, E2/14.399651D0/
DATA AB/0.52917725D0/, FP/0.885341377D0/, AN/0.60221367D0/ DATA AB/0.52917725D0/, FP/0.885341377D0/, AN/0.60221367D0/
DATA inext/'.inp'/,outext/'.out'/,rgeext/'.rge'/ DATA inext/'.inp'/,outext/'.out'/,rgeext/'.rge'/
@ -477,7 +466,6 @@ C
DATA ICDR/3500*0/,ICDIRN/3500*0/,IONR/100*0.D0/ DATA ICDR/3500*0/,ICDIRN/3500*0/,IONR/100*0.D0/
DATA DENTR/100*0.D0/,DMGNR/100*0.D0/ DATA DENTR/100*0.D0/,DMGNR/100*0.D0/
DATA IPL/100*0/,IPLB/100*0/,IPLT/100*0/ DATA IPL/100*0/,IPLB/100*0/,IPLT/100*0/
c DATA IRP/102*0/ gibt witzigweise einen Fehler, aber warum????
DATA IRPL/7*0/ DATA IRPL/7*0/
DATA ICDJT/35*0/,ICDJTR/35*0/,ICDITR/35*0/ DATA ICDJT/35*0/,ICDJTR/35*0/,ICDITR/35*0/
DATA ICD/3500*0/,ELP/3500*0.D0/,ELD/3500*0.D0/ DATA ICD/3500*0/,ELP/3500*0.D0/,ELD/3500*0.D0/
@ -498,21 +486,18 @@ c DATA IRP/102*0/ gibt witzigweise einen Fehler, aber warum????
DATA ELETR/35*0.D0/,ELITR/35*0.D0/,ELPTR/35*0.D0/ DATA ELETR/35*0.D0/,ELITR/35*0.D0/,ELPTR/35*0.D0/
DATA ELDTR/35*0.D0/ DATA ELDTR/35*0.D0/
DATA Epar/0.D0/ DATA Epar/0.D0/
c part. refl. coeff. from Thomas et al. C part. refl. coeff. from Thomas et al.
DATA PRC/0.825D0,21.41D0,8.606D0,0.6425D0,1.907D0,1.927D0/ DATA PRC/0.825D0,21.41D0,8.606D0,0.6425D0,1.907D0,1.927D0/
DATA number_in_layer /7*0/ DATA number_in_layer /7*0/
C
C EXTERNAL CVMGT,ILLZ,SCOPY,ISRCHEQ,ISRCHFGE,ISRCHFGT
C
innam=filein//inext innam=filein//inext
outnam=fileout//outext outnam=fileout//outext
rgenam=fileout//rgeext rgenam=fileout//rgeext
errnam=fileout//errext errnam=fileout//errext
C
OPEN(UNIT=99,file=errnam,STATUS='new') OPEN(UNIT=99,file=errnam,STATUS='new')
OPEN(UNIT=11,file=innam,STATUS='unknown',ERR=13591) OPEN(UNIT=11,file=innam,STATUS='unknown',ERR=13591)
C OPEN(UNIT=31,NAME='energ.dat',STATUS='new')
C
READ(11,*) Z1,M1,E0,Esig,ALPHA,ALPHASIG,EF,ESB,SHEATH,ERC READ(11,*) Z1,M1,E0,Esig,ALPHA,ALPHASIG,EF,ESB,SHEATH,ERC
READ(11,*) NH,RI,RI2,RI3,X0,RD,CW,CA,KK0,KK0R,KDEE1,KDEE2 READ(11,*) NH,RI,RI2,RI3,X0,RD,CW,CA,KK0,KK0R,KDEE1,KDEE2
# ,IPOT,IPOTR,IRL # ,IPOT,IPOTR,IRL
@ -546,24 +531,15 @@ C
WRITE(*,*) ZT(I,1),ZT(I,2),ZT(I,3),ZT(I,4),ZT(I,5) WRITE(*,*) ZT(I,1),ZT(I,2),ZT(I,3),ZT(I,4),ZT(I,5)
WRITE(*,*) MT(I,1),MT(I,2),MT(I,3),MT(I,4),MT(I,5) WRITE(*,*) MT(I,1),MT(I,2),MT(I,3),MT(I,4),MT(I,5)
WRITE(*,*) CO(I,1),CO(I,2),CO(I,3),CO(I,4),CO(I,5) WRITE(*,*) CO(I,1),CO(I,2),CO(I,3),CO(I,4),CO(I,5)
c WRITE(*,103) SBE(I,1),SBE(I,2),SBE(I,3),SBE(I,4),SBE(I,5)
c WRITE(*,103) ED(I,1),ED(I,2),ED(I,3),ED(I,4),ED(I,5)
c WRITE(*,103) BE(I,1),BE(I,2),BE(I,3),BE(I,4),BE(I,5)
c WRITE(*,107) CH1(I,1),CH1(I,2),CH1(I,3),CH1(I,4),CH1(I,5)
c WRITE(*,107) CH2(I,1),CH2(I,2),CH2(I,3),CH2(I,4),CH2(I,5)
c WRITE(*,107) CH3(I,1),CH3(I,2),CH3(I,3),CH3(I,4),CH3(I,5)
c WRITE(*,107) CH4(I,1),CH4(I,2),CH4(I,3),CH4(I,4),CH4(I,5)
c WRITE(*,107) CH5(I,1),CH5(I,2),CH5(I,3),CH5(I,4),CH5(I,5)
1359 CONTINUE 1359 CONTINUE
C
100 FORMAT(2F7.2,1F12.2,7F9.2) 100 FORMAT(2F7.2,1F12.2,7F9.2)
101 FORMAT(I9,3F8.0,1F7.2,1F7.0,2F7.2,6I4,I3) 101 FORMAT(I9,3F8.0,1F7.2,1F7.0,2F7.2,6I4,I3)
102 FORMAT(7F9.2,14F7.2) 102 FORMAT(7F9.2,14F7.2)
103 FORMAT(5F9.4) 103 FORMAT(5F9.4)
107 FORMAT(5F12.6) 107 FORMAT(5F12.6)
C
C open statement for output files, removed from line 2449 ff to here C open statement for output files, removed from line 2449 ff to here
C
OPEN(UNIT=21,FILE=outnam,STATUS='new',ERR=6000) OPEN(UNIT=21,FILE=outnam,STATUS='new',ERR=6000)
GOTO 6001 GOTO 6001
6000 WRITE(*,*)' File schon vorhanden, Gib neue Ausgabedatei an (A8)' 6000 WRITE(*,*)' File schon vorhanden, Gib neue Ausgabedatei an (A8)'
@ -574,13 +550,11 @@ C
6001 OPEN(UNIT=22,FILE=rgenam,STATUS='new') 6001 OPEN(UNIT=22,FILE=rgenam,STATUS='new')
WRITE(21,1000) WRITE(21,1000)
1000 FORMAT(1H1/,6X,'* PROGRAM TRVMC95 - V TrimSP7L 17.Oct.02 TP *') 1000 FORMAT(1H1/,6X,'* PROGRAM TRVMC95 - V TrimSP7L 17.Oct.02 TP *')
c TP 1000 FORMAT(1H1/,6X,'* PROGRAM TRVMC95 - Vers. TrimSP7L 22.Nov.00 *')
c TR 1000 FORMAT(1H1/,6X,'** PROGRAM TRVMC95 - V TrimSP7L 26.06.00 **')
C
C 1st CALL DATE_AND_TIME C 1st CALL DATE_AND_TIME
CALL DATE_AND_TIME(Real_Clock(1),Real_Clock(2),Real_Clock(3), CALL DATE_AND_TIME(Real_Clock(1),Real_Clock(2),Real_Clock(3),
# Date_Time) # Date_Time)
C
IF(Date_Time(2).EQ.1) THEN IF(Date_Time(2).EQ.1) THEN
month_start='Jan.' month_start='Jan.'
days_start_total=Date_Time(3) days_start_total=Date_Time(3)
@ -621,13 +595,13 @@ C
C in seconds from beginning of year C in seconds from beginning of year
seconds_start_total=Date_Time(7)+(Date_Time(6)*60)+ seconds_start_total=Date_Time(7)+(Date_Time(6)*60)+
# (Date_Time(5)*3600)+(days_start_total-1)*86400 # (Date_Time(5)*3600)+(days_start_total-1)*86400
C
READ(Real_Clock(1)(1:4),'(A4)')year_start READ(Real_Clock(1)(1:4),'(A4)')year_start
READ(Real_Clock(1)(7:8),'(A2)')day_start READ(Real_Clock(1)(7:8),'(A2)')day_start
READ(Real_Clock(2)(1:2),'(A2)')hour_start READ(Real_Clock(2)(1:2),'(A2)')hour_start
READ(Real_Clock(2)(3:4),'(A2)')min_start READ(Real_Clock(2)(3:4),'(A2)')min_start
READ(Real_Clock(2)(5:6),'(A2)')sec_start READ(Real_Clock(2)(5:6),'(A2)')sec_start
C
WRITE(21,*) WRITE(21,*)
WRITE(21,10050)day_start,month_start,year_start, WRITE(21,10050)day_start,month_start,year_start,
# hour_start,min_start,sec_start # hour_start,min_start,sec_start
@ -635,7 +609,6 @@ C
# 1x,A2,':',A2,':',A2) # 1x,A2,':',A2,':',A2)
C SET INTERVAL CONSTANTS FOR OUTPUT C SET INTERVAL CONSTANTS FOR OUTPUT
C
DE = 1.D0 DE = 1.D0
DA = 3.D0 DA = 3.D0
DG = 3.D0 DG = 3.D0
@ -656,18 +629,17 @@ C
DAW = BW/DA DAW = BW/DA
DGW = BW/DG DGW = BW/DG
DGIK = BW/DGI DGIK = BW/DGI
C
C CALCULATION OF CHARGE AND MASS DEPENDENT CONSTANTS C CALCULATION OF CHARGE AND MASS DEPENDENT CONSTANTS
C
PI2=2.D0*PI PI2=2.D0*PI
ABC=AB*FP ABC=AB*FP
LMAX=7 LMAX=7
JMAX=5 JMAX=5
L=ISRCHEQ(LMAX,DX(1),1,0.D0)-1 L=ISRCHEQ(LMAX,DX(1),1,0.D0)-1
C
C Checks wether depth interval is an integer denominator of layer thickness or not C Checks wether depth interval is an integer denominator of layer thickness or not
C If not, calculated implantation profile is not correct. C If not, calculated implantation profile is not correct.
C
depth_interval_flag = 1 depth_interval_flag = 1
LOOP_Check_layer_thick : DO K=1,L-1 LOOP_Check_layer_thick : DO K=1,L-1
IF(.NOT.EQUAL(DX(K)/CW-DBLE(IDINT(DX(K)/CW)),0.D0)) THEN IF(.NOT.EQUAL(DX(K)/CW-DBLE(IDINT(DX(K)/CW)),0.D0)) THEN
@ -679,7 +651,6 @@ C
DO 165 I=1,L DO 165 I=1,L
DO 155 J=1,JMAX DO 155 J=1,JMAX
IF(EQUAL(CO(I,J),0.D0)) GOTO 156 IF(EQUAL(CO(I,J),0.D0)) GOTO 156
C IF(CO(I,J).D0EQ.D00.D000) GO TO 156
155 CONTINUE 155 CONTINUE
J=JMAX+1 J=JMAX+1
156 NJ(I)=J-1 156 NJ(I)=J-1
@ -819,9 +790,7 @@ C ZBL POTENTIAL (IPOTR=3)
C KLM(LL,I) = KLM(LL,I)+CK(LL)*CO(LL,J)*KL(I,J+JT(LL)) C KLM(LL,I) = KLM(LL,I)+CK(LL)*CO(LL,J)*KL(I,J+JT(LL))
KLM(LL,I) = KLM(LL,I)+CO(LL,J)*KL(I,J+JT(LL)) KLM(LL,I) = KLM(LL,I)+CO(LL,J)*KL(I,J+JT(LL))
193 CONTINUE 193 CONTINUE
C
C ALPHA = CVMGT( .001, ALPHA, ALPHA.EQ.0. )
C ALPHA = CVMGT( 179.999, ALPHA, ALPHA.EQ.180.)
ALPHA = CVMGT( .001D0, ALPHA, EQUAL(ALPHA,0.D0)) ALPHA = CVMGT( .001D0, ALPHA, EQUAL(ALPHA,0.D0))
ALPHA = CVMGT( 179.999D0, ALPHA, EQUAL(ALPHA,180.D0)) ALPHA = CVMGT( 179.999D0, ALPHA, EQUAL(ALPHA,180.D0))
@ -831,9 +800,9 @@ C ALPHA = CVMGT( 179.999, ALPHA, ALPHA.EQ.180.)
8883 FORMAT(1X,'ERROR : IF ALPHA.GE.90. THEN IT MUST BE X0.LE.0.') 8883 FORMAT(1X,'ERROR : IF ALPHA.GE.90. THEN IT MUST BE X0.LE.0.')
GO TO 8000 GO TO 8000
8882 CONTINUE 8882 CONTINUE
C
C SET CONSTANT DISTANCES C SET CONSTANT DISTANCES
C
TT = XX(L) TT = XX(L)
INEL = 0 INEL = 0
HLM = CVMGT( 0.D0, -.5D0*LM(1), INEL.EQ.0) HLM = CVMGT( 0.D0, -.5D0*LM(1), INEL.EQ.0)
@ -848,7 +817,7 @@ C
SUT = DMAX1(SUTR,DMAX1(SUT1,SUT2)) SUT = DMAX1(SUTR,DMAX1(SUT1,SUT2))
XC = CVMGT( X0, -SU, X0.GT.0.D0) XC = CVMGT( X0, -SU, X0.GT.0.D0)
RT = TT-RD RT = TT-RD
C
IF(E0.GE.0.D0) GO TO 51 IF(E0.GE.0.D0) GO TO 51
C C
C SET CONSTANTS FOR MAXWELLIAN DISTRIBUTION C SET CONSTANTS FOR MAXWELLIAN DISTRIBUTION
@ -868,13 +837,10 @@ C
IY = IDINT(RI) IY = IDINT(RI)
IY2 = IDINT(RI2) IY2 = IDINT(RI2)
IY3 = IDINT(RI3) IY3 = IDINT(RI3)
CC ANFANG = RANSET(IY)
CC ANFANG = SRAND48(IY)
ISEED = IY ISEED = IY
ISEED2 = IY2 ISEED2 = IY2
ISEED3 = IY3 ISEED3 = IY3
C WRITE(*,*)ISEED
C
IF ( E0.GT.0.D0 ) GO TO 47 IF ( E0.GT.0.D0 ) GO TO 47
IF ( ALPHA.GE.0.D0 ) THEN IF ( ALPHA.GE.0.D0 ) THEN
C C
@ -884,10 +850,10 @@ C
DO 49 IV=1,NUM DO 49 IV=1,NUM
EMX = EMX+E(IV) EMX = EMX+E(IV)
49 CONTINUE 49 CONTINUE
DO iv=1,num DO iv=1,num
ne = IDINT(DMIN1(5000.D0,e(iv)+1.D0)) ne = IDINT(DMIN1(5000.D0,e(iv)+1.D0))
me(ne) = me(ne)+1 me(ne) = me(ne)+1
ENDDO ENDDO
c c
GO TO 56 GO TO 56
C C
@ -907,30 +873,26 @@ C
IF(EQUAL(Esig,0.D0)) THEN IF(EQUAL(Esig,0.D0)) THEN
C FIXED PROJECTILE ENERGY C FIXED PROJECTILE ENERGY
DO IV=1,NUM DO IV=1,NUM
E(IV) = E0 E(IV) = E0
C WRITE(*,*)' Da Esig=0 ist E=E0' ENDDO
ENDDO ELSE
ELSE
C GAUSSIAN ENERGY DISTRIBUTION C GAUSSIAN ENERGY DISTRIBUTION
DO IV=1,NUM DO IV=1,NUM
5200 CALL ENERGGAUSS(ISEED2,Esig,Epar,E0) 5200 CALL ENERGGAUSS(ISEED2,Esig,Epar,E0)
tryE = tryE+1 tryE = tryE+1
IF(Epar.LE.0.0D0) THEN IF(Epar.LE.0.0D0) THEN
negE = negE+1 negE = negE+1
GO TO 5200 GO TO 5200
ENDIF ENDIF
E(IV)=Epar E(IV)=Epar
C WRITE(*,*)E(IV),Epar,E0 ENDDO
ENDDO
ENDIF ENDIF
C C
C die nachfolgende Zeile wurden von Linie 633 hier hin verschoben C die nachfolgende Zeile wurden von Linie 633 hier hin verschoben
C C
SFE = DMIN1(SB(1),SB(L)) SFE = DMIN1(SB(1),SB(L))
C
IF ( ALPHA.GE.0.D0 ) THEN IF ( ALPHA.GE.0.D0 ) THEN
C IF(EQUAL(ALPHASIG,0.D0))THEN
IF(EQUAL(ALPHASIG,0.D0))THEN
C C
C FIXED PROJECTILE ANGLE C FIXED PROJECTILE ANGLE
C C
@ -967,22 +929,16 @@ C
C COSINE ANGLE DISTRIBUTION (THREE-DIMENSIONAL) C COSINE ANGLE DISTRIBUTION (THREE-DIMENSIONAL)
C C
CDIR$ IVDEP CDIR$ IVDEP
DO 53 IV=1,NUM DO IV=1,NUM
CC RPHI = PI2*RANF() call ranlux(ran2,2)
CC RPHI = PI2*DRAND48() RPHI = PI2*DBLE(ran2(1))
CC RPHI = PI2*DBLE(RAN(ISEED)) RTHETA = DBLE(ran2(2))
call ranlux(ran2,2) COSX(IV) = DSQRT(RTHETA)
RPHI = PI2*DBLE(ran2(1)) SINE(IV) = DSQRT(1.D0-RTHETA)
CC RTHETA = RANF() COSY(IV) = SINE(IV)*DCOS(RPHI)
CC RTHETA = DRAND48() COSZ(IV) = SINE(IV)*DSIN(RPHI)
CC RTHETA = DBLE(RAN(ISEED)) ENDDO
RTHETA = DBLE(ran2(2))
COSX(IV) = DSQRT(RTHETA)
SINE(IV) = DSQRT(1.D0-RTHETA)
COSY(IV) = SINE(IV)*DCOS(RPHI)
COSZ(IV) = SINE(IV)*DSIN(RPHI)
53 CONTINUE
C
ELSEIF (EQUAL(ALPHA,-1.D0).AND.X0.GT.0.D0) THEN ELSEIF (EQUAL(ALPHA,-1.D0).AND.X0.GT.0.D0) THEN
C ELSEIF ( ALPHA.EQ.-1. AND. X0.GT.0. ) THEN C ELSEIF ( ALPHA.EQ.-1. AND. X0.GT.0. ) THEN
C C
@ -993,16 +949,16 @@ CDIR$ IVDEP
CC RPHI = PI2*RANF() CC RPHI = PI2*RANF()
CC RPHI = PI2*DRAND48() CC RPHI = PI2*DRAND48()
CC RPHI = PI2*DBLE(RAN(ISEED)) CC RPHI = PI2*DBLE(RAN(ISEED))
call ranlux(ran2,2) call ranlux(ran2,2)
RPHI = PI2*DBLE(ran2(1)) RPHI = PI2*DBLE(ran2(1))
CC RTHETA = RANF() CC RTHETA = RANF()
CC RTHETA = DRAND48() CC RTHETA = DRAND48()
CC RTHETA = DBLE(RAN(ISEED)) CC RTHETA = DBLE(RAN(ISEED))
RTHETA = DBLE(ran2(2)) RTHETA = DBLE(ran2(2))
COSX(IV) = 1.D0 -2.D0*RTHETA COSX(IV) = 1.D0 -2.D0*RTHETA
SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV)) SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV))
COSY(IV) = SINE(IV) *DSIN(RPHI) COSY(IV) = SINE(IV) *DSIN(RPHI)
COSZ(IV) = SINE(IV) *DCOS(RPHI) COSZ(IV) = SINE(IV) *DCOS(RPHI)
50 CONTINUE 50 CONTINUE
C C
C ELSEIF ( ALPHA.EQ.-1. AND. X0.LE.0. ) THEN C ELSEIF ( ALPHA.EQ.-1. AND. X0.LE.0. ) THEN
@ -1013,48 +969,48 @@ CDIR$ IVDEP
CC RPHI = PI2*RANF() CC RPHI = PI2*RANF()
CC RPHI = PI2*DRAND48() CC RPHI = PI2*DRAND48()
CC RPHI = PI2*DBLE(RAN(ISEED)) CC RPHI = PI2*DBLE(RAN(ISEED))
call ranlux(ran2,2) call ranlux(ran2,2)
RPHI = PI2*DBLE(ran2(1)) RPHI = PI2*DBLE(ran2(1))
CC RTHETA = RANF() CC RTHETA = RANF()
CC RTHETA = DRAND48() CC RTHETA = DRAND48()
CC RTHETA = DBLE(RAN(ISEED)) CC RTHETA = DBLE(RAN(ISEED))
RTHETA = DBLE(ran2(2)) RTHETA = DBLE(ran2(2))
COSX(IV) = 1.D0 -RTHETA COSX(IV) = 1.D0 -RTHETA
SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV)) SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV))
COSY(IV) = SINE(IV) *DSIN(RPHI) COSY(IV) = SINE(IV) *DSIN(RPHI)
COSZ(IV) = SINE(IV) *DCOS(RPHI) COSZ(IV) = SINE(IV) *DCOS(RPHI)
55 CONTINUE 55 CONTINUE
C C
ENDIF ENDIF
C C
56 IF ( X0.GT.0.D0 ) GO TO 59 56 IF ( X0.GT.0.D0 ) GO TO 59
C C
C EXTERNAL START C EXTERNAL START
C C
DO 57 IV=1,NUM DO 57 IV=1,NUM
SINA = SINE(IV) SINA = SINE(IV)
COSX(IV) = DSQRT( ( E(IV)*COSX(IV)*COSX(IV) +ESB) COSX(IV) = DSQRT( ( E(IV)*COSX(IV)*COSX(IV) +ESB)
& /( E(IV) +ESB)) & /( E(IV) +ESB))
SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV)) SINE(IV) = DSQRT( 1.D0 -COSX(IV)*COSX(IV))
COSY(IV) = COSY(IV) *SINE(IV) /SINA COSY(IV) = COSY(IV) *SINE(IV) /SINA
COSZ(IV) = COSZ(IV) *SINE(IV) /SINA COSZ(IV) = COSZ(IV) *SINE(IV) /SINA
E(IV) = E(IV) + ESB E(IV) = E(IV) + ESB
57 CONTINUE 57 CONTINUE
C C
C LOCUS OF FIRST COLLISION C LOCUS OF FIRST COLLISION
C C
59 JL = ISRCHFGT(L,XX(1),1,X0) 59 JL = ISRCHFGT(L,XX(1),1,X0)
C WRITE(*,*)X0 C WRITE(*,*)X0
DO 58 IV=1,NUM DO 58 IV=1,NUM
CC RA = CVMGT(RANF(),1.0,X0.LE.0.0) CC RA = CVMGT(RANF(),1.0,X0.LE.0.0)
CC RA = CVMGT(DRAND48(),1.0,X0.LE.0.0) CC RA = CVMGT(DRAND48(),1.0,X0.LE.0.0)
CC RA = CVMGT(DBLE(RAN(ISEED)),1.D0,X0.LE.0.0D0) CC RA = CVMGT(DBLE(RAN(ISEED)),1.D0,X0.LE.0.0D0)
call ranlux(random, 1) call ranlux(random, 1)
RA = CVMGT(DBLE(random),1.D0,X0.LE.0.0D0) RA = CVMGT(DBLE(random),1.D0,X0.LE.0.0D0)
X(IV) = XC + LM(JL) *RA *COSX(IV) X(IV) = XC + LM(JL) *RA *COSX(IV)
Y(IV) = LM(JL) *RA *COSY(IV) Y(IV) = LM(JL) *RA *COSY(IV)
Z(IV) = LM(JL) *RA *COSZ(IV) Z(IV) = LM(JL) *RA *COSZ(IV)
PL(IV) = CVMGT(0.D0,LM(JL)*RA,X0.LE.0.0) PL(IV) = CVMGT(0.D0,LM(JL)*RA,X0.LE.0.0)
58 CONTINUE 58 CONTINUE
C C
DO 199 IV=1,NUM DO 199 IV=1,NUM
@ -1063,18 +1019,18 @@ C
C C
C PROJECTILE LOOP C PROJECTILE LOOP
C C
1 CONTINUE 1 CONTINUE
C C
NPROJ=NPROJ+1 NPROJ=NPROJ+1
C C
DO 63 IV=1,IH1 DO 63 IV=1,IH1
CX(IV)=COSX(IV) CX(IV)=COSX(IV)
CY(IV)=COSY(IV) CY(IV)=COSY(IV)
CZ(IV)=COSZ(IV) CZ(IV)=COSZ(IV)
SX(IV)=SINE(IV) SX(IV)=SINE(IV)
DEES(IV)=0.D0 DEES(IV)=0.D0
DENS(IV)=0.D0 DENS(IV)=0.D0
DEN(IV)=0.D0 DEN(IV)=0.D0
63 CONTINUE 63 CONTINUE
KK1=KK0 KK1=KK0
C C
@ -1085,15 +1041,15 @@ C
C CHOICE OF COLLISION PARTNERS C CHOICE OF COLLISION PARTNERS
C C
DO 298 IV=1,IH1 DO 298 IV=1,IH1
call ranlux(random, 1) call ranlux(random, 1)
JJJ(IV) = ISRCHFGE(NJ(LLL(IV)),COM(1,LLL(IV)),1 JJJ(IV) = ISRCHFGE(NJ(LLL(IV)),COM(1,LLL(IV)),1
CC # ,RANF())+JT(LLL(IV)) CC # ,RANF())+JT(LLL(IV))
CC # ,DRAND48())+JT(LLL(IV)) CC # ,DRAND48())+JT(LLL(IV))
CC # ,DBLE(RAN(ISEED)))+JT(LLL(IV)) CC # ,DBLE(RAN(ISEED)))+JT(LLL(IV))
# ,DBLE(random))+JT(LLL(IV)) # ,DBLE(random))+JT(LLL(IV))
298 CONTINUE 298 CONTINUE
DO 67 IV=1,IH1 DO 67 IV=1,IH1
EPS(IV)=E(IV)*F1(JJJ(IV)) EPS(IV)=E(IV)*F1(JJJ(IV))
67 CONTINUE 67 CONTINUE
C C
CDIR$ IVDEP CDIR$ IVDEP
@ -1104,21 +1060,21 @@ C
CC PHIP=PI2*RANF() CC PHIP=PI2*RANF()
CC PHIP=PI2*DRAND48() CC PHIP=PI2*DRAND48()
CC PHIP=PI2*DBLE(RAN(ISEED)) CC PHIP=PI2*DBLE(RAN(ISEED))
call ranlux(ran2, 2) call ranlux(ran2, 2)
PHIP=PI2*DBLE(ran2(1)) PHIP=PI2*DBLE(ran2(1))
CPHI(IV)=DCOS(PHIP) CPHI(IV)=DCOS(PHIP)
SPHI(IV)=DSIN(PHIP) SPHI(IV)=DSIN(PHIP)
CC P(IV)=PDMAX(LLL(IV))*DSQRT(RANF()+KK) CC P(IV)=PDMAX(LLL(IV))*DSQRT(RANF()+KK)
CC P(IV)=PDMAX(LLL(IV))*DSQRT(DRAND48()+KK) CC P(IV)=PDMAX(LLL(IV))*DSQRT(DRAND48()+KK)
CC P(IV)=PDMAX(LLL(IV))*DSQRT(DBLE(RAN(ISEED))+KK) CC P(IV)=PDMAX(LLL(IV))*DSQRT(DBLE(RAN(ISEED))+KK)
P(IV)=PDMAX(LLL(IV))*DSQRT(DBLE(ran2(2))+KK) P(IV)=PDMAX(LLL(IV))*DSQRT(DBLE(ran2(2))+KK)
C C
C POSITION OF TARGET ATOM C POSITION OF TARGET ATOM
C C
X1(IV)=X(IV)-P(IV)*CPHI(IV)*SX(IV) X1(IV)=X(IV)-P(IV)*CPHI(IV)*SX(IV)
P(IV)=CVMGT(1.D10,P(IV),X1(IV).LT.0.D0.OR.X1(IV).GT.TT) P(IV)=CVMGT(1.D10,P(IV),X1(IV).LT.0.D0.OR.X1(IV).GT.TT)
C IF(A1(JJJ(IV)).EQ.0.) WRITE(99,'(A50)')' A1 vor Label 64 ' C IF(A1(JJJ(IV)).EQ.0.) WRITE(99,'(A50)')' A1 vor Label 64 '
B(IV)=P(IV)/A1(JJJ(IV)) B(IV)=P(IV)/A1(JJJ(IV))
64 CONTINUE 64 CONTINUE
CALL SCOPY(IH1,B,1,R,1) CALL SCOPY(IH1,B,1,R,1)
C WRITE(99,*)IH1,B(IV),R(IV) C WRITE(99,*)IH1,B(IV),R(IV)
@ -1133,10 +1089,10 @@ C KRYPTON-CARBON POTENTIAL
C CALL MAGICKRC(C2(1),S2(1),B(1),R(1),EPS(1),IH1) C CALL MAGICKRC(C2(1),S2(1),B(1),R(1),EPS(1),IH1)
104 DO 105 IV=IVMIN,IVMAX 104 DO 105 IV=IVMIN,IVMAX
IF(R(IV).LT.1.D-20)THEN IF(R(IV).LT.1.D-20)THEN
WRITE(99,'(A70)')'in DO 104 R(IV)<1.D-20 -> 0.00001D0 gesetzt' WRITE(99,'(A70)')'in DO 104 R(IV)<1.D-20 -> 0.00001D0 gesetzt'
R(IV)=0.00001D0 R(IV)=0.00001D0
ENDIF ENDIF
EX1(IV)=DEXP(-.278544D0*R(IV)) EX1(IV)=DEXP(-.278544D0*R(IV))
EX2(IV)=DEXP(-.637174D0*R(IV)) EX2(IV)=DEXP(-.637174D0*R(IV))
EX3(IV)=DEXP(-1.919249D0*R(IV)) EX3(IV)=DEXP(-1.919249D0*R(IV))
@ -1159,14 +1115,14 @@ C GET MAX AND MIN INDEX OF TEST FAILURES
IF(IVMIN.GT.IVMAX) GO TO 106 IF(IVMIN.GT.IVMAX) GO TO 106
GO TO 104 GO TO 104
106 DO 108 IV=1,IH1 106 DO 108 IV=1,IH1
ROCINV=-0.5D0*V1(IV)/(EPS(IV)-V(IV)) ROCINV=-0.5D0*V1(IV)/(EPS(IV)-V(IV))
SQE=DSQRT(DABS(EPS(IV))) SQE=DSQRT(DABS(EPS(IV)))
CC=(.235809D0+SQE)/(.126000D0+SQE) CC=(.235809D0+SQE)/(.126000D0+SQE)
AA=2.D0*EPS(IV)*(1.D0+(1.0144D0/SQE))*B(IV)**CC AA=2.D0*EPS(IV)*(1.D0+(1.0144D0/SQE))*B(IV)**CC
FF=(DSQRT(AA*AA+1.)-AA)*((69350.D0+EPS(IV))/(83550.D0+EPS(IV))) FF=(DSQRT(AA*AA+1.)-AA)*((69350.D0+EPS(IV))/(83550.D0+EPS(IV)))
DELTA=(R(IV)-B(IV))*AA*FF/(FF+1.D0) DELTA=(R(IV)-B(IV))*AA*FF/(FF+1.D0)
C=(ROCINV*(B(IV)+DELTA)+1.D0)/(ROCINV*R(IV)+1.D0) C=(ROCINV*(B(IV)+DELTA)+1.D0)/(ROCINV*R(IV)+1.D0)
C2(IV)=DMIN1(1.0D0,C*C) C2(IV)=DMIN1(1.0D0,C*C)
108 S2(IV)=1.D0-(1.D0*C2(IV)) 108 S2(IV)=1.D0-(1.D0*C2(IV))
GO TO 4103 GO TO 4103
C C
@ -1174,10 +1130,10 @@ C
C MOLIERE POTENTIAL C MOLIERE POTENTIAL
C CALL MAGICMOL(C2(1),S2(1),B(1),R(1),EPS(1),IH1) C CALL MAGICMOL(C2(1),S2(1),B(1),R(1),EPS(1),IH1)
4104 DO 4105 IV=IVMIN,IVMAX 4104 DO 4105 IV=IVMIN,IVMAX
IF(R(IV).LT.1.D-20)THEN IF(R(IV).LT.1.D-20)THEN
WRITE(99,'(A70)')'in DO 4104 R(IV)<1.D-20 -> 0.00001D0 gesetzt' WRITE(99,'(A70)')'in DO 4104 R(IV)<1.D-20 -> 0.00001D0 gesetzt'
R(IV)=0.00001D0 R(IV)=0.00001D0
ENDIF ENDIF
EX1(IV)=DEXP(-.3D0*R(IV)) EX1(IV)=DEXP(-.3D0*R(IV))
EX2(IV)=DEXP(-1.2D0*R(IV)) EX2(IV)=DEXP(-1.2D0*R(IV))
EX3(IV)=DEXP(-6.0D0*R(IV)) EX3(IV)=DEXP(-6.0D0*R(IV))
@ -1199,14 +1155,14 @@ C GET MAX AND MIN INDEX OF TEST FAILURES
GO TO 4104 GO TO 4104
4106 DO 4108 IV=1,IH1 4106 DO 4108 IV=1,IH1
C IF((EPS(IV)-V(IV)).EQ.0.D0)WRITE(99,'(A50)')' nach Label 4106 ' C IF((EPS(IV)-V(IV)).EQ.0.D0)WRITE(99,'(A50)')' nach Label 4106 '
ROCINV=-0.5D0*V1(IV)/(EPS(IV)-V(IV)) ROCINV=-0.5D0*V1(IV)/(EPS(IV)-V(IV))
SQE=DSQRT(EPS(IV)) SQE=DSQRT(EPS(IV))
CC=(.009611D0+SQE)/(.005175D0+SQE) CC=(.009611D0+SQE)/(.005175D0+SQE)
AA=2.D0*EPS(IV)*(1.D0+(0.6743D0/SQE))*B(IV)**CC AA=2.D0*EPS(IV)*(1.D0+(0.6743D0/SQE))*B(IV)**CC
FF=(DSQRT(AA*AA+1.D0)-AA)*((6.314D0+EPS(IV))/(10.D0+EPS(IV))) FF=(DSQRT(AA*AA+1.D0)-AA)*((6.314D0+EPS(IV))/(10.D0+EPS(IV)))
DELTA=(R(IV)-B(IV))*AA*FF/(FF+1.D0) DELTA=(R(IV)-B(IV))*AA*FF/(FF+1.D0)
C=(ROCINV*(B(IV)+DELTA)+1.D0)/(ROCINV*R(IV)+1.D0) C=(ROCINV*(B(IV)+DELTA)+1.D0)/(ROCINV*R(IV)+1.D0)
C2(IV)=DMIN1(1.0D0,C*C) C2(IV)=DMIN1(1.0D0,C*C)
4108 S2(IV)=1.D0-(1.D0*C2(IV)) 4108 S2(IV)=1.D0-(1.D0*C2(IV))
GO TO 4103 GO TO 4103
C C
@ -1214,7 +1170,7 @@ C
C ZBL POTENTIAL C ZBL POTENTIAL
C CALL MAGICZBL(C2(1),S2(1),B(1),R(1),EPS(1),IH1) C CALL MAGICZBL(C2(1),S2(1),B(1),R(1),EPS(1),IH1)
5104 DO 5105 IV=IVMIN,IVMAX 5104 DO 5105 IV=IVMIN,IVMAX
IF(R(IV).LT.1.D-20)THEN IF(R(IV).LT.1.D-20)THEN
WRITE(99,'(A70)')'in DO 5104 R(IV)<1.D-20 -> 0.00001D0 gesetzt' WRITE(99,'(A70)')'in DO 5104 R(IV)<1.D-20 -> 0.00001D0 gesetzt'
R(IV)=0.00001D0 R(IV)=0.00001D0
ENDIF ENDIF
@ -1257,68 +1213,68 @@ C
C END OF MAGIC C END OF MAGIC
C C
DO 65 IV=1,IH1 DO 65 IV=1,IH1
DEN(IV)=EC1(JJJ(IV))*E(IV)*S2(IV) DEN(IV)=EC1(JJJ(IV))*E(IV)*S2(IV)
C TAU(IV)=CVMGT(P(IV)*DSQRT(S2(IV)/C2(IV)),0.,KK.EQ.4) C TAU(IV)=CVMGT(P(IV)*DSQRT(S2(IV)/C2(IV)),0.,KK.EQ.4)
IF(C2(IV).LT.1.D-10) THEN IF(C2(IV).LT.1.D-10) THEN
c WRITE(*,*)C2(IV),S2(IV) c WRITE(*,*)C2(IV),S2(IV)
WRITE(99,'(A50)')' C2 < 10^-10, C2,S2,DEN resettet ' WRITE(99,'(A50)')' C2 < 10^-10, C2,S2,DEN resettet '
C2(IV)=1.D-10 C2(IV)=1.D-10
S2(IV)=1.D0-(1.D0*C2(IV)) S2(IV)=1.D0-(1.D0*C2(IV))
DEN(IV)=EC1(JJJ(IV))*E(IV)*S2(IV) DEN(IV)=EC1(JJJ(IV))*E(IV)*S2(IV)
c WRITE(*,*)C2(IV),S2(IV) c WRITE(*,*)C2(IV),S2(IV)
ENDIF ENDIF
TAU(IV)=CVMGT(P(IV)*DSQRT(DABS(S2(IV)/C2(IV))),0.D0,KK.EQ.0) TAU(IV)=CVMGT(P(IV)*DSQRT(DABS(S2(IV)/C2(IV))),0.D0,KK.EQ.0)
TAU(IV)=DMIN1(TAU(IV),LM(LLL(IV))) TAU(IV)=DMIN1(TAU(IV),LM(LLL(IV)))
CT(IV)=C2(IV)+C2(IV)-1.D0 CT(IV)=C2(IV)+C2(IV)-1.D0
ST(IV)=DSQRT(DABS(1.D0-CT(IV)*CT(IV))) ST(IV)=DSQRT(DABS(1.D0-CT(IV)*CT(IV)))
CU=CT(IV)+MU1(JJJ(IV)) CU=CT(IV)+MU1(JJJ(IV))
CU=CVMGT(CU,1.0D-8,DABS(CU).GE.1.0D-8) CU=CVMGT(CU,1.0D-8,DABS(CU).GE.1.0D-8)
TA=ST(IV)/CU TA=ST(IV)/CU
TA2=1.D0/DSQRT(DABS(1.D0+TA*TA)) TA2=1.D0/DSQRT(DABS(1.D0+TA*TA))
CPSI(IV)=CVMGT(TA2,-TA2,CU.GT.0.D0) CPSI(IV)=CVMGT(TA2,-TA2,CU.GT.0.D0)
SPSI(IV)=DABS(TA)*TA2 SPSI(IV)=DABS(TA)*TA2
DEEOR=CVMGT(KOR1(JJJ(IV))*DSQRT(DABS(E(IV)))*EX1(IV),0.D0, DEEOR=CVMGT(KOR1(JJJ(IV))*DSQRT(DABS(E(IV)))*EX1(IV),0.D0,
# KDEE1.EQ.2.OR.KDEE1.EQ.3) # KDEE1.EQ.2.OR.KDEE1.EQ.3)
DENS(IV)=DENS(IV)+DEN(IV) DENS(IV)=DENS(IV)+DEN(IV)
DEES(IV)=DEES(IV)+DEEOR DEES(IV)=DEES(IV)+DEEOR
65 CONTINUE 65 CONTINUE
C C
C DETERMINATION OF NEW FLIGHT DIRECTIONS C DETERMINATION OF NEW FLIGHT DIRECTIONS
C C
CALL DIRCOS(COSX(1),COSY(1),COSZ(1),SINE(1),CPSI(1),SPSI(1) CALL DIRCOS(COSX(1),COSY(1),COSZ(1),SINE(1),CPSI(1),SPSI(1)
* ,CPHI(1),SPHI(1),IH1) * ,CPHI(1),SPHI(1),IH1)
245 CONTINUE 245 CONTINUE
C C
C END OF COLLISION LOOP C END OF COLLISION LOOP
C C
C INELASTIC ENERGY LOSS( 5 POSSIBILITIES) C INELASTIC ENERGY LOSS( 5 POSSIBILITIES)
C C
DO 14 IV=1,IH1 DO 14 IV=1,IH1
ASIGT(IV)=(LM(LLL(IV))-TAU(IV)+TAUPSI(IV))*ARHO(LLL(IV)) ASIGT(IV)=(LM(LLL(IV))-TAU(IV)+TAUPSI(IV))*ARHO(LLL(IV))
TAUPSI(IV)=TAU(IV)*DABS(CPSI(IV)) TAUPSI(IV)=TAU(IV)*DABS(CPSI(IV))
14 CONTINUE 14 CONTINUE
GO TO(15,16,17,18,19),KDEE1 GO TO(15,16,17,18,19),KDEE1
15 DO 26 IV=1,IH1 15 DO 26 IV=1,IH1
DEE(IV)=CVMGT(0.D0,KLM1(LLL(IV))*ASIGT(IV)*DSQRT(E(IV)), DEE(IV)=CVMGT(0.D0,KLM1(LLL(IV))*ASIGT(IV)*DSQRT(E(IV)),
# X(IV).LT.HLM.OR.X(IV).GT.HLMT) # X(IV).LT.HLM.OR.X(IV).GT.HLMT)
26 CONTINUE 26 CONTINUE
GO TO 40 GO TO 40
16 DO 21 IV=1,IH1 16 DO 21 IV=1,IH1
DEE(IV)=DEES(IV) DEE(IV)=DEES(IV)
21 CONTINUE 21 CONTINUE
GO TO 40 GO TO 40
17 DO 22 IV=1,IH1 17 DO 22 IV=1,IH1
DEE(IV)=CVMGT(DEES(IV),0.5D0*(KLM1(LLL(IV))*ASIGT(IV)* DEE(IV)=CVMGT(DEES(IV),0.5D0*(KLM1(LLL(IV))*ASIGT(IV)*
# DSQRT(E(IV))+DEES(IV)),X(IV).LT.HLM.OR.X(IV).GT.HLMT) # DSQRT(E(IV))+DEES(IV)),X(IV).LT.HLM.OR.X(IV).GT.HLMT)
22 CONTINUE 22 CONTINUE
GO TO 40 GO TO 40
18 DO 23 IV=1,IH1 18 DO 23 IV=1,IH1
SM(IV)=0.D0 SM(IV)=0.D0
EM(IV)=E(IV)*0.001D0/M1 EM(IV)=E(IV)*0.001D0/M1
23 CONTINUE 23 CONTINUE
DO 66 IV=1,IH1 DO 66 IV=1,IH1
DO 66 J=1,NJ(LLL(IV)) DO 66 J=1,NJ(LLL(IV))
SH(IV,J)=CVMGT(CH1(LLL(IV),J)*DSQRT(EM(IV)) SH(IV,J)=CVMGT(CH1(LLL(IV),J)*DSQRT(EM(IV))
# ,CH2(LLL(IV),J)*EM(IV)**0.45D0*(CH3(LLL(IV),J)/EM(IV)) # ,CH2(LLL(IV),J)*EM(IV)**0.45D0*(CH3(LLL(IV),J)/EM(IV))
# *DLOG(DABS(1.D0+(CH4(LLL(IV),J)/ # *DLOG(DABS(1.D0+(CH4(LLL(IV),J)/
# EM(IV))+CH5(LLL(IV),J)*EM(IV))) # EM(IV))+CH5(LLL(IV),J)*EM(IV)))
@ -1329,112 +1285,113 @@ C
66 CONTINUE 66 CONTINUE
DO 73 IV=1,IH1 DO 73 IV=1,IH1
DO 73 J=1,NJ(LLL(IV)) DO 73 J=1,NJ(LLL(IV))
SM(IV)=SM(IV)+SH(IV,J)*CO(LLL(IV),J) SM(IV)=SM(IV)+SH(IV,J)*CO(LLL(IV),J)
73 CONTINUE 73 CONTINUE
DO 78 IV=1,IH1 DO IV=1,IH1
DEE(IV)=CVMGT(CHM1(LLL(IV))*DSQRT(EM(IV)),SM(IV),EM(IV).LE.10.D0) DEE(IV)=CVMGT(CHM1(LLL(IV))*DSQRT(EM(IV)),SM(IV),EM(IV).LE.10
78 CONTINUE & .D0)
DO 69 IV=1,IH1 ENDDO
DEE(IV)=10.D0*ASIGT(IV)* DO IV=1,IH1
# CVMGT(0.D0,DEE(IV),X(IV).LT.HLM.OR.X(IV).GT.HLMT) DEE(IV)=10.D0*ASIGT(IV)*CVMGT(0.D0,DEE(IV),X(IV).LT.HLM.OR
69 CONTINUE & .X(IV).GT.HLMT)
ENDDO
GO TO 40 GO TO 40
19 FHE=CVMGT(1.3333D0,1.D0,M1.LT.4.00D0) 19 FHE=CVMGT(1.3333D0,1.D0,M1.LT.4.00D0)
DO 25 IV=1,IH1 DO IV=1,IH1
SM(IV)=0.D0 SM(IV)=0.D0
EM(IV)=E(IV)*0.001D0*FHE EM(IV)=E(IV)*0.001D0*FHE
25 CONTINUE ENDDO
DO 74 IV=1,IH1 DO IV=1,IH1
DO 74 J=1,NJ(LLL(IV)) DO J=1,NJ(LLL(IV))
SH(IV,J)=CH1(LLL(IV),J)*EM(IV)**CH2(LLL(IV),J)* SH(IV,J)=CH1(LLL(IV),J)*EM(IV)**CH2(LLL(IV),J)* (CH3(LLL(IV)
# (CH3(LLL(IV),J)/(EM(IV)*0.001D0)) & ,J)/(EM(IV)*0.001D0)) *DLOG(DABS(1.D0+(CH4(LLL(IV),J)
# *DLOG(DABS(1.D0+(CH4(LLL(IV),J)/(EM(IV)*0.001D0))+ & /(EM(IV)*0.001D0))+ CH5(LLL(IV),J)*EM(IV)*0.001D0))
# CH5(LLL(IV),J)*EM(IV)*0.001D0)) & /(CH1(LLL(IV),J)*EM(IV)**CH2(LLL(IV),J)+ (CH3(LLL(IV),J
# /(CH1(LLL(IV),J)*EM(IV)**CH2(LLL(IV),J)+ & )/(EM(IV)*0.001D0)) *DLOG(DABS(1.D0+(CH4(LLL(IV),J)
# (CH3(LLL(IV),J)/(EM(IV)*0.001D0)) & /(EM(IV)*0.001D0))+ CH5(LLL(IV),J)*EM(IV)*0.001D0)))
# *DLOG(DABS(1.D0+(CH4(LLL(IV),J)/(EM(IV)*0.001D0))+ ENDDO
# CH5(LLL(IV),J)*EM(IV)*0.001D0))) ENDDO
74 CONTINUE DO IV=1,IH1
DO 92 IV=1,IH1 DO J=1,NJ(LLL(IV))
DO 92 J=1,NJ(LLL(IV)) SM(IV)=SM(IV)+SH(IV,J)*CO(LLL(IV),J)
SM(IV)=SM(IV)+SH(IV,J)*CO(LLL(IV),J) ENDDO
92 CONTINUE ENDDO
DO 79 IV=1,IH1 DO IV=1,IH1
DEE(IV)=10.D0*ASIGT(IV)* DEE(IV)=10.D0*ASIGT(IV)* CVMGT(0.D0,SM(IV),X(IV).LT.HLM.OR.X(IV
# CVMGT(0.D0,SM(IV),X(IV).LT.HLM.OR.X(IV).GT.HLMT) & ).GT.HLMT)
79 CONTINUE ENDDO
40 CONTINUE 40 CONTINUE
C C
DO 44 IV=1,IH1 DO IV=1,IH1
DEL=DMAX1(1.0D-20,DENS(IV)+DEE(IV)) DEL=DMAX1(1.0D-20,DENS(IV)+DEE(IV))
DENS(IV)=CVMGT(E(IV)*DENS(IV)/DEL,DENS(IV),DEL.GT.E(IV)) DENS(IV)=CVMGT(E(IV)*DENS(IV)/DEL,DENS(IV),DEL.GT.E(IV))
DEE(IV)=CVMGT(E(IV)*DEE(IV)/DEL,DEE(IV),DEL.GT.E(IV)) DEE(IV)=CVMGT(E(IV)*DEE(IV)/DEL,DEE(IV),DEL.GT.E(IV))
44 CONTINUE ENDDO
C C
C INCREMENT OF DAMAGE, CASCADE AND PHONON ENERGY C INCREMENT OF DAMAGE, CASCADE AND PHONON ENERGY
C C
DO 70 IV=1,IH1 DO 70 IV=1,IH1
C IF(X(IV).LT.0.OR.X(IV).GT.TT) GO TO 70 C IF(X(IV).LT.0.OR.X(IV).GT.TT) GO TO 70
I=MAX0(MIN0(IDINT(X1(IV)/CW+1.D0),100),1) I=MAX0(MIN0(IDINT(X1(IV)/CW+1.D0),100),1)
DENT(I)=DENT(I)+DENS(IV) DENT(I)=DENT(I)+DENS(IV)
DMGN(I)=DMGN(I)+DEN(IV) DMGN(I)=DMGN(I)+DEN(IV)
ION(I)=ION(I)+DEE(IV) ION(I)=ION(I)+DEE(IV)
ELE(I,JJJ(IV))=ELE(I,JJJ(IV))+DEN(IV) ELE(I,JJJ(IV))=ELE(I,JJJ(IV))+DEN(IV)
ELI(I,JJJ(IV))=ELI(I,JJJ(IV))+DEE(IV) ELI(I,JJJ(IV))=ELI(I,JJJ(IV))+DEE(IV)
IF(DEN(IV).LE.DI(JJJ(IV))) GO TO 28 IF(DEN(IV).LE.DI(JJJ(IV))) GO TO 28
EPS(IV)=F1(JJJ(IV))*DEN(IV) EPS(IV)=F1(JJJ(IV))*DEN(IV)
G=EPS(IV)+.40244D0*EPS(IV)**.75D0+3.4008D0*EPS(IV)**.16667D0 G=EPS(IV)+.40244D0*EPS(IV)**.75D0+3.4008D0*EPS(IV)**.16667D0
MOT=DEN(IV)/(1.D0+K2(LLL(IV))*G) MOT=DEN(IV)/(1.D0+K2(LLL(IV))*G)
CASMOT(I)=CASMOT(I)+MOT CASMOT(I)=CASMOT(I)+MOT
ELGD(I)=ELGD(I)+DEN(IV) ELGD(I)=ELGD(I)+DEN(IV)
ELD(I,JJJ(IV))=ELD(I,JJJ(IV))+DEN(IV) ELD(I,JJJ(IV))=ELD(I,JJJ(IV))+DEN(IV)
ICD(I,JJJ(IV))=ICD(I,JJJ(IV))+1 ICD(I,JJJ(IV))=ICD(I,JJJ(IV))+1
GO TO 70 GO TO 70
28 PHON(I)=PHON(I)+DEN(IV) 28 PHON(I)=PHON(I)+DEN(IV)
ELP(I,JJJ(IV))=ELP(I,JJJ(IV))+DEN(IV) ELP(I,JJJ(IV))=ELP(I,JJJ(IV))+DEN(IV)
70 CONTINUE 70 CONTINUE
DO 80 IV=1,IH1 DO 80 IV=1,IH1
ICDI=ICDI+IDINT(CVMGT(1.D0,0.D0,DEN(IV).GT.DI(JJJ(IV)))) ICDI=ICDI+IDINT(CVMGT(1.D0,0.D0,DEN(IV).GT.DI(JJJ(IV))))
ICSUMS=ICSUMS+IDINT(CVMGT(1.D0,0.D0,DEN(IV).GT.SB(1))) ICSUMS=ICSUMS+IDINT(CVMGT(1.D0,0.D0,DEN(IV).GT.SB(1)))
ICSUM=ICSUM+IDINT(CVMGT(1.D0,0.D0,DENS(IV).GT.0.D0)) ICSUM=ICSUM+IDINT(CVMGT(1.D0,0.D0,DENS(IV).GT.0.D0))
80 CONTINUE 80 CONTINUE
DO 72 IV=1,IH1 DO 72 IV=1,IH1
DEN2=DEN(IV)*DEN(IV) DEN2=DEN(IV)*DEN(IV)
DEN3=DEN2*DEN(IV) DEN3=DEN2*DEN(IV)
EEL=EEL+DEN(IV) EEL=EEL+DEN(IV)
EEL2=EEL2+DEN2 EEL2=EEL2+DEN2
EEL3=EEL3+DEN3 EEL3=EEL3+DEN3
EEL4=EEL4+DEN2*DEN2 EEL4=EEL4+DEN2*DEN2
EEL5=EEL5+DEN3*DEN2 EEL5=EEL5+DEN3*DEN2
EEL6=EEL6+DEN3*DEN3 EEL6=EEL6+DEN3*DEN3
DEE2=DEE(IV)*DEE(IV) DEE2=DEE(IV)*DEE(IV)
DEE3=DEE2*DEE(IV) DEE3=DEE2*DEE(IV)
EIL=EIL+DEE(IV) EIL=EIL+DEE(IV)
EIL2=EIL2+DEE2 EIL2=EIL2+DEE2
EIL3=EIL3+DEE3 EIL3=EIL3+DEE3
EIL4=EIL4+DEE2*DEE2 EIL4=EIL4+DEE2*DEE2
EIL5=EIL5+DEE3*DEE2 EIL5=EIL5+DEE3*DEE2
EIL6=EIL6+DEE3*DEE3 EIL6=EIL6+DEE3*DEE3
EPL=EPL+CVMGT(DEN(IV),0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL=EPL+CVMGT(DEN(IV),0.D0,DEN(IV).LT.DI(JJJ(IV)))
EPL2=EPL2+CVMGT(DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL2=EPL2+CVMGT(DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV)))
EPL3=EPL3+CVMGT(DEN3,0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL3=EPL3+CVMGT(DEN3,0.D0,DEN(IV).LT.DI(JJJ(IV)))
EPL4=EPL4+CVMGT(DEN2*DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL4=EPL4+CVMGT(DEN2*DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV)))
EPL5=EPL5+CVMGT(DEN3*DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL5=EPL5+CVMGT(DEN3*DEN2,0.D0,DEN(IV).LT.DI(JJJ(IV)))
EPL6=EPL6+CVMGT(DEN3*DEN3,0.D0,DEN(IV).LT.DI(JJJ(IV))) EPL6=EPL6+CVMGT(DEN3*DEN3,0.D0,DEN(IV).LT.DI(JJJ(IV)))
ENUCL(IV)=ENUCL(IV)+DENS(IV) ENUCL(IV)=ENUCL(IV)+DENS(IV)
EINEL(IV)=EINEL(IV)+DEE(IV) EINEL(IV)=EINEL(IV)+DEE(IV)
72 CONTINUE 72 CONTINUE
IF(KK0.EQ.0) GO TO 89 IF(KK0.EQ.0) GO TO 89
DO 71 IV=1,IH1 DO 71 IV=1,IH1
DEWC=DENS(IV)-DEN(IV) DEWC=DENS(IV)-DEN(IV)
DEWC2=DEWC*DEWC DEWC2=DEWC*DEWC
DEWC3=DEWC2*DEWC DEWC3=DEWC2*DEWC
EELWC=EELWC+DEWC EELWC=EELWC+DEWC
EELWC2=EELWC2+DEWC2 EELWC2=EELWC2+DEWC2
EELWC3=EELWC3+DEWC3 EELWC3=EELWC3+DEWC3
EELWC4=EELWC4+DEWC2*DEWC2 EELWC4=EELWC4+DEWC2*DEWC2
EELWC5=EELWC5+DEWC3*DEWC2 EELWC5=EELWC5+DEWC3*DEWC2
EELWC6=EELWC6+DEWC3*DEWC3 EELWC6=EELWC6+DEWC3*DEWC3
71 CONTINUE 71 CONTINUE
89 CONTINUE 89 CONTINUE
C C