24 grid_pos,axis,axis_index)
26 DOUBLE PRECISION :: part_pos
27 DOUBLE PRECISION,
DIMENSION(:) :: grid_pos
28 CHARACTER(LEN=1) :: axis,axis_index
32 INTEGER,
PARAMETER :: dim_m_tri = 55
67 INTEGER(KIND=1),
DIMENSION(:),
ALLOCATABLE :: particle_state
69 INTEGER,
PARAMETER :: nonexistent=0
70 INTEGER,
PARAMETER :: normal_particle=1
71 INTEGER,
PARAMETER :: entering_particle=2
72 INTEGER,
PARAMETER :: exiting_particle=3
73 INTEGER,
PARAMETER :: normal_ghost=4
74 INTEGER,
PARAMETER :: entering_ghost=5
75 INTEGER,
PARAMETER :: exiting_ghost=6
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: iglobal_id
97 Integer :: imax_global_id
104 LOGICAL :: gener_part_config
105 DOUBLE PRECISION :: vol_frac(
dim_m)
106 DOUBLE PRECISION :: des_eps_xstart, &
107 des_eps_ystart, des_eps_zstart
109 DOUBLE PRECISION,
dimension(:),
allocatable :: vol_ic_region
112 INTEGER,
dimension(:,:),
allocatable :: part_mphase_byic
115 double precision,
dimension(:,:),
allocatable :: realpart_mphase_byic
120 INTEGER part_mphase(
dim_m)
124 double precision realpart_mphase(
dim_m)
128 DOUBLE PRECISION pvel_mean, pvel_stdev
134 LOGICAL print_des_data
135 CHARACTER(LEN=255) :: vtp_dir
138 LOGICAL print_des_screen
144 CHARACTER(LEN=64) :: des_output_type
150 INTEGER focus_particle
155 INTEGER vtp_findex, tecplot_findex
160 LOGICAL discrete_element
161 LOGICAL des_continuum_coupled
165 LOGICAL des_continuum_hybrid
170 LOGICAL des_oneway_coupled
183 CHARACTER(LEN=64) :: des_coll_model
184 INTEGER des_coll_model_enum
185 INTEGER,
PARAMETER :: hertzian=0
186 INTEGER,
PARAMETER :: lsd=1
191 CHARACTER(LEN=64) :: des_intg_method
192 LOGICAL intg_adams_bashforth
196 DOUBLE PRECISION dtsolid
198 DOUBLE PRECISION s_time
205 INTEGER des_neighbor_search
208 INTEGER neighbor_search_n
209 DOUBLE PRECISION neighbor_search_rad_ratio
218 DOUBLE PRECISION factor_rlm
221 INTEGER,
DIMENSION(:),
ALLOCATABLE :: neighbor_index
222 INTEGER,
DIMENSION(:),
ALLOCATABLE :: neighbor_index_old
223 INTEGER,
DIMENSION(:),
ALLOCATABLE :: neighbors
224 INTEGER,
DIMENSION(:),
ALLOCATABLE :: neighbors_old
225 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: pft_neighbor
226 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: pft_neighbor_old
232 DOUBLE PRECISION overlap_max
236 INTEGER :: desgridsearch_imax, desgridsearch_jmax, &
244 INTEGER,
PARAMETER :: dimn = 3
251 DOUBLE PRECISION wx1, ex2, by1, ty2, sz1, nz2
254 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: xe
255 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: yn
256 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: zt
259 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: wall_normal
262 DOUBLE PRECISION :: grav(3)
263 DOUBLE PRECISION :: grav_mag
267 LOGICAL des_periodic_walls
268 LOGICAL des_periodic_walls_x
269 LOGICAL des_periodic_walls_y
270 LOGICAL des_periodic_walls_z
278 DOUBLE PRECISION des_le_rel_vel
283 CHARACTER(LEN=4) :: des_le_shear_dir
292 DOUBLE PRECISION kn, kn_w
293 DOUBLE PRECISION kt, kt_w, kt_fac, kt_w_fac
296 DOUBLE PRECISION eta_des_n, eta_n_w
297 DOUBLE PRECISION eta_des_t, eta_t_w
301 LOGICAL :: use_vdh_dem_model
303 DOUBLE PRECISION des_etat_fac, des_etat_w_fac
310 DOUBLE PRECISION mew, mew_w
314 DOUBLE PRECISION des_en_input(dim_m_tri)
315 DOUBLE PRECISION des_et_input(dim_m_tri)
318 DOUBLE PRECISION des_en_wall_input(
dim_m)
319 DOUBLE PRECISION des_et_wall_input(
dim_m)
322 DOUBLE PRECISION :: e_young(
dim_m), ew_young
323 DOUBLE PRECISION :: v_poisson(
dim_m), vw_poisson
330 DOUBLE PRECISION :: e_young_actual(
dim_m), ew_young_actual
331 DOUBLE PRECISION :: v_poisson_actual(
dim_m), vw_poisson_actual
332 DOUBLE PRECISION :: hert_kn_actual(
dim_m,
dim_m), hert_kwn_actual(
dim_m)
336 DOUBLE PRECISION :: tau_c_base_actual(
dim_m,
dim_m), tauw_c_base_actual(
dim_m)
337 DOUBLE PRECISION :: tau_c_base_sim(
dim_m,
dim_m), tauw_c_base_sim(
dim_m)
344 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: des_radius
345 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: ro_sol
346 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: pvol
347 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: pmass
348 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: omoi
351 DOUBLE PRECISION :: min_radius, max_radius
358 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_pos_old
359 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_pos_new
360 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_vel_old
361 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_vel_new
362 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: omega_old
363 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: omega_new
364 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: ppos
365 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_acc_old
366 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: rot_acc_old
369 LOGICAL :: particle_orientation = .false.
370 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: orientation
371 DOUBLE PRECISION,
DIMENSION(3) :: init_orientation = (/0.0,1.0,0.0
374 INTEGER :: des_usr_var_size
375 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_usr_var
378 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: fc
379 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: tow
382 INTEGER :: collision_array_max = 8
386 INTEGER,
ALLOCATABLE :: wall_collision_facet_id(:,:)
387 DOUBLE PRECISION,
ALLOCATABLE :: wall_collision_pft(:,:,:)
390 INTEGER,
DIMENSION(:),
ALLOCATABLE :: pinc
394 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: pijk
402 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: f_gds
405 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: f_sds
413 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: vxf_gds
414 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: vxf_sds
418 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: sdrag_am
421 DOUBLE PRECISION,
DIMENSION(:,:,:),
ALLOCATABLE :: sdrag_bm
425 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: drag_am
427 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: drag_bm
430 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: drag_fc
434 DOUBLE PRECISION,
DIMENSION(:,:,:),
ALLOCATABLE ::des_vel_node
439 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: des_rops_node
442 DOUBLE PRECISION,
DIMENSION(:,:,:),
POINTER :: weightp
445 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: f_gp
447 DOUBLE PRECISION,
DIMENSION(:,:,:,:),
ALLOCATABLE :: wtderivp
448 DOUBLE PRECISION,
DIMENSION(:,:,:),
ALLOCATABLE :: sstencil
449 DOUBLE PRECISION,
DIMENSION(:,:,:,:),
ALLOCATABLE :: gstencil, vstencil
452 DOUBLE PRECISION,
DIMENSION(:,:,:,:),
ALLOCATABLE :: psgradstencil
455 DOUBLE PRECISION,
DIMENSION(:,:,:,:,:),
ALLOCATABLE:: vel_sol_stencil
461 CHARACTER(LEN=7):: scheme, interp_scheme
462 INTEGER:: order, ob2l, ob2r
468 double precision,
allocatable,
dimension(:) :: des_vol_node
472 DOUBLE PRECISION,
DIMENSION(:,:),
ALLOCATABLE :: p_force
477 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: des_vel_avg
481 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: global_gran_energy
483 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: global_gran_temp
489 DOUBLE PRECISION des_ke, des_pe, des_rote
493 LOGICAL des_calc_bedheight
495 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: bed_height
499 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: des_vel_max
504 LOGICAL :: minimize_des_facet_list
517 LOGICAL square_well, van_der_waals
518 DOUBLE PRECISION hamaker_constant
519 DOUBLE PRECISION vdw_inner_cutoff
520 DOUBLE PRECISION vdw_outer_cutoff
521 DOUBLE PRECISION wall_hamaker_constant
522 DOUBLE PRECISION wall_vdw_inner_cutoff
523 DOUBLE PRECISION wall_vdw_outer_cutoff
524 DOUBLE PRECISION asperities
527 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: postcohesive
530 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: postcluster
536 DOUBLE PRECISION surface_energy
537 DOUBLE PRECISION wall_surface_energy
542 LOGICAL :: des_explicitly_coupled
544 integer,
dimension(:),
allocatable :: dg_pijk,dg_pijkprv
547 logical,
dimension(:),
allocatable :: ighost_updated
558 FUNCTION des_crossprdct(XX,YY)
565 DOUBLE PRECISION,
DIMENSION(3),
INTENT(IN) :: xx, yy
567 DOUBLE PRECISION,
DIMENSION(3) :: des_crossprdct
570 des_crossprdct(1) = xx(2)*yy(3) - xx(3)*yy(2)
571 des_crossprdct(2) = xx(3)*yy(1) - xx(1)*yy(3)
572 des_crossprdct(3) = xx(1)*yy(2) - xx(2)*yy(1)
574 END FUNCTION des_crossprdct
576 END MODULE discretelement
integer function des_getindexfrompos(LIM1, LIM2, PART_POS, GRID_POS, AXIS, AXIS_INDEX)