10 enumerator :: pressure_correction, solids_correction
11 enumerator :: gas_continuity, solids_continuity
12 enumerator :: gas_u_mom, solids_u_mom, gas_v_mom, solids_v_mom
13 enumerator :: gas_w_mom, solids_w_mom
14 enumerator :: gas_energy, solids_energy
15 enumerator :: gas_species, solids_species
16 enumerator :: gran_energy
17 enumerator :: usr_scalar, k_epsilon_k, k_epsilon_e
37 use fun_avg, only: avg_x, avg_y, avg_z
39 use functions, only: ip_at_e, ip_at_n, ip_at_t
40 use functions, only: sip_at_e, sip_at_n, sip_at_t
41 use functions, only: east_of, north_of, top_of
48 use run, only: kt_type_enum, ghd_2007
76 INTEGER,
INTENT(IN) :: lEQ_NO
83 DOUBLE PRECISION,
OPTIONAL,
INTENT(INOUT) :: lB_mmax(
dimension_3,
85 INTEGER,
OPTIONAL,
INTENT(IN) :: lM
87 INTEGER,
OPTIONAL,
INTENT(IN) :: lN
94 DOUBLE PRECISION :: sourcelhs, sourcerhs
96 INTEGER :: IJK, I, J, K, IJKE, IJKN, IJKT
98 INTEGER :: L, ll, M, N
100 DOUBLE PRECISION :: EPGA, EPSA, EPtmp
104 IF (.NOT.
present(lm))
THEN 109 IF (.NOT.
present(ln))
THEN 118 CASE(pressure_correction)
120 IF (fluid_at(ijk))
THEN 121 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
122 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
123 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
124 lb_mmax(ijk,m) = max(abs(lb_mmax(ijk,m)), abs(b_m(ijk,m))
130 CASE(solids_correction)
132 IF (fluid_at(ijk))
THEN 133 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
134 a_m(ijk,0,0) = a_m(ijk,0,0) - sourcelhs
135 b_m(ijk,0) = b_m(ijk,0) - sourcerhs
136 lb_mmax(ijk,0) = max(abs(lb_mmax(ijk,0)), abs(b_m(ijk,0))
143 IF (fluid_at(ijk))
THEN 147 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
148 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
149 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
154 CASE(solids_continuity)
158 IF (fluid_at(ijk))
THEN 160 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
161 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
162 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
171 IF (.NOT.fluid_at(ijk)) cycle
174 epga = avg_x(
ep_g(ijk),
ep_g(ijke),i)
175 IF (ip_at_e(ijk) .OR. epga <=
dil_ep_s) cycle
176 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
177 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
178 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
184 IF (kt_type_enum /= ghd_2007 .OR. &
185 (kt_type_enum == ghd_2007 .AND. l==
mmax))
THEN 188 IF (.NOT.fluid_at(ijk)) cycle
192 IF (kt_type_enum == ghd_2007)
THEN 194 eptmp = eptmp + avg_x(
ep_s(ijk,ll),
ep_s(ijke,ll)
198 epsa = avg_x(
ep_s(ijk,l),
ep_s(ijke,l),i)
200 IF (ip_at_e(ijk) .OR. sip_at_e(ijk) .OR. &
202 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, l,
214 IF (.NOT.fluid_at(ijk)) cycle
217 epga = avg_y(
ep_g(ijk),
ep_g(ijkn),j)
218 IF (ip_at_n(ijk) .OR. epga <=
dil_ep_s) cycle
219 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
220 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
221 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
227 IF (kt_type_enum /= ghd_2007 .OR. &
228 (kt_type_enum == ghd_2007 .AND. l==
mmax))
THEN 231 IF (.NOT.fluid_at(ijk)) cycle
235 IF (kt_type_enum == ghd_2007)
THEN 237 eptmp = eptmp + avg_y(
ep_s(ijk,ll),
ep_s(ijkn,ll)
241 epsa = avg_y(
ep_s(ijk,l),
ep_s(ijkn,l),j)
243 IF (ip_at_n(ijk) .OR. sip_at_n(ijk) .OR. &
245 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, l,
257 IF (.NOT.fluid_at(ijk)) cycle
260 epga = avg_z(
ep_g(ijk),
ep_g(ijkt),k)
261 IF (ip_at_t(ijk) .OR. epga <=
dil_ep_s) cycle
262 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
263 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
264 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
270 IF (kt_type_enum /= ghd_2007 .OR. &
271 (kt_type_enum == ghd_2007 .AND. l==
mmax))
THEN 274 IF (.NOT.fluid_at(ijk)) cycle
278 IF (kt_type_enum == ghd_2007)
THEN 280 eptmp = eptmp + avg_z(
ep_s(ijk,ll),
ep_s(ijkt,ll)
284 epsa = avg_z(
ep_s(ijk,l),
ep_s(ijkt,l),k)
286 IF (ip_at_t(ijk) .OR. sip_at_t(ijk) .OR. &
288 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, l,
299 CASE (gas_energy, solids_energy, gas_species, solids_species,&
300 usr_scalar, k_epsilon_k, k_epsilon_e )
302 IF (fluid_at(ijk))
THEN 309 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
310 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
311 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
319 IF (fluid_at(ijk))
THEN 320 IF (kt_type_enum == ghd_2007)
THEN 323 eptmp=eptmp+
ep_s(ijk,ll)
330 CALL usr_sources(leq_no, ijk, sourcelhs, sourcerhs, m, n)
331 a_m(ijk,0,m) = a_m(ijk,0,m) - sourcelhs
332 b_m(ijk,m) = b_m(ijk,m) - sourcerhs
343 1001
FORMAT(
'Error 1101: Unknown Equation= ', a)
logical, dimension(0:dim_m) momentum_y_eq
integer, dimension(:), allocatable i_of
double precision, dimension(:), allocatable ep_g
subroutine calc_usr_source(lEQ_NO, A_M, B_M, lB_MMAX, lM, lN)
logical, dimension(0:dim_m) momentum_x_eq
integer, parameter dim_eqs
logical, dimension(0:dim_m) momentum_z_eq
integer, dimension(:), allocatable phase_4_p_s
subroutine init_err_msg(CALLER)
integer, dimension(:), allocatable k_of
integer, dimension(:), allocatable j_of
subroutine usr_sources(lEQ_NO, IJK, sourcelhs, sourcerhs, M, N)
double precision, parameter dil_ep_s
integer, dimension(:), allocatable phase_4_p_g
integer, parameter undefined_i
character(len=line_length), dimension(line_count) err_msg
double precision function ep_s(IJK, xxM)
logical, dimension(dim_eqs) call_usr_source
double precision, parameter zero
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)