OBJS2 = morpheus
morpheus: $(OBJS)
- $(CC) -o $@ $(OBJS) $(LIBS) main.c
+ $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) main.c
all: morpheus
clean:
#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;
#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
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);
}
}
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);
}
}
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);
}
}
--- /dev/null
+/*
+ * 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);
+
#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 */
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;
}
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;
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;
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;
/* 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)
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;
return(i-1); /* return values 0...z_cell-1 */
}
+
--- /dev/null
+/*
+ * random.h
+ *
+ */
+
+/* function prototypes */
+
+u32 rand_get(u32 max);
+u32 rand_get_lgp(int slope_nel,int start_nel);