MFIX  2016-1
fun_avg.inc
Go to the documentation of this file.
1 ! This file is included by fun_avg_mod.f
2 
3 ! These function are are defined in this file so it can be included by
4 ! individual subprograms in order to inline the (short) functions
5 ! defined in this file.
6 
7 ! All functions that may benefits from inlining should be defined in this file.
8 
9 ! For code that is not performance-critical, do:
10 
11 ! SUBROUTINE subname
12 ! USE fun_avg
13 ! ...
14 ! END SUBROUTINE subname
15 
16 ! For code that is performance-critical, do:
17 
18 ! SUBROUTINE subname
19 ! ...
20 ! CONTAINS
21 ! INCLUDE 'fun_avg.inc'
22 ! END SUBROUTINE subname
23 
24 ! Arithmetic average at i+1/2 location (i+1/2, j, k)
25 ! USE IJKE for scalar.
26 ! F(IJK) F(IPJK) I
27  DOUBLE PRECISION FUNCTION AVG_X(XXXm, XXXp, xL)
28  USE geometry, only: fx_e, fx_e_bar
29  IMPLICIT NONE
30  DOUBLE PRECISION, INTENT(IN) ::XXXp, XXXm
31  INTEGER, INTENT(IN) :: xL
32  AVG_X = FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp
33  END FUNCTION AVG_X
34 
35 
36 ! average (of U) at i+1 location (i+1, j, k)
37 ! F(IJK) F(IPJK) IP
38  DOUBLE PRECISION FUNCTION AVG_X_E(XXXm, XXXp, xL)
39  USE geometry, only: fx, fx_bar
40  IMPLICIT NONE
41  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
42  INTEGER, INTENT(IN) :: xL
43  AVG_X_E = FX(xL) * XXXm + FX_bar(xL) * XXXp
44  END FUNCTION AVG_X_E
45 
46 
47 ! average at j+1/2 location (i, j+1/2, k)
48 ! Use IJKN for scalar
49 ! F(IJK) F(IJPK) J
50  DOUBLE PRECISION FUNCTION AVG_Y(XXXm, XXXp, xL)
51  USE geometry, only: fy_n, fy_n_bar
52  IMPLICIT NONE
53  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
54  INTEGER, INTENT(IN) :: xL
55  AVG_Y = FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp
56  END FUNCTION AVG_Y
57 
58 
59 ! average (of V) at j+1 location (i, j+1, k)
60 ! F(IJK) F(IJPK)
61  DOUBLE PRECISION FUNCTION AVG_Y_N(XXXm, XXXp)
62  USE param1, only: half
63  IMPLICIT NONE
64  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
65  AVG_Y_N = HALF *( XXXm + XXXp )
66  END FUNCTION AVG_Y_N
67 
68 
69 ! average at k+1/2 location (i, j, k+1/2)
70 ! Use IJKT for scalar
71 ! F(IJK) F(IJKP) K
72  DOUBLE PRECISION FUNCTION AVG_Z(XXXm, XXXp, xL)
73  USE geometry, only: fz_t, fz_t_bar
74  IMPLICIT NONE
75  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
76  INTEGER, INTENT(IN) :: xL
77  AVG_Z = FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp
78  END FUNCTION AVG_Z
79 
80 
81 ! average (of W) at k+1 location (i, j, k+1)
82 ! F(IJK) F(IJKP)
83  DOUBLE PRECISION FUNCTION AVG_Z_T(XXXm, XXXp)
84  USE param1, only: half
85  IMPLICIT NONE
86  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
87  AVG_Z_T = HALF *( XXXm + XXXp )
88  END FUNCTION AVG_Z_T
89 
90 ! Harmonic average at i+1/2 location (i+1/2, j, k)
91 ! Use IJKE for scalar
92 ! F(IJK) F(IPJK) I
93  DOUBLE PRECISION FUNCTION AVG_X_h(XXXm, XXXp, xL)
94  USE geometry, only: fx_e, fx_e_bar
95  USE param1, only: SMALL_NUMBER
96  IMPLICIT NONE
97  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
98  INTEGER, INTENT(IN) :: xL
99  AVG_X_h = XXXm * XXXp / &
100  MAX(SMALL_NUMBER, (FX_E(xL)*XXXm + FX_E_bar(xL)*XXXp) )
101  END FUNCTION AVG_X_h
102 
103 
104 ! Harmonic averageat j+1/2 location (i, j+1/2, k)
105 ! Use IJKN for scalar
106 ! F(IJK) F(IJPK) J
107  DOUBLE PRECISION FUNCTION AVG_Y_h(XXXm, XXXp, xL)
108  USE geometry, only: fy_n, fy_n_bar
109  USE param1, only: small_number
110  IMPLICIT NONE
111  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
112  INTEGER, INTENT(IN) :: xL
113  AVG_Y_h = XXXm * XXXp / &
114  MAX(SMALL_NUMBER, (FY_N(xL)*XXXm + FY_N_bar(xL)*XXXp) )
115  END FUNCTION AVG_Y_h
116 
117 
118 ! Harmonic average at k+1/2 location (i, j, k+1/2)
119 ! Use IJKT for scalar
120 ! F(IJK) F(IJKP) K
121  DOUBLE PRECISION FUNCTION AVG_Z_h(XXXm, XXXp, xL)
122  USE geometry, only: fz_t, fz_t_bar
123  USE param1, only: small_number
124  IMPLICIT NONE
125  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
126  INTEGER, INTENT(IN) :: xL
127  AVG_Z_h = XXXm * XXXp / &
128  MAX(SMALL_NUMBER, (FZ_T(xL)*XXXm + FZ_T_bar(xL)*XXXp) )
129  END FUNCTION AVG_Z_h
130 
131 
132 ! Harmonic averages for possibly negative scalars (sof, Aug 22 2006)
133 ! Harmonic average at i+1/2 location (i+1/2, j, k)
134 ! Use IJKE for scalar
135 ! F(IJK) F(IPJK) I
136  DOUBLE PRECISION FUNCTION AVG_X_S(XXXm, XXXp, xL)
137  USE geometry, only: fx_e, fx_e_bar
138  IMPLICIT NONE
139  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
140  INTEGER, INTENT(IN) :: xL
141  AVG_X_S = XXXm * XXXp / &
142  (1D-30 + ( FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp) )
143  END FUNCTION AVG_X_S
144 
145 
146 ! For possibly negative scalars:
147 ! Harmonic average at j+1/2 location (i, j+1/2, k)
148 ! Use IJKN for scalar
149 ! F(IJK) F(IJPK) J
150  DOUBLE PRECISION FUNCTION AVG_Y_S(XXXm, XXXp, xL)
151  USE geometry, only: fy_n, fy_n_bar
152  IMPLICIT NONE
153  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
154  INTEGER, INTENT(IN) :: xL
155  AVG_Y_S = XXXm * XXXp / &
156  (1D-30 + ( FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp) )
157  END FUNCTION AVG_Y_S
158 
159 
160 ! For possibly negative scalars:
161 ! Harmonic average at k+1/2 location (i, j, k+1/2)
162 ! Use IJKT for scalar
163 ! F(IJK) F(IJKP) K
164  DOUBLE PRECISION FUNCTION AVG_Z_S(XXXm, XXXp, xL)
165  USE geometry, only: fz_t, fz_t_bar
166  IMPLICIT NONE
167  DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
168  INTEGER, INTENT(IN) :: xL
169  AVG_Z_S = XXXm * XXXp / &
170  (1D-30 + ( FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp) )
171  END FUNCTION AVG_Z_S
double precision, dimension(:), allocatable fx
Definition: geometry_mod.f:187
double precision function location(L2, XMIN, DX)
Definition: write_out0.f:930
integer, dimension(15) order
Definition: cutcell_mod.f:410
double precision, dimension(:,:), allocatable scalar
Definition: fldvar_mod.f:155
Definition: is_mod.f:11
double precision, dimension(:), allocatable fz_t
Definition: geometry_mod.f:201
double precision, dimension(:), allocatable fx_e_bar
Definition: geometry_mod.f:193
double precision, dimension(:), allocatable fx_e
Definition: geometry_mod.f:191
double precision, parameter small_number
Definition: param1_mod.f:24
double precision, parameter half
Definition: param1_mod.f:28
double precision, dimension(:), allocatable fy_n
Definition: geometry_mod.f:196
double precision, dimension(:), allocatable fx_bar
Definition: geometry_mod.f:189
double precision, dimension(:), allocatable fz_t_bar
Definition: geometry_mod.f:203
double precision, dimension(:), allocatable fy_n_bar
Definition: geometry_mod.f:198