summaryrefslogtreecommitdiff
path: root/Dragon/src/COMISO.f
blob: b308b4c9e39d4ce6c7ec474f19a6087cd1a7af71 (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
*DECK COMISO
      SUBROUTINE COMISO(ITYP,MAXISO,IPLIB,NISO,NOMISO,NOMEVO,TYPISO)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover the names of the isotopes stored in a microlib.
*
*Copyright:
* Copyright (C) 2007 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
* ITYP    type of operation:
*         =0:  check the values of the isotope names and types;
*         =-1: recover all isotopes;
*         =-2: recover fissiles isotopes;
*         =-3: recover fission products;
*         >0:  recover all isotopes in mixture ITYP.
* MAXISO  dimension of arrays NOMISO and TYPISO.
* IPLIB   pointer to the microlib (L_LIBRARY signature).
*
*Parameters: input/output
* NISO    number of particularized isotopes.
* NOMISO  alias names of the particularized isotopes.
*
*Parameters: output
* NOMEVO  library names of the particularized isotopes.
* TYPISO  type of each isotope:
*         =1: the isotope is not fissile and not a fission product;
*         =2: the isotope is fissile;
*         =3: the isotope is a fission product.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPLIB
      INTEGER ITYP,MAXISO,NISO,TYPISO(MAXISO)
      CHARACTER NOMISO(MAXISO)*(*),NOMEVO(MAXISO)*12
*----
*  LOCAL VARIABLES
*----
      PARAMETER (NSTATE=40)
      CHARACTER HNAME*20
      INTEGER ISTATE(NSTATE)
*----
*  ALLOCATABLE ARRAYS
*----
      INTEGER, ALLOCATABLE, DIMENSION(:) :: ISUSED,ISNEVO,ISMIX,ISTYP
*
      IF(.NOT.C_ASSOCIATED(IPLIB)) RETURN
      CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
      NBISOT=ISTATE(2)
      ALLOCATE(ISUSED(3*NBISOT),ISNEVO(3*NBISOT),ISMIX(NBISOT),
     1 ISTYP(NBISOT))
      CALL LCMGET(IPLIB,'ISOTOPESUSED',ISUSED)
      CALL LCMGET(IPLIB,'ISOTOPERNAME',ISNEVO)
      CALL LCMGET(IPLIB,'ISOTOPESMIX',ISMIX)
      CALL LCMGET(IPLIB,'ISOTOPESTYPE',ISTYP)
      IF(ITYP.EQ.0) THEN
         DO 15 ISOT=1,NBISOT
         WRITE(HNAME,'(2A4)') (ISUSED((ISOT-1)*3+I0),I0=1,2)
         DO 10 I=1,NISO
         IF(NOMISO(I).EQ.HNAME) THEN
            TYPISO(I)=MAX(TYPISO(I),ISTYP(ISOT))
            WRITE(NOMEVO(I),'(3A4)') (ISNEVO((ISOT-1)*3+I0),I0=1,3)
         ENDIF
   10    CONTINUE
   15    CONTINUE
         DO 20 I=1,NISO
         IF(TYPISO(I).EQ.0) THEN
            HNAME=NOMISO(I)
            CALL XABORT('COMISO: UNABLE TO FIND ISOTOPE '//TRIM(HNAME)//
     1      ' IN THE MICROLIB.')
         ENDIF
   20    CONTINUE
      ELSE
         DO 40 ISOT=1,NBISOT
         WRITE(HNAME,'(2A4)') (ISUSED((ISOT-1)*3+I0),I0=1,2)
         DO 30 I=1,NISO
         IF(NOMISO(I).EQ.HNAME) GO TO 40
   30    CONTINUE
         IMIX=ISMIX(ISOT)
         JTYP=ISTYP(ISOT)
         IF((ITYP.EQ.-1).OR.(ITYP.EQ.-JTYP).OR.(ITYP.EQ.IMIX)) THEN
            NISO=NISO+1
            NOMISO(NISO)=HNAME
            WRITE(NOMEVO(NISO),'(3A4)') (ISNEVO((ISOT-1)*3+I0),I0=1,3)
            TYPISO(NISO)=0
         ENDIF
   40    CONTINUE
      ENDIF
      DEALLOCATE(ISTYP,ISMIX,ISNEVO,ISUSED)
      RETURN
      END