summaryrefslogtreecommitdiff
path: root/Donjon/src/RESHID.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/RESHID.f')
-rw-r--r--Donjon/src/RESHID.f144
1 files changed, 144 insertions, 0 deletions
diff --git a/Donjon/src/RESHID.f b/Donjon/src/RESHID.f
new file mode 100644
index 0000000..81ed496
--- /dev/null
+++ b/Donjon/src/RESHID.f
@@ -0,0 +1,144 @@
+*DECK RESHID
+ SUBROUTINE RESHID(IPMAP,IPMTX,NX,NZ,LX,LZ,MIX,NFUEL,IMPX)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Update material index, it will store the negative fuel mixtures.
+*
+*Copyright:
+* Copyright (C) 2007 Ecole Polytechnique de Montreal.
+*
+*Author(s):
+* V. Descotes
+*
+*Parameters: input/output
+* IPMAP pointer to fuel-map information.
+* IPMTX pointer to matex information.
+* NX number of elements along x-axis in fuel map.
+* NZ number of elements along z-axis in fuel map.
+* LX number of elements along x-axis in geometry.
+* LZ number of elements along z-axis in geometry.
+* MIX renumbered index over the fuel-map geometry.
+* NFUEL number of fuel types.
+* IMPX printing index (=0 for no print).
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPMAP,IPMTX
+ INTEGER NX,NZ,LX,LZ,MIX(NX*NZ),NFUEL,IMPX
+*----
+* LOCAL VARIABLES
+*----
+ PARAMETER(IOUT=6)
+ INTEGER ISPLTY(1),NCODE(6)
+ REAL MTXSIDE,MAPSIDE
+ TYPE(C_PTR) JPMAP
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: IMAT,ISPLTX,ISPLTZ,INDX,
+ 1 FTOT,DPP,MX
+ REAL, ALLOCATABLE, DIMENSION(:) :: MAPZZ,GEOZZ
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(ISPLTX(LX),ISPLTZ(LZ),INDX(LX*LZ),FTOT(NFUEL))
+ ALLOCATE(MAPZZ(NZ+1),GEOZZ(LZ+1))
+*----
+* RECOVER GEOMETRY AND FUELMAP INFORMATION
+*----
+ CALL LCMGET(IPMTX,'SIDE',MTXSIDE)
+ CALL LCMGET(IPMTX,'MESHZ',GEOZZ)
+ JPMAP=LCMGID(IPMAP,'GEOMAP')
+ CALL LCMGET(JPMAP,'IHEX',IHEX)
+ CALL LCMGET(JPMAP,'SIDE',MAPSIDE)
+ CALL LCMGET(JPMAP,'MESHZ',MAPZZ)
+ ISPLTL=0
+ CALL LCMLEN(JPMAP,'SPLITL',ILONG,ITYLCM)
+ IF(ILONG.NE.0) CALL LCMGET(JPMAP,'SPLITL',ISPLTL)
+*----
+* UNFOLD GEOMETRY IF HEXAGONAL IN LOZENGES
+*----
+ IF((ISPLTL.GT.0).AND.(IHEX.NE.9)) THEN
+ MAXPTS=LX*LZ
+ ALLOCATE(DPP(MAXPTS),MX(NX*NZ))
+ DO 10 I=1,NX*NZ
+ MX(I)=MIX(I)
+ 10 CONTINUE
+ NXOLD=NX
+ CALL BIVALL(MAXPTS,IHEX,NXOLD,NX,DPP)
+ DO 30 KZ=1,NZ
+ DO 20 KX=1,NX
+ KEL=DPP(KX)+(KZ-1)*NXOLD
+ INDX(KX+(KZ-1)*NX)=MX(KEL)
+ 20 CONTINUE
+ 30 CONTINUE
+ DEALLOCATE(DPP,MX)
+ IHEX=9
+ ELSE
+ INDX(:NX*NZ)=MIX(:NX*NZ)
+ ENDIF
+*----
+* FUELMAP INFORMATION SPLITTING
+*----
+ NY=1
+ ITYPE=9
+ ISPLTX(:NX)=1
+ ISPLTY(:NY)=1
+ IZ=1
+ DO KM=1,NZ
+ ISPLTZ(KM)=0
+ DO JZ=IZ,LZ
+ IF(GEOZZ(JZ+1).LE.MAPZZ(KM+1)) THEN
+ ISPLTZ(KM)=ISPLTZ(KM)+1
+ ELSE
+ IZ=JZ
+ EXIT
+ ENDIF
+ ENDDO
+ ENDDO
+ MAXPTS=LX*LZ
+ LX1=LX
+ LY1=1
+ LZ1=LZ
+ CALL SPLIT0 (MAXPTS,ITYPE,NCODE,NX,NY,NZ,ISPLTX,ISPLTY,ISPLTZ,
+ 1 0,ISPLTL,NMBLK,LX1,LY1,LZ1,MAPSIDE,XXX,YYY,ZZZ,INDX,.FALSE.,
+ 2 IMPX)
+ IF(ISPLTL.GT.0) MAPSIDE=MAPSIDE/REAL(ISPLTL)
+ IF(ABS(MAPSIDE-MTXSIDE).GT.1.0E-6) CALL XABORT('RESHID: INVALID '
+ 1 //'SIDE.')
+* CHECK TOTAL NUMBER
+ ITOT=0
+ DO 40 IEL=1,LX*LZ
+ IF(INDX(IEL).NE.0)ITOT=ITOT+1
+ 40 CONTINUE
+ NTOT=0
+ CALL LCMGET(IPMTX,'FTOT',FTOT)
+ DO 50 IFUEL=1,NFUEL
+ NTOT=NTOT+FTOT(IFUEL)
+ 50 CONTINUE
+ IF(ITOT.NE.NTOT) THEN
+ WRITE(IOUT,'(/15H @RESHID: ITOT=,I8,6H NTOT=,I8)') ITOT,NTOT
+ CALL XABORT('@RESHID: FOUND DIFFERENT TOTAL NUMBER OF FUEL MI'
+ 1 //'XTURES IN FUEL-MAP AND MATEX.')
+ ENDIF
+* STORE NEGATIVE FUEL MIXTURES
+ CALL LCMLEN(IPMTX,'MAT',LENGT,ITYP)
+ ALLOCATE(IMAT(LENGT))
+ IMAT(:LENGT)=0
+ CALL LCMGET(IPMTX,'MAT',IMAT)
+ DO 60 IEL=1,LX*LZ
+ IF(INDX(IEL).NE.0)IMAT(IEL)=-INDX(IEL)
+ 60 CONTINUE
+ CALL LCMPUT(IPMTX,'MAT',LENGT,1,IMAT)
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(IMAT,GEOZZ,MAPZZ,FTOT,INDX,ISPLTZ,ISPLTX)
+ RETURN
+ END