implemented continue featue + skipped d calc in bond_analyze function
[physik/posic.git] / mdrun.c
diff --git a/mdrun.c b/mdrun.c
index bd045fe..d99bd7a 100644 (file)
--- 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)