summaryrefslogtreecommitdiff
path: root/Donjon/src/SIMOUT.f
blob: abff32bac4595231661412f6365776c4f805e109 (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
*DECK SIMOUT
      SUBROUTINE SIMOUT(IPMAP,IMPX,BURNINS,IZONE,NCH,NB,LX,LY,HHX,IHY,
     > STATE)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Print burnup distribution (3D), radial averages or axial averages
*
*Copyright:
* Copyright (C) 2013 Ecole Polytechnique de Montreal
*
*Author(s): 
* V. Salino
*
*Parameters: input
* IPMAP   fuel map object.
* IMPX    print parameter.
* BURNINS instantaneous burnups.
* IZONE   default assembly or quart-of-assembly names as defined in
*         the fuel map.
* NCH     number of assemblies or number of quart-of-assemblies.
* NB      number of axial burnup subdivisions in an assembly.
* LX      number of assemblies along the X axis.
* LY      number of assemblies along the Y axis.
* LXMIN   coordinates on X axis of the first assembly.
* LYMIN   coordinates on Y axis of the first assembly.
* HHX     naval battle indices along X axis.
* IHY     naval battle indices along Y axis.
* STATE   flag indicating whether it is a beginning-of-stage print
*         or a end-of-stage print.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPMAP
      INTEGER IMPX,IHY(LY),NCH,NB,LX,LY
      CHARACTER HHX(LX)*1,IZONE(NCH)*4,STATE*5
      REAL BURNINS(NCH,NB)
*----
*  LOCAL VARIABLES
*----
      INTEGER INTG2,INTG2B
      REAL MEANR
      CHARACTER TEXT4*4,TEXT1*1,TEXT1B*1
*----
*  ALLOCATABLE ARRAYS
*----
      REAL, ALLOCATABLE, DIMENSION(:) :: MEAN
*
      IF(STATE.EQ.'BEGIN')THEN
        CALL LCMGET(IPMAP,'BURN-INST',BURNINS)
      ENDIF
*----
*  RADIALLY-AVERAGED BURNUP MAP
*----
      IF((STATE.EQ.'BEGIN'.AND.IMPX.GE.8).OR.
     >   (STATE.EQ.'END  '.AND.IMPX.GE.3)) THEN
        IF(STATE.EQ.'BEGIN')THEN
          WRITE(6,100)
        ELSE
          WRITE(6,105)
        ENDIF
        WRITE(6,110) (HHX(I),I=1,LX)
        ICH=1
        DO I=1,LY
          TEXT4=IZONE(ICH)
          READ(TEXT4,'(A1,I2)') TEXT1,INTG2
          NFULL=0
          DO J=1,LX+1
            NFULL=J
            IF(ICH.EQ.(NCH+1))GO TO 10
            TEXT4=IZONE(ICH)
            READ(TEXT4,'(A1,I2)') TEXT1B,INTG2B
            IF(INTG2.NE.INTG2B)GO TO 10
            ICH=ICH+1
          ENDDO
          CALL XABORT('@SIMOUT: INCOHERENCE IN BASIC ASSEMBLY '
     >    //'LAYOUT GIVEN IN RESINI:.')
  10      CONTINUE
          NFULL=NFULL-1
          NEMPTY=(LX-NFULL)/2
          ALLOCATE(MEAN(NFULL))
          MEAN(:NFULL)=0.0
          DO K=1,NFULL
            DO IB=1,NB
              MEAN(K)=MEAN(K)+BURNINS(ICH-1-NFULL+K,IB)/NB
            ENDDO
          ENDDO
          WRITE(6,115,ADVANCE='NO') IHY(I)
          DO K=1,NEMPTY
            WRITE(6,120,ADVANCE='NO')
          ENDDO
          WRITE(6,125) (NINT(MEAN(K)),K=1,NFULL)
          DEALLOCATE(MEAN)
        ENDDO
      ENDIF
*----
*  AXIALLY-AVERAGED BURNUP MAP
*----
      IF((STATE.EQ.'BEGIN'.AND.IMPX.GE.9).OR.
     >   (STATE.EQ.'END  '.AND.IMPX.GE.4))THEN
        IF(STATE.EQ.'BEGIN')THEN
          WRITE(6,130)
        ELSE
          WRITE(6,135)
        ENDIF
        DO IB=1,NB
          MEANR=0.0
          DO ICH=1,NCH
            MEANR=MEANR+BURNINS(ICH,IB)/NCH
          ENDDO
          WRITE(6,140) NINT(MEANR)
        ENDDO
      ENDIF
*----
*  PER-ASSEMBLY 3D BURNUP MAP
*----
      IF((STATE.EQ.'BEGIN'.AND.IMPX.GE.10).OR.
     >   (STATE.EQ.'END  '.AND.IMPX.GE.5))THEN
        IF(STATE.EQ.'BEGIN')THEN
          WRITE(6,150)
        ELSE
          WRITE(6,155)
        ENDIF
        DO ICH=1,NCH
          WRITE(6,160) IZONE(ICH)
          WRITE(6,170) (BURNINS(ICH,IB),IB=1,NB)
        ENDDO
      ENDIF
*
      IF(STATE.EQ.'BEGIN') BURNINS(:NCH,:NB)=0.0
      RETURN
*
  100 FORMAT(' SIM: BEGINNING-OF-STAGE BURNUP MAP (MW*D/TONNE), ',
     > 'RADIAL VIEW :')
  105 FORMAT(' SIM: END-OF-STAGE BURNUP MAP (MW*D/TONNE), ',
     > 'RADIAL VIEW :')
  110 FORMAT(1X,20(5X,1A1))
  115 FORMAT(1X,I2)
  120 FORMAT(6X)
  125 FORMAT(21I6)
  130 FORMAT(/,' SIM: BEGINNING-OF-STAGE BURNUP MAP (MW*D/TONNE), ',
     > 'AXIAL VIEW :')
  135 FORMAT(/,' SIM: END-OF-STAGE BURNUP MAP (MW*D/TONNE), ',
     > 'AXIAL VIEW :')
  140 FORMAT(1X,I5.1)
  150 FORMAT(/,' SIM: BEGINNING-OF-STAGE 3D BURNUP MAP (MW*D/TONNE) :')
  155 FORMAT(/,' SIM: END-OF-STAGE 3D BURNUP MAP (MW*D/TONNE) :')
  160 FORMAT('   Assembly ',A)
  170 FORMAT(3X,16(1X,F7.1))
      END