1 ! This file
is included by fun_avg_mod.f
3 ! These
function are are defined in
this file so it can be included by
5 ! defined in this file.
7 ! All
functions that may benefits from inlining should be defined in this file.
9 ! For code that
is not performance-critical, do:
14 ! END SUBROUTINE subname
16 ! For code that
is performance-critical, do:
22 ! END SUBROUTINE subname
24 ! Arithmetic average at i+1/2
location (i+1/2, j, k)
27 DOUBLE PRECISION FUNCTION AVG_X(XXXm, XXXp, xL)
30 DOUBLE PRECISION, INTENT(IN) ::XXXp, XXXm
31 INTEGER, INTENT(IN) :: xL
32 AVG_X = FX_E(xL) * XXXm + FX_E_bar(xL) * XXXp
36 ! average (of U) at i+1
location (i+1, j, k)
38 DOUBLE PRECISION FUNCTION AVG_X_E(XXXm, XXXp, xL)
41 DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
42 INTEGER, INTENT(IN) :: xL
43 AVG_X_E = FX(xL) * XXXm + FX_bar(xL) * XXXp
47 ! average at j+1/2
location (i, j+1/2, k)
50 DOUBLE PRECISION FUNCTION AVG_Y(XXXm, XXXp, xL)
53 DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
54 INTEGER, INTENT(IN) :: xL
55 AVG_Y = FY_N(xL) * XXXm + FY_N_bar(xL) * XXXp
59 ! average (of V) at j+1
location (i, j+1, k)
61 DOUBLE PRECISION FUNCTION AVG_Y_N(XXXm, XXXp)
64 DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
65 AVG_Y_N = HALF *( XXXm + XXXp )
69 ! average at k+1/2
location (i, j, k+1/2)
72 DOUBLE PRECISION FUNCTION AVG_Z(XXXm, XXXp, xL)
75 DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
76 INTEGER, INTENT(IN) :: xL
77 AVG_Z = FZ_T(xL) * XXXm + FZ_T_bar(xL) * XXXp
81 ! average (of W) at k+1
location (i, j, k+1)
83 DOUBLE PRECISION FUNCTION AVG_Z_T(XXXm, XXXp)
84 USE param1, only:
half 86 DOUBLE PRECISION, INTENT(IN) :: XXXp, XXXm
87 AVG_Z_T = HALF *( XXXm + XXXp )
90 ! Harmonic average at i+1/2
location (i+1/2, j, k)
93 DOUBLE PRECISION FUNCTION AVG_X_h(XXXm, XXXp, xL)
95 USE param1, only: SMALL_NUMBER
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) )
104 ! Harmonic averageat j+1/2
location (i, j+1/2, k)
107 DOUBLE PRECISION FUNCTION AVG_Y_h(XXXm, XXXp, xL)
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) )
118 ! Harmonic average at k+1/2
location (i, j, k+1/2)
121 DOUBLE PRECISION FUNCTION AVG_Z_h(XXXm, XXXp, xL)
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) )
132 ! Harmonic averages for possibly negative
scalars (sof, Aug 22 2006)
133 ! Harmonic average at i+1/2
location (i+1/2, j, k)
136 DOUBLE PRECISION FUNCTION AVG_X_S(XXXm, XXXp, xL)
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) )
146 ! For possibly negative
scalars:
147 ! Harmonic average at j+1/2
location (i, j+1/2, k)
150 DOUBLE PRECISION FUNCTION AVG_Y_S(XXXm, XXXp, xL)
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) )
160 ! For possibly negative
scalars:
161 ! Harmonic average at k+1/2
location (i, j, k+1/2)
164 DOUBLE PRECISION FUNCTION AVG_Z_S(XXXm, XXXp, xL)
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) )
double precision, dimension(:), allocatable fx
double precision function location(L2, XMIN, DX)
integer, dimension(15) order
double precision, dimension(:,:), allocatable scalar
double precision, dimension(:), allocatable fz_t
double precision, dimension(:), allocatable fx_e_bar
double precision, dimension(:), allocatable fx_e
double precision, parameter small_number
double precision, parameter half
double precision, dimension(:), allocatable fy_n
double precision, dimension(:), allocatable fx_bar
double precision, dimension(:), allocatable fz_t_bar
double precision, dimension(:), allocatable fy_n_bar