summaryrefslogtreecommitdiff
path: root/Dragon/src/EDIMAX.f
blob: b9d8436175b84e6f1ca18a99511ed1e3f9ec026c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
*DECK EDIMAX
      SUBROUTINE EDIMAX(NBISO,ISONAM,MIX,IPRINT,NREGIO,NMERGE,MATCOD,
     1 IMERGE,LSISO,LISO,MAXISO)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute the number of homogenized/condensed isotopes in the output
* microlib.
*
*Copyright:
* Copyright (C) 2017 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
* NBISO   number of isotopes in the input microlib.
* ISONAM  local names of NBISO isotopes:
*         chars 1 to 8  is the local isotope name;
*         chars 9 to 12 is a suffix function of the mix number.
* MIX     mixture number associated with each isotope.
* IPRINT  print index.
* NREGIO  number of volumes.
* NMERGE  number of merged regions.
* MATCOD  mixture index per volume.
* IMERGE  index of merged regions.
* LSISO   flag for isotopes saved.
* LISO    =.TRUE. if we want to keep all the isotopes after 
*         homogeneization.
*
*Parameters: output
* MAXISO  number of homogenized/condensed isotopes in the output
*         microlib.
*
*-----------------------------------------------------------------------
*
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER   NBISO,ISONAM(3,NBISO),MIX(NBISO),IPRINT,NREGIO,NMERGE,
     1          MATCOD(NREGIO),IMERGE(NREGIO),LSISO(NBISO),MAXISO
      LOGICAL   LISO
*----
*  LOCAL VARIABLES
*----
      LOGICAL    LOGIC
*----
*  ALLOCATABLE ARRAYS
*----
      LOGICAL, ALLOCATABLE, DIMENSION(:) :: MASK
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(MASK(NBISO))
*
      JJISO=0
      IF(IPRINT.GT.5) THEN
        WRITE(6,'(/34H EDIMAX: MERGING FLAG PER ISOTOPE:/(1X,20I6))')
     1  (LSISO(I),I=1,NBISO)
      ENDIF
      DO 70 INM=1,NMERGE
      MASK(:NBISO)=.FALSE.
      DO 60 ISO=1,NBISO
      IF(MASK(ISO).OR.(LSISO(ISO).EQ.0)) GO TO 60
      DO 10 IREGIO=1,NREGIO
      IF((IMERGE(IREGIO).EQ.INM).AND.(MATCOD(IREGIO).EQ.MIX(ISO)))
     1 GO TO 20
   10 CONTINUE
      GO TO 60
   20 LOGIC=.FALSE.
      DO 50 IREGIO=1,NREGIO
      MATNUM=MATCOD(IREGIO)
      IF(IMERGE(IREGIO).EQ.INM) THEN
         DO 40 JSO=ISO,NBISO
         IF((ISONAM(1,ISO).EQ.ISONAM(1,JSO)).AND.
     1      (ISONAM(2,ISO).EQ.ISONAM(2,JSO)).AND.
     2      (MATNUM.EQ.MIX(JSO)).AND.(LSISO(JSO).NE.0)) THEN
            IF(LISO) THEN
              IF(ISONAM(3,ISO).EQ.ISONAM(3,JSO)) GOTO 30
              GOTO 40
            ENDIF
   30       LOGIC=.TRUE.
            MASK(JSO)=.TRUE.
            GO TO 40
         ENDIF
   40    CONTINUE
      ENDIF
   50 CONTINUE
      IF(LOGIC) JJISO=JJISO+1
   60 CONTINUE
   70 CONTINUE
      MAXISO=JJISO
      IF(IPRINT.GT.1) WRITE(6,100) MAXISO
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(MASK)
      RETURN
  100 FORMAT(/53H EDIMAX: NUMBER OF HOMOGENIZED/CONDENSED ISOTOPES IN ,
     1 20HTHE OUTPUT MICROLIB=,I8)
      END