X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=posic.c;h=f026abe08e9dca2acd1a9045f71fe1df8c22788b;hb=512390ceb93a2dd630943165b35bba683e0ffcfc;hp=5ff3bc1b7f03a6378bb549009e7c8db9e9806256;hpb=45b27e01673a6cc5bebecb49c51d7f587917483e;p=physik%2Fposic.git diff --git a/posic.c b/posic.c index 5ff3bc1..f026abe 100644 --- a/posic.c +++ b/posic.c @@ -17,15 +17,12 @@ int main(int argc,char **argv) { t_moldyn md; - t_atom *si; - t_visual vis; - t_random random; int a,b,c; - double t,e,u; + double e,u; double help; t_3dvec p; int count; @@ -33,10 +30,12 @@ int main(int argc,char **argv) { t_lj_params lj; t_ho_params ho; - char fb[32]="saves/lj_test"; + /* parse arguments */ + a=moldyn_parse_argv(&md,argc,argv); + if(a<0) return -1; /* init */ - + moldyn_log_init(&md,&vis); rand_init(&random,NULL,1); random.status|=RAND_STAT_VERBOSE; @@ -45,76 +44,76 @@ int main(int argc,char **argv) { // printf("%f %f\n",rand_get_gauss(&random), // rand_get_gauss(&random)); - visual_init(&vis,fb); - a=LEN_X; b=LEN_Y; c=LEN_Z; + /* set for 'bounding atoms' */ vis.dim.x=a*LC_SI; vis.dim.y=b*LC_SI; vis.dim.z=c*LC_SI; - t=TEMPERATURE; - + /* init lattice printf("placing silicon atoms ... "); - //count=create_lattice(DIAMOND,Si,M_SI,LC_SI,a,b,c,&si); - //printf("(%d) ok!\n",count); + count=create_lattice(DIAMOND,SI,M_SI,LC_SI,a,b,c,&si); + printf("(%d) ok!\n",count); */ + /* testing purpose */ count=2; si=malloc(2*sizeof(t_atom)); - si[0].r.x=0.16e-9; + si[0].r.x=0.35*sqrt(3.0)*LC_SI/2.0; si[0].r.y=0; si[0].r.z=0; si[0].element=SI; si[0].mass=M_SI; - si[1].r.x=-0.16e-9; + si[1].r.x=-si[0].r.x; si[1].r.y=0; si[1].r.z=0; si[1].element=SI; si[1].mass=M_SI; + /* */ - printf("setting thermal fluctuations\n"); - //thermal_init(si,&random,count,t); - v3_zero(&(si[0].v)); - v3_zero(&(si[1].v)); - - /* check kinetic energy */ - - e=get_e_kin(si,count); - printf("kinetic energy: %.40f [J]\n",e); - printf("3/2 N k T = %.40f [J]\n",1.5*count*K_BOLTZMANN*t); - - /* check total momentum */ - p=get_total_p(si,count); - printf("total momentum: %.30f [Ns]\n",v3_norm(&p)); - - /* check potential energy */ + /* moldyn init (now si is a valid address) */ md.count=count; md.atom=si; md.potential=potential_lennard_jones; - //md.potential=potential_harmonic_oscillator; md.force=force_lennard_jones; + //md.potential=potential_harmonic_oscillator; //md.force=force_harmonic_oscillator; - //md.cutoff_square=((LC_SI/4.0)*(LC_SI/4.0)); - md.cutoff=(0.4e-9); - md.cutoff_square=(0.6e-9*0.6e-9); + md.cutoff=R_CUTOFF; + md.cutoff_square=(R_CUTOFF*R_CUTOFF); md.pot_params=&lj; //md.pot_params=&ho; md.integrate=velocity_verlet; - md.time_steps=RUNS; - md.tau=TAU; + //md.time_steps=RUNS; + //md.tau=TAU; md.status=0; md.visual=&vis; - md.write=WRITE_FILE; + printf("setting thermal fluctuations (T=%f K)\n",md.t); + //thermal_init(&md,&random,count); + for(a=0;aLX) si[i].x-=LEN_X; -// else if(si[i].x<-LX) si[i].x+=LEN_X; -// si[i].y+=(tau2*si[i].fy/m2); -// if(si[i].y>LY) si[i].y-=LEN_Y; -// else if(si[i].y<-LY) si[i].y+=LEN_Y; -// si[i].z+=(tau2*si[i].fz/m2); -// if(si[i].z>LZ) si[i].z-=LEN_Z; -// else if(si[i].z<-LZ) si[i].z+=LEN_Z; -// /* calculation of velocities v(t+h/2) */ -// si[i].vx+=(tau*si[i].fx/m2); -// si[i].vy+=(tau*si[i].fy/m2); -// si[i].vz+=(tau*si[i].fz/m2); -// /* reset of forces */ -// si[i].fx=.0; -// si[i].fy=.0; -// si[i].fz=.0; -// } -// for(i=0;iLX) deltax-=LEN_X; -// else if(-deltax>LX) deltax+=LEN_X; -// deltax2=deltax*deltax; -// deltay=si[i].y-si[j].y; -// if(deltay>LY) deltay-=LEN_Y; -// else if(-deltay>LY) deltay+=LEN_Y; -// deltay2=deltay*deltay; -// deltaz=si[i].z-si[j].z; -// if(deltaz>LZ) deltaz-=LEN_Z; -// else if(-deltaz>LZ) deltaz+=LEN_Z; -// deltaz2=deltaz*deltaz; -// distance=deltax2+deltay2+deltaz2; -// if(distance<=R2_CUTOFF) { -// tmp=1.0/distance; // 1/r^2 -// lj1=tmp; // 1/r^2 -// tmp*=tmp; // 1/r^4 -// lj1*=tmp; // 1/r^6 -// tmp*=tmp; // 1/r^8 -// lj2=tmp; // 1/r^8 -// lj1*=tmp; // 1/r^14 -// lj1*=LJ_SIGMA_12; -// lj2*=LJ_SIGMA_06; -// lj=-2*lj1+lj2; -// si[i].fx-=lj*deltax; -// si[i].fy-=lj*deltay; -// si[i].fz-=lj*deltaz; -// si[j].fx+=lj*deltax; -// si[j].fy+=lj*deltay; -// si[j].fz+=lj*deltaz; -// } -// } -// } -// for(i=0;i