]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/neutron/partxs.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / neutron / partxs.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:21:58 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.48 by S.Giani
11*-- Author :
12 SUBROUTINE PARTXS(D,LD,E,SIGTOT,EP)
13C THIS ROUTINE SAMPLES FROM THE FILE 12 OR 13 PHOTON
14C PRODUCTION PARTIAL DISTRIBUTIONS TO OBTAIN THE EXIT
15C PHOTON ENERGY FROM A NEUTRON REACTION
16#include "geant321/minput.inc"
17 DIMENSION D(*),LD(*)
18 SAVE
19C INITIALIZE THE VALUES USED IN THE SELECTION PROCESS
20C THE VALUE (II) IS A POINTER
21 ITRY1=0
22 10 R=FLTRNF(0)
23 SUM=0.0
24 NH=0
25 NL=0
26 II=0
27C SET THE NUMBER OF PARTIAL DISTRIBUTIONS (NK) AND THE NUMBER
28C OF POINTS PER PARTIAL DISTRIBUTION (NP)
29 NK=LD(II+1)
30 NP=LD(II+2)
31 II=II+2
32C DETERMINE WHICH POINTS (NL) AND (NH) BOUND THE INCIDENT
33C NEUTRON ENERGY
34 DO 20 N=1,NP
35 IF(E.LE.D(II+N))GO TO 40
36 20 CONTINUE
37C THE INCIDENT NEUTRON ENERGY IS GREATER THAN THE LAST ENERGY
38C POINT OF THE PARTIAL DISTRIBUTIONS, THEREFORE USE THE LAST
39C ENERGY POINT OF THE PARTIAL DISTRIBUTION TO SAMPLE FROM
40 NH=NP
41 II=II+NP
42 DO 30 K=1,NK
43 EP=D(II+1)
44 LP=LD(II+2)
45 A=D(II+3)
46 LF=LD(II+4)
47 IF(LP.EQ.2)EP=EP+(A/(A+1))*E
48 II=II+4
49 SIG=D(II+NH)
50 SUM=SUM+SIG/SIGTOT
51 IF(EP.EQ.0.0)GO TO 100
52 IF(R.LE.SUM)GO TO 100
53 II=II+NP
54 30 CONTINUE
55 GO TO 80
56 40 IF(N.EQ.1)GO TO 60
57C THE INCIDENT NEUTRON ENERGY IS BOUNDED BY THE ENEGY POINTS
58C (NL) AND (NH) OF THE PARTIAL DISTRIBUTIONS, THEREFORE USE
59C LINEAR INTERPOLATION
60 NH=N
61 NL=N-1
62 EH=D(II+NH)
63 EL=D(II+NL)
64 II=II+NP
65 DO 50 K=1,NK
66 EP=D(II+1)
67 LP=LD(II+2)
68 A=D(II+3)
69 LF=LD(II+4)
70 IF(LP.EQ.2)EP=EP+(A/(A+1))*E
71 II=II+4
72 SIG=D(II+NL)+(E-EL)*(D(II+NH)-D(II+NL))/(EH-EL)
73 SUM=SUM+SIG/SIGTOT
74 IF(EP.EQ.0.0)GO TO 100
75 IF(R.LE.SUM)GO TO 100
76 II=II+NP
77 50 CONTINUE
78 GO TO 80
79C THE INCIDENT NEUTRON ENERGY IS LESS THAN THE FIRST ENERGY
80C POINT OF THE PARTIAL DISTRIBUTIONS, THEREFORE USE THE FIRST
81C ENERGY POINT OF THE PARTIAL DISTRIBUTION TO SAMPLE FROM
82 60 NL=N
83 II=II+NP
84 DO 70 K=1,NK
85 EP=D(II+1)
86 LP=LD(II+2)
87 A=D(II+3)
88 LF=LD(II+4)
89 IF(LP.EQ.2)EP=EP+(A/(A+1))*E
90 II=II+4
91 SIG=D(II+NL)
92 SUM=SUM+SIG/SIGTOT
93 IF(EP.EQ.0.0)GO TO 100
94 IF(R.LE.SUM)GO TO 100
95 II=II+NP
96 70 CONTINUE
97C retry with new R if SUM != 0
98 80 IF(SUM.EQ.0.0) GOTO 90
99 ITRY1 = ITRY1 + 1
100 IF(ITRY1.LE.2) GOTO 10
101C no success set EP = 0
102 90 EP = 0.0
103 100 RETURN
104 END