summaryrefslogtreecommitdiff
path: root/Dragon/src/XELDCL.f
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/XELDCL.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/XELDCL.f')
-rw-r--r--Dragon/src/XELDCL.f603
1 files changed, 603 insertions, 0 deletions
diff --git a/Dragon/src/XELDCL.f b/Dragon/src/XELDCL.f
new file mode 100644
index 0000000..882ba37
--- /dev/null
+++ b/Dragon/src/XELDCL.f
@@ -0,0 +1,603 @@
+*DECK XELDCL
+ SUBROUTINE XELDCL( IPGEOM, GEONAM, NDIM, MAXGRI, LCLSYM, NBLOCK,
+ > NTYPO, LL1, LL2, IPRT, NTOTCO, MAXRO ,
+ > NGEOME, NTYP, NGIDL, NTIDL, NUNKO, CELLG,
+ > NSURO, NVOLO, IDLDIM, IDLGEO, KEYTRN, KEYGEO,
+ > IDLTYP, KEYTYP, MRGCEL, IDLBLK)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Associate all blocks of a problem to their block types and generate
+* almost all useful integer values that will describe the problem.
+*
+*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).
+* GEONAM geometry name.
+* NDIM number of dimensions.
+* MAXGRI number of grid cell in X/Y/Z directions.
+* LCLSYM symmetry flags (0: no,-1/+1: syme,,-2/+2: ssym).
+* NBLOCK number of blocks.
+* NTYPO old number of types.
+* LL1 upper diag switch.
+* LL2 lower diag switch.
+* IPRT intermediate printing level for output.
+*
+*Parameters: output
+* NTOTCO tot number of cylinders in all geometries.
+* MAXRO max number of words to stock meshes.
+* NGEOME number of geometries.
+* NTYP new number of types.
+* NGIDL lenght of geometric numbering.
+* NTIDL lenght of type numbering.
+* NUNKO old number of unknowns.
+* CELLG to keep cell geometry names.
+* NSURO number of surfaces of each geometry.
+* NVOLO number of zones of each geometry.
+* IDLDIM position of each geoemtry in cylinders numbering.
+* IDLGEO position of each geometry in the
+* geometry numbering scheme.
+* KEYTRN turn key for each block.
+* KEYGEO geometric key for each type.
+* IDLTYP position of each type in numbering scheme.
+* KEYTYP type key for each block.
+* MRGCEL merging key of each block.
+* IDLBLK position of each block in numbering scheme.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPGEOM
+ INTEGER NDIM, NBLOCK, NTYPO, IPRT, NTOTCO, MAXRO,
+ > NGEOME, NTYP, NGIDL, NTIDL, NUNKO
+ CHARACTER GEONAM*12
+ INTEGER MAXGRI(3),LCLSYM(3),CELLG(3*NBLOCK),
+ > NSURO(NBLOCK),NVOLO(NBLOCK),IDLDIM(NBLOCK),
+ > IDLGEO(NBLOCK),KEYTRN(NBLOCK),KEYGEO(NBLOCK),
+ > IDLTYP(NBLOCK),KEYTYP(NBLOCK),MRGCEL(NBLOCK),
+ > IDLBLK(NBLOCK)
+ LOGICAL LL1, LL2
+*----
+* EXTERNAL FUNCTIONS
+*----
+ CHARACTER*2 AXGTRN
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER IOUT,NSTATE,MAXTUR
+ CHARACTER NAMSBR*6
+ PARAMETER (IOUT=6,NSTATE=40,MAXTUR=12,NAMSBR='XELDCL')
+*----
+* LOCAL PARAMETERS
+*----
+ CHARACTER GEOC1*12,GEOC2*12,BLANC*8,CPLAN*8,GEOCV*12
+ INTEGER MINGRI(3),MEDGRI(3),ISTATE(NSTATE)
+ LOGICAL LLSYM
+ INTEGER IKG
+ INTEGER IBLK, I3, ISUB2, ITYP, JTYP, IX, IY, IZ,
+ > NMERG1, NMERG2, NMERG3, IOFF, IOF1, IOF2,
+ > IMERG1, NNCYL, NNSUR, NNVOL, NXC, NXM, IGEO,
+ > IB1, IB2, IC1, IC2, IT1, IT2, IR, NLINP,
+ > NTYP2, IOLTYP, NPROB, IDLPRB, IP, MAXREM
+ INTEGER KMESH,NXYZ,ITC
+ INTEGER IOT1,IOT2
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: ITGEOM,CELLT
+*----
+* DATA STATEMENTS
+*----
+ DATA BLANC / ' ' /
+*----
+* SCRATCH STORAGE ALLOCATION
+* ITGEOM: turn by cell types
+* CELLT : cell type names
+*----
+ ALLOCATE(ITGEOM(NBLOCK),CELLT(3*NTYPO))
+*----
+* INITIALIZE BLOCK INFORMATION
+*----
+ DO 10 IBLK= 1, NBLOCK
+ NSURO(IBLK)= 0
+ NVOLO(IBLK)= 0
+ IDLGEO(IBLK)= 0
+ KEYGEO(IBLK)= 0
+ IDLTYP(IBLK)= 0
+ KEYTYP(IBLK)= 0
+ ITGEOM(IBLK)= 0
+ KEYTRN(IBLK)= 0
+ IDLBLK(IBLK)= 0
+ 10 CONTINUE
+ LLSYM=.FALSE.
+ DO 20 I3= 1, 3
+ MINGRI(I3)= MAXGRI(I3)
+ MEDGRI(I3)= 0
+ IF( ABS(LCLSYM(I3)) .EQ. 1 )THEN
+ MINGRI(I3)= (MAXGRI(I3)+1)/2
+ LLSYM=.TRUE.
+ IF( LCLSYM(I3).EQ.-1 )THEN
+ MEDGRI(I3)= MINGRI(I3)-1
+ ENDIF
+ ELSE IF(ABS(LCLSYM(I3)) .EQ. 2 ) THEN
+ MINGRI(I3)= MAXGRI(I3)/2
+ LLSYM=.TRUE.
+ IF( LCLSYM(I3).EQ.-2 )THEN
+ MEDGRI(I3)= MINGRI(I3)
+ ENDIF
+ ELSE IF(LCLSYM(I3) .NE. 0) THEN
+ WRITE(IOUT,'(1H0,A8,4H -->,3(I8,1X))') 'LCLSYM', LCLSYM
+ CALL XABORT(NAMSBR//': LCLSYM NOT WELL DEFINED' )
+ ENDIF
+ 20 CONTINUE
+ ISTATE(:NSTATE)=0
+ CALL LCMGET(IPGEOM,'STATE-VECTOR',ISTATE)
+ NXYZ=MAX(ISTATE(3),ISTATE(4),ISTATE(5))
+ ISUB2= ISTATE(9)
+ KMESH=ISTATE(6)
+ MAXRO = 0
+ NTOTCO= 0
+ IF( ISUB2.GT.0 )THEN
+ CALL LCMGET(IPGEOM,'CELL',CELLT)
+ CALL LCMLEN(IPGEOM,'MIX', NMERG1, ITYP)
+ CALL LCMGET(IPGEOM,'MIX', KEYTYP)
+ DO 30 IMERG1=1,NMERG1
+ IF( KEYTYP(IMERG1).GT.0 )CALL XABORT(NAMSBR//': GENERATING '
+ > //'CELLS EXPECTED')
+ KEYTYP(IMERG1)=-KEYTYP(IMERG1)
+ IKG=KEYTYP(IMERG1)
+ WRITE(GEOCV,'(3A4)')
+ > CELLT(3*IKG-2),CELLT(3*IKG-1),CELLT(3*IKG)
+ CALL LCMSIX(IPGEOM,GEOCV,1)
+ ISTATE(:NSTATE)=0
+ CALL LCMGET(IPGEOM,'STATE-VECTOR',ISTATE)
+ NXYZ=MAX(NXYZ,ISTATE(3),ISTATE(4),ISTATE(5))
+ CALL LCMSIX(IPGEOM,GEOCV,2)
+ 30 CONTINUE
+ CALL LCMLEN(IPGEOM,'MERGE', NMERG2, ITYP)
+ IF( NMERG2.EQ.0 )THEN
+ DO 100 IMERG1= 1, NMERG1
+ MRGCEL(IMERG1)= IMERG1
+ 100 CONTINUE
+ ELSEIF( NMERG2.EQ.NMERG1 )THEN
+ CALL LCMGET(IPGEOM,'MERGE', MRGCEL)
+ ELSE
+ CALL XABORT(NAMSBR//': MERGES ARE INCOMPATIBLE' )
+ ENDIF
+*
+ CALL LCMLEN(IPGEOM,'TURN', NMERG3, ITYP)
+ IF( NMERG3.EQ.0 )THEN
+ DO 110 IMERG1= 1, NMERG1
+ ITGEOM(IMERG1)= 1
+ 110 CONTINUE
+ ELSEIF( NMERG3.EQ.NMERG1 )THEN
+ CALL LCMGET(IPGEOM,'TURN', ITGEOM)
+ DO 120 IMERG1= 1, NMERG3
+ IF( MOD(ITGEOM(IMERG1),MAXTUR).EQ.0.OR.
+ > MOD(ITGEOM(IMERG1),MAXTUR).GT.8 )
+ > CALL XABORT(NAMSBR//': INVALID TURNS (NO HEX CODES)' )
+ 120 CONTINUE
+ ELSE
+ CALL XABORT(NAMSBR//': TURNS ARE INCOMPATIBLE' )
+ ENDIF
+ IF(LL1 .OR. LL2) THEN
+*----
+* Process diagonal symmetries
+*----
+ CALL AXGDIA( IPGEOM, IPRT, NBLOCK, NTYPO, NXYZ, KMESH ,
+ > GEONAM, LL1, LL2, MINGRI, CELLT, KEYTYP,
+ > ITGEOM)
+ ENDIF
+ IF( LLSYM )THEN
+*----
+* process x-x, y-y and z-z symmetry
+* 1) Unfold geometry
+* 2) Analyse symmetry
+*----
+ DO 300 IZ=MINGRI(3),1,-1
+ IOF1=(IZ-1)*MINGRI(1)*MINGRI(2)
+ IOF2=(IZ+MEDGRI(3)-1)*MAXGRI(1)*MAXGRI(2)
+ DO 310 IY=MINGRI(2),1,-1
+ DO 320 IX=MINGRI(1),1,-1
+ IOT2=IOF2+(IY+MEDGRI(2)-1)*MAXGRI(1)+IX+MEDGRI(1)
+ IOT1=IOF1+(IY-1)*MINGRI(1)+IX
+ IF(IOT2 .NE. IOT1) THEN
+ IF(KEYTYP(IOT2) .NE. 0)THEN
+ CALL XABORT(NAMSBR//': PROBLEMS TO UNFOLD')
+ ELSE
+ KEYTYP(IOT2)=KEYTYP(IOT1)
+ KEYTYP(IOT1)= 0
+ ITGEOM(IOT2)=ITGEOM(IOT1)
+ ITGEOM(IOT1)= 0
+ ENDIF
+ ENDIF
+ 320 CONTINUE
+ 310 CONTINUE
+ 300 CONTINUE
+ CALL AXGSYM( IPGEOM, IPRT, NBLOCK, NTYPO, NXYZ,
+ > GEONAM, LCLSYM, MINGRI, MAXGRI, CELLT,
+ > KEYTYP, ITGEOM)
+ ENDIF
+*----
+* FIND ALL DIFFERENT GEOMETRIES
+*----
+ IF( IPRT.GT.1 )THEN
+ WRITE(IOUT,'(1H )')
+ NXC= 1
+ WRITE(IOUT,'(25H ===> CELL TYPES ARE: /)')
+ DO 400 IP= 1, (9+ISUB2)/10
+ NXM= MIN( ISUB2, NXC+9 )
+ WRITE(IOUT,'(1H ,10(I8.8,4X))')
+ > (IB1,IB1=NXC,NXM)
+ WRITE(IOUT,'(1H ,30A4)')
+ > (CELLT(3*IB1-2),CELLT(3*IB1-1),CELLT(3*IB1),IB1=NXC,NXM)
+ NXC= NXC + 10
+ 400 CONTINUE
+*
+* PRINTING ASSEMBLY MAP
+ CPLAN= BLANC
+ NLINP= 3+(MAXGRI(2)+1)*((9+MAXGRI(1))/10+1)
+ DO 410 IZ=1,MAXGRI(3)
+ WRITE(IOUT,'(1H )')
+ IF(NDIM.EQ.3)THEN
+ WRITE(CPLAN,'(4H (Z=,I3,1H))') IZ
+ ENDIF
+ WRITE(IOUT,'(/32H UNFOLD TYPE CELL MAP FOR PLANE ,A8)')
+ > CPLAN
+ NXC= 1
+ DO 415 IP = 1, (9 + MAXGRI(1)) / 10
+ NXM= MIN( MAXGRI(1), NXC+9 )
+ WRITE(IOUT,'(1X,A8,1X,10(A4,I3,A4))')
+ > CPLAN, (' X= ',IR,' ROT',IR=NXC,NXM)
+ NXC = NXC + 10
+ 415 CONTINUE
+ WRITE(IOUT,'(1H )')
+ DO 420 IY=1,MAXGRI(2)
+ IOFF=((IZ-1)*MAXGRI(2)+(IY-1))*MAXGRI(1)
+ NXC= 1
+ DO 425 IP = 1, (9 + MAXGRI(1)) / 10
+ NXM= MIN( MAXGRI(1), NXC+9 )
+ WRITE(IOUT,'(1X,A4,I3,2H=>,10(I7,1X,A2,1X))')
+ > ' Y= ',IY,(KEYTYP(IOFF+IR),
+ > AXGTRN(ITGEOM(IOFF+IR)),IR=NXC,NXM)
+ NXC = NXC + 10
+ 425 CONTINUE
+ WRITE(IOUT,'(1H )')
+ 420 CONTINUE
+ 410 CONTINUE
+ ENDIF
+ NGEOME= 0
+ DO 40 IB1= 1, NBLOCK
+ IC1= KEYTYP(IB1)
+ IT1= ITGEOM(IB1)
+ IF(IC1.LE.0.OR.IC1.GT.ISUB2 )THEN
+ CALL XABORT(NAMSBR//': INVALID TYPE #')
+ ENDIF
+ NGEOME= NGEOME + 1
+ CELLG(3*NGEOME-2)= CELLT(3*IC1-2)
+ CELLG(3*NGEOME-1)= CELLT(3*IC1-1)
+ CELLG(3*NGEOME )= CELLT(3*IC1 )
+ KEYTRN(NGEOME)= IT1
+ WRITE( GEOC1(1: 4),'(A4)') CELLT(3*IC1-2)
+ WRITE( GEOC1(5: 8),'(A4)') CELLT(3*IC1-1)
+ WRITE( GEOC1(9:12),'(A4)') CELLT(3*IC1 )
+* SEARCH FOR SIMILAR GEOMETRIES IN PREVIOUS ONES
+ IF( IB1.NE.1 )THEN
+ DO 41 IB2= 1, IB1-1
+ IC2= KEYTYP(IB2)
+ IT2= ITGEOM(IB2)
+ IF( IT1.NE.IT2 ) GO TO 41
+ WRITE( GEOC2(1: 4),'(A4)') CELLT( 3*IC2-2 )
+ WRITE( GEOC2(5: 8),'(A4)') CELLT( 3*IC2-1 )
+ WRITE( GEOC2(9:12),'(A4)') CELLT( 3*IC2 )
+ IF( GEOC1.EQ.GEOC2 )THEN
+ KEYGEO(IB1)= KEYGEO(IB2)
+ NGEOME= NGEOME-1
+ GO TO 40
+ ENDIF
+ 41 CONTINUE
+ ENDIF
+*----
+* ANALYSE NEW GEOMETRY
+*----
+ CALL LCMSIX(IPGEOM,GEOC1,1)
+ CALL XELPRC(IPGEOM,GEOC1,NDIM,NNCYL,NNSUR,NNVOL,MAXREM)
+ IF( NNVOL.NE.0 )THEN
+ NSURO(NGEOME)= -NNSUR
+ NVOLO(NGEOME)= NNVOL
+ IDLDIM(NGEOME)= NTOTCO
+ NTOTCO= NTOTCO + NNCYL + 3
+ MAXRO= MAXRO + MAXREM
+ IGEO= NGEOME
+ ELSE
+ NGEOME= NGEOME-1
+ IGEO= -1
+ ENDIF
+ KEYGEO(IB1)= IGEO
+ CALL LCMSIX(IPGEOM,' ',2)
+ 40 CONTINUE
+ IF( IPRT.GT.1 )THEN
+ WRITE(IOUT,'(1H )')
+ NXC= 1
+ WRITE(IOUT,'(25H ===> PHYSICAL CELLS ARE: /)')
+ DO 42 IP= 1, (9+NGEOME)/10
+ NXM= MIN( NGEOME, NXC+9 )
+ WRITE(IOUT,'(1H ,10(I8.8,4X))')
+ > (IB1,IB1=NXC,NXM)
+ WRITE(IOUT,'(1H ,30A4)') (CELLG(3*IB1-2),
+ > CELLG(3*IB1-1),CELLG(3*IB1),IB1=NXC,NXM)
+ WRITE(IOUT,'(1H ,10(A7,5X))')
+ > ('TURN '//AXGTRN(KEYTRN(IB1)),IB1=NXC,NXM)
+ NXC= NXC + 10
+ 42 CONTINUE
+ ENDIF
+*----
+* RESTORE *KEYTYP* AND *KEYGEO* VALUES
+*----
+ NTYP2= NGEOME
+ DO 43 IB1= 1, NBLOCK
+ KEYTYP(IB1)= KEYGEO(IB1)
+ 43 CONTINUE
+ DO 44 IC1= 1, NTYP2
+ IF( KEYGEO(IC1).NE.-1 ) KEYGEO(IC1)= IC1
+ 44 CONTINUE
+*----
+* DELETE ALL VIRTUAL CELLS
+*----
+ NTYP= 0
+ DO 45 ITYP= 1, NTYP2
+ IGEO= KEYGEO(NTYP+1)
+ IF( IGEO.EQ.-1 )THEN
+ DO 46 IBLK= 1, NBLOCK
+ IOLTYP= KEYTYP(IBLK)
+ IF( IOLTYP.EQ.NTYP+1 )THEN
+ KEYTYP(IBLK)= 0
+ ELSEIF( IOLTYP.GT.NTYP+1 )THEN
+ KEYTYP(IBLK)= KEYTYP(IBLK)-1
+ ENDIF
+ 46 CONTINUE
+ DO 47 JTYP= NTYP+2, NTYP2
+ CELLG(3*JTYP-5)= CELLG(3*JTYP-2)
+ CELLG(3*JTYP-4)= CELLG(3*JTYP-1)
+ CELLG(3*JTYP-3)= CELLG(3*JTYP )
+ KEYTRN(JTYP-1)= KEYTRN(JTYP)
+ KEYGEO(JTYP-1)= KEYGEO(JTYP)
+ 47 CONTINUE
+ ELSE
+ NTYP= NTYP+1
+ ENDIF
+ 45 CONTINUE
+ ELSE
+*----
+* NO CELL IN THE GEOMETRY
+*----
+ GEOCV=' '
+ READ(GEOCV,'(3A4)') CELLT(1),CELLT(2),CELLT(3)
+ IF( NTYPO.NE.1 )
+ > CALL XABORT(NAMSBR//': INVALID GEOMETRY TYPE '//GEONAM)
+ NGEOME= 1
+ NTYP= NTYPO
+ READ(GEONAM,'(3A4)') (CELLG(3*NGEOME+ITC),ITC=-2,0)
+ KEYGEO(1)= 1
+ KEYTYP(1)= 1
+ MRGCEL(1)= 1
+ ITGEOM(1)= 1
+ KEYTRN(1)= 1
+ IF( LLSYM )THEN
+*----
+* process x-x, y-y and z-z symmetry
+* 1) Unfold geometry
+* 2) Analyse symmetry
+*----
+ DO 330 IZ=MINGRI(3),1,-1
+ IOF1=(IZ-1)*MINGRI(1)*MINGRI(2)
+ IOF2=(IZ+MEDGRI(3)-1)*MAXGRI(1)*MAXGRI(2)
+ DO 340 IY=MINGRI(2),1,-1
+ DO 350 IX=MINGRI(1),1,-1
+ IOT2=IOF2+(IY+MEDGRI(2)-1)*MAXGRI(1)+IX+MEDGRI(1)
+ IOT1=IOF1+(IY-1)*MINGRI(1)+IX
+ IF(IOT2 .NE. IOT1) THEN
+ IF(KEYTYP(IOT2) .NE. 0)THEN
+ CALL XABORT(NAMSBR//': PROBLEMS TO UNFOLD')
+ ELSE
+ KEYTYP(IOT2)=KEYTYP(IOT1)
+ KEYTYP(IOT1)= 0
+ ITGEOM(IOT2)=ITGEOM(IOT1)
+ ITGEOM(IOT1)= 0
+ ENDIF
+ ENDIF
+ 350 CONTINUE
+ 340 CONTINUE
+ 330 CONTINUE
+ CALL AXGSYM( IPGEOM, IPRT, NBLOCK, NTYPO, NXYZ,
+ > GEONAM, LCLSYM,
+ > MINGRI, MAXGRI, CELLT,
+ > KEYTYP, ITGEOM)
+ ENDIF
+ IF( IPRT.GT.1 )THEN
+ IB1=1
+ WRITE(IOUT,'(A32/)') ' ===> REFERENCE GEOMETRY IS: '
+ WRITE(IOUT,'(1X,A8/1X,A12)') '00000001',GEONAM
+*----
+* PRINTING ASSEMBLY MAP
+*----
+ CPLAN= BLANC
+ NLINP= 3+(MAXGRI(2)+1)*((9+MAXGRI(1))/10+1)
+ DO 430 IZ=1,MAXGRI(3)
+ WRITE(IOUT,'(1H )')
+ IF(NDIM.EQ.3)THEN
+ WRITE(CPLAN,'(4H (Z=,I3,1H))') IZ
+ ENDIF
+ WRITE(IOUT,'(/32H UNFOLD TYPE CELL MAP FOR PLANE ,A8)')
+ > CPLAN
+ NXC= 1
+ DO 435 IP = 1, (9 + MAXGRI(1)) / 10
+ NXM= MIN( MAXGRI(1), NXC+9 )
+ WRITE(IOUT,'(1X,A8,1X,10(A4,I3,A4))')
+ > CPLAN, (' X= ',IR,' ROT',IR=NXC,NXM)
+ NXC = NXC + 10
+ 435 CONTINUE
+ WRITE(IOUT,'(1H )')
+ DO 440 IY=1,MAXGRI(2)
+ IOFF=((IZ-1)*MAXGRI(2)+(IY-1))*MAXGRI(1)
+ NXC= 1
+ DO 445 IP = 1, (9 + MAXGRI(1)) / 10
+ NXM= MIN( MAXGRI(1), NXC+9 )
+ WRITE(IOUT,'(1X,A4,I3,2H=>,10(I7,1X,A2,1X))')
+ > ' Y= ',IY,(KEYTYP(IOFF+IR),
+ > AXGTRN(ITGEOM(IOFF+IR)),IR=NXC,NXM)
+ NXC = NXC + 10
+ 445 CONTINUE
+ WRITE(IOUT,'(1H )')
+ 440 CONTINUE
+ 430 CONTINUE
+ ENDIF
+ NGEOME= 0
+ DO 50 IB1= 1, NBLOCK
+ IC1= KEYTYP(IB1)
+ IT1= ITGEOM(IB1)
+ IF(IC1 .LE. 0) THEN
+ CALL XABORT(NAMSBR//': INVALID TYPE #')
+ ENDIF
+ NGEOME= NGEOME + 1
+ READ(GEONAM,'(3A4)') (CELLG(3*NGEOME+ITC),ITC=-2,0)
+ KEYTRN(NGEOME)= IT1
+ IF( IB1.NE.1 )THEN
+ DO 51 IB2= 1, IB1-1
+ IC2= KEYTYP(IB2)
+ IT2= ITGEOM(IB2)
+ IF( IT1.NE.IT2 ) GO TO 51
+ KEYGEO(IB1)= KEYGEO(IB2)
+ NGEOME= NGEOME-1
+ GO TO 50
+ 51 CONTINUE
+ ENDIF
+* ANALYSE GEOMETRY
+ CALL XELPRC(IPGEOM,GEONAM,NDIM,NNCYL,NNSUR,NNVOL,MAXREM)
+ IF( NNVOL.NE.0 )THEN
+ NSURO(NGEOME)= -NNSUR
+ NVOLO(NGEOME)= NNVOL
+ IDLDIM(NGEOME)= NTOTCO
+ NTOTCO= NTOTCO + NNCYL + 3
+ MAXRO= MAXRO + MAXREM
+ IGEO= NGEOME
+ ELSE
+ NGEOME= NGEOME-1
+ IGEO= -1
+ ENDIF
+ KEYGEO(IB1)= IGEO
+ 50 CONTINUE
+ IF( IPRT.GT.1 )THEN
+ WRITE(IOUT,'(1H )')
+ NXC= 1
+ WRITE(IOUT,'(25H ===> PHYSICAL CELLS ARE: /)')
+ DO 52 IP= 1, (9+NGEOME)/10
+ NXM= MIN( NGEOME, NXC+9 )
+ WRITE(IOUT,'(1H ,10(I8.8,4X))')
+ > (IB1,IB1=NXC,NXM)
+ WRITE(IOUT,'(1H ,30A4)')
+ > ((CELLG(3*IB1+ITC),ITC=-2,0),IB1=NXC,NXM)
+ WRITE(IOUT,'(1H ,10(A7,5X))')
+ > ('TURN '//AXGTRN(KEYTRN(IB1)),IB1=NXC,NXM)
+ NXC= NXC + 10
+ 52 CONTINUE
+ ENDIF
+*----
+* RESTORE *KEYTYP* AND *KEYGEO* VALUES
+*----
+ NTYP= NGEOME
+ DO 53 IB1= 1, NBLOCK
+ KEYTYP(IB1)= KEYGEO(IB1)
+ 53 CONTINUE
+ DO 54 IC1= 1, NTYP
+ KEYGEO(IC1)= IC1
+ 54 CONTINUE
+ ENDIF
+ IF( IPRT.GT.1 )THEN
+ WRITE(IOUT,'(/35H ONE TRACKING FILE TO BE ATTACHED /'//
+ > '1H ,12X,14H UNDER NAME : ,A12 )') GEONAM
+ ENDIF
+*----
+* DEFINITION OF INDEX VALUES, TO LOOK AT THE DOMAIN
+*----
+ NGIDL= 0
+ DO 210 IGEO= 1, NGEOME
+ IF( NSURO(IGEO).GE.0 )
+ > CALL XABORT(NAMSBR//': GEOMETRY NOT FOUND')
+ IF( NVOLO(IGEO).LE.0 )
+ > CALL XABORT(NAMSBR//': GEOMETRY NOT FOUND')
+ IDLGEO(IGEO)= NGIDL - NSURO(IGEO) + 1
+ NGIDL= NVOLO(IGEO) + IDLGEO(IGEO)
+ 210 CONTINUE
+ NTIDL = 0
+ NPROB = 0
+ DO 220 ITYP= 1, NTYP
+ IGEO= KEYGEO(ITYP)
+ IF( IGEO.LE.0 )
+ > CALL XABORT(NAMSBR//': BLOC NOT FOUND')
+ IDLTYP(ITYP)= NTIDL - NSURO(IGEO) + 1
+ IDLPRB= NPROB + (1-NSURO(IGEO))*(2-NSURO(IGEO))/2
+ NTIDL = NVOLO(IGEO) + IDLTYP(ITYP)
+ NPROB = NVOLO(IGEO)*(NVOLO(IGEO)-2*NSURO(IGEO)+3)/2+IDLPRB
+ 220 CONTINUE
+ NUNKO= 0
+ DO 230 IBLK= 1, NBLOCK
+ ITYP= KEYTYP(IBLK)
+ IF( ITYP.LT.0 )
+ > CALL XABORT(NAMSBR//': CELL NOT FOUND')
+ IF( ITYP.EQ.0 )GO TO 230
+ IGEO= KEYGEO(ITYP)
+ IDLBLK(IBLK)= NUNKO - NSURO(IGEO) + 1
+ NUNKO= NVOLO(IGEO) + IDLBLK(IBLK)
+ 230 CONTINUE
+ IF( IPRT.GT.10 )THEN
+*----
+* PRINTING INDEX VECTORS
+*----
+ WRITE(IOUT,'(1H )')
+ WRITE(IOUT,'(1H0,A6,4H -->,I8)') 'MAXRO', MAXRO
+ WRITE(IOUT,'(1H0,A6,4H -->,I8)') 'NTOTCO', NTOTCO
+ WRITE(IOUT,'(1H0,A6,4H -->,3(I8,1X))') 'LCLSYM', LCLSYM
+ WRITE(IOUT,'(1H0,A8,4H ,5(A8,2X))') ' GEOM #',
+ > ' NSURO', ' NVOLO', ' IDLGEO', ' IDLDIM', ' KEYTRN'
+ DO 250 IGEO= 1, NGEOME
+ WRITE(IOUT,'(1H ,I8,4H -->,5(I8,2X))') IGEO,
+ > NSURO(IGEO),NVOLO(IGEO),IDLGEO(IGEO),IDLDIM(IGEO),KEYTRN(IGEO)
+ 250 CONTINUE
+ WRITE(IOUT,'(1H )')
+ WRITE(IOUT,'(1H0,A8,4H ,2(A8,2X))') ' BLOC #',
+ > ' KEYGEO', ' IDLTYP'
+ DO 260 ITYP= 1, NTYP
+ WRITE(IOUT,'(1H ,I8,4H -->,2(I8,2X))') ITYP,
+ > KEYGEO(ITYP), IDLTYP(ITYP)
+ 260 CONTINUE
+ WRITE(IOUT,'(1H )')
+ WRITE(IOUT,'(1H0,A8,4H ,3(A8,2X))') ' CELL #',
+ > ' KEYTYP', ' ITGEOM', ' IDLBLK'
+ DO 270 IBLK= 1, NBLOCK
+ WRITE(IOUT,'(1H ,I8,4H -->,3(I8,2X))') IBLK,
+ > KEYTYP(IBLK), ITGEOM(IBLK), IDLBLK(IBLK)
+ 270 CONTINUE
+ ENDIF
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(CELLT,ITGEOM)
+*----
+* RETURN
+*----
+ RETURN
+ END