Add layer index to stop distribution output. Fixed compiler errors.

This commit is contained in:
prokscha 2009-11-17 08:35:57 +00:00
parent 0d5e333fca
commit 6c36e69cd1

View File

@ -5,69 +5,69 @@ CC DURCHGANG VON SCHWEREN TEILCHEN DURCH MATERIE
CC CC
CC REV.: ELOSS2 ANSTELLE VON RGEFIN EINBAUT. CC REV.: ELOSS2 ANSTELLE VON RGEFIN EINBAUT.
CC REV.: UND DOPPELTGENAUE RGE-E-TABELLEN CC REV.: UND DOPPELTGENAUE RGE-E-TABELLEN
CC REV.: Einführung eines Parametersr den Befehl 'BUILD_TAB', mit dem die CC REV.: Einf<EFBFBD>hrung eines Parameters f<>r den Befehl 'BUILD_TAB', mit dem die
CC Variable "PREC" und damit die relative Genauigkeit der Interpolation CC Variable "PREC" und damit die relative Genauigkeit der Interpolation
CC beim Erstellen der Reichweite-Energie-Tabelle bestimmt werden kann. CC beim Erstellen der Reichweite-Energie-Tabelle bestimmt werden kann.
CC Damit lassen sich zum Programmabbruch führende Fehler in der Routine CC Damit lassen sich zum Programmabbruch f<EFBFBD>hrende Fehler in der Routine
CC SPLIN3 vermeiden, die zuvor bei gewissen Materialien wie z. B. reinem CC SPLIN3 vermeiden, die zuvor bei gewissen Materialien wie z. B. reinem
CC Aluminium auftraten. Zusätzlich gibt es hier und in UPLIBK.FOR einige CC Aluminium auftraten. Zus<EFBFBD>tzlich gibt es hier und in UPLIBK.FOR einige
CC weitere kleine Änderungen. KT 10-JAN-95 CC weitere kleine <EFBFBD>nderungen. KT 10-JAN-95
CC REV.: Eine und damit vielleicht bereits die alleinige Ursache für Programm- CC REV.: Eine und damit vielleicht bereits die alleinige Ursache f<EFBFBD>r Programm-
CC abstürze, die besonders bei hohen Teilchenzahlen auftraten, ist gefun- CC abst<EFBFBD>rze, die besonders bei hohen Teilchenzahlen auftraten, ist gefun-
CC den und beseitigt. Die Energie-Reichweite-Tabelle wird von einem kubi- CC den und beseitigt. Die Energie-Reichweite-Tabelle wird von einem kubi-
CC schen Spline-Polynom angenähert, das sich aufgrund von Rundungsfehlern CC schen Spline-Polynom angen<EFBFBD>hert, das sich aufgrund von Rundungsfehlern
CC unter Umständen numerisch nicht korrekt lösen läßt. In der Funktion CC unter Umst<EFBFBD>nden numerisch nicht korrekt l<EFBFBD>sen l<><6C>t. In der Funktion
CC ELOSS2 in UPLIBK.FOR wurde bislang in diesem Fall kommentarlos eine CC ELOSS2 in UPLIBK.FOR wurde bislang in diesem Fall kommentarlos eine
CC Stop-Anweisung ausgeführt. Jetzt wird das betreffende Teilchen aus der CC Stop-Anweisung ausgef<EFBFBD>hrt. Jetzt wird das betreffende Teilchen aus der
CC weiteren Rechnung genommen und dies in einem Hinweis in der Standard- CC weiteren Rechnung genommen und dies in einem Hinweis in der Standard-
CC Ausgabedatei vermerkt. Bei der anzunehmenden Rate von einem bis zwei CC Ausgabedatei vermerkt. Bei der anzunehmenden Rate von einem bis zwei
CC Teilchen pro 100,000 wird dies den Aussagewert der Rechnungen nicht CC Teilchen pro 100,000 wird dies den Aussagewert der Rechnungen nicht
CC einschränken. In der Funktion ELOSS2 wurde ferner die Genauigkeit der CC einschr<EFBFBD>nken. In der Funktion ELOSS2 wurde ferner die Genauigkeit der
CC Konstanten 4*PI/3 und 2*PI/3 von 8 auf 16 Stellen verbessert, wodurch CC Konstanten 4*PI/3 und 2*PI/3 von 8 auf 16 Stellen verbessert, wodurch
CC eine Reihe von Fehlberechnungen bereits vermieden wurde. Allen weiter- CC eine Reihe von Fehlberechnungen bereits vermieden wurde. Allen weiter-
CC en Stop-Anweisungen, die zu einem ähnlich unerklärten Programmende CC en Stop-Anweisungen, die zu einem <EFBFBD>hnlich unerkl<EFBFBD>rten Programmende
CC führten, wurde die Ausgabe eines Hinweises über die Ursachen des Ab- CC f<EFBFBD>hrten, wurde die Ausgabe eines Hinweises <EFBFBD>ber die Ursachen des Ab-
CC bruchs und deren mögliche Behebung vorangestellt. CC bruchs und deren m<EFBFBD>gliche Behebung vorangestellt.
CC In der Standard-Ausgabedatei werden jetzt Datum und Uhrzeit vom Start CC In der Standard-Ausgabedatei werden jetzt Datum und Uhrzeit vom Start
CC und Ende des Programms sowie die Dauer der Rechnung festgehalten. CC und Ende des Programms sowie die Dauer der Rechnung festgehalten.
CC KT 30-JAN-95 CC KT 30-JAN-95
CC REV.: Der Fehler in der Zeitausgabe bei einer Rechnung über Mitternacht ist CC REV.: Der Fehler in der Zeitausgabe bei einer Rechnung <EFBFBD>ber Mitternacht ist
CC korrigiert. Vier neue Eingabedatei-Befehle sind implementiert. CC korrigiert. Vier neue Eingabedatei-Befehle sind implementiert.
CC Die beiden Befehle IMPULS und WINKEL haben eine analoge Struktur. Sie CC Die beiden Befehle IMPULS und WINKEL haben eine analoge Struktur. Sie
CC bewirken die Ausgabe der Impulsbeträge [MeV/c] bzw. des Streuwinkels CC bewirken die Ausgabe der Impulsbetr<EFBFBD>ge [MeV/c] bzw. des Streuwinkels
CC zur Z-Achse [rad] der Teilchen in die durch den Parameter festgelegte CC zur Z-Achse [rad] der Teilchen in die durch den Parameter festgelegte
CC Unit vor bzw. hinter einem Bauteil, das durch die Position des Befehls CC Unit vor bzw. hinter einem Bauteil, das durch die Position des Befehls
CC in der Eingabedatei festgelegt ist. In den Vektor IMPOUT bzw. THEOUT CC in der Eingabedatei festgelegt ist. In den Vektor IMPOUT bzw. THEOUT
CC mit jeweils der Länge 201 wird an die Position der Nummer des nachfol- CC mit jeweils der L<EFBFBD>nge 201 wird an die Position der Nummer des nachfol-
CC genden Bauteiles die Nummer der Ausgabe-Unit geschrieben. In der Rou- CC genden Bauteiles die Nummer der Ausgabe-Unit geschrieben. In der Rou-
CC tine COMPUT erfolgt später genau dann eine Ausgabe, wenn der zu dem CC tine COMPUT erfolgt sp<EFBFBD>ter genau dann eine Ausgabe, wenn der zu dem
CC nachfolgenden Bauteil gehörende Wert des Vektors von Null verschieden CC nachfolgenden Bauteil geh<EFBFBD>rende Wert des Vektors von Null verschieden
CC ist. Um bei Verwendung des Befehls SKIP keine unerwünschte Ausgabe zu CC ist. Um bei Verwendung des Befehls SKIP keine unerw<EFBFBD>nschte Ausgabe zu
CC erhalten, sollten 'IMPULS' und 'WINKEL' vor 'GEOMETRY' stehen. CC erhalten, sollten 'IMPULS' und 'WINKEL' vor 'GEOMETRY' stehen.
CC Auch der Befehl STOPPED hat die Nummer der Ausgabe-Unit als Parameter CC Auch der Befehl STOPPED hat die Nummer der Ausgabe-Unit als Parameter
CC mit demselben Prinzip. Er bewirkt die Ausgabe der Stoppverteilung in CC mit demselben Prinzip. Er bewirkt die Ausgabe der Stoppverteilung in
CC dem zuletzt definierten Bauteil in Form einer Datei, die soviele Werte CC dem zuletzt definierten Bauteil in Form einer Datei, die soviele Werte
CC enthält wie das Bauteil in Einzellagen aufgeteilt ist. CC enth<EFBFBD>lt wie das Bauteil in Einzellagen aufgeteilt ist.
CC Mit dem Befehl FOCUS läßt sich schließlich der Strahl der einkommenden CC Mit dem Befehl FOCUS l<EFBFBD><EFBFBD>t sich schlie<EFBFBD>lich der Strahl der einkommenden
CC Teilchen fokussieren. Der erste Parameter gibt die Z-Position [cm] der CC Teilchen fokussieren. Der erste Parameter gibt die Z-Position [cm] der
CC x=0 Fokusgeraden an, der zweite die Z-Position der y=0 Fokusgeraden, CC x=0 Fokusgeraden an, der zweite die Z-Position der y=0 Fokusgeraden,
CC die, keine Ablenkung durch Streuung vorausgesetzt, alle Teilchenbahnen CC die, keine Ablenkung durch Streuung vorausgesetzt, alle Teilchenbahnen
CC schneiden. Erlaubt sind Eingaben von -1000 bis +1000; ein negativer CC schneiden. Erlaubt sind Eingaben von -1000 bis +1000; ein negativer
CC Wert bewirkt eine Defokussierung, Null beläßt den Strahl parallel. CC Wert bewirkt eine Defokussierung, Null bel<EFBFBD><EFBFBD>t den Strahl parallel.
CC KT 16-FEB-95 CC KT 16-FEB-95
CC REV.: Implementierung eines neuen Eingabedatei-Befehls zue Ausgabe der X,Y- CC REV.: Implementierung eines neuen Eingabedatei-Befehls zue Ausgabe der X,Y-
CC Koordinaten ('WHERE_XY'). Die Bearbeitung erfolgt völlig analog zu CC Koordinaten ('WHERE_XY'). Die Bearbeitung erfolgt v<EFBFBD>llig analog zu
CC den Befehlen IMPULS und WINKEL. Ferner die endgültige Lösung des CC den Befehlen IMPULS und WINKEL. Ferner die endg<EFBFBD>ltige L<>sung des
CC Mitternacht-Problems. KT 21-FEB-95 CC Mitternacht-Problems. KT 21-FEB-95
CC REV.: Änderung der Zuweisungen von Ein- und Ausgabeunits, um den Code auch CC REV.: <EFBFBD>nderung der Zuweisungen von Ein- und Ausgabeunits, um den Code auch
CC für AXP-Rechner verwenden zu können. KT 5-MAR-95 CC f<EFBFBD>r AXP-Rechner verwenden zu k<EFBFBD>nnen. KT 5-MAR-95
CC REV.: Implementierung eines homogenen Magnetfeldes parallel zu Z, Befehl CC REV.: Implementierung eines homogenen Magnetfeldes parallel zu Z, Befehl
CC MAGNETIC. Parameter: 1. Z-Koordinate des Anfangs, 2. Stärke in Gauß, CC MAGNETIC. Parameter: 1. Z-Koordinate des Anfangs, 2. St<EFBFBD>rke in Gau<EFBFBD>,
CC wobei das Vorzeichen die Richtung in Bezug auf Z angibt. Ein neuer CC wobei das Vorzeichen die Richtung in Bezug auf Z angibt. Ein neuer
CC Befehl für die X,Y-Ausgabe, der nicht nur die Teilchen erfaßt, die CC Befehl f<EFBFBD>r die X,Y-Ausgabe, der nicht nur die Teilchen erfa<EFBFBD>t, die
CC das Bauteil treffen: ALL_XY. CC das Bauteil treffen: ALL_XY.
CC CC
CC Alle Änderungen sind mit "c-kt" kommentiert. CC Alle <EFBFBD>nderungen sind mit "c-kt" kommentiert.
cc cc
cc cc
cc cc
@ -133,20 +133,20 @@ C ----------------------------------------------------------------------
CHARACTER*10 CMD, CMDTAB(33), GEOTYP(2), OUTTYP(7), BEAMTY(3) CHARACTER*10 CMD, CMDTAB(33), GEOTYP(2), OUTTYP(7), BEAMTY(3)
CHARACTER*20 COMENT CHARACTER*20 COMENT
c-kt Uhrzeit, Datum und Systemzeit bei Programmbeginn und -ende sowie c-kt Uhrzeit, Datum und Systemzeit bei Programmbeginn und -ende sowie
c-kt die Zählvariable für die aus der Rechnung genommenen Teilchen c-kt die Z<EFBFBD>hlvariable f<EFBFBD>r die aus der Rechnung genommenen Teilchen
CHARACTER*8 startzeit, endezeit CHARACTER*8 startzeit, endezeit
CHARACTER*9 startdatum, endedatum CHARACTER*9 startdatum, endedatum
REAL*4 startsec, dauer REAL*4 startsec, dauer
INTEGER*4 h, m, s, fehler INTEGER*4 h, m, s, fehler
c-kt Ende c-kt Ende
c-kt Variablen für MAGNETIC: Beginn und Stärke des Magnetfeldes [cm], [Gauss] c-kt Variablen f<EFBFBD>r MAGNETIC: Beginn und St<EFBFBD>rke des Magnetfeldes [cm], [Gauss]
REAL*4 MSTART, MGAUSS REAL*4 MSTART, MGAUSS
REAL*8 RGDATA REAL*8 RGDATA
INTEGER*4 SEEDS INTEGER*4 SEEDS
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY und ALL_XY: c-kt STOPPED, WHERE_XY und ALL_XY:
INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT
c-kt Deklaration neuer Bezeichner für Ein- und Ausgabeunit: SYSOUT, SYSIN c-kt Deklaration neuer Bezeichner f<EFBFBD>r Ein- und Ausgabeunit: SYSOUT, SYSIN
INTEGER*2 SYSOUT, SYSIN INTEGER*2 SYSOUT, SYSIN
LOGICAL TEST, RULER, LAYON, LAYGEO, BEAMP, LOGICAL TEST, RULER, LAYON, LAYGEO, BEAMP,
1 BEAMXY, SEEDOK, MASSOK, TABOK, SCATTR, STRAGG, 1 BEAMXY, SEEDOK, MASSOK, TABOK, SCATTR, STRAGG,
@ -168,14 +168,14 @@ c-kt Deklaration neuer Bezeichner f
9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM, 9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM,
1 RMAX, 1 RMAX,
2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2 2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
3 , XFOCUS, YFOCUS 3 , XFOCUS, YFOCUS
c-kt Beginn und Stärke des Magnetfeldes c-kt Beginn und St<EFBFBD>rke des Magnetfeldes
4 , MSTART, MGAUSS 4 , MSTART, MGAUSS
COMMON COMMON
1 / KINEMA / ID, XX, YY, ZZ, 1 / KINEMA / ID, XX, YY, ZZ,
2 PX, PY, PZ, PTOTAL, 2 PX, PY, PZ, PTOTAL,
c-kt Einführen der Variable TTHETA für den Tangens des Streuwinkels: c-kt Einf<EFBFBD>hren der Variable TTHETA f<EFBFBD>r den Tangens des Streuwinkels:
3 THETA, PHI, STHETA, CTHETA, TTHETA, 3 THETA, PHI, STHETA, CTHETA, TTHETA,
4 SPHI, CPHI, 4 SPHI, CPHI,
5 TTOTAL, TLAST, 5 TTOTAL, TLAST,
@ -185,13 +185,13 @@ c-kt Einf
9 / COMPON / NZCOMP(20), ACOMP(20), NATOM(20), NELEM, NELEMC 9 / COMPON / NZCOMP(20), ACOMP(20), NATOM(20), NELEM, NELEMC
1 / SEEDCO / SEEDS (6) 1 / SEEDCO / SEEDS (6)
COMMON COMMON
c-kt Deklaration neuer Bezeichner für Ein- und Ausgabeunit: SYSOUT, SYSIN c-kt Deklaration neuer Bezeichner f<EFBFBD>r Ein- und Ausgabeunit: SYSOUT, SYSIN
1 / STATUS / SYSOUT, SYSIN, TEST 1 / STATUS / SYSOUT, SYSIN, TEST
3 / INPUT / WPARM(6) 3 / INPUT / WPARM(6)
c-kt Zählvariable r die aus der Rechnung genommenen Teilchen: c-kt Z<EFBFBD>hlvariable f<EFBFBD>r die aus der Rechnung genommenen Teilchen:
COMMON COMMON
1 / COUNT / fehler 1 / COUNT / fehler
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY und ALL_XY: c-kt STOPPED, WHERE_XY und ALL_XY:
COMMON COMMON
1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201), 1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201),
@ -252,10 +252,10 @@ c-kt den Zeitpunkt des Programmbeginns festhalten
CALL DATE(startdatum) CALL DATE(startdatum)
CALL TIME(startzeit) CALL TIME(startzeit)
startsec = SECNDS(0.0) startsec = SECNDS(0.0)
c-kt Initialisieren des Zählers für die aus der Rechnung genommenen Teilchen c-kt Initialisieren des Z<EFBFBD>hlers f<>r die aus der Rechnung genommenen Teilchen
fehler = 0 fehler = 0
c-kt Ende c-kt Ende
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
XFOCUS = 0.0 XFOCUS = 0.0
YFOCUS = 0.0 YFOCUS = 0.0
c-kt Ende c-kt Ende
@ -286,10 +286,10 @@ c-kt Ende
IOTYPE(I) = 1 IOTYPE(I) = 1
NLIMIT(I) = 0 NLIMIT(I) = 0
NLUNIT(I) = 6 NLUNIT(I) = 6
c-kt Integer-Array für die Unit-Nummern zu dem Befehl STOPPED: c-kt Integer-Array f<EFBFBD>r die Unit-Nummern zu dem Befehl STOPPED:
STPOUT(I) = 0 STPOUT(I) = 0
10 CONTINUE 10 CONTINUE
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt WHERE_XY und ALL_XY c-kt WHERE_XY und ALL_XY
DO 11 I=1,201 DO 11 I=1,201
IMPOUT(I) = 0 IMPOUT(I) = 0
@ -562,7 +562,7 @@ C ----------------------------------------------------------------------
IF ( LAYON .AND. .NOT. TABOK .AND. ( NELEMC .EQ. NELEM ) IF ( LAYON .AND. .NOT. TABOK .AND. ( NELEMC .EQ. NELEM )
1 .AND. MASSOK ) 1 .AND. MASSOK )
1THEN 1THEN
c-kt Beginn der Änderung zur Parameterübergabe c-kt Beginn der <EFBFBD>nderung zur Parameter<EFBFBD>bergabe
PREC = ABS( WPARM(1) ) PREC = ABS( WPARM(1) )
IF ( PREC .EQ. 0.0 ) THEN IF ( PREC .EQ. 0.0 ) THEN
PREC = 1.0E-04 PREC = 1.0E-04
@ -601,15 +601,15 @@ c-kt Fortsetzung eines Hinweises, der von DGETAB bei IFLAG=5 gegeben wird:
ELSE IF ( IFLAG .EQ. 1 ) THEN ELSE IF ( IFLAG .EQ. 1 ) THEN
c-kt Hilfe bei der Fehlersuche: c-kt Hilfe bei der Fehlersuche:
WRITE (SYSOUT,5556) WRITE (SYSOUT,5556)
5556 FORMAT(' Zu wenig Einträge in der '// 5556 FORMAT(' Zu wenig Eintraege in der '//
1 'Energie-Reichweite-Tabelle.' 1 'Energie-Reichweite-Tabelle.'
2 /' Wahrscheinlich muß entweder für diese Schicht mit dem '// 2 /' Wahrscheinlich muss entweder fuer diese Schicht mit dem '//
3 'Befehl' 3 ,'Befehl',
4 /'''BUILD_TAB'' ein Parameter kleiner 1.E-4 übergeben '// 4 /'''BUILD_TAB'' ein Parameter kleiner 1.E-4 uebergeben '//
5 'oder der ' 5 'oder der '
6 /' 3. Parameter von ''PARTICLE'' vergrößert werden.') 6 /' 3. Parameter von ''PARTICLE'' vergroessert werden.')
ELSE ELSE
c-kt für die anderen Fälle habe ich keine Informationen bereit: c-kt f<EFBFBD>r die anderen F<>lle habe ich keine Informationen bereit:
WRITE (SYSOUT,5557) IFLAG WRITE (SYSOUT,5557) IFLAG
5557 FORMAT(' ROUTINE ''DGETAB'' mit Fehler ',I1,' verlassen.') 5557 FORMAT(' ROUTINE ''DGETAB'' mit Fehler ',I1,' verlassen.')
ENDIF ENDIF
@ -752,9 +752,9 @@ c-kt Teilchen:
c-kt Ende c-kt Ende
c-kt Schließen der Standard-Ausgabedatei c-kt Schlie<EFBFBD>en der Standard-Ausgabedatei
c CLOSE(SYSOUT) c CLOSE(SYSOUT)
c-kt Schließen der Standard-Eingabedatei c-kt Schlie<EFBFBD>en der Standard-Eingabedatei
c CLOSE(SYSIN) c CLOSE(SYSIN)
GOTO 9999 GOTO 9999
@ -978,7 +978,7 @@ C ----------------------------------------------------------------------
c-kt Anfang c-kt Anfang
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "IMPULS" AUSGABEANWEISUNG FÜR DEN AKTUELLEN IMPULS c "IMPULS" AUSGABEANWEISUNG F<EFBFBD>R DEN AKTUELLEN IMPULS
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
2400 IF ( .NOT. SKIP ) THEN 2400 IF ( .NOT. SKIP ) THEN
IMPOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 ) IMPOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 )
@ -987,7 +987,7 @@ c ----------------------------------------------------------------------
GOTO 50 GOTO 50
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "WINKEL" AUSGABEANWEISUNG FÜR DEN AKTUELLEN STREUWINKEL c "WINKEL" AUSGABEANWEISUNG F<EFBFBD>R DEN AKTUELLEN STREUWINKEL
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
2500 IF ( .NOT. SKIP ) THEN 2500 IF ( .NOT. SKIP ) THEN
THEOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 ) THEOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 )
@ -996,7 +996,7 @@ c ----------------------------------------------------------------------
GOTO 50 GOTO 50
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "STOPPED" AUSGABEANWEISUNG FÜR DIE STOPPVERTEILUNG IN DER SCHICHT c "STOPPED" AUSGABEANWEISUNG F<EFBFBD>R DIE STOPPVERTEILUNG IN DER SCHICHT
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
2600 IF ( .NOT. SKIP ) THEN 2600 IF ( .NOT. SKIP ) THEN
STPOUT(NGRP) = IFIX ( WPARM(1) + 0.5 ) STPOUT(NGRP) = IFIX ( WPARM(1) + 0.5 )
@ -1005,7 +1005,7 @@ c ----------------------------------------------------------------------
GOTO 50 GOTO 50
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "FOCUS" ANGABEN ÜBER DIE FOKUSSIERUNG DES EINGANGSSTRAHLS c "FOCUS" ANGABEN <EFBFBD>BER DIE FOKUSSIERUNG DES EINGANGSSTRAHLS
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
2700 XFOCUS = WPARM(1) 2700 XFOCUS = WPARM(1)
YFOCUS = WPARM(2) YFOCUS = WPARM(2)
@ -1014,7 +1014,7 @@ c ----------------------------------------------------------------------
GOTO 50 GOTO 50
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "WHERE_XY" AUSGABEANWEISUNG FÜR DIE X-Y-KOORDINATEN VOR DER SCHICHT c "WHERE_XY" AUSGABEANWEISUNG F<EFBFBD>R DIE X-Y-KOORDINATEN VOR DER SCHICHT
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
2800 IF ( .NOT. SKIP ) THEN 2800 IF ( .NOT. SKIP ) THEN
XYOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 ) XYOUT(NLAY+1) = IFIX ( WPARM(1) + 0.5 )
@ -1028,12 +1028,12 @@ c ----------------------------------------------------------------------
2900 MSTART = WPARM(1) 2900 MSTART = WPARM(1)
MGAUSS = WPARM(2) MGAUSS = WPARM(2)
CALL TBOUND ('R4','START B-FELD / CM ',MSTART, 0., 120., 'IN ') CALL TBOUND ('R4','START B-FELD / CM ',MSTART, 0., 120., 'IN ')
CALL TBOUND ('R4','STÄRKE B-FELD / GAUSS ', CALL TBOUND ('R4','ST<EFBFBD>RKE B-FELD / GAUSS ',
1 MGAUSS, -1.0E+05, 1.0E+05, 'IN ') 1 MGAUSS, -1.0E+05, 1.0E+05, 'IN ')
GOTO 50 GOTO 50
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
c "ALL_XY" AUSGABEANWEISUNG FÜR DIE X-Y-KOORDINATEN VOR DER SCHICHT c "ALL_XY" AUSGABEANWEISUNG F<EFBFBD>R DIE X-Y-KOORDINATEN VOR DER SCHICHT
c ---------------------------------------------------------------------- c ----------------------------------------------------------------------
3000 IF ( .NOT. SKIP ) THEN 3000 IF ( .NOT. SKIP ) THEN
XYALL(NLAY+1) = IFIX ( WPARM(1) + 0.5 ) XYALL(NLAY+1) = IFIX ( WPARM(1) + 0.5 )
@ -1084,22 +1084,22 @@ c SUBROUTINE COMPUT (NMAX,NSVMAX,IZL,FORM)
SUBROUTINE COMPUT (NMAX,NSVMAX,FORM) ! IZL removed SUBROUTINE COMPUT (NMAX,NSVMAX,FORM) ! IZL removed
CHARACTER*1 ICHAR, BACKSC, STOPPD CHARACTER*1 ICHAR, BACKSC, STOPPD
CHARACTER*20 COMENT CHARACTER*20 COMENT
c-kt Hilfsvariable für die Berechnung der Fokussierung c-kt Hilfsvariable f<EFBFBD>r die Berechnung der Fokussierung
REAL*4 xxf, yyf, temp REAL*4 xxf, yyf, temp
c-kt Variablen für MAGNETIC: Beginn und Stärke des Magnetfeldes [cm], [Gauss] c-kt Variablen f<EFBFBD>r MAGNETIC: Beginn und St<EFBFBD>rke des Magnetfeldes [cm], [Gauss]
REAL*4 MSTART, MGAUSS REAL*4 MSTART, MGAUSS
c-kt Hilfsvariable für die Berechnung der Bahn im Magnetfeld: c-kt Hilfsvariable f<EFBFBD>r die Berechnung der Bahn im Magnetfeld:
REAL*4 PXPY, radius, MZDIST, TMFLUG, omega, rotats, PHIXY, REAL*4 PXPY, radius, MZDIST, TMFLUG, omega, rotats, PHIXY,
1 XHELIX, YHELIX, PHIHELIXA, PHIHELIXB, PHIHMP, 1 XHELIX, YHELIX, PHIHELIXA, PHIHELIXB, PHIHMP,
2 DELTA, DIFA, DIFB, MAXRAD 2 DELTA, DIFA, DIFB, MAXRAD
REAL*8 RGDATA, D1, D2, D3 REAL*8 RGDATA, D1, D2, D3
INTEGER*4 SEEDS INTEGER*4 SEEDS
c-kt Zählvariable r die aus der Rechnung genommenen Teilchen: c-kt Z<EFBFBD>hlvariable f<EFBFBD>r die aus der Rechnung genommenen Teilchen:
INTEGER*4 fehler INTEGER*4 fehler
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY und ALL_XY: c-kt STOPPED, WHERE_XY und ALL_XY:
INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
INTEGER*2 SYSOUT, SYSIN INTEGER*2 SYSOUT, SYSIN
INTEGER*4 TEST INTEGER*4 TEST
LOGICAL SCATTR, STRAGG, STRAG2, FORM LOGICAL SCATTR, STRAGG, STRAG2, FORM
@ -1119,13 +1119,13 @@ c-kt Deklaration eines neuen Bezeichners f
9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM, 9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM,
1 RMAX, 1 RMAX,
2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2 2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
3 , XFOCUS, YFOCUS 3 , XFOCUS, YFOCUS
c-kt Beginn und Stärke des Magnetfeldes c-kt Beginn und St<EFBFBD>rke des Magnetfeldes
4 , MSTART, MGAUSS 4 , MSTART, MGAUSS
9 / KINEMA / ID, X, Y, Z, 9 / KINEMA / ID, X, Y, Z,
1 PX, PY, PZ, PTOTAL, 1 PX, PY, PZ, PTOTAL,
c-kt Einführen der Variable TTHETA für den Tangens des Streuwinkels: c-kt Einf<EFBFBD>hren der Variable TTHETA f<EFBFBD>r den Tangens des Streuwinkels:
2 THETA, PHI, STHETA, CTHETA, TTHETA, 2 THETA, PHI, STHETA, CTHETA, TTHETA,
3 SPHI, CPHI, 3 SPHI, CPHI,
4 TTOTAL, TLAST, 4 TTOTAL, TLAST,
@ -1139,14 +1139,14 @@ c-kt Einf
4 / SEEDCO / SEEDS (6) 4 / SEEDCO / SEEDS (6)
5 / INFOCO / NPARTI, NTHROU, NSTOP(200), NSTRVO(200), 5 / INFOCO / NPARTI, NTHROU, NSTOP(200), NSTRVO(200),
6 NSTRIN(200), NRUECK(200), NSTRGE(200), NMLRE(200) 6 NSTRIN(200), NRUECK(200), NSTRGE(200), NMLRE(200)
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
COMMON COMMON
1 / STATUS / SYSOUT, SYSIN, TEST 1 / STATUS / SYSOUT, SYSIN, TEST
c 1 / STATUS / SYSOUT c 1 / STATUS / SYSOUT
c-kt Zählvariable r die aus der Rechnung genommenen Teilchen: c-kt Z<EFBFBD>hlvariable f<EFBFBD>r die aus der Rechnung genommenen Teilchen:
COMMON COMMON
1 / COUNT / fehler 1 / COUNT / fehler
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY, ALL_XY und INIT_OUT: c-kt STOPPED, WHERE_XY, ALL_XY und INIT_OUT:
COMMON COMMON
1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201), 1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201),
@ -1199,7 +1199,7 @@ c enddo
STRAG2 = .TRUE. STRAG2 = .TRUE.
ELSE ELSE
STRAG2 = .FALSE. STRAG2 = .FALSE.
c-kt IRELST ist nur für die Ausgabe mit I3 in 'OUTPUT' definiert; c-kt IRELST ist nur f<EFBFBD>r die Ausgabe mit I3 in 'OUTPUT' definiert;
c-kt es scheint mir sinnvoller, dort RELSTR direkt mit (E10.4) auszugeben. c-kt es scheint mir sinnvoller, dort RELSTR direkt mit (E10.4) auszugeben.
c-kt IRELST = IFIX( RELSTR * 1000. ) c-kt IRELST = IFIX( RELSTR * 1000. )
ENDIF ENDIF
@ -1224,13 +1224,13 @@ C MERKE ANFANGSENERGIE UND -REICHW.
RBEGIN = DRANGE ( EBEGIN, RGDATA(1,ILAYS(NFIRST)), RBEGIN = DRANGE ( EBEGIN, RGDATA(1,ILAYS(NFIRST)),
1 ILAYE(NFIRST) ) 1 ILAYE(NFIRST) )
c-kt Wenn 'DRANGE' einen negativen Wert übergibt, hatte ein Teilchen einen c-kt Wenn 'DRANGE' einen negativen Wert <EFBFBD>bergibt, hatte ein Teilchen einen
c-kt höheren Wert r die kinetische Energie als der größte tabellierte c-kt h<EFBFBD>heren Wert f<EFBFBD>r die kinetische Energie als der gr<EFBFBD><EFBFBD>te tabellierte
c-kt Energiewert: c-kt Energiewert:
IF (RBEGIN .LT. 0.0) THEN IF (RBEGIN .LT. 0.0) THEN
WRITE (SYSOUT,181) NSV WRITE (SYSOUT,181) NSV
181 FORMAT(' ',T5,'Startnummer des Teilchens',T50,I22,/T5, 181 FORMAT(' ',T5,'Startnummer des Teilchens',T50,I22,/T5,
1 'Der 3. Parameter des Befehls PARTICLE muß vergrößert '// 1 'Der 3. Parameter des Befehls PARTICLE muss vergroessert '//
2 'werden.') 2 'werden.')
STOP 12 STOP 12
ENDIF ENDIF
@ -1239,14 +1239,14 @@ c-kt Ende
IF ( STRAG2) THEN IF ( STRAG2) THEN
RELSTR = STRAG1( PTOTAL, BMASS ) RELSTR = STRAG1( PTOTAL, BMASS )
c-kt IRELST ist nur für die Ausgabe mit I3 in 'OUTPUT' definiert; c-kt IRELST ist nur f<EFBFBD>r die Ausgabe mit I3 in 'OUTPUT' definiert;
c-kt es scheint mir sinnvoller, dort RELSTR direkt mit (E10.4) auszugeben. c-kt es scheint mir sinnvoller, dort RELSTR direkt mit (E10.4) auszugeben.
c-kt IRELST = IFIX( RELSTR * 1000. ) c-kt IRELST = IFIX( RELSTR * 1000. )
ENDIF ENDIF
ENDIF ENDIF
c-kt Wenn mindestens eine FOCUS-Konstante ungleich Null ist, fokussiere c-kt Wenn mindestens eine FOCUS-Konstante ungleich Null ist, fokussiere
c-kt den Strahl, sonst setze die üblichen Anfangswerte c-kt den Strahl, sonst setze die <EFBFBD>blichen Anfangswerte
IF ( XFOCUS .NE. 0.0 .OR. YFOCUS .NE. 0.0 ) THEN IF ( XFOCUS .NE. 0.0 .OR. YFOCUS .NE. 0.0 ) THEN
IF ( XFOCUS .NE. 0.0 ) THEN IF ( XFOCUS .NE. 0.0 ) THEN
xxf = X / XFOCUS xxf = X / XFOCUS
@ -1311,7 +1311,7 @@ C TRACK THROUGH LAYERS AND HOLES
C ---------------------------------------------------------------------- C ----------------------------------------------------------------------
DO 200 IL=1,NLAY DO 200 IL=1,NLAY
IF ( ILAYS(IL) .LT. 0 ) GOTO 200 IF ( ILAYS(IL) .LT. 0 ) GOTO 200
c-kt (zur Erklärung dieser Zeile: ILAYS ist genau dann negativ, wenn die c-kt (zur Erkl<EFBFBD>rung dieser Zeile: ILAYS ist genau dann negativ, wenn die
c-kt betreffende Schicht mit SKIP aus der Rechnung genommen wurde.) c-kt betreffende Schicht mit SKIP aus der Rechnung genommen wurde.)
c-kt Gegebenenfalls Speichern des Impulsbetrages oder des Streuwinkels c-kt Gegebenenfalls Speichern des Impulsbetrages oder des Streuwinkels
@ -1339,7 +1339,7 @@ c-kt Die Magnetfeldlinien zeigen bei positivem MGAUSS in Strahlrichtung, bei
c-kt negativem entgegen der Strahlrichtung. Demnach ist die Bahn der mu+ eine c-kt negativem entgegen der Strahlrichtung. Demnach ist die Bahn der mu+ eine
c-kt links- bzw. rechtsdrehende Helix. c-kt links- bzw. rechtsdrehende Helix.
c-kt Phi wird von der positiven X-Achse aus nach links und rechts positiv bzw. c-kt Phi wird von der positiven X-Achse aus nach links und rechts positiv bzw.
c-kt negativ gezählt. Falls zwischen PHI und PHINEU die negative X-Achse über- c-kt negativ gez<EFBFBD>hlt. Falls zwischen PHI und PHINEU die negative X-Achse <EFBFBD>ber-
c-kt quert wurde, fand ein Vorzeichenwechsel statt. c-kt quert wurde, fand ein Vorzeichenwechsel statt.
c-kt Wenn das Magnetfeld erst nach dem vorigen Bauteil begonnen hat, dann be- c-kt Wenn das Magnetfeld erst nach dem vorigen Bauteil begonnen hat, dann be-
@ -1354,7 +1354,7 @@ c-kt Gyrationsradius im Magnetfeld [cm]:
PXPY = SQRT( PX**2 + PY**2 ) PXPY = SQRT( PX**2 + PY**2 )
radius = PXPY * 3335.668 / ABS( MGAUSS ) radius = PXPY * 3335.668 / ABS( MGAUSS )
c-kt Im Magnetfeld zurückgelegte Strecke [cm]: c-kt Im Magnetfeld zur<EFBFBD>ckgelegte Strecke [cm]:
MZDIST = ZKOO(IL) - AMAX1( Z, MSTART ) MZDIST = ZKOO(IL) - AMAX1( Z, MSTART )
c-kt Flugzeit im Magnetfeld [s]: c-kt Flugzeit im Magnetfeld [s]:
@ -1390,8 +1390,8 @@ c-kt Richtungswinkel von der Helixmittelachse zu X,Y
IF ( PHIHELIXA .GT. 3.1415927 ) IF ( PHIHELIXA .GT. 3.1415927 )
1 PHIHELIXA = PHIHELIXA - 6.2831853 1 PHIHELIXA = PHIHELIXA - 6.2831853
c-kt Bei ZKOO(IL) angekommen beträgt der Winkel vom Helixmittelpunkt zum c-kt Bei ZKOO(IL) angekommen betr<EFBFBD>gt der Winkel vom Helixmittelpunkt zum
c-kt Ort des Teilchens PHIHELIXB (Vollständige Rotationen sind belanglos): c-kt Ort des Teilchens PHIHELIXB (Vollst<EFBFBD>ndige Rotationen sind belanglos):
PHIHELIXB = PHIHELIXA + SIGN( 1.0, MGAUSS ) * PHIHELIXB = PHIHELIXA + SIGN( 1.0, MGAUSS ) *
1 AMOD( rotats, 1.0 ) * 6.28318531 1 AMOD( rotats, 1.0 ) * 6.28318531
IF ( PHIHELIXB .GT. 3.1415927 ) IF ( PHIHELIXB .GT. 3.1415927 )
@ -1428,7 +1428,7 @@ c-kt Ende der Berechnung des Magnetfeldes.
c-kt ===================================== c-kt =====================================
ELSE ELSE
c-kt Variable für TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt: c-kt Variable f<EFBFBD>r TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt:
XYPROJ = TTHETA * ZDIST XYPROJ = TTHETA * ZDIST
X = CPHI * XYPROJ + X X = CPHI * XYPROJ + X
Y = SPHI * XYPROJ + Y Y = SPHI * XYPROJ + Y
@ -1441,7 +1441,7 @@ C BERECHNE FLUGZEIT
TLAST = ZDIST / (BETAZ * VLIGHT) TLAST = ZDIST / (BETAZ * VLIGHT)
TTOTAL = TTOTAL + TLAST TTOTAL = TTOTAL + TLAST
ENDIF ! Dieses ENDIF gehört zu der Z-Distanz<0.01cm-Abfrage ENDIF ! Dieses ENDIF geh<EFBFBD>rt zu der Z-Distanz<0.01cm-Abfrage
ELOSS = 0.0 ELOSS = 0.0
@ -1470,17 +1470,17 @@ C RECHTECK
230 CONTINUE 230 CONTINUE
c-kt Wenn die Rechnung mit einem Magnetfeld durchgeführt wird, muß der c-kt Wenn die Rechnung mit einem Magnetfeld durchgef<EFBFBD>hrt wird, mu<EFBFBD> der
c-kt Versatz in der X,Y-Ebene durch die Helixbahn berücksichtigt werden. c-kt Versatz in der X,Y-Ebene durch die Helixbahn ber<EFBFBD>cksichtigt werden.
IF ( ( ABS(MGAUSS) .GT. 0.0 ) .AND. IF ( ( ABS(MGAUSS) .GT. 0.0 ) .AND.
1 ( ZKOO(IL) .GT. MSTART ) .AND. 1 ( ZKOO(IL) .GT. MSTART ) .AND.
2 ( ZDIST .GT. 0.01 ) ) THEN 2 ( ZDIST .GT. 0.01 ) ) THEN
c-kt Hat das Teilchen auf der Helixbahn das Strahlrohr berührt? c-kt Hat das Teilchen auf der Helixbahn das Strahlrohr ber<EFBFBD>hrt?
c-kt ========================================================== c-kt ==========================================================
c-kt Berechnung des Winkels von der X,Y=0-Achse zur Helixmittelachse. Die c-kt Berechnung des Winkels von der X,Y=0-Achse zur Helixmittelachse. Die
c-kt Helixbahn hat in diesem Winkel den größten Abstand zur X,Y=0-Achse c-kt Helixbahn hat in diesem Winkel den gr<EFBFBD><EFBFBD>ten Abstand zur X,Y=0-Achse
IF ( YHELIX .NE. 0.0 .OR. XHELIX .NE. 0.0) THEN IF ( YHELIX .NE. 0.0 .OR. XHELIX .NE. 0.0) THEN
PHIHMP = ATAN2( YHELIX, XHELIX ) PHIHMP = ATAN2( YHELIX, XHELIX )
c-kt Sollte die Helixmittelachse wirklich auf X,Y=0 liegen, ist auch der c-kt Sollte die Helixmittelachse wirklich auf X,Y=0 liegen, ist auch der
@ -1490,32 +1490,32 @@ c-kt Radius der Teilchenbahn konstant.
ENDIF ENDIF
c-kt Welcher der beim Flug des Teilchens auf dem Segment der Helixbahn c-kt Welcher der beim Flug des Teilchens auf dem Segment der Helixbahn
c-kt überstrichenen Winkel kommt PHIHMP am nächsten und bezeichnet somit c-kt <EFBFBD>berstrichenen Winkel kommt PHIHMP am n<EFBFBD>chsten und bezeichnet somit
c-kt den am weitesten von der X,Y=0-Achse entfernten Punkt? c-kt den am weitesten von der X,Y=0-Achse entfernten Punkt?
c-kt Berechnung der Differenz DELTA dieses Winkels zu PHIHMP c-kt Berechnung der Differenz DELTA dieses Winkels zu PHIHMP
c-kt 1. Es gab mindestens eine vollständige Umdrehung c-kt 1. Es gab mindestens eine vollst<EFBFBD>ndige Umdrehung
IF ( rotats .GE. 1.0 ) THEN IF ( rotats .GE. 1.0 ) THEN
DELTA = 0.0 DELTA = 0.0
c-kt 2. Es gab keine vollständige Umdrehung c-kt 2. Es gab keine vollst<EFBFBD>ndige Umdrehung
ELSE ELSE
c-kt a) Kein Vorzeichenwechsel zwischen PHIHELIXA und PHIHELIXB c-kt a) Kein Vorzeichenwechsel zwischen PHIHELIXA und PHIHELIXB
IF ( SIGN(1.0,MGAUSS)*PHIHELIXB .GT. IF ( SIGN(1.0,MGAUSS)*PHIHELIXB .GT.
1 SIGN(1.0,MGAUSS)*PHIHELIXA ) THEN 1 SIGN(1.0,MGAUSS)*PHIHELIXA ) THEN
c-kt In dem durchflogenen Helixsegment wurde PHIHMP überstrichen c-kt In dem durchflogenen Helixsegment wurde PHIHMP <EFBFBD>berstrichen
IF ( SIGN(1.0,MGAUSS)*PHIHELIXB .GE. IF ( SIGN(1.0,MGAUSS)*PHIHELIXB .GE.
1 SIGN(1.0,MGAUSS)*PHIHMP .AND. 1 SIGN(1.0,MGAUSS)*PHIHMP .AND.
2 SIGN(1.0,MGAUSS)*PHIHMP .GE. 2 SIGN(1.0,MGAUSS)*PHIHMP .GE.
3 SIGN(1.0,MGAUSS)*PHIHELIXA ) THEN 3 SIGN(1.0,MGAUSS)*PHIHELIXA ) THEN
DELTA = 0.0 DELTA = 0.0
c-kt PHIHMP wurde nicht überstrichen c-kt PHIHMP wurde nicht <EFBFBD>berstrichen
ELSE ELSE
c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP näher? c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP n<EFBFBD>her?
DIFA = ABS( PHIHELIXA - PHIHMP ) DIFA = ABS( PHIHELIXA - PHIHMP )
IF ( DIFA .GT. 3.14159265 ) IF ( DIFA .GT. 3.14159265 )
1 DIFA = 6.28318531 - DIFA 1 DIFA = 6.28318531 - DIFA
@ -1528,22 +1528,22 @@ c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP n
DELTA = DIFB DELTA = DIFB
ENDIF ENDIF
ENDIF ! PHIHMP überstrichen? ENDIF ! PHIHMP <EFBFBD>berstrichen?
c-kt b) Vorzeichenwechsel zwischen PHIHELIXA und PHIHELIXB c-kt b) Vorzeichenwechsel zwischen PHIHELIXA und PHIHELIXB
ELSE ELSE
c-kt In dem durchflogenen Helixsegment wurde PHIHMP überstrichen c-kt In dem durchflogenen Helixsegment wurde PHIHMP <EFBFBD>berstrichen
IF ( SIGN(1.0,MGAUSS)*PHIHMP .GE. IF ( SIGN(1.0,MGAUSS)*PHIHMP .GE.
1 SIGN(1.0,MGAUSS)*PHIHELIXA .OR. 1 SIGN(1.0,MGAUSS)*PHIHELIXA .OR.
2 SIGN(1.0,MGAUSS)*PHIHMP .LE. 2 SIGN(1.0,MGAUSS)*PHIHMP .LE.
3 SIGN(1.0,MGAUSS)*PHIHELIXB ) THEN 3 SIGN(1.0,MGAUSS)*PHIHELIXB ) THEN
DELTA = 0.0 DELTA = 0.0
c-kt PHIHMP wurde nicht überstrichen c-kt PHIHMP wurde nicht <EFBFBD>berstrichen
ELSE ELSE
c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP näher? c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP n<EFBFBD>her?
DIFA = ABS( PHIHELIXA - PHIHMP ) DIFA = ABS( PHIHELIXA - PHIHMP )
IF ( DIFA .GT. 3.14159265 ) IF ( DIFA .GT. 3.14159265 )
1 DIFA = 6.28318531 - DIFA 1 DIFA = 6.28318531 - DIFA
@ -1556,14 +1556,14 @@ c-kt Welcher der beiden Winkel PHIHELIXA und PHIHELIXB ist PHIHMP n
DELTA = DIFB DELTA = DIFB
ENDIF ENDIF
ENDIF ! PHIHMP überstrichen? ENDIF ! PHIHMP <EFBFBD>berstrichen?
ENDIF ! Vorzeichenwechsel von PHIHELIXA auf PHIHELIXB? ENDIF ! Vorzeichenwechsel von PHIHELIXA auf PHIHELIXB?
ENDIF ! Anzahl Rotationen > 1 ? ENDIF ! Anzahl Rotationen > 1 ?
c-kt Auswertung: wenn der maximal erreichte Abstand von der X,Y=0-Achse den c-kt Auswertung: wenn der maximal erreichte Abstand von der X,Y=0-Achse den
c-kt Innenradius des Strahlrohres übersteigt, denn zähle das Teilchen als c-kt Innenradius des Strahlrohres <EFBFBD>bersteigt, denn z<>hle das Teilchen als
c-kt herausgestreut. c-kt herausgestreut.
IF ( Z .LT. 140.0 ) THEN IF ( Z .LT. 140.0 ) THEN
MAXRAD = 40.768225 MAXRAD = 40.768225
@ -1625,7 +1625,7 @@ c
C SCHICHT ODER LOCH ? C SCHICHT ODER LOCH ?
250 IF ( ILAYS(IL) .EQ. 0 ) THEN 250 IF ( ILAYS(IL) .EQ. 0 ) THEN
c-kt Variable für TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt: c-kt Variable f<EFBFBD>r TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt:
XYPROJ = TTHETA * THICK(IL) XYPROJ = TTHETA * THICK(IL)
X = CPHI * XYPROJ + X X = CPHI * XYPROJ + X
Y = SPHI * XYPROJ + Y Y = SPHI * XYPROJ + Y
@ -1648,7 +1648,7 @@ C ENDENERGIE DES TEILCHENS
ELOSS = ELOSS2 ( EKIN, CRANGE, RGDATA(1,ILAYS(IL)), ELOSS = ELOSS2 ( EKIN, CRANGE, RGDATA(1,ILAYS(IL)),
1 ILAYE(IL) ) 1 ILAYE(IL) )
c-kt Wenn ELOSS2 einen negativen Wert übergibt ist einer von drei möglichen c-kt Wenn ELOSS2 einen negativen Wert <EFBFBD>bergibt ist einer von drei m<EFBFBD>glichen
c-kt Fehlern aufgetreten, die hier unterschieden werden: c-kt Fehlern aufgetreten, die hier unterschieden werden:
IF ( ELOSS .LT. 0.0 ) THEN IF ( ELOSS .LT. 0.0 ) THEN
@ -1657,10 +1657,10 @@ c-kt Fehlern aufgetreten, die hier unterschieden werden:
251 FORMAT(' ',T5,'Startnummer des Teilchens',T50,I22) 251 FORMAT(' ',T5,'Startnummer des Teilchens',T50,I22)
IF ( ELOSS .LT. -2.5 ) THEN IF ( ELOSS .LT. -2.5 ) THEN
c-kt Durch Rundungsfehler wurde keine korrekte Lösung des kubischen c-kt Durch Rundungsfehler wurde keine korrekte L<EFBFBD>sung des kubischen
c-kt Spline-Polynoms gefunden: c-kt Spline-Polynoms gefunden:
fehler = fehler + 1 fehler = fehler + 1
c-kt zu welcher Gruppe gehört die Schicht? c-kt zu welcher Gruppe geh<EFBFBD>rt die Schicht?
DO 252 LGRP=1,NGRP DO 252 LGRP=1,NGRP
IF ( IL .LE. IGRPE(LGRP) ) GOTO 253 IF ( IL .LE. IGRPE(LGRP) ) GOTO 253
252 CONTINUE 252 CONTINUE
@ -1673,19 +1673,19 @@ c-kt zu welcher Gruppe geh
GOTO 100 GOTO 100
ELSEIF ( ELOSS .LT. -1.5 ) THEN ELSEIF ( ELOSS .LT. -1.5 ) THEN
c-kt Ein Teilchen hatte einen kleineren Wert für die verbleibende Reichweite c-kt Ein Teilchen hatte einen kleineren Wert f<EFBFBD>r die verbleibende Reichweite
c-kt als der kleinste tabellierte Reichweiten-Wert: c-kt als der kleinste tabellierte Reichweiten-Wert:
WRITE (SYSOUT,255) WRITE (SYSOUT,255)
255 FORMAT(' ',T5,'Der 2. Parameter des Befehls PARTICLE '// 255 FORMAT(' ',T5,'Der 2. Parameter des Befehls PARTICLE '//
1 ' muß verkleinert werden.') 1 ' mu<EFBFBD> verkleinert werden.')
STOP 11 STOP 11
ELSE ELSE
c-kt Ein Teilchen hatte einen höheren Wertr die kinetische Energie c-kt Ein Teilchen hatte einen h<EFBFBD>heren Wert f<>r die kinetische Energie
c-kt als der größte tabellierte Energiewert: c-kt als der gr<EFBFBD><EFBFBD>te tabellierte Energiewert:
WRITE (SYSOUT,256) WRITE (SYSOUT,256)
256 FORMAT(' ',T5,'Der 3. Parameter des Befehls PARTICLE '// 256 FORMAT(' ',T5,'Der 3. Parameter des Befehls PARTICLE '//
1 ' muß vergrößert werden.') 1 ' mu<EFBFBD> vergr<EFBFBD><EFBFBD>ert werden.')
STOP 12 STOP 12
ENDIF ENDIF
@ -1718,7 +1718,7 @@ C BERECHNE STRAGGLING
ENDIF ENDIF
C AUSTRITTSKOORD. OHNE STREUUNG C AUSTRITTSKOORD. OHNE STREUUNG
c-kt Variable für TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt: c-kt Variable f<EFBFBD>r TAN(THETA) an die Stelle von STHETA/CTHETA gesetzt:
XYPROJ = TTHETA * THICK(IL) XYPROJ = TTHETA * THICK(IL)
XAUS = CPHI * XYPROJ + X XAUS = CPHI * XYPROJ + X
YAUS = SPHI * XYPROJ + Y YAUS = SPHI * XYPROJ + Y
@ -1780,7 +1780,7 @@ C TRANSFORMIERE INS LABORSYSTEM
PY = PXEI*SPHI*CTHETA + PYEI*CPHI + PZEI*SPHI*STHETA PY = PXEI*SPHI*CTHETA + PYEI*CPHI + PZEI*SPHI*STHETA
PZ = -PXEI*STHETA + PZEI *CTHETA PZ = -PXEI*STHETA + PZEI *CTHETA
c-kt PTOTAL = SQRT(PX*PX + PY*PY + PZ*PZ) !ADDED 22.1.87 HJM, KAW!!! c-kt PTOTAL = SQRT(PX*PX + PY*PY + PZ*PZ) !ADDED 22.1.87 HJM, KAW!!!
c-kt Geändert zu höherer Genauigkeit bei der späteren Winkelberechnung c-kt Ge<EFBFBD>ndert zu h<EFBFBD>herer Genauigkeit bei der sp<EFBFBD>teren Winkelberechnung
temp = PX*PX + PY*PY + PZ*PZ temp = PX*PX + PY*PY + PZ*PZ
PTOTAL = SQRT( temp ) PTOTAL = SQRT( temp )
IF ( PZ .LE. 0.0 ) GOTO 370 IF ( PZ .LE. 0.0 ) GOTO 370
@ -1792,9 +1792,9 @@ C BERECHNE NEUE RICHTUNGSWINKEL
c-lz 6-dec-91 changed the following sentence to avoid any negative sqrt c-lz 6-dec-91 changed the following sentence to avoid any negative sqrt
c-lz original STHETA = SQRT( 1.0 - CTHETA*CTHETA ) c-lz original STHETA = SQRT( 1.0 - CTHETA*CTHETA )
c-kt STHETA = SQRT(amax1(0.0,(1.0 - CTHETA*CTHETA ))) c-kt STHETA = SQRT(amax1(0.0,(1.0 - CTHETA*CTHETA )))
c-kt Geändert zu höherer Genauigkeit bei der Berechnung: c-kt Ge<EFBFBD>ndert zu h<EFBFBD>herer Genauigkeit bei der Berechnung:
STHETA = SQRT( ( PX*PX + PY*PY ) / temp ) STHETA = SQRT( ( PX*PX + PY*PY ) / temp )
c-kt Berechnung der neu eingeführten Variable für TAN(THETA): c-kt Berechnung der neu eingef<EFBFBD>hrten Variable f<EFBFBD>r TAN(THETA):
TTHETA = SQRT( ( PX*PX + PY*PY ) / (PZ*PZ) ) TTHETA = SQRT( ( PX*PX + PY*PY ) / (PZ*PZ) )
THETA = ASIN( STHETA ) THETA = ASIN( STHETA )
@ -1917,14 +1917,14 @@ C ----------------------------------------------------------------------
2 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM, 2 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM,
3 RMAX, 3 RMAX,
4 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2 4 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
5 , XFOCUS, YFOCUS 5 , XFOCUS, YFOCUS
c-kt Beginn und Stärke des Magnetfeldes c-kt Beginn und St<EFBFBD>rke des Magnetfeldes
6 , MSTART, MGAUSS 6 , MSTART, MGAUSS
COMMON COMMON
1 / KINEMA / ID, X, Y, Z, 1 / KINEMA / ID, X, Y, Z,
2 PX, PY, PZ, PTOTAL, 2 PX, PY, PZ, PTOTAL,
c-kt Einführen der Variable TTHETA für den Tangens des Streuwinkels: c-kt Einf<EFBFBD>hren der Variable TTHETA f<EFBFBD>r den Tangens des Streuwinkels:
3 THETA, PHI, STHETA, CTHETA, TTHETA, 3 THETA, PHI, STHETA, CTHETA, TTHETA,
4 SPHI, CPHI, 4 SPHI, CPHI,
5 TTOTAL, TLAST, ELOSS 5 TTOTAL, TLAST, ELOSS
@ -1976,10 +1976,10 @@ C ----------------------------------------------------------------------
CHARACTER*20 COMENT,COMT CHARACTER*20 COMENT,COMT
REAL*8 RGDATA REAL*8 RGDATA
INTEGER*4 SEEDS, TEST INTEGER*4 SEEDS, TEST
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY und ALL_XY: c-kt STOPPED, WHERE_XY und ALL_XY:
INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT INTEGER*2 IMPOUT, THEOUT, STPOUT, XYOUT, XYALL, LUNINIT
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
INTEGER*2 SYSOUT, SYSIN INTEGER*2 SYSOUT, SYSIN
COMMON COMMON
1 / OUTPUT / NLIMIT(200), NCOUNT(200), IOTYPE(200), 1 / OUTPUT / NLIMIT(200), NCOUNT(200), IOTYPE(200),
@ -1999,17 +1999,17 @@ c-kt Deklaration eines neuen Bezeichners f
9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM, 9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM,
1 RMAX, 1 RMAX,
2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2 2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
3 , XFOCUS, YFOCUS 3 , XFOCUS, YFOCUS
c-kt Beginn und Stärke des Magnetfeldes c-kt Beginn und St<EFBFBD>rke des Magnetfeldes
4 , MSTART, MGAUSS 4 , MSTART, MGAUSS
3 / SEEDCO / SEEDS(6) 3 / SEEDCO / SEEDS(6)
c-kt Integer-Arrays für die Unit-Nummern zu den Befehlen IMPULS, WINKEL, c-kt Integer-Arrays f<EFBFBD>r die Unit-Nummern zu den Befehlen IMPULS, WINKEL,
c-kt STOPPED, WHERE_XY und ALL_XY: c-kt STOPPED, WHERE_XY und ALL_XY:
COMMON COMMON
1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201), 1 / SGLOUT / IMPOUT(201), THEOUT(201), STPOUT(200), XYOUT(201),
2 XYALL(201), LUNINIT 2 XYALL(201), LUNINIT
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
COMMON COMMON
1 / STATUS / SYSOUT, SYSIN, TEST 1 / STATUS / SYSOUT, SYSIN, TEST
@ -2096,8 +2096,8 @@ C ----------------------------------------------------------------------
c-kt Ausgabe der Stop-Daten des Targets: aufeinanderfolgend in jeder c-kt Ausgabe der Stop-Daten des Targets: aufeinanderfolgend in jeder
c-kt Zeile die Anzahl der in der Lage gestoppten Teilchen c-kt Zeile die Anzahl der in der Lage gestoppten Teilchen
IF ( STPOUT(LGRP) .NE. 0 ) THEN IF ( STPOUT(LGRP) .NE. 0 ) THEN
WRITE (STPOUT(LGRP),1909) NSTOP(I) WRITE (STPOUT(LGRP),1909) I, NSTOP(I)
1909 FORMAT(' ',I6) 1909 FORMAT(' ',I3, ' ',I6)
ENDIF ENDIF
c-kt Ende c-kt Ende
@ -2154,9 +2154,9 @@ C ----------------------------------------------------------------------
9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM, 9 / BEAM / PMEAN, PFWHM, PLOW, PHIGH, XFWHM, YFWHM,
1 RMAX, 1 RMAX,
2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2 2 IBTYP, XBEAM, YBEAM, PSIGMA, RMAX2
c-kt Z-Komponente von X- und Y-Strahlfoci für den Befehl FOCUS c-kt Z-Komponente von X- und Y-Strahlfoci f<EFBFBD>r den Befehl FOCUS
3 , XFOCUS, YFOCUS 3 , XFOCUS, YFOCUS
c-kt Beginn und Stärke des Magnetfeldes c-kt Beginn und St<EFBFBD>rke des Magnetfeldes
4 , MSTART, MGAUSS 4 , MSTART, MGAUSS
C ---------------------------------------------------------------------- C ----------------------------------------------------------------------
@ -2213,11 +2213,11 @@ C ----------------------------------------------------------------------
CHARACTER*10 TEXT CHARACTER*10 TEXT
REAL*4 VAR, LEFT, RIGHT REAL*4 VAR, LEFT, RIGHT
INTEGER*4 IVAR, ILEFT, IRIGHT, TEST INTEGER*4 IVAR, ILEFT, IRIGHT, TEST
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
INTEGER*2 SYSOUT, SYSIN INTEGER*2 SYSOUT, SYSIN
REAL*4 RVAR, RLEFT, RRIGHT REAL*4 RVAR, RLEFT, RRIGHT
EQUIVALENCE ( RVAR,IVAR ), ( RLEFT,ILEFT ), ( RRIGHT,IRIGHT ) EQUIVALENCE ( RVAR,IVAR ), ( RLEFT,ILEFT ), ( RRIGHT,IRIGHT )
c-kt Deklaration eines neuen Bezeichners für die Ausgabeunit: SYSOUT c-kt Deklaration eines neuen Bezeichners f<EFBFBD>r die Ausgabeunit: SYSOUT
COMMON COMMON
1 / STATUS / SYSOUT, SYSIN, TEST 1 / STATUS / SYSOUT, SYSIN, TEST