X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=moldyn.c;h=b507d65354dabcf690628bc8bc31846962542fe3;hb=3ffe2a08e25fc091b6241885055450009267e2d8;hp=029f7c756bd8f31871b4e7da5ae51f887db68031;hpb=710717c4033bc5b8eb34644914e762a2834ae345;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index 029f7c7..b507d65 100644 --- a/moldyn.c +++ b/moldyn.c @@ -9,19 +9,21 @@ #include #include +#include #include "math/math.h" #include "init/init.h" +#include "random/random.h" int create_lattice(unsigned char type,int element,double mass,double lc, - t_3dvec *dim,t_atom **atom) { + int a,int b,int c,t_atom **atom) { int count; int ret; t_3dvec origin; - count=((dim->x/lc)*(dim->y/lc)*(dim->z/lc)); + count=a*b*c; if(type==FCC) count*=4; if(type==DIAMOND) count*=8; @@ -36,14 +38,14 @@ int create_lattice(unsigned char type,int element,double mass,double lc, switch(type) { case FCC: - ret=fcc_init(dim,lc,*atom,&origin); + ret=fcc_init(a,b,c,lc,*atom,&origin); break; case DIAMOND: - ret=diamond_init(dim,lc,*atom,&origin); + ret=diamond_init(a,b,c,lc,*atom,&origin); break; default: - ret=-1; printf("unknown lattice type (%02x)\n",type); + return -1; } /* debug */ @@ -51,6 +53,7 @@ int create_lattice(unsigned char type,int element,double mass,double lc, printf("ok, there is something wrong ...\n"); printf("calculated -> %d atoms\n",count); printf("created -> %d atoms\n",ret); + return -1; } while(count) { @@ -62,3 +65,83 @@ int create_lattice(unsigned char type,int element,double mass,double lc, return ret; } +int destroy_lattice(t_atom *atom) { + + if(atom) free(atom); + + return 0; +} + +int thermal_init(t_atom *atom,t_random *random,int count,double t) { + + /* + * - gaussian distribution of velocities + * - zero total momentum + * - velocity scaling (E = 3/2 N k T), E: kinetic energy + */ + + int i; + double v,sigma; + t_3dvec p_total,delta; + + /* gaussian distribution of velocities */ + v3_zero(&p_total); + for(i=0;i