summaryrefslogtreecommitdiff
path: root/Dragon/src/EDIPXS.f
blob: 7e81b8b10c1409853dbb81039acbb073e010c2aa (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
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
*DECK EDIPXS
      SUBROUTINE EDIPXS(IPEDIT,IADJ,IPRINT,NL,NDEL,NALBP,ITRANC,NSAVES,
     >                  NGCOND,NMERGE,ILEAKS,NW,NTAUXT,EIGENK,B2,IGOVE,
     >                  CUREIN,NIFISS,CURNAM,NEDMAC,VOLMER,WLETYC,
     >                  WENERG,SCATTD,RATECM,FLUXCM,FADJCM,SIGS,SCATTS,
     >                  DISFCT,ALBP,TAUXE,HVECT,OVERV,HFACT,HSPH,NENER,
     >                  TIMEF,LH,LSPH)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Save homogenized/condensed macroscopic 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): G. Marleau
*
*Parameters: input
* IPEDIT  pointer to the edition LCM object.
* IADJ    type of flux weighting:
*         = 0 direct flux weighting;
*         = 1 direct-adjoint flux weighting.
* IPRINT  print level;
*         = 0 no print;
*         = 1 print fluxes;
*         = 2 1+print reaction rates;
*         = 3 2+print homogenized cross sections.
* NL      number of Legendre orders.
* NDEL    number of delayed precursor groups.
* NALBP   number of physical albedos.
* ITRANC  type of transport correction.
* NSAVES  homogenized cross section compute/save flag:
*         = 0  no compute, no save;
*         = 1  compute, no save;
*         = 2  compute and save.
* NGCOND  number of groups condensed.
* NMERGE  number of regions merged.
* ILEAKS  type of leakage calculation:
*         = 0 no leakage;
*         = 1 homogeneous leakage (Diffon);
*         = 2 isotropic streaming (Ecco);
*         = 3 anisotropic streaming (Tibere);
*         = 4 inconsistent model (1/3*strd);
*         = 10 isotropic diffusion coefficients recovered from input
*           macrolib;
*         = 11 anisotropic diffusion coefficients recovered from input
*           macrolib.
* NW      type of weighting for PN cross section info (=0 P0; =1 P1).
* NTAUXT  number of reaction rate edits (=15+2*NDEL).
* EIGENK  eigenvalue for problem.
* B2      square buckling:
*         for ILEAKS=1,2,4: B2(4) is homogeneous;
*         for ILEAKS=3: B2(1),B2(2),B2(3) are directional heterogeneous
*         and B2(4) is homogeneous.
* IGOVE   Golfier-Vergain flag (=0/1: don't/use Golfier-Vergain equ'n).
* CUREIN  infinite multiplication factor.
* NIFISS  number of fissile isotopes.
* CURNAM  name of LCM directory where the merged/condensed cross
*         sections are stored.
* NEDMAC  number of extra edit vectors.
* VOLMER  volume of region merged.
* WLETYC  lethargy width condensed.
* WENERG  energy group limits.
* SCATTD  double precision scattering rates.
* NENER   number of energy groups limits.
* TIMEF   time stamp in day/burnup/irradiation.
* LH      flag set to true if H-factors are set.
* LSPH    flag set to true if SPH factors are set.
*
*Parameters: output
* RATECM  averaged region/group cross sections:
*         = RATECM(*,1) = total P0;
*         = RATECM(*,2) = total P1;
*         = RATECM(*,NW+2) = absorption;
*         = RATECM(*,NW+3) = fission;
*         = RATECM(*,NW+4) = fixed sources / productions;
*         = RATECM(*,NW+5) = leakage;
*         = RATECM(*,NW+6) = total out of group scattering;
*         = RATECM(*,NW+7) = diagonal scattering x-s;
*         = RATECM(*,NW+8) = chi;
*         = RATECM(*,NW+9) = wims type transport correction;
*         = RATECM(*,NW+10) = x-directed leakage;
*         = RATECM(*,NW+11) = y-directed leakage;
*         = RATECM(*,NW+12) = z-directed leakage;
*         = RATECM(*,NW+13) = nu-sigf for delayed neutrons;
*         = RATECM(*,NW+13+NDEL) = fission spectra for delayed neutrons.
* FLUXCM  integrated region/group fluxes:
*         = FLUXCM(*,1) = fluxes P0;
*         = FLUXCM(*,2) = fluxes P1.
* FADJCM  averaged region/group afjoint fluxes:
*         = FADJCM(*,1) = adjoint fluxes P0;
*         = FADJCM(*,2) = adjoint fluxes P1.
* SIGS    Legendre dependent scattering cross sections.
* SCATTS  homogenized scattering cross sections.
* DISFCT  disadvantage factor.
* ALBP    physical albedos.
* TAUXE   extra edit rates.
* HVECT   extra edit names.
* OVERV   1/v merge condensed.
* HFACT   H-factors condensed.
* HSPH    SPH factors condensed.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPEDIT
      INTEGER     IADJ,IPRINT,NL,NDEL,NALBP,ITRANC,NSAVES,NGCOND,NMERGE,
     >            ILEAKS,NW,NTAUXT,NIFISS,NEDMAC,NENER,IGOVE
      REAL        EIGENK,B2(4),CUREIN,VOLMER(NMERGE),WLETYC(NGCOND),
     >            WENERG(NGCOND+1),RATECM(NMERGE,NGCOND,NTAUXT),
     >            FLUXCM(NMERGE,NGCOND,NW+1),FADJCM(NMERGE,NGCOND,NW+1),
     >            SIGS(NMERGE,NGCOND,NL),
     >            SCATTS(NMERGE,NGCOND,NGCOND,NL),DISFCT(NGCOND),
     >            ALBP(NALBP,NGCOND,NGCOND),TAUXE(NMERGE,NGCOND,NEDMAC),
     >            OVERV(NMERGE,NGCOND),HFACT(NMERGE,NGCOND),
     >            HSPH(NMERGE,NGCOND),TIMEF(3)
      LOGICAL     LH,LSPH
      CHARACTER   CURNAM*12,HVECT(NEDMAC)*8
      DOUBLE PRECISION SCATTD(NMERGE,NGCOND,NGCOND,NL)
*----
*  LOCAL VARIABLES
*----
      TYPE(C_PTR) JPEDIT,KPEDIT
      CHARACTER   APG*3
      PARAMETER  (IUNOUT=6,APG=' > ',ILCMUP=1,ILCMDN=2,NSTATE=40)
      CHARACTER   CEDNAM*12,HSIGN*12,CM*2
      INTEGER     IDATA(NSTATE),ISTATE(NSTATE)
      DOUBLE PRECISION SCATWG,SCATTN,FAC1,FAC2
      LOGICAL     LAL1D
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) ::IJJ,NJJ,IPOS
      REAL, ALLOCATABLE, DIMENSION(:) ::SCATC,ALPHA
      REAL, ALLOCATABLE, DIMENSION(:,:) :: FACT,ALB1
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(IJJ(NMERGE),NJJ(NMERGE),IPOS(NMERGE))
      ALLOCATE(SCATC(NMERGE*NGCOND),FACT(NMERGE,NW+1),ALPHA(NGCOND))
*----
*  COMPUTE MERGED/CONDENSED X-S
*----
      IF(NSAVES.GE.1) THEN
        IDATA(4)=0
        DO 200 IGR=1,NGCOND
          DO 40 IKK=1,NMERGE
            DO 5 IL=1,NW+1
              IF(FLUXCM(IKK,IGR,1).EQ.0.0) THEN
                FACT(IKK,IL)=0.0
              ELSE
                FACT(IKK,IL)=1.0/FLUXCM(IKK,IGR,IL)
              ENDIF
    5       CONTINUE
            RATECM(IKK,IGR,NW+3)=RATECM(IKK,IGR,NW+3)*FACT(IKK,1)
            IF((RATECM(IKK,IGR,NW+3).NE.0.0).OR.
     >         (RATECM(IKK,IGR,NW+8).NE.0.0)) IDATA(4)=1
            IF(IADJ.EQ.0) THEN
              DO IW=1,NW+1
                RATECM(IKK,IGR,IW)=RATECM(IKK,IGR,IW)*FACT(IKK,IW)
              ENDDO
              RATECM(IKK,IGR,NW+2)=RATECM(IKK,IGR,NW+2)*FACT(IKK,1)
              RATECM(IKK,IGR,NW+4)=RATECM(IKK,IGR,NW+4)*FACT(IKK,1)
              IF(NENER.GT.0) OVERV(IKK,IGR)=OVERV(IKK,IGR)*FACT(IKK,1)
              IF(LH) HFACT(IKK,IGR)=HFACT(IKK,IGR)*FACT(IKK,1)
              IF(LSPH) HSPH(IKK,IGR)=HSPH(IKK,IGR)*FACT(IKK,1)
              IF(ITRANC.NE.0) RATECM(IKK,IGR,NW+9)=RATECM(IKK,IGR,NW+9)
     >        *FACT(IKK,1)
              DO 10 IL=1,NL
                IW=MIN(IL,NW+1,2)
                SIGS(IKK,IGR,IL)=SIGS(IKK,IGR,IL)*FACT(IKK,IW)
  10          CONTINUE
            ELSE IF(IADJ.EQ.1) THEN
              DO IL=1,NW+1
                FAD1=FADJCM(IKK,IGR,IL)
                RATECM(IKK,IGR,IL)=RATECM(IKK,IGR,IL)*FACT(IKK,IL)/FAD1
              ENDDO
              FAD1=FADJCM(IKK,IGR,1)
              RATECM(IKK,IGR,NW+2)=RATECM(IKK,IGR,NW+2)*FACT(IKK,1)/FAD1
              RATECM(IKK,IGR,NW+4)=RATECM(IKK,IGR,NW+4)*FACT(IKK,1)/FAD1
              IF(NENER.GT.0) OVERV(IKK,IGR)=OVERV(IKK,IGR)*FACT(IKK,1)
     >        /FAD1
              IF(LH) HFACT(IKK,IGR)=HFACT(IKK,IGR)*FACT(IKK,1)/FAD1
              IF(LSPH) HSPH(IKK,IGR)=HSPH(IKK,IGR)*FACT(IKK,1)/FAD1
              IF(ITRANC.NE.0) RATECM(IKK,IGR,NW+9)=RATECM(IKK,IGR,NW+9)
     >        *FACT(IKK,1)/FAD1
              DO 20 IL=1,NL
                IW=MIN(IL,NW+1,2)
                SIGS(IKK,IGR,IL)=SIGS(IKK,IGR,IL)*FACT(IKK,IW)/
     >          FADJCM(IKK,IGR,IW)
  20          CONTINUE
            ENDIF
            DO 30 IDEL=1,NDEL
              K=NW+12+IDEL
              RATECM(IKK,IGR,K)=RATECM(IKK,IGR,K)*FACT(IKK,1)
  30        CONTINUE
  40      CONTINUE
          IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.4)) THEN
            IF(IADJ.EQ.0) THEN
              DO 50 IKK=1,NMERGE
                RATECM(IKK,IGR,NW+5)=RATECM(IKK,IGR,NW+5)*FACT(IKK,1)
  50          CONTINUE
            ELSE IF(IADJ.EQ.1) THEN
              DEN2=0.0
              DO 60 IKK=1,NMERGE
                DEN2=DEN2+FADJCM(IKK,IGR,1)
                RATECM(IKK,IGR,NW+5)=RATECM(IKK,IGR,NW+5)*FACT(IKK,1)/
     >          FADJCM(IKK,IGR,1)
  60          CONTINUE
            ENDIF
          ELSE IF(ILEAKS.GT.0) THEN
            DO 70 IKK=1,NMERGE
              RATECM(IKK,IGR,NW+5)=RATECM(IKK,IGR,NW+5)*FACT(IKK,1)
              RATECM(IKK,IGR,NW+10)=RATECM(IKK,IGR,NW+10)*FACT(IKK,1)
              RATECM(IKK,IGR,NW+11)=RATECM(IKK,IGR,NW+11)*FACT(IKK,1)
              RATECM(IKK,IGR,NW+12)=RATECM(IKK,IGR,NW+12)*FACT(IKK,1)
  70        CONTINUE
          ENDIF
          DO 100 JGR=1,NGCOND
            DO 90 IKK=1,NMERGE
              DO 80 IL=1,NL
                IW=MIN(IL,NW+1)
                IF(IADJ.EQ.0) THEN
                  SCATTS(IKK,JGR,IGR,IL)=REAL(SCATTD(IKK,JGR,IGR,IL)
     >            *FACT(IKK,IW))
                ELSE IF(IADJ.EQ.1) THEN
                  SCATTS(IKK,JGR,IGR,IL)=REAL(SCATTD(IKK,JGR,IGR,IL)
     >            *FACT(IKK,IW)/FADJCM(IKK,JGR,IW))
                ENDIF
  80          CONTINUE
  90        CONTINUE
 100      CONTINUE
          DO 110 IKK=1,NMERGE
            RATECM(IKK,IGR,NW+7)=SCATTS(IKK,IGR,IGR,1)
 110      CONTINUE
          DO 130 IED=1,NEDMAC
            DO 120 IKK=1,NMERGE
              IF(IADJ.EQ.0) THEN
                TAUXE(IKK,IGR,IED)=TAUXE(IKK,IGR,IED)*FACT(IKK,1)
              ELSE IF(IADJ.EQ.1) THEN
                TAUXE(IKK,IGR,IED)=TAUXE(IKK,IGR,IED)*FACT(IKK,1)/
     >          FADJCM(IKK,IGR,1)
              ENDIF
 120        CONTINUE
 130      CONTINUE
 200    CONTINUE
        IF(NSAVES.EQ.2) THEN
*----
*  COMPUTE THE GOLFIER-VERGAIN FACTORS
*----
          IF(IGOVE.EQ.1) THEN
            DO 205 IGR=1,NGCOND
              FAC1=0.0D0
              FAC2=0.0D0
              DO 204 IKK=1,NMERGE
                FAC1=FAC1+RATECM(IKK,IGR,NW+5)*FLUXCM(IKK,IGR,1)
                FAC2=FAC2+FLUXCM(IKK,IGR,1)/(3.0*(RATECM(IKK,IGR,1)-
     >          SIGS(IKK,IGR,2)))
 204          CONTINUE
              ALPHA(IGR)=REAL(FAC1/FAC2)
 205        CONTINUE
            IF(IPRINT.GE.3) WRITE(IUNOUT,6000) ALPHA(:)
          ENDIF
*----
*  SAVE MERGED/CONDENSED X-S ON LCM
*----
          CALL LCMSIX(IPEDIT,CURNAM,ILCMUP)
          CALL LCMSIX(IPEDIT,'MACROLIB',ILCMUP)
          CALL LCMPUT(IPEDIT,'TIMESTAMP',3,2,TIMEF)
          IDATA(1)=NGCOND
          IDATA(2)=NMERGE
          IDATA(3)=NL
          IDATA(5)=NEDMAC
          IDATA(6)=ITRANC
          IDATA(7)=NDEL
          IDATA(15)=IADJ
          IF(NEDMAC.GT.0) THEN
            CALL LCMPTC(IPEDIT,'ADDXSNAME-P0',8,NEDMAC,HVECT)
          ENDIF
          JPEDIT=LCMLID(IPEDIT,'GROUP',NGCOND)
          DO 210 IGR=1,NGCOND
            KPEDIT=LCMDIL(JPEDIT,IGR)
            IF(NEDMAC.GT.0) THEN
              DO 211 IED=1,NEDMAC
                CEDNAM=HVECT(IED)
                IF((CEDNAM(:2).EQ.'NW').OR.
     >             (CEDNAM.EQ.'H-FACTOR')) GO TO 211
                CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,TAUXE(1,IGR,IED))
 211          CONTINUE
            ENDIF
            IF(NENER.GT.0) CALL LCMPUT(KPEDIT,'OVERV',NMERGE,2,
     >      OVERV(1,IGR))
            IF(LH) CALL LCMPUT(KPEDIT,'H-FACTOR',NMERGE,2,HFACT(1,IGR))
            IF(LSPH) CALL LCMPUT(KPEDIT,'NSPH',NMERGE,2,HSPH(1,IGR))
            DO IW=1,MIN(NW+1,10)
              WRITE(CEDNAM,'(4HNTOT,I1)') IW-1
              CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,RATECM(1,IGR,IW))
            ENDDO
            CALL LCMPUT(KPEDIT,'ABS',NMERGE,2,RATECM(1,IGR,NW+2))
            CALL LCMPUT(KPEDIT,'PRODUCTION',NMERGE,2,RATECM(1,IGR,NW+4))
            DO 212 IKK=1,NMERGE
            RATECM(IKK,IGR,NW+6)=RATECM(IKK,IGR,1)-RATECM(IKK,IGR,NW+2)
 212        CONTINUE
            IF(IDATA(4).EQ.1) THEN
              CALL LCMPUT(KPEDIT,'NUSIGF',NMERGE,2,RATECM(1,IGR,NW+3))
              CALL LCMPUT(KPEDIT,'CHI',NMERGE,2,RATECM(1,IGR,NW+8))
              DO 901 IDEL=1,NDEL
                K=NW+12+IDEL
                WRITE(CEDNAM,'(6HNUSIGF,I2.2)') IDEL
                CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,RATECM(1,IGR,K))
                WRITE(CEDNAM,'(3HCHI,I2.2)') IDEL
                CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,RATECM(1,IGR,NDEL+K))
 901          CONTINUE
            ENDIF
            IF(ITRANC.NE.0) THEN
              CALL LCMPUT(KPEDIT,'TRANC',NMERGE,2,RATECM(1,IGR,NW+9))
            ENDIF
            IF(IGOVE.EQ.1) THEN
              ! use the Golfier-Vergain formula
              SCATC(:NMERGE)=ALPHA(IGR)/(3.0*(RATECM(:NMERGE,IGR,1)
     >        -SIGS(:NMERGE,IGR,2)))
              CALL LCMPUT(KPEDIT,'DIFF',NMERGE,2,SCATC)
            ELSE IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.10))
     >      THEN
              CALL LCMPUT(KPEDIT,'DIFF',NMERGE,2,RATECM(1,IGR,NW+5))
            ELSE IF(ILEAKS.EQ.3) THEN
              CALL LCMPUT(KPEDIT,'DIFF',NMERGE,2,RATECM(1,IGR,NW+5))
              CALL LCMPUT(KPEDIT,'DIFFX',NMERGE,2,RATECM(1,IGR,NW+10))
              CALL LCMPUT(KPEDIT,'DIFFY',NMERGE,2,RATECM(1,IGR,NW+11))
              CALL LCMPUT(KPEDIT,'DIFFZ',NMERGE,2,RATECM(1,IGR,NW+12))
            ELSE IF(ILEAKS.EQ.11) THEN
              CALL LCMPUT(KPEDIT,'DIFFX',NMERGE,2,RATECM(1,IGR,NW+10))
              CALL LCMPUT(KPEDIT,'DIFFY',NMERGE,2,RATECM(1,IGR,NW+11))
              CALL LCMPUT(KPEDIT,'DIFFZ',NMERGE,2,RATECM(1,IGR,NW+12))
            ENDIF
            CALL LCMPUT(KPEDIT,'FLUX-INTG',NMERGE,2,FLUXCM(1,IGR,1))
            DO IL=2,MIN(NW+1,10)
              WRITE(CEDNAM,'(11HFLUX-INTG-P,I1)') IL-1
              CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,FLUXCM(1,IGR,IL))
            ENDDO
            IF(IADJ.EQ.1) THEN
              DO IL=1,MIN(NW+1,10)
                WRITE(CEDNAM,'(4HNWAT,I1)') IL-1
                CALL LCMPUT(KPEDIT,CEDNAM,NMERGE,2,FADJCM(1,IGR,IL))
              ENDDO
            ENDIF
            DO 350 IL=1,NL
            WRITE (CM,'(I2.2)') IL-1
            IPOSIT=0
            DO 214 IKK=1,NMERGE
              J2=IGR
              J1=IGR
              DO 215 JGR=1,NGCOND
                IF(SCATTS(IKK,IGR,JGR,IL).NE.0.0) THEN
                  J2=MAX(J2,JGR)
                  J1=MIN(J1,JGR)
                ENDIF
 215          CONTINUE
              NJJ(IKK)=J2-J1+1
              IJJ(IKK)=J2
              IPOS(IKK)=IPOSIT+1
              DO 216 JGR=J2,J1,-1
                IPOSIT=IPOSIT+1
                SCATC(IPOSIT)=SCATTS(IKK,IGR,JGR,IL)
 216          CONTINUE
 214        CONTINUE
            CALL LCMPUT(KPEDIT,'SIGS'//CM,NMERGE,2,SIGS(1,IGR,IL))
            CALL LCMPUT(KPEDIT,'SIGW'//CM,NMERGE,2,SCATTS(1,IGR,IGR,IL))
            CALL LCMPUT(KPEDIT,'SCAT'//CM,IPOSIT,2,SCATC)
            CALL LCMPUT(KPEDIT,'NJJS'//CM,NMERGE,1,NJJ)
            CALL LCMPUT(KPEDIT,'IJJS'//CM,NMERGE,1,IJJ)
            CALL LCMPUT(KPEDIT,'IPOS'//CM,NMERGE,1,IPOS)
 350        CONTINUE
            IF(IPRINT.GE.4) THEN
              WRITE(IUNOUT,'(/14H G R O U P   :,I4)') IGR
              CALL LCMLIB(KPEDIT)
            ENDIF
 210      CONTINUE
          IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.10)) THEN
            CALL LCMPUT(IPEDIT,'B2  B1HOM',1,2,B2(4))
          ELSE IF((ILEAKS.EQ.3).OR.(ILEAKS.EQ.11)) THEN
            CALL LCMPUT(IPEDIT,'B2  B1HOM',1,2,B2(4))
            CALL LCMPUT(IPEDIT,'B2  HETE',3,2,B2)
          ENDIF
          IDATA(8)=NALBP
          DO 217 I=9,NSTATE
          IDATA(I)=0
 217      CONTINUE
          IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.4).OR.
     >    (ILEAKS.EQ.10)) THEN
             IDATA(9)=1
          ELSE IF((ILEAKS.EQ.3).OR.(ILEAKS.EQ.11)) THEN
             IDATA(9)=2
          ENDIF
          IDATA(10)=NW
          IF(LSPH) THEN
            IDATA(14)=1
            CALL LCMSIX(IPEDIT,'SPH',1)
            ISTATE(:)=0
            ISTATE(1)=4
            ISTATE(2)=1
            ISTATE(6)=1
            ISTATE(7)=1
            ISTATE(8)=NGCOND
            CALL LCMPUT(IPEDIT,'STATE-VECTOR',NSTATE,1,ISTATE)
            CALL LCMSIX(IPEDIT,' ',2)
          ENDIF
          CALL LCMPUT(IPEDIT,'STATE-VECTOR',NSTATE,1,IDATA)
          HSIGN='L_MACROLIB'
          CALL LCMPTC(IPEDIT,'SIGNATURE',12,HSIGN)
          IF(NENER.GT.0) THEN
            CALL LCMPUT(IPEDIT,'ENERGY',NGCOND+1,2,WENERG)
            CALL LCMPUT(IPEDIT,'DELTAU',NGCOND,2,WLETYC)
          ENDIF
          CALL LCMPUT(IPEDIT,'VOLUME',NMERGE,2,VOLMER)
          IF((EIGENK.NE.0.0).AND.(NIFISS.GT.0)) THEN
            CALL LCMPUT(IPEDIT,'K-EFFECTIVE',1,2,EIGENK)
          ENDIF
          IF((CUREIN.NE.0.0).AND.(NIFISS.GT.0)) THEN
            CALL LCMPUT(IPEDIT,'K-INFINITY',1,2,CUREIN)
          ENDIF
          CALL LCMPUT(IPEDIT,'FLUXDISAFACT',NGCOND,2,DISFCT)
          IF(NALBP.GT.0) THEN
            LAL1D=.TRUE.
            DO IAL=1,NALBP
              DO IGR=1,NGCOND
                DO JGR=1,NGCOND
                  IF((IGR.NE.JGR).AND.(ALBP(IAL,IGR,JGR).NE.0.0)) THEN
                    LAL1D=.FALSE.
                    GO TO 218
                  ENDIF
                ENDDO
              ENDDO
            ENDDO
 218        IF(LAL1D) THEN
*             diagonal physical albedos
              ALLOCATE(ALB1(NALBP,NGCOND))
              DO IAL=1,NALBP
                DO IGR=1,NGCOND
                  ALB1(IAL,IGR)=ALBP(IAL,IGR,IGR)
                ENDDO
              ENDDO
              CALL LCMPUT(IPEDIT,'ALBEDO',NALBP*NGCOND,2,ALB1)
              DEALLOCATE(ALB1)
            ELSE
*             matrix physical albedos
              CALL LCMPUT(IPEDIT,'ALBEDO',NALBP*NGCOND*NGCOND,2,ALBP)
            ENDIF
          ENDIF
          CALL LCMSIX(IPEDIT,' ',ILCMDN)
          CALL LCMSIX(IPEDIT,' ',ILCMDN)
          IF(IPRINT.GT.0) WRITE(IUNOUT,6031) CURNAM
        ENDIF
      ENDIF
*----
*  PRINT X-S
*----
      IF(IPRINT.GE.3) THEN
        IF(IGOVE.EQ.1) THEN
          WRITE(IUNOUT,'(/41H EDIPXS: USE THE GOLFIER-VERGAIN APPROXIM,
     >    43HATION FOR DIFFUSION COEFFICIENT CALCULATION)')
        ENDIF
        WRITE(IUNOUT,6010)
        DO 170 IGR=1,NGCOND
          IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.4).OR.
     >    (ILEAKS.EQ.10)) THEN
            WRITE(IUNOUT,6020) IGR
          ELSE
            WRITE(IUNOUT,6021) IGR
          ENDIF
          DO 171 IKK=1,NMERGE
*----
*  UNCOMMENT THE 4 LINES TO PERFORM TRANSPORT CORRECTION
*----
            TOTAL=RATECM(IKK,IGR,1)
            SCATWG=SCATTS(IKK,IGR,IGR,1)
*           IF(ITRANC.NE.0) THEN
*             TOTAL=TOTAL-RATECM(IKK,IGR,NW+9)
*             SCATWG=SCATWG-RATECM(IKK,IGR,NW+9)
*           ENDIF
*
            IF (FLUXCM(IKK,IGR,1).NE.0.0) THEN
              FLXAVG=FLUXCM(IKK,IGR,1)/VOLMER(IKK)
              SCATTN=0.0D0
              DO 172 JGR=1,NGCOND
                 IF(JGR.NE.IGR) SCATTN=SCATTN+SCATTS(IKK,JGR,IGR,1)
 172          CONTINUE
              IF((ILEAKS.EQ.1).OR.(ILEAKS.EQ.2).OR.(ILEAKS.EQ.4).OR.
     >        (ILEAKS.EQ.10)) THEN
                WRITE(IUNOUT,6022) IKK,FLXAVG,TOTAL,
     >          RATECM(IKK,IGR,NW+5),RATECM(IKK,IGR,NW+2),
     >          RATECM(IKK,IGR,NW+3),RATECM(IKK,IGR,NW+8),SCATWG,SCATTN
              ELSE
                WRITE(IUNOUT,6022) IKK,FLXAVG,TOTAL,
     >          RATECM(IKK,IGR,NW+2),RATECM(IKK,IGR,NW+3),
     >          RATECM(IKK,IGR,NW+8),SCATWG,SCATTN
              ENDIF
            ENDIF
 171      CONTINUE
          IF((ILEAKS.EQ.3).OR.(ILEAKS.EQ.11)) THEN
            WRITE(IUNOUT,6024)
            DO 173 IKK=1,NMERGE
              WRITE(IUNOUT,6025) IKK,RATECM(IKK,IGR,NW+10),
     >        RATECM(IKK,IGR,NW+11),RATECM(IKK,IGR,NW+12),
     >        RATECM(IKK,IGR,NW+5)
 173        CONTINUE
          ENDIF
          WRITE(IUNOUT,6026) DISFCT(IGR)
 170    CONTINUE
      ENDIF
      IF(IPRINT.GE.4) THEN
        DO 190 IKK=1,NMERGE
          WRITE(IUNOUT,6027) IKK,(JGR,JGR=1,NGCOND)
          DO 180 IGR=1,NGCOND
*----
*  UNCOMMENT THE FOLLOWING LINE TO PERFORM TRANSPORT CORRECTION
*----
            SCATWG=SCATTS(IKK,IGR,IGR,1)
*           IF(ITRANC.NE.0) SCATWG=SCATWG-RATECM(IKK,IGR,NW+9)
*
            WRITE(IUNOUT,6028) IGR,(SCATTS(IKK,JGR,IGR,1),JGR=1,IGR-1),
     >      SCATWG,(SCATTS(IKK,JGR,IGR,1),JGR=IGR+1,NGCOND)
 180      CONTINUE
          WRITE (IUNOUT,'(//)')
 190    CONTINUE
      ENDIF
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(ALPHA,FACT,SCATC)
      DEALLOCATE(IPOS,NJJ,IJJ)
      RETURN
*----
*  FORMAT
*----
 6000 FORMAT(/33H EDIPXS: Golfier-Vergain factors=,1P,10E12.4/(33X,
     > 10E12.4))
 6010 FORMAT(/' F L U X E S   A N D   H O M O G E N I Z E D   X - S'/
     > 1X,51(1H-))
 6020 FORMAT(/' G R O U P   :',I4/
     >1X,'REGION',3X,'AVERAGE',9X,'NTOT0',7X,'DIFFUSION',5X,
     >'ABSORPTION',5X,'NUSIGF',8X,'FISSION',10X,'SCATTERING X-S'/11X,
     >'FLUX',12X,'X-S',7X,'COEFFICIENT',7X,'X-S',10X,'X-S',10X,
     >'SPECTRUM',2X,'WITHIN GROUP',2X,'OUT OF GROUP')
 6021 FORMAT(/' G R O U P   :',I4/
     >1X,'REGION',3X,'AVERAGE',9X,'NTOT0',7X,
     >'ABSORPTION',5X,'NUSIGF',8X,'FISSION',10X,'SCATTERING X-S'/11X,
     >'FLUX',12X,'X-S',11X,'X-S',10X,'X-S',10X,'SPECTRUM',2X,
     >'WITHIN GROUP',2X,'OUT OF GROUP')
 6022 FORMAT(1X,I4,1P,8E14.5)
 6024 FORMAT(/' REGION     X-LEAKAGE     Y-LEAKAGE     Z-LEAKAGE',
     >'    HOM-LEAKAGE'/'           COEFFICIENT   COEFFICIENT   ',
     >'COEFFICIENT   COEFFICIENT')
 6025 FORMAT(1X,I6,1X,1P,5E14.5)
 6026 FORMAT(/' FLUX DISADVANTAGE FACTOR =',1P,E14.5)
 6027 FORMAT(/47H SCATTERING TRANSFER X-S (I TOWARD J) IN REGION,I5,1H:
     > //(11X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,2HJ=,
     > I4,:,6X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,2HJ=,I4,:,6X,
     > 2HJ=,I4))
 6028 FORMAT(3H I=,I4,2H: ,1P,10E12.4/(9X,10E12.4))
 6031 FORMAT(/53H MERGED/CONDENSED SET OF X-S SAVED IN LCM DIRECTORY ',
     > A12,2H'./)
      END