summaryrefslogtreecommitdiff
path: root/Dragon/src/GEOIN1.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/GEOIN1.f')
-rw-r--r--Dragon/src/GEOIN1.f1375
1 files changed, 1375 insertions, 0 deletions
diff --git a/Dragon/src/GEOIN1.f b/Dragon/src/GEOIN1.f
new file mode 100644
index 0000000..4b42df3
--- /dev/null
+++ b/Dragon/src/GEOIN1.f
@@ -0,0 +1,1375 @@
+*DECK GEOIN1
+ RECURSIVE SUBROUTINE GEOIN1 (GEONAM,IPLIST,LEVEL,IMPX,MAXMIX)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Read and/or modify an object oriented geometry.
+*
+*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
+* GEONAM name of the directory where the geometry is stored.
+* IPLIST pointer to the geometry LCM object (L_GEOM signature).
+* LEVEL hierarchical level of the geometry.
+* IMPX print flag (IMPX=0 for no print).
+*
+*Parameters: output
+* MAXMIX maximum number of mixtures, considering all sub-geometries.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIST
+ INTEGER LEVEL,IMPX,MAXMIX
+ CHARACTER GEONAM*12
+*----
+* LOCAL VARIABLES
+*----
+ PARAMETER (MAXCOD=21,MAXHEX=9,MAXTEX=4,MAXTUR=12,MAXTYP=30,
+ 1 MXCL=500,NSTATE=40,IOUT=6)
+ LOGICAL LHEX,LTRI,EMPTY,LCM,SWANG
+ LOGICAL LTOT,LHOT,LCOUR
+ CHARACTER NAMT*12,COND(MAXCOD)*4,CHEX(MAXHEX)*8,CHET(MAXTEX)*8,
+ 1 CTUR(MAXTUR)*1,TYPE(0:MAXTYP)*16,TEXT4*4,CARLIR*12,TEXT12*12,
+ 2 DIR*1,HSMG*131
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: ISTATE,JSTATE,NCODE,ICODE
+ REAL, ALLOCATABLE, DIMENSION(:) :: ZCODE
+ DOUBLE PRECISION DBLLIR,DREALIR
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: CELL,MIX,ISECT,IMESH,MERGE,
+ 1 ITURN,NS,MILIE,MIXDL,MIXGR
+ REAL, ALLOCATABLE, DIMENSION(:) :: MESH,CYL,CENT,XR0,RR0,ANG,
+ 1 ARPIN,RS,FRACT,POURC,PROCE
+ INTEGER IMIXHT,NRINGH,NZ,NAP1,NSETM,KREG,JREG,ITRI,IAN
+*----
+* Data
+*----
+ SAVE COND,CHEX,CTUR,TYPE
+ DATA COND
+ > /'VOID','REFL','DIAG','TRAN','SYME',
+ > 'ALBE','ZERO','PI/2','PI' ,'SSYM',
+ > 9*' ','CYLI','ACYL'/
+ DATA CHEX
+ > /'S30 ','SA60 ','SB60 ','S90 ','R120 ',
+ > 'R180 ','SA180 ','SB180 ','COMPLETE'/
+ DATA CTUR
+ > /'A','B','C','D','E','F','G','H','I','J','K','L'/
+ DATA TYPE
+ > /'VIRTUAL ','HOMOGENEOUS ','CARTESIAN 1-D ',
+ > 'TUBE 1-D ','SPHERE 1-D ','CARTESIAN 2-D ',
+ > 'TUBE 2-D (Z) ','CARTESIAN 3-D ','HEXAGONAL 2-D ',
+ > 'HEXAGONE 3-D (Z)','TUBE 2-D (X) ','TUBE 2-D (Y) ',
+ > 'HEX/TRIANGLE 2D ','HEX/TRIANGLE 3D ',' ',
+ > 'R-THETA ','TRIANGULAR 2-D ','TRIANGULAR 3-D ',
+ > ' ',' ','2-D RECT. CELL ',
+ > '3-D RECT. CELL X','3-D RECT. CELL Y','3-D RECT. CELL Z',
+ > '2-D HEX. CELL ','3-D HEX. CELL Z ','2-D HEXT CELL ',
+ > '3-D HEXT CELL Z ',' ',' ',
+ > 'DO-IT-YOURSELF '/
+*
+ ALLOCATE(ISTATE(NSTATE),JSTATE(NSTATE),NCODE(6),ICODE(6))
+ ALLOCATE(ZCODE(6))
+ IMIXHT=0
+ MINMIX=0
+ MINICO=1
+ NPIN=0
+ IRLYZ=0
+ LR=0
+ LX=0
+ LY=0
+ LZ=0
+ LREG=0
+ CALL LCMLEN(IPLIST,'SIGNATURE',ILONG,ITYX)
+ IF(ILONG.EQ.0) THEN
+* INPUT A NEW GEOMETRY.
+ ISTATE(:NSTATE)=0
+ LHEX=.FALSE.
+ LTRI=.FALSE.
+ LCOUR=.FALSE.
+ DO 20 I=1,6
+ NCODE(I)=0
+ ZCODE(I)=0.0
+ ICODE(I)=0
+ 20 CONTINUE
+ ELSE
+* MODIFY AN EXISTING GEOMETRY.
+ CALL LCMGTC(IPLIST,'SIGNATURE',12,CARLIR)
+ IF(CARLIR.NE.'L_GEOM') THEN
+ NAMT=GEONAM
+ CALL XABORT('GEOIN1: SIGNATURE OF '//NAMT//' IS '//CARLIR
+ 1 //'. L_GEOM EXPECTED.')
+ ENDIF
+ CALL LCMGET(IPLIST,'STATE-VECTOR',ISTATE)
+ LR=ISTATE(2)
+ LX=ISTATE(3)
+ LY=ISTATE(4)
+ LZ=ISTATE(5)
+ LREG=ISTATE(6)
+ LHEX=(ISTATE(1).EQ. 8) .OR. (ISTATE(1) .EQ. 9) .OR.
+ 1 (ISTATE(1).EQ.12) .OR. (ISTATE(1) .EQ.13) .OR.
+ 2 (ISTATE(1).EQ.24) .OR. (ISTATE(1) .EQ.25) .OR.
+ 3 (ISTATE(1).EQ.26) .OR. (ISTATE(1) .EQ.27)
+ LTRI=(ISTATE(1).EQ.16).OR.(ISTATE(1).EQ.17)
+ LCOUR=.FALSE.
+ IF(LHEX) THEN
+ CALL LCMGET(IPLIST,'IHEX',IHEX)
+ LCOUR=IHEX.EQ.9
+ ENDIF
+ CALL LCMGET(IPLIST,'NCODE',NCODE)
+ CALL LCMGET(IPLIST,'ZCODE',ZCODE)
+ CALL LCMGET(IPLIST,'ICODE',ICODE)
+ IF((LEVEL.EQ.1).AND.(ISTATE(1).EQ.0)) THEN
+ GO TO 30
+ ELSE IF(LEVEL.EQ.1) THEN
+ GO TO 50
+ ENDIF
+ ENDIF
+*
+ 30 CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED(1).')
+ IF(CARLIR.EQ.'VIRTUAL') THEN
+ ISTATE(1)=0
+ ELSE IF(CARLIR.EQ.'HOMOGE') THEN
+ ISTATE(1)=1
+ LREG=1
+ ELSE IF(CARLIR.EQ.'CAR1D') THEN
+ ISTATE(1)=2
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX
+ ELSE IF(CARLIR.EQ.'SPHERE') THEN
+ ISTATE(1)=4
+ CALL REDGET(ITYPLU,LR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LR
+ ELSE IF(CARLIR.EQ.'CAR2D') THEN
+ ISTATE(1)=5
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LY,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX*LY
+ ELSE IF(CARLIR.EQ.'CAR3D') THEN
+ ISTATE(1)=7
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LY,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX*LY*LZ
+ ELSE IF(CARLIR.EQ.'HEX') THEN
+ ISTATE(1)=8
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX
+ ELSE IF(CARLIR.EQ.'HEXZ') THEN
+ ISTATE(1)=9
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX*LZ
+ ELSE IF(CARLIR.EQ.'HEXT') THEN
+ IMIXHT=1
+ ISTATE(1)=12
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ NRINGH=MAX(1,INTLIR)
+ LX=NRINGH
+ LREG=6*NRINGH*NRINGH
+ ELSE IF(CARLIR.EQ.'HEXTZ') THEN
+ IMIXHT=2
+ ISTATE(1)=13
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ NRINGH=MAX(1,INTLIR)
+ LX=NRINGH
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LZ=INTLIR
+ LREG=6*NRINGH*NRINGH*LZ
+ ELSE IF(CARLIR.EQ.'RTHETA') THEN
+ ISTATE(1)=15
+ CALL REDGET(ITYPLU,LR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LR*LZ
+ ELSE IF(CARLIR.EQ.'TRI') THEN
+ ISTATE(1)=16
+ LTRI=.TRUE.
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX
+ ELSE IF(CARLIR.EQ.'TRIZ') THEN
+ ISTATE(1)=17
+ LTRI=.TRUE.
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX*LZ
+ ELSE IF(CARLIR(1:4).EQ.'TUBE') THEN
+ DIR=CARLIR(5:5)
+ CALL REDGET(ITYPLU,LR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ IF(DIR.EQ.' ') THEN
+ ISTATE(1)=3
+ LX=1
+ LY=1
+ IRLXY=1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) THEN
+ IRLXY=0
+ ELSE IF(ITYPLU.EQ.2) THEN
+ CALL XABORT('GEOIN1: INVALID REAL DATA.')
+ ELSE
+ LX=INTLIR
+ CALL REDGET(ITYPLU,LY,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTE'
+ 1 //'D.')
+ ENDIF
+ LREG=LR*LY*LX
+ IF(IRLXY.EQ.0) GO TO 60
+ ELSE
+ LX=1
+ LY=1
+ LZ=1
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) THEN
+ IRLYZ=0
+ ELSE IF(ITYPLU.EQ.2) THEN
+ CALL XABORT('GEOIN1: REAL DATA NOT EXPECTED.')
+ ELSE
+ LY=INTLIR
+ IRLYZ=1
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTE'
+ 1 //'D.')
+ ENDIF
+ LREG=LR*LY*LZ*LX
+ IF(DIR.EQ.'X') THEN
+ ISTATE(1)=10
+ IF(IRLYZ.EQ.0) GO TO 60
+ ELSE IF(DIR.EQ.'Y') THEN
+ ISTATE(1)=11
+ IF(IRLYZ.EQ.0) THEN
+ LY=LX
+ LX=1
+ GO TO 60
+ ENDIF
+ ELSE IF(DIR.EQ.'Z') THEN
+ ISTATE(1)=6
+ IF(IRLYZ.EQ.0) THEN
+ LZ=LX
+ LX=1
+ GO TO 60
+ ENDIF
+ ELSE
+ CALL XABORT('GEOIN1: INVALID DATA IN TUBE CONSTRUCT.')
+ ENDIF
+ ENDIF
+ ELSE IF(CARLIR(1:6).EQ.'CARCEL') THEN
+ CALL REDGET(ITYPLU,LR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ DIR=CARLIR(7:7)
+ IF(DIR.EQ.' ') THEN
+ ISTATE(1)=20
+ LX=1
+ LY=1
+ IRLXY=1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) THEN
+ IRLXY=0
+ ELSE IF(ITYPLU.EQ.2) THEN
+ CALL XABORT('GEOIN1: INVALID REAL DATA.')
+ ELSE
+ LX=INTLIR
+ CALL REDGET(ITYPLU,LY,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTE'
+ 1 //'D.')
+ ENDIF
+ LREG=(LR+1)*LY*LX
+ IF(IRLXY.EQ.0) GO TO 60
+ ELSE
+ LX=1
+ LY=1
+ LZ=1
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) THEN
+ IRLYZ=0
+ ELSE IF(ITYPLU.EQ.2) THEN
+ CALL XABORT('GEOIN1: INVALID REAL DATA.')
+ ELSE
+ LY=INTLIR
+ IRLYZ=1
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTE'
+ 1 //'D.')
+ ENDIF
+ LREG=(LR+1)*LY*LZ*LX
+ IF(DIR.EQ.'X') THEN
+ ISTATE(1)=21
+ ELSE IF(DIR.EQ.'Y') THEN
+ ISTATE(1)=22
+ IF(IRLYZ.EQ.0) THEN
+ LY=LX
+ LX=1
+ GO TO 60
+ ENDIF
+ ELSE IF(DIR.EQ.'Z') THEN
+ ISTATE(1)=23
+ IF(IRLYZ.EQ.0) THEN
+ LZ=LX
+ LX=1
+ GO TO 60
+ ENDIF
+ ELSE
+ CALL XABORT('GEOIN1: INVALID DATA.')
+ ENDIF
+ ENDIF
+ ELSE IF(CARLIR(1:6).EQ.'HEXCEL') THEN
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,LR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LX=1
+ IF(CARLIR(7:7).EQ.' ') THEN
+ ISTATE(1)=24
+ LREG=LR+1
+ ELSE IF(CARLIR(7:7).EQ.'Z') THEN
+ ISTATE(1)=25
+ CALL REDGET(ITYPLU,LZ,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=(LR+1)*LZ
+ ELSE
+ CALL XABORT('GEOIN1: INVALID SUFFIX FOR HEXCEL.')
+ ENDIF
+ ELSE IF(CARLIR(1:7).EQ.'HEXTCEL') THEN
+ IMIXHT=1
+ LHEX=.TRUE.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1'//
+ > ': Number of annular regions missing.')
+ LR=INTLIR
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1'//
+ > ': Number of triangular crowns missing.')
+ NRINGH=MAX(1,INTLIR)
+ LX=NRINGH
+ LREG=6*NRINGH*NRINGH*(LR+1)
+ IF(CARLIR(8:8).EQ.' ') THEN
+ ISTATE(1)=26
+ ELSE IF(CARLIR(8:8).EQ.'Z') THEN
+ IMIXHT=2
+ ISTATE(1)=27
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1'//
+ > ': Number of z planes missing.')
+ LZ=INTLIR
+ LREG=LREG*LZ
+ ELSE
+ CALL XABORT('GEOIN1: INVALID SUFFIX FOR HEXTCEL.')
+ ENDIF
+ ELSE IF(CARLIR.EQ.'GROUP') THEN
+* DO-IT-YOURSELF OPTION.
+ ISTATE(1)=30
+ CALL REDGET(ITYPLU,LX,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ LREG=LX
+ ELSE IF(CARLIR.EQ.':::') THEN
+ GO TO 60
+ ELSE IF(CARLIR.NE.GEONAM) THEN
+* COPY ATTRIBUTES FROM AN EXISTING GEOMETRY LOCATED ON A PARALLEL
+* DIRECTORY OF THE LCM OBJECT POINTED BY IPLIST.
+ IF(LEVEL.EQ.1) CALL XABORT('GEOIN1: THE GEOMETRY NAME SHOULD A'
+ 1 //'PPEAR BEFORE THE ::.')
+ CALL LCMSIX(IPLIST,' ',2)
+ CALL LCMLEN(IPLIST,CARLIR,ILONG,ITYX)
+ IF(ILONG.EQ.0) THEN
+ WRITE(HSMG,'(26HGEOIN1: UNKNOWN GEOMETRY (,A,2H).)') CARLIR
+ CALL XABORT(HSMG)
+ ENDIF
+ CALL LCMSIX(IPLIST,CARLIR,1)
+ IFILE=KDROPN('DUMMYSQ',0,2,0)
+ IF(IFILE.LE.0) CALL XABORT('GEOIN1: KDROPN FAILURE.')
+ CALL LCMEXP(IPLIST,0,IFILE,1,1)
+ REWIND(IFILE)
+ CALL LCMSIX(IPLIST,' ',2)
+ CALL LCMSIX(IPLIST,GEONAM,1)
+ CALL LCMEXP(IPLIST,0,IFILE,1,2)
+ IRC=KDRCLS(IFILE,2)
+ IF(IRC.LT.0) CALL XABORT('GEOIN1: KDRCLS FAILURE.')
+ CALL LCMGET(IPLIST,'STATE-VECTOR',ISTATE)
+ LR=ISTATE(2)
+ LX=ISTATE(3)
+ LY=ISTATE(4)
+ LZ=ISTATE(5)
+ LREG=ISTATE(6)
+ LHEX=(ISTATE(1).EQ. 8) .OR. (ISTATE(1) .EQ. 9) .OR.
+ 1 (ISTATE(1).EQ.12) .OR. (ISTATE(1) .EQ.13) .OR.
+ 2 (ISTATE(1).EQ.24) .OR. (ISTATE(1) .EQ.25) .OR.
+ 3 (ISTATE(1).EQ.26) .OR. (ISTATE(1) .EQ.27)
+ LTRI=(ISTATE(1).EQ.16).OR.(ISTATE(1).EQ.17)
+ CALL LCMGET(IPLIST,'NCODE',NCODE)
+ CALL LCMGET(IPLIST,'ZCODE',ZCODE)
+ CALL LCMGET(IPLIST,'ICODE',ICODE)
+ ENDIF
+*
+ 50 CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED(2).')
+ 60 IF(CARLIR.EQ.'EDIT') THEN
+ CALL REDGET(ITYPLU,IMPX,REALIR,CARLIR,DREALIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ ELSE IF((CARLIR.EQ.'MIX').OR.(CARLIR.EQ.'CELL')) THEN
+* INPUT MIXTURE NUMBERS OR FORCE SUB GEOMETRIES AT SPECIFIC
+* LOCATIONS.
+ ALLOCATE(CELL(3*LREG),MIX(LREG))
+ MIX(:LREG)=0
+ LTOT=.TRUE.
+ I=0
+ IKG=0
+ 70 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) THEN
+ IF(CARLIR.EQ.'PLANE') THEN
+ IF(I.EQ.1) THEN
+ IF(ISTATE(1).EQ.7.OR.ISTATE(1).EQ.9) THEN
+ IF(ISTATE(1).EQ.9) LY=1
+ CALL GEOMIX(LX,LY,LZ,LCOUR,MIX,MINMIX,ISTATE(7))
+ LTOT=.FALSE.
+ GO TO 70
+ ELSE
+ CALL XABORT('GEOIN1: INVALID KEY WORD PLANE FOR NON '
+ 1 //' 3-D GEOMETRY')
+ ENDIF
+ ELSE
+ CALL XABORT('GEOIN1: WRONG USE OF KEYWORD PLANE.')
+ ENDIF
+ ENDIF
+ IF((CARLIR(2:2).EQ.'-').OR.(CARLIR(2:2).EQ.'+').OR.
+ 1 (CARLIR.EQ.'HBC').OR.(CARLIR(1:4).EQ.'MESH').OR.
+ 2 (CARLIR(1:5).EQ.'SPLIT').OR.(CARLIR.EQ.'SIDE').OR.
+ 3 (CARLIR(:3).EQ.'MIX').OR.(CARLIR.EQ.'MERGE').OR.
+ 4 (CARLIR.EQ.'TURN').OR.(CARLIR.EQ.'CLUSTER').OR.
+ 5 (CARLIR(2:4).EQ.'PIN').OR.(CARLIR.EQ.'BIHET').OR.
+ 6 (CARLIR.EQ.'POURCE').OR.(CARLIR.EQ.'PROCEL').OR.
+ 7 (CARLIR.EQ.'SECT').OR.(CARLIR.EQ.'RADIUS').OR.
+ 8 (CARLIR.EQ.'HMIX').OR.(CARLIR.EQ.';').OR.
+ 9 (CARLIR.EQ.':::')) GO TO 90
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: MIX/CELL INDEX OVERFLO'
+ 1 //'W.')
+ DO 80 J=1,I-1
+ JKG=-MIX(J)
+ WRITE (TEXT12(:4),'(A4)') CELL(3*(JKG-1)+1)
+ WRITE (TEXT12(5:8),'(A4)') CELL(3*(JKG-1)+2)
+ WRITE (TEXT12(9:),'(A4)') CELL(3*(JKG-1)+3)
+ IF(CARLIR.EQ.TEXT12) THEN
+ MIX(I)=-JKG
+ GO TO 70
+ ENDIF
+ 80 CONTINUE
+ IKG=IKG+1
+ ISTATE(8)=1
+ MIX(I)=-IKG
+ READ (CARLIR(:4),'(A4)') CELL(3*(IKG-1)+1)
+ READ (CARLIR(5:8),'(A4)') CELL(3*(IKG-1)+2)
+ READ (CARLIR(9:),'(A4)') CELL(3*(IKG-1)+3)
+ ELSE IF(ITYPLU.EQ.1) THEN
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: MIX INDEX OVERFLOW.')
+ MIX(I)=INTLIR
+ ISTATE(7)=MAX(ISTATE(7),MIX(I))
+ MINMIX=MIN(MINMIX,MIX(I))
+ ELSE
+ CALL XABORT('GEOIN1: INTEGER OR CHARACTER DATA EXPECTED.')
+ ENDIF
+ GO TO 70
+ 90 CONTINUE
+ IF(CARLIR.EQ.'REPEAT') THEN
+ NBR=LREG/(I-1)
+ NBRR=NBR*(I-1)
+ IF(NBRR.NE.LREG) THEN
+ WRITE(IOUT,530) I-1,LREG
+ CALL XABORT('GEOIN1: IMPOSSIBLE TO REPEAT AN INTEGER NUMB'
+ 1 //'ER OF TIMES.')
+ ENDIF
+ JREP=I-1
+ DO IREP=1,NBR-1
+ DO II=1,I-1
+ JREP=JREP+1
+ MIX(JREP)=MIX(II)
+ ENDDO
+ ENDDO
+ I=JREP+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTE'
+ 1 //'D.')
+ ENDIF
+*-- Begin symmetric mixtures for HEXT, HEXTZ, HEXTCEL and HEXTCELZ
+ IF(IMIXHT .GT. 0) THEN
+ IF(I-1 .NE. LREG) THEN
+ LTOT=.FALSE.
+ NRINGH=LX
+ NZ=MAX(LZ,1)
+ NAP1=LR+1
+ NSETM=NRINGH*NZ*NAP1
+ IF(I-1 .EQ. NSETM) THEN
+*----
+* Mixture given per hexagonal rings
+* create compatible complete mix array
+*----
+ KREG=LREG
+ DO IZ=NZ,1,-1
+ DO IS=6,1,-1
+ DO IR=NRINGH,1,-1
+ JREG=(IZ-1)*NRINGH+IR-1
+ DO ITRI=2*IR-1,1,-1
+ DO IAN=NAP1,1,-1
+ MREG=JREG*NAP1+IAN
+ MIX(KREG)=MIX(MREG)
+ KREG=KREG-1
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ IF(KREG.NE.0) CALL XABORT('GEOIN1'//
+ > ': Problem with mixture reformatting.')
+ ELSE IF(I-1 .EQ. 6*NSETM) THEN
+*----
+* Mixture given per hexagonal rings and per sector
+* Create compatible complete mix array
+*----
+ KREG=LREG
+ DO IZ=NZ,1,-1
+ DO IS=6,1,-1
+ DO IR=NRINGH,1,-1
+ JREG=((IZ-1)*6+(IS-1))*NRINGH+IR-1
+ DO ITRI=2*IR-1,1,-1
+ DO IAN=NAP1,1,-1
+ MREG=JREG*NAP1+IAN
+ MIX(KREG)=MIX(MREG)
+ KREG=KREG-1
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ IF(KREG.NE.0) CALL XABORT('GEOIN1'//
+ > ': Problem with mixture reformatting.')
+ ELSE
+ CALL XABORT('GEOIN1'//
+ > ': Number of mixtures provided is invalid.')
+ ENDIF
+ ENDIF
+ ELSE
+ ISTATE(6)=I-1
+ ENDIF
+*-- End symmetric mixtures for HEXT, HEXTZ, HEXTCEL and HEXTCELZ
+ IF(LTOT) LREG=I-1
+ IF(IKG.GT.0) CALL LCMPUT(IPLIST,'CELL',3*IKG,3,CELL)
+ CALL LCMPUT(IPLIST,'MIX',LREG,1,MIX)
+ DEALLOCATE(MIX,CELL)
+ GO TO 60
+ ELSE IF(CARLIR.EQ.'HMIX') THEN
+* INPUT MERGED MIXTURE NUMBERS for homogenization by geometry.
+ ALLOCATE(MIX(LREG))
+ MIX(:LREG)=0
+ LHOT=.TRUE.
+ I=0
+ 540 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) GO TO 550
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ IF(I.GT.LREG) GO TO 500
+ MIX(I)=INTLIR
+ GO TO 540
+ 550 CONTINUE
+ IF(CARLIR .EQ. 'REPEAT') THEN
+ NBR=LREG/(I-1)
+ NBRR=NBR*(I-1)
+ IF(NBRR .NE. LREG ) THEN
+ WRITE(IOUT,530) I-1,LREG
+ CALL XABORT('GEOIN1: Impossible to repeat an integer numbe'
+ 1 //'r of times')
+ ENDIF
+ JREP=I-1
+ DO IREP=1,NBR-1
+ DO II=1,I-1
+ JREP=JREP+1
+ MIX(JREP)=MIX(II)
+ ENDDO
+ ENDDO
+ I=JREP+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED')
+ ENDIF
+*-- Begin symmetric H-mixtures for HEXT, HEXTZ, HEXTCEL and HEXTCELZ
+ IF(IMIXHT .GT. 0) THEN
+ IF(I-1 .NE. LREG) THEN
+ LHOT=.FALSE.
+ NRINGH=LX
+ NZ=MAX(LZ,1)
+ NAP1=LR+1
+ NSETM=NRINGH*NZ*NAP1
+ IF(I-1 .EQ. NSETM) THEN
+*----
+* Mixture given per hexagonal rings
+* create compatible complete mix array
+*----
+ KREG=LREG
+ DO IZ=NZ,1,-1
+ DO IS=6,1,-1
+ DO IR=NRINGH,1,-1
+ JREG=(IZ-1)*NRINGH+IR-1
+ DO ITRI=2*IR-1,1,-1
+ DO IAN=NAP1,1,-1
+ MREG=JREG*NAP1+IAN
+ MIX(KREG)=MIX(MREG)
+ KREG=KREG-1
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ IF(KREG.NE.0) CALL XABORT('GEOIN1'//
+ > ': Problem with mixture reformatting.')
+ ELSE IF(I-1 .EQ. 6*NSETM) THEN
+*----
+* Mixture given per hexagonal rings and per sector
+* Create compatible complete mix array
+*----
+ KREG=LREG
+ DO IZ=NZ,1,-1
+ DO IS=6,1,-1
+ DO IR=NRINGH,1,-1
+ JREG=((IZ-1)*6+(IS-1))*NRINGH+IR-1
+ DO ITRI=2*IR-1,1,-1
+ DO IAN=NAP1,1,-1
+ MREG=JREG*NAP1+IAN
+ MIX(KREG)=MIX(MREG)
+ KREG=KREG-1
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDDO
+ IF(KREG.NE.0) CALL XABORT('GEOIN1'//
+ > ': Problem with mixture reformatting.')
+ ELSE
+ CALL XABORT('GEOIN1'//
+ > ': Number of mixtures provided is invalid.')
+ ENDIF
+ ENDIF
+ ENDIF
+*-- End symmetric H-mixtures for HEXT, HEXTZ, HEXTCEL and HEXTCELZ
+ IF(LHOT) LREG=I-1
+ CALL LCMPUT(IPLIST,'HMIX',LREG,1,MIX)
+ DEALLOCATE(MIX)
+ GO TO 60
+ ELSE IF(CARLIR(1:4).EQ.'MESH') THEN
+* INPUT CARTESIAN COORDINATES.
+ IF(CARLIR(5:5).EQ.'X') THEN
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: MESHX - LX=0.')
+ LMESH=LX+1
+ ELSE IF(CARLIR(5:5).EQ.'Y') THEN
+ IF(LY.EQ.0) CALL XABORT('GEOIN1: MESHY - LY=0.')
+ LMESH=LY+1
+ ELSE IF(CARLIR(5:5).EQ.'Z') THEN
+ IF(LZ.EQ.0) CALL XABORT('GEOIN1: MESHZ - LZ=0.')
+ LMESH=LZ+1
+ ELSE
+ CALL XABORT('GEOIN1: INVALID MESH SUFFIX.')
+ ENDIF
+ ALLOCATE(MESH(LMESH))
+ DO 100 I=1,LMESH
+ CALL REDGET(ITYPLU,INTLIR,MESH(I),TEXT12,DBLLIR)
+ IF(ITYPLU.NE.2) THEN
+ WRITE(TEXT4,'(I4)') LMESH
+ CALL XABORT('GEOIN1: '//TEXT4//' REAL DATA EXPECTED.(1)')
+ ENDIF
+ IF(I.GT.1) THEN
+ IF(MESH(I).LE.MESH(I-1)) THEN
+ CALL XABORT('GEOIN1: NON INCREASING MESHES.')
+ ENDIF
+ ENDIF
+ 100 CONTINUE
+ CALL LCMPUT(IPLIST,CARLIR,LMESH,2,MESH)
+ DEALLOCATE(MESH)
+ ELSE IF(CARLIR.EQ.'RADIUS') THEN
+* INPUT TUBE RADIUS.
+ IF(LR.EQ.0) CALL XABORT('GEOIN1: RADIUS WITH LR=0.')
+ LCYL=LR+1
+ ALLOCATE(CYL(LCYL))
+ DO 110 I=1,LCYL
+ CALL REDGET(ITYPLU,INTLIR,CYL(I),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(2)')
+ IF(I.GT.1) THEN
+ IF(CYL(I).LE.CYL(I-1)) THEN
+ CALL XABORT('GEOIN1: NON INCREASING RADII.')
+ ENDIF
+ ENDIF
+ 110 CONTINUE
+ IF(CYL(1).NE.0.0) CALL XABORT('GEOIN1: INVALID FIRST RADI'
+ 1 //'US.')
+ CALL LCMPUT(IPLIST,'RADIUS',LCYL,2,CYL)
+ DEALLOCATE(CYL)
+ ELSE IF(CARLIR.EQ.'OFFCENTER') THEN
+* INPUT TUBE CENTER LOCATION (USE FOR CARCEL* ONLY).
+ IF(LR.EQ.0) CALL XABORT('GEOIN1: OFFCENTER WITH LR=0.')
+ ALLOCATE(CENT(3))
+ CENT(:3)=0.0
+ DO 120 I=1,3
+ CALL REDGET(ITYPLU,INTLIR,CENT(I),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) GO TO 130
+ 120 CONTINUE
+ CALL REDGET(ITYPLU,INTLIR,CENT(I),CARLIR,DBLLIR)
+ 130 CALL LCMPUT(IPLIST,'OFFCENTER',3,2,CENT)
+ DEALLOCATE(CENT)
+ GO TO 60
+ ELSE IF(CARLIR.EQ.'SIDE') THEN
+* INPUT THE SIDE LENGTH IN TRIANGULAR OR HEXAGONAL GEOMETRY.
+ IF((.NOT.LHEX).AND.(.NOT.LTRI)) CALL XABORT('GEOIN1: SIDE PRO'
+ 1 //'HIBITED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(3)')
+ SIDE=REALIR
+ CALL LCMPUT(IPLIST,'SIDE',1,2,SIDE)
+ IF((ISTATE(1).EQ.12).OR.(ISTATE(1).EQ.13).OR.
+ 1 (ISTATE(1).EQ.26).OR.(ISTATE(1).EQ.27) ) THEN
+* Hexagonal mesh for HEXT and HEXTZ
+ SIDET=SIDE/FLOAT(LX)
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.1) THEN
+ CALL XABORT('GEOIN1: INVALID INTEGER DATA .')
+ ELSE IF(ITYPLU.EQ.2) THEN
+ SIDET=REALIR
+ HEXMMX=SIDET*FLOAT(LX)-SIDE
+ IF((HEXMMX.LT.0.0).OR.(HEXMMX.GT.SIDET)) THEN
+ CALL XABORT('GEOIN1: Invalid sidet, nringh or side ->'//
+ 1 ' 0 <= sidet*nringh-side <= sidet required')
+ ENDIF
+ ENDIF
+ CALL LCMPUT(IPLIST,'SIDET',1,2,SIDET)
+ IF(ITYPLU.EQ.3) GO TO 60
+ ENDIF
+ ELSE IF(CARLIR.EQ.'SECT') THEN
+* INPUT THE TYPE OF SECTORIZATION.
+ IF(ISTATE(1).LT.20) CALL XABORT('GEOIN1: SECT PROHIBITED.')
+ CALL REDGET(ITYPLU,ISTATE(14),REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) THEN
+ ISTATE(15)=0
+ ELSE
+ IF((INTLIR.LT.0).OR.(INTLIR.GE.LREG)) CALL XABORT('GEOIN1: I'
+ > //'NVALID VALUE FOR jsect.')
+ ISTATE(15)=INTLIR
+ ENDIF
+ IF((.NOT.LHEX).AND.(ISTATE(14).EQ.-1)) THEN
+* X-TYPE SECTORIZATION IN CARTESIAN CELL.
+ LREG=4*LREG-3*ISTATE(15)
+ ELSE IF((.NOT.LHEX).AND.(ISTATE(14).EQ.0 )) THEN
+* NO SECTORIZATION IN CARTESIAN CELL.
+ LREG=LREG
+ ELSE IF((.NOT.LHEX).AND.(ISTATE(14).EQ.1)) THEN
+* +-TYPE SECTORIZATION IN CARTESIAN CELL.
+ LREG=4*LREG-3*ISTATE(15)
+ ELSE IF((.NOT.LHEX).AND.(ISTATE(14).EQ.2)) THEN
+* +-TYPE SECTORIZATION IN CARTESIAN CELL.
+ LREG=8*LREG-7*ISTATE(15)
+ ELSE IF((.NOT.LHEX).AND.(ISTATE(14).EQ.3)) THEN
+* SHIFTED + AND X-TYPE SECTORIZATION IN CARTESIAN CELL.
+ LREG=8*LREG-7*ISTATE(15)
+ ELSE IF((.NOT.LHEX).AND.(ISTATE(14).EQ.4)) THEN
+* FULL WINDMILL.
+ LREG=4+8*LREG-7*ISTATE(15)
+ ELSE IF(LHEX.AND.(ISTATE(14).EQ.-1)) THEN
+* X-TYPE SECTORIZATION IN HEXAGONAL CELL.
+ ALLOCATE(ISECT(LREG))
+ ISECT(:LREG)=2
+ CALL LCMPUT(IPLIST,'SECTOR',LREG,1,ISECT)
+ DEALLOCATE(ISECT)
+ LREG=6*LREG-5*ISTATE(15)
+ ELSE IF(ISTATE(14).NE.-999) THEN
+ CALL XABORT('GEOIN1: INVALID TYPE OF SECTORIZATION.')
+ ENDIF
+ IF(ITYPLU.NE.1) GO TO 60
+ ELSE IF (CARLIR.EQ.'RADS') THEN
+* OPTIONS FOR CYLINDRICAL CORRECTION IN CARTESIAN GEOMETRY.
+ IF((ISTATE(1).NE.5).AND.(ISTATE(1).NE.7)) CALL XABORT('GEO'
+ 1 //'IN1: OPTION RADS IS LIMITED TO CARTESIAN GEOMETRIES.')
+ CALL REDGET(INDIC,NR0,REALIR,TEXT4,DREALIR)
+ SWANG=TEXT4.EQ.'ANG'
+ IF(SWANG) CALL REDGET(INDIC,NR0,REALIR,TEXT4,DREALIR)
+ IF(INDIC.NE.1) CALL XABORT('GEO: INTEGER DATA EXPECTED.')
+ IF(NR0.EQ.0) CALL XABORT('GEOIN1: NON-ZERO INTEGER EXPECTED.')
+ ALLOCATE(XR0(NR0),RR0(NR0),ANG(NR0))
+ DO 135 I=1,NR0
+ CALL REDGET(INDIC,INTLIR,XR0(I),TEXT4,DREALIR)
+ IF(INDIC.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(4)')
+ CALL REDGET(INDIC,INTLIR,RR0(I),TEXT4,DREALIR)
+ IF(INDIC.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(5)')
+ IF(SWANG) THEN
+ CALL REDGET(INDIC,INTLIR,ANG(I),TEXT4,DREALIR)
+ IF(INDIC.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(6)')
+ ELSE
+* USE PI/2 + 0.1
+ ANG(I)=1.670796327
+ ENDIF
+ 135 CONTINUE
+ CALL LCMPUT(IPLIST,'XR0',NR0,2,XR0)
+ CALL LCMPUT(IPLIST,'RR0',NR0,2,RR0)
+ CALL LCMPUT(IPLIST,'ANG',NR0,2,ANG)
+ DEALLOCATE(ANG,RR0,XR0)
+ ELSE IF(CARLIR(1:5).EQ.'SPLIT') THEN
+* INPUT MESH SPLITTING FACTORS.
+ ISTATE(11)=1
+ IF(CARLIR(6:6).EQ.'X') THEN
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: SPLITX - LX=0.')
+ LMESH=LX
+ ELSE IF(CARLIR(6:6).EQ.'Y') THEN
+ IF(LY.EQ.0) CALL XABORT('GEOIN1: SPLITY - LY=0.')
+ LMESH=LY
+ ELSE IF(CARLIR(6:6).EQ.'Z') THEN
+ IF(LZ.EQ.0) CALL XABORT('GEOIN1: SPLITZ - LZ=0.')
+ LMESH=LZ
+ ELSE IF(CARLIR(6:6).EQ.'R') THEN
+ IF(LR.EQ.0) CALL XABORT('GEOIN1: SPLITR - LR=0.')
+ LMESH=LR
+ ELSE IF(CARLIR(6:6).EQ.'H') THEN
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: SPLITH - LX=0.')
+ LMESH=1
+ ELSE IF(CARLIR(6:6).EQ.'L') THEN
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: SPLITL - LX=0.')
+ LMESH=1
+ ELSE
+ CALL XABORT('GEOIN1: INVALID SPLIT SUFFIX.')
+ ENDIF
+ ALLOCATE(IMESH(LMESH))
+ DO 140 I=1,LMESH
+ CALL REDGET(ITYPLU,IMESH(I),REALIR,TEXT12,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ IF(CARLIR.EQ.'SPLITR') THEN
+ IF(IMESH(I).EQ.0) THEN
+ CALL XABORT('GEOIN1: INVALID MESH-SPLITTING INDEX(1).')
+ ENDIF
+ ELSE IF((CARLIR.EQ.'SPLITH').OR.(CARLIR.EQ.'SPLITL')) THEN
+ IF(IMESH(I).LT.0) THEN
+ CALL XABORT('GEOIN1: INVALID MESH-SPLITTING INDEX(2).')
+ ENDIF
+ ELSE
+ IF(IMESH(I).LE.0) THEN
+ CALL XABORT('GEOIN1: INVALID MESH-SPLITTING INDEX(3).')
+ ENDIF
+ ENDIF
+ 140 CONTINUE
+ CALL LCMPUT(IPLIST,CARLIR,LMESH,1,IMESH)
+ DEALLOCATE(IMESH)
+ ELSE IF(CARLIR.EQ.'MERGE') THEN
+* INPUT CELL-MERGING ITYPLUES.
+ ISTATE(10)=1
+ ALLOCATE(MERGE(LREG))
+ I=0
+ 150 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.EQ.3) GO TO 160
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: MERGE INDEX OVERFLOW.')
+ MERGE(I)=INTLIR
+ GO TO 150
+ 160 LREG=I-1
+ CALL LCMPUT(IPLIST,'MERGE',LREG,1,MERGE)
+ DEALLOCATE(MERGE)
+ GO TO 60
+ ELSE IF(CARLIR.EQ.'TURN') THEN
+* INPUT ORIENTATION INFORMATION.
+ ALLOCATE(ITURN(LREG))
+ I=0
+ 170 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ DO 180 J=1,MAXTUR
+ IF(CARLIR.EQ.CTUR(J)) THEN
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: TURN INDEX OVERFLOW(1).')
+ ITURN(I)=J
+ GO TO 170
+ ELSE IF(CARLIR.EQ.'-'//CTUR(J)) THEN
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: TURN INDEX OVERFLOW(2).')
+ ITURN(I)=MAXTUR+J
+ GO TO 170
+ ENDIF
+ 180 CONTINUE
+ LREG=I-1
+ CALL LCMPUT(IPLIST,'TURN',LREG,1,ITURN)
+ DEALLOCATE(ITURN)
+ GO TO 60
+ ELSE IF(CARLIR.EQ.'CLUSTER') THEN
+* DEFINE CLUSTER SUB GEOMETRIES.
+ ALLOCATE(CELL(3*MXCL))
+ I=0
+ 190 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ IF((CARLIR(2:2).EQ.'-').OR.(CARLIR(2:2).EQ.'+').OR.
+ 1 (CARLIR.EQ.'HBC').OR.(CARLIR(1:4).EQ.'MESH').OR.(CARLIR(1:5)
+ 2 .EQ.'SPLIT').OR.(CARLIR.EQ.'SIDE').OR.(CARLIR(:3).EQ.'MIX').OR.
+ 3 (CARLIR.EQ.'CELL').OR.(CARLIR.EQ.'MERGE').OR.(CARLIR.EQ.'TURN')
+ 4 .OR.(CARLIR(2:4).EQ.'PIN').OR.(CARLIR.EQ.'BIHET').OR.
+ 5 (CARLIR.EQ.'POURCE').OR.(CARLIR.EQ.'PROCEL').OR.
+ 6 (CARLIR.EQ.'SECT').OR.(CARLIR.EQ.'RADIUS').OR.
+ 7 (CARLIR.EQ.'HMIX').OR.(CARLIR.EQ.';').OR.(CARLIR.EQ.':::'))
+ 8 GO TO 200
+ IF(I.GT.MXCL) CALL XABORT('GEOIN1: CLUSTER INDEX OVERFLOW.')
+ READ (CARLIR(:4),'(A4)') CELL(3*(I-1)+1)
+ READ (CARLIR(5:8),'(A4)') CELL(3*(I-1)+2)
+ READ (CARLIR(9:),'(A4)') CELL(3*(I-1)+3)
+ GO TO 190
+ 200 CALL LCMPUT(IPLIST,'CLUSTER',3*(I-1),3,CELL)
+ ISTATE(13)=I-1
+ DEALLOCATE(CELL)
+ GO TO 60
+ ELSE IF(CARLIR(2:4).EQ.'PIN') THEN
+ IF(ISTATE(1) .NE. 3 .AND. ISTATE(1) .NE. 6 .AND.
+ 1 ISTATE(1) .NE. 10 .AND. ISTATE(1) .NE. 11 .AND.
+ 2 ISTATE(1) .NE. 4) GO TO 500
+ IF(CARLIR.EQ.'NPIN') THEN
+ IF(NPIN.EQ.-1) CALL XABORT('GEOIN1: NPIN and DPIN cannot be '
+ 1 //'used simultneously')
+* INPUT NUMBER OF PINS IN CLUSTER RING.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ IF(INTLIR.LT.1) CALL XABORT('GEOIN1: NPIN > 0 required.')
+ NPIN=INTLIR
+ CALL LCMPUT(IPLIST,'NPIN',1,1,NPIN)
+ ELSE IF(NAMT.EQ.'DPIN') THEN
+ IF(NPIN.GE.1) CALL XABORT('GEOIN1: NPIN and DPIN cannot be u'
+ 1 //'sed simultneously')
+* INPUT DENSITY OF PIN IN CLUSTER.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED FOR '
+ 1 //NAMT//' KEYWORD.')
+ NPIN=-1
+ DPIN=REALIR
+ ISTATE(18)=-1
+ CALL LCMPUT(IPLIST,'NPIN',1,1,NPIN)
+ CALL LCMPUT(IPLIST,'DPIN',1,2,DPIN)
+ ELSE IF((CARLIR.EQ.'RPIN').OR.(CARLIR.EQ.'APIN')) THEN
+ IF(NPIN.EQ.-1) THEN
+ CALL XABORT('GEOIN1: RPIN and APIN not compatible with DPI'
+ 1 //'N')
+ ELSE IF(NPIN.EQ.0) THEN
+ CALL XABORT('GEOIN1: NPIN required before RPIN and APIN ar'
+ 1 //'e defined')
+ ENDIF
+ IF(ISTATE(18) .EQ. 2) CALL XABORT('GEOIN1: CPIN* cannot be m'
+ 1 //'ixed with RPIN and APIN')
+ ISTATE(18)=1
+ NAMT=CARLIR
+*----
+* Allocate memory for APIN or RPIN
+*----
+ ALLOCATE(ARPIN(NPIN))
+* INPUT RADIUS/ANGLE OF CLUSTER RING.
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(7)')
+ ARPIN(1)=REALIR
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) THEN
+ CALL LCMPUT(IPLIST,NAMT,1,2,ARPIN)
+ DEALLOCATE(ARPIN)
+ GO TO 60
+ ENDIF
+ IF(NPIN.EQ.1) CALL XABORT('GEOIN1: Only one APIN or RPIN per'
+ 1 //'mitted.')
+ ARPIN(2)=REALIR
+ DO IPIN=2,NPIN-1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.'
+ 1 //'(8)')
+ ARPIN(IPIN+1)=REALIR
+ ENDDO
+ CALL LCMPUT(IPLIST,NAMT,NPIN,2,ARPIN)
+ DEALLOCATE(ARPIN)
+ ELSE IF(CARLIR(1:4).EQ.'CPIN') THEN
+ IF(NPIN.EQ.-1) THEN
+ CALL XABORT('GEOIN1: CPIN* not compatible with DPIN')
+ ELSE IF(NPIN.EQ.0) THEN
+ CALL XABORT('GEOIN1: NPIN required before CPIN* is defined')
+ ENDIF
+ IF(ISTATE(18).EQ.1) CALL XABORT('GEOIN1: CPIN* cannot be mix'
+ 1 //'ed with RPIN and APIN')
+ ISTATE(18)=2
+ IF(CARLIR(5:5). NE. 'X' .AND.
+ 1 CARLIR(5:5). NE. 'Y' .AND.
+ 2 CARLIR(5:5). NE. 'Z' ) THEN
+ CALL XABORT('GEOIN1: Only CPINX, CPINY and CPINZ permit'
+ 1 //'ted -- '//CARLIR(1:5)//' provided')
+ ENDIF
+ NAMT=CARLIR
+*----
+* Allocate memory for CPIN
+*----
+ ALLOCATE(ARPIN(NPIN))
+* INPUT Cartesian positions of pins.
+ DO IPIN=0,NPIN-1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL CPIN DATA EXPECT'
+ 1 //'ED.')
+ ARPIN(IPIN+1)=REALIR
+ ENDDO
+ CALL LCMPUT(IPLIST,NAMT,NPIN,2,ARPIN)
+ DEALLOCATE(ARPIN)
+ ENDIF
+ ELSE IF(CARLIR.EQ.'BIHET') THEN
+* DOUBLE HETEROGENEITY OPTION.
+ ISTATE(12)=1
+ IF(LEVEL.NE.1) CALL XABORT('GEOIN1: BIHET DATA SHOULD BE WRI'
+ 1 //'TTEN ON FIRST DIRECTORY LEVEL.')
+ CALL LCMSIX(IPLIST,'BIHET',1)
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ MICRO=0
+ IF(CARLIR.EQ.'TUBE') THEN
+ MICRO=3
+ ELSE IF(CARLIR.EQ.'SPHE') THEN
+ MICRO=4
+ ELSE
+ CALL XABORT('GEOIN1: PROHIBITED TYPE OF MICRO GEOMETRY.')
+ ENDIF
+ CALL REDGET(ITYPLU,NG,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,NMILG,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+*
+ ALLOCATE(NS(NG))
+ NSMAX=0
+ DO 210 I=1,NG
+ CALL REDGET(ITYPLU,NS(I),REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ NSMAX=MAX(NSMAX,NS(I))
+ 210 CONTINUE
+ CALL LCMPUT(IPLIST,'NS',NG,1,NS)
+*
+ ALLOCATE(RS((NSMAX+1)*NG))
+ DO 220 IOFJ=1,(NSMAX+1)*NG
+ RS(IOFJ)=0.0
+ 220 CONTINUE
+ DO 235 I=1,NG
+ DO 230 J=1,NS(I)+1
+ IOFJ=(I-1)*(NSMAX+1)+J
+ CALL REDGET(ITYPLU,INTLIR,RS(IOFJ),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(9)')
+ 230 CONTINUE
+ 235 CONTINUE
+ CALL LCMPUT(IPLIST,'RS',(NSMAX+1)*NG,2,RS)
+ DEALLOCATE(RS)
+*
+ ALLOCATE(MILIE(NMILG))
+ DO 240 I=1,NMILG
+ CALL REDGET(ITYPLU,MILIE(I),REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ 240 CONTINUE
+ CALL LCMPUT(IPLIST,'MILIE',NMILG,1,MILIE)
+ DEALLOCATE(MILIE)
+*
+ ALLOCATE(MIXDL(NMILG))
+ DO 250 I=1,NMILG
+ CALL REDGET(ITYPLU,MIXDL(I),REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ 250 CONTINUE
+ CALL LCMPUT(IPLIST,'MIXDIL',NMILG,1,MIXDL)
+ DEALLOCATE(MIXDL)
+*
+ ALLOCATE(MIXGR(NSMAX*NG*NMILG),FRACT(NG*NMILG))
+ DO 260 IOFK=1,NSMAX*NG*NMILG
+ MIXGR(IOFK)=0
+ 260 CONTINUE
+ DO 300 I=1,NMILG
+ DO 270 J=1,NG
+ IOFJ=(I-1)*NG+J
+ CALL REDGET(ITYPLU,INTLIR,FRACT(IOFJ),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(10)')
+ 270 CONTINUE
+ DO 290 J=1,NG
+ IOFJ=(I-1)*NG+J
+ IF(FRACT(IOFJ).GT.0.0) THEN
+ DO 280 K=1,NS(J)
+ IOFK=((I-1)*NG+(J-1))*NSMAX+K
+ CALL REDGET(ITYPLU,MIXGR(IOFK),REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.1) CALL XABORT('GEOIN1: INTEGER DATA EXPECTED.')
+ 280 CONTINUE
+ ENDIF
+ 290 CONTINUE
+ 300 CONTINUE
+ CALL LCMPUT(IPLIST,'FRACT',NG*NMILG,2,FRACT)
+ CALL LCMPUT(IPLIST,'MIXGR',NSMAX*NG*NMILG,1,MIXGR)
+ DEALLOCATE(FRACT,MIXGR)
+*
+ DEALLOCATE(NS)
+ JSTATE(:NSTATE)=0
+ JSTATE(1)=NG
+ JSTATE(2)=NSMAX+1
+ JSTATE(3)=NMILG
+ JSTATE(4)=NSMAX*NG
+ JSTATE(5)=MICRO
+ CALL LCMPUT(IPLIST,'STATE-VECTOR',NSTATE,1,JSTATE)
+ CALL LCMSIX(IPLIST,' ',2)
+ ELSE IF(CARLIR.EQ.'POURCE') THEN
+* CELL PROPORTIONS FOR DO-IT-YOURSELF OPTION.
+ IF(ISTATE(1).NE.30) CALL XABORT('GEOIN1: POURCE - KEY WORD LI'
+ 1 //'MITED TO DO-IT-YOURSELF GEOMETRY.')
+ ALLOCATE(POURC(LX))
+ DO 310 I=1,LX
+ CALL REDGET(ITYPLU,INTLIR,POURC(I),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(11)')
+ 310 CONTINUE
+ CALL LCMPUT(IPLIST,'POURCE',LX,2,POURC)
+ DEALLOCATE(POURC)
+ ELSE IF(CARLIR.EQ.'PROCEL') THEN
+* CELL PROBABILITIES FOR DO-IT-YOURSELF OPTION.
+ IF(ISTATE(1).NE.30) CALL XABORT('GEOIN1: PROCEL - KEY WORD LI'
+ 1 //'MITED TO DO-IT-YOURSELF GEOMETRY.')
+ ALLOCATE(PROCE(LX*LX))
+ DO 325 I=1,LX
+ DO 320 J=1,LX
+ IOFJ=(J-1)*LX+I
+ CALL REDGET(ITYPLU,INTLIR,PROCE(IOFJ),CARLIR,DBLLIR)
+ IF(ITYPLU.NE.2) CALL XABORT('GEOIN1: REAL DATA EXPECTED.(12)')
+ 320 CONTINUE
+ 325 CONTINUE
+ CALL LCMPUT(IPLIST,'PROCEL',LX*LX,2,PROCE)
+ DEALLOCATE(PROCE)
+ ELSE IF((CARLIR(2:2).EQ.'+').OR.(CARLIR(2:2).EQ.'-').OR.
+ 1 (CARLIR.EQ.'HBC')) THEN
+* INPUT BOUNDARY CONDITIONS.
+ ISURF=0
+ IF(CARLIR.EQ.'X-') THEN
+ ISURF=1
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: HBC X- -> LX=0.')
+ ELSE IF(CARLIR.EQ.'X+') THEN
+ ISURF=2
+ IF(LX.EQ.0) CALL XABORT('GEOIN1: HBC X+ -> LX=0.')
+ ELSE IF(CARLIR.EQ.'R+') THEN
+ ISURF=2
+ IF(ISTATE(1).EQ.10) THEN
+ ISURF=4
+ ELSE IF(ISTATE(1).EQ.11) THEN
+ ISURF=6
+ ENDIF
+ IF(LR.EQ.0) CALL XABORT('GEOIN1: HBC R+ -> LR=0.')
+ ELSE IF(CARLIR.EQ.'Y-') THEN
+ ISURF=3
+ IF(LY.EQ.0) CALL XABORT('GEOIN1: HBC Y- -> LY=0.')
+ ELSE IF(CARLIR.EQ.'Y+') THEN
+ ISURF=4
+ IF(LY.EQ.0) CALL XABORT('GEOIN1: HBC Y+ -> LY=0.')
+ ELSE IF(CARLIR.EQ.'Z-') THEN
+ ISURF=5
+ IF(LZ.EQ.0) CALL XABORT('GEOIN1: HBC Z- -> LZ=0.')
+ ELSE IF(CARLIR.EQ.'Z+') THEN
+ ISURF=6
+ IF(LZ.EQ.0) CALL XABORT('GEOIN1: HBC Z+ -> LZ=0.')
+ ELSE IF(CARLIR.EQ.'HBC') THEN
+ ISURF=1
+ IF(.NOT.LHEX) CALL XABORT('GEOIN1: HBC PROHIBITED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTE'
+ 1 //'D.')
+ DO 330 I=1,MAXHEX
+ IF(CARLIR.EQ.CHEX(I)) THEN
+ IHEX=I
+ GO TO 340
+ ENDIF
+ 330 CONTINUE
+ CALL XABORT('GEOIN1: INVALID TYPE OF HEXAGONAL SYMMETRY.')
+ 340 CALL LCMPUT(IPLIST,'IHEX',1,1,IHEX)
+ LCOUR=IHEX.EQ.9
+ ELSE IF(CARLIR.EQ.'TBC') THEN
+ ISURF=1
+ IF(.NOT.LTRI) CALL XABORT('GEOIN1: TBC PROHIBITED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTE'
+ 1 //'D.')
+ DO 350 I=1,MAXTEX
+ IF(CARLIR.EQ.CHET(I)) THEN
+ ITRI=I
+ GO TO 360
+ ENDIF
+ 350 CONTINUE
+ CALL XABORT('GEOIN1: INVALID TYPE OF TRIANGULAR SYMMETRY.')
+ 360 CALL LCMPUT(IPLIST,'ITRI',1,1,ITRI)
+ ELSE
+ CALL XABORT('GEOIN1: INVALID KEY WORD '//CARLIR//'.')
+ ENDIF
+ CALL REDGET(ITYPLU,INTLIR,REALIR,TEXT4,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ DO 370 I=1,MAXCOD
+ IF(TEXT4.EQ.COND(I)) THEN
+ NCODE(ISURF)=I
+ IF(TEXT4.EQ.'ACYL') NCODE(ISURF)=I-1
+ IF(TEXT4.NE.'ALBE') ICODE(ISURF)=0
+ GO TO 380
+ ENDIF
+ 370 CONTINUE
+ CALL XABORT('GEOIN1: INVALID TYPE OF BOUNDARY CONDITION.')
+ 380 IF(TEXT4.EQ.'ALBE') THEN
+ CALL REDGET(ITYPLU,INTLIR,REALIR,TEXT4,DBLLIR)
+ IF(ITYPLU.EQ.1) THEN
+ ICODE(ISURF)=INTLIR
+ MINICO=MIN(MINICO,INTLIR)
+ ELSE IF(ITYPLU.EQ.2) THEN
+ ZCODE(ISURF)=REALIR
+ ELSE
+ CALL XABORT('GEOIN1: INTEGER OR REAL DATA EXPECTED.')
+ ENDIF
+ ELSE IF(TEXT4.EQ.'ACYL') THEN
+ CALL REDGET(ITYPLU,INTLIR,REALIR,TEXT4,DBLLIR)
+ IF(ITYPLU.EQ.1) THEN
+ ICODE(ISURF)=INTLIR
+ MINICO=MIN(MINICO,INTLIR)
+ ELSE IF(ITYPLU.EQ.2) THEN
+ ZCODE(ISURF)=REALIR
+ ELSE
+ CALL XABORT('GEOIN1: INTEGER OR REAL DATA EXPECTED '
+ 1 //'AFTER ACYL.')
+ ENDIF
+ ELSE IF(TEXT4.EQ.'REFL') THEN
+ ZCODE(ISURF)=1.0
+ ELSE IF(TEXT4.EQ.'VOID') THEN
+ ZCODE(ISURF)=0.0
+ ENDIF
+ ELSE IF(CARLIR.EQ.';') THEN
+* END-OF-GEOMETRY.
+ GO TO 410
+ ELSE IF(CARLIR.EQ.':::') THEN
+* INPUT A SUB GEOMETRY.
+ IMPX2=IMPX
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,TEXT4,DBLLIR)
+ IF((ITYPLU.NE.3).OR.(TEXT4.NE.':=')) CALL XABORT('GEOIN1: := TO'
+ 1 //'KEN EXPECTED.')
+ CALL REDGET(ITYPLU,INTLIR,REALIR,TEXT4,DBLLIR)
+ IF((ITYPLU.NE.3).OR.(TEXT4.NE.'GEO:')) THEN
+ WRITE(HSMG,'(36HGEOIN1: GEO: TOKEN EXPECTED (CARLIR=,A,
+ 1 8H ITYPLU=,I2,7H TEXT4=,A,1H))') CARLIR,ITYPLU,TEXT4
+ CALL XABORT(HSMG)
+ ENDIF
+ CALL LCMLEN(IPLIST,CARLIR,ILONG,ITYX)
+ IF(ILONG.NE.0) THEN
+ IF(ITYX.NE.0) CALL XABORT('GEOIN1: INVALID GEOMETRY NAME.')
+ ELSE
+ ISTATE(9)=ISTATE(9)+1
+ ENDIF
+ CALL LCMSIX(IPLIST,CARLIR,1)
+ CALL GEOIN1(CARLIR,IPLIST,LEVEL+1,IMPX2,MAXMI2)
+ CALL LCMSIX(IPLIST,' ',2)
+ ISTATE(7)=MAX(ISTATE(7),MAXMI2)
+ ELSE IF(CARLIR.EQ.'MIX-NAMES') THEN
+* DEFINE MIXTURE CHARACTER NAMES.
+ IF(LEVEL.NE.1) CALL XABORT('GEOIN1: MIX-NAMES DATA SHOULD BE '
+ 1 //'WRITTEN ON FIRST DIRECTORY LEVEL.')
+ ALLOCATE(CELL(3*LREG))
+ I=0
+ 390 I=I+1
+ CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR)
+ IF(ITYPLU.NE.3) CALL XABORT('GEOIN1: CHARACTER DATA EXPECTED.')
+ IF((CARLIR(2:2).EQ.'-').OR.(CARLIR(2:2).EQ.'+').OR.
+ 1 (CARLIR.EQ.'HBC').OR.(CARLIR(1:4).EQ.'MESH').OR.(CARLIR(1:5)
+ 2 .EQ.'SPLIT').OR.(CARLIR.EQ.'SIDE').OR.(CARLIR(:3).EQ.'MIX').OR.
+ 3 (CARLIR.EQ.'CELL').OR.(CARLIR.EQ.'MERGE').OR.(CARLIR.EQ.'TURN')
+ 4 .OR.(CARLIR(2:4).EQ.'PIN').OR.(CARLIR.EQ.'BIHET').OR.
+ 5 (CARLIR.EQ.'POURCE').OR.(CARLIR.EQ.'PROCEL').OR.
+ 6 (CARLIR.EQ.'SECT').OR.(CARLIR.EQ.'RADIUS').OR.
+ 7 (CARLIR.EQ.'HMIX').OR.(CARLIR.EQ.';').OR. (CARLIR.EQ.':::'))
+ 8 GO TO 400
+ IF(I.GT.LREG) CALL XABORT('GEOIN1: MIX-NAMES INDEX OVERFLOW.')
+ READ (CARLIR(:4),'(A4)') CELL(3*(I-1)+1)
+ READ (CARLIR(5:8),'(A4)') CELL(3*(I-1)+2)
+ READ (CARLIR(9:),'(A4)') CELL(3*(I-1)+3)
+ GO TO 390
+ 400 CALL LCMPUT(IPLIST,'MIX-NAMES',3*(I-1),3,CELL)
+ ISTATE(13)=I-1
+ DEALLOCATE(CELL)
+ GO TO 60
+ ELSE
+ CALL XABORT('GEOIN1: '//CARLIR//' IS AN INVALID KEY WORD.')
+ ENDIF
+ GO TO 50
+*
+ 410 CARLIR='L_GEOM'
+ CALL LCMPTC(IPLIST,'SIGNATURE',12,CARLIR)
+ ISTATE(2)=LR
+ ISTATE(3)=LX
+ ISTATE(4)=LY
+ ISTATE(5)=LZ
+ ISTATE(6)=LREG
+ CALL LCMPUT(IPLIST,'STATE-VECTOR',NSTATE,1,ISTATE)
+ CALL LCMPUT(IPLIST,'NCODE',6,1,NCODE)
+ CALL LCMPUT(IPLIST,'ZCODE',6,2,ZCODE)
+ CALL LCMPUT(IPLIST,'ICODE',6,1,ICODE)
+ IF(MINMIX.LT.0)
+ > CALL XABORT('GEOIN1: NEGATIVE MIXTURE NUMBERS INVALID')
+ IF(MINICO.LT.1)
+ > CALL XABORT('GEOIN1: ALBEDO NUMBER MUST BE GREATER THAN 0')
+ MAXMIX=ISTATE(7)
+ IF(IMPX.GT.0) THEN
+ CALL LCMINF(IPLIST,CARLIR,TEXT12,EMPTY,ILONG,LCM)
+ WRITE (IOUT,510) LEVEL,GEONAM,CARLIR,TYPE(ISTATE(1))
+ ENDIF
+ IF(IMPX.GT.1) THEN
+ WRITE (IOUT,520) ISTATE(1),TYPE(ISTATE(1)),(ISTATE(I),I=2,12)
+ WRITE (IOUT,525) (ISTATE(I),I=13,15),ISTATE(18)
+ ENDIF
+ IF((ISTATE(8).EQ.1).AND.(ISTATE(9).EQ.0)) CALL XABORT('GEOIN1: '
+ 1 //'CELL OPTION ACTIVATED WITHOUT SUB-GEOMETRIES.')
+ DEALLOCATE(ZCODE)
+ DEALLOCATE(ICODE,NCODE,JSTATE,ISTATE)
+ RETURN
+*
+ 500 CALL XABORT('GEOIN1: INVALID DATA.')
+ 510 FORMAT(/20H CREATION OF A LEVEL,I3,27H GEOMETRY ON THE DIRECTORY ,
+ 1 7HNAMED ',A12,21H' OF THE LCM OBJECT ',A12,12H' WITH TYPE ,A16,
+ 2 1H.)
+ 520 FORMAT(/14H STATE VECTOR:/
+ 1 7H ITYPE ,I6, 4H (,A16,1H)/
+ 2 7H LR ,I6,20H (NUMBER OF TUBES)/
+ 3 7H LX ,I6,22H (X-DIMENSION INDEX)/
+ 4 7H LY ,I6,22H (Y-DIMENSION INDEX)/
+ 5 7H LZ ,I6,22H (Z-DIMENSION INDEX)/
+ 6 7H LREG ,I6,22H (NUMBER OF REGIONS)/
+ 7 7H MAXMIX,I6,48H (MAX. NB. OF MIXTURES/0=TRANSPARENT GEOMETRY)/
+ 8 7H ISUB1 ,I6,34H (1=COMMAND CELL IS USED/0=ELSE)/
+ 9 7H ISUB2 ,I6,29H (NUMBER OF SUB GEOMETRIES)/
+ 1 7H IMERGE,I6,26H (1=CELL-MERGING/0=ELSE)/
+ 2 7H ISPLIT,I6,28H (1=MESH-SPLITTING/0=ELSE)/
+ 3 7H IBIHET,I6,34H (1=DOUBLE HETEROGENEITY/0=ELSE))
+ 525 FORMAT(
+ 1 7H ICLUST,I6,28H (NUMBER OF CLUSTER RINGS)/
+ 2 7H ISECT ,I6,26H (TYPE OF SECTORIZATION)/
+ 3 7H JSECT ,I6,37H (NUMBER OF NON-SECTORIZED ANNULII)/
+ 4 7H IPIN ,I6,24H (PIN LOCATION OPTION))
+ 530 FORMAT(' ***** Error in GEOIN1 *****'/
+ 1 ' Initial number of mixtures ',I10/
+ 2 ' Cannot be repeated an integer number of times',
+ 3 ' to fill ',I10,' mixtures')
+ END