diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/MCTCCC.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MCTCCC.f')
| -rw-r--r-- | Dragon/src/MCTCCC.f | 125 |
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 |
