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);
case 'e':
cap.type|=CHAATTR_ELEMENT;
break;
+ case 'n':
+ cap.type|=CHAATTR_NUMBER;
default:
break;
}
}
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) {
cap.element=atoi(word[i]);
i+=1;
}
+ if(cap.type&CHAATTR_NUMBER) {
+ cap.element=atoi(word[i]);
+ i+=1;
+ }
for(o=0;o<strlen(word[i]);o++) {
switch(word[i][o]) {
case 'b':
iap.y0=atof(word[9]);
iap.z0=atof(word[10]);
break;
+ case 'P':
+ iap.type=INS_RELPOS;
+ iap.x0=atof(word[8]);
+ iap.y0=atof(word[9]);
+ iap.z0=atof(word[10]);
+ break;
case 'r':
switch(word[8][0]) {
cr_check=TRUE;
break;
case INS_POS:
+ case INS_RELPOS:
x0=iap->x0;
y0=iap->y0;
z0=iap->z0;
while(cnt<iap->ins_atoms) {
run=1;
while(run) {
- if(iap->type!=INS_POS) {
+ if((iap->type!=INS_POS)&&(iap->type!=INS_RELPOS)) {
r.x=rand_get_double(&(moldyn->random))*x;
r.y=rand_get_double(&(moldyn->random))*y;
r.z=rand_get_double(&(moldyn->random))*z;
r.y=0.0;
r.z=0.0;
}
- r.x+=x0;
- r.y+=y0;
- r.z+=z0;
+ if(iap->type==INS_RELPOS) {
+ r.x+=x0*mdrun->lc;
+ r.y+=y0*mdrun->lc;
+ r.z+=z0*mdrun->lc;
+ }
+ else {
+ r.x+=x0;
+ r.y+=y0;
+ r.z+=z0;
+ }
// offset
if(iap->type!=INS_TOTAL) {
r.x+=o;
if(cap->element!=atom->element)
continue;
}
+ if(cap->type&CHAATTR_NUMBER) {
+ if(cap->element!=atom->tag)
+ 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;
}
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;
fp->lx,fp->ly,fp->lz,
&o,
&(fp->p_params),
- &(fp->d_params));
+ &(fp->d_params),
+ &(fp->o_params));
break;
default:
fp->lx,fp->ly,fp->lz,
NULL,
&(fp->p_params),
- &(fp->d_params));
+ &(fp->d_params),
+ &(fp->o_params));
break;
}
moldyn_bc_check(moldyn);