summaryrefslogtreecommitdiff
path: root/Dragon/src/NXTRIS.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/NXTRIS.f')
-rw-r--r--Dragon/src/NXTRIS.f740
1 files changed, 740 insertions, 0 deletions
diff --git a/Dragon/src/NXTRIS.f b/Dragon/src/NXTRIS.f
new file mode 100644
index 0000000..a413b81
--- /dev/null
+++ b/Dragon/src/NXTRIS.f
@@ -0,0 +1,740 @@
+*DECK NXTRIS
+ SUBROUTINE NXTRIS(IPRINT,ITYPG ,MAXMSH,NREG ,ITRN ,ITST ,
+ > ITSYM ,NM ,MIX ,ISPLT ,DAMESH,
+ > NMS ,MIXR ,ISPLTR,DAMESR)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Rotate geometry according to reference turn and test, if required,
+* in such a way that it satisfies intrinsic symmetries.
+*
+*Copyright:
+* Copyright (C) 2005 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):
+* G. Marleau
+*
+*Parameters: input
+* IPRINT intermediate printing level for output.
+* ITYPG geometry type.
+* MAXMSH maximum number of elements in MESH array.
+* NREG number of elements in MIX array.
+* ITRN geometry original turn number.
+* ITST flag for testing symmetry.
+* ITSYM flag for symmetries to test.
+*
+*Parameters: input/output
+* NM mesh size in all directions ($X$, $Y$, $Z$ and $R$).
+* MIX final mixture description for geometry (including HMIX).
+* ISPLT final split desctiption for geometry.
+* DAMESH final mesh description for geometry.
+* NMS mesh size after splitting.
+*
+*Parameters: temporary storage
+* MIXR mixture description for rotated geometry (including HMIX).
+* ISPLTR split desctiption for rotated geometry.
+* DAMESR mesh description for rotated geometry.
+*
+*Reference:
+* G. Marleau,
+* New Geometries Processing in DRAGON: The NXT: Module,
+* Report IGE-260, Polytechnique Montreal,
+* Montreal, 2005.
+*
+*-----------------------------------------------------------------------
+*
+ IMPLICIT NONE
+*----
+* Subroutine arguments
+*----
+ INTEGER IPRINT,ITYPG,MAXMSH,NREG,ITRN,ITST,
+ > NM(4),ITSYM(4)
+ INTEGER ISPLT(0:MAXMSH-1,4),MIX(0:NREG-1,2)
+ DOUBLE PRECISION DAMESH(-1:MAXMSH,4)
+ INTEGER NMS(4),ISPLTR(0:MAXMSH-1,4,2),
+ > MIXR(0:NREG-1,2,2)
+ DOUBLE PRECISION DAMESR(-1:MAXMSH,4,2)
+*----
+* Local parameters
+*----
+ INTEGER IOUT
+ CHARACTER NAMSBR*6
+ PARAMETER (IOUT=6,NAMSBR='NXTRIS')
+ DOUBLE PRECISION DCUTOF,DZERO,DONE,DTWO
+ PARAMETER (DCUTOF=1.0D-6,DZERO=0.0D0,DONE=1.0D0,DTWO=2.0D0)
+*----
+* Functions
+*----
+ INTEGER NXTTRS
+*----
+* Local variables
+*----
+ INTEGER NR,NX,NY,NZ,ITM(4,2),NPG,IPG,IG,ICT,ITG,
+ > IDIR,IKT,IDMI,ITMI,IX,IY,IZ,IR,NRP1,NMR,
+ > NMT(4),NMTS(4),NMTMP
+ DOUBLE PRECISION DDD
+*----
+* Data
+*----
+ CHARACTER CDIR(1:4)*1
+ SAVE CDIR
+ DATA CDIR /'X','Y','Z','R'/
+*----
+* Processing starts:
+* print routine openning output header if required
+* and initialize various parameters.
+*----
+ IF(IPRINT .GE. 100) THEN
+ WRITE(IOUT,6000) NAMSBR
+ ENDIF
+*----
+* Turn reference geometry (IPG=1)
+* and symmetric geometries (IPG=2,3,4,5)
+*----
+ ICT=0
+ NX=NM(1)
+ NY=NM(2)
+ NZ=MAX(NM(3),1)
+ NR=NM(4)
+ NRP1=NR+1
+ NMR=NR
+ IF(ITYPG .EQ. 3 .OR. ITYPG .EQ. 6 .OR.
+ > ITYPG .EQ. 10 .OR. ITYPG .EQ. 11 ) THEN
+ NRP1=NR
+ NMR=NR-1
+ ENDIF
+ ITM(3,1)=3
+ ITM(3,2)=3
+ ITM(4,1)=4
+ ITM(4,2)=4
+ NPG=1
+ IF(ITST .EQ. 1) NPG=5
+ DO IPG=1,NPG
+ IF(IPG .EQ. 1) THEN
+ IG=1
+ ICT=ITRN
+ DO IX=0,NR-1
+ DAMESR(IX,4,IG)=DAMESH(IX,4)
+ ISPLTR(IX,4,IG)=ISPLT(IX,4)
+ ENDDO
+ DAMESR(NR,4,IG)=DAMESH(NR,4)
+ ELSE
+ IG=2
+ ITG=IPG-1
+ IF(ABS(ITSYM(ITG)) .GE. 1) THEN
+*----
+* Symmetry is valid
+* Determine final turn after applying symmetry on
+* current turn
+*----
+ IF(ITG .EQ. 1) THEN
+*----
+* Symmetry in X
+*----
+ ICT=NXTTRS(ITRN,1)
+ ELSE IF(ITG .EQ. 2) THEN
+*----
+* Symmetry in Y
+*----
+ ICT=NXTTRS(ITRN,3)
+ ELSE IF(ITG .EQ. 3) THEN
+*----
+* Symmetry in Z
+*----
+ ICT=NXTTRS(ITRN,-1)
+ ELSE IF(ITG .EQ. 4) THEN
+*----
+* Symmetry in X=Y or X=-Y
+*----
+ IF(ABS(ITSYM(ITG)) .EQ. 1) THEN
+ ICT=NXTTRS(ITRN,2)
+ ELSE
+ ICT=NXTTRS(ITRN,4)
+ ENDIF
+ ENDIF
+ ELSE
+*----
+* No need to test the geometry for this
+* intrinsic symmetry.
+*----
+ GO TO 1005
+ ENDIF
+ ENDIF
+ IF(ICT .GT. 12 ) THEN
+ IKT=12-ICT
+ ELSE
+ IKT=ICT
+ ENDIF
+ DO IX=0,NR-1
+ DAMESR(IX,4,IG)=DAMESH(IX,4)
+ ISPLTR(IX,4,IG)=ISPLT(IX,4)
+ ENDDO
+ DAMESR(NR,4,IG)=DAMESH(NR,4)
+ IF(IKT .LT. 0) THEN
+ DAMESR(-1,3,IG)=-DAMESH(-1,3)
+ DAMESR(-1,4,IG)=-DAMESH(-1,4)
+ ELSE
+ DAMESR(-1,3,IG)=DAMESH(-1,3)
+ DAMESR(-1,4,IG)=DAMESH(-1,4)
+ ENDIF
+ IF (ABS(IKT) .EQ. 1) THEN
+ ITM(1,IG)=1
+ ITM(2,IG)=2
+ DO 100 IX=0,NX-1
+ DAMESR(IX,1,IG)=DAMESH(IX+1,1)-DAMESH(IX,1)
+ ISPLTR(IX,1,IG)=ISPLT(IX,1)
+ 100 CONTINUE
+ DAMESR(-1,1,IG)=DAMESH(-1,1)
+ DO 110 IY=0,NY-1
+ DAMESR(IY,2,IG)=DAMESH(IY+1,2)-DAMESH(IY,2)
+ ISPLTR(IY,2,IG)=ISPLT(IY,2)
+ 110 CONTINUE
+ DAMESR(-1,2,IG)=DAMESH(-1,2)
+ IF(IKT .LT. 0) THEN
+ DO 120 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ ITMI=IZ*NX*NY*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1
+ DO 121 IY=0,NY-1
+ DO 122 IX=0,NX-1
+ DO 123 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 123 CONTINUE
+ 122 CONTINUE
+ 121 CONTINUE
+ 120 CONTINUE
+ ELSE
+ DO 130 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ ITMI=IZ*NX*NY*NRP1
+ IDMI=ITMI
+ DO 131 IY=0,NY-1
+ DO 132 IX=0,NX-1
+ DO 133 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 133 CONTINUE
+ 132 CONTINUE
+ 131 CONTINUE
+ 130 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 2) THEN
+*----
+* ROTATION OF PI/2
+*----
+ ITM(1,IG)=2
+ ITM(2,IG)=1
+ DO 200 IX=0,NY-1
+ DAMESR(IX,1,IG)=DAMESH(IX+1,2)-DAMESH(IX,2)
+ ISPLTR(IX,1,IG)=ISPLT(IX,2)
+ 200 CONTINUE
+ DAMESR(-1,1,IG)=DAMESH(-1,2)
+ DO 210 IY=0,NX-1
+ DAMESR(IY,2,IG)=DAMESH(NX-IY,1)-DAMESH(NX-IY-1,1)
+ ISPLTR(IY,2,IG)=ISPLT(NX-IY-1,1)
+ 210 CONTINUE
+ DAMESR(-1,2,IG)=-DAMESH(-1,1)
+ IF(IKT .LT. 0) THEN
+ DO 220 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 221 IY=0,NX-1
+ DO 222 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+(NY-IX-1)*NX*NRP1+
+ > IY*NRP1
+ DO 223 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 223 CONTINUE
+ 222 CONTINUE
+ 221 CONTINUE
+ 220 CONTINUE
+ ELSE
+ DO 230 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 231 IY=0,NX-1
+ DO 232 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+IX*NX*NRP1+
+ > (NX-IY-1)*NRP1
+ DO 233 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 233 CONTINUE
+ 232 CONTINUE
+ 231 CONTINUE
+ 230 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 3) THEN
+*----
+* ROTATION OF PI
+*----
+ ITM(1,IG)=1
+ ITM(2,IG)=2
+ DO 300 IX=0,NX-1
+ DAMESR(IX,1,IG)=DAMESH(NX-IX,1)-DAMESH(NX-IX-1,1)
+ ISPLTR(IX,1,IG)=ISPLT(NX-IX-1,1)
+ 300 CONTINUE
+ DAMESR(-1,1,IG)=-DAMESH(-1,1)
+ DO 310 IY=0,NY-1
+ DAMESR(IY,2,IG)=DAMESH(NY-IY,2)-DAMESH(NY-IY-1,2)
+ ISPLTR(IY,2,IG)=ISPLT(NY-IY-1,2)
+ 310 CONTINUE
+ DAMESR(-1,2,IG)=-DAMESH(-1,2)
+ IF(IKT .LT. 0) THEN
+ DO 320 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 321 IY=0,NY-1
+ DO 322 IX=0,NX-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+(NY-IY-1)*NX*NRP1+
+ > (NX-IX-1)*NRP1
+ DO 323 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 323 CONTINUE
+ 322 CONTINUE
+ 321 CONTINUE
+ 320 CONTINUE
+ ELSE
+ DO 330 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 331 IY=0,NY-1
+ DO 332 IX=0,NX-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+(NY-IY-1)*NX*NRP1+
+ > (NX-IX-1)*NRP1
+ DO 333 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 333 CONTINUE
+ 332 CONTINUE
+ 331 CONTINUE
+ 330 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 4) THEN
+*----
+* ROTATION OF 3*PI/2
+*----
+ ITM(1,IG)=2
+ ITM(2,IG)=1
+ DO 400 IX=0,NY-1
+ DAMESR(IX,1,IG)=DAMESH(NY-IX,2)-DAMESH(NY-IX-1,2)
+ ISPLTR(IX,1,IG)=ISPLT(NY-IX-1,2)
+ 400 CONTINUE
+ DAMESR(-1,1,IG)=-DAMESH(-1,2)
+ DO 410 IY=0,NX-1
+ DAMESR(IY,2,IG)=DAMESH(IY+1,1)-DAMESH(IY,1)
+ ISPLTR(IY,2,IG)=ISPLT(IY,1)
+ 410 CONTINUE
+ DAMESR(-1,2,IG)=DAMESH(-1,1)
+ IF(IKT .LT. 0) THEN
+ DO 420 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 421 IY=0,NX-1
+ DO 422 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+(NY-IX-1)*NX*NRP1+
+ > IY*NRP1
+ DO 423 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 423 CONTINUE
+ 422 CONTINUE
+ 421 CONTINUE
+ 420 CONTINUE
+ ELSE
+ DO 430 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 431 IY=0,NX-1
+ DO 432 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+(NY-IX-1)*NX*NRP1+
+ > IY*NRP1
+ DO 433 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 433 CONTINUE
+ 432 CONTINUE
+ 431 CONTINUE
+ 430 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 5) THEN
+*----
+* REFLECTION WITH RESPECT TO AXIS // TO Y
+*----
+ ITM(1,IG)=1
+ ITM(2,IG)=2
+ DO 500 IX=0,NX-1
+ DAMESR(IX,1,IG)=DAMESH(NX-IX,1)-DAMESH(NX-IX-1,1)
+ ISPLTR(IX,1,IG)=ISPLT(NX-IX-1,1)
+ 500 CONTINUE
+ DAMESR(-1,1,IG)=-DAMESH(-1,1)
+ DO 510 IY=0,NY-1
+ DAMESR(IY,2,IG)=DAMESH(IY+1,2)-DAMESH(IY,2)
+ ISPLTR(IY,2,IG)=ISPLT(IY,2)
+ 510 CONTINUE
+ DAMESR(-1,2,IG)=DAMESH(-1,2)
+ IF(IKT .LT. 0) THEN
+ DO 520 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 521 IY=0,NY-1
+ DO 522 IX=0,NX-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+IY*NX*NRP1+
+ > (NX-IX-1)*NRP1
+ DO 523 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 523 CONTINUE
+ 522 CONTINUE
+ 521 CONTINUE
+ 520 CONTINUE
+ ELSE
+ DO 530 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 531 IY=0,NY-1
+ DO 532 IX=0,NX-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+IY*NX*NRP1+
+ > (NX-IX-1)*NRP1
+ DO 533 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 533 CONTINUE
+ 532 CONTINUE
+ 531 CONTINUE
+ 530 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 6) THEN
+*----
+* ROTATION OF PI/2 FOLLOWED BY
+* REFLECTION WITH RESPECT TO AXIS // TO Y
+*----
+ ITM(1,IG)=2
+ ITM(2,IG)=1
+ DO 600 IX=0,NY-1
+ DAMESR(IX,1,IG)=DAMESH(IX+1,2)-DAMESH(IX,2)
+ ISPLTR(IX,1,IG)=ISPLT(IX,2)
+ 600 CONTINUE
+ DAMESR(-1,1,IG)=DAMESH(-1,2)
+ DO 610 IY=0,NX-1
+ DAMESR(IY,2,IG)=DAMESH(IY+1,1)-DAMESH(IY,1)
+ ISPLTR(IY,2,IG)=ISPLT(IY,1)
+ 610 CONTINUE
+ DAMESR(-1,2,IG)=DAMESH(-1,1)
+ IF(IKT .LT. 0) THEN
+ DO 620 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 621 IY=0,NX-1
+ DO 622 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+IX*NX*NRP1+
+ > IY*NRP1
+ DO 623 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 623 CONTINUE
+ 622 CONTINUE
+ 621 CONTINUE
+ 620 CONTINUE
+ ELSE
+ DO 630 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 631 IY=0,NX-1
+ DO 632 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+IX*NX*NRP1+
+ > IY*NRP1
+ DO 633 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 633 CONTINUE
+ 632 CONTINUE
+ 631 CONTINUE
+ 630 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 7) THEN
+*----
+* REFLECTION WITH RESPECT TO AXIS // TO X
+*----
+ ITM(1,IG)=1
+ ITM(2,IG)=2
+ DO 700 IX=0,NX-1
+ DAMESR(IX,1,IG)=DAMESH(IX+1,1)-DAMESH(IX,1)
+ ISPLTR(IX,1,IG)=ISPLT(IX,1)
+ 700 CONTINUE
+ DAMESR(-1,1,IG)=DAMESH(-1,1)
+ DO 710 IY=0,NY-1
+ DAMESR(IY,2,IG)=DAMESH(NY-IY,2)-DAMESH(NY-IY-1,2)
+ ISPLTR(IY,2,IG)=ISPLT(NY-IY-1,2)
+ 710 CONTINUE
+ DAMESR(-1,2,IG)=-DAMESH(-1,2)
+ IF(IKT .LT. 0) THEN
+ DO 720 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 721 IY=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+(NY-IY-1)*NX*NRP1
+ DO 722 IX=0,NX-1
+ DO 723 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 723 CONTINUE
+ 722 CONTINUE
+ 721 CONTINUE
+ 720 CONTINUE
+ ELSE
+ DO 730 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 731 IY=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NX*NRP1
+ IDMI=IZ*NX*NY*NRP1+(NY-IY-1)*NX*NRP1
+ DO 732 IX=0,NX-1
+ DO 733 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 733 CONTINUE
+ 732 CONTINUE
+ 731 CONTINUE
+ 730 CONTINUE
+ ENDIF
+ ELSE IF(ABS(IKT) .EQ. 8) THEN
+*----
+* ROTATION OF PI/2 FOLLOWED BY
+* REFLECTION WITH RESPECT TO AXIS // TO X
+*----
+ ITM(1,IG)=2
+ ITM(2,IG)=1
+ DO 800 IX=0,NY-1
+ DAMESR(IX,1,IG)=DAMESH(NY-IX,2)-DAMESH(NY-IX-1,2)
+ ISPLTR(IX,1,IG)=ISPLT(NY-IX-1,2)
+ 800 CONTINUE
+ DAMESR(-1,1,IG)=-DAMESH(-1,2)
+ DO 810 IY=0,NX-1
+ DAMESR(IY,2,IG)=DAMESH(NX-IY,1)-DAMESH(NX-IY-1,1)
+ ISPLTR(IY,2,IG)=ISPLT(NX-IY-1,1)
+ 810 CONTINUE
+ DAMESR(-1,2,IG)=-DAMESH(-1,1)
+ IF(IKT .LT. 0) THEN
+ DO 820 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(NZ-IZ,3)-DAMESH(NZ-IZ-1,3)
+ ISPLTR(IZ,3,IG)=ISPLT(NZ-IZ-1,3)
+ DO 821 IY=0,NX-1
+ DO 822 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=(NZ-IZ-1)*NX*NY*NRP1+(NY-IX-1)*NX*NRP1+
+ > (NX-IY-1)*NRP1
+ DO 823 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 823 CONTINUE
+ 822 CONTINUE
+ 821 CONTINUE
+ 820 CONTINUE
+ ELSE
+ DO 830 IZ=0,NZ-1
+ DAMESR(IZ,3,IG)=DAMESH(IZ+1,3)-DAMESH(IZ,3)
+ ISPLTR(IZ,3,IG)=ISPLT(IZ,3)
+ DO 831 IY=0,NX-1
+ DO 832 IX=0,NY-1
+ ITMI=IZ*NX*NY*NRP1+IY*NY*NRP1+
+ > IX*NRP1
+ IDMI=IZ*NX*NY*NRP1+(NY-IX-1)*NX*NRP1+
+ > (NX-IY-1)*NRP1
+ DO 833 IR=0,NMR
+ MIXR(ITMI,IG,1)=MIX(IDMI,1)
+ MIXR(ITMI,IG,2)=MIX(IDMI,2)
+ ITMI=ITMI+1
+ IDMI=IDMI+1
+ 833 CONTINUE
+ 832 CONTINUE
+ 831 CONTINUE
+ 830 CONTINUE
+ ENDIF
+ ENDIF
+ IF(IPRINT .GE. 100) THEN
+*----
+* Print turned mesh if required
+*----
+ WRITE(IOUT,6010) (NM(ITM(IDIR,IG)),IDIR=1,3),NREG
+ DO IDIR=1,4
+ NMTMP=NM(ITM(IDIR,IG))
+ IF(NMTMP .GT. 0) THEN
+ WRITE(IOUT,6011) 'MESH'//CDIR(IDIR)//' ='
+ WRITE(IOUT,6012) (DAMESR(IX,IDIR,IG),IX=-1,NMTMP)
+ WRITE(IOUT,6011) 'SPLT'//CDIR(IDIR)//' ='
+ WRITE(IOUT,6013) (ISPLTR(IX-1,IDIR,IG),IX=1,NMTMP)
+ ENDIF
+ ENDDO
+ WRITE(IOUT,6011) 'MIX ='
+ WRITE(IOUT,6013) (MIXR(IX,IG,1),IX=0,NREG-1)
+ WRITE(IOUT,6011) 'HMIX ='
+ WRITE(IOUT,6013) (MIXR(IX,IG,2),IX=0,NREG-1)
+ ENDIF
+ IF(IPG .GT. 1) THEN
+*----
+* COMPARE GEOMETRY
+* 1- MESH AND SPLIT IN X, Y AND Z
+* 2- MIXTURES
+* 3- OFFCENTER
+*----
+ DO 900 IDIR=1,3
+ NMTMP=NM(ITM(IDIR,1))
+ IF(NMTMP .NE. NM(ITM(IDIR,2))) CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this mesh')
+ DO 910 IX=0,NMTMP-1
+ DDD=ABS(DAMESR(IX,IDIR,1)-DAMESR(IX,IDIR,2))
+ IF(DDD .GT. DCUTOF) CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this mesh')
+ IF(ISPLTR(IX,IDIR,1) .NE. ISPLTR(IX,IDIR,2) )
+ > CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this split')
+ 910 CONTINUE
+ 900 CONTINUE
+ DO 920 IX=0,NREG-1
+ IF(MIXR(IX,1,1) .NE. MIXR(IX,2,1) ) CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this mixture')
+ IF(MIXR(IX,1,2) .NE. MIXR(IX,2,2) ) CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this merging mixture')
+ 920 CONTINUE
+ IF(DAMESR(-1,1,1) .NE. DAMESR(-1,1,2) .OR.
+ > DAMESR(-1,2,1) .NE. DAMESR(-1,2,2) .OR.
+ > DAMESR(-1,3,1) .NE. DAMESR(-1,3,2) ) CALL XABORT(NAMSBR//
+ > ': Symmetry invalid with this off center')
+ ELSE
+*----
+* Reset reference geometry for turn
+*----
+ DO IX=0,NR-1
+ DAMESH(IX,4)=DAMESR(IX,4,IG)
+ ISPLT(IX,4)=ISPLTR(IX,4,IG)
+ ENDDO
+ DAMESH(NR,4)=DAMESR(NR,4,IG)
+ DAMESH(-1,4)=DAMESR(-1,4,IG)
+*----
+* Find splitted mesh dimensions
+*----
+ DO 930 IDIR=1,4
+ NMTMP=NM(ITM(IDIR,1))
+ NMT(IDIR)=NMTMP
+ NMTS(IDIR)=0
+ DO 931 IX=0,NMTMP-1
+ NMTS(IDIR)=NMTS(IDIR)+ABS(ISPLTR(IX,IDIR,1))
+ 931 CONTINUE
+ IF(NMTS(IDIR) .NE. NMS(ITM(IDIR,1))) CALL XABORT(NAMSBR//
+ > ': Global symmetry invalid with this split')
+ 930 CONTINUE
+ ENDIF
+ 1005 CONTINUE
+ ENDDO
+*----
+* Reset final mesh (center+original turn)
+*----
+ DO IDIR=1,3
+ NMTMP=NMT(IDIR)
+ DAMESH(-1:NM(IDIR),IDIR)=DZERO
+ NM(IDIR)=NMTMP
+ DDD=DZERO
+ DO IX=0,NMTMP-1
+ DDD=DDD+DAMESR(IX,IDIR,1)
+ ENDDO
+ DDD=DDD/DTWO
+ DAMESH(-1,IDIR)=DAMESR(-1,IDIR,1)
+ DAMESH(0,IDIR)=-DDD
+ DO IX=1,NMTMP
+ DAMESH(IX,IDIR)=DAMESH(IX-1,IDIR)+DAMESR(IX-1,IDIR,1)
+ ENDDO
+ DO IX=0,NMTMP
+ ISPLT(IX,IDIR)=ISPLTR(IX,IDIR,1)
+ ENDDO
+ ENDDO
+ DO IDIR=1,4
+ NMTMP=NM(IDIR)
+ NMS(IDIR)=0
+ DO IX=0,NMTMP-1
+ NMS(IDIR)=NMS(IDIR)+ABS(ISPLT(IX,IDIR))
+ ENDDO
+ ENDDO
+*----
+* Processing finished:
+* print routine closing output header if required
+* and return
+*----
+ IF(IPRINT .GE. 100) THEN
+ WRITE(IOUT,6001) NAMSBR
+ ENDIF
+*----
+* FORMATS
+*----
+*----
+* Output formats
+*----
+ 6000 FORMAT('(* Output from --',A6,'-- follows ')
+ 6001 FORMAT(' Output from --',A6,'-- completed *)')
+ 6010 FORMAT(1X,' DIMENSIONS =',5I10/1X,' ORIGINAL MESH ')
+ 6011 FORMAT(1X,A7)
+ 6012 FORMAT(5F15.9)
+ 6013 FORMAT(5I15)
+ END