X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=moldyn.c;h=db575e9059ac2f88ebad208af55fb28e3053624c;hb=8358faac044f73487d64f5ba46690dd84367e532;hp=f2ac637e64dfeb99ba82946b70a6242175ade88f;hpb=792f14f95b47989f7f12df0ea70b54619be016ee;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index f2ac637..db575e9 100644 --- a/moldyn.c +++ b/moldyn.c @@ -30,6 +30,7 @@ int moldyn_usage(char **argv) { printf("-M (log total momentum)\n"); printf("-D (dump total information)\n"); printf("-S (single save file)\n"); + printf("-V (rasmol file)\n"); printf("--- physics options ---\n"); printf("-T [K] (%f)\n",MOLDYN_TEMP); printf("-t [s] (%f)\n",MOLDYN_TAU); @@ -70,9 +71,13 @@ int moldyn_parse_argv(t_moldyn *moldyn,int argc,char **argv) { moldyn->swrite=atoi(argv[++i]); strncpy(moldyn->sfb,argv[++i],64); break; - case 'T': + case 'V': + moldyn->vwrite=atoi(argv[++i]); + strncpy(moldyn->vfb,argv[++i],64); break; + case 'T': moldyn->t=atof(argv[++i]); + break; case 't': moldyn->tau=atof(argv[++i]); break; @@ -93,9 +98,12 @@ int moldyn_parse_argv(t_moldyn *moldyn,int argc,char **argv) { return 0; } -int moldyn_log_init(t_moldyn *moldyn) { +int moldyn_log_init(t_moldyn *moldyn,void *v) { moldyn->lvstat=0; + t_visual *vis; + + vis=v; if(moldyn->ewrite) { moldyn->efd=open(moldyn->efb,O_WRONLY|O_CREAT|O_TRUNC); @@ -130,8 +138,23 @@ int moldyn_log_init(t_moldyn *moldyn) { moldyn->lvstat|=MOLDYN_LVSTAT_DUMP; } - if(moldyn->dwrite) + if((moldyn->vwrite)&&(vis)) { + moldyn->visual=vis; + visual_init(vis,moldyn->vfb); moldyn->lvstat|=MOLDYN_LVSTAT_VISUAL; + } + + moldyn->lvstat|=MOLDYN_LVSTAT_INITIALIZED; + + return 0; +} + +int moldyn_shutdown(t_moldyn *moldyn) { + + if(moldyn->efd) close(moldyn->efd); + if(moldyn->mfd) close(moldyn->efd); + if(moldyn->dfd) close(moldyn->efd); + if(moldyn->visual) visual_tini(moldyn->visual); return 0; } @@ -328,7 +351,6 @@ int moldyn_integrate(t_moldyn *moldyn) { int i; unsigned int e,m,s,d,v; - unsigned char lvstat; t_3dvec p; int fd; @@ -340,7 +362,7 @@ int moldyn_integrate(t_moldyn *moldyn) { d=moldyn->dwrite; v=moldyn->vwrite; - if(!(lvstat&MOLDYN_LVSTAT_INITIALIZED)) { + if(!(moldyn->lvstat&MOLDYN_LVSTAT_INITIALIZED)) { printf("[moldyn] warning, lv system not initialized\n"); return -1; } @@ -525,7 +547,7 @@ double potential_lennard_jones(t_moldyn *moldyn) { params=moldyn->pot_params; atom=moldyn->atom; count=moldyn->count; - eps=params->epsilon; + eps=params->epsilon4; sig6=params->sigma6; sig12=params->sigma12; @@ -537,7 +559,7 @@ double potential_lennard_jones(t_moldyn *moldyn) { help=d*d; /* 1/r^4 */ help*=d; /* 1/r^6 */ d=help*help; /* 1/r^12 */ - u+=eps*(sig12*d-sig6*help); + u+=eps*(sig6*help-sig12*d); } } @@ -557,7 +579,7 @@ int force_lennard_jones(t_moldyn *moldyn) { atom=moldyn->atom; count=moldyn->count; params=moldyn->pot_params; - eps=params->epsilon; + eps=params->epsilon4; sig6=params->sigma6; sig12=params->sigma12; @@ -576,11 +598,13 @@ int force_lennard_jones(t_moldyn *moldyn) { h1*=h2; /* 1/r^14 */ h1*=sig12; h2*=sig6; - d=12.0*h1-6.0*h2; + /* actually there would be a '-', * + * but f=-d/dr potential */ + d=-12.0*h1+6.0*h2; d*=eps; v3_scale(&force,&distance,d); - v3_add(&(atom[j].f),&(atom[j].f),&force); - v3_sub(&(atom[i].f),&(atom[i].f),&force); + v3_add(&(atom[i].f),&(atom[i].f),&force); + v3_sub(&(atom[j].f),&(atom[j].f),&force); } } }