X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=posic.c;h=926e20c4e43ee38965e0bb62e01b87b09f7b858d;hb=83775c491117faa149281d0302fc8b8064d6b080;hp=8910dddecd353f04004e11d9eddc20135882703e;hpb=6eb09b305eb6f565d844979b68dd2542e9a0d5fa;p=physik%2Fposic.git diff --git a/posic.c b/posic.c index 8910ddd..926e20c 100644 --- a/posic.c +++ b/posic.c @@ -5,77 +5,137 @@ * */ -#include "posic.h" +#include "moldyn.h" +#include "math/math.h" +#include "init/init.h" +#include "visual/visual.h" -#define RAND(max) (max*(0.5-(1.0*rand()/RAND_MAX+1))); +#include "posic.h" int main(int argc,char **argv) { + t_moldyn md; + t_atom *si; - //t_si *c; - int i,j,runs,amount_si; - double time; - int fd1,fd2; - unsigned char xyz[128]; - unsigned char scr[128]; - unsigned char ppm[128]; - - double tau,tau2,m,m2; - double deltax,deltay,deltaz,distance; - double deltax2,deltay2,deltaz2,tmp; - double lj1,lj2,lj; - - /* silicon */ - //amount_si=AMOUNT_SI; - amount_si=2; - printf("simulating %d silicon atoms\n",amount_si); - si=malloc(amount_si*sizeof(t_atom)); - if(!si) { - perror("silicon malloc"); - return -1; - } - memset(si,0,amount_si*sizeof(t_atom)); - m=SI_M; m2=2.0*m; + + t_visual vis; + + t_random random; + + int a,b,c; + double t,e,u; + double help; + t_3dvec p; + int count; + + t_lj_params lj; + + char fb[32]="saves/fcc_test"; /* init */ - printf("placing silicon atoms\n"); + + rand_init(&random,NULL,1); + random.status|=RAND_STAT_VERBOSE; + + /* testing random numbers */ + //for(a=0;a<1000000;a++) + // 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; + + t=TEMPERATURE; + + printf("placing silicon atoms ... "); + //count=create_lattice(DIAMOND,Si,M_SI,LC_SI,a,b,c,&si); + //printf("(%d) ok!\n",count); + count=2; + si=malloc(2*sizeof(t_atom)); + si[0].r.x=2.0; + si[0].r.y=0; + si[0].r.z=0; + si[0].element=Si; + si[0].mass=14.0; + si[1].r.x=-2.0; + si[1].r.y=0; + si[1].r.z=0; + si[1].element=Si; + si[1].mass=14.0; + + 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: %f\n",e); + printf("3/2 N k T = %f\n",1.5*count*K_BOLTZMANN*t); + + /* check total momentum */ + p=get_total_p(si,count); + printf("total momentum: %f\n",v3_norm(&p)); + + /* check potential energy */ + md.count=count; + md.atom=si; + md.potential=potential_lennard_jones; + md.force=force_lennard_jones; + //md.cutoff_square=((LC_SI/4.0)*(LC_SI/4.0)); + md.cutoff_square=36.0; + md.pot_params=&lj; + md.integrate=velocity_verlet; + md.time_steps=RUNS; + md.tau=TAU; + md.status=0; + md.visual=&vis; + + lj.sigma6=3.0/16.0*LC_SI*LC_SI; + help=lj.sigma6*lj.sigma6; + lj.sigma6*=help; + lj.sigma12=lj.sigma6*lj.sigma6; + lj.epsilon=10000; + + u=get_e_pot(&md); + + printf("potential energy: %f\n",u); + printf("total energy (1): %f\n",e+u); + printf("total energy (2): %f\n",get_total_energy(&md)); + + md.dim.x=a*LC_SI; + md.dim.y=b*LC_SI; + md.dim.z=c*LC_SI; + /* - for(i=0;iLX) 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;iLX) 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