summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBINF.f
blob: 69c27ac7e4c0719ac08f39285c44015977fa89e8 (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
*DECK LIBINF
      SUBROUTINE LIBINF (IPLIB,MAXISO,MAXLIB,MAXED,MAXMIX,NBISO,NGRO,
     1 NL,ITRANC,NLIB,NCOMB,NEDMAC,NBMIX,ISONAM,ISONRF,ISOMIX,DENISO,
     2 TMPISO,SHINA,SNISO,SBISO,NTFG,LSHI,GIR,NIR,MASKI,HLIB,IEVOL,
     3 ITYP,ILLIB,KGAS,DENMIX,HVECT,HNAME)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover general information from a microlib.
*
*Copyright:
* Copyright (C) 2024 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
* IPLIB   pointer to the lattice microscopic cross section library
*         (L_LIBRARY signature).
* MAXISO  maximum number of isotopes permitted.
* MAXLIB  maximum number of external cross-section libraries.
* MAXED   maximum number of extra vector edits.
* MAXMIX  maximum number of material mixtures.
*
*Parameters: output
* NBISO   number of isotopes present in the microlib.
* NGRO    number of energy groups.
* NL      anisotropy order in the microlib.
* ITRANC  type of transport correction: =0 no transport correction
*         =1 Apollo type transport correction; =2 recover from
*         library; =3 WIMS-D type; =4 leakage correction alone.
* NLIB    number of cross-section libraries.
* NCOMB   number of depleting mixtures (used by EVO:).
* NEDMAC  number of extra vector edits.
* NBMIX   number of mixtures defined in the microlib.
* ISONAM  alias name of each isotope.
* ISONRF  library name of each isotope.
* ISOMIX  mix number of each isotope.
* DENISO  density of each isotope.
* MASK    mixture masks.* TMPISO  temperature of each isotope.
* SHINA   self-shielding name of each isotope.
* SNISO   dilution cross section of each isotope. A value of 1.0E10
*         is used for infinite dilution.
* SBISO   dilution cross section of each isotope used with Livolant-
*         Jeanpierre normalization.
* NTFG    number of thermal groups where the thermal inelastic
*         correction is applied.
* LSHI    resonant region number associated with i-th isotope.
*         Infinite dilution will be assumed if LSHI(I)=0. A negative
*         value is indicating correlation of cross sections with all
*         isotopes sharing the same LSHI value.
* GIR     Goldstein-Cohen IR parameter of each isotope.
* NIR     Goldstein-Cohen IR cutoff energy index. Use IR approximation.
*         for groups with index.ge.nir; Use library value if NIR=0.
* MASKI   isotope masks.
* HLIB    isotope options.
* IEVOL   flag making an isotope non-depleting:
*         =1 to force an isotope to be non-depleting;
*         =2 to force an isotope to be depleting;
*         =3 to force an isotope to be at saturation.
* ITYP    isotopic type:
*         =1: the isotope is not fissile and not a fission product;
*         =2: the isotope is fissile; =3: is a fission product.
* ILLIB   xs library index for each isotope (.le.NLIB).
* KGAS    state of mixture (used for stopping power correction):
*         =0: solid or liquid;
*         =1: gas.
* DENMIX  mixture density (set to -1.0 to avoid using them).
* HVECT   extra vector edits names.
* HNAME   external cross-section libraries names.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPLIB
      INTEGER MAXISO,MAXLIB,MAXED,MAXMIX,NBISO,NGRO,NL,ITRANC,NLIB,
     1 NCOMB,NEDMAC,NBMIX,ISONAM(3,MAXISO),ISONRF(3,MAXISO),
     2 ISOMIX(MAXISO),NTFG(MAXISO),LSHI(MAXISO),NIR(MAXISO),
     3 IEVOL(MAXISO),ITYP(MAXISO),ILLIB(MAXISO),KGAS(MAXMIX)
      REAL DENISO(MAXISO),TMPISO(MAXISO),SNISO(MAXISO),SBISO(MAXISO),
     2 GIR(MAXISO),DENMIX(MAXMIX)
      LOGICAL MASKI(MAXISO)
      CHARACTER(LEN=12) SHINA(MAXISO)
      CHARACTER(LEN=8) HLIB(MAXISO,4),HVECT(MAXED)
      CHARACTER(LEN=64) HNAME(MAXLIB)
*----
*  LOCAL VARIABLES
*----
      PARAMETER (NSTATE=40)
      TYPE(C_PTR) JPLIB
      INTEGER ISTATE(NSTATE)
*----
*  RECOVER STATE-VECTOR INFORMATION
*----
      CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
      NBISO=ISTATE(2)
      NGRO=ISTATE(3)
      NL=ISTATE(4)
      ITRANC=ISTATE(5)
      NLIB=ISTATE(8)
      NCOMB=ISTATE(12)
      NEDMAC=ISTATE(13)
      NBMIX=ISTATE(14)
      IF(NBISO.GT.MAXISO) CALL XABORT('LIBINF: MAXISO OVERFLOW.')
      IF(NLIB.GT.MAXLIB) CALL XABORT('LIBINF: MAXLIB OVERFLOW(1).')
      IF(NEDMAC.GT.MAXED) CALL XABORT('LIBINF: MAXED OVERFLOW(1).')
      IF(NBMIX.GT.MAXMIX) CALL XABORT('LIBINF: MAXMIX OVERFLOW.')
*----
*  RECOVER ISOTOPIC INFORMATION
*----
      CALL LCMGET(IPLIB,'ISOTOPESUSED',ISONAM)
      CALL LCMLEN(IPLIB,'ISOTOPERNAME',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPERNAME',ISONRF)
      ELSE
        CALL LCMGET(IPLIB,'ISOTOPESUSED',ISONRF)
      ENDIF
      HLIB(NBISO,:4)=' '
      ILLIB(:NBISO)=0
      CALL LCMLEN(IPLIB,'ILIBRARYTYPE',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGTC(IPLIB,'ILIBRARYTYPE',8,NBISO,HLIB(:NBISO,1))
        CALL LCMGET(IPLIB,'ILIBRARYINDX',ILLIB)
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESNTFG',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESNTFG',NTFG)
        CALL LCMGTC(IPLIB,'ISOTOPESCOH',8,NBISO,HLIB(:NBISO,2))
        CALL LCMGTC(IPLIB,'ISOTOPESINC',8,NBISO,HLIB(:NBISO,3))
      ELSE
        NTFG(:NBISO)=0
        HLIB(:NBISO,2)=' '
        HLIB(:NBISO,3)=' '
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESRESK',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGTC(IPLIB,'ISOTOPESRESK',8,NBISO,HLIB(:NBISO,4))
      ELSE
        HLIB(:NBISO,4)=' '
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESHIN',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGTC(IPLIB,'ISOTOPESHIN',12,NBISO,SHINA)
      ELSE
        SHINA(:NBISO)=' '
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESSHI',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESSHI',LSHI)
      ELSE
        LSHI(:NBISO)=0
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESNIR',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESGIR',GIR)
        CALL LCMGET(IPLIB,'ISOTOPESNIR',NIR)
      ELSE
        GIR(:NBISO)=1.0
        NIR(:NBISO)=0
      ENDIF
      CALL LCMGET(IPLIB,'ISOTOPESDENS',DENISO)
      CALL LCMGET(IPLIB,'ISOTOPESMIX',ISOMIX)
      CALL LCMLEN(IPLIB,'ISOTOPESTEMP',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESTEMP',TMPISO)
      ELSE
        TMPISO(:NBISO)=0.0
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESTODO',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESTODO',IEVOL)
      ELSE
        IEVOL(:NBISO)=0
      ENDIF
      CALL LCMLEN(IPLIB,'ISOTOPESTYPE',ILENG,ITYLCM)
      IF(ILENG.GT.0) THEN
        CALL LCMGET(IPLIB,'ISOTOPESTYPE',ITYP)
      ELSE
        ITYP(:NBISO)=1
      ENDIF
      SNISO(:NBISO)=0.0
      SBISO(:NBISO)=0.0
      JPLIB=LCMGID(IPLIB,'ISOTOPESLIST')
      DO IIISO=1,NBISO
        CALL LCMLEL(JPLIB,IIISO,ILONG,ITYLCM)
        MASKI(IIISO)=ILONG.NE.0
      ENDDO
*----
*  RECOVER MIXTURES STATES
*----
      CALL LCMLEN(IPLIB,'MIXTUREGAS',ILENG,ITYLCM)
      IF(ILENG.EQ.NBMIX) THEN
        CALL LCMGET(IPLIB,'MIXTUREGAS',KGAS)
      ELSE
        KGAS(:NBMIX)=0
      ENDIF
*----
*  UNSET MIXTURES DENSITIES
*----
      DENMIX(:MAXMIX)=-1.0
*----
*  RECOVER EXTRA VECTOR EDIT NAMES
*----
      IF(NEDMAC.GT.0) THEN
        CALL LCMGTC(IPLIB,'ADDXSNAME-P0',8,NEDMAC,HVECT)
      ENDIF
*----
*  RECOVER EXTERNAL CROSS-SECTION LIBRARY NAMES
*----
      IF(NLIB.GT.0) THEN
        CALL LCMGTC(IPLIB,'ILIBRARYNAME',64,NLIB,HNAME)
      ENDIF
      RETURN
      END