summaryrefslogtreecommitdiff
path: root/Dragon/src/XELTRP.f
blob: ae1f6ffe2cb730df8e1c562f06e9fbb4042e4ac8 (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
*DECK XELTRP
      SUBROUTINE XELTRP( IPGEOM,  NGIDL,   NDIM, NGEOME, L1CELL,
     >                   NTOTCO, NEXTGE,  MAXRO,   IPRT,  CELLG,
     >                    NSURO,  NVOLO, IDLDIM, IDLGEO, KEYTRN,
     >                    MAXDO,  MINDO, ICORDO, RMESHO, IDLREM,
     >                   INDEXO,  VOLSO, MATGEO)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Prepare tracking by producing the required numbering and calculate 
* volumes and surfaces. 
*
*Copyright:
* Copyright (C) 1987 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
*
*Parameters: input
* IPGEOM  pointer to the geometry (l_geom).            
* NGIDL   lenght of geometric numbering.              
* NDIM    number of dimensions (2 or 3).                   
* NGEOME  number of geometries.                            
* L1CELL  to indicate if there is just 1 cell.        
* NEXTGE  rectangular(0)/circular(1) boundary.        
* NTOTCO  tot number of cylinders in all geometries.  
* MAXRO   max number of real mesh values in RMESHO. 
* IPRT    intermediate printing level for output.     
* CELLG   to keep geomety names.                      
* NSURO   number of surfaces of each geometry.             
* NVOLO   number of zones of each geometry.                
* IDLDIM  position of each geometry in cylinder numbering. 
* IDLGEO  position of each geometry in the            
*         geometry numbering scheme.       
* KEYTRN  turn number of each geometry.                    
*
*Parameters: input
* MAXDO   max index values for all axes (rect/cyl).    
* MINDO   min index values for all axes (rect/cyl).    
* ICORDO  principal axes direction (X/Y/Z) for meshes. 
* RMESHO  real mesh values (rect/cyl).                 
* IDLREM  position of mesh values per geometry.        
* INDEXO  index for search in RMESHO.                
* VOLSO   volumes & surfaces for each geometry.        
* MATGEO  material numbers corresponding to geometries.     
*
*-----------------------------------------------------------------------
*
      USE               GANLIB
      IMPLICIT          NONE
*
      TYPE(C_PTR)       IPGEOM 
      INTEGER           NGIDL, NDIM, NGEOME, NTOTCO, NEXTGE, MAXRO, IPRT
      INTEGER           MAXDO(NTOTCO), MINDO(NTOTCO),   ICORDO(NTOTCO),
     >                  MATGEO(NGIDL), CELLG(3*NGEOME),
     >                  NSURO(NGEOME),  NVOLO(NGEOME), IDLDIM(NGEOME),
     >                  IDLGEO(NGEOME), IDLREM(NGEOME), KEYTRN(NGEOME),
     >                  INDEXO(4,NGIDL)
      REAL              RMESHO(MAXRO), VOLSO(NGIDL)
*
      INTEGER           NSTATE, IOUT, MAXTUR
      PARAMETER       ( NSTATE=40, IOUT=6, MAXTUR=12 )
      INTEGER           ISTATE(NSTATE)
      INTEGER           NTOTRM, NGEO, NTC, ITURN, NC, NCPC, NVSP1,
     >                  NO, NSYM, MAXC, KELRNG, KELMRG, KELSYM
      LOGICAL           L1CELL
      CHARACTER         CNAMEG*12, CTURN(2*MAXTUR)*2
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: KEYSYM
*----
*  DATA STATEMENTS
*----
      DATA       CTURN / ' A',' B',' C',' D',' E',' F',' G',' H',
     >                   ' I',' J',' K',' L',
     >                   '-A','-B','-C','-D','-E','-F','-G','-H',
     >                   '-I','-J','-K','-L' /
*----
*  SCRATCH STORAGE ALLOCATION
*   KEYSYM: symmetry key giving the symmetric surface
*----
      ALLOCATE(KEYSYM(NGIDL))
*
*     LOOP OVER ALL GEOMETRIES
      NTOTRM= 0
      DO 90 NGEO= 1, NGEOME
         NTC= IDLDIM(NGEO)+1
         ITURN= KEYTRN(NGEO)
         WRITE( CNAMEG( 1: 4),'(A4)') CELLG(3*NGEO-2)
         WRITE( CNAMEG( 5: 8),'(A4)') CELLG(3*NGEO-1)
         WRITE( CNAMEG( 9:12),'(A4)') CELLG(3*NGEO  )
         IF( .NOT.L1CELL ) CALL LCMSIX(IPGEOM, CNAMEG, 1)
         ISTATE(:NSTATE)=0
         CALL LCMGET(IPGEOM, 'STATE-VECTOR', ISTATE)
         IF( ISTATE(1).GE.20.OR.ISTATE(1).EQ.3.OR.ISTATE(1).EQ.6 )THEN
            NC= 1
         ELSE
            NC= 0
         ENDIF
         IF( IPRT.GT.1 )THEN
            WRITE(IOUT,'(1H )')
            IF    ( NC.EQ.0 )THEN
              WRITE(IOUT,'(/27H NUMBERING PHYSICAL CELL # ,I8/6H  >>> ,
     >                     A12,6H /ROT ,A2,13H GEOMETRY <<<,
     >                     13H    (WITH  NO,11H CYLINDER ) )')
     >                                 NGEO,        CNAMEG,CTURN(ITURN)
            ELSEIF( NC.EQ.1 )THEN
              WRITE(IOUT,'(/27H NUMBERING PHYSICAL CELL # ,I8/6H  >>> ,
     >                     A12,6H /ROT ,A2,13H GEOMETRY <<<,
     >                     13H    (WITH ONE,11H CYLINDER ) )')
     >                                 NGEO,        CNAMEG,CTURN(ITURN)
            ELSE
              WRITE(IOUT,'(/27H NUMBERING PHYSICAL CELL # ,I8/6H  >>> ,
     >                     A12,6H /ROT ,A2,13H GEOMETRY <<<,
     >                     10H    (WITH ,I3,11H CYLINDERS) )')
     >                               NGEO, CNAMEG, CTURN(ITURN), NC
            ENDIF
         ENDIF
         NCPC  = NC + 3
         NVSP1 = NVOLO(NGEO) - NSURO(NGEO) + 1
*
*        LOOKING TO THE GEOMETRY
         CALL XELGRD( IPGEOM, IPRT, NDIM, NEXTGE, ITURN,
     >                MAXRO-NTOTRM, MAXC, RMESHO(NTOTRM+1),
     >                MINDO(NTC), MAXDO(NTC), ICORDO(NTC))
*
*        RENUMBER
         NO=   KELRNG(IPRT, NDIM, NEXTGE, NCPC,
     >                MINDO(NTC), MAXDO(NTC), ICORDO(NTC),
     >                NSURO(NGEO), NVOLO(NGEO), IDLGEO(NGEO),
     >                MAXC, RMESHO(NTOTRM+1), MATGEO, VOLSO, INDEXO)
*
*        MERGE
         NO= KELMRG(IPGEOM,NSURO(NGEO),NVOLO(NGEO),IDLGEO(NGEO),MATGEO)
         IF( NO.NE.NVSP1 )THEN
            IF( IPRT.GT.1 )THEN
               WRITE(IOUT,'(1H )')
               WRITE(IOUT,'(22H     MERGE INTO   >>> ,I8,
     >                  13H  ZONES   <<<)')
     >                       NO+NSURO(NGEO)-1
            ENDIF
         ENDIF
*
*        ESTABLISH NECESSARY SYMMETRIES
         NSYM= KELSYM( IPRT, NDIM, MAXDO(NTC), NSURO(NGEO), NVOLO(NGEO),
     >                 IDLGEO(NGEO), INDEXO, MATGEO,KEYSYM)
*
*        COMPUTE VOLUMES
         CALL XELVOL( IPRT, NDIM, NEXTGE, NCPC,
     >                MINDO(NTC), MAXDO(NTC), ICORDO(NTC),
     >                NSURO(NGEO), NVOLO(NGEO), IDLGEO(NGEO),INDEXO,
     >                MAXC, RMESHO(NTOTRM+1), MATGEO, VOLSO )
         IDLREM(NGEO)= NTOTRM
         NTOTRM= NTOTRM + MAXC
         IF( .NOT.L1CELL ) CALL LCMSIX(IPGEOM, ' ', 2 )
   90 CONTINUE
      IF( NTOTRM.GT.MAXRO )THEN
         CALL XABORT( 'XELTRP : INCREASE MAXREM => SEE DEVELOPPER')
      ENDIF
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(KEYSYM)
*
      RETURN
      END