blob: 5d8ebd6749ce1192130e243aa7c4ea4284ac6c3d (
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
|
*DECK B1BETA
DOUBLE PRECISION FUNCTION B1BETA(IAPROX,B2,SIG,DHOM)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Compute the beta function for a P1 or B1 calculation.
*
*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): A. Hebert
*
*Parameters: input
* IAPROX type of beta function calculation:
* =0: LKRD or RHS; =1: P0 or P1; =2: B0 or B1.
* B2 buckling.
* SIG total macroscopic cross section.
* DHOM homogeneous leakage coefficient (used if IAPROX=0).
*
*Parameters: output
* B1BETA value of the beta function.
*
*-----------------------------------------------------------------------
*
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
*----
* SUBROUTINE ARGUMENTS
*----
INTEGER IAPROX
DOUBLE PRECISION B2,SIG,DHOM
PARAMETER(B2LIM=0.5D0)
*
SIG2=SIG*SIG
B1BETA=0.0D0
IF ((SIG.EQ.0.0).AND.(B2.EQ.0.0)) THEN
B1BETA=1.0E10
ELSE IF (IAPROX.EQ.0) THEN
* LKRD APPROXIMATION (IMPOSED DIFFUSION COEFFICIENT).
B1BETA=DHOM/(SIG+DHOM*B2)
ELSE IF (IAPROX.EQ.1) THEN
* P0 OR P1 APPROXIMATION
B1BETA=1.0D0/(3.0D0*SIG2+B2)
ELSE IF (IAPROX.EQ.2) THEN
* B0 OR B1 APPROXIMATION
IF (B2.GT.0.05D0*SIG2) THEN
TMP=SQRT(B2)/SIG
B1BETA=(1.0D0-ATAN(TMP)/TMP)/B2
ELSE IF((B2.LE.0.05D0*SIG2).AND.(B2.GE.-0.05D0*SIG2)) THEN
TMP=B2/SIG2
B1BETA=(1.0D0-3.0D0*TMP*(0.2D0-TMP/7.0D0+TMP*TMP/9.0D0-TMP
1 *TMP*TMP/11.0D0))/(3.0D0*SIG2)
ELSE IF ((B2.LT.-0.05D0*SIG2).AND.(B2.GE.-B2LIM*SIG2)) THEN
TMP=SQRT(-B2)
B1BETA=(1.0D0-0.5D0*SIG*LOG((SIG+TMP)/(SIG-TMP))/TMP)/B2
ELSE IF(B2.LT.-B2LIM*SIG2) THEN
* Pn-type fundamental mode extension for extreme subcritical
* cases
TMP2=SQRT(B2LIM*SIG2)
ALPHA1=0.5D0*LOG((SIG+TMP2)/(SIG-TMP2))/TMP2
ALPHA2=3.0D0*SIG/(3.0D0*SIG2-B2LIM*SIG2)
ALPHA3=3.0D0*SIG/(3.0D0*SIG2+B2)
B1BETA=(1.0D0-(ALPHA1-ALPHA2+ALPHA3)*SIG)/B2
ENDIF
ELSE
CALL XABORT('B1BETA: INVALID VALUE OF IAPROX.')
ENDIF
RETURN
END
|