summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBWTE.f
blob: ffe4decc03fcfeef7ac4b85815acee26ab567009 (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
*DECK LIBWTE
      SUBROUTINE LIBWTE(IACT,ITXS,NGROUP,NGTHER,NTMP,NF,TERP,SCAT,
     >                  SIGS,XSNG,SIGF,XSFI,TRAN,TMPXS,TMPSC)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Perform temperature interpolation for WIMS-AECL or WIMS-D4 XS.
*
*Copyright:
* Copyright (C) 1997 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
* IACT    Action:
*         = 1 initialize before adding;
*         = 2 only add.
* ITXS    type:
*         = 1 all cross sections;
*         = 2 only scattering.
* NGROUP  number of groups.
* NGTHER  number of thermal groups.
* NTMP    number of temperature.
* NF      flag for fissile.
* TERP    temperature coefficients.
*
*Parameters: input/output
* SCAT    complete scattering matrix           
*         SCAT(JG,IG) is from IG to JG.           
* SIGS    total scattering out of group.        
* XSNG    (n,g) XS.                               
* SIGF    nu*fission XS.
* XSFI    fission XS.                           
* TRAN    transport XS.                         
*
*Parameters: scratch
* TMPXS   temperature dependent vect XS.        
* TMPSC   temperature dependent scat XS.        
*
*Comments:
*   WIMS-AECL library parameters
*   MAXISO : max. nb. of iso = 246                
*   MLDEP  : maximum number of reaction per       
*            isotope = MAXISO +4
*   LPZ    : length of parameter array = 9   
*   LMASTB : length of mst tab = MAXISO+9         
*   LMASIN : length of mst idx = LMASTB-4         
*   LGENTB : length of gen tab = 6                
*   LGENIN : length of gen idx = LGENTB
*   MASTER : master index array                   
*   GENINX : general index array
*   NPZ    : list of main parameters              
*
*-----------------------------------------------------------------------
*
      IMPLICIT NONE
*----
* INTERFACE VARIABLES
*----
      INTEGER          IACT,ITXS,NGROUP,NGTHER,NTMP,NF
      DOUBLE PRECISION TERP(NTMP)
      REAL             SCAT(NGROUP,NGROUP),SIGS(NGROUP),
     1                 XSNG(NGROUP),SIGF(NGROUP),XSFI(NGROUP),
     2                 TRAN(NGROUP),TMPXS(NGROUP,5,NTMP),
     3                 TMPSC(NGROUP,NGROUP,NTMP)
*----
* LOCAL VARIABLES
*----
      INTEGER          IGF,ITM,IGD,NGD
      REAL             RTERP
*----
*  INITIALIZED IF REQUIRED
*----
      NGD=NGROUP-NGTHER+1
      IF(IACT.EQ.1) THEN
        IF(ITXS.EQ.1) THEN
          XSNG(NGD:NGD+NGTHER-1)=0.0
          TRAN(NGD:NGD+NGTHER-1)=0.0
          IF(NF.GT.1) THEN
            SIGF(NGD:NGD+NGTHER-1)=0.0
            XSFI(NGD:NGD+NGTHER-1)=0.0
          ENDIF
        ENDIF
        IF(ITXS.GE.1) THEN
          SIGS(NGD:NGD+NGTHER-1)=0.0
          DO 110 IGD=NGD,NGROUP
            SCAT(:NGROUP,IGD)=0.0
 110      CONTINUE
        ENDIF
      ENDIF
*----
*  INTERPOLATE STANDARD CROSS SECTIONS IN TEMPERATURE
*----
      IF(ITXS.EQ.1) THEN
        DO 120 ITM=1,NTMP
          RTERP=REAL(TERP(ITM))
          IF(RTERP.NE.0.0) THEN
            DO 121 IGD=NGD,NGROUP
              TRAN(IGD)=TRAN(IGD)+RTERP*TMPXS(IGD,1,ITM)
              XSNG(IGD)=XSNG(IGD)+RTERP*TMPXS(IGD,2,ITM)
              IF(NF.GT.1) THEN
                SIGF(IGD)=SIGF(IGD)+RTERP*TMPXS(IGD,3,ITM)
                XSFI(IGD)=XSFI(IGD)+RTERP*TMPXS(IGD,4,ITM)
              ENDIF
 121        CONTINUE
          ENDIF
 120    CONTINUE
      ENDIF
*----
*  INTERPOLATE SCATTERING CROSS SECTIONS IN TEMPERATURE
*----
      IF(ITXS.GE.1) THEN
        DO 130 ITM=1,NTMP
          RTERP=REAL(TERP(ITM))
          IF(RTERP.NE.0.0D0) THEN
            DO 131 IGD=NGD,NGROUP
              SIGS(IGD)=SIGS(IGD)+RTERP*TMPXS(IGD,5,ITM)
              DO 132 IGF=1,NGROUP
                SCAT(IGF,IGD)=SCAT(IGF,IGD)+RTERP*TMPSC(IGF,IGD,ITM)
 132          CONTINUE
 131        CONTINUE
          ENDIF
 130    CONTINUE
      ENDIF
      RETURN
      END