implemented basic p ctrl stuff + video with 13 fps
[physik/posic.git] / sic.c
diff --git a/sic.c b/sic.c
index 8901104..dea4d4b 100644 (file)
--- a/sic.c
+++ b/sic.c
@@ -75,8 +75,8 @@ int insert_atoms(t_moldyn *moldyn) {
                        // 001 dumbbell
                        r.x=(-0.5+0.25)*ALBE_LC_SI;
                        r.y=(-0.5+0.25)*ALBE_LC_SI;
-                       r.z=(-0.5+0.25+0.125)*ALBE_LC_SI;
-                       moldyn->atom[4372].r.z=(-0.5+0.25-0.125)*ALBE_LC_SI;
+                       r.z=(-0.1)*ALBE_LC_SI;
+                       moldyn->atom[4372].r.z=(-0.4)*ALBE_LC_SI;
 #endif
 #ifdef INS_USER
                        // 001 dumbbell
@@ -86,9 +86,18 @@ int insert_atoms(t_moldyn *moldyn) {
 #endif
 #ifdef INS_RAND
                        // random
+#ifdef INS_DYNAMIC_LEN
+                       r.x=(rand_get_double(&(moldyn->random))-0.5)*\
+                           moldyn->dim.x;
+                       r.y=(rand_get_double(&(moldyn->random))-0.5)*\
+                           moldyn->dim.y;
+                       r.z=(rand_get_double(&(moldyn->random))-0.5)*\
+                           moldyn->dim.z;
+#else
                        r.x=(rand_get_double(&(moldyn->random))-0.5)*INS_LENX;
                        r.y=(rand_get_double(&(moldyn->random))-0.5)*INS_LENY;
                        r.z=(rand_get_double(&(moldyn->random))-0.5)*INS_LENZ;
+#endif
 #endif
                        // offset
                        r.x+=INS_OFFSET;
@@ -130,6 +139,7 @@ int sic_hook(void *moldyn,void *hook_params) {
        int steps;
        double tau;
        double dt;
+       double dp;
 
        hp=hook_params;
        md=moldyn;
@@ -139,7 +149,8 @@ int sic_hook(void *moldyn,void *hook_params) {
 
        /* switch on t scaling */
        if(md->schedule.count==0)
-               set_pt_scale(md,0,0,T_SCALE_BERENDSEN,T_SCALE_TAU);
+               set_pt_scale(md,P_SCALE_BERENDSEN,P_SCALE_TAU,
+                               T_SCALE_BERENDSEN,T_SCALE_TAU);
 
        /* my lousy state machine ! */
 
@@ -169,9 +180,12 @@ insert:
 
        /* check temperature */
        dt=md->t_avg-md->t_ref;
+       dp=md->p_avg-md->p_ref;
        if(dt<0)
                dt=-dt;
-       if(dt>INS_DELTA_TC)
+       if(dp<0)
+               dp=-dp;
+       if((dt>INS_DELTA_TC)|(dp>INS_DELTA_PC))
                goto addsched;
 
        /* immediately go on if no job is to be done */
@@ -196,9 +210,12 @@ postrun:
 
        /* check temperature */
        dt=md->t_avg-md->t_ref;
+       dp=md->p_avg-md->p_ref;
        if(dt<0)
                dt=-dt;
-       if(dt>POST_DELTA_TC)
+       if(dp<0)
+               dp=-dp;
+       if((dt>POST_DELTA_TC)|(dp>POST_DELTA_PC))
                goto addsched;
 
        /* immediately return if no job is to be done */
@@ -416,7 +433,7 @@ int main(int argc,char **argv) {
                       0,LCNTX,LCNTY,LCNTZ,&r);
        r.x+=0.25*ALBE_LC_SIC; r.y=r.x; r.z=r.x;
        create_lattice(&md,FCC,ALBE_LC_SIC,C,M_C,
-                      ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP|ATOM_ATTR_HB,
+                      ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP|ATOM_ATTR_HB|ATOM_ATTR_VB,
                       1,LCNTX,LCNTY,LCNTZ,&r);
  #else
        r.x=0.5*0.25*TM_LC_SIC; r.y=r.x; r.z=r.x;
@@ -467,14 +484,14 @@ int main(int argc,char **argv) {
 
        /* set temperature & pressure */
        set_temperature(&md,atof(argv[2])+273.0);
-       set_pressure(&md,BAR);
+       set_pressure(&md,0.0);
 
        /* set amount of steps to skip before average calc */
        set_avg_skip(&md,AVG_SKIP);
 
        /* set p/t scaling */
        //set_pt_scale(&md,0,0,T_SCALE_BERENDSEN,100.0);
-       //set_pt_scale(&md,P_SCALE_BERENDSEN,0.001,
+       //set_pt_scale(&md,P_SCALE_BERENDSEN,0.01/(100*GPA),
        //                 T_SCALE_BERENDSEN,100.0);
        //set_pt_scale(&md,0,0,T_SCALE_DIRECT,1.0);
        //set_pt_scale(&md,P_SCALE_BERENDSEN,0.001,0,0);
@@ -499,7 +516,8 @@ int main(int argc,char **argv) {
        moldyn_set_log(&md,LOG_TOTAL_ENERGY,LOG_E);
        moldyn_set_log(&md,LOG_TEMPERATURE,LOG_T);
        moldyn_set_log(&md,LOG_PRESSURE,LOG_P);
-       moldyn_set_log(&md,VISUAL_STEP,LOG_V);
+       moldyn_set_log(&md,LOG_VOLUME,LOG_V);
+       moldyn_set_log(&md,VISUAL_STEP,LOG_A);
        moldyn_set_log(&md,SAVE_STEP,LOG_S);
        moldyn_set_log(&md,CREATE_REPORT,0);