summaryrefslogtreecommitdiff
path: root/Dragon/src/MRGVON.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/MRGVON.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/MRGVON.f')
-rw-r--r--Dragon/src/MRGVON.f208
1 files changed, 208 insertions, 0 deletions
diff --git a/Dragon/src/MRGVON.f b/Dragon/src/MRGVON.f
new file mode 100644
index 0000000..587c1fa
--- /dev/null
+++ b/Dragon/src/MRGVON.f
@@ -0,0 +1,208 @@
+*DECK MRGVON
+ SUBROUTINE MRGVON(IUPD ,NSOUTO,NVOUTO,NSOUTN,NVOUTN,
+ > NETSUR,NETVOL,NUNN ,MAXMN ,
+ > IMERGE,MATO ,VOLO ,MATRTO,
+ > MATN ,VOLN ,KEYN ,MATRTN,
+ > NEXMAT,NEXKEY)
+*
+*----------
+*
+*Purpose:
+* Merge volume and surface for NXT geometry.
+*
+*Copyright:
+* Copyright (C) 2011 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):
+* G. Harrisson
+*
+*Parameters: input
+* IUPD type of merge required:
+* IUPD(1) for region merge;
+* IUPD(2) for surface merge;
+* IUPD(3) for material merge;
+* IUPD(4) for albedo merge.
+* NSOUTO old number of surfaces.
+* NVOUTO old number of regions.
+* NSOUTN new number of surfaces.
+* NVOUTN new number of regions.
+* NETVOL number of original regions.
+* NETSUR number of original surfaces.
+* NUNN new number of unknowns.
+* IMERGE merged position.
+* MATO old material per region.
+* VOLO old volumes.
+* MATRTO old B.C. conditions.
+*
+*Parameters: input/output
+* NEXMAT old/new NXTRecord MATALB for albedo number modification.
+* NEXKEY old/new KEYMRG index for NXT.
+*
+*Parameters: output
+* MAXMN new maximum number of mixture.
+* MATN new material per region.
+* VOLN new volumes.
+* KEYN new keyflux.
+* MATRTN new B.C. conditions.
+*
+*----------
+*
+ IMPLICIT NONE
+ INTEGER IOUT
+ CHARACTER NAMSBR*6
+ PARAMETER (IOUT=6,NAMSBR='MRGVON')
+*----
+* ROUTINE PARAMETERS
+*----
+ INTEGER IUPD(4),NSOUTO,NVOUTO,NSOUTN,NVOUTN,
+ > NETSUR,NETVOL,NUNN,MAXMN
+ INTEGER IMERGE(-NSOUTO:NVOUTO),
+ > MATO(NVOUTO),MATRTO(NSOUTO),
+ > MATN(NVOUTN),KEYN(NUNN),MATRTN(NSOUTN),
+ > NEXMAT(-NETSUR:NETVOL),
+ > NEXKEY(-NETSUR:NETVOL)
+ REAL VOLO(NVOUTO),VOLN(NVOUTN)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER IVSN,IVSO
+ DOUBLE PRECISION DVOL
+*----
+* Allocatable arrays
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: IDABL
+*----
+* CHANGE ORIGINAL AND/OR FINAL MATERIAL AND ORIGINAL ALBEDO IF REQUESTED
+*----
+ IF(IUPD(3) .GT. 0) THEN
+ WRITE(IOUT,6300)
+ ELSE IF(IUPD(3) .LT. 0) THEN
+ WRITE(IOUT,6400)
+ ELSE IF(IUPD(4) .GT. 0) THEN
+ WRITE(IOUT,6500)
+ ENDIF
+*----
+* MERGE MATERIAL VOLUME AND KEY
+*----
+ IF(IUPD(1) .GT. 0) THEN
+ DO IVSN=1,NVOUTN
+ MATN(IVSN)=0
+ DVOL=0.0D0
+ DO IVSO=1,NVOUTO
+ IF(IMERGE(IVSO) .EQ. IVSN) THEN
+ IF(MATN(IVSN) .EQ. 0) THEN
+ MATN(IVSN)=MATO(IVSO)
+ ELSE IF(MATN(IVSN) .NE. MATO(IVSO))THEN
+ WRITE(IOUT,6000) NAMSBR,IVSN,MATN(IVSN),IVSO,MATO(IVSO)
+ CALL XABORT(NAMSBR//
+ > ': MATERIAL INCOMPATIBLE FOR MERGE')
+ ENDIF
+ DVOL=DVOL+DBLE(VOLO(IVSO))
+ ENDIF
+ ENDDO
+ VOLN(IVSN)=REAL(DVOL)
+ KEYN(IVSN)=IVSN
+ ENDDO
+ DO IVSN=NVOUTN+1,NUNN
+ KEYN(IVSN)=0
+ ENDDO
+ DO IVSN=1,NETVOL
+ DO IVSO=1,NVOUTO
+ IF(NEXKEY(IVSN) .EQ. IVSO) THEN
+ NEXKEY(IVSN)=IMERGE(IVSO)
+ GO TO 100
+ ENDIF
+ ENDDO
+ 100 CONTINUE
+ ENDDO
+ ELSE
+*----
+* NO MERGE TRANSFER INFORMATION TO NEW VECTORS
+*----
+ DO IVSO=1,NVOUTO
+ MATN(IVSO)=MATO(IVSO)
+ VOLN(IVSO)=VOLO(IVSO)
+ ENDDO
+ ENDIF
+*----
+* FIND NEW MAXIMUM NUMBER OF MIXTURE
+*----
+ MAXMN=0
+ DO IVSN=1,NVOUTN
+ MAXMN=MAX(MAXMN,MATN(IVSN))
+ ENDDO
+*----
+* MERGE REFLECTION/TRANSMISSION MATRIX
+*----
+ IF(IUPD(2).EQ.0) THEN
+ DO IVSN=1,NSOUTO
+ MATRTN(IVSN)=MATRTO(IVSN)
+ ENDDO
+ ELSE
+ DO IVSN=-NSOUTN,-1,1
+ DO IVSO=-NSOUTO,-1,1
+ IF(IMERGE(IVSO).EQ.IVSN) THEN
+ MATRTN(-IVSN)=-IMERGE(-MATRTO(-IVSO))
+ GO TO 110
+ ENDIF
+ ENDDO
+ 110 CONTINUE
+ ENDDO
+*----
+* TEST IF MATRTN IS COHERENT
+*----
+ DO IVSN=1,NSOUTN
+ IVSO=MATRTN(IVSN)
+ IF(MATRTN(IVSO).NE.IVSN) THEN
+ CALL XABORT(NAMSBR//
+ > ': SURFACES BC INCOMPATIBLE FOR MERGE')
+ ENDIF
+ ENDDO
+ DO IVSN=-1,-NETSUR,-1
+ DO IVSO=-1,-NSOUTO,-1
+ IF(NEXKEY(IVSN) .EQ. IVSO) THEN
+ NEXKEY(IVSN)=IMERGE(IVSO)
+ GO TO 120
+ ENDIF
+ ENDDO
+ 120 CONTINUE
+ ENDDO
+*----
+* MERGING SURFACES WITH DIFFERENT ALBEDO NUMBER
+* USEFUL TO ACHIEVE SYME SYMMETRY
+*----
+ ALLOCATE(IDABL(NSOUTN))
+ IDABL(:NSOUTN)=0
+ DO IVSN=1,NSOUTN
+ DO IVSO=1,NETSUR
+ IF (IMERGE(-IVSO) .EQ. -IVSN) THEN
+ IF (IDABL(IVSN) .EQ. 0) THEN
+ IDABL(IVSN)=NEXMAT(-IVSO)
+ ELSE
+ NEXMAT(-IVSO)=IDABL(IVSN)
+ ENDIF
+ ENDIF
+ ENDDO
+ ENDDO
+ DEALLOCATE(IDABL)
+ ENDIF
+ RETURN
+*----
+* FORMATS
+*----
+ 6000 FORMAT(' ------ ABORT IN ROUTINE ',A6,' ------'/
+ > ' MATERIAL INCOMPATIBLE FOR MERGE '/
+ > ' NEW REGION = ',I10,5X,'MATERIAL =',I10/
+ > ' OLD REGION = ',I10,5X,'MATERIAL =',I10/
+ > ' ----------------------------------------')
+ 6300 FORMAT(' ***** WARNING: OPTION OLDM IS INVALID FOR GEOMETRIES'/
+ > ' TRACKED WITH NXT:. ORIGINAL MIXTURES ARE USED')
+ 6400 FORMAT(' ***** WARNING: OPTION NEWM IS INVALID FOR GEOMETRIES'/
+ > ' TRACKED WITH NXT:. ORIGINAL MIXTURES ARE USED')
+ 6500 FORMAT(' ***** WARNING: OPTION ALBE IS INVALID FOR GEOMETRIES'/
+ > ' TRACKED WITH NXT:. ORIGINAL ALBEDO ARE USED')
+ END