summaryrefslogtreecommitdiff
path: root/Dragon/src/MCGPTV.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/MCGPTV.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MCGPTV.f')
-rw-r--r--Dragon/src/MCGPTV.f332
1 files changed, 332 insertions, 0 deletions
diff --git a/Dragon/src/MCGPTV.f b/Dragon/src/MCGPTV.f
new file mode 100644
index 0000000..69fb48a
--- /dev/null
+++ b/Dragon/src/MCGPTV.f
@@ -0,0 +1,332 @@
+*DECK MCGPTV
+ SUBROUTINE MCGPTV(N2SOU,N2REG,NZP,SSYM,N3REG,N3SOU,N2D,NR2D,NANGL,
+ 1 NMU,LMCU,LMXMCU,IANGL,INDREG,NOM2D,MCUW,MCUI,Z,
+ 2 T2D,W2D,CMU,CMUI,SMU,SMUI,TMU,TMUI,WZMU,DELU,
+ 3 NOM3D,H3D,SURF,VNUM,ACFLAG)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Compute the contribution of reconstructed tracks to the numerical
+* surfaces/volumes and connection matrices for a 3D prismatic extended
+* tracking (from a 2D EXCELT tracking).
+*
+*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): R. Le Tellier
+*
+*Parameters: input
+* N2SOU number of external surfaces in the 2D tracking.
+* N2REG number of regions in the 2D tracking.
+* NZP number of z-planes.
+* SSYM symmetry flag (0=none, 1=top, 2=top and bottom).
+* N3REG number of regions in the 3D geometry.
+* N3SOU number of external surfaces in the 3D geometry.
+* N2D number of segments for this 2D track.
+* NR2D number of segments corresponding to regions for this 2D track.
+* NANGL number of plan tracking angles.
+* NMU number of polar angles.
+* LMXMCU maximum dimension for the connection matrix.
+* IANGL index of the tracking angle considered.
+* INDREG region/surface index to go from the 2D to the 3D geometry.
+* NOM2D vector containing the region number of the different segments
+* of this 2D track.
+* Z z-plan coordinates.
+* T2D vector containing the local coordinates of the segments
+* boundaries for this 2D track.
+* W2D weight for this 2D track.
+* WZMU polar quadrature weight.
+* DELU input track spacing for 3D track reconstruction.
+* ACFLAG preconditioning flag.
+*
+*Parameters: input/output
+* LMCU number of elements in the connection matrix.
+* MCUW temporary connection matrix.
+* MCUI temporary connection matrix.
+* SURF numerical surfaces.
+* VNUM numerical volumes.
+*
+*Parameters:
+* CMU undefined.
+* CMUI undefined.
+* SMU undefined.
+* SMUI undefined.
+* TMU undefined.
+* TMUI undefined.
+*
+*Parameters: scratch
+* NOM3D undefined.
+* H3D undefined.
+*
+*-----------------------------------------------------------------------
+*
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER N2SOU,N2REG,NZP,SSYM,N3REG,N3SOU,N2D,NR2D,NANGL,NMU,
+ 1 LMCU,LMXMCU,IANGL,INDREG(-N2SOU:N2REG,0:NZP+1),NOM2D(N2D),
+ 2 MCUW(LMXMCU),MCUI(LMXMCU),NOM3D(*)
+ REAL Z(0:NZP),WZMU(NMU),DELU
+ DOUBLE PRECISION W2D,T2D(0:NR2D),H3D(*),SURF(N3SOU),CMU(NMU),
+ 1 CMUI(NMU),SMU(NMU),SMUI(NMU),TMU(NMU),TMUI(NMU),
+ 2 VNUM(N3REG,NANGL,NMU,2)
+ LOGICAL ACFLAG
+*---
+* LOCAL VARIABLES
+*---
+ INTEGER IMU,NBTR,KST,IST,ILINE,I,I1,I2,K,N3D,II,ITEMP,TIN,N3DP
+ DOUBLE PRECISION CPO,CPOI,SPO,SPOI,TPO,TPOI,LTOT,DELTE,DELZE,T,Z1,
+ 1 Z2,TP,Z1P,WPO,W3D,W3DPO
+*
+ DO IMU=1,NMU
+ CPO=CMU(IMU)
+ CPOI=CMUI(IMU)
+ SPO=SMU(IMU)
+ SPOI=SMUI(IMU)
+ TPO=TMU(IMU)
+ TPOI=TMUI(IMU)
+ WPO=WZMU(IMU)
+ IF (SSYM.EQ.2) GOTO 15
+*---
+* CONSTRUCT THE 3D TRACKS WHICH ENTER THE GEOMETRY THROUGH A BOTTOM/TOP
+* SURFACE
+*---
+* length of the spatial integration interval
+ LTOT=T2D(NR2D)*CPO
+* number of 3D tracks generated for this x-y track and this polar
+* direction
+ NBTR=INT(LTOT/DELU)+1
+* effective track spacing in T
+ DELTE=T2D(NR2D)/DBLE(NBTR)
+ W3DPO=W2D*DELTE*CPO
+ W3D=WPO*W3DPO
+ T=-0.5D0*DELTE
+ KST=1
+ DO 10 ILINE=1,NBTR
+ T=T+DELTE
+ TP=T
+ DO WHILE (T2D(KST).LT.T)
+ KST=KST+1
+ ENDDO
+ K=KST
+* ---
+* positive polar sine track
+* ---
+ I1=1
+ Z1=Z(I1-1)
+ TIN=0
+ N3D=1
+ NOM3D(N3D)=INDREG(NOM2D(K+1),0)
+ H3D(N3D)=0.5D0
+ CALL MCGPT1(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I1,K,Z1,T,
+ 1 TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ SURF(-NOM3D(1))=SURF(-NOM3D(1))+W3D
+ NOM3D(1)=N3REG-NOM3D(1)
+ DO II=2,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,1)=VNUM(NOM3D(II),IANGL,IMU,1)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ IF (SSYM.EQ.1) THEN
+* the top boundary condition is a surface symmetry
+ IF (TIN.EQ.0) THEN
+* this track has encountered the top boundary -> it is reflected
+ N3DP=N3D
+ N3D=N3D-1
+ I1=I1-1
+ CALL MCGPT2(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I1,K,Z1,
+ 1 T,TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ DO II=N3DP,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,2)=VNUM(NOM3D(II),IANGL,IMU,2)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ ENDIF
+ ENDIF
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ IF(ACFLAG) THEN
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ DO II=1,N3D/2
+ ITEMP=NOM3D(II)
+ NOM3D(II)=NOM3D(N3D+1-II)
+ NOM3D(N3D+1-II)=ITEMP
+ ENDDO
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ ENDIF
+ T=TP
+ IF (SSYM.EQ.1) GOTO 10
+ K=KST
+* ---
+* negative polar sine track
+* ---
+ I2=NZP
+ Z2=Z(I2)
+ TIN=0
+ N3D=1
+ NOM3D(N3D)=INDREG(NOM2D(K+1),NZP+1)
+ H3D(N3D)=0.5D0
+ CALL MCGPT2(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I2,K,Z2,T,
+ 1 TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ SURF(-NOM3D(1))=SURF(-NOM3D(1))+W3D
+ NOM3D(1)=N3REG-NOM3D(1)
+ DO II=2,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,2)=VNUM(NOM3D(II),IANGL,IMU,2)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ IF(ACFLAG) THEN
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ DO II=1,N3D/2
+ ITEMP=NOM3D(II)
+ NOM3D(II)=NOM3D(N3D+1-II)
+ NOM3D(N3D+1-II)=ITEMP
+ ENDDO
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ ENDIF
+* ---
+ T=TP
+ 10 CONTINUE
+*---
+* CONSTRUCT THE 3D TRACKS WHICH ENTER THE GEOMETRY THROUGH A LATERAL SURFACE
+*---
+* length of the spatial integration interval
+ 15 LTOT=Z(NZP)*SPO
+! LTOT=(Z(NZP)-Z(0))*SPO with Z(0)=0.0
+* number of 3D tracks generated for this x-y track and this polar direction
+ NBTR=INT(LTOT/DELU)+1
+* effective track spacing in Z
+ DELZE=Z(NZP)/DBLE(NBTR)
+! DELZE=(Z(NZP)-Z(0))/DBLE(NBTR) with Z(0)=0.0
+ W3DPO=W2D*DELZE*SPO
+ W3D=WPO*W3DPO
+ Z1=-0.5D0*DELZE
+! Z1=Z(0)-0.5D0*DELZE with Z(0)=0.0
+ IST=1
+ DO 20 ILINE=1,NBTR
+ Z1=Z1+DELZE
+ Z1P=Z1
+ DO WHILE (Z(IST).LT.Z1)
+ IST=IST+1
+ ENDDO
+ I=IST
+* ---
+* positive polar sine track
+* ---
+ K=1
+ T=T2D(K-1)
+ TIN=1
+ N3D=1
+ N3DP=2
+ NOM3D(N3D)=INDREG(NOM2D(1),IST)
+ H3D(N3D)=0.5D0
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ 21 CONTINUE
+ CALL MCGPT1(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I,K,Z1,T,
+ 1 TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ DO II=N3DP,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,1)=VNUM(NOM3D(II),IANGL,IMU,1)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ IF (SSYM.GT.0) THEN
+* the top boundary condition is a surface symmetry
+ IF (TIN.EQ.0) THEN
+* this track has encountered the top boundary -> it is reflected
+ N3DP=N3D
+ N3D=N3D-1
+ I=I-1
+ CALL MCGPT2(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I,K,Z1,
+ 1 T,TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ DO II=N3DP,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,2)=VNUM(NOM3D(II),IANGL,IMU,2)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ IF ((SSYM.EQ.2).AND.(TIN.EQ.0)) THEN
+* the bottom boundary is a surface symmetry
+* this track has encountered the bottom boundary -> it is reflected
+ N3DP=N3D
+ N3D=N3D-1
+ I=I+1
+ GOTO 21
+ ENDIF
+ ENDIF
+ ENDIF
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ IF(ACFLAG) THEN
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ DO II=1,N3D/2
+ ITEMP=NOM3D(II)
+ NOM3D(II)=NOM3D(N3D+1-II)
+ NOM3D(N3D+1-II)=ITEMP
+ ENDDO
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ ENDIF
+ Z1=Z1P
+ I=IST
+* ---
+* negative polar sine track
+* ---
+ K=1
+ T=T2D(K-1)
+ TIN=1
+ N3D=1
+ N3DP=2
+ NOM3D(N3D)=INDREG(NOM2D(1),IST)
+ H3D(N3D)=0.5D0
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ 22 CONTINUE
+ CALL MCGPT2(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I,K,Z1,T,
+ 1 TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ DO II=N3DP,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,2)=VNUM(NOM3D(II),IANGL,IMU,2)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ IF (SSYM.EQ.2) THEN
+* the bottom boundary is a surface symmetry
+ IF (TIN.EQ.0) THEN
+* this track has encountered the bottom boundary -> it is reflected
+ N3DP=N3D
+ N3D=N3D-1
+ I=I+1
+ CALL MCGPT1(N2SOU,N2REG,NZP,NR2D,INDREG,Z,NOM2D,T2D,I,K,Z1,
+ 1 T,TIN,CPOI,SPOI,TPO,TPOI,N3D,NOM3D,H3D)
+ DO II=N3DP,N3D-1
+ VNUM(NOM3D(II),IANGL,IMU,1)=VNUM(NOM3D(II),IANGL,IMU,1)
+ 1 +H3D(II)*W3DPO
+ ENDDO
+ IF (TIN.EQ.0) THEN
+* the top boundary is a surface symmetry
+* this track has encountered the top boundary -> it is reflected
+ N3DP=N3D
+ N3D=N3D-1
+ I=I-1
+ GOTO 22
+ ENDIF
+ ENDIF
+ ENDIF
+ SURF(-NOM3D(N3D))=SURF(-NOM3D(N3D))+W3D
+ NOM3D(N3D)=N3REG-NOM3D(N3D)
+ IF(ACFLAG) THEN
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ DO II=1,N3D/2
+ ITEMP=NOM3D(II)
+ NOM3D(II)=NOM3D(N3D+1-II)
+ NOM3D(N3D+1-II)=ITEMP
+ ENDDO
+ CALL MCGCAL(N3D,NOM3D,N3REG,MCUW,MCUI,LMCU,LMXMCU)
+ ENDIF
+* ---
+ Z1=Z1P
+ 20 CONTINUE
+ ENDDO
+*
+ RETURN
+ END