summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBWRG.f
blob: ed09303a4ef7e294545100da32f9519fc4d0907a (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
*DECK LIBWRG
      SUBROUTINE LIBWRG(IUNIT,NTYP,NGR,NRTOT,MAXTEM,MAXDIL,NSRES,RID,
     >                  NTM,NDI,RTMP,RDIL,RESI)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Read resonance information from WIMS-D4 library.
*
*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
* IUNIT   WIMS-D4 read unit.                    
* NTYP    number of resonance tables per isotopes.
* NGR     number of resonance groups.
* NRTOT   number of resonance sets.
* MAXTEM  max nb temperature.
* MAXDIL  max nb dilutions.
* NSRES   nb of resonance set.
* RID     resonance id.
* NTM     number of temperatures.
* NDI     number of dilutions.                  
* RTMP    resonance temperature.
* RDIL    resonance dilution.
* RESI    resonance integrals.
*
*-----------------------------------------------------------------------
*
      IMPLICIT NONE
*----
* PARAMETERS
*----
      INTEGER    IOUT
      PARAMETER (IOUT=6)
*----
* INTERFACE PARAMETERS
*----
      INTEGER    IUNIT,NTYP,NGR,NRTOT,MAXTEM,MAXDIL
      INTEGER    NTM(NTYP,NRTOT,NGR),NDI(NTYP,NRTOT,NGR)
*
      REAL       RID(NRTOT),RTMP(MAXTEM,NTYP,NRTOT,NGR),
     1           RDIL(MAXDIL,NTYP,NRTOT,NGR),
     2           RESI(MAXDIL,MAXTEM,NTYP,NRTOT,NGR)
*----
* LOCAL VARIABLES
*----
      INTEGER    IGR,NSRES,ISRES,IPREV,IRS,M1,M2,IT,ID,ISR,ITYP,
     1           NTIS
      REAL       XIDR,ENDR
*----
* ALLOCATABLE ARRAYS
*----
      REAL, ALLOCATABLE, DIMENSION(:) :: TMPT,DILT
      REAL, ALLOCATABLE, DIMENSION(:,:) :: REST
*----
*  SCRATCH STORAGE ALLOCATION
*     TMPT   : TEMPERATURE
*     DILT   : DILUTION
*     REST   : RESONANCE INTEGRALS
*----
      ALLOCATE(TMPT(MAXTEM),DILT(MAXDIL),REST(MAXDIL,MAXTEM))
*----
*  SCAN OVER RESONANCE GROUPS
*----
      NSRES=0
      ISRES=0
      DO 100 IGR=1,NGR
        IPREV=0
*----
*  SCAN OVER RESONANCE SETS + 1
*  AND READ RESONANCE INFO
*----
        DO 110 IRS=1,NTYP*NRTOT+1
          READ(IUNIT) XIDR,M1,M2,
     >     (TMPT(IT),IT=1,M1),(DILT(ID),ID=1,M2),
     >    ((REST(ID,IT),ID=1,M2),IT=1,M1)
          IF(XIDR.EQ.0.0) GO TO 115
          IF((M1.EQ.0).AND.(M2.EQ.0)) GO TO 110
          DO 120 ISR=1,NSRES
            IF(XIDR.EQ.RID(ISR)) THEN
              ISRES=ISR
              GO TO 125
            ENDIF
 120      CONTINUE
          NSRES=NSRES+1
          IF(NSRES.GT.NRTOT) THEN
            CALL XABORT('LIBWRG: TO MANY RESONANCE SET')
          ENDIF
          ISRES=NSRES
          IPREV=0
          RID(ISRES)=XIDR
 125      CONTINUE
          IF(ISRES.NE.IPREV) THEN
            ITYP=1
            IPREV=ISRES
          ELSE IF((ISRES.EQ.IPREV).AND.(ITYP.EQ.1)) THEN
            ITYP=2
          ELSE IF((ISRES.EQ.IPREV).AND.(ITYP.EQ.2)) THEN
            ITYP=3
            IPREV=0
          ENDIF
          NTIS=NTM(ITYP,ISRES,IGR)
          IF(NTIS.GT.0) THEN
            WRITE(IOUT,9000) IGR,ISRES,ITYP,XIDR
            CALL XABORT('LIBWRG: DUPLICATE RESONANCE SET')
          ENDIF
*----
*  SAVE RESONANCE INFORMATION FOR THIS SET
*----
          NTM(ITYP,ISRES,IGR)=M1
          NDI(ITYP,ISRES,IGR)=M2
          DO 130 IT=1,M1
            RTMP(IT,ITYP,ISRES,IGR)=TMPT(IT)
 130      CONTINUE
          DO 131 ID=1,M2
            RDIL(ID,ITYP,ISRES,IGR)=DILT(ID)
 131      CONTINUE
          DO 140 IT=1,M1
            DO 141 ID=1,M2
              RESI(ID,IT,ITYP,ISRES,IGR)=REST(ID,IT)
 141        CONTINUE
 140      CONTINUE
 110    CONTINUE
 115    CONTINUE
        IF(NTYP.EQ.2) READ(IUNIT) ENDR
 100  CONTINUE
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(REST,DILT,TMPT)
      RETURN
*----
*  FORMAT
*----
 9000 FORMAT(' LIBWRG ERROR - WIMS-D4 DUPLICATE RESONANCE SET'/
     >       ' RESONANCE GROUP = ',I10/
     >       '   RESONANCE SET = ',I10/
     >       '   INTEGRAL TYPE = ',I10/
     >       '    RESONANCE ID = ',F20.5)
      END