Page 126 - The Combined Finite-Discrete Element Method
P. 126
MUNJIZA-NBS CONTACT DETECTION ALGORITHM IN 2D 109
• Secondly, a loop over all discrete elements from a particular y iy list is performed, and
inside this loop a particular discrete element is added to the corresponding x ix,iy list,
depending on its integerised coordinate i x .
To assemble new lists, discrete elements are removed from the old lists in a similar
fashion–a loop over all discrete elements is performed, and for each discrete element,
B[i y ] =−1 is set, and in a similar way, a loop over all discrete elements from a particular
y iy list is performed, and for each discrete element, A[i x ] =−1is set.
Thus, no loop over cells is involved in assembling the lists, which leads to the con-
clusion that the total CPU time needed to perform all the operations described so far in
this section is proportional to the total number of discrete elements N, and is neither a
function of the total number of cells in the x-direction n x , nor a function of the total
number of cells in the y-direction n y . In other words, it is not a function of packing
density ρ.
Detection of contact. Detection of contact is accomplished by checking all the discrete
elements mapped to a particular cell against all discrete elements in neighbouring cells. For
instance, discrete elements mapped to the cell (i x ,i y ), shown in Figure 3.45, are checked
for contact against all discrete elements mapped to cells (i x ,i y ), (i x − 1,i y ), (i x − 1,i y −
1), (i x ,i y − 1) and (i x + 1,i y − 1). This is equivalent to checking all discrete elements
from list x ix,iy against all discrete elements from lists x ix,iy ,x ix−1,iy ,x ix−1,iy−1 ,x ix,iy−1
and x ix+1,iy−1 .
In this way, discrete elements mapped to any non-empty cell are checked against all
discrete elements mapped to neighbouring cells (only discrete elements from neighbouring
cells can touch each other).
Thus, it is necessary at any given time to have singly connected lists x ix,iy only for
two neighbouring rows of cells i y and i y − 1, i.e. for discrete elements from lists y iy and
y iy−1 . Thus, two parallel arrays A are needed, and this is accomplished through a 2D
array A[2][n x ]ofsize2n x integer numbers. The array A[0] points to all singly connected
lists x ix,iy (where i y is fixed and i x = 0, 1, 2,...,n x ). The 1D array A[1] points to all
singly connected lists comprising discrete elements mapped onto row i y − 1 of cells, i.e.
all lists x ix,iy−1 (where i y − 1 is fixed and i x = 0, 1, 2,. ..,n x ).
Detection of contact is performed only for cells that have one or more discrete elements
mapped to them, i.e. for cells with a non-empty x ix,iy list of discrete elements. This is
accomplished by employing a loop over discrete elements from list y iy to find a cell
Central cell
Neighbouring
cells
Figure 3.45 Contact checking mask.