summaryrefslogtreecommitdiff
path: root/Donjon/src/USPMIX.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/USPMIX.f')
-rw-r--r--Donjon/src/USPMIX.f94
1 files changed, 94 insertions, 0 deletions
diff --git a/Donjon/src/USPMIX.f b/Donjon/src/USPMIX.f
new file mode 100644
index 0000000..338a14c
--- /dev/null
+++ b/Donjon/src/USPMIX.f
@@ -0,0 +1,94 @@
+*DECK USPMIX
+ SUBROUTINE USPMIX(IPMTX,NEL,NREFL,NFUEL,MAT,RMIX,FMIX,INDX,NMIX)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Recover and check the material mixtures.
+*
+*Copyright:
+* Copyright (C) 2007 Ecole Polytechnique de Montreal.
+*
+*Author(s):
+* D. Sekki
+*
+*Parameters: input
+* IPMTX pointer to matex information.
+* NEL total number of volumes in reactor geometry.
+* NREFL total number of reflector types.
+* NFUEL total number of fuel types.
+* MAT material index from geometry.
+* RMIX reflector-type mixtures indices.
+* FMIX fuel-type mixtures indices.
+*
+*Parameters: output
+* INDX renumbered material index.
+* NMIX total number of non-virtual volumes.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPMTX
+ INTEGER NEL,NREFL,NFUEL,MAT(NEL),RMIX(NREFL),FMIX(NFUEL),
+ 1 INDX(NEL),NMIX
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: RTOT,FTOT
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(RTOT(NREFL),FTOT(NFUEL))
+*----
+* MATERIAL INDEX
+*----
+ RTOT(:NREFL)=0
+ FTOT(:NFUEL)=0
+ INDX(:NEL)=0
+ NMIX=0
+ DO IEL=1,NEL
+ IF(MAT(IEL).NE.0)THEN
+ NMIX=NMIX+1
+ INDX(IEL)=NMIX
+ ENDIF
+ ENDDO
+ IF((NFUEL.EQ.0).AND.(NREFL.EQ.0)) GOTO 20
+* CHECK MIXTURES
+ DO 10 IEL=1,NEL
+ IMIX=MAT(IEL)
+ IF(IMIX.EQ.0)GOTO 10
+ IF(NREFL.EQ.0)GOTO 5
+ DO IREFL=1,NREFL
+ IF(IMIX.EQ.RMIX(IREFL))THEN
+ RTOT(IREFL)=RTOT(IREFL)+1
+ GOTO 10
+ ENDIF
+ ENDDO
+ 5 IF(NFUEL.EQ.0)GOTO 10
+ DO IFUEL=1,NFUEL
+ IF(IMIX.EQ.FMIX(IFUEL))THEN
+ FTOT(IFUEL)=FTOT(IFUEL)+1
+ GOTO 10
+ ENDIF
+ ENDDO
+ 10 CONTINUE
+* STORAGE
+20 CALL LCMPUT(IPMTX,'MAT',NEL,1,MAT)
+ CALL LCMPUT(IPMTX,'INDEX',NEL,1,INDX)
+ IF(NREFL.NE.0) THEN
+ CALL LCMPUT(IPMTX,'RMIX',NREFL,1,RMIX)
+ CALL LCMPUT(IPMTX,'RTOT',NREFL,1,RTOT)
+ ENDIF
+ IF(NFUEL.NE.0) THEN
+ CALL LCMPUT(IPMTX,'FMIX',NFUEL,1,FMIX)
+ CALL LCMPUT(IPMTX,'FTOT',NFUEL,1,FTOT)
+ ENDIF
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(FTOT,RTOT)
+ RETURN
+ END