X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=nlsop.c;h=54709603e38fd10a9f8f895fc7ba71edc2cb97ad;hp=ff89e7cfbd5795c62666a0e6d31a385454c54e89;hb=0241431eae6bb8b3e8a01e636d28b8aad51416a4;hpb=807dbc1ca4779971778796ffe0ccc97477166aba diff --git a/nlsop.c b/nlsop.c index ff89e7c..5470960 100644 --- a/nlsop.c +++ b/nlsop.c @@ -32,6 +32,7 @@ /* test globals - get removed or included in my_info struct later */ int amorph_count; int cryst_count; +unsigned char c_diff; int usage(void) { @@ -39,6 +40,7 @@ int usage(void) puts("-h \t\t help"); puts("-n \t\t no user interaction"); puts("-Z \t\t cryst -> amorph c diffusion in z direction"); + puts("-i \t\t no cryst to cryst diffusion"); printf("-a \t slope of nuclear energy loss (default %f)\n",A_EL); printf("-b \t nuclear energy loss offset (default %f)\n",B_EL); printf("-x \t # x cells (default %d)\n",X); @@ -55,12 +57,13 @@ int usage(void) printf("-D \t diffusion rate from cryst to amorph cells (default %f)\n",DR_AC); printf("-c \t diffusion rate in cryst cells (default %f)\n",DR_CC); printf("-e \t do diffusion every steps (default %d)\n",DIFF_RATE); + puts("-g continue simulation from file and step (step > 0)!"); printf("-W \t write every steps to save file (default %d)\n",RESAVE); puts("-C \t convert file to gnuplot format"); puts("-L \t load from file"); puts("-S \t save to file"); puts("-R \t read from random file"); - puts("-P \t specify implantatin profile file"); + puts("-P \t specify implantation profile file"); return 1; } @@ -135,7 +138,7 @@ int distrib_c(d3_lattice *d3_l,info *my_info,int step,double c_ratio) for(k=0;kmax_z;k++) { offset=i+j*d3_l->max_x+k*d3_l->max_x*d3_l->max_y; - /* case amorph - amorph <-> cryst diffusion */ + /* case amorph: amorph <- cryst diffusion */ if(*(d3_l->status+offset)&AMORPH) { for(c=-1;c<=1;c++) @@ -184,7 +187,11 @@ int distrib_c(d3_lattice *d3_l,info *my_info,int step,double c_ratio) } } } else - /* case not amorph - cryst <-> cryst diffusion */ + /* case not amorph: cryst <-> cryst diffusion */ + + /* test ! */ + if(c_diff) { + /* */ { for(c=-1;c<=1;c++) { @@ -221,6 +228,9 @@ int distrib_c(d3_lattice *d3_l,info *my_info,int step,double c_ratio) } } } + /* end test */ + } + /* */ } /* for z */ } /* for y */ } /* for x */ @@ -307,7 +317,7 @@ int calc_max_extra(d3_lattice *d3_l) int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) { - int fd,i,j,size=0; + int fd,i,j,size=0,foo=0; int width=0,height=0; char bmpfile[MAX_CHARS]; char buf[128]; @@ -315,23 +325,26 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) if(window==1) { sprintf(bmpfile,"x-z_%d.bmp",y); - size=x*z; - width=x; - height=z; + foo=3*d3_l->max_x; + size=(foo+(4-foo%4))*d3_l->max_z; + width=d3_l->max_x; + height=d3_l->max_z; } if(window==2) { sprintf(bmpfile,"y-z_%d.bmp",x); - size=y*z; - width=y; - height=z; + foo=3*d3_l->max_y; + size=(foo+(4-foo%4))*d3_l->max_z; + width=d3_l->max_y; + height=d3_l->max_z; } if(window==3) { sprintf(bmpfile,"x-y_%d.bmp",z); - size=x*y; - width=x; - height=y; + foo=3*d3_l->max_x; + size=(foo+(4-foo%4))*d3_l->max_y; + width=d3_l->max_x; + height=d3_l->max_y; } if((fd=open(bmpfile,O_WRONLY|O_CREAT))<0) @@ -379,11 +392,11 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) } if(window==1) { - for(i=0;imax_x;i++) + for(j=0;jmax_z;j++) { - for(j=0;jmax_z;j++) + for(i=0;imax_x;i++) { - if(*(d3_l->status+i+y*d3_l->max_x+j*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); + if(*(d3_l->status+i+y*d3_l->max_x+(d3_l->max_z-j-1)*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); else memset(buf,0,3); if(write(fd,buf,3)<3) { @@ -391,15 +404,24 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) return-1; } } + if(foo%4) + { + memset(buf,0,4-foo%4); + if(write(fd,buf,4-foo%4)<4-foo%4) + { + puts("failed writing 4 byte ending"); + return -1; + } + } } } if(window==2) { - for(i=0;imax_y;i++) + for(j=0;jmax_z;j++) { - for(j=0;jmax_z;j++) + for(i=0;imax_y;i++) { - if(*(d3_l->status+x+i*d3_l->max_x+j*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); + if(*(d3_l->status+x+i*d3_l->max_x+(d3_l->max_z-j-1)*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); else memset(buf,0,3); if(write(fd,buf,3)<3) { @@ -407,15 +429,24 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) return-1; } } + if(foo%4) + { + memset(buf,0,4-foo%4); + if(write(fd,buf,4-foo%4)<4-foo%4) + { + puts("failed writing 4 byte ending"); + return -1; + } + } } } if(window==3) { - for(i=0;imax_x;i++) + for(j=0;jmax_y;j++) { - for(j=0;jmax_y;j++) + for(i=0;imax_x;i++) { - if(*(d3_l->status+i+j*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); + if(*(d3_l->status+i+(d3_l->max_y-j-1)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3); else memset(buf,0,3); if(write(fd,buf,3)<3) { @@ -423,6 +454,15 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z) return -1; } } + if(foo%4) + { + memset(buf,0,4-foo%4); + if(write(fd,buf,4-foo%4)<4-foo%4) + { + puts("failed writing 4 byte ending"); + return -1; + } + } } } close(fd); @@ -582,6 +622,7 @@ int main(int argc,char **argv) u32 x,y,z,x_c,y_c,z_c; int i,quit,escape,switchmode,nowait,bmp; int refresh,resave; + int c_step; char s_file[MAX_CHARS]; char s_file_tmp[MAX_CHARS]; char l_file[MAX_CHARS]; @@ -626,6 +667,7 @@ int main(int argc,char **argv) refresh=REFRESH; resave=RESAVE; my_info.z_diff=0; + c_diff=1; my_info.a_el=A_EL; my_info.b_el=B_EL; my_info.a_cd=A_CD; @@ -641,6 +683,7 @@ int main(int argc,char **argv) quit=0; escape=0; switchmode=0; + c_step=0; strcpy(s_file,""); strcpy(l_file,""); strcpy(c_file,""); @@ -682,6 +725,9 @@ int main(int argc,char **argv) case 'Z': my_info.z_diff=1; break; + case 'i': + c_diff=0; + break; case 's': my_info.steps=atoi(argv[++i]); break; @@ -735,6 +781,10 @@ int main(int argc,char **argv) case 'P': strcpy(p_file,argv[++i]); break; + case 'g': + strcpy(l_file,argv[++i]); + if(i