X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mdrun.c;h=e5feda3aa4ceed4c52e53f6327d79738ebd97518;hb=d7382ea10cd0fc49a5b8b5e3f2b48f5c1c8a2392;hp=c4b6df2a09badbeb2107df086f930ad444bde24c;hpb=3592f3b0cf641729566674a7cdfd8eff3f61f59a;p=physik%2Fposic.git diff --git a/mdrun.c b/mdrun.c index c4b6df2..e5feda3 100644 --- a/mdrun.c +++ b/mdrun.c @@ -140,7 +140,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { char *wptr; char word[16][32]; int wcnt; - int i; + int i,o; t_insert_atoms_params iap; t_continue_params cp; @@ -201,6 +201,8 @@ int mdrun_parse_config(t_mdrun *mdrun) { } else if(!strncmp(word[0],"cutoff",6)) mdrun->cutoff=atof(word[1]); + else if(!strncmp(word[0],"nnd",3)) + mdrun->nnd=atof(word[1]); else if(!strncmp(word[0],"intalgo",7)) { if(!strncmp(word[1],"verlet",5)) mdrun->intalgo=MOLDYN_INTEGRATE_VERLET; @@ -242,39 +244,18 @@ int mdrun_parse_config(t_mdrun *mdrun) { } else if(!strncmp(word[0],"element1",8)) { mdrun->element1=atoi(word[1]); - switch(mdrun->element1) { - case SI: - mdrun->m1=M_SI; - break; - case C: - mdrun->m1=M_C; - break; - default: - printf("%s unknown element1: %s|%d\n", - ME,word[1],mdrun->element1); - return -1; - } + mdrun->m1=pse_mass[mdrun->element1]; } else if(!strncmp(word[0],"element2",8)) { mdrun->element2=atoi(word[1]); - switch(mdrun->element2) { - case SI: - mdrun->m2=M_SI; - break; - case C: - mdrun->m2=M_C; - break; - default: - printf("%s unknown element2: %s|%d\n", - ME,word[1],mdrun->element2); - return -1; - } + mdrun->m2=pse_mass[mdrun->element2]; } else if(!strncmp(word[0],"fill",6)) { // only lc mode by now mdrun->lx=atoi(word[2]); mdrun->ly=atoi(word[3]); mdrun->lz=atoi(word[4]); + mdrun->lc=atof(word[5]); } else if(!strncmp(word[0],"aattr",5)) { // for aatrib line we need a special stage @@ -294,7 +275,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { break; } } - i=1; + i=2; if(cap.type&CHAATTR_REGION) { cap.x0=atof(word[1]); cap.y0=atof(word[2]); @@ -308,9 +289,8 @@ int mdrun_parse_config(t_mdrun *mdrun) { cap.element=atoi(word[i]); i+=1; } - wptr=word[i]; - for(i=0;isattr&SATTR_PRELAX)) + if(!(mdrun->sattr&SATTR_PRELAX)) { return TRUE; + } delta=moldyn->p_avg-moldyn->p_ref; @@ -563,8 +554,10 @@ int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { } add_atom(moldyn,iap->element,pse_mass[iap->element], iap->brand,iap->attr,&r,&v); - printf("%s atom inserted: %f %f %f | d squared = %f\n", - ME,r.x,r.y,r.z,dmin); + printf("%s atom inserted (%d/%d): %f %f %f\n", + ME,(iap->cnt_steps+1)*iap->ins_atoms, + iap->ins_steps*iap->ins_atoms,r.x,r.y,r.z); + printf(" -> d2 = %f/%f\n",dmin,iap->cr*iap->cr); cnt+=1; } @@ -643,9 +636,9 @@ int chsattr(t_moldyn *moldyn,t_mdrun *mdrun) { } if(csp->type&CHSATTR_AVGRST) { if(csp->avgrst) - mdrun->sattr|=CHSATTR_AVGRST; + mdrun->sattr|=SATTR_AVGRST; else - mdrun->sattr&=(~(CHSATTR_AVGRST)); + mdrun->sattr&=(~(SATTR_AVGRST)); } if(csp->type&CHSATTR_RSTEPS) { mdrun->relax_steps=csp->rsteps; @@ -654,6 +647,9 @@ int chsattr(t_moldyn *moldyn,t_mdrun *mdrun) { return 0; } +#define stage_print(m) if(!(stage->executed)) \ + printf("%s",m) + int mdrun_hook(void *ptr1,void *ptr2) { t_moldyn *moldyn; @@ -687,12 +683,18 @@ int mdrun_hook(void *ptr1,void *ptr2) { tau=mdrun->timestep; /* check whether relaxation steps are necessary */ - if(!((check_pressure(moldyn,mdrun)==FALSE)|\ - (check_temperature(moldyn,mdrun)==FALSE))) { + if((check_pressure(moldyn,mdrun)==TRUE)&\ + (check_temperature(moldyn,mdrun)==TRUE)) { + + /* be verbose */ + stage_print("\n###########################\n"); + stage_print("# [mdrun] executing stage #\n"); + stage_print("###########################\n\n"); /* stage specific stuff */ switch(stage->type) { case STAGE_INSERT_ATOMS: + stage_print(" -> insert atoms\n\n"); iap=stage->params; if(iap->cnt_steps==iap->ins_steps) { change_stage=TRUE; @@ -702,6 +704,7 @@ int mdrun_hook(void *ptr1,void *ptr2) { iap->cnt_steps+=1; break; case STAGE_CONTINUE: + stage_print(" -> continue\n\n"); if(stage->executed==TRUE) { change_stage=TRUE; break; @@ -710,6 +713,7 @@ int mdrun_hook(void *ptr1,void *ptr2) { steps=cp->runs; break; case STAGE_ANNEAL: + stage_print(" -> anneal\n\n"); ap=stage->params; if(ap->count==ap->runs) { change_stage=TRUE; @@ -719,10 +723,12 @@ int mdrun_hook(void *ptr1,void *ptr2) { ap->count+=1; break; case STAGE_CHAATTR: + stage_print(" -> chaattr\n\n"); chaatr(moldyn,mdrun); change_stage=TRUE; break; case STAGE_CHSATTR: + stage_print(" -> chsattr\n\n"); chsattr(moldyn,mdrun); change_stage=TRUE; break; @@ -766,8 +772,9 @@ int main(int argc,char **argv) { t_moldyn moldyn; t_3dvec o; - /* clear mdrun struct */ + /* clear structs */ memset(&mdrun,0,sizeof(t_mdrun)); + memset(&moldyn,0,sizeof(t_moldyn)); /* parse arguments */ if(mdrun_parse_argv(&mdrun,argc,argv)<0) @@ -818,22 +825,22 @@ int main(int argc,char **argv) { switch(mdrun.lattice) { case FCC: create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element1, - mdrun.m1,0,0,mdrun.lx, + mdrun.m1,DEFAULT_ATOM_ATTR,0,mdrun.lx, mdrun.ly,mdrun.lz,NULL); break; case DIAMOND: create_lattice(&moldyn,DIAMOND,mdrun.lc,mdrun.element1, - mdrun.m1,0,0,mdrun.lx, + mdrun.m1,DEFAULT_ATOM_ATTR,0,mdrun.lx, mdrun.ly,mdrun.lz,NULL); break; case ZINCBLENDE: o.x=0.5*0.25*mdrun.lc; o.y=o.x; o.z=o.x; create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element1, - mdrun.m1,0,0,mdrun.lx, + mdrun.m1,DEFAULT_ATOM_ATTR,0,mdrun.lx, mdrun.ly,mdrun.lz,&o); o.x+=0.25*mdrun.lc; o.y=o.x; o.z=o.x; create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element2, - mdrun.m2,0,1,mdrun.lx, + mdrun.m2,DEFAULT_ATOM_ATTR,1,mdrun.lx, mdrun.ly,mdrun.lz,&o); break; default: