/* Centre for Complexity Science, University of Warwick -- 2013 */ /* XY model simulation based on code for the Ising model by Charo del Genio */ /* compile with: gcc XY2d.c -o XY2d */ /* run with: ./XY2d [size] [temperature] [sweeps] [seed] [file1] [file2] */ /* BEGIN HEADER */ #include #include #include #include /* global variables */ unsigned int STATE[32]; unsigned long int seed; /* prototypes */ void parameters(int nump, char *param[], int *size, double *temperature, int *sweeps, FILE **p_f_output, FILE **spin_output); /* END HEADER */ //============================= int main(int argc, char *argv[]) { char outputfile[80]; register int i, j; int size, sweeps, x, y, square, t_init, t_av; double E, M, mx, my, temperature, accept, newspin, **spin; FILE *p_f_output, *spin_output; double boltzmann, diff; /* Check parameters */ parameters(argc, argv, &size, &temperature, &sweeps, &p_f_output, &spin_output); t_init = 10000; // equilibration time -- cheap trick only! square = size*size; // square lattice only spin = (double **)malloc(sizeof(int *)*size); // allocate memory in a 2d array for(i=0; it_init) { t_av = i-t_init; M = M*((double) t_av-1)/((double) t_av) + sqrt(mx*mx+my*my)/((double) square)/((double) t_av); } } // end sweep // output the final spin configuration for (x=0; x