summaryrefslogtreecommitdiff
path: root/Donjon/src/SIMIND.f
blob: 070bb4cabd6c129254702a780e8dc2b1e87e7982 (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
*DECK SIMIND
      INTEGER FUNCTION SIMIND(IPMAP,IMPX,HCYCLE,INDCY,BURNCY)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Return the list index of an existing fuel cycle.
*
*Copyright:
* Copyright (C) 2013 Ecole Polytechnique de Montreal
*
*Author(s): 
* A. Hebert
*
*Parameters: input
* IPMAP   fuel map object
* IMPX    print parameter
* HCYCLE  cycle list directory in IPMAP
* INDCY   integer index in directory HCYCLE. INDCY=-1 if undefined at
*         input.
* BURNCY  average burnup in directory HCYCLE. BURNCY=-999.0 if undefined
*         at input.
*
*Parameters: output
* SIMIND  list index in HCYCLE
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMAP
      INTEGER IMPX,INDCY
      CHARACTER HCYCLE*12,HSMG*131
      REAL BURNCY
*----
*  LOCAL VARIABLES
*----
      TYPE(C_PTR) JPMAP,KPMAP
*
      SIMIND=0
      CALL LCMLEN(IPMAP,HCYCLE,ILONG,ITYLCM)
      IF(ILONG.EQ.0) THEN
        CALL LCMLIB(IPMAP)
        WRITE(HSMG,'(24H@SIMIND: NO CYCLE NAMED ,A12,1H.)') HCYCLE
        CALL XABORT(HSMG)
      ENDIF
      IF(INDCY.NE.-1) THEN
        IF(INDCY.GT.ILONG) CALL XABORT('@SIMIND: INDCY.GT.ILONG')
        IF(BURNCY.NE.-999.0) CALL XABORT('@SIMIND: BURNCY.NE.-999.0')
        SIMIND=INDCY
        IF(IMPX.GT.0) THEN
          JPMAP=LCMGID(IPMAP,HCYCLE)
          KPMAP=LCMGIL(JPMAP,INDCY)
          CALL LCMGET(KPMAP,'BURNAVG',BURNAVG)
          WRITE(6,100) INDCY,HCYCLE,BURNAVG
        ENDIF
        RETURN
      ELSE IF((INDCY.EQ.-1).AND.(BURNCY.EQ.-999.0)) THEN
        SIMIND=ILONG
        IF(IMPX.GT.0) THEN
          JPMAP=LCMGID(IPMAP,HCYCLE)
          KPMAP=LCMGIL(JPMAP,ILONG)
          CALL LCMGET(KPMAP,'BURNAVG',BURNAVG)
          WRITE(6,100) ILONG,HCYCLE,BURNAVG
        ENDIF
        RETURN
      ENDIF
*
      DELTA=1.0E10
      BURNK=0.0
      JPMAP=LCMGID(IPMAP,HCYCLE)
      DO I=1,ILONG
        KPMAP=LCMGIL(JPMAP,I)
        CALL LCMLEN(KPMAP,'BURNAVG',ILONG,ITYLCM)
        IF(ILONG.EQ.0) CYCLE
        CALL LCMGET(KPMAP,'BURNAVG',BURNAVG)
        IF(ABS(BURNAVG-BURNCY).LT.DELTA) THEN
          SIMIND=I
          DELTA=ABS(BURNAVG-BURNCY)
          BURNK=BURNAVG
        ENDIF
      ENDDO
      IF(DELTA.GT.2.0) THEN
        WRITE(HSMG,'(47H@SIMIND: UNABLE TO FIND AN EXISTING AVERAGE BUR,
     >  12HNUP EQUAL TO,1P,E12.4,10H IN CYCLE ,A12,1H.)') BURNCY,HCYCLE
        CALL XABORT(HSMG)
      ENDIF
      IF(IMPX.GT.0) WRITE(6,100) SIMIND,HCYCLE,BURNK
      RETURN
*
  100 FORMAT(/40H SIMIND: RECOVER LIST INDEX IN LIST ITEM,I3,7H OF CYC,
     > 3HLE ,A12,10H AT BURNUP,1P,E12.4,8H MW-D/T./)
      END