X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=mdrun.c;h=d99bd7a169f4637afd0266dfbba3f2fc36a3f3c7;hb=d1c8623aedde670da01eb2e85cf36d0b2a7c340f;hp=bd045feb705b51a2ca0905c7a1aeb42bb19b6a3c;hpb=5f2b9117e1117bd35df668f228a567d1a70a0661;p=physik%2Fposic.git diff --git a/mdrun.c b/mdrun.c index bd045fe..d99bd7a 100644 --- a/mdrun.c +++ b/mdrun.c @@ -141,7 +141,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { char error[128]; char line[128]; char *wptr; - char word[16][32]; + char word[16][64]; int wcnt; int i,o; @@ -189,7 +189,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { wptr=strtok(line," \t"); if(wptr==NULL) break; - strncpy(word[wcnt],wptr,32); + strncpy(word[wcnt],wptr,64); wcnt+=1; } @@ -203,6 +203,8 @@ int mdrun_parse_config(t_mdrun *mdrun) { if(!strncmp(word[1],"lj",2)) mdrun->potential=MOLDYN_POTENTIAL_LJ; } + else if(!strncmp(word[0],"continue",8)) + strncpy(mdrun->continue_file,word[1],128); else if(!strncmp(word[0],"cutoff",6)) mdrun->cutoff=atof(word[1]); else if(!strncmp(word[0],"nnd",3)) @@ -876,9 +878,16 @@ int main(int argc,char **argv) { /* sanity check! */ /* prepare simulation */ + moldyn_init(&moldyn,argc,argv); + + if(mdrun.continue_file) + moldyn_read_save_file(&moldyn,mdrun.continue_file); + if(set_int_alg(&moldyn,mdrun.intalgo)<0) return -1; + + /* potential */ set_cutoff(&moldyn,mdrun.cutoff); if(set_potential(&moldyn,mdrun.potential)<0) return -1; @@ -904,6 +913,14 @@ int main(int argc,char **argv) { ME,mdrun.potential); return -1; } + + /* if it is a continue run, reset schedule and skip lattice init */ + if(mdrun.continue_file) { + memset(&(moldyn.schedule),0,sizeof(t_moldyn_schedule)); + goto addsched; + } + + /* initial lattice and dimensions */ set_dim(&moldyn,mdrun.dim.x,mdrun.dim.y,mdrun.dim.z,mdrun.vis); set_pbc(&moldyn,mdrun.pbcx,mdrun.pbcy,mdrun.pbcz); switch(mdrun.lattice) { @@ -933,10 +950,17 @@ int main(int argc,char **argv) { return -1; } moldyn_bc_check(&moldyn); + + /* temperature and pressure */ set_temperature(&moldyn,mdrun.temperature); set_pressure(&moldyn,mdrun.pressure); thermal_init(&moldyn,TRUE); + +addsched: + /* first schedule */ moldyn_add_schedule(&moldyn,mdrun.prerun,mdrun.timestep); + + /* log */ moldyn_set_log_dir(&moldyn,mdrun.sdir); moldyn_set_report(&moldyn,"CHANGE ME","CHANGE ME TOO"); if(mdrun.elog)