X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fmorpheus.git;a=blobdiff_plain;f=main.c;h=9306e60228f3c026a57cc0b15565083af588b4fd;hp=2b8864062f406dfe75bed461139b1ce18c5a5e8a;hb=2114472cdcc3dc98f31f44f104148baaf4058651;hpb=9d299f65c528e62247efb3b7f2b70468f43a255c diff --git a/main.c b/main.c index 2b88640..9306e60 100644 --- a/main.c +++ b/main.c @@ -13,14 +13,21 @@ #include #include +#include #include #include #include +/* important defines */ #include "defines.h" +/* function prototypes */ +#include "random.h" +#include "display.h" + /* global variables */ u32 sum_z_cells; +u32 sum_range_rate; int random_fd; /* /dev/urandom file descriptor */ int usage() @@ -37,27 +44,54 @@ int usage() puts("-Y \t display area intercept point y (default # y cells / 2)"); puts("-Z \t display area intercept point z (default # z cells / 2)"); puts("-d \t refresh every loops (default 100)"); + puts("-r \t pressure range from amorphous SiCx (default 2)"); + puts("-f \t (unused) faktor for pressure from amorphous SiCx (default 1)"); + puts("-p \t p0 for propability of cell getting amorph (default sum_range_rate / 4)"); 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,int p0) { - /* tag it ... testing! */ - make_amorph(cell); - + u32 *cell; + int i,j,k,count; + // float count; + cell=(u32 *)(cell_p+x+y*(x_max-1)+z*(x_max-1)*(y_max-1)); + count=p0; + 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)) + { + if(*(u32 *)(cell_p+((x+x_max+i)%x_max)+((y+j+y_max)%y_max)*(x_max-1)+((z+k+z_max)%z_max)*(x_max-1)*(y_max-1))&AMORPH) count+=(3*range*range-i*i-j*j-k*k); + } + } + } + } + // count+=faktor*1.0/(i*i+j*j+k*k); + if(*cell&AMORPH) + { + /* wrong propability! just test by now ...*/ + if(rand_get(sum_range_rate)>count) make_cryst(cell); + } else + { + if(rand_get(sum_range_rate)<=count) make_amorph(cell); + } return 23; } @@ -65,8 +99,9 @@ int main(int argc,char **argv) { u32 x_cell,y_cell,z_cell; /* amount of segments */ u32 x,y,z; /* cells */ - int i; /* for counting */ + int i,j,k; /* for counting */ int slope_nel,start_nel; /* nuclear energy loss: slope, constant */ + int a_p_range,a_p_faktor,a_p_p0; /* p. range, p0 and faktor of amorphous sic */ int steps; /* # steps */ void *cell_p; struct __display display; @@ -79,6 +114,9 @@ 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; + a_p_p0=NOT_SPECIFIED; steps=DEFAULT_STEPS; display_x=x_cell/2; display_y=y_cell/2; @@ -126,6 +164,15 @@ 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; + case 'p': + a_p_p0=atoi(argv[++i]); + break; default: usage(); return -23; @@ -140,10 +187,26 @@ int main(int argc,char **argv) return -23; } - /* calculate sum_z_cells one time! */ + /* calculate sum_z_cells, sum_range_rate one time! */ sum_z_cells=0; for(i=1;i<=z_cell;i++) sum_z_cells+=(start_nel+i*slope_nel); - printfd("debug: sum z cells -> %d\n",sum_z_cells); + printfd("debug: sum z cells -> %u\n",sum_z_cells); + sum_range_rate=0; + for(i=-a_p_range;i<=a_p_range;i++) + { + for(j=-a_p_range;j<=a_p_range;j++) + { + for(k=-a_p_range;k<=a_p_range;k++) + { + if(!(i==0 && j==0 && k==0)) + sum_range_rate+=((3*a_p_range*a_p_range)-i*i-j*j-k*k); + } + } + } + printfd("debug: sum range rate -> %u\n",sum_range_rate); + /* add a_p_p0 ... */ + if(a_p_p0==NOT_SPECIFIED) a_p_p0=sum_range_rate/4; + sum_range_rate+=a_p_p0; /* testing ... */ @@ -169,7 +232,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,a_p_p0); /* display stuff */ if((i%display_refresh_rate)==0)