X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_client.c;h=ad1c84fa229c29acbde52e60a70e6463a3972342;hp=535dc89b2416995cc0c2a7d7f51555d8e6f37118;hb=785bcf81e0bf1e0829f7bef13fddf194339bdd1e;hpb=520f56881396deed5206591ccc09f8734db8cc6b diff --git a/nlsop_client.c b/nlsop_client.c index 535dc89..ad1c84f 100644 --- a/nlsop_client.c +++ b/nlsop_client.c @@ -59,11 +59,14 @@ char p_file[MAX_CHARS]; char n_e_file[MAX_CHARS]; char r_file[MAX_CHARS]; +char s_file[MAX_CHARS]; +int start_fd; t_net *gnet; 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); @@ -71,7 +74,7 @@ int nop(t_event *event,void *allineed); int usage(char *prog) { puts("usage:"); - printf("%s -i ip -p port -r/P/n random/profile/neloss file\n",prog); + printf("%s -i ip -p port -r/P/n/s random/profile/neloss/start file\n",prog); return 1; } @@ -111,7 +114,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++) @@ -124,24 +128,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; @@ -305,38 +313,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 data; + unsigned char ack=DATA_OK; c=gd3_l->max_x*gd3_l->max_y*gd3_l->max_z; - printf("%d <-\n",c); - - network_send(gnet->connection[0].fd,&dc,1); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent dc\n"); - - network_send(gnet->connection[0].fd,(unsigned char *)gd3_l, - sizeof(d3_lattice)); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent d3_lattice\n"); - - network_send(gnet->connection[0].fd,(unsigned char *)gmy_info,sizeof(info)); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent info\n"); - - network_send(gnet->connection[0].fd,gd3_l->status,c*sizeof(unsigned char)); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent ac\n"); - - network_send(gnet->connection[0].fd,(unsigned char *)gd3_l->extra, - c*sizeof(int)); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent cc\n"); - - network_send(gnet->connection[0].fd,(unsigned char *)gi,sizeof(int)); - network_receive(gnet->connection[0].fd,&data,sizeof(unsigned char)); - printf("debug: sent steps\n"); + 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; } @@ -357,10 +346,12 @@ 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,""); + strcpy(s_file,""); + start_fd=0; port=1025; /* parse/check argv */ @@ -385,6 +376,9 @@ int main(int argc,char **argv) case 'p': port=atoi(argv[++i]); break; + case 's': + strcpy(s_file,argv[++i]); + break; default: usage(argv[0]); return -1; @@ -396,6 +390,13 @@ int main(int argc,char **argv) return -1; } + /* try a file to start from */ + if(strcmp(s_file,"")) { + start_fd=open(s_file,O_RDONLY); + if(start_fd>0) printf("using %s as a starting file ...\n",s_file); + else printf("errors opening %s!\n",s_file); + } + /* event init */ event_init(&event,1); event_set_timeout(&event,0,0); @@ -418,11 +419,16 @@ int main(int argc,char **argv) printf("idle, waiting for jobs ...\n"); event_start(&event,NULL,get_data_and_calc,nop); + network_shutdown(&net); + if(start_fd>0) close(start_fd); + return 1; } int nop(t_event *event,void *allineed) { + printf("\ni did a nop :)\n"); + return 1; } @@ -437,6 +443,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 do_sputter; unsigned char data; t_net *net; @@ -444,12 +451,14 @@ int get_data_and_calc(t_event *event,void *allineed) { c_step=0; ne_max=0; ip_max=0; + do_sputter=1; net=gnet; gd3_l=&d3_l; gmy_info=&my_info; gi=&i; dc=0; + shut_down=0; printf("got a new job ...\n"); @@ -484,6 +493,36 @@ int get_data_and_calc(t_event *event,void *allineed) { 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)); + } + /* check for file to start from ... */ + if(start_fd>0) { + printf("starting from a save file!\n"); + unsigned char *nullbuf; + nullbuf=(unsigned char *)malloc(sizeof(d3_lattice)); + if(read(start_fd,nullbuf,sizeof(d3_lattice))!=sizeof(d3_lattice)) { + printf("read failed (start file d3l)\n"); + return -1; + } + free(nullbuf); + nullbuf=(unsigned char *)malloc(sizeof(info)); + if(read(start_fd,nullbuf,sizeof(info))!=sizeof(info)) { + printf("read failed (start file info)\n"); + return -1; + } + free(nullbuf); + if(read(start_fd,d3_l.status,j*sizeof(unsigned char))!=j*sizeof(unsigned char)) { + printf("read failed (start file status)\n"); + return -1; + } + if(read(start_fd,d3_l.extra,j*sizeof(int))!=j*sizeof(int)) { + printf("read failed (start file extra)\n"); + return -1; + } + } } else { printf("unknown instruction, restarting ...\n"); @@ -528,7 +567,7 @@ int get_data_and_calc(t_event *event,void *allineed) { /* this should be obsolete - z is high enough - we check now! */ if(c_profile[d3_l.max_z-1]!=0) { printf("max_z (%d) too small - sputtering not possible\n",d3_l.max_z); - return -1; + do_sputter=0; } /* sputtering really possible ?*/ @@ -545,8 +584,8 @@ int get_data_and_calc(t_event *event,void *allineed) { for(j=0;j