X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_client.c;h=8a1c81c72f48aecf44771a577db60a463bb8adb7;hp=be24dc97bfaa22c5c0bd56d31cee6493df7e4e48;hb=acc832c81063b8dd02cf97ff78989127f6caed7b;hpb=f615574d57f1d57dd4169ddd4f552d5c000c6dc8 diff --git a/nlsop_client.c b/nlsop_client.c index be24dc9..8a1c81c 100644 --- a/nlsop_client.c +++ b/nlsop_client.c @@ -64,8 +64,10 @@ d3_lattice *gd3_l; info *gmy_info; int *gi; unsigned char dc; +unsigned char shut_down; int get_data_and_calc(t_event *event,void *allineed); +int nop(t_event *event,void *allineed); int usage(char *prog) { @@ -110,7 +112,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 +126,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; @@ -304,20 +311,19 @@ u32 get_reject_graph(info *my_info,d3_lattice *d3_l,char *file,u32 *graph) { void send_data(int signum) { int c; + unsigned char ack=DATA_OK; 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)); + network_send_chan(gnet,0,&ack,sizeof(unsigned char)); + if(dc==DC_QUIT) shut_down=1; } @@ -338,7 +344,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,""); @@ -397,7 +403,16 @@ int main(int argc,char **argv) /* wait for job */ event_math(net.connection[0].fd,&event,READ,ADD); printf("idle, waiting for jobs ...\n"); - event_start(&event,NULL,get_data_and_calc,NULL); + event_start(&event,NULL,get_data_and_calc,nop); + + network_shutdown(&net); + + return 1; +} + +int nop(t_event *event,void *allineed) { + + printf("\ni did a nop :)\n"); return 1; } @@ -413,7 +428,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; @@ -426,12 +441,13 @@ int get_data_and_calc(t_event *event,void *allineed) { gmy_info=&my_info; gi=&i; dc=0; + shut_down=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, @@ -448,15 +464,35 @@ 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)); + } + if(c_step==0) { + printf("important: clear status/conc data!\n"); + memset(d3_l.status,0,j*sizeof(unsigned char)); + memset(d3_l.extra,0,j*sizeof(int)); } } + 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; @@ -506,8 +542,8 @@ int get_data_and_calc(t_event *event,void *allineed) { for(j=0;j