Page 324 - The Combined Finite-Discrete Element Method
P. 324

NBS CONTACT DETECTION ALGORITHM IN 3D       307

             INT ncelx,ncely,ncelz; /* total number of x, y, z cells */
             INT nelemd;    /* twice total number of elements */
             INT ielem;    /* element      */
             INT ielemx;   /* element assigned to cell x */
             INT ielemy;   /* element assigned to cell y */
             INT ielemz;   /* element assigned to cell z */
             INT ihx,ihy,ihz;  /* x, y, z head of a list */
             INT iminx,iminy,iminz;  /* space boundaries  */
             INT imaxx,imaxy,imaxz;  /* space boundaries  */
             INT inod,jnod;  /* nodes        */
             INT ix,iy,iz;  /* x, y, z cell  */
             INT jelemx;   /* element assigned to cell x  */
             INT *i1cnx;  /* contactor next x  */
             INT *i1cny;  /* contactor next y  */
             INT *i1cnz;  /* contactor next z  */
             INT *i1cfz;  /* contactor first z  */
             INT *i1eccx;  /* element coordinate current x  */
             INT *i1eccy;  /* element coordinate current y  */
             INT *i1eccz;  /* element coordinate current z  */
             INT i1heax[5]; /* heads of 5 connected lists for x cells */
             INT i1heay[5]; /* heads of 5 connected lists for y cells */
             INT i1heaz[2]; /* heads of 2 connected lists for z cells */
             INT *i2cfx[2]; /* contactor first x  */
             INT *i2cfy[2]; /* contactor first y  */
           Listing 10.23 A list of variables used in the C implementation of the NBS contact detection
           algorithm in 3D.

                          .........continued from previous listing.............
            /* find space boundaries */
               iminx=i1eccx[0];
               imaxx=i1eccx[0];
               iminy=i1eccy[0];
               imaxy=i1eccy[0];
               iminz=i1eccz[0];
               imaxz=i1eccz[0];
               for(ielem=1;ielem<nelem;ielem++)
               { iminx=MINIM(iminx,i1eccx[ielem]);
                imaxx=MAXIM(imaxx,i1eccx[ielem]);
                iminy=MINIM(iminy,i1eccy[ielem]);
                imaxy=MAXIM(imaxy,i1eccy[ielem]);
                iminz=MINIM(iminz,i1eccz[ielem]);
                imaxz=MAXIM(imaxz,i1eccz[ielem]);
               }
               iminx=iminx-1;
               iminy=iminy-1;
               iminz=iminz-1;
               imaxx=imaxx+2;
               imaxy=imaxy+2;
               imaxz=imaxz+2;
                                    Listing 10.24 Space boundaries.
   319   320   321   322   323   324   325   326   327   328   329