1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
*DECK LIBMOM
SUBROUTINE LIBMOM(NFS,NDIL,NPAR,DELTA,SIGTF,SIGSF,SIGFF,NOR,
1 SIGERD,MOMT,MOMP,SEFFER)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute a set of total (SIGT**N) and partial (SIGA*(SIGT**N)) moments
* and a set of reference self-shielded flux and cross sections.
*
*Copyright:
* Copyright (C) 2002 Ecole Polytechnique de Montreal
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version
*
*Author(s): A. Hebert
*
*Parameters: input
* NFS number of fine energy groups.
* NDIL number of dilutions.
* NPAR number of partial cross sections (NPAR=0, 1 or 2).
* DELTA lethargy widths of the fine groups.
* SIGTF microscopic principal x-sections in the fine groups.
* SIGSF microscopic partial x-sections 1 in the fine groups.
* SIGFF microscopic partial x-sections 2 in the fine groups.
* NOR related to the number of moments to preserve.
* For the total moments: -NOR+1 <= N <= NOR.
* For the partial moments: -NOR/2 <= N <= (NOR-1)/2.
* SIGERD dilutions used to compute SEFFER.
*
*Parameters: output
* MOMT total moments.
* MOMP partial moments in absorption.
* SEFFER Bondarenko self-shielded flux and cross sections at each
* dilution.
*
*-----------------------------------------------------------------------
*
*----
* SUBROUTINE ARGUMENTS
*----
INTEGER NFS,NDIL,NPAR,NOR
REAL DELTA(NFS),SIGTF(NFS),SIGSF(NFS),SIGFF(NFS),SIGERD(NDIL),
1 SEFFER(NPAR+2,NDIL)
DOUBLE PRECISION MOMT(2*NOR),MOMP(NOR,NPAR)
*----
* LOCAL VARIABLES
*----
DOUBLE PRECISION T,DEL
*
DEL=0.0D0
DO 10 I=1,2*NOR
MOMT(I)=0.0D0
10 CONTINUE
DO 21 I=1,NOR
DO 20 J=1,NPAR
MOMP(I,J)=0.0D0
20 CONTINUE
21 CONTINUE
DO 26 IDIL=1,NDIL
DO 25 IPAR=1,NPAR+2
SEFFER(IPAR,IDIL)=0.0
25 CONTINUE
26 CONTINUE
*
DO 70 IGF=1,NFS
DELF=DELTA(IGF)
SIGT=MAX(0.001,SIGTF(IGF))
DEL=DEL+DELF
T=DELF
DO 30 INOR=NOR,2*NOR
MOMT(INOR)=MOMT(INOR)+T
T=T*SIGT
30 CONTINUE
T=DELF/SIGT
DO 40 INOR=NOR-1,1,-1
MOMT(INOR)=MOMT(INOR)+T
T=T/SIGT
40 CONTINUE
DO 45 IDIL=1,NDIL
T=SIGERD(IDIL)*DELF
SEFFER(1,IDIL)=SEFFER(1,IDIL)+REAL(T)/(SIGERD(IDIL)+SIGT)
SEFFER(2,IDIL)=SEFFER(2,IDIL)+REAL(T)*SIGT/(SIGERD(IDIL)+SIGT)
45 CONTINUE
IF(NPAR.GT.0) THEN
SIGS=MAX(1.E-9,SIGSF(IGF))
T=DELF*SIGS
DO 50 INOR=NOR/2+1,NOR
MOMP(INOR,1)=MOMP(INOR,1)+T
T=T*SIGT
50 CONTINUE
T=DELF*SIGS/SIGT
DO 60 INOR=NOR/2,1,-1
MOMP(INOR,1)=MOMP(INOR,1)+T
T=T/SIGT
60 CONTINUE
DO 65 IDIL=1,NDIL
T=SIGERD(IDIL)*DELF
SEFFER(3,IDIL)=SEFFER(3,IDIL)+REAL(T)*SIGS/(SIGERD(IDIL)+SIGT)
65 CONTINUE
IF(NPAR.EQ.2) THEN
SIGF=MAX(1.E-9,SIGFF(IGF))
T=DELF*SIGF
DO 500 INOR=NOR/2+1,NOR
MOMP(INOR,2)=MOMP(INOR,2)+T
T=T*SIGT
500 CONTINUE
T=DELF*SIGF/SIGT
DO 600 INOR=NOR/2,1,-1
MOMP(INOR,2)=MOMP(INOR,2)+T
T=T/SIGT
600 CONTINUE
DO 650 IDIL=1,NDIL
T=SIGERD(IDIL)*DELF
SEFFER(4,IDIL)=SEFFER(4,IDIL)+REAL(T)*SIGF/(SIGERD(IDIL)+
1 SIGT)
650 CONTINUE
ENDIF
ENDIF
70 CONTINUE
*
IF(DEL.EQ.0.0) CALL XABORT('LIBMOM: ALGORITHM FAILURE.')
DO 80 INOR=1,2*NOR
MOMT(INOR)=MOMT(INOR)/DEL
80 CONTINUE
IF(NPAR.GT.0) THEN
DO 95 INOR=1,NOR
DO 90 IPAR=1,NPAR
MOMP(INOR,IPAR)=MOMP(INOR,IPAR)/REAL(DEL)
90 CONTINUE
95 CONTINUE
ENDIF
DO 110 IDIL=1,NDIL
DO 100 IPAR=2,NPAR+2
SEFFER(IPAR,IDIL)=SEFFER(IPAR,IDIL)/SEFFER(1,IDIL)
100 CONTINUE
SEFFER(1,IDIL)=SEFFER(1,IDIL)/REAL(DEL)
110 CONTINUE
RETURN
END
|