summaryrefslogtreecommitdiff
path: root/Trivac/src/NSS2AC.f
blob: bc8665e868fbb0350b2869dbeaceb0c10d38e300 (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
*DECK NSS2AC
      SUBROUTINE NSS2AC(NG,NUN,IG0,FLUX,ZMU)
*
*-----------------------------------------------------------------------
*
*Purpose:
* One-factor variationnal acceleration of the flux. Double precision
* version.
*
*Copyright:
* Copyright (C) 2023 Ecole Polytechnique de Montreal
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version
*
*Author(s): R. Roy
*
*Parameters: input
* NG      number of energy groups.
* NUN     number of unknowns per energy group.
* IG0     first group to accelerate.
*
*Parameters: input/output
* FLUX    neutron flux:
*         FLUX(:,:,1) <=old;
*         FLUX(:,:,2) <=present;
*         FLUX(:,:,3) <=new.
*
*Parameters: output
* ZMU     acceleration factor.
*
*-----------------------------------------------------------------------
*
      IMPLICIT  NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER :: NG, NUN, IG0
      REAL(KIND=8) :: FLUX(NUN,NG,3), ZMU
*----
*  LOCAL VARIABLES
*----
      INTEGER           IG, IR
      REAL(KIND=8)  DMU, R1, R2
      REAL(KIND=8)  DONE, DZERO, NOM, DENOM
      PARAMETER ( DONE=1.0D0, DZERO=0.0D0 )
*----
*  ZMU CALCULATION
*----
      NOM   = DZERO
      DENOM = DZERO
      DO  3 IG= IG0,NG
          DO  2 IR=1,NUN
             R1 = FLUX(IR,IG,2) - FLUX(IR,IG,1)
             R2 = FLUX(IR,IG,3) - FLUX(IR,IG,2)
             NOM = NOM + R1*(R2-R1)
             DENOM = DENOM + (R2-R1)*(R2-R1)
    2     CONTINUE
    3 CONTINUE
*
      DMU = - NOM / DENOM
      ZMU  = DMU
      IF( DMU.GT.DZERO )THEN
       DO  13 IG= IG0,NG
          DO  12 IR=1,NUN
*
*           ACCELERATED VALUES FOR PHI(2) ET PHI(3)
            FLUX(IR,IG,3) = FLUX(IR,IG,2) + DMU *
     >        (FLUX(IR,IG,3) - FLUX(IR,IG,2))
            FLUX(IR,IG,2) = FLUX(IR,IG,1) + DMU *
     >        (FLUX(IR,IG,2) - FLUX(IR,IG,1))
   12     CONTINUE
   13  CONTINUE
      ELSE
       ZMU= DONE
      ENDIF
      RETURN
      END