began propability calc of amorph<->cryst
authorhackbard <hackbard>
Thu, 27 Mar 2003 15:37:38 +0000 (15:37 +0000)
committerhackbard <hackbard>
Thu, 27 Mar 2003 15:37:38 +0000 (15:37 +0000)
Makefile
defines.h
display.c
display.h [new file with mode: 0644]
main.c
random.c
random.h [new file with mode: 0644]

index 8949339..e2b0539 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ OBJS = random.o display.o
 OBJS2 = morpheus
 
 morpheus: $(OBJS)
-       $(CC) -o $@ $(OBJS) $(LIBS) main.c
+       $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) main.c
 all: morpheus
 
 clean:
index aac6562..8305711 100644 (file)
--- a/defines.h
+++ b/defines.h
 #define DEFAULT_SLOPE_NEL 1
 #define DEFAULT_START_NEL 0
 
+#define DEFAULT_A_P_RANGE 2
+#define DEFAULT_A_P_FAKTOR 1
+
 #define DEFAULT_STEPS 5000
 
 /* program defines, dont touch ;) */
 
 #define URAND_MAX 0xffffffff
+#define URAND_2_MAX 0xffff
 
 typedef unsigned int u32;
 typedef long long unsigned int u64;
index 4ef9546..7619be2 100644 (file)
--- a/display.c
+++ b/display.c
@@ -8,14 +8,6 @@
 
 #include "defines.h"
 
-#ifdef USE_DFB_API
-// static IDirectFB *dfb=NULL;
-// static IDirectFBSurface *primary_surface=NULL;
-// static IDirectFBFont *font=NULL;
-// static int screen_width=0;
-// static int screen_height=0;
-#endif
-
 int display_init(int x,int y,int z,display *display,void *cell,int *argc,char **argv)
 {
 #ifdef USE_DFB_API
@@ -97,7 +89,10 @@ int display_draw(display *display,int x,int y,int z)
   for(z_c=0;z_c<display->max_z;z_c++)
   {
    dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
-   display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
+   if(x_c==x && z_c==z)
+    display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
+   else
+    display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
    display->primary_surface->DrawRectangle(display->primary_surface,x_c*display_faktor_x+DISPLAY_X_FREE/3,z_c*display_faktor_y+DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
   }
  }
@@ -108,7 +103,10 @@ int display_draw(display *display,int x,int y,int z)
   for(z_c=0;z_c<display->max_z;z_c++)
   {
    dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
-   display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
+   if(y_c==y && z_c==z)
+    display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
+   else
+    display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
    display->primary_surface->DrawRectangle(display->primary_surface,(y_c+display->max_x)*display_faktor_x+2*DISPLAY_X_FREE/3,z_c*display_faktor_y+DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
   }
  }
@@ -119,7 +117,10 @@ int display_draw(display *display,int x,int y,int z)
   for(y_c=0;y_c<display->max_y;y_c++)
   {
    dfb_choose_color((u32 *)(display->cell_p+x_c+y_c*(display->max_x-1)+z_c*(display->max_x-1)*(display->max_y-1)),&r,&g,&b);
-   display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
+   if(x_c==x && y_c==y)
+    display->primary_surface->SetColor(display->primary_surface,0xff,0xff,0,0);
+   else
+    display->primary_surface->SetColor(display->primary_surface,r,g,b,a);
    display->primary_surface->DrawRectangle(display->primary_surface,x_c*display_faktor_x+DISPLAY_X_FREE/3,(y_c+display->max_z)*display_faktor_y+2*DISPLAY_Y_FREE/3,display_faktor_x,display_faktor_y);
   }
  }
diff --git a/display.h b/display.h
new file mode 100644 (file)
index 0000000..4beb565
--- /dev/null
+++ b/display.h
@@ -0,0 +1,14 @@
+/*
+ * display.h
+ *
+ */
+
+/* function prototypes */
+
+int display_init(int x,int y,int z,display *display,void *cell,int *argc,char **
+argv);
+int display_release(display *display);
+int dfb_choose_color(u32 *cell_p,unsigned char *r,unsigned char *g,unsigned char
+ *b);
+int display_draw(display *display,int x,int y,int z);
+
diff --git a/main.c b/main.c
index 2b88640..d508e7d 100644 (file)
--- a/main.c
+++ b/main.c
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 
+/* important defines */
 #include "defines.h"
 
+/* function prototypes */
+#include "random.h"
+#include "display.h"
+
 /* global variables */
 u32 sum_z_cells;
 int random_fd; /* /dev/urandom file descriptor */
@@ -37,27 +43,57 @@ int usage()
  puts("-Y <value> \t display area intercept point y (default # y cells / 2)");
  puts("-Z <value> \t display area intercept point z (default # z cells / 2)");
  puts("-d <value> \t refresh every <value> loops (default 100)");
+ puts("-r <value> \t pressure range from amorphous SiCx (default 2)");
+ puts("-f <value> \t faktor for pressure from amorphous SiCx (default 1)");
  return -23;
 }
 
 int make_amorph(u32 *cell)
 {
- *cell=*cell|AMORPH;
+ *cell|=AMORPH;
  return 23;
 }
 
 int make_cryst(u32 *cell)
 {
- *cell=*cell&(~AMORPH);
+ *cell&=~AMORPH;
  return 23;
 }
 
 /* look at cell ... */
-int process_cell(u32 *cell)
+int process_cell(void *cell_p,u32 x,u32 y,u32 z,u32 x_max,u32 y_max,u32 z_max,int range,int faktor)
 {
- /* tag it ... testing! */
- make_amorph(cell);
-
+ /* is amorph? */
+ u32 *cell;
+ int i,j,k;
+ float count;
+ cell=(u32 *)(cell_p+x+y*(x_max-1)+z*(x_max-1)*(y_max-1));
+ count=0;
+ for(i=-range;i<=range;i++)
+  for(j=-range;j<=range;j++)
+   for(k=-range;k<=range;k++)
+    if(!(i==0 && j==0 && k==0) && (x>=range && x<x_max-range) \
+        && (y>=range && y<y_max-range) && (z>=range && z<z_max-range))
+     if(*(u32 *)(cell_p+(x+i)+(y+j)*(x_max-1)+(z+k)*(x_max-1)*(y_max-1))&AMORPH)
+      // total+=range*range-
+      count+=0.01*faktor*1.0/(i*i+j*j+k*k);
+ /* count is propability of cell getting amorph */
+ /* for now assume 1 - ~ is propability of cell getting cryst if allready amorphous */    
+ if(*cell&AMORPH)
+ {
+  if((1-count)*URAND_2_MAX<=rand_get(URAND_2_MAX))
+  {  
+   printfd("cell getting cryst. ...(%f)\n",(1-count));
+   make_cryst(cell);
+  }
+ } else
+ {
+  if(count*URAND_2_MAX<=rand_get(URAND_2_MAX))
+  {
+   printfd("cell getting amorph ...(%f)\n",count);
+   make_amorph(cell);
+  }
+ }
  return 23;
 }
 
@@ -67,6 +103,7 @@ int main(int argc,char **argv)
  u32 x,y,z; /* cells */
  int i; /* for counting */
  int slope_nel,start_nel; /* nuclear energy loss: slope, constant */
+ int a_p_range,a_p_faktor; /* pressure range and faktor from amorphous sic */
  int steps; /* # steps */
  void *cell_p;
  struct __display display;
@@ -79,6 +116,8 @@ int main(int argc,char **argv)
  z_cell=DEFAULT_Z_SEG;
  slope_nel=DEFAULT_SLOPE_NEL;
  start_nel=DEFAULT_START_NEL;
+ a_p_range=DEFAULT_A_P_RANGE;
+ a_p_faktor=DEFAULT_A_P_FAKTOR;
  steps=DEFAULT_STEPS;
  display_x=x_cell/2;
  display_y=y_cell/2;
@@ -126,6 +165,12 @@ int main(int argc,char **argv)
     case 'd':
      display_refresh_rate=atoi(argv[++i]);
      break;
+    case 'r':
+     a_p_range=atoi(argv[++i]);
+     break;
+    case 'f':
+     a_p_faktor=atoi(argv[++i]);
+     break;
     default:
      usage();
      return -23;
@@ -169,7 +214,9 @@ int main(int argc,char **argv)
 
   /* todo */
   // distrib_c_conc(cell_p);
-  process_cell((u32 *)(cell_p+x+y*(x_cell-1)+z*(x_cell-1)*(y_cell-1)));
+
+  // process_cell((u32 *)(cell_p+x+y*(x_cell-1)+z*(x_cell-1)*(y_cell-1)));
+  process_cell(cell_p,x,y,z,x_cell,y_cell,z_cell,a_p_range,a_p_faktor);
 
   /* display stuff */
   if((i%display_refresh_rate)==0) 
index 3f8ed72..3fbf912 100644 (file)
--- a/random.c
+++ b/random.c
@@ -13,7 +13,7 @@
 extern u32 sum_z_cells;
 extern int random_fd;
 
-/* return random integer between 0 - max */
+/* return random integer between 0 - max-1 */
 u32 rand_get(u32 max) 
 {
  u32 rand_int;
@@ -38,3 +38,4 @@ u32 rand_get_lgp(int slope_nel,int start_nel) {
  return(i-1); /* return values 0...z_cell-1 */
 }
 
+
diff --git a/random.h b/random.h
new file mode 100644 (file)
index 0000000..df01296
--- /dev/null
+++ b/random.h
@@ -0,0 +1,9 @@
+/*
+ * random.h
+ *
+ */
+
+/* function prototypes */
+
+u32 rand_get(u32 max);
+u32 rand_get_lgp(int slope_nel,int start_nel);