summaryrefslogtreecommitdiff
path: root/Donjon/src/FLPNRM.f
blob: d22c3e51d252da49ca4e904e68152538d9b7b989 (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
*DECK FLPNRM
      SUBROUTINE FLPNRM(IPFLX,IPKIN,IPTRK,NMIX,NGRP,NEL,NUN,EVECT,FLUX,
     1 MAT,VOL,IDL,HFAC,PTOT,ZNRM,IMPX)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover element-ordered fluxes associated with each mesh-splitted
* volume over the whole reactor core, normalize fluxes to a given
* total reactor power.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* D. Sekki
*
*Parameters: input
* IPFLX  pointer to flux information.
* IPKIN  pointer to kinetics information.
* IPTRK  pointer to tracking information.
* NMIX   maximum number of material mixtures.
* NGRP   total number of energy groups.
* NEL    total number of finite elements.
* NUN    total number of unknowns per group.
* HFAC   h-factors over the reactor core.
* PTOT   given total reactor power in watts.
* IMPX   printing index (=0 for no print).
*
*Parameters: output
* FLUX   normalized fluxes associated with each volume.
* MAT    index-number of mixture assigned to each volume.
* VOL    element-ordered mesh-splitted volumes.
* ZNRM   flux normalization factor.
*
*Parameters: scratch
* EVECT
* IDL
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPFLX,IPKIN,IPTRK
      INTEGER NUN,NEL,NGRP,NMIX,IMPX,IDL(NEL),MAT(NEL)
      REAL FLUX(NEL,NGRP),EVECT(NUN,NGRP),HFAC(NMIX,NGRP),VOL(NEL)
      DOUBLE PRECISION ZNRM,PTOT
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6)
      TYPE(C_PTR) JPFLX
      DOUBLE PRECISION XDRCST,EVJ
*----
*  RECOVER INFORMATION
*----
      EVECT(:NUN,:NGRP)=0.0
      IF(C_ASSOCIATED(IPFLX)) THEN
*       L_FLUX object
        JPFLX=LCMGID(IPFLX,'FLUX')
        DO 10 JGR=1,NGRP
        CALL LCMGDL(JPFLX,JGR,EVECT(1,JGR))
   10   CONTINUE
      ELSE IF(C_ASSOCIATED(IPKIN)) THEN
*       L_KINET object
        CALL LCMGET(IPKIN,'E-VECTOR',EVECT)
      ENDIF
*
      MAT(:NEL)=0
      CALL LCMGET(IPTRK,'MATCOD',MAT)
      IDL(:NEL)=0
      CALL LCMGET(IPTRK,'KEYFLX',IDL)
      VOL(:NEL)=0.0
      CALL LCMGET(IPTRK,'VOLUME',VOL)
*----
*  FLUX NORMALIZATION
*----
      EVJ=XDRCST('eV','J')
      ZNRM=0.0D0
      IF(IMPX.GT.0)WRITE(IOUT,1002)
      FLUX(:NEL,:NGRP)=0.0
      DO 25 JGR=1,NGRP
      DO 20 IEL=1,NEL
      IF(MAT(IEL).EQ.0)GOTO 20
      FLUX(IEL,JGR)=EVECT(IDL(IEL),JGR)
      ZNRM=ZNRM+HFAC(MAT(IEL),JGR)*FLUX(IEL,JGR)*VOL(IEL)*EVJ
   20 CONTINUE
   25 CONTINUE
      ZNRM=PTOT/ZNRM
      IF(IMPX.GT.0)WRITE(IOUT,1000) PTOT,ZNRM
      DO 35 JGR=1,NGRP
      DO 30 IEL=1,NEL
      FLUX(IEL,JGR)=FLUX(IEL,JGR)*REAL(ZNRM)
   30 CONTINUE
   35 CONTINUE
      RETURN
*
 1000 FORMAT(/37H FLPNRM: GIVEN TOTAL REACTOR POWER =>,1P,E15.8,1X,
     1 5HWATTS/37H FLPNRM: FLUX NORMALIZATION FACTOR =>,1P,E15.8)
 1002 FORMAT(/53H FLPNRM: ** NORMALIZING FLUXES TO A GIVEN REACTOR POW,
     1 5HER **)
      END