summaryrefslogtreecommitdiff
path: root/Dragon/src/PIJWIJ.f
blob: bea36a2173c44afde1455330ee1df877153ded9e (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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
*DECK PIJWIJ
      SUBROUTINE PIJWIJ(  IPTRK,   IPRT,  NSOUT,   NREG,  NBMIX,   NANI,
     >                   MATCOD, VOLUME, XSSIGT, XSSIGW, NELPIJ,  IPIJK,
     >                   LEAKSW,  N2PRO,   NSBG,  NPSYS,   NPST,  NALBP,
     >                     ALBP, MATALB, VOLSUR,  DPROB, DPROBX,    PIJ,
     >                   PROBKS )
*
*-----------------------------------------------------------------------
*
*Purpose:
* Calculation of the scattering-reduced collision probabilities for
* EXCELL. All surfaces will disappear from the system using external
* boundary conditions.
*
*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): R. Roy
*
*Parameters: input
* IPTRK   pointer to the tracking (L_TRACK signature).
* IPRT    print flag (equal to zero for no print).
* NSOUT   number of surfaces.
* NREG    total number of merged blocks for which specific values
*         of the neutron flux and reactions rates are required.
* NBMIX   number of mixtures (NBMIX=max(MATCOD(i))).
* NANI    number of Legendre orders.
* MATCOD  index number of the mixture type assigned to each volume.
* VOLUME  volumes.
* XSSIGT  total macroscopic cross sections ordered by mixture.
* XSSIGW  P0 within-group scattering macroscopic cross sections
*         ordered by mixture.
* NELPIJ  number of elements in symmetrized pij matrix.
* IPIJK   pij option (=1 pij, =4 pijk).
* LEAKSW  leakage flag (=.true. if neutron leakage through external
*         boundary is present).
* N2PRO   number of terms in collision probability matrices, including
*         surface and volume contributions.
* NSBG    number of energy groups.
* NPSYS   non-converged energy group indices.
* NPST    first dimension of matrix PROBKS.
* NALBP   number of multigroup physical albedos.
* ALBP    multigroup physical albedos.
* MATALB  global mixture/albedo identification vector.
* VOLSUR  global surface volume vector.
* DPROB   collision probabilities from EXCELP.
* DPROBX  directional collision probabilities from EXCELP.
*
*Parameters: output
* PIJ     reduced and symmetrized collision probabilities.
* PROBKS  directional collision probabilities.
*
*-----------------------------------------------------------------------
*--------+---------------- R O U T I N E S -------------+--+-----------*
*  NAME  /                  DESCRIPTION                                *
*--------+-------------------------------------------------------------*
* Boundary conditions
*   PIJABC / TO ELIMINATE SURFACES USING B.C. OF THE SYSTEM
*   PIJAAA / TO ELIMINATE SURFACES FOR PIJKS USING B.C. OF THE SYSTEM
* Various functions
*   PIJWPR / TO PRINT CP MATRICES IN SUM FORMAT
*   PIJSMD / TO EVALUATE SCATTERING-MODIFIED CP MATRIX
*   PIJCMP / COMPRESS CP MATRIX TO SYMETRIC FORMAT
*   PIJD2S / CHARGE PROBKS MATRICES IN THE DRAGON SQUARE FORMAT
*   PIJD2R / CHARGE PIJ MATRICES IN THE DRAGON SYMMETRIZED FORMAT
*   PIJKST / COMPUTE PIJK* MATRICES
*--------+-------------------------------------------------------------*
*
      USE               GANLIB
      IMPLICIT          NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      LOGICAL           LEAKSW
      TYPE(C_PTR)       IPTRK
      INTEGER           IPRT, NSOUT, NREG, NBMIX, NANI, MATCOD(NREG),
     >                  NELPIJ, IPIJK, N2PRO, NSBG, NPSYS(NSBG), NPST,
     >                  NALBP, MATALB(-NSOUT:NREG)
      REAL              VOLUME(NREG), XSSIGT(0:NBMIX,NSBG),
     >                  XSSIGW(0:NBMIX,NANI,NSBG),ALBP(NALBP,NSBG),
     >                  VOLSUR(-NSOUT:NREG,NSBG),PIJ(NELPIJ,IPIJK,NSBG),
     >                  PROBKS(NPST,NSBG)
      DOUBLE PRECISION  DPROB(N2PRO,NSBG),DPROBX(N2PRO,NSBG)
*----
*  LOCAL VARIABLES
*----
      INTEGER           IOUT, ICPALL, ICPEND, MXGAUS, NSTATE, MAXCDA
      PARAMETER       ( IOUT=6, ICPALL=4, ICPEND=3, MXGAUS=64,
     >                  NSTATE=40, MAXCDA=30 )
      CHARACTER         NAMSBR*6
      PARAMETER       ( NAMSBR='PIJWIJ')
      INTEGER           ILONG,ITYPE,NPROB,ISBG,ISTATE(NSTATE),
     >                  ICODE(MAXCDA)
      REAL              FACT,ALBEDO(MAXCDA),ALBG(MAXCDA)
      LOGICAL           LSKIP,SWNZBC,SWVOID
*
      INTEGER           MSYM,IU,IL,ISOUT,IIN,I,J,IBM,IOP,INDPIJ,IJKS,
     >                  IUN,KSPEC,LOPT,NNREG,IVV,JUN,ISA
*----
*  Variables for NXT: inline tracking
*----
      INTEGER           ILCMUP,ILCMDN
      PARAMETER        (ILCMUP=1,ILCMDN=2)
      DOUBLE PRECISION  DZERO,DONE,DTWO
      PARAMETER        (DZERO=0.0D0,DONE=1.0D0,DTWO=2.0D0)
*----
*  Allocatable arrays
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: MATRT
      REAL, ALLOCATABLE, DIMENSION(:) :: FFACT
      REAL, ALLOCATABLE, DIMENSION(:,:) :: SIGTAL
      DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: PSST,PSVT
      DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: PCSCT
*----
*  INTRINSIC FUNCTION FOR POSITION IN CONDENSE PIJ MATRIX
*----
      INTEGER INDPOS
      INDPOS(I,J)=MAX(I,J)*(MAX(I,J)-1)/2+MIN(I,J)
*----
*  RECOVER TRACKING INFORMATION
*----
      ISTATE(:NSTATE)=0
      CALL LCMGET(IPTRK,'STATE-VECTOR',ISTATE)
      KSPEC=ISTATE(10)
      CALL LCMLEN(IPTRK,'ICODE',ILONG,ITYPE)
      IF(ILONG.GT.MAXCDA) CALL XABORT('PIJWIJ: MAXCDA OVERFLOW(1).')
      ICODE(:MAXCDA)=0
      CALL LCMGET(IPTRK,'ICODE',ICODE)
      CALL LCMGET(IPTRK,'ALBEDO',ALBG)
*----
*  PREPARE FOR MULTIGROUP CALCULATION
*----
      ALLOCATE(SIGTAL(-NSOUT:NREG,NSBG))
      SWNZBC= .FALSE.
      SWVOID= .FALSE.
      DO ISBG=1,NSBG
        IF(NPSYS(ISBG).NE.0) THEN
          ALBEDO(:MAXCDA)=ALBG(:MAXCDA)
          IF(NALBP .GT. 0) THEN
            DO ISA=1,MAXCDA
              IF(ICODE(ISA).GT.0) ALBEDO(ISA)=ALBP(ICODE(ISA),ISBG)
            ENDDO
          ENDIF
          DO IUN= -NSOUT, -1
            SIGTAL(IUN,ISBG)= ALBEDO(-MATALB(IUN))
            SWNZBC= SWNZBC.OR.(SIGTAL(IUN,ISBG).NE.0.0)
          ENDDO
          IUN=0
          SIGTAL(IUN,ISBG)= 0.0
          DO IUN= 1, NREG
            SIGTAL(IUN,ISBG)= XSSIGT(MATCOD(IUN),ISBG)
            IF( SIGTAL(IUN,ISBG) .EQ. 0.0 ) SWVOID= .TRUE.
          ENDDO
        ENDIF
      ENDDO
*----
*  DOUBLE PRECISION TO REAL FOR DIRECTIONAL PIJ MATRICES
*----
      IF(IPIJK.EQ.4) THEN
         DO 2070 ISBG=1,NSBG
         IF(NPSYS(ISBG).EQ.0) GO TO 2070
         CALL PIJD2S(NREG,NSOUT,DPROBX(1,ISBG),PROBKS(1,ISBG))
 2070    CONTINUE
      ENDIF
      IF( KSPEC.EQ.0 )THEN
*----
*  ELIMINATION OF SURFACES FOR PIJ
*----
         IF( SWNZBC )THEN
            ALLOCATE(PSST(NSOUT*NSOUT),PSVT(NSOUT*NREG),MATRT(NSOUT))
            CALL LCMLEN(IPTRK,'BC-REFL+TRAN',ILONG,ITYPE)
            IF(ILONG.EQ.NSOUT) THEN
              CALL LCMGET(IPTRK,'BC-REFL+TRAN',MATRT)
            ELSE
               WRITE(IOUT,9000) NAMSBR
               DO 130 ISOUT=1,NSOUT
                 MATRT(ISOUT)=ISOUT
 130           CONTINUE
            ENDIF
            DO 2080 ISBG=1,NSBG
              IF(NPSYS(ISBG).EQ.0) GO TO 2080
              CALL PIJABC(NREG,NSOUT,NPROB,SIGTAL(-NSOUT,ISBG),MATRT,
     >                    DPROB(1,ISBG),PSST,PSVT)
*----
*  ELIMINATION OF SURFACES FOR PIJX AND CREATION OF PIJXX
*----
            IF(IPIJK.EQ.4) THEN
               CALL PIJAAA(NREG,NSOUT,SIGTAL(-NSOUT,ISBG),
     >                     DPROBX(1,ISBG),PSVT,PROBKS(1,ISBG))
               CALL PIJABC(NREG,NSOUT,NPROB,SIGTAL(-NSOUT,ISBG),MATRT,
     >                     DPROBX(1,ISBG),PSST,PSVT)
            ENDIF
 2080     CONTINUE
*
            DEALLOCATE(MATRT,PSVT,PSST)
         ENDIF
      ENDIF
*
      ALLOCATE(FFACT(NREG))
      DO 2090 ISBG=1,NSBG
      IF(NPSYS(ISBG).EQ.0) GO TO 2090
      IF( IPRT.GE.ICPEND )THEN
         LOPT= +1
         MSYM=1
         WRITE(IOUT,'(1H )')
         WRITE(IOUT,'(35H   COLLISION PROBABILITIES OUTPUT: ,
     >                35H *AFTER* ALBEDO REDUCTION          )')
         CALL PIJWPR(LOPT,NREG,NSOUT,SIGTAL(-NSOUT,ISBG),
     >               DPROB(1,ISBG),VOLSUR(1,ISBG),MSYM)
*
         IF(IPIJK.EQ.4) THEN
           WRITE(IOUT,'(35H   X-DIRECT. COLL. PROBAB. OUTPUT: ,
     >                  35H *AFTER* ALBEDO REDUCTION          )')
           CALL PIJWPR(LOPT,NREG,NSOUT,SIGTAL(-NSOUT,ISBG),
     >                 DPROBX(1,ISBG),VOLSUR(1,ISBG),MSYM)
           WRITE(IOUT,'(35H0 X-DIRECT. COLL. PROBAB." OUTPUT: ,
     >                  35H PIJX"=PIJX+PISX*(1/(1-PSS))*PSJ   )')
           MSYM=0
           CALL PIJWPR(LOPT,NREG,NSOUT,SIGTAL(-NSOUT,ISBG),
     >                 DPROBX(1,ISBG),VOLSUR(1,ISBG),MSYM)
         ENDIF
*
      ENDIF
*----
*  CHARGE PIJ MATRIX IN THE DRAGON SYMMETRIZED FORMAT
*----
      DO 160 IIN=1,NREG
         IF(SIGTAL(IIN,ISBG).EQ.0.0) THEN
            FFACT(IIN)=1.0
         ELSE
            FFACT(IIN)=1.0/SIGTAL(IIN,ISBG)
         ENDIF
  160 CONTINUE
      CALL PIJD2R(NREG,NSOUT,DPROB(1,ISBG),FFACT,.FALSE.,NELPIJ,
     >            N2PRO,PIJ(1,1,ISBG))
*----
*  CHARGE PIJX AND PIJY MATRICES IN THE DRAGON SYMMETRIZED FORMAT
*  ( PIJX=PIJY ), AND PIJZ CALCULATION ( PIJZ=3*PIJ-PIJX-PIJY )
*  AND THE SAME FOR FULL MATRICES OF PIJX", PIJY" AND PIJZ"
*----
      IF(IPIJK.EQ.4) THEN
        NNREG=NREG*NREG
        CALL PIJD2R(NREG,NSOUT,DPROBX(1,ISBG),FFACT,.TRUE.,NELPIJ,
     >              N2PRO,PIJ(1,2,ISBG))
        IVV=0
        DO 181 IUN=1,NREG
          IU=IUN
          IL=(IUN-1)*NREG+1
          DO 191 JUN=1,IUN
            IVV=IVV+1
            PROBKS(IL,ISBG)=1.5*PROBKS(IL,ISBG)*FFACT(IUN)*FFACT(JUN)
            IF(IL.NE.IU)PROBKS(IU,ISBG)=1.5*PROBKS(IU,ISBG)*
     >                      FFACT(IUN)*FFACT(JUN)
            PIJ(IVV,3,ISBG)=PIJ(IVV,2,ISBG)
            PROBKS(NNREG+IL,ISBG)=PROBKS(IL,ISBG)
            PROBKS(NNREG+IU,ISBG)=PROBKS(IU,ISBG)
            PIJ(IVV,4,ISBG)=3*PIJ(IVV,1,ISBG)-PIJ(IVV,2,ISBG)
     >                                       -PIJ(IVV,3,ISBG)
            PROBKS(2*NNREG+IL,ISBG)=3*PIJ(IVV,1,ISBG)
     >      -PROBKS(IL,ISBG)-PROBKS(NNREG+IL,ISBG)
            PROBKS(2*NNREG+IU,ISBG)=3*PIJ(IVV,1,ISBG)
     >      -PROBKS(IU,ISBG)-PROBKS(NNREG+IU,ISBG)
            IU=IUN+JUN*NREG
            IL=IL+1
  191     CONTINUE
  181   CONTINUE
*----
*  COMPUTE PIJ**(-1)*PIJK*
*----
        CALL PIJKST(IPRT,NREG,PIJ(1,1,ISBG),PROBKS(1,ISBG))
      ENDIF
 2090 CONTINUE
      DEALLOCATE(FFACT)
*
      DEALLOCATE(SIGTAL)
*----
*  CHECK IF SCATTERING REDUCTION IS REQUIRED
*----
      ALLOCATE(PCSCT(NREG,2*NREG))
      DO 3000 ISBG=1,NSBG
      IF(NPSYS(ISBG).EQ.0) GO TO 3000
      LSKIP=.TRUE.
      DO 200 IBM=1,NBMIX
        LSKIP=LSKIP.AND.(XSSIGW(IBM,1,ISBG).EQ.0.0)
  200 CONTINUE
*----
*  COMPUTE THE SCATTERING-REDUCED CP MATRICES
*----
      IOP=1
      IF(.NOT.LSKIP) THEN
        CALL PIJSMD(IPRT,NBMIX,NREG,MATCOD,VOLUME,XSSIGW(0,1,ISBG),
     >              XSSIGT(0,ISBG),LEAKSW,PIJ(1,1,ISBG),PCSCT,IOP)
        DO 220 I=1,NREG
          FACT=VOLUME(I)
          DO 210 J=1,NREG
            INDPIJ=INDPOS(I,J)
            PIJ(INDPIJ,1,ISBG)=REAL(PCSCT(I,J))*FACT
  210     CONTINUE
  220   CONTINUE
      ENDIF
*-------
      IF(IPIJK.EQ.4) THEN
        IOP=4
        IF(.NOT.LSKIP) THEN
*         P1 SCATTERING REDUCTION OF THE DIRECTIONNAL CP MATRICES.
          IF(NANI.LT.2) CALL XABORT('PIJWIJ: ANISOTROPIC SCAT MISSING.')
          DO 250 IJKS=1,3
            CALL PIJSMD(IPRT,NBMIX,NREG,MATCOD,VOLUME,XSSIGW(0,2,ISBG),
     >                  XSSIGT(0,ISBG),LEAKSW,PIJ(1,IJKS+1,ISBG),PCSCT,
     >                  IOP)
            DO 240 I=1,NREG
              FACT=VOLUME(I)
              DO 230 J=1,NREG
                INDPIJ=INDPOS(I,J)
                PIJ(INDPIJ,IJKS+1,ISBG)=REAL(PCSCT(I,J))*FACT
  230         CONTINUE
  240       CONTINUE
  250     CONTINUE
        ENDIF
      ENDIF
 3000 CONTINUE
      DEALLOCATE(PCSCT)
      RETURN
*
 9000 FORMAT(1X,A6,': *** WARNING *** '/
     >       ' REFLECTION/TRANSMISSION MATRIX MISSING'/
     >       ' USE IDENTITY REFLECTION MATRIX')
      END