X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_client.c;h=201c48c63181c53c15d9da51022de4a1d128e054;hp=c6358924de5083ac5e82ca2872c3e44db0392de8;hb=4c5373958d4b8d38e51560ba898cfd0473d7c108;hpb=3d8104a33fb2ddca332dcb5a640885a33195b101 diff --git a/nlsop_client.c b/nlsop_client.c index c635892..201c48c 100644 --- a/nlsop_client.c +++ b/nlsop_client.c @@ -49,13 +49,11 @@ #include "network.h" #include "event.h" +#include "nlsop_general.h" + #define MAKE_AMORPH(N) *(N)|=AMORPH #define MAKE_CRYST(N) *(N)&=~AMORPH -#define NLSOP_CLIENT 'c' -#define NLSOP_NJOB 'N' -#define NLSOP_CJOB 'C' - /* globals */ char p_file[MAX_CHARS]; @@ -68,11 +66,12 @@ 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) { puts("usage:"); - printf("%s \n",prog); + printf("%s -i ip -p port -r/P/n random/profile/neloss file\n",prog); return 1; } @@ -203,31 +202,29 @@ int distrib_c(d3_lattice *d3_l,info *my_info,int step,u32 rj_m,u32 *rj_g) } } } - if(my_info->z_diff) + /* diff in z direction */ + if(k!=0) { - if(k!=0) + off=i+j*d3_l->max_x+(k-1)*d3_l->max_x*d3_l->max_y; + carry=0; + if(!*(d3_l->status+off)&AMORPH) carry=(int)(my_info->dr_ac*(*(d3_l->extra+off))); + if(carry!=0) { - off=i+j*d3_l->max_x+(k-1)*d3_l->max_x*d3_l->max_y; - carry=0; - if(!*(d3_l->status+off)&AMORPH) carry=(int)(my_info->dr_ac*(*(d3_l->extra+off))); - if(carry!=0) - { - *(d3_l->extra+off)-=carry; - *(d3_l->extra+offset)+=carry; - } + *(d3_l->extra+off)-=carry; + *(d3_l->extra+offset)+=carry; } - if(k!=d3_l->max_z-1) + } + if(k!=d3_l->max_z-1) + { + off=i+j*d3_l->max_x+(k+1)*d3_l->max_x*d3_l->max_y; + carry=0; + if(!*(d3_l->status+off)&AMORPH) carry=(int)(my_info->dr_ac*(*(d3_l->extra+off))); + if(carry!=0) { - off=i+j*d3_l->max_x+(k+1)*d3_l->max_x*d3_l->max_y; - carry=0; - if(!*(d3_l->status+off)&AMORPH) carry=(int)(my_info->dr_ac*(*(d3_l->extra+off))); - if(carry!=0) - { - *(d3_l->extra+off)-=carry; - *(d3_l->extra+offset)+=carry; - } + *(d3_l->extra+off)-=carry; + *(d3_l->extra+offset)+=carry; } - } + } } } /* for z */ } /* for y */ @@ -238,59 +235,6 @@ int distrib_c(d3_lattice *d3_l,info *my_info,int step,u32 rj_m,u32 *rj_g) return 1; } -/* save to file --> send to server :) --> T O D O <-- */ -void send_data(int signum) { - - int c; - - 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)); - -} - -int save_to_file(char *sf,d3_lattice *d3_l,info *my_inf) -{ - int sf_fd,c; - - if((sf_fd=open(sf,O_WRONLY|O_CREAT))<0) - { - puts("cannot open save file"); - return -1; - } - if(write(sf_fd,d3_l,sizeof(d3_lattice))max_x*d3_l->max_y*d3_l->max_z; - if(write(sf_fd,d3_l->status,c*sizeof(unsigned char))extra,c*sizeof(int))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"); + + if(signum==121) { + printf("save test file\n"); + fd=open("./test.save",O_WRONLY|O_CREAT); + write(fd,gd3_l,sizeof(d3_lattice)); + write(fd,gmy_info,sizeof(info)); + write(fd,gd3_l->status,c*sizeof(unsigned char)); + write(fd,gd3_l->extra,c*sizeof(int)); + close(fd); + } + +} /* @@ -377,7 +368,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,""); @@ -435,7 +426,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; } @@ -450,16 +449,11 @@ int get_data_and_calc(t_event *event,void *allineed) { u32 *nel_z; u32 x_c,y_c,z_c; int i,j; - int resave; int c_step; -#define DC_QUIT (1<<0) -#define DC_OK (1<<1) -#define DC_END (1<<2) - unsigned char data[256]; + unsigned char data; t_net *net; - resave=RESAVE; c_step=0; ne_max=0; ip_max=0; @@ -469,10 +463,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, @@ -489,15 +485,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; @@ -552,21 +563,26 @@ int get_data_and_calc(t_event *event,void *allineed) { process_cell(&d3_l,x_c,y_c,z_c,&my_info,nel_z[z_c]); } distrib_c(&d3_l,&my_info,i,ip_max,c_profile); - if(i%resave==0 && i!=0) { + i++; + if(i%my_info.save_rate==0) { dc=DC_OK; - send_data(0); + send_data(120); dc=DC_QUIT; } - i++; if(i%my_info.s_rate==0) sputter(&d3_l); } /* finished */ dc=DC_END; - send_data(0); + send_data(121); dc=DC_QUIT; /* shutdown/free/close everything now ... */ + free(d3_l.status); + free(d3_l.extra); + free(c_profile); + free(n_e_loss); + free(nel_z); return 1; }