From: hackbard <hackbard> Date: Thu, 27 Mar 2003 15:37:38 +0000 (+0000) Subject: began propability calc of amorph<->cryst X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cdf203b95bccd0e7e01e83800ad8435f4a2da8c3;p=physik%2Fmorpheus.git began propability calc of amorph<->cryst --- diff --git a/Makefile b/Makefile index 8949339..e2b0539 100644 --- 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: diff --git a/defines.h b/defines.h index aac6562..8305711 100644 --- a/defines.h +++ b/defines.h @@ -16,11 +16,15 @@ #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; diff --git a/display.c b/display.c index 4ef9546..7619be2 100644 --- 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 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 --- a/main.c +++ b/main.c @@ -13,12 +13,18 @@ #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) diff --git a/random.c b/random.c index 3f8ed72..3fbf912 100644 --- 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 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);