summaryrefslogtreecommitdiff
path: root/Donjon/src/CREGET.f
blob: 974da1ebb2685d2fa8bfd07db6bcde86633f47ad (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
*DECK CREGET
      SUBROUTINE CREGET(IPMAP,NCH,NB,IBTYP,IMPX,BRN0,BRN1,FMIX,ZONEDP,
     1 IVARTY,VARVAL)
*
*-----------------------------------------------------------------------
*
*Purpose:
* recover the necessary information from the fuel-map object.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): D. Sekki, A. Hebert
*
*Parameters: input
* IPMAP   pointer to the fuel-map information.
* NCH     number of reactor channels.
* NB      number of fuel bundles per channel.
* IBTYP   type of interpolation:
*         =0 not provided;
*         =1 time-average;
*         =2 instantaneous;
*         =3 derivative with respect to a single exit burnup.
* IMPX    printing index (=0 for no print).
* IVARTY  index of the exit burnup used to compute derivatives;
*         used if IBTYP=3.
*
*Parameters: output
* FMIX    fuel mixture indices per fuel bundle.
* BRN0    contains either low burnup integration limits or 
*         instantaneous burnups per fuel bundle.
* BRN1    upper burnup integration limits per fuel bundle.
* VARVAL  single exit burnup; used if IBTYP=3.
* ZONEDP  switch related to Chambon formula.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMAP
      INTEGER NCH,NB,IBTYP,IMPX,FMIX(NCH,NB),ZONEDP(NCH,NB),IVARTY
      REAL BRN0(NCH,NB),BRN1(NCH,NB),VARVAL
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6,NSTATE=40)
      INTEGER ISTATE(NSTATE)
      INTEGER, ALLOCATABLE, DIMENSION(:) :: IZONE
      REAL, ALLOCATABLE, DIMENSION(:) :: VARC
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(IZONE(NCH))
*
      FMIX(:NCH,:NB)=0
      BRN0(:NCH,:NB)=0.0
      BRN1(:NCH,:NB)=0.0
      CALL LCMGET(IPMAP,'FLMIX',FMIX)
      IF(IBTYP.EQ.0) THEN
         CALL LCMGET(IPMAP,'STATE-VECTOR',ISTATE)
         IBTYP=ISTATE(5)
      ENDIF
*----
*  TIME-AVERAGE
*----
      IF(IBTYP.EQ.1)THEN
*       LOW BURNUP LIMITS
        CALL LCMLEN(IPMAP,'BURN-BEG',LENGT,ITYP)
        IF(LENGT.EQ.0)CALL XABORT('@CREGET: MISSI'
     1   //'NG BURN-BEG VALUES IN FUEL MAP.')
        CALL LCMGET(IPMAP,'BURN-BEG',BRN0)
*       UPPER BURNUP LIMITS
        CALL LCMLEN(IPMAP,'BURN-END',LENGT,ITYP)
        IF(LENGT.EQ.0)CALL XABORT('@CREGET: MISSI'
     1   //'NG BURN-END VALUES IN FUEL MAP.')
        CALL LCMGET(IPMAP,'BURN-END',BRN1)
        IF(IMPX.GT.0)WRITE(IOUT,1000)
*----
*  INSTANTANEOUS
*----
      ELSEIF(IBTYP.EQ.2)THEN
        CALL LCMLEN(IPMAP,'BURN-INST',LENGT,ITYP)
        IF(LENGT.EQ.0)CALL XABORT('@CREGET: MISSI'
     1   //'NG BURN-INST VALUES IN FUEL MAP.')
        CALL LCMGET(IPMAP,'BURN-INST',BRN0)
        IF(IMPX.GT.0)WRITE(IOUT,1001)
*----
*  SINGLE EXIT BURNUP
*----
      ELSEIF(IBTYP.EQ.3)THEN
        IF(IVARTY.EQ.0)CALL XABORT('@CREGET: IVARTY NOT SET.')
*       LOW BURNUP LIMITS
        CALL LCMLEN(IPMAP,'BURN-BEG',LENGT,ITYP)
        IF(LENGT.EQ.0)CALL XABORT('@CREGET: MISSI'
     1   //'NG BRN0 VALUES IN FUEL MAP.')
        CALL LCMGET(IPMAP,'BURN-BEG',BRN0)
*       UPPER BURNUP LIMITS
        CALL LCMLEN(IPMAP,'BURN-END',LENGT,ITYP)
        IF(LENGT.EQ.0)CALL XABORT('@CREGET: MISSI'
     1   //'NG BRN1 VALUES IN FUEL MAP.')
        CALL LCMGET(IPMAP,'BURN-END',BRN1)
        IF(IMPX.GT.0)WRITE(IOUT,1000)
        CALL LCMGET(IPMAP,'B-ZONE',IZONE)
        DO 35 ICH=1,NCH
        DO 30 IB=1,NB
        IF(IZONE(ICH).EQ.IVARTY)THEN
          ZONEDP(ICH,IB)=1
        ELSE
          ZONEDP(ICH,IB)=0
        ENDIF
   30   CONTINUE
   35   CONTINUE
        CALL LCMLEN(IPMAP,'BURN-AVG',ILONG,ITYP)
        IF (ILONG.EQ.0)CALL XABORT('@CREGET: NO SAVED VA'
     1  //'LUES FOR THIS TYPE OF VARIABLE IN FUEL MAP')
        ALLOCATE(VARC(ILONG))
        CALL LCMGET(IPMAP,'BURN-AVG',VARC)
        VARVAL=VARC(IVARTY)
        DEALLOCATE(VARC)
      ELSE
        CALL XABORT('@CREGET: INVALID OPTION IBTYP.')
      ENDIF
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(IZONE)
      RETURN
*
 1000 FORMAT(/1X,'** PERFORMING THE TIME-AVERAGE',
     1 1X,'INTEGRATION OVER THE FUEL LATTICE **'/)
 1001 FORMAT(/1X,'** PERFORMING THE INSTANTANEOU',
     1'S INTERPOLATION OVER THE FUEL LATTICE **'/)
      END