X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=visual_atoms.c;fp=visual_atoms.c;h=9baa487de4835464b45ea874c533f8a04224378b;hb=a58211f24f237b51e708b9e8b9fd463a709754a6;hp=0000000000000000000000000000000000000000;hpb=4f7a62883e5e47be44856c9767c9255c1d68190d;p=physik%2Fposic.git diff --git a/visual_atoms.c b/visual_atoms.c new file mode 100644 index 0000000..9baa487 --- /dev/null +++ b/visual_atoms.c @@ -0,0 +1,113 @@ +/* + * code visualize atoms + * + * author: frank.zirkelbach@physik.uni-augsburg.de + * + */ + +#define _GNU_SOURCE +#include +//#include +//#include +//#include +//#include +//#include +//#include + +#include "moldyn.h" + +int usage(char *prog) { + + printf("\nusage:\n"); + printf(" %s [marked atom]\n\n",prog); + + return -1; +} + +int main(int argc,char **argv) { + + t_moldyn moldyn; + t_atom *itom,*jtom; + int j; + int ret; + t_list n[27]; + t_list *this; + t_linkcell *lc; + t_3dvec dist; + double d,radius; + int ma,ca; + + if(argc<4) { + usage(argv[0]); + return -1; + } + + ca=atoi(argv[2]); + radius=atof(argv[3]); + + ma=-1; + if(argc==5) + ma=atoi(argv[4]); + + memset(&moldyn,0,sizeof(t_moldyn)); + + printf("[visual atoms] reading save file ...\n"); + ret=moldyn_read_save_file(&moldyn,argv[1]); + if(ret) { + printf("[visual atoms] exit!\n"); + return ret; + } + + /* link cell init */ + moldyn.cutoff=radius; + link_cell_init(&moldyn,VERBOSE); + lc=&(moldyn.lc); + + /* serach atoms */ + itom=&(moldyn.atom[ca]); + link_cell_neighbour_index(&moldyn, + (itom->r.x+moldyn.dim.x/2)/lc->x, + (itom->r.y+moldyn.dim.y/2)/lc->y, + (itom->r.z+moldyn.dim.z/2)/lc->z, + n); + + + printf("%s %f %f %f %s %f\n", + pse_name[itom->element],itom->r.x,itom->r.y,itom->r.z, + "Green",itom->ekin); + + for(j=0;j<27;j++) { + this=&(n[j]); + list_reset_f(this); + + if(this->start==NULL) + continue; + + do { + + jtom=this->current->data; + + if(jtom==itom) + continue; + + v3_sub(&dist,&(itom->r),&(jtom->r)); + check_per_bound(&moldyn,&dist); + d=v3_norm(&dist); + + if(d<=radius) { + printf("%s %f %f %f %s %f\n", + pse_name[jtom->element], + jtom->r.x,jtom->r.y,jtom->r.z, + (jtom->tag==ma)?"Red":pse_col[jtom->element], + jtom->ekin); + } + + } while(list_next_f(this)!=L_NO_NEXT_ELEMENT); + } + + link_cell_shutdown(&moldyn); + + moldyn_free_save_file(&moldyn); + + return 0; +}