summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBLIC.F
blob: 8079f3a72c9bbb990a8470180e7bb4ec7a58addd (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
*DECK LIBLIC
      SUBROUTINE LIBLIC (IPLIB,NBISO,MASKI,IMPX,NGRO,NL,ITRANC,ITIME,
     1 NLIB,NED,HVECT,ISONAM,ISONRF,IPISO,ISHINA,TMPISO,IHLIB,ILLIB,
     2 INAME,NTFG,LSHI,SN,SB,NIR,GIR,NGF,IGRMAX,NDEL,NBESP,NPART,IPROC,
     3 NDEPL)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Transcription of the useful interpolated microscopic cross section
* data from various format of libraries to lcm. A two dimensional
* interpolation in temperature and dilution is performed (Part B).
*
*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): A. Hebert
*
*Parameters: input
* IPLIB   pointer to the lattice microscopic cross section library
*         (L_LIBRARY signature).
* NBISO   number of isotopes present in the calculation domain.
* MASKI   isotopic masks. An isotope with index I is processed if
*         MASKI(I)=.true.
* IMPX    print flag.
* NGRO    number of energy groups.
* NL      number of Legendre orders required in the calculation
*         NL=1 (for isotropic scattering) or higher.
* 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.
* ITIME   MATXS type of fission spectrum:
*         =1 steady-state; =2 prompt.
* NLIB    number of independent libraries.
* NED     number of requested vector edits.
* HVECT   names of the requested vector edits.
* ISONAM  alias name of each isotope.
* ISONRF  library reference name of each isotope.
* IPISO   pointer array towards microlib isotopes.
* ISHINA  self-shielding name of each isotope.
* TMPISO  temperature of each isotope.
* IHLIB   isotope options.
* ILLIB   xs library index for each isotope (.le.NLIB).
* INAME   names of the NLIB xs libraries.
* NTFG    number of thermal groups where the thermal inelastic
*         correction is applied.
* LSHI    resonant region number associated with each isotope.
*         Infinite dilution will be assumed if LSHI(i)=0.
* SN      dilution cross section in each energy group of each
*         isotope. a value of 1.0E10 is used for infinite dilution.
* SB      dilution cross section as used in Livolant and Jeanpierre
*         normalization.
* NIR     first group index with an imposed IR slowing-down model;
*         =0 for no IR model.
* GIR     value of the imposed Goldstein-Cohen parameter for groups
*         with an IR model.
* NGF     number of fast groups without self-shielding.
* IGRMAX  maximum group index with self-shielding.
* NDEL    number of precursor groups for delayed neutrons.
* NBESP   number of energy-dependent fission spectra.
* NPART   number of particles.
* IPROC   type of library processing.
* NDEPL   number of depleting isotopes.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
#if defined(HDF5_LIB)
      USE hdf5_wrap
#endif /* defined(HDF5_LIB) */
      IMPLICIT NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPLIB,IPISO(NBISO)
      INTEGER NBISO,IMPX,NGRO,NL,ITRANC,ITIME,NLIB,NED,NGF,IGRMAX,NDEL,
     > NBESP,NPART,IPROC,NDEPL,ISONAM(3,NBISO),ISONRF(3,NBISO),
     > ISHINA(3,NBISO),IHLIB(2,NBISO,4),ILLIB(NBISO),INAME(16,NLIB),
     > NTFG(NBISO),LSHI(NBISO),NIR(NBISO)
      LOGICAL MASKI(NBISO)
      CHARACTER*(*) HVECT(NED)
      REAL TMPISO(NBISO),SN(NGRO,NBISO),SB(NGRO,NBISO),GIR(NBISO)
*----
*  INTERNAL PARAMETERS
*----
      TYPE(C_PTR) IPDRL,IPMIC
      INTEGER MAXDIL
      PARAMETER (MAXDIL=65)
*----
*  LOCAL VARIABLES
*----
      INTEGER I,J,IND1,NBIS,NDEL0,NGF0,NGFR0,MAXTRA,ILIB,ILONG,NBESP0,
     1 NPART0
      CHARACTER NAMLBT*8,NAMFIL*64,HSMG*131,NAMLCM*12,NAMMY*12
      LOGICAL LTEST,EMPTY,LCM,LEXIST
*----
*  CHECK FOR DUPLICATE ISOTOPE NAMES.
*----
      DO 40 I=1,NBISO
      IF(MASKI(I).AND.(ILLIB(I).NE.0).AND.(LSHI(I).NE.0)) THEN
         DO 30 J=I+1,NBISO
         IF(MASKI(J).AND.(ISONAM(1,I).EQ.ISONAM(1,J)).AND.
     1                   (ISONAM(2,I).EQ.ISONAM(2,J)).AND.
     2                   (ISONAM(3,I).EQ.ISONAM(3,J))) THEN
            WRITE (HSMG,200) ISONAM(1,I),ISONAM(2,I),ISONAM(3,I)
            CALL XABORT(HSMG)
         ENDIF
   30    CONTINUE
      ENDIF
   40 CONTINUE
*
      NPART=1
      NGF0=NGRO+1
      NGFR0=0
      IND1=1
   50 NBIS=1
      LTEST=MASKI(IND1)
      DO 60 I=IND1+1,NBISO
        IF(ILLIB(I).EQ.0) THEN
          NBIS=NBIS+1
        ELSE IF((IHLIB(1,I,1).EQ.IHLIB(1,IND1,1)).AND.
     1     (IHLIB(2,I,1).EQ.IHLIB(2,IND1,1)).AND.
     2     (ILLIB(I).EQ.ILLIB(IND1))) THEN
          NBIS=NBIS+1
          LTEST=LTEST.OR.MASKI(I)
        ELSE
          GO TO 70
        ENDIF
   60 CONTINUE
   70 WRITE(NAMLBT,'(2A4)') IHLIB(1,IND1,1),IHLIB(2,IND1,1)
      ILIB=ILLIB(IND1)
      IF(ILIB.EQ.0) THEN
        NAMFIL=' '
      ELSE
        WRITE(NAMFIL,'(16A4)') (INAME(I,ILIB),I=1,16)
      ENDIF
      NDEL0=0
      CALL LCMINF(IPLIB,NAMLCM,NAMMY,EMPTY,ILONG,LCM)
      IF(LTEST.AND.(NAMLBT.EQ.'DRAGON')) THEN
*       TRANSFER INFORMATION FROM DRAGON LIBRARY TO LCM.
        CALL LCMOP(IPDRL,NAMFIL(:12),2,2,0)
        CALL LIBDRA(IPLIB,IPDRL,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),TMPISO(IND1),SN(1,IND1),SB(1,IND1),
     2  MASKI(IND1),NED,HVECT,IMPX,NGF0,NGFR0,NDEL0,NBESP0)
        CALL LCMCL(IPDRL,1)
        NBESP=MAX(NBESP,NBESP0)
      ELSE IF(LTEST.AND.(NAMLBT(1:4).EQ.'WIMS')) THEN
*       TRANSFER INFORMATION FROM WIMS LIBRARY FILE TO LCM.
        IF(NAMLBT.EQ.'WIMSD4') THEN
*         WIMS-D4 FORMAT
          CALL LIBWD4(IPLIB,IMPX,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1    ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),TMPISO(IND1),
     2    SN(1,IND1),SB(1,IND1),MASKI(IND1),NGF0,NGFR0)
        ELSE IF(NAMLBT.EQ.'WIMSE') THEN
*         WIMS-E FORMAT
          CALL LIBWE(IPLIB,IMPX,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1    ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),TMPISO(IND1),
     2    SN(1,IND1),SB(1,IND1),MASKI(IND1),NGF0,NGFR0)
        ELSE IF(NAMLBT.EQ.'WIMSAECL') THEN
*         WIMS-AECL FORMAT
          CALL LIBWIM(IPLIB,IMPX,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1    ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),TMPISO(IND1),
     2    SN(1,IND1),SB(1,IND1),MASKI(IND1),NGF0,NGFR0)
        ENDIF
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'MATXS')) THEN
*       TRANSFER INFORMATION FROM MATXS (NJOY-89) TO LCM.
        CALL LIBTR1(IPLIB,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),IHLIB(1,IND1,2),IHLIB(1,IND1,3),
     2  NTFG(IND1),TMPISO(IND1),SN(1,IND1),SB(1,IND1),MASKI(IND1),NED,
     3  HVECT,ITIME,IMPX,NGF0,NGFR0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'MATXS2')) THEN
*       TRANSFER INFORMATION FROM MATXS (NJOY-91) TO LCM.
        CALL LIBTR2(IPLIB,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),IHLIB(1,IND1,2),IHLIB(1,IND1,3),
     2  IHLIB(1,IND1,4),NTFG(IND1),TMPISO(IND1),SN(1,IND1),SB(1,IND1),
     3  MASKI(IND1),NED,HVECT,ITIME,IMPX,NGF0,NGFR0,NPART0)
        NPART=MAX(NPART,NPART0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'APLIB1')) THEN
*       TRANSFER INFORMATION FROM APOLIB-1 TO LCM.
        MAXTRA=NL*NGRO**2
        CALL LIBAPL(IPLIB,NAMFIL,MAXTRA,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),MASKI(IND1),
     2  TMPISO(IND1),SN(1,IND1),SB(1,IND1),IMPX,NGF0,NGFR0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'APLIB2')) THEN
*       TRANSFER INFORMATION FROM APOLIB-2 TO LCM.
        CALL LIBA20(IPLIB,NAMFIL,NGRO,NBIS,NL,IPROC,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),MASKI(IND1),
     2  TMPISO(IND1),SN(1,IND1),SB(1,IND1),IMPX,NGF0,NGFR0,NDEL0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'APXSM')) THEN
*       TRANSFER INFORMATION FROM APOLIB-XSM TO LCM.
        CALL LIBXS4(IPLIB,NAMFIL,NGRO,NBIS,NL,IPROC,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),ISHINA(1,IND1),MASKI(IND1),
     2  TMPISO(IND1),SN(1,IND1),SB(1,IND1),IMPX,NGF0,NGFR0,NDEL0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'APLIB3')) THEN
*       TRANSFER INFORMATION FROM APOLIB-3 TO LCM.
#if defined(HDF5_LIB)
        CALL LIBA30 (IPLIB,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),MASKI(IND1),TMPISO(IND1),LSHI(IND1),
     2  SN(1,IND1),SB(1,IND1),IMPX,NGF0,NGFR0,NDEL0)
#else
        CALL XABORT('LIBLIC: THE HDF5 API IS NOT AVAILABLE.')
#endif /* defined(HDF5_LIB) */
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'NDAS')) THEN
        CALL LIBND1(IPLIB,NAMFIL,NGRO,NBIS,NL,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),MASKI(IND1),TMPISO(IND1),SN(1,IND1),
     2  SB(1,IND1),IMPX,NGF0,NGFR0,NDEL0)
      ELSE IF(LTEST.AND.(NAMLBT.EQ.'MICROLIB')) THEN
*       TRANSFER INFORMATION FROM MICROLIB LIBRARY TO LCM.
        CALL LCMINF(IPLIB,NAMLCM,NAMMY,EMPTY,ILONG,LCM)
        IF(NAMFIL.EQ.NAMLCM) THEN
          IPMIC=IPLIB
        ELSE
          INQUIRE(FILE=TRIM(NAMFIL),EXIST=LEXIST)
          IF(.NOT.LEXIST) THEN
            WRITE(HSMG,'(17HLIBLIC: XSM FILE ,A,14H DOESNT EXIST.)')
     1      TRIM(NAMFIL)
            CALL XABORT(HSMG)
          ENDIF
          CALL LCMOP(IPMIC,NAMFIL(:12),2,2,0)
        ENDIF
        CALL LIBMIC(IPLIB,IPMIC,NAMFIL,NGRO,NBIS,ISONAM(1,IND1),
     1  ISONRF(1,IND1),IPISO(IND1),MASKI(IND1),IMPX,NGF0,NGFR0,NDEL0,
     2  NBESP0)
        IF(NAMFIL.NE.NAMLCM) CALL LCMCL(IPMIC,1)
        NBESP=MAX(NBESP,NBESP0)
      ENDIF
      IF(LTEST) THEN
        NGF=MIN(NGF,NGF0)
        IGRMAX=MAX(IGRMAX,NGFR0)
        IF(NDEL.EQ.0) THEN
          NDEL=NDEL0
        ELSE IF((NDEL0.NE.NDEL).AND.(NDEL0.NE.0)) THEN
          ILIB=ILLIB(IND1)
          IF(ILIB.GT.0) WRITE(6,210) (INAME(I,ILIB),I=1,4),NDEL0,NDEL
          NDEL=MAX(NDEL,NDEL0)
        ENDIF
*
*       COMPUTE THE TRANSPORT XS AND ADD COMPLEMENTARY INFORMATION.
        CALL LIBADD(IPLIB,NBIS,MASKI(IND1),IMPX,NGRO,NL,ITRANC,NDEPL,
     1  ISONAM(1,IND1),ISONRF(1,IND1),IPISO(IND1),NIR(IND1),GIR(IND1))
      ENDIF
*
      IND1=IND1+NBIS
      IF(IND1.LE.NBISO) GO TO 50
      RETURN
*
  200 FORMAT(8HLIBLIC: ,3A4,34H IS A DUPLICATE ISOTOPE/MATERIAL N,
     1 4HAME.)
  210 FORMAT(/51H LIBLIC: INVALID NB OF PRECURSOR GROUPS IN LIBRARY ,
     1 4A4,8H (NDEL0=,I3,6H NDEL=,I3,2H).)
      END