summaryrefslogtreecommitdiff
path: root/Donjon/src/DETINT.f
blob: 5ee212c3ecf0934339677a2985bc4a46dd2cea6f (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
*DECK DETINT
      SUBROUTINE DETINT(NX,NY,NZ,NEL,NUN,LPARAB,MESHX,MESHY,MESHZ,
     +           KEYF,FLUX,NGRP,DEVPOS,RESP,IPRT)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Driver for the interpolation.
*
*Copyright:
* Copyright (C) 2010 Ecole Polytechnique de Montreal.
*
*Author(s): 
* E. Varin, M. Guyot
*
*Parameters:
* NX     number of x mesh-splitted elements 
* NY     number of y mesh-splitted elements 
* NZ     number of z mesh-splitted elements
* NEL    number of finite elements
* NUN    number of unknowns
* LPARAB =.TRUE. if parabolic interpolation is performed
* MESHX  regions coordinates according to x
* MESHY  regions coordinates according to y
* MESHZ  regions coordinates according to z
* KEYF   keyflux recover from L_TRACk object
* FLUX   flux for each mesh-splitted elements
* NGRP   number of energy groups
* DEVPOS detector coordinates
* RESP   flux reads by the detector
* IPRT   printing index
*
*-----------------------------------------------------------------------
*
      IMPLICIT NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER NX,NY,NZ,NEL,NUN,NGRP,IPRT,KEYF(NEL)
      REAL MESHX(NX+1),MESHY(NY+1),MESHZ(NZ+1),FLUX(NUN,NGRP),RESP,
     1 DEVPOS(6)
      LOGICAL LPARAB
*----
*  LOCAL VARIABLES
*----
      INTEGER NXP1,NYP1,NZP1,NDET,I,IM
      REAL COR(3)
      REAL, ALLOCATABLE, DIMENSION(:) :: XCT,YCT,ZCT
*----
*  SCRATCH STORAGE ALLOCATION
*   XCT    center coordinates of each mesh-splitted elements for x
*   YCT    center coordinates of each mesh-splitted elements for y
*   ZCT    center coordinates of each mesh-splitted elements for z
*   COR    center detector coordinates
*----
      ALLOCATE(XCT(NX),YCT(NY),ZCT(NZ))
*
      NXP1 = NX+1
      NYP1 = NY+1
      NZP1 = NZ+1

      IF(IPRT.GT.1) 
     +  WRITE(6,*) 'INTERPOLATION POLYNOMIALE DES LECTURES AUX VANADIUM'
      NDET = 1
*----
*  CENTER MESH CALCULATION
*----
      DO 10 I=1,NX
        XCT(I) = (MESHX(I+1) + MESHX(I)) /2.
   10 CONTINUE
      DO 11 I=1,NY
        YCT(I) = (MESHY(I+1) + MESHY(I)) /2.
   11 CONTINUE
      DO 12 I=1,NZ
        ZCT(I) = (MESHZ(I+1) + MESHZ(I)) /2.
   12 CONTINUE
*----
*  CENTER DETECTOR COORDINATE
*----
      DO 13 I=1,3
        COR(I) = (DEVPOS(2*I) + DEVPOS(2*I-1)) /2.
   13 CONTINUE
      IF(LPARAB) THEN
*----
*  POLYNOMIAL FLUX INTERPOLATION AT DETECTOR SITES
*----
         CALL DETCTL(NX,NY,NZ,NEL,FLUX(1,2),RESP,NDET,XCT,YCT,ZCT,COR,
     >   KEYF,IPRT)
      ELSE
         IM = MAX(NX,NY)
         IM = MAX(IM,NZ)
         CALL DETSPL(NX,NY,NZ,IM,FLUX(1,2),RESP,NDET,XCT,YCT,ZCT,COR,
     >   KEYF,IPRT)
      ENDIF
*----
*  SCRATCH STORAGE DEALLOCATION
*----
      DEALLOCATE(ZCT,YCT,XCT)
      RETURN
      END