summaryrefslogtreecommitdiff
path: root/Donjon/src/TINMIC.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/TINMIC.f')
-rw-r--r--Donjon/src/TINMIC.f178
1 files changed, 178 insertions, 0 deletions
diff --git a/Donjon/src/TINMIC.f b/Donjon/src/TINMIC.f
new file mode 100644
index 0000000..8fa8585
--- /dev/null
+++ b/Donjon/src/TINMIC.f
@@ -0,0 +1,178 @@
+*DECK TINMIC
+ SUBROUTINE TINMIC(IPMIC,IPMIC2,IPMIC3,NB,NCH,NW,ICH,NISO,NISO2,
+ 1 IWORK,BSH,NDENS)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Microscopic refueling to update the microlib (micro-depletion)
+*
+*Copyright:
+* Copyright (C) 2010 Ecole Polytechnique de Montreal
+*
+*Author(s):
+* M. Guyot
+*
+*Parameters: input/output
+* IPMIC Adress of the L_LIBRARY in creation mode.
+* IPMIC2 Adress of the fuel-map L_LIBRARY in read-only mode.
+* IPMIC3 Adress of the L_LIBRARY in read-only mode, containing new
+* fuel properties.
+* NB Number of bundles
+* NCH Number of channels
+* NW Vector containing new index for the refuelling
+* ICH Number of the channel to refuel
+* NISO Number of isotopes in the fuel-map microlib
+* NISO2 Number of isotopes in the third microlib
+* IWORK Useful vector for refueling
+* BSH Vector containing new mixtures after shifting
+* NDENS New isotopic densities after refueling
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPMIC,IPMIC2,IPMIC3
+ INTEGER NB,NCH,NW(NB),ICH,NISO,NISO2,IWORK(NB,2),BSH(NB)
+ REAL NDENS(NISO)
+*----
+* LOCAL VARIABLES
+*----
+ PARAMETER (IOUT=6,MAXISO=100)
+ INTEGER IB,ISO,ISO2,IMIX,I,SHT(NB),IND(MAXISO),IND2(MAXISO),I1,I2
+ CHARACTER TEXT*12,TEXT2*12
+ LOGICAL LMIX
+ TYPE(C_PTR) JPMIC2,JPMIC3
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: MIX,MIX2,TODO,TODO2,TYP,TYP2
+ INTEGER, ALLOCATABLE, DIMENSION(:,:) :: NAME,NAME2,USED,USED2
+ REAL, ALLOCATABLE, DIMENSION(:) :: DENS,DENS2,TEMP,TEMP2,VOL,VOL2
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(MIX(NISO),MIX2(NISO2),TODO(NISO),TODO2(NISO2),TYP(NISO),
+ 1 TYP2(NISO2))
+ ALLOCATE(NAME(3,NISO),NAME2(3,NISO2),USED(3,NISO),USED2(3,NISO2))
+ ALLOCATE(DENS(NISO),DENS2(NISO2),TEMP(NISO),TEMP2(NISO2),
+ 1 VOL(NISO),VOL2(NISO2))
+*----
+* RECOVER INFORMATION
+*----
+ CALL LCMGET(IPMIC2,'ISOTOPESMIX',MIX)
+ CALL LCMGET(IPMIC3,'ISOTOPESMIX',MIX2)
+ CALL LCMGET(IPMIC2,'ISOTOPERNAME',NAME)
+ CALL LCMGET(IPMIC3,'ISOTOPERNAME',NAME2)
+ CALL LCMGET(IPMIC2,'ISOTOPESUSED',USED)
+ CALL LCMGET(IPMIC3,'ISOTOPESUSED',USED2)
+ CALL LCMGET(IPMIC2,'ISOTOPESDENS',DENS)
+ CALL LCMGET(IPMIC3,'ISOTOPESDENS',DENS2)
+ CALL LCMGET(IPMIC2,'ISOTOPESTODO',TODO)
+ CALL LCMGET(IPMIC3,'ISOTOPESTODO',TODO2)
+ CALL LCMGET(IPMIC2,'ISOTOPESTYPE',TYP)
+ CALL LCMGET(IPMIC3,'ISOTOPESTYPE',TYP2)
+ CALL LCMGET(IPMIC2,'ISOTOPESTEMP',TEMP)
+ CALL LCMGET(IPMIC3,'ISOTOPESTEMP',TEMP2)
+ CALL LCMGET(IPMIC2,'ISOTOPESVOL',VOL)
+ CALL LCMGET(IPMIC3,'ISOTOPESVOL',VOL2)
+*----
+* CHECK IF THE MIXTURES TO SHIFT EXIST IN THE MICROLIB
+*----
+ DO 10 IB=1,NB
+ LMIX=.FALSE.
+ DO 15 ISO2=1,NISO2
+ IF(MIX2(ISO2).EQ.IWORK(IB,2)) THEN
+ LMIX=.TRUE.
+ ENDIF
+ 15 CONTINUE
+ IMIX=MIX2(ISO2)
+ IF(.NOT.LMIX) THEN
+ WRITE(IOUT,*) '@TINMIC: THE MIXTURE ',IMIX,' IS NOT PRESENT '
+ + //'IN THE MICROLIB FOR THE REFUEL. '
+ CALL XABORT('@TINMIC: REFUELING ERROR. ')
+ ENDIF
+ 10 CONTINUE
+*----
+* COMPUTE THE VECTORS FOR THE REFUELING
+*----
+* SHT CONTAINS THE MIXTURES OF THE CHANNEL TO SHIFT
+ SHT(:NB)=0
+ DO I=1,NB
+ SHT(I)=ICH+(I-1)*NCH
+ ENDDO
+* BSH CONTAINS THE NEW MIXTURE AFTER SHIFTING
+ DO I=1,NB
+ IF(NW(I).EQ.0) THEN
+ BSH(I)=0
+ ELSE
+ BSH(I)=SHT(NW(I))
+ ENDIF
+ ENDDO
+
+ CALL LCMGET(IPMIC,'ISOTOPESDENS',NDENS)
+
+ DO 20 IB=1,NB
+ IND(:MAXISO)=0
+ IND2(:MAXISO)=0
+ I1=0
+ I2=0
+ DO 25 ISO=1,NISO
+ IF(MIX(ISO).EQ.SHT(IB)) THEN
+ I1=I1+1
+ IF(I1.GE.MAXISO) CALL XABORT('@TINMIC: NUMBER OF ISOTOPES'
+ + //' OVERFLOW(1). ')
+ IND(I1)=ISO
+ ENDIF
+ 25 CONTINUE
+ IF(BSH(IB).EQ.0) THEN
+* THE PROPERTIES ARE RECOVERED FROM THE THIRD LIBRARY
+ DO 30 ISO2=1,NISO2
+ IF(MIX2(ISO2).EQ.IWORK(IB,2)) THEN
+ I2=I2+1
+ IF(I2.GE.MAXISO) CALL XABORT('@TINMIC: NUMBER OF ISOTOPES'
+ + //' OVERFLOW(2). ')
+ IND2(I2)=ISO2
+ ENDIF
+ 30 CONTINUE
+ IF(I1.NE.I2) CALL XABORT('@TINMIC: WRONG NUMBER OF ISOTOPES '
+ + //'IN THE NEW MIXTURE(1). ')
+ DO 35 J=1,I1
+ NDENS(IND(J))=DENS2(IND2(J))
+ WRITE(TEXT,'(3A4)') (USED(I0,IND(J)),I0=1,3)
+ WRITE(TEXT2,'(3A4)') (USED2(I0,IND2(J)),I0=1,3)
+ JPMIC3=LCMGID(IPMIC3,TEXT2)
+ CALL LCMSIX(IPMIC,TEXT,1)
+ CALL LCMEQU(JPMIC3,IPMIC)
+ CALL LCMSIX(IPMIC,' ',2)
+ 35 CONTINUE
+* THE PROPERTIES ARE RECOVERED FROM THE FUEL MAP LIBRARY
+ ELSE
+ DO 40 ISO=1,NISO
+ IF(MIX(ISO).EQ.BSH(IB)) THEN
+ I2=I2+1
+ IF(I2.GE.MAXISO) CALL XABORT('@TINMIC: NUMBER OF ISOTOPES'
+ + //' OVERFLOW(3). ')
+ IND2(I2)=ISO
+ ENDIF
+ 40 CONTINUE
+ IF(I1.NE.I2) CALL XABORT('@TINMIC: WRONG NUMBER OF ISOTOPES '
+ + //'IN THE NEW MIXTURE(2). ')
+ DO 45 J=1,I1
+ NDENS(IND(J))=DENS(IND2(J))
+ WRITE(TEXT,'(3A4)') (USED(I0,IND(J)),I0=1,3)
+ WRITE(TEXT2,'(3A4)') (USED(I0,IND2(J)),I0=1,3)
+ JPMIC2=LCMGID(IPMIC2,TEXT2)
+ CALL LCMSIX(IPMIC,TEXT,1)
+ CALL LCMEQU(JPMIC2,IPMIC)
+ CALL LCMSIX(IPMIC,' ',2)
+ 45 CONTINUE
+ ENDIF
+ 20 CONTINUE
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(VOL2,VOL,TEMP2,TEMP,DENS2,DENS)
+ DEALLOCATE(USED2,USED,NAME2,NAME)
+ DEALLOCATE(TYP2,TYP,TODO2,TODO,MIX2,MIX)
+ RETURN
+ END