summaryrefslogtreecommitdiff
path: root/Donjon/src/D2PMUL.f
blob: 25ffd02d270af9c4f4c42ac0b0037ffcbfba6e97 (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
*DECK D2PMUL
      SUBROUTINE D2PMUL(  IPMUL,  IPDAT, STAVEC,    MIX, IPRINT        )
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover the global stated variable data contained in the Multicompo
* object (for reflector cross sections)
*
*Author(s): 
* J. Taforeau
*
*Parameters: input
* IPDAT   address of the INFO data block
* IPMUL   address of the MULTICOMPO object
* STAVEC  various parameters associated with the IPDAT structure
* MIX     index of mixture on which XS are to be extracted (only for
*         reflector cases)
* IPRINT  control the printing on screen
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMUL, IPDAT
      INTEGER IPRINT
      INTEGER MIX    ! MIX = 1 (RADIAL); MIX = 2 (LOW) ; MIX = 3 (TOP)
      INTEGER STAVEC(40)
*----
*  LOCAL VARIABLES
*----
      TYPE(C_PTR) IPROOT,IPTH,KPTH
      PARAMETER(NSTATE=40)
      ! DEFAULT CR DC PC TF
      INTEGER :: NPAR = 5
      ! NUMBER OF CROSS SECTIONS TO BE RECOVERED
      INTEGER :: N_XS = 8
      ! NUMBER OF CB VALUES CONTAINED IN MULTICOMPO
      INTEGER CB_NB
      ! NUMBER OF VALUES FOR EACH DEFAULT STATES VARIABLES
      INTEGER NVAL(5)
      ! VALUES FOR EACH DEFAULT STATES VARIABLES
      REAL VALPAR(5,100)
      ! NAME OF PKEY
      CHARACTER (len=4) PKEY(5)
      ! NAME OF PKEY FOR BORON CONCENTRATION (MUST BE C-BORE)
      CHARACTER(LEN=6) CB_name
      ! VALUES FOR BORON CONCENTRATION
      REAL, ALLOCATABLE, DIMENSION(:) :: VAL_CB

      STAVEC(1)=2
      STAVEC(2)=NPAR
      STAVEC(3)=N_XS
      STAVEC(4)=1
      STAVEC(5)=2
      STAVEC(6)=1
      STAVEC(7)=0

      IPROOT=IPMUL
      ! MOVING AND RECOVER INFORMATION FROM MULTICOMPO
      CALL LCMSIX(IPMUL,'default',1)
      CALL LCMSIX(IPMUL,'GLOBAL',1)
      CALL LCMGTC(IPMUL,'PARKEY',6,CB_name)
      ! CHECK IF PKEY FOR BORON CONCENTRATION IS C-BORE
      IF(CB_name.NE.'C-BORE') THEN
        CALL XABORT('@D2PMUL: ONLY C-BORE PKEY EXPECTED')
      ENDIF
      ! RECOVER BORON CONCENTRATION VALUES
      CALL LCMLEN(IPMUL,'pval00000001',CB_NB,ITYLCM)
      ALLOCATE (VAL_CB(CB_NB))
      CALL LCMGET(IPMUL,'pval00000001',VAL_CB)

      ! CREATION OF INFO/SAPHYB_INFO/ CONTENT
      CALL LCMPUT(IPDAT,'BARR_INFO',1,1,1)
      CALL LCMSIX(IPDAT,'SAPHYB_INFO',1)
      CALL LCMPUT(IPDAT,'MIX',1,1,MIX)

      ! ATTRIBUTION OF DEFAULT VALUES FOR OTHER STATE VARIABLES THAN
      ! C_BORE
      PKEY(1)='BARR'           ! CONTROL ROD
      PKEY(2)='DMOD'           ! MODERATOR DENSITY
      PKEY(3)='CBOR'           ! BORON CONCENTRATION
      PKEY(4)='TCOM'           ! FUEL TEMPERATURE
      PKEY(5)='BURN'           ! BURN UP
      CALL LCMPTC(IPDAT,'STATE_VAR',4,5,PKEY)
      ! ALL STATE VARIABLE (EXCEPT CBOR) ARE FIXED
      NVAL(1)=1
      NVAL(2)=1
      NVAL(3)= CB_NB
      NVAL(4)=1
      NVAL(5)=1
      VALPAR(1,1) = 1       ! NO CONTROL ROD IS INSERTED
      VALPAR(3,1:CB_NB) = VAL_CB
      VALPAR(2,1) = 0.75206 ! DEFAULT MODERATOR DENSITY= 0.75206 G/CM3
      VALPAR(4,1) = 560     ! FUEL TEMPERATURE= 560 Celsius
      VALPAR(5,1) = 0       ! BURN-UP= 0 MWJ/T

      ! CREATION OF INFO/SAPHYB_INFO/SVNAME
      ! LOOP OVER STATE VARIABLE
      DO i=1, NPAR
        CALL  LCMPUT(IPDAT,PKEY(i),NVAL(i),2,VALPAR(i,1:NVAL(i)))
      ENDDO

      CALL LCMSIX(IPDAT,' ',0)
      CALL LCMSIX(IPDAT,'SAPHYB_INFO',1)
      IPTH=LCMLID(IPDAT,'PKEY_INFO',6)
      DO J=1, 6
         KPTH=LCMDIL(IPTH,J)
         IF(J==1) THEN
           CALL LCMPTC(KPTH,"NAME",8,"BARR    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.TRUE.)
         ELSE IF(J==2)THEN
           CALL LCMPTC(KPTH,"NAME",8,"DMOD    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.TRUE.)
         ELSE IF(J==3) THEN
           CALL LCMPTC(KPTH,"NAME",8,"CBOR    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.TRUE.)
         ELSE IF(J==4)THEN
           CALL LCMPTC(KPTH,"NAME",8,"TCOM    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.TRUE.)
         ELSE IF(J==5)THEN
           CALL LCMPTC(KPTH,"NAME",8,"TMOD    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.FALSE.)
         ELSE IF(J==6) THEN
           CALL LCMPTC(KPTH,"NAME",8,"BURN    ")
           CALL LCMPUT(KPTH,"LFLAG",1,5,.TRUE.)
         ENDIF
      ENDDO
      ! CREATION OF :
      ! INFO/HELIOS_HEAD/ DIRECTORY
      ! INFO/GENPMAXS_INP/ DIRECTORY

      CALL LCMSIX(IPDAT,' ',0)
      CALL LCMSIX(IPDAT,'HELIOS_HEAD',1)
      CALL LCMSIX(IPDAT,' ',0)
      CALL LCMSIX(IPDAT,'GENPMAXS_INP',1)
      CALL LCMSIX(IPDAT,' ',0)

      ! EDIT THE LISTING FILE
       IF(IPRINT > 0)  THEN
                   !"**************************************************"
         WRITE(6,*) "******** CONTENT OF MULTICOMPO RECOVERED *********"
         WRITE(6,*)
         WRITE(6,*) "NUMBER OF STATE VARIABLES :", NPAR
         WRITE(6,*) "NAME OF STATE VARIABLES :", PKEY
         WRITE(6,*)
         DO i=1, NPAR
          WRITE(6,*) "NUMBER OF VALUES FOR ",PKEY(i)," PARAMETERS :",
     1    NVAL(i)
          WRITE(6,*) "VALUES FOR ",PKEY(i)," PARAMETERS :",
     1    VALPAR(i,1:NVAL(i))
          WRITE(6,*)
         ENDDO
        WRITE(6,*)
      ENDIF

      ! FREE MEMORY
      DEALLOCATE (VAL_CB)
      END