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
136
137
138
139
140
141
|
*DECK MCCCPY
SUBROUTINE MCCCPY(IMPX,IPMAP,IPMAP2,NPARAM,NCH,NB,REC1,REC2)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Modification of the data stored in the PARAM folder of a fuel map
*
*Copyright:
* Copyright (C) 2012 Ecole Polytechnique de Montreal.
*
*Author(s):
* M. Cordiez
*
*Parameters: input
* IMPX printing index (=0 for no print).
* IPMAP pointer of the fuel map 1
* IPMAP2 pointer of the fuel map 2
* NPARAM number of parameters in the PARAM folder
* NCH number of fuel channels
* NB number of fuel bundles per channel
* REC1 record to be updated
* REC2 record to be copied
*
*-----------------------------------------------------------------------
*
USE GANLIB
*----
* SUBROUTINE ARGUMENTS
*----
INTEGER IMPX,NPARAM,NCH,NB
CHARACTER REC1*40,REC2*40
TYPE(C_PTR) IPMAP,IPMAP2
*----
* LOCAL VARIABLES
*----
PARAMETER(NSTATE=40)
INTEGER ISTATE2(NSTATE)
INTEGER VALSIZE,PTYPE
INTEGER PTYPE2,NPARAM2,NCH2,NB2,VALSIZE2
CHARACTER PNAME*12,PNAME2*12
REAL, ALLOCATABLE, DIMENSION(:) :: VALMOD,VALCOP
TYPE(C_PTR) JPMAP,KPMAP,JPMAP2,KPMAP2
*----
* RECOVER L_MAP 2 STATE-VECTOR
*----
CALL LCMGET(IPMAP2,'STATE-VECTOR',ISTATE2)
NB2=ISTATE2(1)
NCH2=ISTATE2(2)
NPARAM2=ISTATE2(8)
IF(NB.NE.NB2) CALL XABORT('@MCCCCPY: THE NUMBER OF FUEL'
> //' BUNDLES PER CHANNEL IS DIFFERENT BETWEEN'
> //' FLMAP1 AND FLMAP2.')
IF(NCH.NE.NCH2) CALL XABORT('@MCCCCPY: THE NUMBER OF FUEL'
> //' CHANNELS IS DIFFERENT BETWEEN'
> //' FLMAP1 AND FLMAP2.')
*----
* RECOVERY OF L_MAP PARAMETERS
*----
* L_MAP1 (to be updated)
JPMAP=LCMGID(IPMAP,'PARAM')
DO IPAR=1,NPARAM,1
KPMAP=LCMGIL(JPMAP,IPAR)
CALL LCMGTC(KPMAP,'P-NAME',12,PNAME)
CALL LCMGET(KPMAP,'P-TYPE',PTYPE)
IF(PNAME.EQ.REC1) THEN
IF(IMPX.GE.3) CALL LCMLIB(KPMAP)
EXIT
ENDIF
ENDDO
* L_MAP2 (to be copied)
JPMAP2=LCMGID(IPMAP2,'PARAM')
DO IPAR=1,NPARAM2,1
KPMAP2=LCMGIL(JPMAP2,IPAR)
CALL LCMGTC(KPMAP2,'P-NAME',12,PNAME2)
CALL LCMGET(KPMAP2,'P-TYPE',PTYPE2)
IF(PNAME2.EQ.REC2) THEN
IF(IMPX.GE.3) CALL LCMLIB(KPMAP2)
EXIT
ENDIF
ENDDO
*
* Checking of the type (local or global) of REC1
IF(PTYPE.EQ.1) THEN
IF(IMPX.GE.1) WRITE(6,210) 'PARAMETER ',PNAME,' IS GLOBAL'
VALSIZE=1
ALLOCATE(VALMOD(VALSIZE))
ELSE IF(PTYPE.EQ.2) THEN
IF(IMPX.GE.1) WRITE(6,210) 'PARAMETER ',PNAME,' IS LOCAL'
VALSIZE=NCH*NB
ALLOCATE(VALMOD(VALSIZE))
ELSE
CALL XABORT('@MCCCPY: '//PNAME//'IS NEITHER LOCAL NOR GLOBAL'
> //'AND THAT IS IMPOSSIBLE.')
ENDIF
* Checking of the type (local or global) of REC2
IF((PTYPE2.NE.1).AND.(PTYPE2.NE.2)) THEN
CALL XABORT('@MCCCPY: '//PNAME2//'IS NEITHER LOCAL NOR GLOBAL'
> //'AND THAT IS IMPOSSIBLE.')
ENDIF
IF(PTYPE2.EQ.1) THEN
IF(IMPX.GE.1) WRITE(6,210) 'PARAMETER ',PNAME2,' IS GLOBAL'
VALSIZE2=1
ALLOCATE(VALCOP(VALSIZE2))
CALL LCMGET(KPMAP2,'P-VALUE',VALCOP)
ELSE
IF(IMPX.GE.1) WRITE(6,210) 'PARAMETER ',PNAME2,' IS LOCAL'
VALSIZE2=NCH2*NB2
ALLOCATE(VALCOP(VALSIZE2))
CALL LCMGET(KPMAP2,'P-VALUE',VALCOP)
ENDIF
IF(PTYPE.EQ.1.AND.PTYPE2.EQ.2) CALL XABORT('@MCCCPY: '//PNAME
> //'IS GLOBAL ON THE CORE AND '//PNAME2//'IS LOCAL.')
IF(PTYPE.EQ.2.AND.PTYPE2.EQ.1) CALL XABORT('@MCCCPY: '//PNAME
> //'IS LOCAL ON THE CORE AND '//PNAME2//'IS GLOBAL.')
*
* Modification of REC1
VALMOD(:)=VALCOP(:)
CALL LCMPUT(KPMAP,'P-VALUE',VALSIZE,2,VALMOD)
IF(IMPX.GT.0.AND.C_ASSOCIATED(IPMAP,IPMAP2)) THEN
WRITE(6,220) 'EVERY VALUE OF THE RECORD ',REC1,' HAS BEEN '
> //'UPDATED WITH THE ONES FROM ',REC2,' (SAME '
> //'FUEL MAP).'
ELSEIF(IMPX.GT.0.AND.C_ASSOCIATED(IPMAP,IPMAP2)) THEN
WRITE(6,220) 'EVERY VALUE OF THE RECORD ',REC1,' HAS BEEN '
> //'UPDATED WITH THE ONES FROM ',REC2,' (FUEL '
> //'MAP FLMAP2).'
ENDIF
* Array deallocation
DEALLOCATE(VALMOD)
DEALLOCATE(VALCOP)
RETURN
210 FORMAT(1X,A,A6,A/)
220 FORMAT(1X,A,A6,A,A6,A/)
END
|