summaryrefslogtreecommitdiff
path: root/Dragon/src/MCTCCC.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/MCTCCC.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MCTCCC.f')
-rw-r--r--Dragon/src/MCTCCC.f125
1 files changed, 125 insertions, 0 deletions
diff --git a/Dragon/src/MCTCCC.f b/Dragon/src/MCTCCC.f
new file mode 100644
index 0000000..62dd8a9
--- /dev/null
+++ b/Dragon/src/MCTCCC.f
@@ -0,0 +1,125 @@
+*DECK MCTCCC
+ SUBROUTINE MCTCCC(NDIM,ITRN,CELLPO,ODIR,POS,ODIRC,POSC)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Change global coordinates to turned cell coordinates
+* (adapted from NXTRTL.f).
+*
+*Copyright:
+* Copyright (C) 2008 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. Le Tellier
+*
+*Parameters: input
+* NDIM dimensions of problem.
+* ITRN geometry original turn number.
+* CELLPO cell global coordinates.
+* ODIR search (octant) direction in global geometry.
+* POS global coordinates.
+*
+*Parameters: output
+* POSC final coordinates.
+* ODIRC search (octant) direction in cell.
+*
+*-----------------------------------------------------------------------
+*
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER NDIM,ITRN,ODIR(3),ODIRC(3)
+ DOUBLE PRECISION CELLPO(3,2),POS(3),POSC(3)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER IDIR,IKT
+ DOUBLE PRECISION POSO(3)
+*----
+* CHANGE COORDINATES TO LOCAL CELL COORDINATES (ORIGIN=CELL CENTER)
+*----
+ DO IDIR=1,NDIM
+ POSO(IDIR)=POS(IDIR)
+ 1 -0.5D0*(CELLPO(IDIR,1)+CELLPO(IDIR,2))
+ ENDDO
+*----
+* CHANGE COORDINATES ACCORDING TO TURN
+*----
+* Z AXIS REFLECTION FOR 3-D GEOMETRY
+ IKT=ITRN
+ IF(NDIM .EQ. 3) THEN
+ IF(ITRN .GT. 12 ) THEN
+ IKT=IKT-12
+ POSC(NDIM)=-POSO(NDIM)
+ ODIRC(NDIM)=-ODIR(NDIM)
+ ELSE
+ POSC(NDIM)=POSO(NDIM)
+ ODIRC(NDIM)=ODIR(NDIM)
+ ENDIF
+ ENDIF
+ IF(IKT .EQ. 1) THEN
+* NO TURN IN X-Y PLANE
+ DO IDIR=1,2
+ POSC(IDIR)=POSO(IDIR)
+ ODIRC(IDIR)=ODIR(IDIR)
+ ENDDO
+ ELSE IF(IKT .EQ. 2) THEN
+* ROTATION OF -PI/2 OF GEOMETRY IMPLIES A ROTATION
+* OF PI/2 OF LINE.
+ POSC(1)=-POSO(2)
+ POSC(2)= POSO(1)
+ ODIRC(1)=-ODIR(2)
+ ODIRC(2)= ODIR(1)
+ ELSE IF(IKT .EQ. 3) THEN
+* ROTATION OF PI OF GEOMETRY IMPLIES A ROTATION
+* OF -PI OF LINE.
+ POSC(1)=-POSO(1)
+ POSC(2)=-POSO(2)
+ ODIRC(1)=-ODIR(1)
+ ODIRC(2)=-ODIR(2)
+ ELSE IF(IKT .EQ. 4) THEN
+* ROTATION OF -3*PI/2 OF GEOMETRY IMPLIES A ROTATION
+* OF 3PI/2 OF LINE.
+ POSC(1)= POSO(2)
+ POSC(2)=-POSO(1)
+ ODIRC(1)= ODIR(2)
+ ODIRC(2)=-ODIR(1)
+ ELSE IF(IKT .EQ. 5) THEN
+* REFLECTION WITH RESPECT TO AXIS // TO Y
+ POSC(1)=-POSO(1)
+ POSC(2)= POSO(2)
+ ODIRC(1)=-ODIR(1)
+ ODIRC(2)= ODIR(2)
+ ELSE IF(IKT .EQ. 6) THEN
+* ROTATION OF PI/2 FOLLOWED BY
+* REFLECTION WITH RESPECT TO AXIS // TO Y
+* IMPLIES REFLECTION WITH RESPECT TO AXIS // TO Y
+* FOLLOWED BY A ROTATION OF -PI/2 OF LINE.
+ POSC(1)= POSO(2)
+ POSC(2)= POSO(1)
+ ODIRC(1)= ODIR(2)
+ ODIRC(2)= ODIR(1)
+ ELSE IF(IKT .EQ. 7) THEN
+* REFLECTION WITH RESPECT TO AXIS // TO X
+ POSC(1)= POSO(1)
+ POSC(2)=-POSO(2)
+ ODIRC(1)= ODIR(1)
+ ODIRC(2)=-ODIR(2)
+ ELSE IF(IKT .EQ. 8) THEN
+* ROTATION OF PI/2 FOLLOWED BY
+* REFLECTION WITH RESPECT TO AXIS // TO X
+* IMPLIES REFLECTION WITH RESPECT TO AXIS // TO X
+* FOLLOWED BY A ROTATION OF -PI/2 OF LINE.
+ POSC(1)=-POSO(2)
+ POSC(2)=-POSO(1)
+ ODIRC(1)=-ODIR(2)
+ ODIRC(2)=-ODIR(1)
+ ENDIF
+*
+ RETURN
+ END