summaryrefslogtreecommitdiff
path: root/Dragon/src/AUTIT1.f
blob: 3e404c63f823f9e88c24b240f6dc882053d7fd9a (plain)
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
*DECK AUTIT1
      SUBROUTINE AUTIT1(IPTRK,IFTRAK,IPSYS,MAXTRA,KNORM,LBIN,NREG,
     1 NBMIX,NBISO,MAT,VOL,NIRES,IAPT,CDOOR,LEAKSW,TITR,IMPX,CONC,
     2 SIGS,SIGT,SIGS1,DIL,PRI,UUU,DELI,ITRANC,NEXT,III,FUNKNO)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Solution of the multigroup neutron flux for a pij method.
*
*Copyright:
* Copyright (C) 2023 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
* IPTRK   pointer to the tracking (L_TRACK signature).
* IFTRAK  file unit number used to store the tracks.
* IPSYS   pointer to the system LCM object.
* MAXTRA  maximum number of elements in vector PRI.
* KNORM   type of cp normalization.
* LBIN    number of energy groups.
* NREG    number of regions.
* NBMIX   number of mixtures in the internal library.
* NBISO   number of distinct isotopes.
* MAT     index-number of the mixture type assigned to each volume.
* VOL     volumes.
* NIRES   number of correlated resonant isotopes.
* IAPT    resonant isotope index associated with isotope I. Mixed
*         moderator if IAPT(I)=NIRES+1. Out-of-fuel isotope if
*         IAPT(I)=0.
* CDOOR   name of the geometry/solution operator.
* LEAKSW  leakage flag (LEAKSW=.true. if neutron leakage through
*         external boundary is present).
* TITR    title.
* IMPX    print flag (equal to zero for no print).
* CONC    number densities of each isotope in each mixture.
* SIGS    P0 scattering microscopic x-s.
* SIGT    total microscopic x-s.
* SIGS1   P1 scattering microscopic x-s.
* DIL     microscopic dilution cross section of each isotope.
* PRI     info to rebuild the SCAT matrix.
* UUU     lethargy limits of the groups.
* DELI    elementary lethargy width.
* ITRANC  type of transport correction.
* NEXT    used in subroutine LIBECT.
* III     offset in PRI array.
*
*Parameters: output
* FUNKNO  neutron flux per unit lethargy.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPTRK,IPSYS
      INTEGER IFTRAK,MAXTRA,KNORM,LBIN,NREG,NBMIX,NBISO,MAT(NREG),
     1 NIRES,IAPT(NBISO),IMPX,ITRANC,NEXT(NBISO),III(NBISO+1)
      REAL VOL(NREG),CONC(NBMIX,NBISO),SIGS(LBIN,NBISO),
     1 SIGT(LBIN,NBISO),SIGS1(LBIN,NBISO),DIL(NBISO),PRI(MAXTRA),
     2 UUU(LBIN+1),DELI,FUNKNO(NREG,LBIN)
      LOGICAL LEAKSW
      CHARACTER CDOOR*12,TITR*72
*----
*  LOCAL VARIABLES
*----
      DOUBLE PRECISION SSUM
      TYPE(C_PTR) JPSYS,KPSYS
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: NLET,NPSYS
      REAL, ALLOCATABLE, DIMENSION(:) :: DEL,SOURCE,SIGTOT,SIGWIN,STIS
      REAL, ALLOCATABLE, DIMENSION(:,:) :: STR,PIJ
      DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: Q
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(NLET(NBMIX),NPSYS(LBIN))
      ALLOCATE(DEL(LBIN),SOURCE(NREG),SIGTOT(0:NBMIX),SIGWIN(0:NBMIX),
     1 STR(LBIN,NBMIX),STIS(LBIN),PIJ(NREG,NREG))
      ALLOCATE(Q(NREG))
*
      JPSYS=LCMLID(IPSYS,'GROUP',LBIN)
      DO 10 LLL=1,LBIN
      DEL(LLL)=UUU(LLL+1)-UUU(LLL)
   10 CONTINUE
      DO 60 LLL=1,LBIN
      NPSYS(LLL)=LLL
*----
*  COMPUTE THE TOTAL SCATTERING CROSS SECTIONS.
*----
      SIGTOT(0)=0.0
      DO 20 M=1,NBMIX
      SIGTOT(M)=0.0
      DO 15 K=1,NBISO
      IF(ITRANC.NE.0) SIGTOT(M)=SIGTOT(M)-CONC(M,K)*SIGS1(LLL,K)
      SIGTOT(M)=SIGTOT(M)+CONC(M,K)*(DIL(K)+SIGT(LLL,K))
   15 CONTINUE
   20 CONTINUE
      IF(IMPX.GE.9) THEN
         WRITE (6,'(//45H AUTIT1: TOTAL MACROSCOPIC CROSS SECTIONS IN ,
     1   5HGROUP,I8,1H:/)') LLL
         WRITE (6,'(1X,1P,10E13.5)') (SIGTOT(MAT(NRE)),NRE=1,NREG)
      ENDIF
*----
*  COMPUTE THE P0 WITHIN-GROUP SCATTERING CROSS SECTIONS.
*----
      SIGWIN(0:NBMIX)=0.0
      DO 50 K=1,NBISO
      IF((IAPT(K).GT.0).AND.(IAPT(K).LE.NIRES)) THEN
        CALL LIBECT(MAXTRA,LLL,PRI,UUU(2),DELI,DEL,NEXT(K),III(K),MML,
     1  STIS)
        DO 30 M=1,NBMIX
        SIGWIN(M)=SIGWIN(M)+CONC(M,K)*STIS(1)*SIGS(LLL,K)
   30   CONTINUE
      ENDIF
      IF(ITRANC.NE.0) THEN
        DO 40 M=1,NBMIX
        SIGWIN(M)=SIGWIN(M)-CONC(M,K)*SIGS1(LLL,K)
   40   CONTINUE
      ENDIF
   50 CONTINUE
      IF(IMPX.GE.10) THEN
         WRITE (6,'(//45H P0 WITHIN-GROUP SCATTERING MACROSCOPIC CROSS,
     1   18H SECTIONS IN GROUP,I8,1H:/)') LLL
         WRITE (6,'(1X,1P,10E13.5)') (SIGWIN(MAT(NRE)),NRE=1,NREG)
      ENDIF
*
      KPSYS=LCMDIL(JPSYS,LLL)
      CALL LCMPUT(KPSYS,'DRAGON-TXSC',NBMIX+1,2,SIGTOT(0))
      CALL LCMPUT(KPSYS,'DRAGON-S0XSC',NBMIX+1,2,SIGWIN(0))
   60 CONTINUE
*----
*  COMPUTE THE GROUPWISE COLLISION PROBABILITIES.
*----
      NANI=1
      IPIJK=1
      ITPIJ=1
      NALBP=0
      CALL DOORPV (CDOOR,JPSYS,NPSYS,IPTRK,IFTRAK,IMPX,LBIN,NREG,
     1 NBMIX,NANI,MAT,VOL,KNORM,IPIJK,LEAKSW,ITPIJ,.FALSE.,TITR,
     2 NALBP)
*----
*  COMPUTE THE ELASTIC SLOWING-DOWN SOURCES.
*----
      DO 160 LLL=1,LBIN
      DO M=1,NBMIX
        NLET(M)=1
        STR(:LBIN,M)=0.0
      ENDDO
      DO 90 K=1,NBISO
      IF((IAPT(K).GT.0).AND.(IAPT(K).LE.NIRES)) THEN
        CALL LIBECT(MAXTRA,LLL,PRI,UUU(2),DELI,DEL,NEXT(K),III(K),MML,
     1  STIS)
        DO 80 M=1,NBMIX
        AUX=CONC(M,K)
        IF(AUX.EQ.0.) GOTO 80
        NLET(M)=MAX(NLET(M),MML)
        DO 70 MM=1,MML
        LLJ=LLL-MM+1
        STR(MM,M)=STR(MM,M)+AUX*STIS(MM)*SIGS(LLJ,K)*DEL(LLJ)/DEL(LLL)
   70   CONTINUE
   80   CONTINUE
      ENDIF
   90 CONTINUE
*----
*  DILUTION SOURCE.
*----
      SOURCE(:NREG)=0.0
      DO 110 NRE=1,NREG
      IBM=MAT(NRE)
      IF(IBM.GT.0) THEN
        DO 100 K=1,NBISO
        IF((IAPT(K).EQ.0).OR.(IAPT(K).EQ.NIRES+1)) THEN
          SOURCE(NRE)=SOURCE(NRE)+CONC(IBM,K)*SIGS(LLL,K)
        ELSE
          SOURCE(NRE)=SOURCE(NRE)+CONC(IBM,K)*DIL(K)
        ENDIF
  100   CONTINUE
      ENDIF
  110 CONTINUE
*----
*  SCATTERING SOURCE.
*----
      DO 130 NRE=1,NREG
      Q(NRE)=SOURCE(NRE)
      M=MAT(NRE)
      IF(M.GT.0) THEN
         DO 120 MM=2,MIN(LLL,NLET(M))
         Q(NRE)=Q(NRE)+STR(MM,M)*FUNKNO(NRE,LLL-MM+1)
  120    CONTINUE
      ENDIF
  130 CONTINUE
      IF(IMPX.GE.8) WRITE(6,'(7H GROUP=,I8,7H     S=,2X,1P,9D12.4/
     1 (21X,9D12.4))') LLL,(Q(NRE),NRE=1,NREG)
*----
*  FLUX SOLUTION.
*----
      KPSYS=LCMGIL(JPSYS,LLL)
      CALL LCMGET(KPSYS,'DRAGON-PCSCT',PIJ)
      DO 150 NRE=1,NREG
      SSUM=0.0D0
      DO 140 NNRE=1,NREG
      SSUM=SSUM+PIJ(NRE,NNRE)*Q(NNRE)
  140 CONTINUE
      FUNKNO(NRE,LLL)=REAL(SSUM)
  150 CONTINUE
      IF(IMPX.GE.8) WRITE(6,'(7H GROUP=,I8,7H  FLUX=,2X,1P,9E12.4/
     1 (21X,9E12.4))') LLL,(FUNKNO(NRE,LLL),NRE=1,NREG)
  160 CONTINUE
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(Q,PIJ,STIS,STR,SIGWIN,SIGTOT,SOURCE,DEL)
      DEALLOCATE(NPSYS,NLET)
      RETURN
      END