changed state machine behaviour
[physik/posic.git] / sic.c
diff --git a/sic.c b/sic.c
index 77e3c79..8901104 100644 (file)
--- a/sic.c
+++ b/sic.c
@@ -68,8 +68,21 @@ int insert_atoms(t_moldyn *moldyn) {
                        r.x=(-0.5+0.25+0.125)*ALBE_LC_SI;
                        r.y=(-0.5+0.25+0.125)*ALBE_LC_SI;
                        r.z=(-0.5+0.25)*ALBE_LC_SI;
-                       md->atom[4372].r.x=(-0.5+0.125+0.125)*ALBE_LC_SI;
-                       md->atom[4372].r.y=(-0.5+0.125+0.125)*ALBE_LC_SI;
+                       moldyn->atom[4372].r.x=(-0.5+0.125+0.125)*ALBE_LC_SI;
+                       moldyn->atom[4372].r.y=(-0.5+0.125+0.125)*ALBE_LC_SI;
+#endif
+#ifdef INS_001DB
+                       // 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;
+#endif
+#ifdef INS_USER
+                       // 001 dumbbell
+                       r.x=INS_UX*ALBE_LC_SI;
+                       r.y=INS_UY*ALBE_LC_SI;
+                       r.z=INS_UZ*ALBE_LC_SI;
 #endif
 #ifdef INS_RAND
                        // random
@@ -126,7 +139,7 @@ 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,100.0);
+               set_pt_scale(md,0,0,T_SCALE_BERENDSEN,T_SCALE_TAU);
 
        /* my lousy state machine ! */
 
@@ -150,13 +163,6 @@ int sic_hook(void *moldyn,void *hook_params) {
 
 insert:
 
-       /* immediately go on if no job is to be done */
-       if(hp->insert_count==INS_RUNS) {
-printf("immediate insert run return!\n");
-               hp->state=STATE_POSTRUN;
-               goto postrun;
-       }
-
        /* assigne values */
        steps=INS_RELAX;
        tau=INS_TAU;
@@ -168,6 +174,13 @@ printf("immediate insert run return!\n");
        if(dt>INS_DELTA_TC)
                goto addsched;
 
+       /* immediately go on if no job is to be done */
+       if(hp->insert_count==INS_RUNS) {
+               printf("    --- leaving insert state ---\n");
+               hp->state=STATE_POSTRUN;
+               goto postrun;
+       }
+
        /* else -> insert atoms */
        hp->insert_count+=1;
        printf("   ### insert atoms (%d/%d) ###\n",
@@ -177,12 +190,6 @@ printf("immediate insert run return!\n");
 
 postrun:
 
-       /* immediately return if no job is to be done */
-       if(hp->postrun_count==POST_RUNS) {
-printf("immediate post run return!\n");
-               return 0;
-       }
-
        /* assigne values */
        steps=POST_RELAX;
        tau=POST_TAU;
@@ -194,6 +201,12 @@ printf("immediate post run return!\n");
        if(dt>POST_DELTA_TC)
                goto addsched;
 
+       /* immediately return if no job is to be done */
+       if(hp->postrun_count==POST_RUNS) {
+               printf("    --- leaving post run state ---\n");
+               return 0;
+       }
+
        /* postrun action */
        hp->postrun_count+=1;
        printf(" ### postrun (%d/%d) ###\n",