summaryrefslogtreecommitdiff
path: root/Dragon/src/AXGGEO.f
blob: 77aaefd111a1b262710a6c73f235aca2f7d92aae (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 AXGGEO
      SUBROUTINE AXGGEO(IPGEOM,IPTRKM,IPRINT,GEONAM)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Generate temporary tracking file to be used by PSPTRK.
*
*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): R. Roy and G. Marleau
*
*Parameters: input
* IPGEOM  geometry data structures pointer
* IPTRKM  tracking data structures pointer         
* IPRINT  print level                              
* GEONAM  geometry name
*
*----
*
      USE          GANLIB
      IMPLICIT     NONE
      INTEGER      IOUT,NSTATE
      CHARACTER    NAMSBR*6
      PARAMETER   (IOUT=6,NSTATE=40,
     >             NAMSBR='AXGGEO')
*----
*  ROUTINE PARAMETERS
*----
      TYPE(C_PTR)  IPGEOM,IPTRKM
      INTEGER      IPRINT
      CHARACTER    GEONAM*12
*----
*  LOCAL PARAMETERS
*---- 
      INTEGER     ISTATE(NSTATE)
      INTEGER     ITYPEG,ITGEO
      CHARACTER   HSIGN*12
      INTEGER     NV,NS,NSOUT,NREG,NUNK,ICODE(6)
      REAL        EXTKOP(NSTATE)
      INTEGER     ITROP,MAXMIX,IREG,ISYMM
      INTEGER     IUEXP,KDROPN,KDRCLS,IRC 
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: KEYMRG,MATALB,MATMRG
      REAL, ALLOCATABLE, DIMENSION(:) :: VOLSUR,VOLMRG
*----
*  STORE SIGNATURE AND TRACK TYPE ON IPTRKM
*----
      HSIGN='L_TRACK     '
      CALL LCMPTC(IPTRKM,'SIGNATURE',12,HSIGN)
      HSIGN='EXCELL      '
      CALL LCMPTC(IPTRKM,'TRACK-TYPE',12,HSIGN)
*----
*  ANALYZE GEOMETRY
*----
      ISTATE(:NSTATE)=0
      CALL LCMGET(IPGEOM,'STATE-VECTOR',ISTATE)
      ITYPEG= ISTATE(1)
      ITROP = 0
      IF(ITYPEG .EQ. 3 .OR. ITYPEG .EQ. 6 ) THEN
        ITGEO= 1
      ELSE IF(ITYPEG .EQ.  8 .OR. ITYPEG .EQ.  9 .OR.
     >        ITYPEG .EQ. 24 .OR. ITYPEG .EQ. 25      ) THEN
        ITGEO= 2
      ELSE IF(ITYPEG .EQ.  5 .OR. ITYPEG .EQ.  7 .OR.
     >        ITYPEG .EQ. 20 .OR. ITYPEG .EQ. 21 .OR.
     >        ITYPEG .EQ. 22 .OR. ITYPEG .EQ. 23      ) THEN
        ITGEO= 3
      ELSE
        ITGEO= 0
      ENDIF
      IF(ISTATE(13) .GE. 1) THEN
*----
*  CLUSTER GEOMETRY
*----     
        ISYMM=1
        CALL AXGXCW(IPGEOM ,IPTRKM,IPRINT,GEONAM,ISYMM )
        ITROP=3
      ELSE IF(ITGEO .EQ. 2 ) THEN
*----
*  HEXAGONAL 2D GEOMETRIES
*----
*          CALL AXGXHX(IPGEOM ,IPTRKM,IPRINT,GEONAM)
        ITROP=2
      ELSE IF(ITGEO .EQ. 3 ) THEN
*----
*  CARTESIAN 2D/3D ASSEMBLIES
*  CALL XELPRP TO GET GEOMETRY DIMENSIONING INFORMATION
*----
        CALL AXGXEL(IPGEOM ,IPTRKM,IPRINT,GEONAM)
        ITROP=1
      ELSE
        CALL XABORT(NAMSBR//': INVALID TYPE OF GEOMETRY')
      ENDIF
      CALL LCMGET(IPTRKM,'ICODE       ',ICODE)
      CALL LCMSIX(IPTRKM,'EXCELL      ',1)
      ISTATE(:NSTATE)=0
      CALL LCMGET(IPTRKM,'STATE-VECTOR',ISTATE) 
      NV=ISTATE(3)
      NS=ISTATE(2)
      NUNK=NV+NS+1
      ALLOCATE(KEYMRG(NUNK),MATALB(NUNK),VOLSUR(NUNK))
      CALL LCMGET(IPTRKM,'KEYMRG      ',KEYMRG)
      CALL LCMGET(IPTRKM,'MATALB      ',MATALB)
      CALL LCMGET(IPTRKM,'VOLSUR      ',VOLSUR)
      CALL LCMSIX(IPTRKM,'EXCELL      ',2)
      ALLOCATE(MATMRG(NUNK),VOLMRG(NUNK))
      CALL XELCMP(NS    ,NV    ,
     >            VOLSUR,MATALB,KEYMRG,
     >            NSOUT ,NREG  ,VOLMRG,MATMRG,
     >            ITGEO ,ICODE )
      MAXMIX=0
      DO 100 IREG=1,NREG
        KEYMRG(IREG+NSOUT+1)= IREG
        MAXMIX=MAX(MAXMIX,MATMRG(IREG+NSOUT+1))
 100  CONTINUE
      CALL LCMPUT(IPTRKM,'MATCOD',NREG,1,MATMRG(NSOUT+2))
      CALL LCMPUT(IPTRKM,'VOLUME',NREG,2,VOLMRG(NSOUT+2))
      CALL LCMPUT(IPTRKM,'KEYFLX',NREG,1,KEYMRG(NSOUT+2))
      EXTKOP(:NSTATE)=0.0
      CALL LCMPUT(IPTRKM,'EXCELTRACKOP',NSTATE,2,EXTKOP)
      ISTATE(:NSTATE)=0
      ISTATE(1)=NREG
      ISTATE(2)=NREG
      ISTATE(4)=MAXMIX
      ISTATE(5)=NSOUT
      ISTATE(7)=ITROP
      ISTATE(8)=-1
      CALL LCMPUT(IPTRKM,'STATE-VECTOR',NSTATE,1,ISTATE)
      DEALLOCATE(VOLMRG,MATMRG,VOLSUR,MATALB,KEYMRG)
*----
*  IF IPRINT >= 20
*  EXPORT TEMPORARY TRACKING FILE
*----
      IF(IPRINT .GE. 10) THEN 
        IUEXP=KDROPN('AXGGEOEXPTRK',0,3,0,0)
        CALL LCMEXP(IPTRKM,IPRINT,IUEXP,2,1)
        IRC=KDRCLS(IUEXP,1)
      ENDIF
      RETURN
      END