summaryrefslogtreecommitdiff
path: root/Dragon/src/USSCOR.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/USSCOR.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/USSCOR.f')
-rw-r--r--Dragon/src/USSCOR.f232
1 files changed, 232 insertions, 0 deletions
diff --git a/Dragon/src/USSCOR.f b/Dragon/src/USSCOR.f
new file mode 100644
index 0000000..5d274db
--- /dev/null
+++ b/Dragon/src/USSCOR.f
@@ -0,0 +1,232 @@
+*DECK USSCOR
+ SUBROUTINE USSCOR(MAXNOR,IGRP,IPSYS,IASM,IRES,NBNRS,NIRES,NOR,
+ 1 CONR,IPPT1,IPPT2,WEIGH,TOTPT,SIGX,VOLMER)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Compute the collision probability matrix taking into account the
+* correlation effects between pairs of resonant isotopes in the same
+* energy group.
+*
+*Copyright:
+* Copyright (C) 2003 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
+* MAXNOR maximum order of the probability tables (PT).
+* IGRP energy group index.
+* IPSYS pointer to the internal microscopic cross section library.
+* builded by the self-shielding module.
+* IASM offset in IPSYS.
+* IRES index of the resonant isotope been processed.
+* NBNRS number of correlated fuel regions.
+* NIRES exact number of correlated resonant isotopes.
+* NOR exact order of the probability table.
+* CONR number density of the resonant isotopes.
+* IPPT1 pointer to LCM directory of each resonant isotope.
+* IPPT2 information related to each resonant isotope:
+* IPPT2(:,1) index of a resonant region (used with infinite
+* dilution case);
+* IPPT2(:,2:4) alias name of resonant isotope.
+* WEIGH multiband weights.
+* TOTPT base points in total xs.
+* SIGX macroscopic total xs of the non-resonant isotopes in each fuel
+* region.
+* VOLMER volumes of the resonant and non-resonant regions.
+*
+* Reference:
+* A. Hebert, "A Mutual Resonance Self-Shielding Model Consistent with
+* Ribon Subgroup Equations", Int. Mtg. on the Physics of Fuel Cycles
+* and Advanced Nuclear Systems: Global Developments. PHYSOR-2004,
+* Chicago, Illinois, April 25 - 29, 2004.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPSYS,IPPT1(NIRES)
+ INTEGER MAXNOR,IGRP,IASM,IRES,NBNRS,NIRES,NOR(NIRES),
+ 1 IPPT2(NIRES,4)
+ REAL CONR(NBNRS,NIRES),WEIGH(MAXNOR,NIRES),TOTPT(MAXNOR,NIRES),
+ 1 SIGX(NBNRS,NIRES),VOLMER(0:NBNRS)
+*----
+* LOCAL VARIABLES
+*----
+ TYPE(C_PTR) KPSYS,JPLIB1,KPLIB1,JPLIB2
+ CHARACTER TEXT12*12
+ LOGICAL LMOD
+*----
+* ALLOCATABLE ARRAYS
+*----
+ REAL, ALLOCATABLE, DIMENSION(:) :: WCOR,SIGR
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: PIJ2,PIJ3,DILW
+ REAL, ALLOCATABLE, DIMENSION(:,:,:) :: DIL,PIJ4
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(WCOR(MAXNOR**2),SIGR(NBNRS),DIL(0:NBNRS,0:NBNRS,MAXNOR),
+ 1 PIJ2(0:NBNRS,0:NBNRS),PIJ3(0:NBNRS,0:NBNRS),
+ 2 PIJ4(0:NBNRS,0:NBNRS,MAXNOR),DILW(0:NBNRS,0:NBNRS))
+*----
+* COMPUTE THE MULTIBAND DILUTION MATRICES.
+*----
+ LMOD=(VOLMER(0).EQ.0.0)
+ NQT1=NOR(IRES)
+ DO 35 I1=1,NQT1
+ DO 20 IND=1,NBNRS
+ SIGR(IND)=CONR(IND,IRES)*TOTPT(I1,IRES)
+ DO 10 JRES=1,NIRES
+ IF(JRES.NE.IRES) SIGR(IND)=SIGR(IND)+SIGX(IND,JRES)
+ 10 CONTINUE
+ 20 CONTINUE
+ KPSYS=LCMGIL(IPSYS,IASM+I1)
+ CALL LCMGET(KPSYS,'DRAGON-PAV',DIL(0,0,I1))
+ IF(LMOD) THEN
+ CALL ALINV(NBNRS,DIL(1,1,I1),NBNRS+1,IER)
+ ELSE
+ CALL ALINV(NBNRS+1,DIL(0,0,I1),NBNRS+1,IER)
+ ENDIF
+ IF(IER.NE.0) CALL XABORT('USSCOR: SINGULAR MATRIX(1).')
+ DO 30 IND=1,NBNRS
+ DIL(IND,IND,I1)=DIL(IND,IND,I1)-SIGR(IND)
+ 30 CONTINUE
+ 35 CONTINUE
+*----
+* COMPUTE THE AVERAGED COLLISION PROBABILITY MATRICES.
+*----
+ IF(NIRES.EQ.2) THEN
+ JRES=MOD(IRES,NIRES)+1
+ JPLIB1=LCMGID(IPPT1(IRES),'GROUP-PT')
+ CALL LCMLEL(JPLIB1,IGRP,ILONG1,ITYLCM)
+ JPLIB2=LCMGID(IPPT1(JRES),'GROUP-PT')
+ CALL LCMLEL(JPLIB2,IGRP,ILONG2,ITYLCM)
+ IF((ILONG1.NE.0).AND.(ILONG2.NE.0)) THEN
+ KPLIB1=LCMGIL(JPLIB1,IGRP)
+*
+* COMPUTE THE FULLY CORRELATED PIJ MATRIX.
+ WRITE(TEXT12,'(3A4)') (IPPT2(JRES,I0),I0=2,4)
+ CALL LCMGET(KPLIB1,TEXT12,WCOR)
+ NQT2=NOR(JRES)
+ DO 100 I1=1,NQT1
+ DO 40 IND=1,NBNRS
+ SIGR(IND)=CONR(IND,IRES)*TOTPT(I1,IRES)
+ 40 CONTINUE
+ KPSYS=LCMGIL(IPSYS,IASM+I1)
+ CALL LCMGET(KPSYS,'DRAGON-PAV',PIJ3(0,0))
+ CALL USSSEK(NBNRS,NQT2,LMOD,SIGR,CONR(1,JRES),WEIGH(1,JRES),
+ 1 TOTPT(1,JRES),PIJ3(0,0),DIL(0,0,I1))
+ PIJ3(0:NBNRS,0:NBNRS)=0.0
+ DO 95 I2=1,NQT2
+ WWW=WCOR((I2-1)*NQT1+I1)/WEIGH(I1,IRES)
+ DO 60 I=0,NBNRS
+ DO 50 J=0,NBNRS
+ PIJ2(I,J)=DIL(I,J,I1)
+ 50 CONTINUE
+ 60 CONTINUE
+ DO 70 I=1,NBNRS
+ PIJ2(I,I)=PIJ2(I,I)+SIGR(I)+CONR(I,JRES)*TOTPT(I2,JRES)
+ 70 CONTINUE
+ IF(LMOD) THEN
+ CALL ALINV(NBNRS,PIJ2(1,1),NBNRS+1,IER)
+ ELSE
+ CALL ALINV(NBNRS+1,PIJ2(0,0),NBNRS+1,IER)
+ ENDIF
+ IF(IER.NE.0) CALL XABORT('USSCOR: SINGULAR MATRIX(2).')
+ DO 90 I=0,NBNRS
+ DO 80 J=0,NBNRS
+ PIJ3(I,J)=PIJ3(I,J)+WWW*PIJ2(I,J)
+ 80 CONTINUE
+ 90 CONTINUE
+ 95 CONTINUE
+*
+* STORE CORRECTED PIJ MATRIX.
+ CALL LCMPUT(KPSYS,'DRAGON-PAV',(NBNRS+1)**2,2,PIJ3(0,0))
+ 100 CONTINUE
+ ENDIF
+ ELSE IF(NIRES.GT.1) THEN
+ DO 110 I1=1,NQT1
+ KPSYS=LCMGIL(IPSYS,IASM+I1)
+ CALL LCMGET(KPSYS,'DRAGON-PAV',PIJ4(0,0,I1))
+ 110 CONTINUE
+ DO 200 JRES=1,NIRES
+ JPLIB1=LCMGID(IPPT1(IRES),'GROUP-PT')
+ CALL LCMLEL(JPLIB1,IGRP,ILONG1,ITYLCM)
+ JPLIB2=LCMGID(IPPT1(JRES),'GROUP-PT')
+ CALL LCMLEL(JPLIB2,IGRP,ILONG2,ITYLCM)
+ IF((JRES.NE.IRES).AND.(ILONG1.NE.0).AND.(ILONG2.NE.0)) THEN
+ KPLIB1=LCMGIL(JPLIB1,IGRP)
+*
+* COMPUTE THE FULLY CORRELATED PIJ MATRIX.
+ WRITE(TEXT12,'(3A4)') (IPPT2(JRES,I0),I0=2,4)
+ CALL LCMGET(KPLIB1,TEXT12,WCOR)
+ NQT2=NOR(JRES)
+ DO 190 I1=1,NQT1
+ DO 130 I=0,NBNRS
+ DO 120 J=0,NBNRS
+ DILW(I,J)=DIL(I,J,I1)
+ 120 CONTINUE
+ 130 CONTINUE
+ DO 145 IND=1,NBNRS
+ SIGR(IND)=CONR(IND,IRES)*TOTPT(I1,IRES)
+ DO 140 KRES=1,NIRES
+ IF((KRES.NE.IRES).AND.(KRES.NE.JRES)) THEN
+ SIGR(IND)=SIGR(IND)+SIGX(IND,KRES)
+ ENDIF
+ 140 CONTINUE
+ 145 CONTINUE
+ CALL USSSEK(NBNRS,NQT2,LMOD,SIGR,CONR(1,JRES),WEIGH(1,JRES),
+ 1 TOTPT(1,JRES),PIJ4(0,0,I1),DILW(0,0))
+*
+ PIJ3(0:NBNRS,0:NBNRS)=0.0
+ DO 172 I2=1,NQT2
+ WWW=WCOR((I2-1)*NQT1+I1)/WEIGH(I1,IRES)
+ DO 155 I=0,NBNRS
+ DO 150 J=0,NBNRS
+ PIJ2(I,J)=DILW(I,J)
+ 150 CONTINUE
+ 155 CONTINUE
+ DO 160 I=1,NBNRS
+ PIJ2(I,I)=PIJ2(I,I)+SIGR(I)+CONR(I,JRES)*TOTPT(I2,JRES)
+ 160 CONTINUE
+ IF(LMOD) THEN
+ CALL ALINV(NBNRS,PIJ2(1,1),NBNRS+1,IER)
+ ELSE
+ CALL ALINV(NBNRS+1,PIJ2(0,0),NBNRS+1,IER)
+ ENDIF
+ IF(IER.NE.0) CALL XABORT('USSCOR: SINGULAR MATRIX(3).')
+ DO 171 I=0,NBNRS
+ DO 170 J=0,NBNRS
+ PIJ3(I,J)=PIJ3(I,J)+WWW*PIJ2(I,J)
+ 170 CONTINUE
+ 171 CONTINUE
+ 172 CONTINUE
+ KPSYS=LCMGIL(IPSYS,IASM+I1)
+ CALL LCMGET(KPSYS,'DRAGON-PAV',PIJ2(0,0))
+ DO 185 I=0,NBNRS
+ DO 180 J=0,NBNRS
+ IF(PIJ4(I,J,I1).NE.0.0) THEN
+ PIJ2(I,J)=PIJ2(I,J)*PIJ3(I,J)/PIJ4(I,J,I1)
+ ENDIF
+ 180 CONTINUE
+ 185 CONTINUE
+*
+* STORE CORRECTED PIJ MATRIX.
+ CALL LCMPUT(KPSYS,'DRAGON-PAV',(NBNRS+1)**2,2,PIJ2(0,0))
+ 190 CONTINUE
+ ENDIF
+ 200 CONTINUE
+ ENDIF
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(DILW,PIJ4,PIJ3,PIJ2,DIL,SIGR,WCOR)
+ RETURN
+ END