summaryrefslogtreecommitdiff
path: root/Dragon/src/MCGFFIT.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/MCGFFIT.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MCGFFIT.f')
-rw-r--r--Dragon/src/MCGFFIT.f124
1 files changed, 124 insertions, 0 deletions
diff --git a/Dragon/src/MCGFFIT.f b/Dragon/src/MCGFFIT.f
new file mode 100644
index 0000000..881abdc
--- /dev/null
+++ b/Dragon/src/MCGFFIT.f
@@ -0,0 +1,124 @@
+*DECK MCGFFIT
+ SUBROUTINE MCGFFIT(SUBSCH,K,KPN,M,N,H,NOM,NZON,XST,S,NREG,KEYFLX,
+ 1 KEYCUR,F,B,W,OMEGA2,IDIR,NSOUT,XSI)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Solution of transport equation on a track
+* ray-tracing (isotropic scattering case,'MOCC/MCI'
+* integration strategy).
+*
+*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): I. Suslov and R. Le Tellier
+*
+*Parameters: input
+* SUBSCH Track coefficients calculation subroutine.
+* K total number of volumes for which specific values
+* of the neutron flux and reactions rates are required.
+* KPN total number of unknowns in vectors F.
+* M number of material mixtures.
+* N number of elements in the current track.
+* H vector containing the lenght of the different segments of this
+* track.
+* NOM vector containing the region number of the different segments
+* of this track.
+* NZON index-number of the mixture type assigned to each volume.
+* XST macroscopic total cross section.
+* S total source vector.
+* NREG number of volumes.
+* KEYFLX position of flux elements in PHI vector.
+* KEYCUR position of current elements in PHI vector.
+* W weight associated with this track.
+* OMEGA2 square x, y and z-component of the direction
+* Omega for 2D geometry.
+* IDIR direction of fundamental current for TIBERE with MoC
+* (=0,1,2,3).
+* NSOUT number of outer surfaces.
+* XSI x,y and z component of the shape parameter for TIBERE.
+*
+*Parameters: input/output
+* F vector containing the zonal scalar flux.
+*
+*Parameters: scratch
+* B undefined.
+*
+*-----------------------------------------------------------------------
+*
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER K,KPN,M,N,NOM(N),NZON(K),NREG,KEYFLX(NREG,1),
+ 1 KEYCUR(K-NREG),IDIR
+ REAL XST(0:M)
+ DOUBLE PRECISION W,H(N),S(KPN),F(KPN),B(N),OMEGA2(3)
+ INTEGER NSOUT
+ DOUBLE PRECISION XSI(NSOUT)
+ EXTERNAL SUBSCH
+*---
+* LOCAL VARIABLES
+*---
+ DOUBLE PRECISION F0,RP,RM,WW,OMG2D,AP,AM
+ INTEGER I,J,NOMI,IND,IND1,INDN,NOMJ,INDC
+*
+ WW=DBLE(W)
+*----
+* Calculation coefficients for this track.
+*----
+* MCGSCAT: Step-Characteristics Scheme with Tabulated Exponentials
+* MCGDDFT: Diamond-Differencing Scheme
+* MCGSCET: Step-Characteristics Scheme with Exact Exponentials
+ CALL SUBSCH(N,K,M,NOM,NZON,H,XST,B)
+*----
+* Summation along the track in both directions
+*----
+* incoming flux in + direction
+ OMG2D=OMEGA2(IDIR)/3.0D0
+ IND1=KEYCUR(-NOM(1))
+ RP=S(IND1)
+* incoming flux in - direction
+ INDN=KEYCUR(-NOM(N))
+ RM=S(INDN)
+ IF(IDIR.GT.0) THEN
+ AP=OMEGA2(IDIR)/XSI(IND1-NREG)
+ AM=OMEGA2(IDIR)/XSI(INDN-NREG)
+ ENDIF
+ DO I=2,N-1
+* + direction
+ NOMI=NOM(I)
+ F0=B(I)*(RP-S(NOMI))
+ RP=RP-F0
+ IND=KEYFLX(NOMI,1)
+ F(IND)=F(IND)+F0*WW
+ INDC=KPN/2+IND
+* Calculate Xi, Yi and Zi for TIBERE
+ IF(IDIR.GE.1) THEN
+ F(INDC)=F(INDC)+F0*WW*OMG2D
+ ENDIF
+* - direction
+ J=N+1-I
+ NOMJ=NOM(J)
+ F0=B(J)*(RM-S(NOMJ))
+ RM=RM-F0
+ IND=KEYFLX(NOMJ,1)
+ F(IND)=F(IND)+F0*WW
+ INDC=KPN/2+IND
+* Calculate Xi, Yi and Zi for TIBERE
+ IF(IDIR.GE.1) THEN
+ F(INDC)=F(INDC)+F0*WW*OMG2D
+ ENDIF
+ ENDDO
+* outgoing flux in + direction
+ F(INDN)=F(INDN)+RP*WW
+* outgoing flux in - direction
+ F(IND1)=F(IND1)+RM*WW
+*
+ RETURN
+ END