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.
   121   122   123   124   125   126   127   128   129   130   131