/*************************************************************************/ /* */ /* Copyright (c) 1994 Stanford University */ /* */ /* All rights reserved. */ /* */ /* Permission is given to use, copy, and modify this software for any */ /* non-commercial purpose as long as this copyright notice is not */ /* removed. All other uses, including redistribution in whole or in */ /* part, are forbidden without prior written permission. */ /* */ /* This software is provided with absolutely no warranty and no */ /* support. */ /* */ /*************************************************************************/ #ifndef _Particle_H #define _Particle_H 1 #include "defs.h" typedef struct _Particle particle; typedef struct _Particle_Node particle_node; typedef enum { ONE_CLUSTER, TWO_CLUSTER } cluster_type; typedef enum { UNIFORM, PLUMMER } model_type; /* Every particle has : * 1. A unique ID number * 2. An x and y position * 3. A charge * 4. The field that acts on it due to every other particle * * The force is what the algorithm actually calculates. */ struct _Particle { long id; real charge; real mass; vector pos; vector acc; vector vel; complex field; long cost; real box; }; /* This structure is used for linked lists of particles */ struct _Particle_Node { particle *data; particle_node *next; }; extern long Total_Particles; extern void CreateParticleList(long my_id, long length); extern void InitParticleList(long my_id, long num_assigned, long starting_id); extern void CreateDistribution(cluster_type cluster, model_type model); extern void PrintParticle(particle *p); extern void PrintAllParticles(void); extern void PrintParticleArrayIds(particle **p_array, long num_particles); #endif /* _Particle_H */