35 INTEGER RANGE_TOP, RANGE_BOT
37 INTEGER PHASE_LIST(
dim_m)
40 DOUBLE PRECISION NPMpSEC(
dim_m)
41 DOUBLE PRECISION NPpSEC
42 DOUBLE PRECISION NPpDT
43 DOUBLE PRECISION SCALED_VAL
44 DOUBLE PRECISION MAX_DIA
46 DOUBLE PRECISION :: EPs_ERR
47 DOUBLE PRECISION :: VOL_FLOW
49 LOGICAL,
parameter :: setDBG = .false.
54 DOUBLE PRECISION VEL_TMP(
dim_m)
55 DOUBLE PRECISION EPs_TMP(
dim_m)
59 DOUBLE PRECISION MAX_VEL
61 DOUBLE PRECISION MINIPV, MAXIPV
69 if(dflag)
write(*,
"(2/,2x,'DEM inlet count: ',I4)")
dem_bcmi 81 if(dflag)
write(*,
"(2/,'Setting DEM_MI:',I3)") bcv_i
92 DO m=1,
mmax + des_mmax
96 phase_cnt = phase_cnt + 1
97 phase_list(phase_cnt) = m
98 max_dia = max(max_dia,
d_p0(m))
101 dem_mi(bcv_i)%POLYDISPERSE = (phase_cnt > 1)
116 CASE(
'N',
'S'); vel_tmp(m) = abs(
bc_v_s(bcv,m))
117 CASE(
'E',
'W'); vel_tmp(m) = abs(
bc_u_s(bcv,m))
118 CASE(
'T',
'B'); vel_tmp(m) = abs(
bc_w_s(bcv,m))
122 max_vel = max(abs(vel_tmp(m)), max_vel)
149 npmpsec(m) = vol_flow / (
pi/6.d0*
d_p0(m)**3)
152 if(dflag)
write(*,1100) m, vel_tmp(m), npmpsec(m)
156 nppsec = sum(npmpsec)
158 1100
FORMAT(/2
x,
'Conversion Info: Phase ',i2,/4
x,
'Velocity: ',g12.5,/ &
159 4
x,
'NPMpSEC = ',f11.1)
161 if(dflag)
write(*,
"(/2x,'Max Velocity:',3x,g12.5)") max_vel
162 if(dflag)
write(*,
"( 2x,'NPpSEC:',3x,F11.1)") nppsec
165 nppdt = nppsec * dtsolid
168 IF(nppdt ==
zero)
THEN 171 ELSEIF(nppdt .LT. 1.0)
THEN 173 pi_factor(bcv_i) = floor(
real(1.d0/nppdt))
176 pi_count(bcv_i) = ceiling(
real(nppdt))
180 occupants =
dem_mi(bcv_i)%OCCUPANTS
185 minipv = max_dia/( dtsolid*dble(
pi_factor(bcv_i)) * dble( &
186 floor(
real(occupants)/
real(
pi_count(bcv_i)))))
190 maxipv = max_dia/( dtsolid*dble(
pi_factor(bcv_i)) * dble( &
191 floor(ceiling(
real(occupants)/2.0)/
real(PI_COUNT(bcv_i)))))
197 if(dflag)
write(*,
"(/2x,'MaxIPV:',3x,g12.5)") maxipv
198 if(dflag)
write(*,
"( 2x,'MinIPV:',3x,g12.5)") minipv
200 IF(max_vel < minipv)
THEN 201 WRITE(
err_msg,1110) bcv, max_vel, minipv
205 1110
FORMAT(
'Error 1110: Solids velocity for BC ',i3,
' is too low ', &
206 'to satisfy DEM',/
'inlet packing restrictions. Potential ', &
207 'solutions:',//,
' > If the BC velocities (BC_U_s, BC_V_s, ', &
208 'BC_W_s) are defined, specify',/3
x,
'a larger value for the ',&
209 'velocity normal to the flow plane.',//
' > If MASSFLOW or ', &
210 'VOLFLOW are defined, decrease the solids volume',/3
x, &
211 'fraction to increase solids velocity.',//2
x,
'Max user-', &
212 'specified BC velocity: ',g12.5,/2
x,
'Minimum required ', &
213 'solids Velocity: ',g12.5)
233 eps_tmp(m) =
bc_ep_s(bcv,m) * (vel_tmp(m) / max_vel)
236 CASE(
'N');
bc_v_s(bcv,m) = abs(max_vel)
237 CASE(
'S');
bc_v_s(bcv,m) = -abs(max_vel)
238 CASE(
'E');
bc_u_s(bcv,m) = abs(max_vel)
239 CASE(
'W');
bc_u_s(bcv,m) = -abs(max_vel)
240 CASE(
'T');
bc_w_s(bcv,m) = abs(max_vel)
241 CASE(
'B');
bc_w_s(bcv,m) = -abs(max_vel)
245 eps_err = eps_err + (
bc_ep_s(bcv,m) - eps_tmp(m))
251 IF(eps_err > 0.01)
THEN 252 WRITE(
err_msg,1200) bcv, max_vel, eps_err
259 WRITE(
err_msg,1205) bcv, max_vel, eps_err
276 1200
FORMAT(
'Error 1200: Unable to impose a uniform solids velocity ',&
277 'on BC',i3,
'.',/
'Setting all solids to the highest velocity ',&
278 'results in a large error',/
'in the solids volume fraction. ',&
279 'Please correct the mfix.dat file.',2/5
x,
'Max Inlet Velocity',&
280 ':',1
x,es11.4,/5
x,
'Total BC_EP_s Error:',es11.4)
283 1205
FORMAT(
'Warning 1201: Uniform solids velocity imposed on BC',i3, &
284 '.',2/,5
x,
'Uniform Inlet Velocity:',1
x,es11.4,/5
x,
'Total ', &
285 'BC_EP_s Error:',4
x,es11.4,/
' ')
287 1210
FORMAT(/,5
x,
'|',11(
'-'),
'|',3(14(
'-'),
'|'),/5
x,
'|',3
x,
'Phase',3
x,&
288 '|',4
x,
'BC_EP_s',3
x,
'|',2
x,
'Calculated',2
x,
'|',3
x,
'ABS ', &
289 'Error',2
x,
'|',/5
x,
'|',11(
'-'),
'|',3(14(
'-'),
'|'))
291 1211
FORMAT(5
x,
'|',4
x,i2,5
x,
'| ',1
x,es11.4,1
x,
'|',1
x,es11.4,2
x,
'|', &
292 1
x,es11.4,1
x,
' |',/5
x,
'|',11(
'-'),
'|',3(14(
'-'),
'|'))
296 IF(
dem_mi(bcv_i)%POLYDISPERSE)
THEN 298 DO mm=1,phase_cnt - 1
301 range_top = floor(scaled_val) + (range_bot-1)
303 range_bot = range_top+1
306 m = phase_list(phase_cnt)
321 WRITE(
err_msg,1000) bcv, nppdt, int(nppdt/dtsolid), &
325 1000
FORMAT(2/,2
x,
'For mass inlet BC: ', i3,/,&
326 4
x,
'No. particles injected per solids time step = ', es15.8,/,&
327 4
x,
'No. particles injected per second = ', i10,/,&
328 4
x,
'PI_FACTOR = ', i10,
' PI_COUNT = ', i5,/,&
329 4
x,
'start DES_MI_TIME = ', es15.8,/
' ')
376 INTEGER,
ALLOCATABLE :: LOC_DEM_BCMI_IJK(:)
377 INTEGER :: BCV, BCV_I
380 INTEGER :: BND1, BND2
381 LOGICAL,
parameter :: setDBG = .false.
384 INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
391 if(dflag)
write(*,
"(2/,2x,'From: SET_DEM_BCMI_IJK')")
397 bcv = dem_bcmi_map(bcv_i)
400 if(dflag)
WRITE(*,
"(/2x,'Adding cells for BCV: ',I3)") bcv
401 SELECT CASE (bc_plane(bcv))
403 bnd1 = min(iofpos(
bc_x_e(bcv))+1,dg_imax1) - &
404 max(iofpos(
bc_x_w(bcv))-1,dg_imin1)
405 bnd2 = min(kofpos(
bc_z_t(bcv))+1,dg_kmax1) - &
406 max(kofpos(
bc_z_b(bcv))-1,dg_kmin1)
409 bnd1 = min(jofpos(
bc_y_n(bcv))+1,dg_jmax1) - &
410 max(jofpos(
bc_y_s(bcv))-1,dg_jmin1)
411 bnd2 = min(kofpos(
bc_z_t(bcv))+1,dg_kmax1) - &
412 max(kofpos(
bc_z_b(bcv))-1,dg_kmin1)
415 bnd1 = min(iofpos(
bc_x_e(bcv))+1,dg_imax1) - &
416 max(iofpos(
bc_x_w(bcv))-1,dg_imin1)
417 bnd2 = min(jofpos(
bc_y_n(bcv))+1,dg_jmax1) - &
418 max(jofpos(
bc_y_s(bcv))-1,dg_jmin1)
421 max_cells = max_cells + (bnd1 + 1)*(bnd2 + 1)
422 if(dflag)
WRITE(*,
"(4x,'Plane: ',A)") bc_plane(bcv)
423 if(dflag)
WRITE(*,
"(4x,'Cells: ', I8)") (bnd1+1)*(bnd2+1)
426 if(dflag)
write(*,
"(2x,'Max Cells: ',I8)") max_cells
430 allocate( loc_dem_bcmi_ijk(max_cells) )
436 DO bcv_i = 1, dem_bcmi
439 bcv = dem_bcmi_map(bcv_i)
441 if(dflag)
write(*,
"(/2x,'Searching for fluid cells:',I3)") bcv
443 i_w = max(iofpos(
bc_x_w(bcv))-1,dg_imin1)
444 i_e = min(iofpos(
bc_x_e(bcv))+1,dg_imax1)
445 j_s = max(jofpos(
bc_y_s(bcv))-1,dg_jmin1)
446 j_n = min(jofpos(
bc_y_n(bcv))+1,dg_jmax1)
447 k_b = max(kofpos(
bc_z_b(bcv))-1,dg_kmin1)
448 k_t = min(kofpos(
bc_z_t(bcv))+1,dg_kmax1)
452 SELECT CASE (bc_plane(bcv))
474 write(*,
"(4x,'Search bounds: ')")
475 write(*,
"(6x,'I_w/I_e:',2(2x,I6))") i_w, i_e
476 write(*,
"(6x,'J_s/J_n:',2(2x,I6))") j_s, j_n
477 write(*,
"(6x,'K_b/K_t:',2(2x,I6))") k_b, k_t
487 ijk = dg_funijk(i,j,k)
488 loc_dem_bcmi_ijk(lc) = ijk
496 IF(dflag)
write(*,1111) bcv, bcv_i, &
501 1111
FORMAT(/2x,
'DEM Mass Inflow:',/4x,
'BC:',i4,3x,
'MAP:',i4, &
502 /4x,
'IJKSTART:',i6,/4x,
'IJKEND: ',i6)
507 allocate( dem_bcmi_ijk(lc-1) )
508 dem_bcmi_ijk(1:lc-1) = loc_dem_bcmi_ijk(1:lc-1)
510 allocate( dem_bcmi_ijk(1) )
511 dem_bcmi_ijk(1) = loc_dem_bcmi_ijk(1)
514 deallocate(loc_dem_bcmi_ijk)
double precision, dimension(dimension_bc) bc_y_n
integer, dimension(:), allocatable dem_bcmi_ijk
double precision, dimension(dim_m) d_p0
logical function dg_is_on_mype_plus1layers(lI, lJ, lK)
logical function compare(V1, V2)
double precision, dimension(dimension_bc, dim_m) bc_w_s
double precision, dimension(dimension_bc) bc_x_e
character(len=3), dimension(dim_m) solids_model
double precision, parameter undefined
subroutine, public allocate_dem_mi
subroutine set_dem_bcmi_ijk
double precision, dimension(:), allocatable dem_mi_time
double precision, dimension(dimension_bc) bc_y_s
character, dimension(dimension_bc) bc_plane
subroutine init_err_msg(CALLER)
double precision, dimension(dimension_bc, dim_m) bc_volflow_s
integer function iofpos(fpos)
double precision, parameter small_number
character(len=16) run_type
integer, parameter numfrac_limit
integer function kofpos(fpos)
double precision, dimension(dimension_bc, dim_m) bc_v_s
integer, dimension(:), allocatable dem_bcmi_ijkstart
double precision, dimension(dimension_bc) bc_z_b
integer, dimension(:), allocatable pi_factor
integer, dimension(:), allocatable dem_bcmi_ijkend
double precision, dimension(dimension_bc, dim_m) bc_massflow_s
integer, parameter undefined_i
double precision, dimension(dimension_bc, dim_m) bc_u_s
character(len=line_length), dimension(line_count) err_msg
integer, dimension(:), allocatable pi_count
double precision, dimension(dimension_bc) bc_z_t
integer function dg_funijk(fi, fj, fk)
type(dem_mi_), dimension(:), allocatable, target dem_mi
integer function jofpos(fpos)
double precision, dimension(dim_m) ro_s0
subroutine layout_mi_dem(BCV, BCV_I, MAX_DIA)
integer, dimension(dimension_bc) dem_bcmi_map
double precision, parameter pi
integer, dimension(:,:), allocatable dem_bc_poly_layout
double precision, dimension(dimension_bc, dim_m) bc_ep_s
double precision, dimension(:), allocatable x
double precision, parameter zero
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
double precision, dimension(dimension_bc, dim_m) bc_rop_s
double precision, dimension(dimension_bc) bc_area
double precision, dimension(dimension_bc) bc_x_w