-
[physik/ising.git] / ising.c
diff --git a/ising.c b/ising.c
index b6c3a87..d369024 100644 (file)
--- a/ising.c
+++ b/ising.c
@@ -37,6 +37,7 @@ int usage(void)
  puts("-s <value> \t spin interaction strength");
  puts("-r \t run in interactive mode (still in work)");
  puts("-d <value> \t refresh display rate");
+ puts("-t <value> maximal temperature");
 
  return 1;
 }
@@ -75,6 +76,7 @@ int main(int argc, char **argv)
  itt=I;
  s=S;
  strcpy(output_file,"");
+ max_T=0;
  /* parse argv */
  for(i=1;i<argc;i++)
  {
@@ -103,6 +105,9 @@ int main(int argc, char **argv)
     case 'd':
      dr=atoi(argv[++i]);
      break;
+    case 't':
+     max_T=atof(argv[++i]);
+     break;
     default:
      usage();
      return -1;
@@ -127,8 +132,8 @@ int main(int argc, char **argv)
 
  /* begin at T=0 M=1 situation */
  memset(atom,0,max_x*max_y*sizeof(unsigned char));
- max_T=3.0*s;
+
+ if(max_T==0) max_T=3.0*s; 
 
  for(T=.05;T<max_T;T+=.05)
  {
@@ -148,7 +153,7 @@ int main(int argc, char **argv)
    if((*(atom+((max_x+x_c-1)%max_x)+y_c*max_x))&1) ++count_p;
    if(((*(atom+x_c+y_c*max_x))&1)==0) count_p=4-count_p;
    delta_e=(2*count_p-4)*s;
-   if(delta_e<0) *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
+   if(delta_e<=0) *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
    else
    {
     if(1.0*rand()/RAND_MAX<exp(-1.0*delta_e*beta))
@@ -195,7 +200,7 @@ int main(int argc, char **argv)
    if((*(atom+((max_x+x_c-1)%max_x)+y_c*max_x))&1) ++count_p;
    if(((*(atom+x_c+y_c*max_x))&1)==0) count_p=4-count_p;
    delta_e=(2*count_p-4)*s;
-   if(delta_e<0) *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
+   if(delta_e<=0) *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
    else
    {
     if(1.0*rand()/RAND_MAX<exp(-1.0*delta_e*beta))