summaryrefslogtreecommitdiff
path: root/Dragon/src/EDIENE.f
blob: b0bf35975ff803e424bb1244fed705b26db0d6eb (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
*DECK EDIENE
      SUBROUTINE EDIENE(NGROUP,NGCR  ,NGCOND,NTENER,
     >                  IGCR  ,EGCR  ,IGCOND,ENERGY,ENERV )
*
*-----------------------------------------------------------------------
*
*Purpose:
* Evaluate energy limits for condensation.
*
*Copyright:
* Copyright (C) 2002 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): G. Marleau
*
*Parameters: input/output
* NGROUP  number of energy groups.
* NGCR    number of condensed groups read on input.
* NGCOND  number of condensed groups read on EDI.
* NTENER  number of energy found on library.
* IGCR    new group limits.
* EGCR    new energy limits.
* IGCOND  old group limits.
* ENERGY  energy/lethargy/average energy.
* ENERV   average group energy.
*
*-----------------------------------------------------------------------
*
      IMPLICIT    NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER     NGROUP,NGCR,NGCOND,NTENER
      INTEGER     IGCR(NGROUP+1),IGCOND(NGROUP+1)
      REAL        EGCR(NGROUP+1),ENERGY(2*NGROUP+1),ENERV(NGROUP)
*----
*  LOCAL VARIABLES
*----
      INTEGER     IOUT
      CHARACTER   NAMSBR*6
      PARAMETER  (IOUT=6,NAMSBR='EDIENE')
      INTEGER     IGC,KDGRP,IGRP,JGRP,IGLIM
*----
*  FIND IF NEW ENERGY OR GROUP SPECIFICATIONS FROM INPUT
*----
      IF(NGCR .GT. 0) THEN
        IGC=0
        IF(EGCR(1) .NE. 0.0) THEN
          IF(NTENER .EQ. 0)  CALL XABORT(NAMSBR//
     >    ': CONDENSATION NOT PERMITTED - NO GROUP STRUCTURE')
          KDGRP=1
          DO 100 IGRP=1,NGROUP+1
            IF(EGCR(IGRP) .LT. ENERGY(NGROUP+1)) THEN
              KDGRP=NGROUP
              IGC=IGC+1
              IGCOND(IGC)=KDGRP
            ELSE IF(EGCR(IGRP) .LT. ENERGY(KDGRP)) THEN
              DO 110 JGRP=KDGRP,NGROUP
                IF(EGCR(IGRP) .GE. ENERGY(JGRP+1)) THEN
                  KDGRP=JGRP
                  IGC=IGC+1
                  IGCOND(IGC)=KDGRP
                  GO TO 115
                ENDIF
 110          CONTINUE
 115          CONTINUE
            ENDIF
            IF(KDGRP .EQ. NGROUP) GO TO 105
 100      CONTINUE
 105      CONTINUE
        ELSE
          DO 120 IGRP=1,NGROUP+1
            IGCOND(IGRP)=IGCR(IGRP)
            IF(IGCR(IGRP) .EQ. NGROUP) THEN
              IGC=IGRP
              GO TO 125
            ENDIF
 120      CONTINUE
 125      CONTINUE
        ENDIF
        NGCOND=IGC
      ENDIF
      IF(NTENER .GT. 0) THEN
*----
*  FIND ENERGY LIMITS, LETHARGY AND AVERAGE ENERGY
*----
        DO 130 IGRP=1,NGROUP
          ENERV(IGRP)=SQRT(ENERGY(IGRP)*ENERGY(IGRP+1))
 130    CONTINUE
        DO 140 IGC=1,NGCOND
          IGLIM=IGCOND(IGC)+1
          ENERGY(IGC+1)=ENERGY(IGLIM)
 140    CONTINUE
        IGLIM=NGCOND+1
        IF(ENERGY(IGLIM) .EQ. 0.0) ENERGY(IGLIM)=1.0E-5
        DO 150 IGC=1,NGCOND
          IGLIM=IGLIM+1
          ENERGY(IGLIM)=LOG(ENERGY(IGC)/ENERGY(IGC+1))
 150    CONTINUE
      ENDIF
      RETURN
      END