summaryrefslogtreecommitdiff
path: root/Donjon/src/CVRCOR.f
blob: c7ea5d18ed86e33ae8ed8cb5cfc9d05fa15ad35e (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
*DECK CVRCOR
      SUBROUTINE CVRCOR(IPMAP,NCH,NB,NFUEL,NX,NY,NZ,IVOID,NVOID,NPARM,
     1 PNAME,PVALUE,VCOOL,LCOOL,IMPX)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Modify channels data according to the specified core-voiding pattern.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* D. Sekki
*
*Parameters: input/output
* IPMAP   pointer to the perturbed fuel-map.
* NCH     number of reactor channels.
* NB      number of fuel bundles per channel.
* NFUEL   number of fuel types.
* NX      number of elements along x-axis in fuel map.
* NY      number of elements along y-axis in fuel map.
* NZ      number of elements along z-axis in fuel map.
* IVOID   index associated with the core-voiding pattern:
*          =1 full-core; =2 half-core; =3 quarter-core;
*          =4 checkerboard-full; =5 checkerboard-half;
*          =6 checkerboard-quarter.
* NVOID   total number of voided channels.
* NPARM   total number of recorded parameters.
* PNAME   recorded parameter name for the coolant density.
* PVALUE  structure containing the coolant density values
*         throughout the reactor core.
* VCOOL   coolant density value for voided channels.
* LCOOL   flag with respect to the coolant densities:
*          =.true. to modify these values;
*          =.false. coolant densities not provided.
* IMPX    printing index (=0 for no print).
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMAP
      INTEGER NCH,NB,NFUEL,NX,NY,NZ,IVOID,NVOID,NPARM,IMPX
      REAL PVALUE(NCH,NB),VCOOL
      CHARACTER PNAME*12
      LOGICAL LCOOL
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6)
      INTEGER FLMIX(NCH,NB),NSCH(NCH),INAME(3)
      CHARACTER TEXT*20,TEXT12*12
      LOGICAL LCHK
      TYPE(C_PTR) JPMAP,KPMAP
*----
*  RECOVER INFORMATION
*----
      FLMIX(:NCH,:NB)=0
      NSCH(:NCH)=0
      LCHK=.FALSE.
      CALL LCMGET(IPMAP,'FLMIX',FLMIX)
      CALL LCMLEN(IPMAP,'REF-SCHEME',LENGT,ITYP)
      IF(LENGT.EQ.0)CALL XABORT('@CVRCOR: MISSI'
     1 //'NG REF-SCHEME DATA IN FUEL-MAP.')
      CALL LCMGET(IPMAP,'REF-SCHEME',NSCH)
      IF(IVOID.EQ.1)THEN
        TEXT='FULL-CORE'
      ELSEIF(IVOID.EQ.2)THEN
        TEXT='HALF-CORE'
      ELSEIF(IVOID.EQ.3)THEN
        TEXT='QUARTER-CORE'
      ELSEIF(IVOID.EQ.4)THEN
        TEXT='CHECKERBOARD-FULL'
        LCHK=.TRUE.
      ELSEIF(IVOID.EQ.5)THEN
        TEXT='CHECKERBOARD-HALF'
        LCHK=.TRUE.
      ELSEIF(IVOID.EQ.6)THEN
        TEXT='CHECKERBOARD-QUARTER'
        LCHK=.TRUE.
      ENDIF
      IF(IMPX.GT.0)WRITE(IOUT,1000)TEXT,NVOID
*----
*  MODIFY CHANNEL DATA
*----
      ITOT=0
      JPMAP=LCMGID(IPMAP,'FUEL')
      DO IFUEL=1,NFUEL
        KPMAP=LCMGIL(JPMAP,IFUEL)
        CALL LCMGET(KPMAP,'MIX',MIXF)
        CALL LCMGET(KPMAP,'MIX-VOID',MIXV)
        DO 20 ICH=1,NVOID
        IF(LCHK)THEN
          IF(NSCH(ICH).LT.0)GOTO 20
*         POSITIVE DIRECTION ONLY
        ENDIF
        DO 10 IB=1,NB
        IF(FLMIX(ICH,IB).NE.MIXF)GOTO 10
        FLMIX(ICH,IB)=MIXV
        IF(LCOOL) PVALUE(ICH,IB)=VCOOL
        ITOT=ITOT+1
   10   CONTINUE
   20   CONTINUE
      ENDDO
      IF(IMPX.GT.0)WRITE(IOUT,1001)ITOT
      IF(IMPX.LT.2)GOTO 30
*     PRINTING
      CALL CVRPRN(IPMAP,NCH,NB,NX,NY,NZ,FLMIX,PVALUE,LCOOL,IMPX)
*     STORE NEW DATA
   30 CALL LCMPUT(IPMAP,'FLMIX',NCH*NB,1,FLMIX)
      IF(.NOT.LCOOL)GOTO 40
      JPMAP=LCMGID(IPMAP,'PARAM')
      DO IPAR=1,NPARM
        KPMAP=LCMGIL(JPMAP,IPAR)
        CALL LCMGET(KPMAP,'P-NAME',INAME)
        WRITE(TEXT12,'(3A4)') (INAME(I),I=1,3)
        IF(PNAME.EQ.TEXT12)THEN
          CALL LCMPUT(KPMAP,'P-VALUE',NCH*NB,2,PVALUE)
          GOTO 40
        ENDIF
      ENDDO
   40 RETURN
*
 1000 FORMAT(/2X,'SELECTED VOIDING PATTERN',2X,'=>',2X,A20
     1     //2X,'TOTAL NUMBER OF VOIDED CHANNELS =',1X,I3/)
 1001 FORMAT(2X,'TOTAL NUMBER OF MODIFIED VALUES :',1X,I4/)
      END