X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.c;h=7a77898b958b9a06f326a6f31423a46cfcce02f9;hb=60f40345bc4fcd8448d724dc67bbb512ec081bd4;hp=b6fa8d3df41dbf12e89c0596463a6cba4207255b;hpb=88ea16029cc07a837977f737f4536fa3e881dcee;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index b6fa8d3..7a77898 100644 --- a/moldyn.c +++ b/moldyn.c @@ -17,13 +17,6 @@ #include "moldyn.h" -#include "math/math.h" -#include "init/init.h" -#include "random/random.h" -#include "visual/visual.h" -#include "list/list.h" - - int moldyn_init(t_moldyn *moldyn,int argc,char **argv) { //int ret; @@ -551,9 +544,6 @@ int link_cell_init(t_moldyn *moldyn) { t_linkcell *lc; int i; - int fd; - - fd=open("/dev/null",O_WRONLY); lc=&(moldyn->lc); @@ -571,8 +561,7 @@ int link_cell_init(t_moldyn *moldyn) { printf("[moldyn] initializing linked cells (%d)\n",lc->cells); for(i=0;icells;i++) - //list_init(&(lc->subcell[i]),1); - list_init(&(lc->subcell[i]),fd); + list_init_f(&(lc->subcell[i])); link_cell_update(moldyn); @@ -594,14 +583,14 @@ int link_cell_update(t_moldyn *moldyn) { nz=lc->nz; for(i=0;icells;i++) - list_destroy(&(moldyn->lc.subcell[i])); + list_destroy_f(&(moldyn->lc.subcell[i])); for(count=0;countcount;count++) { i=(atom[count].r.x+(moldyn->dim.x/2))/lc->x; j=(atom[count].r.y+(moldyn->dim.y/2))/lc->y; k=(atom[count].r.z+(moldyn->dim.z/2))/lc->z; - list_add_immediate_ptr(&(moldyn->lc.subcell[i+j*nx+k*nx*ny]), - &(atom[count])); + list_add_immediate_f(&(moldyn->lc.subcell[i+j*nx+k*nx*ny]), + &(atom[count])); } return 0; @@ -671,7 +660,9 @@ int link_cell_shutdown(t_moldyn *moldyn) { lc=&(moldyn->lc); for(i=0;inx*lc->ny*lc->nz;i++) - list_shutdown(&(moldyn->lc.subcell[i])); + list_destroy_f(&(moldyn->lc.subcell[i])); + + free(lc->subcell); return 0; } @@ -950,7 +941,7 @@ int potential_force_calc(t_moldyn *moldyn) { for(j=0;j<27;j++) { this=&(neighbour_i[j]); - list_reset(this); + list_reset_f(this); if(this->start==NULL) continue; @@ -985,7 +976,7 @@ int potential_force_calc(t_moldyn *moldyn) { for(k=0;k<27;k++) { that=&(neighbour_i2[k]); - list_reset(that); + list_reset_f(that); if(that->start==NULL) continue; @@ -1011,7 +1002,7 @@ int potential_force_calc(t_moldyn *moldyn) { ktom, bc_ik|bc_ij); - } while(list_next(that)!=\ + } while(list_next_f(that)!=\ L_NO_NEXT_ELEMENT); } @@ -1023,7 +1014,7 @@ int potential_force_calc(t_moldyn *moldyn) { jtom,bc_ij); } - } while(list_next(this)!=L_NO_NEXT_ELEMENT); + } while(list_next_f(this)!=L_NO_NEXT_ELEMENT); } @@ -1756,3 +1747,90 @@ x=dim->x/2; return 0; } +/* + * lattice creation functions + */ + +/* fcc lattice init */ +int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin) { + + int count; + int i,j; + t_3dvec o,r,n; + t_3dvec basis[3]; + double help[3]; + double x,y,z; + + x=a*lc; + y=b*lc; + z=c*lc; + + if(origin) v3_copy(&o,origin); + else v3_zero(&o); + + /* construct the basis */ + for(i=0;i<3;i++) { + for(j=0;j<3;j++) { + if(i!=j) help[j]=0.5*lc; + else help[j]=.0; + } + v3_set(&basis[i],help); + } + + v3_zero(&r); + count=0; + + /* fill up the room */ + r.x=o.x; + while(r.x