summaryrefslogtreecommitdiff
path: root/Donjon/src/FLPFLB.f
blob: c6e3e2e6d61cc1e9f6b14ae7bd2f19f75a500e6c (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
162
163
*DECK FLPFLB
      SUBROUTINE FLPFLB(IPMTX,NMAT,NGRP,NEL,NCH,NB,FLUX,VOL,FMIX,VOLB,
     1 FLXB,IMPX,LMAP)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute average fluxes per fuel bundle and other related quantities;
* print bundle fluxes on file.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* D. Sekki
*
*Parameters: input
* IPMTX  pointer to matex information.
* NMAT   total number of mixtures (includes virtual regions).
* NGRP   number of energy groups.
* NEL    total number of elements.
* NCH    number of reactor channels.
* NB     number of fuel bundles per channel.
* FLUX   normalized fluxes associated with each volume.
* VOL    element-ordered mesh-splitted volumes.
* IMPX   printing index (=0 for no print).
* LMAP   flux printing flag (=.true. print on file).
* FMIX   fuel bundle indices.
*
*Parameters: output
* VOLB   bundle volumes.
* FLXB   bundle fluxes.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMTX
      INTEGER NMAT,NEL,NGRP,NCH,NB,IMPX,FMIX(NCH*NB)
      REAL FLUX(NEL,NGRP),VOL(NEL),VOLB(NCH,NB),FLXB(NCH,NB,NGRP)
      LOGICAL LMAP
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6,INIT=1)
      INTEGER FMAT(NMAT)
      CHARACTER TEXT*12,FNAM*12
      REAL RATIO(NCH,NB,NGRP-1)
      DOUBLE PRECISION FAVG(NGRP)
*----
*  PERFORM CALCULATION
*----
      FMAX=0.
      ICM=0
      IBM=0
      MGR=0
      FAVG(:NGRP)=0.0D0
      FMAT(:NMAT)=0
      CALL LCMGET(IPMTX,'MAT',FMAT)
      FLXB(:NCH,:NB,:NGRP)=0.0
      IF(IMPX.GT.0)WRITE(IOUT,1004)
      NTOT=0
      VTOT=0.0
      DO 45 IB=1,NB
      DO 40 ICH=1,NCH
      NUM=(IB-1)*NCH+ICH
      VOLB(ICH,IB)=0.0
      IF(FMIX(NUM).EQ.0) GO TO 40
      NTOT=NTOT+1
      DO 20 IEL=1,NEL
      IF(FMAT(IEL).NE.-NTOT)GOTO 20
      DO 10 JGR=1,NGRP
      FLXB(ICH,IB,JGR)=FLXB(ICH,IB,JGR)+FLUX(IEL,JGR)*VOL(IEL)
   10 CONTINUE
      VOLB(ICH,IB)=VOLB(ICH,IB)+VOL(IEL)
   20 CONTINUE
      DO JGR=1,NGRP
        FLXB(ICH,IB,JGR)=FLXB(ICH,IB,JGR)/VOLB(ICH,IB)
        IF(ABS(FLXB(ICH,IB,JGR)).GT.FMAX)THEN
          FMAX=FLXB(ICH,IB,JGR)
          ICM=ICH
          IBM=IB
          MGR=JGR
        ENDIF
        FAVG(JGR)=FAVG(JGR)+FLXB(ICH,IB,JGR)*VOLB(ICH,IB)
      ENDDO
      VTOT=VTOT+VOLB(ICH,IB)
   40 CONTINUE
   45 CONTINUE
*     MAX AND CORE-AVERAGE FLUXES
      IF(IMPX.GT.0)WRITE(IOUT,1007)FMAX,ICM,IBM,MGR
      DO JGR=1,NGRP
        FAVG(JGR)=FAVG(JGR)/VTOT
        IF(IMPX.GT.0)WRITE(IOUT,1008)FAVG(JGR),JGR
      ENDDO
*     FORM FACTOR
      IF(MGR.EQ.0) CALL XABORT('FLPFLB: FLUX NORMALIZATION FAILURE.')
      FACT=REAL(FAVG(MGR))/FMAX
      FACT2=1./FACT
      IF(IMPX.GT.0)WRITE(IOUT,1009)MGR,FACT,FACT2,VTOT
*     FLUXES RATIOS
      RATIO(:NCH,:NB,:NGRP-1)=0.0
      DO 52 IB=1,NB
      DO 51 ICH=1,NCH
      DO 50 JGR=1,NGRP-1
      RATIO(ICH,IB,JGR)=FLXB(ICH,IB,JGR)/FLXB(ICH,IB,NGRP)
   50 CONTINUE
   51 CONTINUE
   52 CONTINUE
      IF(.NOT.LMAP)GOTO 80
*----
*  PRINTING
*----
      FNAM='FluxMAP.res'
      OPEN(UNIT=INIT,FILE=FNAM,STATUS='UNKNOWN')
      WRITE(INIT,1000)NCH,NB,NGRP
      DO 65 JGR=1,NGRP
      WRITE(INIT,1001)JGR
      DO 60 ICH=1,NCH
      WRITE(TEXT,'(A9,I3.3)')'CHANNEL #',ICH
      WRITE(INIT,1002)TEXT
      WRITE(INIT,1003)(FLXB(ICH,IB,JGR),IB=1,NB)
   60 CONTINUE
   65 CONTINUE
      WRITE(INIT,1010)
      DO 75 JGR=1,NGRP-1
      WRITE(INIT,1011)JGR,NGRP
      DO 70 ICH=1,NCH
      WRITE(TEXT,'(A9,I3.3)')'CHANNEL #',ICH
      WRITE(INIT,1002)TEXT
      WRITE(INIT,1012)(RATIO(ICH,IB,JGR),IB=1,NB)
   70 CONTINUE
   75 CONTINUE
      CLOSE(UNIT=INIT)
      IF(IMPX.GT.0)WRITE(IOUT,1006)FNAM
   80 RETURN
*
 1000 FORMAT(/20X,5('*'),3X,'AVERAGE FUEL-BUNDLES ',
     1 'FLUXES',3X,5('*')//5X,'NUMBER OF CHANNELS:',
     2 1X,I3,4X,'NUMBER OF BUNDLES:',1X,I2,4X,
     3 'NUMBER OF GROUPS:',I2)
 1001 FORMAT(//18X,'ENERGY GROUP =>',1X,I2.2)
 1002 FORMAT(/1X,A12)
 1003 FORMAT(6(1P,E15.8))
 1004 FORMAT(/1X,'** COMPUTING AVERAGE',1X,'BUNDLE FLUXES **'/)
 1006 FORMAT(/1X,'PRINTING BUNDLE FLUXES ON FILE:',
     1 1X,'<',A11,'>',3X,'=>',2X,'DONE.')
 1007 FORMAT(1X,'MAX FLUX =',1P,E13.6,2X,'=>',
     1 2X,'CHANNEL #',I3.3,2X,'BUNDLE #',I2.2,
     2 2X,'GROUP #',I2.2/)
 1008 FORMAT(1X,'FUEL-ZONE AVERAGE FLUX =',
     1 1P,E13.6,3X,'=>',2X,'GROUP #',I2.2)
 1009 FORMAT(/1X,'FLUX-FORM FACTOR FOR GROUP #',I2.2,
     1 2X,'=>',2X,'AVG/MAX = ',F8.4,2X,'(MAX/AVG = ',
     2 F8.4,')'/' FUEL-ZONE VOLUME =',1P,E13.6,' CM3'/)
 1010 FORMAT(//16X,5('*'),3X,'FUEL-BUNDLES',
     1 1X,'FLUXES RATIOS',3X,5('*')/)
 1011 FORMAT(/18X,'FLUX RATIO: GROUP #',I2.2,
     1 1X,'=>',1X,'GROUP #',I2.2)
 1012 FORMAT(6(1P,E13.6))
      END