summaryrefslogtreecommitdiff
path: root/Dragon/src/SYB7TR.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/SYB7TR.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/SYB7TR.f')
-rw-r--r--Dragon/src/SYB7TR.f150
1 files changed, 150 insertions, 0 deletions
diff --git a/Dragon/src/SYB7TR.f b/Dragon/src/SYB7TR.f
new file mode 100644
index 0000000..00504da
--- /dev/null
+++ b/Dragon/src/SYB7TR.f
@@ -0,0 +1,150 @@
+*DECK SYB7TR
+ SUBROUTINE SYB7TR (MNA,NRD,NZIS,NZRS,IFAC,ISYM,NUMREG,ZZIS,ZZRS,
+ 1 NZIR,NZRR,ZZIR,ZZRR)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Unfold the tracking information related to an hexagonal sectorized
+* heterogeneous cell.
+*
+*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
+* MNA number of angles in (0,$\\pi$/6).
+* NRD one plus the number of tubes in the cell.
+* NUMREG tubes indices.
+* NZIS undefined.
+* NZRS undefined.
+* IFAC undefined.
+* ISYM undefined.
+* ZZIS undefined.
+* ZZRS undefined.
+*
+*Parameters: input/output
+* NZRR length if the original/unfolded real tracking information.
+* ZZRR original/unfolded real tracking information.
+* NZIR length if the original/unfolded integer tracking information.
+* ZZIR original/unfolded integer tracking information.
+*
+*-----------------------------------------------------------------------
+*
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER MNA,NRD,NZIS,NZRS,IFAC,ISYM,NUMREG(0:5,NRD),
+ & ZZIS(NZIS),NZIR,NZRR,ZZIR(*)
+ REAL ZZRS(NZRS),ZZRR(*)
+*
+ IZRR = 0
+ IZRS = 0
+ IZIR = 0
+ IZIS = 0
+ DO IA = 1, MNA
+ ISS = IFAC
+ DO IST = 1, 3
+ ISC = 2 * MOD(ISS, 6)
+ ZZRR(IZRR+ISC+1) = ZZRS(IZRS+1)
+ ZZRR(IZRR+ISC+2) = ISYM * ZZRS(IZRS+2)
+ ISC = 2 * MOD(ISS+3, 6)
+ ZZRR(IZRR+ISC+1) = ZZRS(IZRS+1)
+ ZZRR(IZRR+ISC+2) = ISYM * ZZRS(IZRS+2)
+ ISS = ISS + ISYM
+ IZRS = IZRS + 2
+ ENDDO
+ IZRR = IZRR + 12
+*
+ IZRS = IZRS + 1
+ IZRR = IZRR + 1
+ W = ZZRS(IZRS)
+ ZZRR(IZRR) = W
+*
+ ISSDEB = IFAC
+ IZIS = IZIS + 1
+ MNT = ZZIS(IZIS)
+ IZIR = IZIR + 1
+ ZZIR(IZIR) = MNT - 1
+ IZIR = IZIR + 1
+ ZZIR(IZIR) = IFAC * ISYM
+*
+ DO ITT = 1, MNT
+ IZIS = IZIS + 1
+ NH = ZZIS(IZIS)
+ IZIS = IZIS + 1
+ NX = ZZIS(IZIS)
+ IF (NX .LT. 0) CALL XABORT('SYB7TR: NEGATIVE TRACKS.')
+ IF (NH .EQ. 0) THEN
+ ISSDEB = ISSDEB + ISYM
+ ELSE
+ ZZIR(IZIR+2) = NX
+ IZIR = IZIR + 2
+*
+ IZIR = IZIR + 1
+ ZZIR(IZIR) = MOD(ISSDEB, 6)
+*
+ ISS = ISSDEB
+ ISR = 0
+ DO IHS = 1, NH
+ ISP = ISR
+ ISR = ZZIS(IZIS+IHS)
+ IF (ISR .EQ. ISP) THEN
+ ISS = ISS + ISYM
+ ENDIF
+ ISC = MOD(ISS, 6)
+ IRC = NUMREG(ISC, ISR) + 5
+ ZZIR(IZIR+IHS) = IRC
+ ENDDO
+ IZIS = IZIS + NH
+*
+ DO ITX = 1, NX
+ IZRS = IZRS + 1
+ IZRR = IZRR + 1
+ W = ZZRS(IZRS)
+ ZZRR(IZRR) = W
+ IRC = 0
+ DO IHS = 1, NH
+ IRP = IRC
+ W = ZZRS(IZRS+IHS)
+ IRC = ZZIR(IZIR+IHS)
+ IF (IRC .EQ. IRP ) THEN
+ ZZRR(IZRR) = W + ZZRR(IZRR)
+ ELSE
+ IZRR = IZRR + 1
+ ZZRR(IZRR) = W
+ ENDIF
+ ENDDO
+ IZRS = IZRS + NH
+ ENDDO
+*
+ IRC = 0
+ JZIR = IZIR
+ DO IHS = 1, NH
+ IRP = IRC
+ IRC = ZZIR(IZIR+IHS)
+ IF (IRC .NE. IRP) THEN
+ JZIR = JZIR + 1
+ ZZIR(JZIR) = IRC
+ ENDIF
+ ENDDO
+ NHR = JZIR - IZIR
+ ZZIR(IZIR-2) = NHR
+ IZIR = JZIR + 1
+ ISC = MOD(ISS, 6)
+ ZZIR(IZIR) = ISC
+ ENDIF
+*
+ ENDDO
+ ENDDO
+*
+ NZIR = IZIR
+ NZRR = IZRR
+*
+ RETURN
+ END