summaryrefslogtreecommitdiff
path: root/Donjon/src/CREINT.f
blob: 76d3d43b6eda70d5e430164e0fe77087b482d431 (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
*DECK CREINT
      SUBROUTINE CREINT(IPCPO,NISO,DERIV,NBURN,KBURN,BURN0,BURN1,NGRP,
     1   NL,IMPX,HISO,ITY,CONC,ILEAK,TOTAL,ZNUG,SNUGF,CHI,OVERV,DIFFX,
     2   DIFFY,DIFFZ,H,SCAT,FLUX,UPS)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Recover and interpolate l_compo information according to burnup and
* extracted isotope density.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* A. Hebert
*
*Parameters: input
* IPCPO   pointer to l_compo information.
* NISO    1+number of extracted isotopes.
* DERIV   =.true.: derivative of macrolib info is computed with
*         respect to burn1.
* UPS     =.true.: no upscatering cross sections will be stored.
* NBURN   number of tabulated burnup steps.
* KBURN   =0: no burnup parameters; =1: use mw day/tonne of initial
*         heavy elements).
* BURN0   user defined initial burnup.
* BURN1   user defined final burnup:
*          if burn0=burn1, a simple interpolation is performed;
*          if burn0<burn1, a time-average calculation is performed.
* NGRP    number of energy groups.
* NL      number of legendre orders (=1 for isotropic scattering).
* IMPX    print parameter (=0 for no print).
* HISO    hollerith name information for extracted isotopes.
* ITY     =0: do not process the isotope; =1: use number density
*         stored in conc(i); =2: use number density stored in compo.
* CONC    user defined number density.
* ILEAK
*
*Parameters: output
* TOTAL   total macroscopic x-sections.
* ZNUG    nu*fission macroscopic x-sections.
* SNUGF   fission macroscopic x-sections.
* CHI     fission spectrum.
* OVERV   reciprocal neutron velocities.
* DIFFX   x-directed diffusion coefficients.
* DIFFY   y-directed diffusion coefficients.
* DIFFZ   z-directed diffusion coefficients.
* H       h-factors (kappa*fission macroscopic x-sections).
* SCAT    scattering macroscopic x-sections.
* FLUX    integrated fluxes.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPCPO
      INTEGER NISO,NGRP,IMPX,NBURN,KBURN,HISO(3*NISO),ITY(NISO),ILEAK
      REAL CONC(NISO),TOTAL(NGRP),ZNUG(NGRP),SNUGF(NGRP),CHI(NGRP),
     1 OVERV(NGRP),DIFFX(NGRP),DIFFY(NGRP),DIFFZ(NGRP),H(NGRP),
     2 SCAT(NL,NGRP,NGRP),FLUX(NGRP),BURN0,BURN1
      LOGICAL DERIV,UPS
*----
*  LOCAL VARIABLES
*----
      CHARACTER TEXT12*12
      REAL, ALLOCATABLE, DIMENSION(:) :: BURNUP,DENSIT
*----
*  SCRATCH STORAGE ALLOCATION
*----
      ALLOCATE(BURNUP(NBURN),DENSIT(NISO))
*----
*  CASE WITH NO BURNUP
*----
      IF(KBURN.EQ.0)THEN
        CALL LCMSIX(IPCPO,'BURN       1',1)
        CALL LCMGET(IPCPO,'ISOTOPESDENS',DENSIT)
        IF(DENSIT(1).NE.1.)CALL XABORT('@CREINT: DENSIT(1).NE.1.')
        DO I=2,NISO
          IF(ITY(I).EQ.0)THEN
            DENSIT(I)=0.
          ELSEIF(ITY(I).EQ.1)THEN
            DENSIT(I)=CONC(I)
          ELSEIF(ITY(I).NE.2)THEN
            CALL XABORT('@CREINT: INVALID VALUE OF ITY.')
          ENDIF
        ENDDO
        CALL CREMAC(IPCPO,NISO,NGRP,NL,IMPX,HISO,DENSIT,ILEAK,TOTAL,
     1       ZNUG,SNUGF,CHI,OVERV,DIFFX,DIFFY,DIFFZ,H,SCAT,FLUX,UPS)
        CALL LCMSIX(IPCPO,' ',2)
      ELSE
*----
*  CASE WITH BURNUP
*----
        CALL LCMGET(IPCPO,'BURNUP',BURNUP)
        TEXT12=' '
        IF(BURN0.EQ.BURN1)THEN
          DO I=1,NBURN
            IF(BURN0.EQ.BURNUP(I))THEN
              WRITE(TEXT12,'(4HBURN,4X,I4)') I
              GOTO 30
            ENDIF
          ENDDO
        ENDIF
   30   IF((TEXT12.NE.' ').AND.(.NOT.DERIV))THEN
*         BURN0=BURN1 IS A TABULATION POINT.
          CALL LCMSIX(IPCPO,TEXT12,1)
          CALL LCMGET(IPCPO,'ISOTOPESDENS',DENSIT)
          IF(DENSIT(1).NE.1.)CALL XABORT('@CREINT: DENSIT(1).NE.1.')
          DO I=2,NISO
            IF(ITY(I).EQ.0)THEN
              DENSIT(I)=0.
            ELSEIF(ITY(I).EQ.1)THEN
              DENSIT(I)=CONC(I)
            ELSEIF(ITY(I).NE.2)THEN
              CALL XABORT('@CREINT: INVALID VALUE OF ITY.')
            ENDIF
          ENDDO
          CALL CREMAC(IPCPO,NISO,NGRP,NL,IMPX,HISO,DENSIT,ILEAK,TOTAL,
     1         ZNUG,SNUGF,CHI,OVERV,DIFFX,DIFFY,DIFFZ,H,SCAT,FLUX,UPS)
          CALL LCMSIX(IPCPO,' ',2)
        ELSE
*         INTERPOLATION IS REQUIRED.
          CALL CREBUR(IPCPO,NISO,NGRP,NL,IMPX,HISO,DERIV,NBURN,BURN0,
     1         BURN1,BURNUP,ITY,CONC,ILEAK,TOTAL,ZNUG,SNUGF,CHI,OVERV,
     2         DIFFX,DIFFY,DIFFZ,H,SCAT,FLUX,UPS)
        ENDIF
      ENDIF
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(DENSIT,BURNUP)
      RETURN
      END