lennard jones force
[physik/posic.git] / posic.c
diff --git a/posic.c b/posic.c
index 0f05b2b..79654cd 100644 (file)
--- a/posic.c
+++ b/posic.c
 
 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 help;
+       t_3dvec p;
+       int count;
+
+       t_lj_params lj;
 
        char fb[32]="saves/fcc_test";
 
-       t_visual vis;
+       /* init */
 
-       int count;
+       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;
-       
-       visual_init(&vis,fb);
 
-       /* init */
-       printf("placing silicon atoms\n");
+       t=TEMPERATURE;
+
+       printf("placing silicon atoms ... ");
        count=create_lattice(DIAMOND,Si,M_SI,LC_SI,a,b,c,&si);
+       printf("(%d) ok!\n",count);
+
+       printf("setting thermal fluctuations\n");
+       thermal_init(si,&random,count,t);
+
+       /* visualize */
 
        visual_atoms(&vis,0.0,si,count);
 
+       /* 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.pot_params=&lj;
+       md.force=NULL;
+       md.status=0;
+
+       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=1;
+
+       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;
+
+       /*
+        * let's do the actual md algorithm now
+        *
+        * integration of newtons equations
+        */
+
+       /* close */
+
        visual_tini(&vis);
 
+       rand_close(&random);
+       
+
        //printf("starting velocity verlet: ");
        //fflush(stdout);