URI:
       tgrid.c - slidergrid - grid of elastic sliders on a frictional surface
  HTML git clone git://src.adamsgaard.dk/slidergrid
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tgrid.c (2734B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 #include "typedefs.h"
            4 #include "slider.h"
            5 #include "vector_math.h"
            6 #include "debug.h"
            7 
            8 slider* create_regular_slider_grid(
            9         const int nx,
           10         const int ny,
           11         const int nz,
           12         const Float dx,
           13         const Float dy,
           14         const Float dz)
           15 {
           16     slider* sliders;
           17     sliders = malloc(sizeof(slider)*nx*ny*nz);
           18 
           19     int i = 0; int ix, iy, iz, j;
           20     for (iz = 0; iz < nz; iz++) {
           21         for (iy = 0; iy < ny; iy++) {
           22             for (ix = 0; ix < nx; ix++) {
           23                 sliders[i].pos.x = dx * ix;
           24                 sliders[i].pos.y = dy * iy;
           25                 sliders[i].pos.z = dz * iz;
           26                 i++;
           27 
           28                 for (j=0; j<MAX_NEIGHBORS; j++)
           29                     sliders[i].neighbors[j] = -1;
           30             }
           31         }
           32     }
           33 
           34     return sliders;
           35 }
           36 
           37 slider* create_regular_slider_grid_with_randomness(
           38         const int nx,
           39         const int ny,
           40         const int nz,
           41         const Float dx,
           42         const Float dy,
           43         const Float dz)
           44 {
           45     slider* sliders;
           46     sliders = malloc(sizeof(slider)*nx*ny*nz);
           47 
           48     int i = 0; int ix, iy, iz, j;
           49     for (iz = 0; iz < nz; iz++) {
           50         for (iy = 0; iy < ny; iy++) {
           51             for (ix = 0; ix < nx; ix++) {
           52                 sliders[i].pos.x = dx * ix;
           53                 sliders[i].pos.y = dy * iy;
           54                 sliders[i].pos.z = dz * iz;
           55                 i++;
           56 
           57                 for (j=0; j<MAX_NEIGHBORS; j++)
           58                     sliders[i].neighbors[j] = -1;
           59             }
           60         }
           61     }
           62 
           63     return sliders;
           64 }
           65 
           66 /* Find neighboring sliders within a defined cutoff distance */
           67 void find_and_bond_to_neighbors_n2(
           68         slider* sliders,
           69         const int N,
           70         const Float cutoff)
           71 {
           72     int i, j, n_neighbors;
           73     Float3 dist;
           74     Float dist_norm;
           75     for (i=0; i<N; i++) {
           76         n_neighbors = 0;
           77         for (j=0; j<N; j++) {
           78             if (i != j) {
           79                 dist = subtract_float3(sliders[i].pos, sliders[j].pos);
           80                 dist_norm = norm_float3(dist);
           81 
           82 #ifdef DEBUG_FIND_AND_BOND_TO_NEIGHBORS
           83                 printf("i=%d, j=%d, dist = %f %f %f, dist_norm = %f, "
           84                         "cutoff = %f\n",
           85                         i, j,
           86                         dist.x, dist.y, dist.z,
           87                         dist_norm, cutoff);
           88 #endif
           89 
           90                 if (dist_norm < cutoff) {
           91                     sliders[i].neighbors[n_neighbors] = j;
           92                     sliders[i].neighbor_distance[n_neighbors] = dist;
           93 
           94                     if (n_neighbors == MAX_NEIGHBORS - 1)
           95                         fprintf(stderr, "Error: MAX_NEIGHBORS exceeded for "
           96                                 "slider %d.\n", i);
           97                     n_neighbors++;
           98                 }
           99             }
          100         }
          101     }
          102 }