File: /nfs/home/0/users/jenkins/mfix.git/model/fun_avg_mod.f

1     MODULE fun_avg
2     
3     CONTAINS
4     
5       !   average at i+1/2 location
6       ! Arithmetic averages
7       !     i+1/2, j, k. Use IJKE for scalar
8       !          F(IJK) F(IPJK)  I
9       DOUBLE PRECISION FUNCTION AVG_X(XXXm, XXXp, xL)
10         USE geometry
11         IMPLICIT NONE
12         DOUBLE PRECISION XXXp, XXXm
13         INTEGER          xL
14     
15         AVG_X = FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp
16       END FUNCTION AVG_X
17     
18       !   average (of U) at i+1 location
19       !
20       !     i+1, j, k
21       !          F(IJK) F(IPJK)  IP
22       DOUBLE PRECISION FUNCTION AVG_X_E(XXXm, XXXp, xL)
23         USE geometry
24         IMPLICIT NONE
25         DOUBLE PRECISION XXXp, XXXm
26         INTEGER          xL
27     
28         AVG_X_E = FX(xL) * XXXm + FX_bar(xL) * XXXp
29       END FUNCTION AVG_X_E
30     
31       !   average at j+1/2 location
32       !
33       !     i, j+1/2, k. Use IJKN for scalar
34       !           F(IJK) F(IJPK) J
35       DOUBLE PRECISION FUNCTION AVG_Y(XXXm, XXXp, xL)
36         USE geometry
37         IMPLICIT NONE
38         DOUBLE PRECISION XXXp, XXXm
39         INTEGER          xL
40     
41         AVG_Y = FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp
42       END FUNCTION AVG_Y
43     
44       !   average (of V) at j+1 location
45       !
46       !     i, j+1, k
47       !           F(IJK) F(IJPK)
48       DOUBLE PRECISION FUNCTION AVG_Y_N(XXXm,  XXXp)
49         USE param1
50         IMPLICIT NONE
51         DOUBLE PRECISION XXXp, XXXm
52     
53         AVG_Y_N = HALF *( XXXm + XXXp )
54       END FUNCTION AVG_Y_N
55     
56       !   average at k+1/2 location
57       !
58       !     i, j, k+1/2. Use IJKT for scalar
59       !           F(IJK) F(IJKP) K
60       DOUBLE PRECISION FUNCTION AVG_Z(XXXm, XXXp, xL)
61         USE geometry
62         IMPLICIT NONE
63         DOUBLE PRECISION XXXp, XXXm
64         INTEGER          xL
65     
66         AVG_Z = FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp
67       END FUNCTION AVG_Z
68     
69       !   average (of W) at k+1 location
70       !
71       !     i, j, k+1
72       !           F(IJK) F(IJKP)
73       DOUBLE PRECISION FUNCTION AVG_Z_T(XXXm,  XXXp)
74         USE param1
75         IMPLICIT NONE
76         DOUBLE PRECISION XXXp, XXXm
77     
78         AVG_Z_T = HALF *( XXXm + XXXp )
79       END FUNCTION AVG_Z_T
80       !
81       !   Harmonic average at i+1/2 location
82       !
83       !     i+1/2, j, k. Use IJKE for scalar
84       !             F(IJK) F(IPJK)  I
85       DOUBLE PRECISION FUNCTION AVG_X_h(XXXm, XXXp, xL)
86         USE geometry
87         USE param1
88         IMPLICIT NONE
89         DOUBLE PRECISION XXXp, XXXm
90         INTEGER          xL
91     
92         AVG_X_h = XXXm * XXXp / &
93              MAX(SMALL_NUMBER, ( FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp) )
94       END FUNCTION AVG_X_h
95       !
96       !   Harmonic averageat j+1/2 location
97       !
98       !     i, j+1/2, k. Use IJKN for scalar
99       !             F(IJK) F(IJPK) J
100       DOUBLE PRECISION FUNCTION AVG_Y_h(XXXm,  XXXp,   xL)
101         USE geometry
102         USE param1
103         IMPLICIT NONE
104         DOUBLE PRECISION XXXp, XXXm
105         INTEGER          xL
106     
107         AVG_Y_h = XXXm * XXXp / &
108              MAX(SMALL_NUMBER, ( FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp) )
109       END FUNCTION AVG_Y_h
110       !
111       !   Harmonic average at k+1/2 location
112       !
113       !     i, j, k+1/2. Use IJKT for scalar
114       !             F(IJK) F(IJKP) K
115       DOUBLE PRECISION FUNCTION AVG_Z_h(XXXm,  XXXp,   xL)
116         USE geometry
117         USE param1
118         IMPLICIT NONE
119         DOUBLE PRECISION XXXp, XXXm
120         INTEGER          xL
121     
122         AVG_Z_h = XXXm * XXXp / &
123              MAX(SMALL_NUMBER, ( FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp) )
124       END FUNCTION AVG_Z_h
125       !
126       ! Harmonic averages for possibly negative scalars (sof, Aug 22 2006)
127       !   Harmonic average at i+1/2 location
128       !
129       !     i+1/2, j, k. Use IJKE for scalar
130       !             F(IJK) F(IPJK)  I
131       DOUBLE PRECISION FUNCTION AVG_X_S(XXXm,  XXXp, xL)
132         USE geometry
133         IMPLICIT NONE
134         DOUBLE PRECISION XXXp, XXXm
135         INTEGER          xL
136     
137         AVG_X_S = XXXm * XXXp / &
138              (1D-30 + ( FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp) )
139       END FUNCTION AVG_X_S
140     
141       !   Harmonic averageat j+1/2 location
142       !
143       !     i, j+1/2, k. Use IJKN for scalar
144       !             F(IJK) F(IJPK) J
145       DOUBLE PRECISION FUNCTION AVG_Y_S(XXXm, XXXp, xL)
146         USE geometry
147         IMPLICIT NONE
148         DOUBLE PRECISION XXXp, XXXm
149         INTEGER          xL
150     
151         AVG_Y_S = XXXm * XXXp / &
152              (1D-30 + ( FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp) )
153       END FUNCTION AVG_Y_S
154     
155       !   Harmonic average at k+1/2 location
156       !
157       !     i, j, k+1/2. Use IJKT for scalar
158       !             F(IJK) F(IJKP) K
159       DOUBLE PRECISION FUNCTION AVG_Z_S(XXXm,  XXXp,   xL)
160         USE geometry
161         IMPLICIT NONE
162         DOUBLE PRECISION XXXp, XXXm
163         INTEGER          xL
164     
165         AVG_Z_S = XXXm * XXXp / &
166              (1D-30 + ( FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp) )
167       END FUNCTION AVG_Z_S
168     
169     END MODULE fun_avg
170