2 * ising.c - visualization of ising spins in an N x N lattice
6 * author: hackbard@hackdaworld.dyndns.org
21 int main(int argc, char **argv)
28 int max_x,x_c,max_y,y_c;
43 /* we will parse argv later ... */
47 d2_lattice_init(&argc,argv,&d2_l,max_x,max_y);
49 atom=(unsigned char *)(malloc(max_x*max_y*sizeof(unsigned char)));
53 /* begin at T=0 M=1 situation */
54 memset(atom,0,max_x*max_y*sizeof(unsigned char));
56 S=1; /* i have no idea! */
60 beta=20.0/T; /* k_B = 1 */
61 /* do 10 itterations, we will need more */
65 for(x_c=0;x_c<max_x;x_c++)
67 for(y_c=0;y_c<max_y;y_c++)
71 if((*(atom+x_c+((2*y_c+1)%max_y)*max_x))&1) ++count_p;
72 if((*(atom+x_c+((2*y_c-1)%max_y)*max_x))&1) ++count_p;
73 if((*(atom+((2*x_c+1)%max_x)+y_c*max_x))&1) ++count_p;
74 if((*(atom+((2*x_c-1)%max_x)+y_c*max_x))&1) ++count_p;
75 if(((*(atom+x_c+y_c*max_x))&1)==0) count_p=4-count_p;
76 delta_e=(2*count_p-4)*S;
77 if(delta_e<0) *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
80 if(1.0*rand()/RAND_MAX<exp(-1.0*delta_e*beta))
81 *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
83 if((*(atom+x_c+((2*y_c+1)%max_y)*max_x))&1) ++M;
86 sprintf(t_text,"T = %d",T);
88 sprintf(b_text,"b = %f",beta);
90 sprintf(m_text,"M = %f",1.0-2.0*M/(max_x*max_y));
92 d2_lattice_draw(&d2_l,0,0,3,arg_v);