MFIX  2016-1
usr_prop_mod.f
Go to the documentation of this file.
1 ! or put the actual routine calc_usr_source here? move logic variable
2 ! usr_source into run or something...
3  module usr_prop
4  use param, only: dim_m
5 
6 ! If .TRUE. call user-defined physical properties
7  LOGICAL :: usr_rog
8  LOGICAL :: usr_cpg
9  LOGICAL :: usr_ros(dim_m)
10  LOGICAL :: usr_cps(dim_m)
11 
12 ! If .TRUE. call user_defined transport properties
13  LOGICAL :: usr_mug
14  LOGICAL :: usr_kg
15  LOGICAL :: usr_difg
16  LOGICAL :: usr_mus(dim_m)
17  LOGICAL :: usr_ks(dim_m)
18  LOGICAL :: usr_difs(dim_m)
19 
20 ! Interphase momentum exchange coefficients (F_GS, F_SS)
21  LOGICAL :: usr_fgs(dim_m)
22  LOGICAL :: usr_fss( (dim_m*(dim_m-1)/2)+1 )
23 ! Interphase heat transfer coefficient (GAMA)
24  LOGICAL :: usr_gama(dim_m)
25 
26  enum, bind(c)
27  enumerator :: gas_density, solids_density
28  enumerator :: gas_specificheat, solids_specificheat
29  enumerator :: gas_viscosity, solids_viscosity
30  enumerator :: gas_conductivity, solids_conductivity
31  enumerator :: gas_diffusivity, solids_diffusivity
32  enumerator :: gassolids_drag, solidssolids_drag
33  enumerator :: gassolids_heattransfer
34  enumerator :: blank
35  enumerator :: dummy
36  END enum
37 
38 
39  CONTAINS
40 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
41 ! C
42 ! Subroutine: CALC_USR_PROP C
43 ! Purpose: Driver routine to calculate user defined physical, C
44 ! transport, exchange terms that appear in the governing equations. C
45 ! C
46 ! C
47 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
48  SUBROUTINE calc_usr_prop(lprop, lM, lL, lerr)
49 
50 ! Modules
51 !-----------------------------------------------
52  use compar, only: ijkstart3, ijkend3, mype, numpes
53  use functions, only: fluid_at, wall_at, fluidorp_flow_at
54  use output, only: report_neg_density
56  use param1, only: undefined_i, zero
57  use physprop, only: nmax
58  use physprop, only: k_g, dif_g, c_pg, mu_g
59  use physprop, only: k_s, dif_s, c_ps
60  use fldvar, only: ro_g, rop_g, ep_g
61  use fldvar, only: ro_s, p_s
62  use visc_g, only: mu_gt, lambda_gt
63  use visc_s, only: mu_s, lambda_s
64  use utilities, only: mfix_isnan
65 
66  use error_manager
67 
68  IMPLICIT NONE
69 ! Dummy arguments
70 !-----------------------------------------------
71 ! User properties available
72 ! ROg, ROs (gas and solids density)
73 ! CPg, CPs (gas and solids specific heat)
74 ! Mug, Mus (gas and solids viscosity)
75 ! Kg, Ks (gas and solids conductivity)
76 ! Difg, Difs (gas and solids diffusivity)
77 ! Fgs, Fss (gas-solids and solids-solids drag)
78 ! Gama (gas-solids heat transfere coefficient)
79  INTEGER, INTENT(IN) :: lprop
80 
81 ! Phase index
82  INTEGER, OPTIONAL, INTENT(IN) :: lM
83 
84 ! Phase index
85  INTEGER, OPTIONAL, INTENT(IN) :: lL
86 
87 ! Error index
88 ! Arrays for storing errors:
89 ! 100 - Negative gas phase density
90 ! 101 - Negative solids phase density
91 ! 10x - Unclassified
92  INTEGER, OPTIONAL, INTENT(INOUT) :: lerr(0:numpes-1)
93 
94 ! Local variables
95 !-----------------------------------------------
96 ! indices
97  INTEGER :: IJK
98 ! tmp indices
99  INTEGER :: M, L, N
100 ! Flag to write log header
101  LOGICAL :: wHeader
102 
103 !-----------------------------------------------
104 
105 ! set local values for phase index
106  IF (.NOT.present(lm)) THEN
107  m = undefined_i
108  ELSE
109  m = lm
110  ENDIF
111 
112 ! set local values for phase index
113  IF (.NOT.present(ll)) THEN
114  l = undefined_i
115  ELSE
116  l = ll
117  ENDIF
118 
119  n = undefined_i
120 
121  SELECT CASE(lprop)
122 
123 ! Gas physical properties: density
124  CASE(gas_density)
125  wheader = .true.
126  DO ijk=ijkstart3,ijkend3
127  IF (wall_at(ijk)) cycle
128 ! CALL USR_PROPERTIES(lprop, IJK, 0, N)
129  CALL usr_prop_rog(ijk)
130  rop_g(ijk) = ep_g(ijk)*ro_g(ijk)
131 ! report errors
132  IF(ro_g(ijk) < zero .or. mfix_isnan(ro_g(ijk))) THEN
133  lerr(mype) = 100 ! return appropritae error flag
134  IF(report_neg_density) CALL rogerr_log(ijk, wheader)
135  ENDIF
136 
137  ENDDO
138 
139 ! Gas physical properties: specific heat
140  CASE(gas_specificheat)
141  DO ijk=ijkstart3,ijkend3
142  IF (wall_at(ijk)) cycle
143 ! CALL USR_PROPERTIES(lprop, IJK, 0, N)
144  CALL usr_prop_cpg(ijk)
145 ! report errors.
146  IF(c_pg(ijk) <= zero) THEN
147 ! lErr(myPE) = 103
148  IF(report_neg_specificheat) CALL cpgerr_log(ijk, wheader)
149  ENDIF
150  ENDDO
151 
152 ! Gas transport properties: viscosity
153  CASE(gas_viscosity)
154  DO ijk=ijkstart3,ijkend3
155  IF (fluid_at(ijk)) THEN
156 ! CALL USR_PROPERTIES(lprop, IJK, 0, N)
157  CALL usr_prop_mug(ijk)
158  mu_gt(ijk) = mu_g(ijk)
159  lambda_gt(ijk) = -2./3.*mu_gt(ijk)
160  ELSE ! probably unnecessary
161  mu_g(ijk) = zero
162  mu_gt(ijk) = zero
163  lambda_gt(ijk) = zero
164  ENDIF
165  ENDDO
166 
167 ! Gas transport properties: conductivity
168  CASE(gas_conductivity)
169  DO ijk=ijkstart3,ijkend3
170  IF (fluid_at(ijk)) THEN
171 ! CALL USR_PROPERTIES(lprop, IJK, 0, N)
172  CALL usr_prop_kg(ijk)
173  ELSE ! probably unnecessary
174  k_g(ijk) = zero
175  ENDIF
176  ENDDO
177 
178 ! Gas transport properties: diffusivity
179  CASE(gas_diffusivity)
180  DO n=1,nmax(0)
181  DO ijk=ijkstart3,ijkend3
182  IF (fluid_at(ijk)) THEN
183 ! CALL USR_PROPERTIES(lprop, IJK, 0, N)
184  CALL usr_prop_difg(ijk,n)
185  ELSE ! probably unnecessary
186  dif_g(ijk,n) = zero
187  ENDIF
188  ENDDO
189  ENDDO
190 
191 ! Solids physical properties: density
192  CASE(solids_density)
193  wheader = .true.
194  DO ijk=ijkstart3,ijkend3
195  IF (wall_at(ijk)) cycle
196 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
197  CALL usr_prop_ros(ijk,m)
198 ! report errors.
199  IF(ro_s(ijk,m) <= zero) THEN
200  lerr(mype) = 101
201  IF(report_neg_density) CALL roserr_log(ijk, m, wheader)
202  ENDIF
203 
204  ENDDO
205 
206 ! Solids physical properties: specific heat
207  CASE(solids_specificheat)
208  DO ijk=ijkstart3,ijkend3
209  IF (wall_at(ijk)) cycle
210 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
211  CALL usr_prop_cps(ijk,m)
212 ! report errors.
213  IF(c_ps(ijk,m) <= zero) THEN
214 ! lErr(myPE) = 104
215  IF(report_neg_specificheat) CALL cpserr_log(ijk, m, wheader)
216  ENDIF
217  ENDDO
218 
219 ! Solids transport properties: viscosity
220  CASE(solids_viscosity)
221  DO ijk=ijkstart3,ijkend3
222  IF (fluid_at(ijk)) THEN
223 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
224  CALL usr_prop_mus(ijk,m)
225  ELSE ! probably unnecessary
226  mu_s(ijk,m) = zero
227  lambda_s(ijk,m) = zero
228  ENDIF
229  ENDDO
230 
231 ! Solids transport properties: conductivity
232  CASE(solids_conductivity)
233  DO ijk=ijkstart3,ijkend3
234  IF (fluid_at(ijk)) THEN
235 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
236  CALL usr_prop_ks(ijk,m)
237  ELSE ! probably unnecessary
238  k_s(ijk,m) = zero
239  ENDIF
240  ENDDO
241 
242 ! Solids transport properties: diffusivity
243  CASE(solids_diffusivity)
244  DO n=1,nmax(m)
245  DO ijk=ijkstart3,ijkend3
246  IF (fluid_at(ijk)) THEN
247 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
248  CALL usr_prop_difs(ijk,m,n)
249  ELSE ! probably unnecessary
250  dif_s(ijk,m,n) = zero
251  ENDIF
252  ENDDO
253  ENDDO
254 
255 ! Gas-solids exchange: Interphase heat transfer coefficient (GAMA)
256  CASE(gassolids_heattransfer)
257  DO ijk=ijkstart3,ijkend3
258  IF (fluid_at(ijk)) THEN
259 ! CALL USR_PROPERTIES(lprop, IJK, M, N)
260  CALL usr_prop_gama(ijk,m)
261  ENDIF
262  ENDDO
263 
264 ! Gas-solids exchange: interphase drag
265  CASE(gassolids_drag)
266  DO ijk=ijkstart3,ijkend3
267  IF (fluidorp_flow_at(ijk)) THEN
268  CALL usr_properties(lprop, ijk, m, n)
269 ! this hook is not accessed or functioning.
270 ! use drag_type = usr_drag to access this entity
271  ENDIF
272  ENDDO
273 
274 ! Solids-solids exchange: interphase drag
275  CASE(solidssolids_drag)
276  DO ijk=ijkstart3,ijkend3
277  IF (wall_at(ijk)) cycle
278 ! CALL USR_PROPERTIES(lprop, IJK, M, L)
279  CALL usr_prop_fss(ijk,l,m)
280  ENDDO
281 
282 ! error out
283  CASE DEFAULT
284 ! should never hit this
285 ! Initialize the error manager.
286  CALL init_err_msg("CALC_USR_PROP")
287  WRITE(err_msg, 1001) ival(lprop)
288  CALL flush_err_msg(abort=.true.)
289  1001 FORMAT('Error 1101: Unknown Property= ', a)
290  CALL finl_err_msg
291  END SELECT ! end selection of user property
292 
293  RETURN
294  END SUBROUTINE calc_usr_prop
295 
296  end module usr_prop
297 
logical, dimension(dim_m) usr_ros
Definition: usr_prop_mod.f:9
subroutine usr_properties(lprop, IJK, M, N)
double precision, dimension(:,:), allocatable c_ps
Definition: physprop_mod.f:86
double precision, dimension(:,:), allocatable mu_s
Definition: visc_s_mod.f:5
subroutine cpserr_log(IJK, M, tHeader)
subroutine usr_prop_fss(IJK, L, M)
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ep_g
Definition: fldvar_mod.f:15
subroutine rogerr_log(IJK, tHeader)
subroutine usr_prop_ros(IJK, M)
subroutine finl_err_msg
subroutine usr_prop_difg(IJK, N)
double precision, dimension(:,:), allocatable dif_g
Definition: physprop_mod.f:110
subroutine usr_prop_difs(IJK, M, N)
double precision, dimension(:), allocatable mu_gt
Definition: visc_g_mod.f:8
subroutine usr_prop_ks(IJK, M)
logical usr_rog
Definition: usr_prop_mod.f:7
integer, parameter dim_m
Definition: param_mod.f:67
subroutine cpgerr_log(IJK, tHeader)
logical usr_mug
Definition: usr_prop_mod.f:13
subroutine calc_usr_prop(lprop, lM, lL, lerr)
Definition: usr_prop_mod.f:49
integer numpes
Definition: compar_mod.f:24
subroutine init_err_msg(CALLER)
logical, dimension(dim_m) usr_difs
Definition: usr_prop_mod.f:18
subroutine usr_prop_mug(IJK)
logical usr_difg
Definition: usr_prop_mod.f:15
logical usr_cpg
Definition: usr_prop_mod.f:8
double precision, dimension(:,:,:), allocatable dif_s
Definition: physprop_mod.f:116
double precision, dimension(:,:), allocatable lambda_s
Definition: visc_s_mod.f:31
logical, dimension((dim_m *(dim_m-1)/2)+1) usr_fss
Definition: usr_prop_mod.f:22
Definition: param_mod.f:2
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
integer, dimension(0:dim_m) nmax
Definition: physprop_mod.f:119
subroutine usr_prop_gama(IJK, M)
double precision, dimension(:,:), allocatable p_s
Definition: fldvar_mod.f:123
subroutine usr_prop_cpg(IJK)
integer mype
Definition: compar_mod.f:24
subroutine roserr_log(IJK, M, tHeader)
subroutine usr_prop_cps(IJK, M)
double precision, dimension(:), allocatable mu_g
Definition: physprop_mod.f:68
subroutine usr_prop_kg(IJK)
double precision, dimension(:), allocatable lambda_gt
Definition: visc_g_mod.f:17
integer ijkstart3
Definition: compar_mod.f:80
integer, parameter undefined_i
Definition: param1_mod.f:19
subroutine usr_prop_rog(IJK)
Definition: usr_properties.f:8
logical, dimension(dim_m) usr_ks
Definition: usr_prop_mod.f:17
character(len=line_length), dimension(line_count) err_msg
logical, dimension(dim_m) usr_mus
Definition: usr_prop_mod.f:16
double precision, dimension(:), allocatable k_g
Definition: physprop_mod.f:92
logical function mfix_isnan(x)
Definition: utilities_mod.f:14
subroutine usr_prop_mus(IJK, M)
logical, dimension(dim_m) usr_fgs
Definition: usr_prop_mod.f:21
logical report_neg_density
Definition: output_mod.f:37
logical usr_kg
Definition: usr_prop_mod.f:14
double precision, dimension(:,:), allocatable k_s
Definition: physprop_mod.f:98
double precision, dimension(:), allocatable ro_g
Definition: fldvar_mod.f:32
double precision, dimension(:), allocatable rop_g
Definition: fldvar_mod.f:38
double precision, parameter zero
Definition: param1_mod.f:27
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
logical, dimension(dim_m) usr_cps
Definition: usr_prop_mod.f:10
double precision, dimension(:), allocatable c_pg
Definition: physprop_mod.f:80
logical report_neg_specificheat
Definition: output_mod.f:39
logical, dimension(dim_m) usr_gama
Definition: usr_prop_mod.f:24