MFIX  2016-1
set_bc_dem_mi.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Subroutine: SET_BC_DEM_MI !
4 ! Author: J.Musser Date: 23-Nov-09 !
5 ! !
6 ! Purpose: !
7 ! !
8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9  SUBROUTINE set_bc_dem_mi
10 
11 ! Modules
12 !---------------------------------------------------------------------//
13  USE bc
14  USE compar
15  USE constant
16  USE des_allocate
17  USE des_bc
18  USE discretelement
19  USE error_manager
20  USE funits
21  USE geometry
22  USE indices
23  USE param
24  USE param1
25  USE physprop
26  USE run
27  USE toleranc
28  IMPLICIT NONE
29 
30 ! Local variables
31 !---------------------------------------------------------------------//
32  INTEGER :: BCV
33  INTEGER BCV_I ! BC loop counter
34  INTEGER M, MM ! Mass phase loop counter
35  INTEGER RANGE_TOP, RANGE_BOT ! Dummy values
36  INTEGER PHASE_CNT ! Number of solid phases at bc
37  INTEGER PHASE_LIST(dim_m) ! List of phases used in current bc
38 
39 ! the number of particles injected in a solids time step
40  DOUBLE PRECISION NPMpSEC(dim_m) ! For solid phase m
41  DOUBLE PRECISION NPpSEC
42  DOUBLE PRECISION NPpDT ! Total for BC
43  DOUBLE PRECISION SCALED_VAL
44  DOUBLE PRECISION MAX_DIA ! Max diameter of incoming particles at bc
45 
46  DOUBLE PRECISION :: EPs_ERR
47  DOUBLE PRECISION :: VOL_FLOW
48 
49  LOGICAL, parameter :: setDBG = .false.
50  LOGICAL :: dFlag
51  LOGICAL :: FATAL
52 
53 ! Temp inlet velocity for solids phase M
54  DOUBLE PRECISION VEL_TMP(dim_m)
55  DOUBLE PRECISION EPs_TMP(dim_m)
56 
57 ! Minimum/maximum solids velocity at inlet. Also used in the iterative
58 ! steps as the starting and ending velocities
59  DOUBLE PRECISION MAX_VEL
60 
61  DOUBLE PRECISION MINIPV, MAXIPV
62  INTEGER :: OCCUPANTS
63 
64 !......................................................................!
65 
66  CALL init_err_msg("SET_BC_DEM_MI")
67 
68  dflag = (dmp_log .AND. setdbg)
69  if(dflag) write(*,"(2/,2x,'DEM inlet count: ',I4)") dem_bcmi
70 
71 ! Allocate the MI data structures for NEW and RES2 cases. Allocation for
72 ! RES1 cases is done prior to reading the RES file.
73  IF(run_type /= 'RESTART_1') CALL allocate_dem_mi
74 
75 ! Loop over BCs that flagged for DEM mass inflow.
76  DO bcv_i = 1, dem_bcmi
77 
78 ! Get the user defined BC ID.
79  bcv = dem_bcmi_map(bcv_i)
80 
81  if(dflag) write(*,"(2/,'Setting DEM_MI:',I3)") bcv_i
82 
83 ! The number of mass phases at this inlet. While a system may be
84 ! polydisperse, the inlet could consist of a single mass phase
85  phase_cnt = 0
86 ! The mass phase indices of incoming particles at this inlet
87  phase_list(:) = -1
88 ! The max diameter of incoming particles at this inlet
89  max_dia = zero
90 
91 ! Determine if the inlet is mono or polydisperse
92  DO m=1, mmax + des_mmax
93  IF(solids_model(m) /= 'DEM') cycle
94  IF(bc_rop_s(bcv,m) == undefined) cycle
95  IF(compare(bc_rop_s(bcv,m),zero)) cycle
96  phase_cnt = phase_cnt + 1
97  phase_list(phase_cnt) = m
98  max_dia = max(max_dia,d_p0(m))
99  ENDDO
100 ! Set the polydispersity flag.
101  dem_mi(bcv_i)%POLYDISPERSE = (phase_cnt > 1)
102 
103 ! Layout the feed pattern.
104  CALL layout_mi_dem(bcv, bcv_i, max_dia)
105 
106 ! Initialize
107  max_vel = zero
108  npmpsec(:) = zero
109 
110 ! Calculate the individual velocities for each solid phase
111  DO mm = 1, phase_cnt
112  m = phase_list(mm)
113 
114 ! Pull off the BC velocity normal to the flow plane.
115  SELECT CASE(bc_plane(bcv))
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))
119  END SELECT
120 
121 ! Check for min/max inlet velocity
122  max_vel = max(abs(vel_tmp(m)), max_vel)
123 
124 ! Calculate the number of particles of mass phase M are injected per
125 ! second for each solid phase present at the boundary.
126 
127 ! Use the mass flow rate if defined.
128  IF(bc_massflow_s(bcv,m) == zero) THEN
129  npmpsec(m) = zero
130 
131  ELSEIF(bc_massflow_s(bcv,m) /= undefined) THEN
132  npmpsec(m) = bc_massflow_s(bcv,m) / &
133  (ro_s0(m)*(pi/6.d0*d_p0(m)**3))
134 
135 ! Otherwise use the volumetric flow rate if defined.
136  ELSEIF(bc_volflow_s(bcv,m) == zero) THEN
137  npmpsec(m) = zero
138 
139  ELSEIF(bc_volflow_s(bcv,m) /= undefined) THEN
140  npmpsec(m) = bc_volflow_s(bcv,m) / (pi/6.d0*d_p0(m)**3)
141 
142 ! Calculate volumetric flow rate to convert to particle count. BC_AREA
143 ! was already corrected for cut cells and velocity was recalculated
144 ! to ensure user-specified mass or volumetric flow rates.
145  ELSE
146  vol_flow = vel_tmp(m) * bc_area(bcv) * bc_ep_s(bcv,m)
147 ! Calculate the number of particles of mass phase M are injected per
148 ! second for each solid phase present at the boundary
149  npmpsec(m) = vol_flow / (pi/6.d0*d_p0(m)**3)
150 ! Write some debugging information if needed.
151  ENDIF
152  if(dflag) write(*,1100) m, vel_tmp(m), npmpsec(m)
153  ENDDO
154 
155 ! Total number of particles at BCV injected per second
156  nppsec = sum(npmpsec)
157 
158  1100 FORMAT(/2x,'Conversion Info: Phase ',i2,/4x,'Velocity: ',g12.5,/ &
159  4x,'NPMpSEC = ',f11.1)
160 
161  if(dflag) write(*,"(/2x,'Max Velocity:',3x,g12.5)") max_vel
162  if(dflag) write(*,"( 2x,'NPpSEC:',3x,F11.1)") nppsec
163 
164 ! The number of total particles per solid time step DTSOLID
165  nppdt = nppsec * dtsolid
166 
167 ! Inject one particle every PI_FACTOR solids time steps.
168  IF(nppdt == zero)THEN
169  pi_count(bcv_i) = 0
170  pi_factor(bcv_i) = undefined_i
171  ELSEIF(nppdt .LT. 1.0)THEN
172  pi_count(bcv_i) = 1
173  pi_factor(bcv_i) = floor(real(1.d0/nppdt))
174 ! Inject PI_COUNT particles every soilds time step.
175  ELSE
176  pi_count(bcv_i) = ceiling(real(nppdt))
177  pi_factor(bcv_i) = 1
178  ENDIF
179 
180  occupants = dem_mi(bcv_i)%OCCUPANTS
181 
182  IF(pi_count(bcv_i) > 0) THEN
183 ! Calculate the minimum inlet velocity. The cutoff is associated with
184 ! square packing of disks on a plane.
185  minipv = max_dia/( dtsolid*dble(pi_factor(bcv_i)) * dble( &
186  floor( real(occupants)/real(pi_count(bcv_i)))))
187 ! Calculate the velocity needed to ensure that half the inlet is free.
188 ! Inlets with velocities greater than this value can be randomly seeded,
189 ! otherwise, particles are seeded in according to the grid.
190  maxipv = max_dia/( dtsolid*dble(pi_factor(bcv_i)) * dble( &
191  floor(ceiling(real(occupants)/2.0)/real(PI_COUNT(bcv_i)))))
192  ELSE
193  minipv = -undefined
194  maxipv = undefined
195  ENDIF
196 
197  if(dflag) write(*,"(/2x,'MaxIPV:',3x,g12.5)") maxipv
198  if(dflag) write(*,"( 2x,'MinIPV:',3x,g12.5)") minipv
199 
200  IF(max_vel < minipv) THEN
201  WRITE(err_msg,1110) bcv, max_vel, minipv
202  CALL flush_err_msg(abort=.true.)
203  ENDIF
204 
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',/3x,'a larger value for the ',&
209  'velocity normal to the flow plane.',//' > If MASSFLOW or ', &
210  'VOLFLOW are defined, decrease the solids volume',/3x, &
211  'fraction to increase solids velocity.',//2x,'Max user-', &
212  'specified BC velocity: ',g12.5,/2x,'Minimum required ', &
213  'solids Velocity: ',g12.5)
214 
215 ! Set all BC solids velocities to the largest velocity and recalculate
216 ! BC_EP_s to determine the magnitude of the change.
217  eps_err = zero
218  eps_tmp = zero
219  DO mm = 1, phase_cnt
220  m = phase_list(mm)
221 
222  IF(bc_massflow_s(bcv,m) == zero .OR. &
223  bc_volflow_s(bcv,m) == zero) THEN
224 ! If no solids, set the tmp EPs to zero and clear solid velocity
225  eps_tmp(m) = 0.0d0
226  SELECT CASE(bc_plane(bcv))
227  CASE('N','S'); bc_v_s(bcv,m) = zero
228  CASE('E','W'); bc_u_s(bcv,m) = zero
229  CASE('T','B'); bc_w_s(bcv,m) = zero
230  END SELECT
231 
232  ELSE
233  eps_tmp(m) = bc_ep_s(bcv,m) * (vel_tmp(m) / max_vel)
234 ! Over-write the current BC value.
235  SELECT CASE(bc_plane(bcv))
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)
242  END SELECT
243 
244  ENDIF
245  eps_err = eps_err + (bc_ep_s(bcv,m) - eps_tmp(m))
246  ENDDO
247 
248 ! If the net change in solids volume fraction is greatere than 0.01,
249 ! flag this as an error and exit. >> Let the user fix the input.
250  IF(.NOT.compare(eps_err,small_number)) THEN
251  IF(eps_err > 0.01) THEN
252  WRITE(err_msg,1200) bcv, max_vel, eps_err
253  CALL flush_err_msg(footer=.false.)
254  fatal = .true.
255 
256 ! Report the amount of changes imposed on the BC in setting a
257 ! uniform inlet velocity.
258  ELSE
259  WRITE(err_msg,1205) bcv, max_vel, eps_err
260  CALL flush_err_msg(footer=.false.)
261  fatal = .false.
262  ENDIF
263 
264  WRITE(err_msg, 1210)
265  CALL flush_err_msg(header=.false., footer=.false.)
266  DO mm = 1, phase_cnt
267  m = phase_list(mm)
268  WRITE(err_msg,1211) m, bc_ep_s(bcv,m), eps_tmp(m), &
269  (bc_ep_s(bcv,m)-eps_tmp(m))
270  CALL flush_err_msg(header=.false., footer=.false.)
271  ENDDO
272  CALL flush_err_msg(header=.false., abort=fatal)
273  ENDIF
274 
275 
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/5x,'Max Inlet Velocity',&
280  ':',1x,es11.4,/5x,'Total BC_EP_s Error:',es11.4)
281 
282 
283  1205 FORMAT('Warning 1201: Uniform solids velocity imposed on BC',i3, &
284  '.',2/,5x,'Uniform Inlet Velocity:',1x,es11.4,/5x,'Total ', &
285  'BC_EP_s Error:',4x,es11.4,/' ')
286 
287  1210 FORMAT(/,5x,'|',11('-'),'|',3(14('-'),'|'),/5x,'|',3x,'Phase',3x,&
288  '|',4x,'BC_EP_s',3x,'|',2x,'Calculated',2x,'|',3x,'ABS ', &
289  'Error',2x,'|',/5x,'|',11('-'),'|',3(14('-'),'|'))
290 
291  1211 FORMAT(5x,'|',4x,i2,5x,'| ',1x,es11.4,1x,'|',1x,es11.4,2x,'|', &
292  1x,es11.4,1x,' |',/5x,'|',11('-'),'|',3(14('-'),'|'))
293 
294 
295 ! For polydisperse inlets, construct the DES_POLY_LAYOUT array
296  IF(dem_mi(bcv_i)%POLYDISPERSE) THEN
297  range_bot = 1
298  DO mm=1,phase_cnt - 1
299  m = phase_list(mm)
300  scaled_val = dble(numfrac_limit)*(npmpsec(m)/nppsec)
301  range_top = floor(scaled_val) + (range_bot-1)
302  dem_bc_poly_layout(bcv_i,range_bot:range_top) = m
303  range_bot = range_top+1
304  ENDDO
305 
306  m = phase_list(phase_cnt)
307  dem_bc_poly_layout(bcv_i,range_bot:numfrac_limit) = m
308 ! For monodisperse inlets, store the single mass phase used
309  ELSE
310  dem_bc_poly_layout(bcv_i,:) = phase_list(1)
311  ENDIF
312 
313 
314 ! Calculate des mass inlet time; time between injection. If the run
315 ! type is RESTART_1, DES_MI_TIME will be picked up from the restart file
316 ! with an updated value.
317  IF(run_type /= 'RESTART_1') &
318  dem_mi_time(bcv_i) = time + dble(pi_factor(bcv_i)) * dtsolid
319 
320 
321  WRITE(err_msg,1000) bcv, nppdt, int(nppdt/dtsolid), &
322  pi_factor(bcv_i), pi_count(bcv_i), dem_mi_time(bcv_i)
323  CALL flush_err_msg(header=.false., footer=.false.)
324 
325  1000 FORMAT(2/,2x,'For mass inlet BC: ', i3,/,&
326  4x,'No. particles injected per solids time step = ', es15.8,/,&
327  4x,'No. particles injected per second = ', i10,/,&
328  4x,'PI_FACTOR = ', i10,' PI_COUNT = ', i5,/,&
329  4x,'start DES_MI_TIME = ', es15.8,/' ')
330 
331  ENDDO
332 
333 !
334  CALL set_dem_bcmi_ijk
335 
336 
337  CALL finl_err_msg
338 
339 
340  RETURN
341  END SUBROUTINE set_bc_dem_mi
342 
343 
344 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
345 ! !
346 ! Subroutine: SET_BC_DEM !
347 ! Author: J.Musser Date: 13-Jul-09 !
348 ! !
349 ! Purpose: Check the data provided for the des mass inflow boundary !
350 ! condition and flag errors if the data is improper. This module is !
351 ! also used to convert the proveded information into the format !
352 ! necessary for the dependent subrountines to function properly. !
353 ! !
354 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
355  SUBROUTINE set_dem_bcmi_ijk
357 ! Modules
358 !---------------------------------------------------------------------//
359  use bc, only: bc_plane
360  use bc, only: bc_x_w, bc_x_e, bc_y_s, bc_y_n, bc_z_b, bc_z_t
363  use desgrid, only: dg_imin1, dg_imax1
364  use desgrid, only: dg_jmin1, dg_jmax1
365  use desgrid, only: dg_kmin1, dg_kmax1
366  use desgrid, only: dg_funijk
367  use desgrid, only: iofpos, jofpos, kofpos
369  use error_manager
370  use funits, only: dmp_log
371  use mpi_utility
372  IMPLICIT NONE
373 
374 ! Local variables
375 !---------------------------------------------------------------------//
376  INTEGER, ALLOCATABLE :: LOC_DEM_BCMI_IJK(:)
377  INTEGER :: BCV, BCV_I
378  INTEGER :: LC
379  INTEGER :: MAX_CELLS
380  INTEGER :: BND1, BND2
381  LOGICAL, parameter :: setDBG = .false.
382  LOGICAL :: dFlag
383  INTEGER :: I,J,K,IJK
384  INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
385 !......................................................................!
386 
387  CALL init_err_msg("SET_DEM_BCMI_IJK")
388 
389  dflag = (dmp_log .AND. setdbg)
390 
391  if(dflag) write(*,"(2/,2x,'From: SET_DEM_BCMI_IJK')")
392 
393 ! Loop over all inflow BCs to get an approximate count of the number
394 ! of fluid cells that are adjacent to them.
395  max_cells = 0
396  DO bcv_i=1, dem_bcmi
397  bcv = dem_bcmi_map(bcv_i)
398 
399 ! Set the search area a little bigger than the inlet area.
400  if(dflag) WRITE(*,"(/2x,'Adding cells for BCV: ',I3)") bcv
401  SELECT CASE (bc_plane(bcv))
402  CASE('N','S')
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)
407 
408  CASE('E','W')
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)
413 
414  CASE('T','B')
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)
419  END SELECT
420 
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)
424  ENDDO
425 
426  if(dflag) write(*,"(2x,'Max Cells: ',I8)") max_cells
427 
428 ! Allocate an array to hold the IJK values. This array should be
429 ! more than enough to store all the IJKs.
430  allocate( loc_dem_bcmi_ijk(max_cells) )
431 
432 
433 ! Loop over the IJKs for each BC and store only the IJKs that you
434 ! own as well as the start/end array positions for each BC.
435  lc = 1
436  DO bcv_i = 1, dem_bcmi
437 
438  dem_bcmi_ijkstart(bcv_i) = lc
439  bcv = dem_bcmi_map(bcv_i)
440 
441  if(dflag) write(*,"(/2x,'Searching for fluid cells:',I3)") bcv
442 
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)
449 
450 ! Depending on the flow plane, the 'common' index needs set to reference
451 ! the fluid cell.
452  SELECT CASE (bc_plane(bcv))
453  CASE('N')
454  j_s = jofpos(bc_y_s(bcv))
455  j_n = jofpos(bc_y_n(bcv))
456  CASE('S')
457  j_s = jofpos(bc_y_s(bcv))
458  j_n = jofpos(bc_y_n(bcv))
459  CASE('E')
460  i_w = iofpos(bc_x_w(bcv))
461  i_e = iofpos(bc_x_e(bcv))
462  CASE('W')
463  i_w = iofpos(bc_x_w(bcv))
464  i_e = iofpos(bc_x_e(bcv))
465  CASE('T')
466  k_b = kofpos(bc_z_b(bcv))
467  k_t = kofpos(bc_z_t(bcv))
468  CASE('B')
469  k_b = kofpos(bc_z_b(bcv))
470  k_t = kofpos(bc_z_t(bcv))
471  END SELECT
472 
473  if(dflag) then
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
478  endif
479 
480 ! Store the IJKs.
481  DO k = k_b, k_t
482  DO j = j_s, j_n
483  DO i = i_w, i_e
484 ! Skip cells that this rank does not own or are considered dead.
485  IF(.NOT.dg_is_on_mype_plus1layers(i,j,k))cycle
486 
487  ijk = dg_funijk(i,j,k)
488  loc_dem_bcmi_ijk(lc) = ijk
489  lc = lc+1
490  ENDDO
491  ENDDO
492  ENDDO
493 
494  dem_bcmi_ijkend(bcv_i) = lc-1
495 
496  IF(dflag) write(*,1111) bcv, bcv_i, &
497  dem_bcmi_ijkstart(bcv_i), dem_bcmi_ijkend(bcv_i)
498 
499  ENDDO
500 
501  1111 FORMAT(/2x,'DEM Mass Inflow:',/4x,'BC:',i4,3x,'MAP:',i4, &
502  /4x,'IJKSTART:',i6,/4x,'IJKEND: ',i6)
503 
504 
505 ! Allocate the global store arrary array. This changes across MPI ranks.
506  IF(lc > 1) THEN
507  allocate( dem_bcmi_ijk(lc-1) )
508  dem_bcmi_ijk(1:lc-1) = loc_dem_bcmi_ijk(1:lc-1)
509  ELSE
510  allocate( dem_bcmi_ijk(1) )
511  dem_bcmi_ijk(1) = loc_dem_bcmi_ijk(1)
512  ENDIF
513 
514  deallocate(loc_dem_bcmi_ijk)
515 
516  CALL finl_err_msg
517 
518  RETURN
519  END SUBROUTINE set_dem_bcmi_ijk
double precision, dimension(dimension_bc) bc_y_n
Definition: bc_mod.f:42
integer, dimension(:), allocatable dem_bcmi_ijk
Definition: des_bc_mod.f:101
logical dmp_log
Definition: funits_mod.f:6
double precision, dimension(dim_m) d_p0
Definition: physprop_mod.f:25
logical function dg_is_on_mype_plus1layers(lI, lJ, lK)
Definition: desgrid_mod.f:403
subroutine finl_err_msg
logical function compare(V1, V2)
Definition: toleranc_mod.f:94
integer dg_kmin1
Definition: desgrid_mod.f:23
double precision, dimension(dimension_bc, dim_m) bc_w_s
Definition: bc_mod.f:129
integer dg_kmax1
Definition: desgrid_mod.f:23
integer, parameter dim_m
Definition: param_mod.f:67
double precision, dimension(dimension_bc) bc_x_e
Definition: bc_mod.f:34
character(len=3), dimension(dim_m) solids_model
Definition: run_mod.f:253
double precision, parameter undefined
Definition: param1_mod.f:18
subroutine, public allocate_dem_mi
subroutine set_dem_bcmi_ijk
integer dg_jmin1
Definition: desgrid_mod.f:20
double precision, dimension(:), allocatable dem_mi_time
Definition: des_bc_mod.f:36
double precision, dimension(dimension_bc) bc_y_s
Definition: bc_mod.f:38
character, dimension(dimension_bc) bc_plane
Definition: bc_mod.f:217
subroutine init_err_msg(CALLER)
double precision, dimension(dimension_bc, dim_m) bc_volflow_s
Definition: bc_mod.f:198
integer dg_imax1
Definition: desgrid_mod.f:17
integer mmax
Definition: physprop_mod.f:19
integer function iofpos(fpos)
Definition: desgrid_mod.f:348
double precision, parameter small_number
Definition: param1_mod.f:24
character(len=16) run_type
Definition: run_mod.f:33
integer dem_bcmi
Definition: des_bc_mod.f:18
integer, parameter numfrac_limit
Definition: des_bc_mod.f:58
Definition: run_mod.f:13
integer function kofpos(fpos)
Definition: desgrid_mod.f:372
Definition: param_mod.f:2
double precision, dimension(dimension_bc, dim_m) bc_v_s
Definition: bc_mod.f:121
integer, dimension(:), allocatable dem_bcmi_ijkstart
Definition: des_bc_mod.f:98
double precision, dimension(dimension_bc) bc_z_b
Definition: bc_mod.f:46
integer, dimension(:), allocatable pi_factor
Definition: des_bc_mod.f:48
integer, dimension(:), allocatable dem_bcmi_ijkend
Definition: des_bc_mod.f:99
double precision, dimension(dimension_bc, dim_m) bc_massflow_s
Definition: bc_mod.f:204
integer dg_imin1
Definition: desgrid_mod.f:17
integer, parameter undefined_i
Definition: param1_mod.f:19
double precision, dimension(dimension_bc, dim_m) bc_u_s
Definition: bc_mod.f:113
character(len=line_length), dimension(line_count) err_msg
integer, dimension(:), allocatable pi_count
Definition: des_bc_mod.f:53
double precision, dimension(dimension_bc) bc_z_t
Definition: bc_mod.f:50
integer function dg_funijk(fi, fj, fk)
Definition: desgrid_mod.f:141
type(dem_mi_), dimension(:), allocatable, target dem_mi
Definition: des_bc_mod.f:90
integer function jofpos(fpos)
Definition: desgrid_mod.f:360
double precision, dimension(dim_m) ro_s0
Definition: physprop_mod.f:28
subroutine layout_mi_dem(BCV, BCV_I, MAX_DIA)
Definition: layout_mi_dem.f:13
integer, dimension(dimension_bc) dem_bcmi_map
Definition: des_bc_mod.f:24
double precision, parameter pi
Definition: constant_mod.f:158
integer, dimension(:,:), allocatable dem_bc_poly_layout
Definition: des_bc_mod.f:32
double precision time
Definition: run_mod.f:45
double precision, dimension(dimension_bc, dim_m) bc_ep_s
Definition: bc_mod.f:93
double precision, dimension(:), allocatable x
Definition: geometry_mod.f:129
double precision, parameter zero
Definition: param1_mod.f:27
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
integer dg_jmax1
Definition: desgrid_mod.f:20
double precision, dimension(dimension_bc, dim_m) bc_rop_s
Definition: bc_mod.f:92
Definition: bc_mod.f:23
subroutine set_bc_dem_mi
Definition: set_bc_dem_mi.f:10
double precision, dimension(dimension_bc) bc_area
Definition: bc_mod.f:245
double precision, dimension(dimension_bc) bc_x_w
Definition: bc_mod.f:30