]> hackdaworld.org Git - physik/ising.git/commitdiff
fixes in dfbapi, buggy ising.c added
authorhackbard <hackbard>
Fri, 9 May 2003 00:16:04 +0000 (00:16 +0000)
committerhackbard <hackbard>
Fri, 9 May 2003 00:16:04 +0000 (00:16 +0000)
dfbapi.c
dfbapi.h
ising.c

index 9a8519b7a49e0c87e0ac8eeb72b26fe8cc35638b..0b46a605f01d738704534002cd02e95d95f15c2f 100644 (file)
--- a/dfbapi.c
+++ b/dfbapi.c
@@ -28,7 +28,8 @@ int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y)
  d2_l->p_surface->GetSize(d2_l->p_surface,&(d2_l->s_width),&(d2_l->s_height));
  
  font_dsc.flags=DFDESC_HEIGHT;
- font_dsc.height=d2_l->max_y*((d2_l->s_height)/(d2_l->max_y))/20; /* 20 ? */
+ font_dsc.height=d2_l->max_y*((d2_l->s_height)/(d2_l->max_y))/40; /* 40 ? */
+ d2_l->font_h=font_dsc.height;
  d2_l->dfb->CreateFont(d2_l->dfb,FONT,&font_dsc,&(d2_l->font));
  d2_l->p_surface->SetFont(d2_l->p_surface,d2_l->font);
 
@@ -113,9 +114,9 @@ int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
  d2_l->p_surface->SetColor(d2_l->p_surface,0x80,0x80,0xff,0xff);
  for(i=1;i<=arg_c;i++)
  {
-  d2_l->p_surface->DrawString(d2_l->p_surface,arg_v[1],-1,
+  d2_l->p_surface->DrawString(d2_l->p_surface,arg_v[i],-1,
                               d2_l->info_x+d2_l->fakt_x,
-                              d2_l->info_y+d2_l->fakt_x+(i-1)*d2_l->fakt_x,
+                              d2_l->info_y+d2_l->fakt_y+d2_l->font_h+(i-1)*2*d2_l->font_h,
                               DSTF_LEFT);
  }
  /* now we flip all to surface */
index 2403d8019abdd0a8b0d445d8d8d18ad863545c27..8dfd215529e96dd1357d746a9d4e0d79455efba1 100644 (file)
--- a/dfbapi.h
+++ b/dfbapi.h
@@ -20,6 +20,7 @@ typedef struct __d2_lattice
  int fakt_x,fakt_y;
  int info_x,info_y;
  int info_w,info_h;
+ int font_h;
  unsigned char *status; /* status&1 -> red, else blue */
  IDirectFB *dfb;
  IDirectFBSurface *p_surface;
diff --git a/ising.c b/ising.c
index cb89d8a8997471d10cb227ebede2be58458d5478..dd538b34bd51424fb2a19da036dd0885ef599574 100644 (file)
--- a/ising.c
+++ b/ising.c
 #include <math.h>
 #include "dfbapi.h"
 
-#define X 50
-#define Y 50
+#define X 100
+#define Y 100
 #define MAX_T 200
 
 int main(int argc, char **argv)
 {
  unsigned char *atom;
+ char *arg_v[4];
+ char m_text[30];
+ char t_text[30];
+ char b_text[30];
  int max_x,x_c,max_y,y_c;
- int i,j;
+ int i;
+ int count_p;
  unsigned int T;
- double M;
+ double S;
+ int M;
  double beta;
  double delta_e;
 
@@ -43,25 +49,44 @@ int main(int argc, char **argv)
  /* begin at T=0 M=1 situation */
  memset(atom,0,max_x*max_y*sizeof(unsigned char));
 
+ S=1; /* i have no idea! */
  for(T=1;T<MAX_T;T++)
  {
   beta=1.0/T; /* k_B = 1 */
-  /* do N*N itterations, we will need more */
-  for(i=0;i<max_x*max_y;i++)
+  /* do 100 itterations, we will need more */
+  for(i=0;i<100;i++)
   {
 
- for(x_c=0;x_c<max_x-1;x_c++)
+ for(x_c=0;x_c<max_x;x_c++)
  {
-  for(y_c=0;y_c<max_y-1;y_c++)
+  for(y_c=0;y_c<max_y;y_c++)
   {
-   delta_e=0;
-   // delta_e+=(-1*(int)(atom
+   count_p=0;
+   M=0;
+   if((*(atom+x_c+((2*y_c+1)%max_y)*max_x))&1) ++count_p;
+   if((*(atom+x_c+((2*y_c-1)%max_y)*max_x))&1) ++count_p;
+   if((*(atom+((2*x_c+1)%max_x)+y_c*max_x))&1) ++count_p;
+   if((*(atom+((2*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=(4-2*count_p)*S;
+   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))
+     *(atom+x_c+y_c*max_x)=(*(atom+x_c+y_c*max_x)+1)&1;
+    else M+=1;
+   }
   }
-  
  }
-
+  sprintf(t_text,"T = %d",T);
+  arg_v[1]=t_text;
+  sprintf(b_text,"b = %f",beta);
+  arg_v[2]=b_text;
+  sprintf(m_text,"M = %f",1.0-2*M/(max_x*max_y));
+  arg_v[3]=m_text;
+  d2_lattice_draw(&d2_l,0,0,3,arg_v);
   }
-  d2_lattice_draw(&d2_l,0,0,0,NULL);
  }
 
  getchar();