summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBA2G.f
blob: 0969f8178a0feae8779686a9cdae77e16794bcea (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
*DECK LIBA2G
      SUBROUTINE LIBA2G (NAMFIL,NGRO,IPENER)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover energy group information from an APOLIB2 library.
*
*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
* NAMFIL  name of the APOLIB2 file.
*
*Parameters: output
* NGRO    number of energy groups.
* IPENER  pointer of the energy mesh limit array.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  Subroutine arguments
*----
      INTEGER NGRO
      CHARACTER NAMFIL*(*)
      TYPE(C_PTR) IPENER
*----
*  Local variables
*----
      PARAMETER (IACTO=2,IACTC=1,ILIBDA=4)
      EXTERNAL LIBA21
      INTEGER ISFICH(3)
      CHARACTER TEXT80*80,NOMOBJ*20,TYPOBJ*8,TYPSEG*8,HSMG*131
*----
*  Allocatable arrays
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: VINTE,ITCARO
      INTEGER, POINTER, DIMENSION(:) :: ITSEGM
      REAL, POINTER, DIMENSION(:) :: RTSEGM
      TYPE(C_PTR) ICHDIM_PTR,ICHTYP_PTR,ICHDKL_PTR,TSEGM_PTR
      INTEGER, POINTER, DIMENSION(:) :: ICHDIM,ICHTYP,ICHDKL
      REAL, POINTER, DIMENSION(:) :: ENERG
*
      INTEGER TKCARO(31)
      SAVE TKCARO
      DATA TKCARO /
     &   0,   1,   2,   3,  4,   5,  6,  30,   7,  -8,
     &   9, -10,  11, -12, 13, -14, 15,  16, -17,  18,
     & -19,  20, -21,  22, 23, -24, 25, -26,  27, -28,
     &  29   /
*
      CALL AEXTPA(NAMFIL,ISFICH)
      IADRES=ISFICH(1)
      NBOBJ=ISFICH(2)
      LBLOC=ISFICH(3)
      IUNIT=KDROPN(NAMFIL,IACTO,ILIBDA,LBLOC)
      IF(IUNIT.LE.0) THEN
         WRITE(HSMG,'(26HLIBA2G: APOLLO-2 LIBRARY '',A16,9H'' CANNOT ,
     >   29HBE OPENED BY KDROPN (ERRCODE=,I2,2H).)') NAMFIL,IUNIT
         CALL XABORT(HSMG)
      ENDIF
      ALLOCATE(VINTE(2*NBOBJ))
      CALL AEXDIR(IUNIT,LBLOC,VINTE,IADRES,2*NBOBJ)
      IDKSV=1-TKCARO(12)
      IDKNO=1-TKCARO(14)
      IDKTY=1-TKCARO(21)
      IDKDS=1-TKCARO(10)
      IDKTS=1-TKCARO(23)
      IDKNS=TKCARO(2)+1
      IDKLS=TKCARO(8)
      DO 150 IOBJ=3,NBOBJ
         IDKOBJ=VINTE(2*IOBJ-1)
         LGSEG=VINTE(2*IOBJ)+1
         ALLOCATE(ITCARO(LGSEG))
         CALL AEXDIR(IUNIT,LBLOC,ITCARO,IDKOBJ,LGSEG)
         IDK=ITCARO(IDKSV)
         CALL AEXCPC(IDK,80,ITCARO,TEXT80)
*
         IDK=ITCARO(IDKNO)
         CALL AEXCPC(IDK,20,ITCARO,NOMOBJ)
         IDK=ITCARO(IDKTY)
         CALL AEXCPC(IDK,8,ITCARO,TYPOBJ)
         IF(TYPOBJ.EQ.'APOLIB') THEN
            JDKDS=ITCARO(IDKDS)
            JDKTS=ITCARO(IDKTS)
            NS=ITCARO(IDKNS)
            DO 140 IS=1,NS
              IDK=JDKTS+8*(IS-1)
              CALL AEXCPC(IDK,8,ITCARO,TYPSEG)
              IF(TYPSEG.EQ.'PMAIL') THEN
                LNGS=ITCARO(IDKLS+IS)
                JDKS=ITCARO(JDKDS+IS)
                TSEGM_PTR=LCMARA(LNGS+1)
                CALL C_F_POINTER(TSEGM_PTR,ITSEGM,(/ LNGS+1 /))
                CALL C_F_POINTER(TSEGM_PTR,RTSEGM,(/ LNGS+1 /))
                CALL AEXDIR(IUNIT,LBLOC,ITSEGM,JDKS,LNGS+1)
                CALL AEXTRT(LIBA21,TYPSEG,NBRTYP,ICHDIM_PTR,ICHTYP_PTR,
     1          ICHDKL_PTR)
                CALL C_F_POINTER(ICHDIM_PTR,ICHDIM,(/ NBRTYP /))
                CALL C_F_POINTER(ICHTYP_PTR,ICHTYP,(/ NBRTYP /))
                CALL C_F_POINTER(ICHDKL_PTR,ICHDKL,(/ NBRTYP /))
                CALL AEXGNV(3,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV)
                NGRO=NV-1
                IPENER=LCMARA(NGRO+1)
                CALL C_F_POINTER(IPENER,ENERG,(/ NGRO+1 /))
                DO 130 IG=1,NV
                ENERG(IG)=RTSEGM(IDK+IG-1)*1.0E6
  130           CONTINUE
                CALL LCMDRD(ICHDIM_PTR)
                CALL LCMDRD(ICHTYP_PTR)
                CALL LCMDRD(ICHDKL_PTR)
                CALL LCMDRD(TSEGM_PTR)
                DEALLOCATE(ITCARO)
                GO TO 160
              ENDIF
  140       CONTINUE
         ENDIF
         DEALLOCATE(ITCARO)
  150 CONTINUE
      CALL XABORT('LIBA2G: NO GROUP STRUCTURE AVAILABLE')
*
  160 IERR=KDRCLS(IUNIT,IACTC)
      IF(IERR.LT.0) THEN
         WRITE(HSMG,'(26HLIBA2G: APOLLO-2 LIBRARY '',A16,9H'' CANNOT ,
     >   29HBE CLOSED BY KDRCLS (ERRCODE=,I2,2H).)') NAMFIL,IERR
         CALL XABORT(HSMG)
      ENDIF
      DEALLOCATE(VINTE)
      RETURN
      END