X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_client.c;h=f7938edad2338adb684716f5ce5a375211025ba6;hp=6ac9c92b36bd706fd231137e541ff87fa20a9814;hb=d5c65b3df98d6ad85c2e70cf11bee66b59fd22f3;hpb=5246e11671ef0cceef2086f1c9d75c35198683e2 diff --git a/nlsop_client.c b/nlsop_client.c index 6ac9c92..f7938ed 100644 --- a/nlsop_client.c +++ b/nlsop_client.c @@ -66,6 +66,7 @@ int *gi; unsigned char dc; int get_data_and_calc(t_event *event,void *allineed); +int nop(t_event *event,void *allineed); int usage(char *prog) { @@ -110,7 +111,8 @@ int process_cell(d3_lattice *d3_l,u32 x,u32 y,u32 z,info *my_info,u32 nel_z) thiz=d3_l->status+x+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y; conc=d3_l->extra+x+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y; - p=my_info->b*nel_z; + //p=my_info->b*nel_z; // energieuebertrag prop zu nukl. bk + p=my_info->b*URAND_MAX; // konstanter energieuebertrag for(i=-(my_info->range);i<=my_info->range;i++) { for(j=-(my_info->range);j<=my_info->range;j++) @@ -123,24 +125,28 @@ int process_cell(d3_lattice *d3_l,u32 x,u32 y,u32 z,info *my_info,u32 nel_z) } } p+=*conc*my_info->c*URAND_MAX; - if(!(*thiz&AMORPH)) - { - if(get_rand(URAND_MAX)<=p) MAKE_AMORPH(thiz); - } else - { - /* assume 1-p probability */ - /* also look for neighbours ! */ - q=(URAND_MAX-p)>0?URAND_MAX-p:0; - j=0; - j+=(*(d3_l->status+((x+d3_l->max_x+1)%d3_l->max_x)+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - j+=(*(d3_l->status+((x+d3_l->max_x-1)%d3_l->max_x)+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - j+=(*(d3_l->status+x+((y+1+d3_l->max_y)%d3_l->max_y)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - j+=(*(d3_l->status+x+((y-1+d3_l->max_y)%d3_l->max_y)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - j+=(*(d3_l->status+x+y*d3_l->max_x+((z+1+d3_l->max_z)%d3_l->max_z)*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - j+=(*(d3_l->status+x+y*d3_l->max_x+((z-1+d3_l->max_z)%d3_l->max_z)*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; - - p+=((q/6)*j); - if(get_rand(URAND_MAX)>p) MAKE_CRYST(thiz); + if(p>=URAND_MAX) MAKE_AMORPH(thiz); + else { + if(!(*thiz&AMORPH)) { + if(get_rand(URAND_MAX)<=p) MAKE_AMORPH(thiz); + } + else { + /* assume 1-p probability */ + /* also look for neighbours ! */ + q=(URAND_MAX-p)>0?URAND_MAX-p:0; + j=0; + j+=(*(d3_l->status+((x+d3_l->max_x+1)%d3_l->max_x)+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + j+=(*(d3_l->status+((x+d3_l->max_x-1)%d3_l->max_x)+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + j+=(*(d3_l->status+x+((y+1+d3_l->max_y)%d3_l->max_y)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + j+=(*(d3_l->status+x+((y-1+d3_l->max_y)%d3_l->max_y)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + j+=(*(d3_l->status+x+y*d3_l->max_x+((z+1+d3_l->max_z)%d3_l->max_z)*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + j+=(*(d3_l->status+x+y*d3_l->max_x+((z-1+d3_l->max_z)%d3_l->max_z)*d3_l->max_x*d3_l->max_y)&AMORPH)?1:0; + + p+=((q/6)*j); + if(p<=URAND_MAX) { + if(get_rand(URAND_MAX)>p) MAKE_CRYST(thiz); + } + } } return 1; @@ -307,17 +313,12 @@ void send_data(int signum) { c=gd3_l->max_x*gd3_l->max_y*gd3_l->max_z; - network_send(gnet->connection[0].fd,&dc,1); - /* - network_send(gnet->connection[0].fd,(unsigned char *)gd3_l, - sizeof(d3_lattice)); - network_send(gnet->connection[0].fd,(unsigned char *)gmy_info,sizeof(info)); - */ - network_send(gnet->connection[0].fd,gd3_l->status,c*sizeof(unsigned char)); - network_send(gnet->connection[0].fd,(unsigned char *)gd3_l->extra, - c*sizeof(int)); - network_send(gnet->connection[0].fd,(unsigned char *)gi,sizeof(int)); - + network_send_chan(gnet,0,&dc,1); + network_send_chan(gnet,0,(unsigned char *)gd3_l,sizeof(d3_lattice)); + network_send_chan(gnet,0,(unsigned char *)gmy_info,sizeof(info)); + network_send_chan(gnet,0,gd3_l->status,c*sizeof(unsigned char)); + network_send_chan(gnet,0,(unsigned char *)gd3_l->extra,c*sizeof(int)); + network_send_chan(gnet,0,(unsigned char *)gi,sizeof(int)); } @@ -338,7 +339,7 @@ int main(int argc,char **argv) gnet=&net; /* default values */ - strcpy(server_ip,""); + strcpy(server_ip,"137.250.82.105"); strcpy(p_file,IMP_PROFILE); strcpy(n_e_file,NEL_PROFILE); strcpy(r_file,""); @@ -396,7 +397,15 @@ int main(int argc,char **argv) /* wait for job */ event_math(net.connection[0].fd,&event,READ,ADD); - event_start(&event,NULL,get_data_and_calc,NULL); + printf("idle, waiting for jobs ...\n"); + event_start(&event,NULL,get_data_and_calc,nop); + + return 1; +} + +int nop(t_event *event,void *allineed) { + + printf("\ni did a nop :)\n"); return 1; } @@ -412,7 +421,7 @@ int get_data_and_calc(t_event *event,void *allineed) { u32 x_c,y_c,z_c; int i,j; int c_step; - unsigned char data[256]; + unsigned char data; t_net *net; @@ -425,10 +434,12 @@ int get_data_and_calc(t_event *event,void *allineed) { gmy_info=&my_info; gi=&i; dc=0; + + printf("got a new job ...\n"); /* get info (+data) */ - network_receive(net->connection[0].fd,data,1); - if(data[0]==NLSOP_NJOB || data[0]==NLSOP_CJOB) { + network_receive(net->connection[0].fd,&data,sizeof(unsigned char)); + if(data==NLSOP_NJOB || data==NLSOP_CJOB) { network_receive(net->connection[0].fd,(unsigned char *)&d3_l, sizeof(d3_lattice)); network_receive(net->connection[0].fd,(unsigned char *)&my_info, @@ -445,15 +456,30 @@ int get_data_and_calc(t_event *event,void *allineed) { printf("extra malloc failed\n"); return -1; } - if(data[0]==NLSOP_CJOB) { + if(data==NLSOP_CJOB) { + data=DATA_OK; network_receive(net->connection[0].fd,d3_l.status, j*sizeof(unsigned char)); + network_send(net->connection[0].fd,&data,sizeof(unsigned char)); network_receive(net->connection[0].fd,(unsigned char *)d3_l.extra, j*sizeof(int)); + network_send(net->connection[0].fd,&data,sizeof(unsigned char)); network_receive(net->connection[0].fd,(unsigned char *)&c_step, sizeof(int)); + network_send(net->connection[0].fd,&data,sizeof(unsigned char)); } } + else { + printf("unknown instruction, restarting ...\n"); + return -1; + } + + printf("starting simulation with following parameters:\n"); + printf("b = %f | c = %f | s = %f\n",my_info.b,my_info.c,my_info.s); + printf("diff every %d steps | diff rate = %f\n",my_info.diff_rate, + my_info.dr_ac); + printf("current step: %d | total steps: %d\n",c_step,my_info.steps); + printf("...\n"); /* care for signals */ dc=DC_QUIT; @@ -503,8 +529,8 @@ int get_data_and_calc(t_event *event,void *allineed) { for(j=0;j