summaryrefslogtreecommitdiff
path: root/Dragon/src/AUTTAB.f
blob: 5418c1a0ea1c175606c6f5a128bc2eb0cc9a34df (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
*DECK AUTTAB
      SUBROUTINE AUTTAB(KPLIB,HNAMIS,IGRMIN,IGRRES,NGRP,LBIN,NBIN,UUU,
     1 ISEED,SIGINF,LLL,SIGT,SIGS,SIGF)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover resonant Autolib data in the unresolved energy domain.
*
*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
* KPLIB   isotope subdirectory in the internal microscopic cross-section
*         library with subgroups.
* HNAMIS  character*12 name of the resonant isotope.
* IGRMIN  first group where the self-shielding is applied.
* IGRRES  first resolved group where the self-shielding is applied.
* NGRP    number of energy groups.
* LBIN    total number of fine energy groups in the Autolib.
* NBIN    number of fine energy groups in each coarse energy group.
* UUU     lethargy limits of the groups.
* ISEED   the seed for the generation of random numbers in the
*         unresolved energy domain.
* SIGINF  infinite dilution x-s values.
*
*Parameters: output
* LLL     number of fine energy groups in the unresolved domain.
* SIGT    total microscopic x-s.
* SIGS    P0 scattering microscopic x-s.
* SIGF    nu*fission microscopic x-s.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) KPLIB
      CHARACTER HNAMIS*12
      INTEGER IGRMIN,IGRRES,NGRP,LBIN,NBIN(NGRP),ISEED,LLL
      REAL UUU(LBIN+1),SIGINF(NGRP,3),SIGT(LBIN),SIGS(LBIN),SIGF(LBIN)
      DOUBLE PRECISION DIT
*----
*  LOCAL VARIABLES
*----
      TYPE(C_PTR) LPLIB,MPLIB
      PARAMETER(MAXNOR=12)
      CHARACTER HSMG*131
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: NOR
      REAL, ALLOCATABLE, DIMENSION(:) :: SIGP
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(NOR(NGRP))
*----
*  SET THE RANDOM NUMBER GENERATOR
*----
      IFIRST=1
      IF(ISEED.EQ.0) THEN
         CALL CLETIM(DIT)
         ISEED=INT(DIT)
         DO 10 JJ=0,MOD(ISEED,10)
         CALL RANDF(ISEED,IFIRST,RAND)
   10    CONTINUE
      ENDIF
*
      CALL LCMLEN(KPLIB,'PT-TABLE',LENG,ITYLCM)
      IF(LENG.EQ.0) THEN
        WRITE(HSMG,'(38HAUTTAB: NO PT-TABLE DATA FOR ISOTOPE '',A12,
     1  23H'' FOR UNRESOLVED GROUPS,2I5,1H.)') HNAMIS,IGRMIN,IGRRES-1
        CALL XABORT(HSMG)
      ENDIF
      CALL LCMSIX(KPLIB,'PT-TABLE',1)
      CALL LCMGET(KPLIB,'NOR',NOR)
      LLL=0
      DO 20 IGRP=1,IGRMIN-1
      LLL=LLL+NBIN(IGRP)
   20 CONTINUE
      LPLIB=LCMGID(KPLIB,'GROUP-PT')
      DO 80 IGRP=IGRMIN,IGRRES-1
      IF(NOR(IGRP).LE.0) THEN
        WRITE(HSMG,'(42HAUTTAB: NO PROBABILITY TABLE DATA IN GROUP,I5,
     1  13H OF ISOTOPE '',A12,2H''.)') IGRP,HNAMIS
        CALL XABORT(HSMG)
      ELSE IF(NBIN(IGRP).LE.0) THEN
        WRITE(HSMG,'(32HAUTTAB: NO AUTOLIB MESH IN GROUP,I5,1H.)') IGRP
        CALL XABORT(HSMG)
      ENDIF
      IF(NOR(IGRP).EQ.1) THEN
        DO 30 IBIN=LLL+1,LLL+NBIN(IGRP)
        SIGT(IBIN)=SIGINF(IGRP,1)
        SIGF(IBIN)=SIGINF(IGRP,2)
        SIGS(IBIN)=SIGINF(IGRP,3)
   30   CONTINUE
      ELSE
        MPLIB=LCMGIL(LPLIB,IGRP)
        CALL LCMLEN(MPLIB,'PROB-TABLE',LENG,ITYLCM)
        NPART=LENG/MAXNOR
        IF(NPART.LT.2) THEN
          CALL LCMLIB(MPLIB)
          CALL XABORT('AUTTAB: SCATTERING INFO MISSING.')
        ENDIF
        DELG=UUU(LLL+NBIN(IGRP)+1)-UUU(LLL+1)
        ALLOCATE(SIGP(MAXNOR*NPART))
        CALL LCMGET(MPLIB,'PROB-TABLE',SIGP)
        ADSIGT=0.0
        ADSIGF=0.0
        ADSIGS=0.0
        DO 60 IBIN=LLL+1,LLL+NBIN(IGRP)
        CALL RANDF(ISEED,IFIRST,RAND)
        WW=0.0
        DO 40 INOR=1,NOR(IGRP)
        WW=WW+SIGP(INOR)
        IF(RAND.LE.WW+1.0E-6) THEN
          SIGT(IBIN)=SIGP(MAXNOR+INOR)
          SIGF(IBIN)=SIGP(2*MAXNOR+INOR)
          SIGS(IBIN)=SIGP(3*MAXNOR+INOR)
          GO TO 50
        ENDIF
   40   CONTINUE
        WRITE(HSMG,'(43HAUTTAB: WEIGHT NORMALIZATION ISSUE IN GROUP,I5,
     1  1H.)') IGRP
        CALL XABORT(HSMG)
   50   ADSIGT=ADSIGT+SIGT(IBIN)*(UUU(IBIN+1)-UUU(IBIN))/DELG
        ADSIGF=ADSIGF+SIGF(IBIN)*(UUU(IBIN+1)-UUU(IBIN))/DELG
        ADSIGS=ADSIGS+SIGS(IBIN)*(UUU(IBIN+1)-UUU(IBIN))/DELG
   60   CONTINUE
        FACTT=SIGINF(IGRP,1)/ADSIGT
        IF(ADSIGF.NE.0.0) THEN
          FACTF=SIGINF(IGRP,2)/ADSIGF
        ELSE
          FACTF=0.0
        ENDIF
        FACTS=SIGINF(IGRP,3)/ADSIGS
        DO 70 IBIN=LLL+1,LLL+NBIN(IGRP)
        SIGT(IBIN)=SIGT(IBIN)*FACTT
        SIGF(IBIN)=SIGF(IBIN)*FACTF
        SIGS(IBIN)=SIGS(IBIN)*FACTS
   70   CONTINUE
        DEALLOCATE(SIGP)
      ENDIF
      LLL=LLL+NBIN(IGRP)
   80 CONTINUE
      CALL LCMSIX(KPLIB,' ',2)
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(NOR)
      RETURN
      END