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.