ARGH
[matches/honours.git] / course / semester2 / pprog / assignment1 / single-thread / nbody.h
index 4d53f9d..2ff81d7 100644 (file)
@@ -33,9 +33,11 @@ else \
 
 //Macro to be overwritten in multithreaded versions, called before the graphics is allowed to draw anything
 #define BeforeDraw() \
+System_Compute(&universe); \
+universe.steps += 1; \
 if (options.verbosity != 0 && universe.steps % options.verbosity == 0) \
        DisplayStatistics(); \
-System_Compute(&universe);
+
 
 
 
@@ -93,28 +95,32 @@ typedef struct
        const char * input; // initial body field
        const char * output; // file to write final positions / velocities of bodies to
        const char * program; // program name
-       unsigned num_threads; // number of worker threads to spawn (must be greater than 1 for any to be spawned)
-       unsigned nested_threads; // number of threads to nest computations with (must be greater than 1 for any to be spawned)
-       unsigned num_steps; // number of steps to run before stopping (run indefinately if equal to zero)
-       unsigned timeout; // number of seconds to run before stopping (run indefinately if equal to zero)
+       int num_threads; // number of worker threads to spawn (must be greater than 1 for any to be spawned)
+       int nested_threads; // number of threads to nest computations with (must be greater than 1 for any to be spawned)
+       int num_steps; // number of steps to run before stopping (run indefinately if less than zero)
+       int timeout; // number of seconds to run before stopping (run indefinately if less than zero)
        bool draw_graphics; // whether or not to actually draw graphics
        bool pedantic_graphics; // whether the graphics thread will synchronise with the computation thread (true) or just draw as fast as possible (false)
        bool print_positions; // print positions of bodies to stdout on every step
-       unsigned verbosity; // print statistics every number of steps indicated by this variable
+       int verbosity; // print statistics every number of steps indicated by this variable
        clock_t start_clock;  // clock cycles done when simulation starts
        struct timeval start_time; // time at which simulation starts
+       float theta; // Parameter used for Barns Hut algorithm
+       int random; //Used to randomly create bodies
 } Options;
 
 void Body_Print(Body * a, FILE * out); //Print body a
-void Body_Force(Body * a, System * s); //Compute force on body a due to system of bodies s
+void Body_Forces(Body * a, System * s); //Compute force on body a due to system of bodies s
+void Body_Force(Body * a, Body * b); // Compute force on body a due to body b
 void Body_Velocity(Body * a); //Compute velocity of body a
 void Body_Position(Body * a); //Compute position of body a
 
 void System_Init(System * s, const char * fileName); //Initialise System (array of bodies) from a text file
+void System_Random(System * s, int r); //Randomly create bodies
 void System_Compute(System * s);
 void System_Forces(System * s1, System * s2); //Compute forces for bodies in s1 due to bodies in s2 (also updates velocities)
 void System_Positions(System * s); //Update positions for bodies in s1
-
+System * Split_System(System * s, unsigned n); // Splits one system into a number of other systems, returns an array of size n
 
 void Universe_Cleanup(); //Cleanup universe and write bodies to file
 

UCC git Repository :: git.ucc.asn.au