summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBWED.f
blob: 73245f1eaa4992111031fe3e9cd6bae30db6023a (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
*DECK LIBWED
      SUBROUTINE LIBWED(MAXR,NEL,NBESP,NDEPL,NDFI,NDFP,NHEAVY,NLIGHT,
     >                  NOTHER,NREAC,NPAR,ITNAM,ITZEA,MATNO,KPAX,BPAX,
     >                  HNADPL,IZEA,IDR,RER,RRD,KPAR,BPAR,YIELD)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Create /depletion/ records in /microlib/.
* 
*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
* MAXR    number of reaction types.
* NEL     number of isotopes on library.
* NBESP   number of energy-dependent fission yield matrices.
* NDEPL   number of depleting isotopes.
* NDFI    number of direct fissile isotopes.
* NDFP    number of direct fission product.
* NHEAVY  number of heavy isotopes (fissile isotopes + decay +
*         capture isotopes).
* NLIGHT  number of light isotopes (fission product + decay +
*         capture isotopes).
* NOTHER  number of other isotopes (depleting isotopes + decay +
*         capture isotopes).
* NREAC   maximum number of depletion reaction in the depletion chain.
* NPAR    maximum number of parent isopopes from decay and capture.
* ITNAM   reactive isotope names in chain.
* ITZEA   6-digit nuclide identifier:
*         atomic number z*10000 (digits) + mass number a*10 +
*         energy state (0 = ground state, 1 = first state, etc.).
* MATNO   reaction material index.
* KPAX    complete reaction type matrix.
* BPAX    complete branching ratio matrix.
*
*Parameters: output
* HNADPL  reactive isotope names in chain.
* IZEA    6-digit nuclide identifier:
*         atomic number z*10000 (digits) + mass number a*10 +
*         energy state (0 = ground state, 1 = first state, etc.).
* IDR     DEPLETE-REAC matrix (reaction identifiers).
* RER     DEPLETE-ENER matrix (MeV/reaction values).
* RRD     DEPLETE-DECA vector (decay constant values).
* KPAR    PRODUCE-REAC matrix (production identifiers).
* BPAR    PRODUCE-RATE matrix (branching ratios).
* YIELD   fission product yield matrix.
*
*-----------------------------------------------------------------------
*
      IMPLICIT NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER MAXR,NEL,NBESP,NDEPL,NDFI,NDFP,NHEAVY,NLIGHT,NOTHER,NREAC,
     > NPAR,ITNAM(3,NEL),ITZEA(NEL),MATNO(NEL),KPAX(NEL+MAXR,NEL),
     > HNADPL(3,NDEPL),IZEA(NDEPL),IDR(NREAC,NDEPL),KPAR(NPAR,NDEPL)
      REAL BPAX(NBESP,NEL+MAXR,NEL),RER(NREAC,NDEPL),RRD(NDEPL),
     > BPAR(NPAR,NDEPL),YIELD(NBESP,NDFI,NDFP)
*----
*  LOCAL VARIABLES
*----
      CHARACTER TEXT4*4
      INTEGER ITEXT4,ISOHEA,ISOLIG,ISOOTH,ISOSTA,ISO,ISONUM,IT,IEL,
     > IPAR,JEL,JSO,IFI,IFP
*----
*  INTERNAL PARAMETERS
*----
      INTEGER KDECAY,KFISSP,KFISSI,KHEAT
      PARAMETER (KDECAY=1,KFISSP=2,KFISSI=6,KHEAT=9)
*----
*  INITIALIZE DECAY CHAIN
*----
      TEXT4='    '
      READ(TEXT4,'(A4)') ITEXT4
      HNADPL(:3,:NDEPL)=ITEXT4
      IZEA(:NDEPL)=0
      IDR(:NREAC,:NDEPL)=0
      KPAR(:NPAR,:NDEPL)=0
      RER(:NREAC,:NDEPL)=0.0
      RRD(:NDEPL)=0.0
      BPAR(:NPAR,:NDEPL)=0.0
      YIELD(:NBESP,:NDFI,:NDFP)=0.0
*----
*  RENUMBER ISOTOPES AND SAVE IDR, RER AND RRD
*----
      ISOHEA=0
      ISOLIG=ISOHEA+NHEAVY
      ISOOTH=ISOLIG+NLIGHT
      ISOSTA=ISOOTH+NOTHER
      DO 100 ISO=NEL,1,-1
        ISONUM=0
        IF(MATNO(ISO).EQ.-KFISSI) THEN
          ISOHEA=ISOHEA+1
          ISONUM=ISOHEA
        ELSE IF(MATNO(ISO).EQ.-KFISSP) THEN
          ISOLIG=ISOLIG+1
          ISONUM=ISOLIG
        ELSE IF(MATNO(ISO).EQ.-KDECAY) THEN
          ISOOTH=ISOOTH+1
          ISONUM=ISOOTH
        ELSE IF(MATNO(ISO).EQ.-KHEAT) THEN
          ISOSTA=ISOSTA+1
          ISONUM=ISOSTA
        ENDIF
        IF(ISONUM.GT.0) THEN
          MATNO(ISO)=ISONUM
          HNADPL(1,ISONUM)=ITNAM(1,ISO)
          HNADPL(2,ISONUM)=ITNAM(2,ISO)
          HNADPL(3,ISONUM)=ITNAM(3,ISO)
          IZEA(ISONUM)=ITZEA(ISO)
          IDR(1,ISONUM)=KPAX(NEL+1,ISO)
          RRD(ISONUM)=BPAX(1,NEL+1,ISO)
          DO 101 IT=2,NREAC
            IDR(IT,ISONUM)=KPAX(NEL+IT,ISO)
            RER(IT,ISONUM)=BPAX(1,NEL+IT,ISO)
 101      CONTINUE
        ENDIF
 100  CONTINUE
*----
*  CREATE KPAR AND BPAR MATRIX
*----
      DO 110 IEL=1,NEL
        ISO=MATNO(IEL)
        IF(ISO.GT.0) THEN
          IPAR=0
          DO 111 JEL=1,NEL
            JSO=MATNO(JEL)
            IF(JSO.GT.0) THEN
              IF((KPAX(IEL,JEL).NE.0).AND.(KPAX(IEL,JEL).NE.KFISSP))
     >        THEN
                IPAR=IPAR+1
                IF(IPAR.GT.NPAR)
     >            CALL XABORT('LIBWED: TOO MANY DECAY PARENTS')
                KPAR(IPAR,ISO)=JSO*100+KPAX(IEL,JEL)
                BPAR(IPAR,ISO)=BPAX(1,IEL,JEL)
              ENDIF
            ENDIF
 111      CONTINUE
        ENDIF
 110  CONTINUE
*----
*  CREATE YIELD MATRIX
*----
      DO 120 IEL=1,NEL
        ISO=MATNO(IEL)
        IF(ISO.GT.0) THEN
          IF(MOD(IDR(KFISSP,ISO),100).EQ.4) THEN
            IFI=IDR(KFISSP,ISO)/100
            IF(IFI.EQ.0) GO TO 120
            IF(IFI.GT.NDFI)
     >        CALL XABORT('LIBWED: INVALID FISSILE ISOTOPE NUMBER')
            DO 121 JEL=1,NEL
              JSO=MATNO(JEL)
              IF(JSO.GT.0) THEN
                IF(MOD(IDR(KFISSP,JSO),100).EQ.2) THEN
                  GO TO 121
                ELSE IF(MOD(IDR(KFISSP,JSO),100).EQ.5) THEN
                  IFP=IDR(KFISSP,JSO)/100
                  IF(IFP.GT.NDFP) CALL XABORT('LIBWED: INVALID FI'//
     >               'SSION PRODUCT NUMBER')
                  IF(KPAX(JEL,IEL) .EQ. KFISSP) THEN
                    YIELD(:,IFI,IFP)=BPAX(:,JEL,IEL)
                  ENDIF
                ENDIF
              ENDIF
 121        CONTINUE
          ENDIF
        ENDIF
 120  CONTINUE
*----
*  RETURN
*----
      RETURN
      END