X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop_client.c;h=ce42433fb25171422ec8a36bae301a575688db27;hp=403bfe0aab0cf1a51de58452ea0e6e15b9257e8c;hb=9ba8efd9cd20fa8047c4583dbadb18308401894a;hpb=611c4dc08cdfc058f96352cde92496c501102030 diff --git a/nlsop_client.c b/nlsop_client.c index 403bfe0..ce42433 100644 --- a/nlsop_client.c +++ b/nlsop_client.c @@ -40,21 +40,37 @@ #include #include +#include + #include "nlsop.h" #include "dfbapi.h" #include "random.h" -#include "../api/network.h" -#include "../api/event.h" -#include "../api/list.h" +#include "network.h" +#include "event.h" + +#include "nlsop_general.h" #define MAKE_AMORPH(N) *(N)|=AMORPH #define MAKE_CRYST(N) *(N)&=~AMORPH +/* globals */ + +char p_file[MAX_CHARS]; +char n_e_file[MAX_CHARS]; +char r_file[MAX_CHARS]; +t_net *gnet; +d3_lattice *gd3_l; +info *gmy_info; +int *gi; +unsigned char dc; + +int get_data_and_calc(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; } @@ -185,31 +201,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 */ @@ -220,119 +234,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 <-- */ -int send_data( ) { - - return 1; -} - -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)) receive from server :) --> T O D O <-- */ -int receive_data( ) { - - return 1; -} - -int load_from_file(char *lf,d3_lattice *d3_l,info *my_inf) -{ - - int lf_fd,c,pos,end,data,data_len,strip; - - if((lf_fd=open(lf,O_RDONLY))<0) - { - puts("cannot open load file"); - return -1; - } - if(read(lf_fd,d3_l,sizeof(d3_lattice))max_x*d3_l->max_y*d3_l->max_z; - data_len=data*(sizeof(int)+sizeof(unsigned char)); - printf("there are %d volumes so we need %d of bytes\n",data,data_len); - end=lseek(lf_fd,0,SEEK_END); - c=end-pos-data_len; - printf("end: %d => length: %d => guessed info size: %d bytes\n",end,end-pos,c); - strip=sizeof(info)-c; - printf("as real programs info size is %d, we strip %d bytes\n",sizeof(info),strip); - lseek(lf_fd,pos,SEEK_SET); - c=sizeof(info); - if(strip>0) c-=strip; - if(c<0) - { - puts("info smaller then strip size"); - return -1; - } - if(read(lf_fd,my_inf,c)0) memset(my_inf+c,0,strip); - if(strip<0) lseek(lf_fd,(-1*strip),SEEK_CUR); - c=d3_l->max_x*d3_l->max_y*d3_l->max_z; - if((d3_l->status=(unsigned char*)malloc(c*sizeof(unsigned char)))==NULL) - { - puts("cannot allocate status buffer"); - return -1; - } - if((d3_l->extra=(int *)malloc(c*sizeof(int)))==NULL) - { - puts("cannot allocate concentration buffer"); - return -1; - } - if(read(lf_fd,d3_l->status,c*sizeof(unsigned char))extra,c*sizeof(int))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)); + +} /* @@ -409,38 +328,20 @@ u32 get_reject_graph(info *my_info,d3_lattice *d3_l,char *file,u32 *graph) { int main(int argc,char **argv) { - u32 x,y,z,x_c,y_c,z_c; - int i,j; - int resave; - int c_step; char server_ip[16]; int port; - char p_file[MAX_CHARS]; - char n_e_file[MAX_CHARS]; - char r_file[MAX_CHARS]; - d3_lattice d3_l; - info my_info; - u32 *c_profile; - u32 *n_e_loss; - u32 ne_max,ip_max; - u32 *nel_z; - unsigned char err_dc,dc; -#define DC_QUIT (1<<0) -#define DC_OK (1<<1) -#define DC_END (1<<2) t_net net; + t_event event; + unsigned char data[256]; + int i; + + gnet=&net; /* default values */ - resave=RESAVE; - c_step=0; strcpy(server_ip,""); strcpy(p_file,IMP_PROFILE); strcpy(n_e_file,NEL_PROFILE); strcpy(r_file,""); - ne_max=0; - ip_max=0; - err_dc=0; - dc=0; port=1025; /* parse/check argv */ @@ -476,18 +377,97 @@ int main(int argc,char **argv) return -1; } - /* connect to server and notify about free resource */ + /* event init */ + event_init(&event,1); + event_set_timeout(&event,0,0); + + /* connect to server */ network_init(&net,1); network_set_connection_info(&net,0,server_ip,port); - network_connect(&net,0); + if(network_connect(&net,0)==N_E_CONNECT) { + printf("unable to connect to server, aborting ...\n"); + return -1; + } + network_select(&net,0); + + /* tell server: i am a client, i may work for you */ + data[0]=NLSOP_CLIENT; + network_send(net.connection[0].fd,data,1); /* 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); + + return 1; +} + +int get_data_and_calc(t_event *event,void *allineed) { + + d3_lattice d3_l; + info my_info; + u32 *c_profile; + u32 *n_e_loss; + u32 ne_max,ip_max; + u32 *nel_z; + u32 x_c,y_c,z_c; + int i,j; + int c_step; + unsigned char data[256]; + + t_net *net; + + c_step=0; + ne_max=0; + ip_max=0; + + net=gnet; + gd3_l=&d3_l; + 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,(unsigned char *)&d3_l, + sizeof(d3_lattice)); + network_receive(net->connection[0].fd,(unsigned char *)&my_info, + sizeof(info)); + c_step=0; + j=d3_l.max_x*d3_l.max_y*d3_l.max_z; + d3_l.status=(unsigned char *)malloc(j*sizeof(unsigned char)); + if(d3_l.status==NULL) { + printf("status alloc failed\n"); + return -1; + } + d3_l.extra=(int *)malloc(j*sizeof(int)); + if(d3_l.extra==NULL) { + printf("extra malloc failed\n"); + return -1; + } + if(data[0]==NLSOP_CJOB) { + network_receive(net->connection[0].fd,d3_l.status, + j*sizeof(unsigned char)); + network_receive(net->connection[0].fd,(unsigned char *)d3_l.extra, + j*sizeof(int)); + network_receive(net->connection[0].fd,(unsigned char *)&c_step, + sizeof(int)); + } + } + + 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 */ - err_dc=DC_QUIT; - signal(SIGTERM,send_data(&d3_l,&my_info,i,&err_dc)); + dc=DC_QUIT; + signal(SIGTERM,send_data); /* rand init */ if(!strcmp(r_file,"")) rand_init(NULL); @@ -511,8 +491,7 @@ int main(int argc,char **argv) printf("failed allocating nel_z array mem\n"); return -1; } - for(i=0;i