summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBWRI.f
blob: b59075475a763a86406ccbab28c0b357ccf6ac29 (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
*DECK LIBWRI
      SUBROUTINE LIBWRI(NTMPR,NDILR,TMPISO,DILISO,TMPT,DILT,REST,RIT,
     >                  XSOUT,XSCOR)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Resonance integral temperature and dilution interpolation.
*
*Copyright:
* Copyright (C) 1997 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
* NTMPR   number of temperature tables.             
* NDILR   number of dilution tables.                
* TMPISO  temperature of isotope.                   
* DILISO  dilution of isotope.                      
* TMPT    sqrt(temperature) in table.               
* DILT    sqrt(dilution) in table.                  
* REST    resonance rates input.                    
*
*Parameters: output
* XSOUT   resonance integrals.               
* XSCOR   resonance integrals correction.              
*
*Parameters: scratch
* RIT     dummy vector.                             
*
*-----------------------------------------------------------------------
*
      IMPLICIT   NONE
      REAL       EPSRI,SQDILI
      PARAMETER (EPSRI=0.0005,SQDILI=1.0E+5)
      INTEGER    NTMPR,NDILR
      REAL       TMPISO,DILISO,TMPT(NTMPR),DILT(NDILR),
     >           REST(NDILR,NTMPR),RIT(NDILR),XSOUT,XSCOR
      INTEGER    IDIL,NDILE,JDEPT,JFINT,IR,JD
      REAL       SQTD,SQTT,ALPHA,AIKINT,ASLOPE
*----
*  SIMPLE LINEAR INTERFOLATION IN SQRT(TMP)
*----
      SQTD=SQRT(DILISO)
      XSOUT=0.0
      DO 110 IDIL=NDILR,1,-1
        IF(DILT(IDIL).LT.SQDILI) THEN
          NDILE=IDIL
          GO TO 115
        ENDIF
 110  CONTINUE
      RETURN
 115  CONTINUE
      SQTT=SQRT(TMPISO)
      IF(NTMPR.EQ.1) THEN
        JDEPT=1
        JFINT=1
        ALPHA=0.0
      ELSE
        JDEPT=1
        DO 100 IR=1,NTMPR-1
          IF(SQTT.GE.TMPT(IR)) JDEPT=IR
 100    CONTINUE
        JFINT=JDEPT+1
        ALPHA=(SQTT-TMPT(JDEPT))/(TMPT(JFINT)-TMPT(JDEPT))
      ENDIF
      DO 120 JD=1,NDILR
        RIT(JD)=(1.-ALPHA)*REST(JD,JDEPT)+
     >           ALPHA*REST(JD,JFINT)
 120  CONTINUE
      IF(SQTD .GT. DILT(NDILE)) THEN
*----
*  INTERPOLATE LINEARLY BETWEEN LAST DILUTION IN TABLE
*  AND INFINITE DILUTION
*----
        ASLOPE=(DILT(NDILE)/SQTD)**2
        XSOUT=ASLOPE*RIT(NDILE)+(1.0-ASLOPE)*RIT(NDILR)
      ELSE
*----
*  AIKINT INTERPOLATION FOR DILUTION
*----
        XSOUT=AIKINT(SQTD,DILT,RIT,NDILE,EPSRI)
      ENDIF
      XSCOR=XSCOR+XSOUT
      RETURN
      END