energy_scale bug + log count bug fixed
[physik/posic.git] / moldyn.c
index a310e91..415581c 100644 (file)
--- a/moldyn.c
+++ b/moldyn.c
@@ -13,6 +13,8 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <sys/time.h>
+#include <time.h>
 #include <math.h>
 
 #include "moldyn.h"
@@ -1348,6 +1350,7 @@ int moldyn_integrate(t_moldyn *moldyn) {
        char dir[128];
        double ds;
        double energy_scale;
+       struct timeval t1,t2;
        //double tp;
 
        sched=&(moldyn->schedule);
@@ -1368,8 +1371,8 @@ int moldyn_integrate(t_moldyn *moldyn) {
        moldyn->tau_square=moldyn->tau*moldyn->tau;
        moldyn->cutoff_square=moldyn->cutoff*moldyn->cutoff;
 
-       /* energy scaling factor */
-       energy_scale=moldyn->count*EV;
+       /* get current time */
+       gettimeofday(&t1,NULL);
 
        /* calculate initial forces */
        potential_force_calc(moldyn);
@@ -1407,6 +1410,9 @@ return 0;
                moldyn->tau_square=moldyn->tau*moldyn->tau;
                moldyn->time_steps=sched->runs[sched->count];
 
+               /* energy scaling factor (might change!) */
+               energy_scale=moldyn->count*EV;
+
        /* integration according to schedule */
 
        for(i=0;i<moldyn->time_steps;i++) {
@@ -1429,7 +1435,7 @@ return 0;
 
                /* check for log & visualization */
                if(e) {
-                       if(!(i%e))
+                       if(!(moldyn->total_steps%e))
                                dprintf(moldyn->efd,
                                        "%f %f %f %f\n",
                                        moldyn->time,moldyn->ekin/energy_scale,
@@ -1437,7 +1443,7 @@ return 0;
                                        get_total_energy(moldyn)/energy_scale);
                }
                if(m) {
-                       if(!(i%m)) {
+                       if(!(moldyn->total_steps%m)) {
                                momentum=get_total_p(moldyn);
                                dprintf(moldyn->mfd,
                                        "%f %f %f %f %f\n",moldyn->time,
@@ -1446,7 +1452,7 @@ return 0;
                        }
                }
                if(p) {
-                       if(!(i%p)) {
+                       if(!(moldyn->total_steps%p)) {
                                dprintf(moldyn->pfd,
                                        "%f %f %f %f %f\n",moldyn->time,
                                         moldyn->p/BAR,moldyn->p_avg/BAR,
@@ -1454,17 +1460,18 @@ return 0;
                        }
                }
                if(t) {
-                       if(!(i%t)) {
+                       if(!(moldyn->total_steps%t)) {
                                dprintf(moldyn->tfd,
                                        "%f %f %f\n",
                                        moldyn->time,moldyn->t,moldyn->t_avg);
                        }
                }
                if(s) {
-                       if(!(i%s)) {
+                       if(!(moldyn->total_steps%s)) {
                                snprintf(dir,128,"%s/s-%07.f.save",
                                         moldyn->vlsdir,moldyn->time);
-                               fd=open(dir,O_WRONLY|O_TRUNC|O_CREAT);
+                               fd=open(dir,O_WRONLY|O_TRUNC|O_CREAT,
+                                       S_IRUSR|S_IWUSR);
                                if(fd<0) perror("[moldyn] save fd open");
                                else {
                                        write(fd,moldyn,sizeof(t_moldyn));
@@ -1475,20 +1482,27 @@ return 0;
                        }       
                }
                if(v) {
-                       if(!(i%v)) {
+                       if(!(moldyn->total_steps%v)) {
                                visual_atoms(&(moldyn->vis),moldyn->time,
                                             moldyn->atom,moldyn->count);
                        }
                }
 
                /* display progress */
-               if(!(i%10)) {
-       printf("\rsched:%d, steps:%d, T:%3.1f/%3.1f P:%4.1f/%4.1f V:%6.1f",
+               if(!(moldyn->total_steps%10)) {
+                       /* get current time */
+                       gettimeofday(&t2,NULL);
+
+       printf("\rsched:%d, steps:%d, T:%3.1f/%3.1f P:%4.1f/%4.1f V:%6.1f (%d)",
               sched->count,i,
               moldyn->t,moldyn->t_avg,
               moldyn->p_avg/BAR,moldyn->gp_avg/BAR,
-              moldyn->volume);
+              moldyn->volume,
+              (int)(t2.tv_sec-t1.tv_sec));
        fflush(stdout);
+
+                       /* copy over time */
+                       t1=t2;
                }
 
                /* increase absolute time */
@@ -1923,6 +1937,17 @@ int moldyn_bc_check(t_moldyn *moldyn) {
        return 0;
 }
 
+/*
+ * restore function
+ */
+
+int moldyn_load(t_moldyn *moldyn) {
+
+       // later ...
+
+       return 0;
+}
+
 /*
  * post processing functions
  */
@@ -1945,3 +1970,11 @@ int get_line(int fd,char *line,int max) {
        }
 }
 
+int analyze_bonds(t_moldyn *moldyn) {
+
+       
+       
+
+       return 0;
+}
+