summaryrefslogtreecommitdiff
path: root/Donjon/src/FLPHFX.f
blob: 17268f76c72514d9f27d2650b95e50ac73e43b92 (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 FLPHFX
      SUBROUTINE FLPHFX(NGRP,NEL,LX,LZ,MAT,VOL,FLUX,FXYZ,RATIO,VTOT,
     1 IMPX,LFLX,LRAT)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute the flux distributions and ratios over the whole reactor core;
* print the normalized fluxes on files.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* D. Sekki
*
*Update(s):
* V. Descotes 5/06/2010
*
*Parameters: input
* NGRP   total number of energy groups.
* NEL    total number of finite elements.
* LX     number of hexagons.
* LZ     number of elements along z-axis.
* MAT    index-number of mixture assigned to each volume.
* VOL    element-ordered mesh-splitted volumes.
* FLUX   normalized fluxes associated with each volume.
* IMPX   screen printing index (=0 for no print).
* LFLX   fluxes printing flag: =.true. print on files.
* LRAT   ratios printing flag: =.true. print on files.
*
*Parameters: output
* FXYZ   mesh-ordered fluxes.
* RATIO  fluxes ratios with respect to thermal fluxes.
* VTOT   total reactor-core volume.
*
*-----------------------------------------------------------------------
*
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER NGRP,NEL,LX,LZ,MAT(NEL),IMPX
      REAL FXYZ(LX,LZ,NGRP),FLUX(NEL,NGRP),
     1     RATIO(LX,LZ,NGRP-1),VOL(NEL)
      DOUBLE PRECISION VTOT
      LOGICAL LFLX,LRAT
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6,INIT=1)
      CHARACTER TEXT*12
      DOUBLE PRECISION FAVG(NGRP)
*----
*  PERFORM CALCULATION
*----
      IF(IMPX.GT.0)WRITE(IOUT,1010)
      FMAX=0.
      IM=0
      KM=0
      MGR=0
      VTOT=0.0D0
      FAVG(:NGRP)=0.0D0
      FXYZ(:LX,:LZ,:NGRP)=0.0
      IEL=0
      DO 15 K=1,LZ
      DO 10 I=1,LX
      IEL=IEL+1
      IF(MAT(IEL).EQ.0)GOTO 10
      VTOT=VTOT+VOL(IEL)
      DO JGR=1,NGRP
        FXYZ(I,K,JGR)=FLUX(IEL,JGR)
        IF(ABS(FXYZ(I,K,JGR)).GT.FMAX)THEN
          FMAX=FXYZ(I,K,JGR)
          IM=I
          KM=K
          MGR=JGR
        ENDIF
        FAVG(JGR)=FAVG(JGR)+FXYZ(I,K,JGR)*VOL(IEL)
      ENDDO
   10 CONTINUE
   15 CONTINUE
*     MAX AND CORE-AVERAGE FLUXES
      IF(IMPX.GT.0)WRITE(IOUT,1000)FMAX,IM,KM,MGR
      DO JGR=1,NGRP
        FAVG(JGR)=FAVG(JGR)/VTOT
        IF(IMPX.GT.0)WRITE(IOUT,1001)FAVG(JGR),JGR
      ENDDO
      IF(MGR.EQ.0) CALL XABORT('FLPHFX: FLUX NORMALIZATION FAILURE.')
      FACT=REAL(FAVG(MGR))/FMAX
      FACT2=1./FACT 
      IF(IMPX.GT.0)WRITE(IOUT,1002)MGR,FACT,FACT2,VTOT
*     FLUXES RATIOS
      RATIO(:LX,:LZ,:NGRP-1)=0.0
      DO 35 K=1,LZ
      DO 30 I=1,LX
      IF(FXYZ(I,K,NGRP).EQ.0.)GOTO 30
      DO 20 JGR=1,NGRP-1
      RATIO(I,K,JGR)=FXYZ(I,K,JGR)/FXYZ(I,K,NGRP)
   20 CONTINUE
   30 CONTINUE
   35 CONTINUE
      IF(.NOT.LFLX)GOTO 60
*----
*  PRINTING
*----
      IF(IMPX.GT.0)WRITE(IOUT,1006)
*     FLUXES
      DO 50 JGR=1,NGRP
        WRITE(TEXT,'(A4,I2.2,A4)')'Flux',JGR,'.res'
        OPEN(UNIT=INIT,FILE=TEXT,STATUS='UNKNOWN')
        WRITE(INIT,1011)LX,LZ,JGR
        DO 40 K=1,LZ
        WRITE(INIT,1009)K
        WRITE(INIT,1005) (FXYZ(I,K,JGR),I=1,LX)
   40   CONTINUE
        CLOSE(UNIT=INIT)
        IF(IMPX.GT.0)WRITE(IOUT,1003)JGR,TEXT
   50 CONTINUE
*
   60 IF(.NOT.LRAT)GOTO 90
      IF(IMPX.GT.0)WRITE(IOUT,1007)
*     RATIOS
      DO 80 JGR=1,NGRP-1
        WRITE(TEXT,'(A4,I2.2,A4)')'Rati',JGR,'.res'
        OPEN(UNIT=INIT,FILE=TEXT,STATUS='UNKNOWN')
        WRITE(INIT,1012)JGR,NGRP,LX,LZ
        DO 70 K=1,LZ
        WRITE(INIT,1009)K
        WRITE(INIT,1008) (RATIO(I,K,JGR),I=1,LX)
   70   CONTINUE
        CLOSE(UNIT=INIT)
        IF(IMPX.GT.0)WRITE(IOUT,1004)JGR,NGRP,TEXT
   80 CONTINUE
   90 RETURN
*
 1000 FORMAT(1X,'MAX FLUX =',1X,1PE12.6,4X,'AT COORD :',1X,
     1 'HEX # =',I3,2X,'K =',I3,2X,'GROUP #',I2.2/)
 1001 FORMAT(1X,'CORE-AVERAGE FLUX =',1X,1PE12.6,
     1 2X,'=>',2X,'GROUP #',I2.2)
 1002 FORMAT(/1X,'OVERALL FLUX-FORM FACTOR FOR GROUP #',I2.2,
     1 2X,'=>',2X,'AVG/MAX =',1X,F8.4,2X,'(MAX/AVG = ',F8.4,
     2 ')'/1X,'TOTAL CORE VOLUME =',1X,1PE12.6,1X,'CM3'/)
 1003 FORMAT(1X,'FLUXES',2X,'=>',2X,'GROUP #',I2.2,2X,
     1 '=>',2X,'FILE NAME: <',A10,'>',2X,'=>',2X,'DONE.')
 1004 FORMAT(1X,'FLUX RATIOS',2X,'=>',2X,'GR.#',I2.2,
     1 '/GR.#',I2.2,2X,'=>',2X,'FILE NAME: <',A10,'>',
     1 2X,'=>',2X,'DONE.')
 1005 FORMAT(1X,1P,6E16.8)
 1006 FORMAT(/15X,'** PRINTING OF FLUXES ON FILES **'/)
 1007 FORMAT(/15X,'** PRINTING OF RATIOS ON FILES **'/)
 1008 FORMAT(1X,1P,6E14.6)
 1009 FORMAT(//5X,'PLANE-Z #',I2.2/)
 1010 FORMAT(/1X,'** COMPUTING FLUX-DISTRIBUTION',
     1 1X,'OVER THE REACTOR CORE (HEXAGONAL GEOMETRY) **'/)
 1011 FORMAT(/10X,5('*'),3X,'FLUX-DISTRIBUTION OVER THE',
     1 1X,'REACTOR CORE',3X,5('*')//21X,'HEX#=',I2,',',2X,
     2 'NZ=',I2,',',2X,'GROUP #',I2.2)
 1012 FORMAT(/10X,5('*'),3X,'FLUXES RATIO',1X,'#',I2.2,
     1 '/#',I2.2,1X,'OVER THE REACTOR CORE',3X,5('*')//
     2 25X,'HEX # =',I2,',',2X,'NZ=',I2)
      END