added offset feature
[physik/posic.git] / mdrun.c
diff --git a/mdrun.c b/mdrun.c
index f0edd0b..062224b 100644 (file)
--- a/mdrun.c
+++ b/mdrun.c
@@ -393,6 +393,14 @@ int mdrun_parse_config(t_mdrun *mdrun) {
                                        continue;
 
                                }
+                               // offset
+                               if(word[i][0]=='o') {
+                                       fp.o_params.o.x=atof(word[++i])*fp.lc;
+                                       fp.o_params.o.y=atof(word[++i])*fp.lc;
+                                       fp.o_params.o.z=atof(word[++i])*fp.lc;
+                                       fp.o_params.use=1;
+                                       continue;
+                               }
                                i+=1;
                        }
                        add_stage(mdrun,STAGE_FILL,&fp);
@@ -420,12 +428,12 @@ int mdrun_parse_config(t_mdrun *mdrun) {
                        }
                        i=2;
                        if(cap.type&CHAATTR_REGION) {
-                               cap.x0=atof(word[1]);   
-                               cap.y0=atof(word[2]);   
-                               cap.z0=atof(word[3]);   
-                               cap.x1=atof(word[4]);   
-                               cap.y1=atof(word[5]);   
-                               cap.z1=atof(word[6]);
+                               cap.x0=atof(word[2]);   
+                               cap.y0=atof(word[3]);   
+                               cap.z0=atof(word[4]);   
+                               cap.x1=atof(word[5]);   
+                               cap.y1=atof(word[6]);   
+                               cap.z1=atof(word[7]);
                                i+=6;
                        }
                        if(cap.type&CHAATTR_ELEMENT) {
@@ -1095,22 +1103,27 @@ int chaatr(t_moldyn *moldyn,t_mdrun *mdrun) {
                                continue;
                }
                if(cap->type&CHAATTR_REGION) {
-                       if(cap->x0<atom->r.x)
+                       if(cap->x0>atom->r.x)
                                continue;
-                       if(cap->y0<atom->r.y)
+                       if(cap->y0>atom->r.y)
                                continue;
-                       if(cap->z0<atom->r.z)
+                       if(cap->z0>atom->r.z)
                                continue;
-                       if(cap->x1>atom->r.x)
+                       if(cap->x1<atom->r.x)
                                continue;
-                       if(cap->y1>atom->r.y)
+                       if(cap->y1<atom->r.y)
                                continue;
-                       if(cap->z1>atom->r.z)
+                       if(cap->z1<atom->r.z)
                                continue;
                }
+               if(!(cap->type&CHAATTR_TOTALV))
+                       printf("  changing attributes of atom %d (0x%x)\n",
+                              i,cap->attr);
                atom->attr=cap->attr;
        }
 
+       printf("\n\n");
+
        return 0;
 }
 
@@ -1312,7 +1325,8 @@ int mdrun_hook(void *ptr1,void *ptr2) {
                                                       fp->lx,fp->ly,fp->lz,
                                                       &o,
                                                       &(fp->p_params),
-                                                      &(fp->d_params));
+                                                      &(fp->d_params),
+                                                      &(fp->o_params));
                                        o.x+=0.25*fp->lc;
                                        o.y=o.x;
                                        o.z=o.x;
@@ -1323,7 +1337,8 @@ int mdrun_hook(void *ptr1,void *ptr2) {
                                                       fp->lx,fp->ly,fp->lz,
                                                       &o,
                                                       &(fp->p_params),
-                                                      &(fp->d_params));
+                                                      &(fp->d_params),
+                                                      &(fp->o_params));
                                        break;
 
                                        default:
@@ -1336,7 +1351,8 @@ int mdrun_hook(void *ptr1,void *ptr2) {
                                                       fp->lx,fp->ly,fp->lz,
                                                       NULL,
                                                       &(fp->p_params),
-                                                      &(fp->d_params));
+                                                      &(fp->d_params),
+                                                      &(fp->o_params));
                                        break;
                                }
                                moldyn_bc_check(moldyn);