1008 lines
28 KiB
Fortran
1008 lines
28 KiB
Fortran
c
|
|
PROGRAM DATMAKER
|
|
c
|
|
c------------------------------------------------------------------------------
|
|
c dieses Programm erstellt die Eingabedateien, die mit dem Programm
|
|
c TRIMSP4L gelesen werden.
|
|
c dies ist die Version DATMAK7L(-test)
|
|
c
|
|
c Festlegen der für TRIMSP benötigten Modellparameter
|
|
c Bezeichnung nach Eckstein's Datei TRVMC95.text
|
|
c ef,esb,sheath,erc,rd,ca,kk0,kk0r,kdee1,kdee2,ipot,ipotr,irl
|
|
c
|
|
c Projektilparameter:
|
|
c ===================
|
|
c
|
|
c zproj = Ordnungszahl des Projektils == fuer myonen = 1
|
|
c mproj = Massenzahl des Projektils == fuer Myonen = 0.11
|
|
c alphaproj = Winkel zwischen Projektil und Targetnormale == 0 ist
|
|
c senkrecht
|
|
c eproj = Projektilenergie in eV
|
|
c esig = Breite der gaussfoermigen Energieverteilung
|
|
c thick(n) = Dicke eines Layers in Angstroem
|
|
c rho(n) = Dichte eines Layers in g/cm^3
|
|
c
|
|
c Simulationsparameter:
|
|
c =====================
|
|
c
|
|
c ri = Zufallszahleninitialisierung (muss ungerade sein)
|
|
c ri2 = Zufallszahleninitialisierung, mit der die Energie gewuerfelt wird
|
|
c x0 = von wo aus werden Projektile implantiert == 0 ist Probenoberflaeche
|
|
c cw = Dickeninterval in Angstroem
|
|
c Festlegen der Target-Elemente m(max. 5) in den jeweiligen Layern l(max. 7)
|
|
c p1 = Ordnungszahl-->ordz(n)
|
|
c p2 = Massenzahl (amu)-->mass(n)
|
|
c p3 = Bindungsenergie im Festkoerper (eV)-->elas(n)
|
|
c p4 = Dichte des Elementes (g/cm^3)-->rho(n)
|
|
c p(1-5) = Stoppingpowerkoeffizienten fuer H in Materie nach
|
|
c Andersen-Ziegler-->spower(k,m,l)
|
|
c conz(m,l) --> Konzentration eines Elementes in einem Layer
|
|
c conzlayer(n) --> Gesamasskonzentration im Layer == muss 1.0 sein
|
|
c die Parameter SBE(5) sind auf 30.0 eV und BE(5) auf 0 gesetzt (siehe TRVMC95.txt)
|
|
c die Parameter CK(3) sind auf 1 gesetzt (siehe TRVMC95.txt)
|
|
c
|
|
c April 1999: das Programm berechnet jetzt aus den Konzentrationen die
|
|
c stöchiometrische Dichte eines Layers. Wichtig: die Dichten fuer
|
|
c H,He,Ne,O,Ar,Kr,Xe sind die Dichten am Tripelpunkt fuer die
|
|
c fluessige Phase, die Dichten fuer F,Cl,Rn,Fr,Ra sind nicht bekannt
|
|
c und deshalb auf 0.1 gesetzt.
|
|
c
|
|
c Mai 1999 : das Programm wurde erweitert. Jetzt koennen in einer Schleife
|
|
c mehrere Eingabefiles fuer TRIMSP (ab Version TRIMSPPc4i) mit
|
|
c verschiedener Startenergie und verschiedenen Kanalgroessen fuer
|
|
c die Range Profile erstellt werden. Ausserem weden die erstellten
|
|
c Files auf Abfrage in eine fuer ab TRIMSPpc4h geeignete
|
|
c Batch-Datei weggeschrieben.
|
|
c Juni 1999 : die Stopkoeffizienten aus der ICRU49 Tabelle werden verwendet.
|
|
c Datei :stopicru.dat
|
|
c Dez. 1999 : Dichten fuer N2,O2, Ar,Xe,Kr,Ne nun fuer die feste Phase
|
|
c : Batchtype x eingefuegt
|
|
c ab Version datmak4k
|
|
c
|
|
c ! Eingabedateien, die mit datmak4k erzeugt werden, koennen von aelteren Versionen (vor TrimSpp4k)
|
|
c ! nicht gelesen werden.
|
|
c
|
|
c Dez. 1999 : neu Variable
|
|
c alphaprojsig (Breite einer Gaussverteilung der Einfallwinkel
|
|
c ri3 = seed fuer Zufallszahlengenerator fuer Einfallwinkel
|
|
c Batchtype a,b eingefuegt aber noch nicht implementiert
|
|
c Jun. 2000: nun sieben layer
|
|
c
|
|
c major revision:
|
|
c
|
|
c 19-Jun-2002: TP, implicit none, program comments at the beginning,
|
|
c f77 standard, english output, changed formatting
|
|
c change extension to .F in order to invole the pre-
|
|
c compiler to write either a DOS bat file or a bash
|
|
c shell script.
|
|
c no longer prompt for random generator seed because
|
|
c ranlux is used in trimsp7l_tp.
|
|
c
|
|
c 14-Jan-2003: TP, replaced format '(I6)' of reading the number of projectiles nproj
|
|
c by *.
|
|
c
|
|
c--------------------------------------------------------------------------------------------
|
|
c
|
|
c check OS
|
|
c
|
|
#if defined( _WIN32 )
|
|
#define OS_WIN
|
|
#else
|
|
#define OS_UNIX
|
|
#endif
|
|
c
|
|
IMPLICIT none
|
|
|
|
INTEGER i,k,l,m,lnum
|
|
INTEGER nproj,n,lmax
|
|
INTEGER kk0,kk0r,kdee1,kdee2,ipot,ipotr,irl
|
|
|
|
REAL*4 zproj,mproj,eproj,esig,alphaproj,alphaprojsig
|
|
REAL*4 ri,ri2,ri3,cw,x0
|
|
REAL*4 ef,esb,sheath,erc,rd,ca
|
|
REAL*4 p2,p3,p4,p(5)
|
|
REAL*4 ordz(5,7),mass(5,7),elas(5,7),spower(5,5,7),conz(5,7)
|
|
REAL*4 conzlayer(7),thick(7),rho(7)
|
|
REAL*4 ck(7),sbe(5,7),be(5,7)
|
|
|
|
CHARACTER errcom*17,en*2,f*1,ausgabe*12,inpnam*4,parchar*3,
|
|
1 inpext*4
|
|
CHARACTER batchtype*1,name*8
|
|
DATA zproj,mproj /1.0,0.11/
|
|
DATA alphaproj,alphaprojsig /0.0,0.0/
|
|
DATA eproj,esig /1000.0,0.0/
|
|
DATA ef,esb,sheath,erc /0.50,0.00,0.00,0.00/
|
|
DATA rd,ca /50.00,1.00/
|
|
DATA kk0,kk0r,kdee1,kdee2,ipot,ipotr,irl /2,2,4,3,2,1,0/
|
|
DATA ri,x0,cw /78741.00,0.00,30.0/
|
|
DATA nproj /1000/
|
|
DATA lmax /7/
|
|
|
|
DATA errcom /'Wrong Input !'/
|
|
DATA inpext /'.inp'/
|
|
DATA batchtype /'e'/
|
|
c
|
|
WRITE(*,*)' ----------------------------------------'
|
|
WRITE(*,*)' | Program D A T M A K, Version 7L |'
|
|
WRITE(*,*)' ----------------------------------------'
|
|
WRITE(*,*)
|
|
WRITE(*,*)' Program to create the input file for'
|
|
WRITE(*,*)' TRIM.SP (W. Eckstein, IPP Garching).'
|
|
write(*,*)
|
|
WRITE(*,*)' The general name for the output (must be '//
|
|
1 'character*4, A4) will be used'
|
|
WRITE(*,*)' in all output file names. In case of multiple'//
|
|
1 ' energies to be simulated (Batchtype e),'
|
|
WRITE(*,*)' the energy will be appended as character*3 (A3),'//
|
|
1 ' for example, 30keV=300, 0.5keV=005.'
|
|
WRITE(*,*)' Otherwise, the character*3 file name specifier'//
|
|
1 ' must be entered manually.'
|
|
WRITE(*,*)' Between general file name and character*3'//
|
|
1 ' specifier the batch type will be inserted'
|
|
WRITE(*,*)' as character*1.'
|
|
WRITE(*,*)' In batch mode only one of the paramters energy,'//
|
|
1 'energy width, number of muons or layer thickness'
|
|
WRITE(*,*)' can be changed.'
|
|
WRITE(*,*)
|
|
WRITE(*,*)' Enter the general file name (A4)'
|
|
READ(5,'(A4)')inpnam
|
|
c
|
|
800 WRITE(*,*)' Batchtype ?'
|
|
WRITE(*,*)' E = energy (default)'
|
|
WRITE(*,*)' S = sigma energy'
|
|
WRITE(*,*)' N = number of particles'
|
|
WRITE(*,*)' D = layer thickness'
|
|
WRITE(*,*)' X = energy and sigma energy'
|
|
c WRITE(*,*)' A = alpha and alphasigma'
|
|
c WRITE(*,*)' B = energy, sigma energy, alpha, alphasigma'
|
|
c
|
|
WRITE(*,*)'Change batch type (y/n)? '
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
batchtype='e'
|
|
GOTO 806
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
805 WRITE(*,*)' Enter batch type (A1) '
|
|
READ(*,'(A1)')batchtype
|
|
IF(batchtype.EQ.'e'.OR.batchtype.EQ.'E')THEN
|
|
batchtype='e'
|
|
ELSEIF(batchtype.EQ.'s'.OR.batchtype.EQ.'S')THEN
|
|
batchtype='s'
|
|
ELSEIF(batchtype.EQ.'n'.OR.batchtype.EQ.'N')THEN
|
|
batchtype='n'
|
|
ELSEIF(batchtype.EQ.'d'.OR.batchtype.EQ.'D')THEN
|
|
batchtype='d'
|
|
ELSEIF(batchtype.EQ.'x'.OR.batchtype.EQ.'X')THEN
|
|
batchtype='x'
|
|
c ELSEIF(batchtype.EQ.'a'.OR.batchtype.EQ.'A')THEN
|
|
c batchtype='a'
|
|
c ELSEIF(batchtype.EQ.'b'.OR.batchtype.EQ.'B')THEN
|
|
c batchtype='b'
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 805
|
|
ENDIF
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 800
|
|
ENDIF
|
|
c
|
|
806 WRITE(*,*)' Projectile parameter '
|
|
WRITE(*,'(1x,A3,F7.2,1x,A4,F7.2)')'Z: ',zproj,'M: ',mproj
|
|
WRITE(*,'(1x,A3,F7.2,1x,A6,F7.2)')'E: ',eproj,
|
|
+ 'Esig: ',esig
|
|
WRITE(*,'(1x,A8,F7.2,1x,A10,F7.2)')'alpha: ',alphaproj,
|
|
+ 'alphasig: ',alphaprojsig
|
|
WRITE(*,*)'Change projectile ? '
|
|
1001 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1000
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Charge number (Myon = 1)'
|
|
810 READ(5,501,ERR=810)zproj
|
|
IF(zproj.EQ.0.0) zproj=1.
|
|
WRITE(*,*)' Projectile mass (Myon=0.113)'
|
|
811 READ(5,501,ERR=811)mproj
|
|
IF(mproj.EQ.0.0) mproj=0.113
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1001
|
|
ENDIF
|
|
1000 WRITE(*,*)'Change projectile energy ? '
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 10011
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Projectile energy in eV '
|
|
814 READ(5,501,ERR=814)eproj
|
|
IF(eproj.EQ.0.0) eproj=1000.
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1000
|
|
ENDIF
|
|
10011 WRITE(*,*)'Change sigma ? '
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 10012
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Sigma in eV '
|
|
815 READ(5,501,ERR=815)esig
|
|
esig=ABS(esig)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 10011
|
|
ENDIF
|
|
10012 WRITE(*,*)'Change angle of projectile ? '
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 10013
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Projectile angle (perpendicular=0)'
|
|
813 READ(5,501,ERR=813)alphaproj
|
|
alphaproj=ABS(alphaproj)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 10012
|
|
ENDIF
|
|
10013 WRITE(*,*)'Change sigma ? '
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 10014
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Sigma projectile angle '
|
|
8130 READ(5,501,ERR=8130)alphaprojsig
|
|
alphaprojsig=ABS(alphaprojsig)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 10013
|
|
ENDIF
|
|
c
|
|
10014 WRITE(*,*)' Other projectile parameters
|
|
+ (see TRVMC95.txt for details)'
|
|
WRITE(*,'(1x,A3,F7.2,1x,A4,F7.2,1x,A7,F7.2,1x,A4,F7.2)')
|
|
+ 'EF ',ef,'ESB ',esb,'SHEATH ',sheath,'ERC ',erc
|
|
WRITE(*,'(1x,A3,F7.2,1x,A3,F7.2)')'RD ',rd,'CA ',ca
|
|
WRITE(*,*)'Change ?'
|
|
1003 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1002
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' EF :'
|
|
820 READ(5,501,ERR=820)ef
|
|
WRITE(*,*)' ESB :'
|
|
821 READ(5,501,ERR=821)esb
|
|
WRITE(*,*)' SHEATH :'
|
|
822 READ(5,501,ERR=822)sheath
|
|
WRITE(*,*)' ERC :'
|
|
823 READ(5,501,ERR=823)erc
|
|
WRITE(*,*)' RD :'
|
|
824 READ(5,501,ERR=824)rd
|
|
WRITE(*,*)' CA :'
|
|
825 READ(5,501,ERR=825)ca
|
|
501 FORMAT(F7.0)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1003
|
|
ENDIF
|
|
1002 WRITE(*,*)' Elastic collision parameters
|
|
+ (see TRVMC95.txt for details)'
|
|
WRITE(*,'(1x,A4,I1,1x,A5,I1,1x,A6,I1,1x,A6,I1)')
|
|
+ 'KK0 ',KK0,'KK0R ',KK0R,'KDEE1 ',KDEE1,'KDEE2 ',KDEE2
|
|
WRITE(*,'(1x,A5,I1,1x,A6,I1,1x,A4,I1)')
|
|
+ 'IPOT ',IPOT,'IPOTR ',IPOTR,'IRL ',IRL
|
|
WRITE(*,*)'Change ?'
|
|
1005 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1004
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' KK0 '
|
|
830 READ(5,502,ERR=830)KK0
|
|
IF(KK0.LT.0.OR.KK0.GT.4)THEN
|
|
WRITE(*,*)' must be in [0,4].'
|
|
GOTO 830
|
|
ENDIF
|
|
WRITE(*,*)' KK0R '
|
|
831 READ(5,502,ERR=831)KK0R
|
|
IF(KK0R.LT.0.OR.KK0R.GT.4)THEN
|
|
WRITE(*,*)' must be in [0,4]. '
|
|
GOTO 831
|
|
ENDIF
|
|
WRITE(*,*)' KDEE1 '
|
|
832 READ(5,502,ERR=832)KDEE1
|
|
IF(KDEE1.LT.1.OR.KDEE1.GT.5)THEN
|
|
WRITE(*,*)' must be in [1,5].'
|
|
GOTO 832
|
|
ENDIF
|
|
WRITE(*,*)' KDEE2 '
|
|
833 READ(5,502,ERR=833)KDEE2
|
|
IF(KDEE2.LT.1.OR.KDEE2.GT.3)THEN
|
|
WRITE(*,*)' must be in [1,3].'
|
|
GOTO 833
|
|
ENDIF
|
|
WRITE(*,*)' IPOT '
|
|
834 READ(5,502,ERR=834)IPOT
|
|
IF(IPOT.LT.1.OR.IPOT.GT.3)THEN
|
|
WRITE(*,*)' must be in [1,3].'
|
|
GOTO 834
|
|
ENDIF
|
|
WRITE(*,*)' IPOTR '
|
|
835 READ(5,502,ERR=835)IPOTR
|
|
IF(IPOTR.LT.1.OR.IPOTR.GT.3)THEN
|
|
WRITE(*,*)' must be in [1,3].'
|
|
GOTO 835
|
|
ENDIF
|
|
WRITE(*,*)' IRL '
|
|
836 READ(5,502,ERR=836) IRL
|
|
IF(IRL.LT.0.OR.IRL.GT.1)THEN
|
|
WRITE(*,*)' must be in [0,1]'
|
|
GOTO 836
|
|
ENDIF
|
|
502 FORMAT(I1)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1005
|
|
ENDIF
|
|
c
|
|
1004 WRITE(*,*)' Parameter for the simulation:'
|
|
WRITE(*,'(1x,A18,I6)')'Number of projectiles ',nproj
|
|
WRITE(*,*)'Change ?'
|
|
1007 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1006
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)'Number of projectiles ? '
|
|
840 READ(5,*,ERR=840)nproj
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1007
|
|
ENDIF
|
|
1006 WRITE(*,'(1x,A11,F7.2)')'Start depth ',x0
|
|
WRITE(*,*)'Change ?'
|
|
1009 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1008
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)'Start depth ? '
|
|
841 READ(5,'(F7.0)',ERR=841)x0
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1009
|
|
ENDIF
|
|
1008 WRITE(*,'(1x,A13,F7.2)')'Step size ',cw
|
|
WRITE(*,*)'Change ?'
|
|
1011 READ(5,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 1010
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,*)' Step size ? '
|
|
842 READ(5,'(F7.0)',ERR=842)cw
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1011
|
|
ENDIF
|
|
1010 continue
|
|
c WRITE(*,'(1x,A27,F12.5)')'Random number generator seed',ri
|
|
c WRITE(*,*)'Change ?'
|
|
c1013 READ(5,'(A1)')f
|
|
c IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
c GOTO 1012
|
|
c ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
c WRITE(*,*)' Random number seed :'
|
|
c843 READ(5,'(F12.0)',ERR=843)ri
|
|
c IF((ri/2.-FLOAT(INT(ri/2.))).ne.0.5) ri=ri+1
|
|
c ELSE
|
|
c WRITE(*,*)errcom
|
|
c GOTO 1013
|
|
c ENDIF
|
|
1012 ri2=ri
|
|
ri3=ri
|
|
WRITE(*,*)' Number of layers ? <7'
|
|
850 READ(5,'(I1)',ERR=850)lnum
|
|
IF(lnum.LE.0.OR.lnum.GT.7) THEN
|
|
WRITE(*,*)errcom
|
|
GOTO 1012
|
|
ENDIF
|
|
c
|
|
CALL NULLEN(ordz,mass,elas,rho,spower,conz,
|
|
+ conzlayer,thick,ck,sbe,be)
|
|
DO l=1,lnum
|
|
DO i=1,5
|
|
m=1
|
|
10120 WRITE(*,'(A15,I1)')'Layer number ',l
|
|
WRITE(*,'(A15,I1)')'Element number ',m
|
|
1014 WRITE(*,'(1x,A44)')'Enter name of element '//
|
|
+ '(A2), QQ to stop.'
|
|
851 READ(5,'(A2)',ERR=851)en
|
|
CALL element(en,n)
|
|
c
|
|
IF(n.EQ.0) THEN
|
|
WRITE(*,*)errcom
|
|
GOTO 1014
|
|
ENDIF
|
|
IF(n.EQ.93) GOTO 1100
|
|
CALL lese(p2,p3,p,n)
|
|
ordz(m,l)=FLOAT(n)
|
|
mass(m,l)=p2
|
|
elas(m,l)=p3
|
|
sbe(m,l)=30.
|
|
DO k=1,5
|
|
spower(k,m,l)=p(k)
|
|
ENDDO
|
|
WRITE(*,*)' Concentration of an element must be '//
|
|
+ 'smaller or equal 1.'
|
|
WRITE(*,*)' Summe of all concentrations '//
|
|
+ ' within a layer must be 1.)'
|
|
1015 WRITE(*,*)' Enter concentration of the element.'
|
|
852 READ(5,'(F7.0)',ERR=852)conz(m,l)
|
|
IF(conz(m,l).LE.0.0.OR.conz(m,l).GT.1.0) THEN
|
|
WRITE(*,*)errcom
|
|
GOTO 1015
|
|
ENDIF
|
|
conzlayer(l)=conz(m,l)+conzlayer(l)
|
|
IF(conzlayer(l).GT.1.0) THEN
|
|
WRITE(*,*)' Sum of concentration within the '
|
|
WRITE(*,'(1x,I1,1x,A29)')l,'. layer is > 1. '
|
|
WRITE(*,*)' S T O P !'
|
|
STOP
|
|
ENDIF
|
|
CALL dichte(p4,n)
|
|
rho(l)=rho(l)+p4*conz(m,l)
|
|
IF(m.EQ.5) GOTO 1100
|
|
1016 WRITE(*,*)' Another element in layer ?'
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
m=m+1
|
|
GOTO 10120
|
|
ELSEIF(f.EQ.'n'.OR.f.EQ.'N') THEN
|
|
ordz(m+1,l)=0.0
|
|
mass(m+1,l)=0.0
|
|
elas(m+1,l)=0.0
|
|
DO k=1,5
|
|
spower(k,m+1,l)=0.0
|
|
ENDDO
|
|
IF(m.EQ.1) THEN
|
|
CALL dichte(p4,n)
|
|
rho(l)=p4
|
|
GOTO 1101
|
|
ENDIF
|
|
GOTO 1100
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1016
|
|
ENDIF
|
|
ENDDO
|
|
1100 WRITE(*,*)'Density of layer ? ',rho(l)
|
|
WRITE(*,*)'Density OK ?'
|
|
READ(5,'(A1)')f
|
|
IF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
GOTO 1101
|
|
ELSEIF(f.EQ.'n'.OR.f.EQ.'N') THEN
|
|
WRITE(*,*)'Density of layer ? '
|
|
860 READ(5,'(F7.0)',ERR=860)rho(l)
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1100
|
|
ENDIF
|
|
1101 WRITE(*,*)'Thickness of layer ?'
|
|
861 READ(5,'(F7.0)',ERR=861)thick(l)
|
|
ENDDO
|
|
|
|
c WRITE(*,*)' Ausgabe der Layerzusammensetzung auf Bildschirm'
|
|
c DO l=1,lnum
|
|
c WRITE(*,'(A15,I1)')'Layer Nummer ',l
|
|
c DO m=1,5
|
|
c IF(ordz(m,l).EQ.0.0) GOTO 1200
|
|
c WRITE(*,'(A15,I1)')'Element Nummer ',m
|
|
c WRITE(*,'(A3,F12.5)')'Z: ',ordz(m,l)
|
|
c WRITE(*,'(A3,F12.5)')'M: ',mass(m,l)
|
|
c WRITE(*,'(A5,F12.5)')'E-E: ',elas(m,l)
|
|
c DO k=1,5
|
|
c WRITE(*,'(A17,I1,1x,F12.5)')
|
|
c + 'Stoppkoeffizient ',k,spower(k,m,l)
|
|
c ENDDO
|
|
c WRITE(*,'(A20,F7.3)')'Konzentration: ',conz(m,l)
|
|
c ENDDO
|
|
c1200 WRITE(*,'(A43,F7.3)')
|
|
c + 'Gesamtmassenkonzentration Layer ->muss 1. sein !',conzlayer(l)
|
|
c WRITE(*,'(A30,F7.3)')'Dichte des Layers :',rho(l)
|
|
c WRITE(*,'(A30,F12.3)')'Dicke des Layers :',thick(l)
|
|
c ENDDO
|
|
c
|
|
c hier faengt die Schleife fuer die Erstellung verschiedener Dateien
|
|
c mit unterschiedlicher Energie und unterschiedlicher Schrittweite an
|
|
c
|
|
DO 1,n=1,100
|
|
c
|
|
IF(n.EQ.1)THEN
|
|
IF(batchtype.EQ.'e')THEN
|
|
CALL ausgabenam(eproj,parchar)
|
|
ELSE
|
|
1499 WRITE(*,*)' Specific file name (A3) '
|
|
READ(*,'(A3)',ERR=1499)parchar
|
|
ENDIF
|
|
ENDIF
|
|
c
|
|
1500 ausgabe=inpnam//batchtype//parchar//inpext
|
|
1501 OPEN(UNIT=11,file=ausgabe,STATUS='NEW',ERR=3000)
|
|
CALL batchcreater(inpnam,batchtype,parchar,inpext)
|
|
C
|
|
WRITE(11,2010)zproj,mproj,eproj,esig,alphaproj,alphaprojsig,
|
|
# ef,esb,sheath,erc
|
|
WRITE(11,2011)nproj,ri,ri2,ri3,x0,rd,cw,ca,kk0,kk0r,kdee1,kdee2,
|
|
# ipot,ipotr,irl
|
|
WRITE(11,2012) thick(1),thick(2),thick(3),
|
|
# thick(4),thick(5),thick(6),thick(7),
|
|
# rho(1),rho(2),rho(3),rho(4),rho(5),rho(6),rho(7),
|
|
# ck(1),ck(2),ck(3),ck(4),ck(5),ck(6),ck(7)
|
|
DO 2000 I=1,lmax
|
|
WRITE(11,2013) ordz(1,I),ordz(2,I),ordz(3,I),ordz(4,I),ordz(5,I)
|
|
WRITE(11,2013) mass(1,I),mass(2,I),mass(3,I),mass(4,I),mass(5,I)
|
|
WRITE(11,2013) conz(1,I),conz(2,I),conz(3,I),conz(4,I),conz(5,I)
|
|
WRITE(11,2013) elas(1,I),elas(2,I),elas(3,I),elas(4,I),elas(5,I)
|
|
WRITE(11,2013) sbe(1,I),sbe(2,I),sbe(3,I),sbe(4,I),sbe(5,I)
|
|
WRITE(11,2013) be(1,I),be(2,I),be(3,I),be(4,I),be(5,I)
|
|
c
|
|
WRITE(11,2017) spower(1,1,I),spower(1,2,I),spower(1,3,I),
|
|
+ spower(1,4,I),spower(1,5,I)
|
|
WRITE(11,2017) spower(2,1,I),spower(2,2,I),spower(2,3,I),
|
|
+ spower(2,4,I),spower(2,5,I)
|
|
WRITE(11,2017) spower(3,1,I),spower(3,2,I),spower(3,3,I),
|
|
+ spower(3,4,I),spower(3,5,I)
|
|
WRITE(11,2017) spower(4,1,I),spower(4,2,I),spower(4,3,I),
|
|
+ spower(4,4,I),spower(4,5,I)
|
|
WRITE(11,2017) spower(5,1,I),spower(5,2,I),spower(5,3,I),
|
|
+ spower(5,4,I),spower(5,5,I)
|
|
2000 CONTINUE
|
|
c
|
|
CLOSE(UNIT=11)
|
|
1502 WRITE(*,*)' Another file with new parameters ?'
|
|
READ(*,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 9000
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
c1507 WRITE(*,*)' Welche Parameter sollen geaendert werden ?'
|
|
c WRITE(*,*)' E = Energie (default)'
|
|
c WRITE(*,*)' S = Esigma'
|
|
c WRITE(*,*)' N = Anzahl Myonen'
|
|
c WRITE(*,*)' D = Layerdicken'
|
|
c READ(*,'(A1)')batchtype
|
|
IF(batchtype.EQ.'e'.OR.batchtype.EQ.'E'.or.batchtype.EQ.'')
|
|
+ THEN
|
|
CALL changE(eproj,cw)
|
|
CALL ausgabenam(eproj,parchar)
|
|
ELSEIF(batchtype.EQ.'s'.OR.batchtype.EQ.'S') THEN
|
|
CALL changS(esig)
|
|
1520 WRITE(*,*)' spezieller Dateiname (A3) '
|
|
READ(*,'(A3)',ERR=1520)parchar
|
|
ELSEIF(batchtype.EQ.'n'.OR.batchtype.EQ.'N') THEN
|
|
CALL changN(nproj)
|
|
1521 WRITE(*,*)' spezieller Dateiname (A3) '
|
|
READ(*,'(A3)',ERR=1521)parchar
|
|
ELSEIF(batchtype.EQ.'d'.OR.batchtype.EQ.'D') THEN
|
|
CALL changD(thick,cw,lnum)
|
|
1522 WRITE(*,*)' spezieller Dateiname (A3) '
|
|
READ(*,'(A3)',ERR=1522)parchar
|
|
ELSEIF(batchtype.EQ.'x'.OR.batchtype.EQ.'X') THEN
|
|
CALL changX(eproj,esig)
|
|
1523 WRITE(*,*)' spezieller Dateiname (A3) '
|
|
READ(*,'(A3)',ERR=1523)parchar
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
STOP
|
|
ENDIF
|
|
GOTO 1500
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 1502
|
|
ENDIF
|
|
3000 WRITE(*,*)' Error during file open. '
|
|
WRITE(*,*)' Enter new file name: '
|
|
READ(*,'(A8)')name
|
|
ausgabe=name//inpext
|
|
GOTO 1501
|
|
c
|
|
1 CONTINUE
|
|
c
|
|
2010 FORMAT(2F7.2,1F12.2,7F9.2)
|
|
2011 FORMAT(I9,3F8.0,1F7.2,1F7.0,2F7.2,6I4,I3)
|
|
2012 FORMAT(7F9.2,14F7.2)
|
|
2013 FORMAT(5F9.4)
|
|
2017 FORMAT(5F12.6)
|
|
c
|
|
9000 CALL batchexit(inpnam,batchtype)
|
|
END
|
|
c
|
|
c hier werden die Parameter der Elemente eingelesen
|
|
c
|
|
SUBROUTINE param
|
|
c
|
|
INTEGER i,n
|
|
REAL p2,p3,p4
|
|
REAL p(5)
|
|
CHARACTER str2*17,str3*17,str4*69,str5*12
|
|
c Masse der Elemente, Stoppingpowerdaten nach Andersen-Ziegler und Bindungsenergie
|
|
c der Elemente im bulk
|
|
ENTRY lese(p2,p3,p,n)
|
|
c
|
|
OPEN(UNIT=31,FILE='masse.dat',STATUS='OLD')
|
|
OPEN(UNIT=32,FILE='elast.dat',STATUS='OLD')
|
|
OPEN(UNIT=33,FILE='stopicru.dat',STATUS='OLD')
|
|
c
|
|
DO i=1,n
|
|
READ(31,'(A17)')str2
|
|
READ(32,'(A17)')str3
|
|
READ(33,'(A69)')str4
|
|
ENDDO
|
|
c
|
|
READ(str2(8:16),'(F12.0)')p2
|
|
READ(str3(9:16),'(F12.0)')p3
|
|
READ(str4(4:16),'(F12.0)')p(1)
|
|
READ(str4(17:29),'(F12.0)')p(2)
|
|
READ(str4(30:42),'(F12.0)')p(3)
|
|
READ(str4(43:55),'(F12.0)')p(4)
|
|
READ(str4(56:68),'(F12.0)')p(5)
|
|
c
|
|
CLOSE(UNIT=31)
|
|
CLOSE(UNIT=32)
|
|
CLOSE(UNIT=33)
|
|
c
|
|
c OPEN(UNIT=31,POSITION='rewind')
|
|
c OPEN(UNIT=32,POSITION='rewind')
|
|
c OPEN(UNIT=33,POSITION='rewind')
|
|
c
|
|
RETURN
|
|
c
|
|
c die elementaren Dichten
|
|
c
|
|
ENTRY dichte(p4,n)
|
|
c
|
|
OPEN(UNIT=34,FILE='dichte.dat',STATUS='OLD')
|
|
c
|
|
DO i=1,n
|
|
READ(34,'(A12)')str5
|
|
ENDDO
|
|
c
|
|
READ(str5(4:11),'(F12.0)')p4
|
|
c
|
|
CLOSE(UNIT=34)
|
|
c
|
|
RETURN
|
|
END
|
|
c
|
|
c diese Subroutine erkennt das/die Elemente
|
|
c
|
|
SUBROUTINE element(en,n)
|
|
c
|
|
INTEGER n
|
|
CHARACTER en*2
|
|
c
|
|
n=0
|
|
c
|
|
IF(en.EQ.' H'.OR.en.EQ.'H') n=1
|
|
IF(en.EQ.'He') n=2
|
|
IF(en.EQ.'Li') n=3
|
|
IF(en.EQ.'Be') n=4
|
|
IF(en.EQ.' B'.OR.en.EQ.'B') n=5
|
|
IF(en.EQ.' C'.OR.en.EQ.'C') n=6
|
|
IF(en.EQ.' N'.OR.en.EQ.'N') n=7
|
|
IF(en.EQ.' O'.OR.en.EQ.'O') n=8
|
|
IF(en.EQ.' F'.OR.en.EQ.'F') n=9
|
|
IF(en.EQ.'Ne') n=10
|
|
IF(en.EQ.'Na') n=11
|
|
IF(en.EQ.'Mg') n=12
|
|
IF(en.EQ.'Al') n=13
|
|
IF(en.EQ.'Si') n=14
|
|
IF(en.EQ.' P'.OR.en.EQ.'P') n=15
|
|
IF(en.EQ.' S'.OR.en.EQ.'S') n=16
|
|
IF(en.EQ.'Cl') n=17
|
|
IF(en.EQ.'Ar') n=18
|
|
IF(en.EQ.' K'.OR.en.EQ.'K') n=19
|
|
IF(en.EQ.'Ca') n=20
|
|
IF(en.EQ.'Sc') n=21
|
|
IF(en.EQ.'Ti') n=22
|
|
IF(en.EQ.' V'.OR.en.EQ.'V') n=23
|
|
IF(en.EQ.'Cr') n=24
|
|
IF(en.EQ.'Mn') n=25
|
|
IF(en.EQ.'Fe') n=26
|
|
IF(en.EQ.'Co') n=27
|
|
IF(en.EQ.'Ni') n=28
|
|
IF(en.EQ.'Cu') n=29
|
|
IF(en.EQ.'Zn') n=30
|
|
IF(en.EQ.'Ga') n=31
|
|
IF(en.EQ.'Ge') n=32
|
|
IF(en.EQ.'As') n=33
|
|
IF(en.EQ.'Se') n=34
|
|
IF(en.EQ.'Br') n=35
|
|
IF(en.EQ.'Kr') n=36
|
|
IF(en.EQ.'Rb') n=37
|
|
IF(en.EQ.'Sr') n=38
|
|
IF(en.EQ.' Y'.OR.en.EQ.'Y') n=39
|
|
IF(en.EQ.'Zr') n=40
|
|
IF(en.EQ.'Nb') n=41
|
|
IF(en.EQ.'Mo') n=42
|
|
IF(en.EQ.'Tc') n=43
|
|
IF(en.EQ.'Ru') n=44
|
|
IF(en.EQ.'Rh') n=45
|
|
IF(en.EQ.'Pd') n=46
|
|
IF(en.EQ.'Ag') n=47
|
|
IF(en.EQ.'Cd') n=48
|
|
IF(en.EQ.'In') n=49
|
|
IF(en.EQ.'Sn') n=50
|
|
IF(en.EQ.'Sb') n=51
|
|
IF(en.EQ.'Te') n=52
|
|
IF(en.EQ.' I'.OR.en.EQ.'I') n=53
|
|
IF(en.EQ.'Xe') n=54
|
|
IF(en.EQ.'Cs') n=55
|
|
IF(en.EQ.'Ba') n=56
|
|
IF(en.EQ.'La') n=57
|
|
IF(en.EQ.'Ce') n=58
|
|
IF(en.EQ.'Pr') n=59
|
|
IF(en.EQ.'Nd') n=60
|
|
IF(en.EQ.'Pm') n=61
|
|
IF(en.EQ.'Sm') n=62
|
|
IF(en.EQ.'Eu') n=63
|
|
IF(en.EQ.'Gd') n=64
|
|
IF(en.EQ.'Tb') n=65
|
|
IF(en.EQ.'Dy') n=66
|
|
IF(en.EQ.'Ho') n=67
|
|
IF(en.EQ.'Er') n=68
|
|
IF(en.EQ.'Tm') n=69
|
|
IF(en.EQ.'Yb') n=70
|
|
IF(en.EQ.'Lu') n=71
|
|
IF(en.EQ.'Hf') n=72
|
|
IF(en.EQ.'Ta') n=73
|
|
IF(en.EQ.' W'.OR.en.EQ.'W') n=74
|
|
IF(en.EQ.'Re') n=75
|
|
IF(en.EQ.'Os') n=76
|
|
IF(en.EQ.'Ir') n=77
|
|
IF(en.EQ.'Pt') n=78
|
|
IF(en.EQ.'Au') n=79
|
|
IF(en.EQ.'Hg') n=80
|
|
IF(en.EQ.'Tl') n=81
|
|
IF(en.EQ.'Pb') n=82
|
|
IF(en.EQ.'Bi') n=83
|
|
IF(en.EQ.'Po') n=84
|
|
IF(en.EQ.'At') n=85
|
|
IF(en.EQ.'Rn') n=86
|
|
IF(en.EQ.'Fr') n=87
|
|
IF(en.EQ.'Ra') n=88
|
|
IF(en.EQ.'Ac') n=89
|
|
IF(en.EQ.'Th') n=90
|
|
IF(en.EQ.'Pa') n=91
|
|
IF(en.EQ.' U'.OR.en.EQ.'U') n=92
|
|
IF(en.EQ.'qq'.OR.en.EQ.'QQ') n=93
|
|
c
|
|
RETURN
|
|
END
|
|
c
|
|
c fuers gute Gewissen, die Subroutine nullt alle Parameter
|
|
c
|
|
SUBROUTINE NULLEN(ordz,mass,elas,rho,spower,conz,
|
|
+ conzlayer,thick,ck,sbe,be)
|
|
c
|
|
implicit none
|
|
INTEGER i,k,l
|
|
REAL*4 ordz(5,7),mass(5,7),elas(5,7),spower(5,5,7),conz(5,7)
|
|
REAL*4 conzlayer(7),thick(7),rho(7)
|
|
REAL*4 ck(7),sbe(5,7),be(5,7)
|
|
c
|
|
DO 10 i=1,7
|
|
conzlayer(i)=0.0
|
|
thick(i)=0.0
|
|
rho(i)=0.0
|
|
ck(i)=1.0
|
|
DO 11 k=1,5
|
|
ordz(k,i)=0.0
|
|
mass(k,i)=0.0
|
|
elas(k,i)=0.0
|
|
conz(k,i)=0.0
|
|
sbe(k,i)=0.0
|
|
be(k,i)=0.0
|
|
DO 12 l=1,5
|
|
spower(l,k,i)=0.0
|
|
12 ENDDO
|
|
11 ENDDO
|
|
10 ENDDO
|
|
c
|
|
RETURN
|
|
END
|
|
c
|
|
c Subroutine, die die Energie in ein 3zeichigen Character umwandelt
|
|
c
|
|
SUBROUTINE AUSGABENAM(eproj,parchar)
|
|
c
|
|
implicit none
|
|
|
|
REAL eproj
|
|
INTEGER etmp
|
|
CHARACTER parchar*3,c1*1,c2*1
|
|
c
|
|
DATA c1/'0'/,c2/'0'/
|
|
c
|
|
etmp=INT(eproj/1.E2)
|
|
IF(etmp.LT.100) THEN
|
|
IF(etmp.LT.10) THEN
|
|
WRITE(99,'(A1,A1,I1)')c1,c2,etmp
|
|
GOTO 10
|
|
ENDIF
|
|
WRITE(99,'(A1,I2)')c1,etmp
|
|
GOTO 10
|
|
ENDIF
|
|
WRITE(99,'(I3)')etmp
|
|
10 CLOSE(99)
|
|
READ(99,'(A3)')parchar
|
|
WRITE(*,'(A3)')parchar
|
|
CLOSE(99,STATUS='DELETE')
|
|
c
|
|
RETURN
|
|
END
|
|
c
|
|
c Subroutine, in der die Parameter Energie, SigmaE, Teilchenanzahl,
|
|
c Kanalweite und Schichtdicken geaendert werden koennen
|
|
c (nicht aber die Layerzusammensetzung !)
|
|
c
|
|
SUBROUTINE changes
|
|
c
|
|
implicit none
|
|
|
|
INTEGER i,lnum,nproj
|
|
REAL eproj,esig,thick(3),cw
|
|
CHARACTER errcom*21,f*1
|
|
c
|
|
DATA errcom/'Fehlerhafte Eingabe !'/
|
|
c andere Energie und/oder Kanalweite
|
|
ENTRY changE(eproj,cw)
|
|
WRITE(*,'(A15,F9.2)')' Old energy: ',eproj
|
|
100 WRITE(*,*)' New energy (E < 100.000 eV)'
|
|
READ(*,'(F7.0)',ERR=100)eproj
|
|
110 WRITE(*,*)' Other step size ?'
|
|
READ(*,'(A1)')f
|
|
IF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,'(A25,F7.2)')' Old step size: ',cw
|
|
115 WRITE(*,*)' New step size'
|
|
READ(*,'(F7.0)',ERR=115)cw
|
|
ELSEIF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
RETURN
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 110
|
|
ENDIF
|
|
RETURN
|
|
c andere Energie und anderes Sigma
|
|
ENTRY changX(eproj,esig)
|
|
WRITE(*,'(A15,F9.2)')' old energy: ',eproj
|
|
105 WRITE(*,*)' new energy (E < 100.000 eV)'
|
|
READ(*,'(F7.0)',ERR=105)eproj
|
|
WRITE(*,'(A15,F7.2)')' old Esigma: ',esig
|
|
106 WRITE(*,*)' new Esigma'
|
|
READ(*,'(F7.0)',ERR=106)esig
|
|
RETURN
|
|
c anderes Esigma
|
|
ENTRY changS(esig)
|
|
WRITE(*,'(A15,F7.2)')' old Esigma: ',esig
|
|
120 WRITE(*,*)' new Esigma'
|
|
READ(*,'(F7.0)',ERR=120)esig
|
|
RETURN
|
|
c andere Anzahl Myonen
|
|
ENTRY changN(nproj)
|
|
WRITE(*,'(A20,I6)')' old number of projectiles: ',nproj
|
|
130 WRITE(*,*)' new number of projectiles'
|
|
READ(*,'(I6)',ERR=130)nproj
|
|
RETURN
|
|
c andere Layerdicken und/oder Kanalweite
|
|
ENTRY changD(thick,cw,lnum)
|
|
WRITE(*,*)lnum
|
|
DO i=1,lnum
|
|
WRITE(*,'(A23,I1,2x,F7.2)')' old layer thickness ',i,
|
|
+ thick(i)
|
|
140 WRITE(*,'(A23,I1)')' new layer thickness ',i
|
|
READ(*,'(F7.0)',ERR=140)thick(i)
|
|
150 WRITE(*,*)' Do you want to change the '//
|
|
+ 'layer thickness ? '
|
|
READ(*,'(A1)')f
|
|
IF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
GOTO 160
|
|
ELSEIF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J')THEN
|
|
CONTINUE
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 150
|
|
ENDIF
|
|
ENDDO
|
|
160 WRITE(*,*)' Other step size ?'
|
|
READ(*,'(A1)')f
|
|
IF(f.EQ.'y'.OR.f.EQ.'Y'.OR.f.EQ.'j'.OR.f.EQ.'J') THEN
|
|
WRITE(*,'(A25,F7.2)')' old step size: ',cw
|
|
WRITE(*,*)' new step size'
|
|
READ(*,'(F7.0)',ERR=130)cw
|
|
ELSEIF(f.EQ.'n'.OR.f.EQ.'N'.OR.f.EQ.'') THEN
|
|
RETURN
|
|
ELSE
|
|
WRITE(*,*)errcom
|
|
GOTO 160
|
|
ENDIF
|
|
RETURN
|
|
END
|
|
c
|
|
c Subroutine, in der die Batchkommandos in die Batch-Datei
|
|
c geschrieben werden
|
|
c
|
|
SUBROUTINE batchcreater(inpnam,batchtype,parchar,inpext)
|
|
|
|
implicit none
|
|
|
|
CHARACTER inpnam*4,parchar*3,batchtype*1
|
|
CHARACTER inpext*4,rgeext*4,outext*4,batext*4,errext*4
|
|
CHARACTER batchnam*9
|
|
c
|
|
DATA rgeext /'.rge'/
|
|
DATA outext /'.out'/
|
|
DATA errext /'.err'/
|
|
DATA batext /'.bat'/
|
|
|
|
100 continue
|
|
#if defined (OS_UNIX)
|
|
batchnam=inpnam//batchtype
|
|
#else
|
|
batchnam=inpnam//batchtype//batext
|
|
#endif
|
|
OPEN(UNIT=19,FILE=batchnam,STATUS='NEW',ERR=900)
|
|
GOTO 200
|
|
900 WRITE(*,*)' Batch script already existing, enter new name (A4).'
|
|
READ(*,'(A4)')inpnam
|
|
GOTO 100
|
|
c
|
|
200 continue
|
|
#if defined (OS_UNIX)
|
|
write(19,'(a)') '#!/bin/csh '
|
|
write(19,'(a)') '#'
|
|
WRITE(19,'(a,a,a,a,a,a)')
|
|
+ 'cp ',inpnam,batchtype,parchar,inpext,' eingabe1.inp'
|
|
WRITE(19,'(a)')'trimsp7l_tp'
|
|
WRITE(19,'(a,a,a,a,a)')
|
|
+ 'cp ausgabe1.out ',inpnam,batchtype,parchar,outext
|
|
WRITE(19,'(a,a,a,a,a)')
|
|
+ 'cp ausgabe1.rge ',inpnam,batchtype,parchar,rgeext
|
|
WRITE(19,'(a,a,a,a,a)')
|
|
+ 'cp ausgabe1.err ',inpnam,batchtype,parchar,errext
|
|
WRITE(19,'(a)')'rm -f ausgabe1.out'
|
|
WRITE(19,'(a)')'rm -f ausgabe1.rge'
|
|
WRITE(19,'(a)')'rm -f ausgabe1.err'
|
|
#else
|
|
WRITE(19,500)'copy',inpnam,batchtype,parchar,inpext,
|
|
+ 'eingabe1.inp'
|
|
WRITE(19,501)'trimsp7l_tp'
|
|
WRITE(19,502)'copy ausgabe1.out',inpnam,batchtype,parchar,outext
|
|
WRITE(19,502)'copy ausgabe1.rge',inpnam,batchtype,parchar,rgeext
|
|
WRITE(19,502)'copy ausgabe1.err',inpnam,batchtype,parchar,errext
|
|
WRITE(19,505)'del ausgabe1.out'
|
|
WRITE(19,505)'del ausgabe1.rge'
|
|
WRITE(19,505)'del ausgabe1.err'
|
|
#endif
|
|
RETURN
|
|
c
|
|
ENTRY batchexit(inpnam,batchtype)
|
|
#if defined (OS_UNIX)
|
|
WRITE(19,'(a,a,a,a)')'mv fort.33 ',inpnam,batchtype,'.dat'
|
|
WRITE(19,'(a)')'rm -f eingabe1.inp'
|
|
WRITE(19,'(a)')'rm -f edist'
|
|
#else
|
|
WRITE(19,510)'ren fort.33',inpnam,batchtype,'.dat'
|
|
WRITE(19,505)'del eingabe1.inp'
|
|
WRITE(19,506)'del edist'
|
|
WRITE(19,511)'exit'
|
|
#endif
|
|
RETURN
|
|
c
|
|
500 FORMAT(A4,1x,A4,A1,A3,A4,1x,A12)
|
|
501 FORMAT(A8)
|
|
502 FORMAT(A17,1x,A4,A1,A3,A4)
|
|
505 FORMAT(A16)
|
|
506 FORMAT(A9)
|
|
510 FORMAT(A11,1x,A4,A1,A4)
|
|
511 FORMAT(A4)
|
|
END
|
|
|
|
|
|
|