X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.c;h=2f274c2da8fb7fcaeec9344f21bec718cb8585a8;hb=8e98c9cbbddf1c9c852874f956b0dbe2f9a4a922;hp=00a9ed9d48d1e24ada50149b06a02284a9b05a1b;hpb=a114a486ccca019135a8cb229545d0e203b61a5b;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index 00a9ed9..2f274c2 100644 --- a/moldyn.c +++ b/moldyn.c @@ -41,6 +41,7 @@ int moldyn_init(t_moldyn *moldyn,int argc,char **argv) { int moldyn_shutdown(t_moldyn *moldyn) { + moldyn_log_shutdown(moldyn); link_cell_shutdown(moldyn); moldyn_log_shutdown(moldyn); rand_close(&(moldyn->random)); @@ -156,7 +157,7 @@ int moldyn_set_log(t_moldyn *moldyn,u8 type,char *fb,int timer) { strncpy(moldyn->sfb,fb,63); break; case VISUAL_STEP: - moldyn->mwrite=timer; + moldyn->vwrite=timer; strncpy(moldyn->vfb,fb,63); visual_init(&(moldyn->vis),fb); break; @@ -234,7 +235,7 @@ int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass, } int add_atom(t_moldyn *moldyn,int element,double mass,u8 bnum,u8 attr, - t_3dvec r,t_3dvec v) { + t_3dvec *r,t_3dvec *v) { t_atom *atom; void *ptr; @@ -248,10 +249,11 @@ int add_atom(t_moldyn *moldyn,int element,double mass,u8 bnum,u8 attr, perror("[moldyn] realloc (add atom)"); return -1; } - - atom=ptr; - atom->r=r; - atom->v=v; + moldyn->atom=ptr; + + atom=moldyn->atom; + atom->r=*r; + atom->v=*v; atom->element=element; atom->bnum=bnum; atom->attr=attr; @@ -381,15 +383,19 @@ t_3dvec get_total_p(t_moldyn *moldyn) { return p_total; } -double estimate_time_step(t_moldyn *moldyn,double nn_dist,double t) { +double estimate_time_step(t_moldyn *moldyn,double nn_dist) { double tau; - tau=0.05*nn_dist/(sqrt(3.0*K_BOLTZMANN*t/moldyn->atom[0].mass)); - tau*=1.0E-9; - if(tautau) - printf("[moldyn] warning: time step (%f > %.15f)\n", - moldyn->tau,tau); + /* nn_dist is the nearest neighbour distance */ + + if(moldyn->t==5.0) { + printf("[moldyn] i do not estimate timesteps below %f K!\n", + MOLDYN_CRITICAL_EST_TEMP); + return 23.42; + } + + tau=(0.05*nn_dist*moldyn->atom[0].mass)/sqrt(3.0*K_BOLTZMANN*moldyn->t); return tau; } @@ -404,6 +410,9 @@ int link_cell_init(t_moldyn *moldyn) { t_linkcell *lc; int i; + int fd; + + fd=open("/dev/null",O_WRONLY); lc=&(moldyn->lc); @@ -418,10 +427,11 @@ int link_cell_init(t_moldyn *moldyn) { lc->cells=lc->nx*lc->ny*lc->nz; lc->subcell=malloc(lc->cells*sizeof(t_list)); - printf("initializing linked cells (%d)\n",lc->cells); + 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]),1); + list_init(&(lc->subcell[i]),fd); link_cell_update(moldyn); @@ -541,6 +551,7 @@ int moldyn_add_schedule(t_moldyn *moldyn,int runs,double tau) { perror("[moldyn] realloc (runs)"); return -1; } + moldyn->schedule.runs=ptr; moldyn->schedule.runs[count-1]=runs; ptr=realloc(schedule->tau,count*sizeof(double)); @@ -548,6 +559,7 @@ int moldyn_add_schedule(t_moldyn *moldyn,int runs,double tau) { perror("[moldyn] realloc (tau)"); return -1; } + moldyn->schedule.tau=ptr; moldyn->schedule.tau[count-1]=tau; return 0; @@ -590,11 +602,6 @@ int moldyn_integrate(t_moldyn *moldyn) { s=moldyn->swrite; v=moldyn->vwrite; - if(!(moldyn->lvstat&MOLDYN_LVSTAT_INITIALIZED)) { - printf("[moldyn] warning, lv system not initialized\n"); - return -1; - } - /* sqaure of some variables */ moldyn->tau_square=moldyn->tau*moldyn->tau; moldyn->cutoff_square=moldyn->cutoff*moldyn->cutoff; @@ -655,18 +662,21 @@ int moldyn_integrate(t_moldyn *moldyn) { } if(v) { if(!(i%v)) { - visual_atoms(moldyn->visual,i*moldyn->tau, + visual_atoms(&(moldyn->vis),moldyn->time, moldyn->atom,moldyn->count); - printf("\rsteps: %d",i); + printf("\rsched: %d, steps: %d",sched,i); fflush(stdout); } } + } /* check for hooks */ if(schedule->hook) schedule->hook(moldyn,schedule->hook_params); + } + return 0; } @@ -698,15 +708,11 @@ int velocity_verlet(t_moldyn *moldyn) { } /* neighbour list update */ -printf("list update ...\n"); link_cell_update(moldyn); -printf("done\n"); /* forces depending on chosen potential */ -printf("calc potential/force ...\n"); potential_force_calc(moldyn); //moldyn->potential_force_function(moldyn); -printf("done\n"); for(i=0;ienergy=0.0; +printf("DEBUG: count = %d\n",count); for(i=0;idim.x/2)/lc->x, (atom[i].r.y+moldyn->dim.y/2)/lc->y, @@ -764,6 +772,7 @@ int potential_force_calc(t_moldyn *moldyn) { countn=lc->countn; dnlc=lc->dnlc; +printf("DEBUG: countn = %d - dnslc = %d\n",countn,dnlc); for(j=0;jattr&ATOM_ATTR_2BP)& (atom[i].attr&ATOM_ATTR_2BP)) +printf("DEBUG: calling func2b\n"); moldyn->func2b(moldyn, &(atom[i]), btom,