mdrun->lattice=DIAMOND;
if(!strncmp(word[1],"none",4))
mdrun->lattice=NONE;
+ if(wcnt==3)
+ mdrun->lc=atof(word[2]);
}
else if(!strncmp(word[0],"element1",8)) {
mdrun->element1=atoi(word[1]);
- mdrun->m1=pse_mass[mdrun->element1];
}
else if(!strncmp(word[0],"element2",8)) {
mdrun->element2=atoi(word[1]);
- mdrun->m2=pse_mass[mdrun->element2];
}
else if(!strncmp(word[0],"fill",6)) {
- fp.lx=atoi(word[2]);
- fp.ly=atoi(word[3]);
- fp.lz=atoi(word[4]);
- fp.lc=atof(word[5]);
- mdrun->lc=fp.lc;
- if(!strncmp(word[1],"lc",2)) {
- if(wcnt==8) {
- fp.fill_element=atoi(word[6]);
- fp.fill_brand=atoi(word[7]);
+ // default values
+ fp.fill_element=mdrun->element1;
+ fp.fill_brand=0;
+ fp.lattice=mdrun->lattice;
+ fp.p_params.type=0;
+ fp.d_params.type=0;
+ // parse fill command
+ i=1;
+ while(i<wcnt) {
+ if(!strncmp(word[i],"lc",2)) {
+ fp.lx=atoi(word[++i]);
+ fp.ly=atoi(word[++i]);
+ fp.lz=atoi(word[++i]);
+ fp.lc=atof(word[++i]);
+ mdrun->lc=fp.lc;
}
- else {
- fp.fill_element=mdrun->element1;
- fp.fill_brand=0;
+ if(!strncmp(word[i],"eb",2)) {
+ fp.fill_element=atoi(word[++i]);
+ fp.fill_brand=atoi(word[++i]);
}
- }
- else {
- switch(word[6][0]) {
+ if(word[i][0]=='p') {
+ i+=1;
+ switch(word[i][0]) {
case 'i':
- if(word[6][1]=='r')
- fp.p_type=PART_INSIDE_R;
+ if(word[i][1]=='r')
+ fp.p_params.type=PART_INSIDE_R;
else
- fp.p_type=PART_INSIDE_D;
+ fp.p_params.type=PART_INSIDE_D;
break;
case 'o':
- if(word[6][1]=='r')
- fp.p_type=PART_OUTSIDE_R;
+ if(word[i][1]=='r')
+ fp.p_params.type=PART_OUTSIDE_R;
else
- fp.p_type=PART_OUTSIDE_D;
+ fp.p_params.type=PART_OUTSIDE_D;
break;
default:
break;
+ }
+ if((fp.p_params.type==PART_INSIDE_R)||
+ (fp.p_params.type==PART_OUTSIDE_R)) {
+ fp.p_params.r=atof(word[++i]);
+ fp.p_params.p.x=atof(word[++i]);
+ fp.p_params.p.y=atof(word[++i]);
+ fp.p_params.p.z=atof(word[++i]);
+ }
+ if((fp.p_params.type==PART_INSIDE_D)||
+ (fp.p_params.type==PART_OUTSIDE_D)) {
+ fp.p_params.p.x=atof(word[++i]);
+ fp.p_params.p.y=atof(word[++i]);
+ fp.p_params.p.z=atof(word[++i]);
+ fp.p_params.d.x=atof(word[++i]);
+ fp.p_params.d.y=atof(word[++i]);
+ fp.p_params.d.z=atof(word[++i]);
+ }
}
+ if(word[i][0]=='d') {
+ switch(word[++i][0]) {
+ case '0':
+
+ fp.d_params.type=DEFECT_TYPE_0D;
+ if(!strncmp(word[i+1],"dbx",3)) {
+ fp.d_params.stype=DEFECT_STYPE_DB_X;
+ }
+ if(!strncmp(word[i+1],"dby",3)) {
+ fp.d_params.stype=DEFECT_STYPE_DB_Y;
+ }
+ if(!strncmp(word[i+1],"dbz",3)) {
+ fp.d_params.stype=DEFECT_STYPE_DB_Z;
+ }
+ if(!strncmp(word[i+1],"dbr",3)) {
+ fp.d_params.stype=DEFECT_STYPE_DB_R;
+ }
+ i+=1;
+ fp.d_params.od=atof(word[++i]);
+ fp.d_params.dd=atof(word[++i]);
+ fp.d_params.element=atoi(word[++i]);
+ fp.d_params.brand=atoi(word[++i]);
+ // parsed in future
+ fp.d_params.attr=ATOM_ATTR_HB|ATOM_ATTR_VA;
+ fp.d_params.attr|=ATOM_ATTR_1BP|ATOM_ATTR_2BP|ATOM_ATTR_3BP;
+ break;
+
+ case '1':
+ fp.d_params.type=DEFECT_TYPE_1D;
+ break;
+ case '2':
+ fp.d_params.type=DEFECT_TYPE_2D;
+ break;
+ case '3':
+ fp.d_params.type=DEFECT_TYPE_3D;
+ break;
+ default:
+ break;
+ }
+
+ }
+ i+=1;
}
- if((fp.p_type==PART_INSIDE_R)||
- (fp.p_type==PART_OUTSIDE_R)) {
- fp.p_vals.r=atof(word[7]);
- fp.p_vals.p.x=atof(word[8]);
- fp.p_vals.p.y=atof(word[9]);
- fp.p_vals.p.z=atof(word[10]);
- }
- if((fp.p_type==PART_INSIDE_D)||
- (fp.p_type==PART_OUTSIDE_D)) {
- fp.p_vals.p.x=atof(word[7]);
- fp.p_vals.p.y=atof(word[8]);
- fp.p_vals.p.z=atof(word[9]);
- fp.p_vals.d.x=atof(word[10]);
- fp.p_vals.d.y=atof(word[11]);
- fp.p_vals.d.z=atof(word[12]);
- }
- fp.lattice=mdrun->lattice;
add_stage(mdrun,STAGE_FILL,&fp);
}
else if(!strncmp(word[0],"thermal_init",12)) {
}
}
}
- add_atom(moldyn,iap->element,pse_mass[iap->element],
+ add_atom(moldyn,iap->element,
iap->brand,iap->attr,&r,&v);
printf("%s atom inserted (%d/%d): %f %f %f\n",
ME,(iap->cnt_steps+1)*iap->ins_atoms,
if(dmin>cmax)
retry=1;
}
- add_atom(moldyn,imp->element1,pse_mass[imp->element1],
+ add_atom(moldyn,imp->element1,
imp->brand1,imp->attr1,&r,&v);
printf("%s (mixed) atom inserted (%d): %f %f %f\n",
ME,imp->amount1,r.x,r.y,r.z);
if(dmin>cmax)
retry=1;
}
- add_atom(moldyn,imp->element2,pse_mass[imp->element2],
+ add_atom(moldyn,imp->element2,
imp->brand2,imp->attr2,&r,&v);
printf("%s (mixed) atom inserted (%d): %f %f %f\n",
ME,imp->amount2,r.x,r.y,r.z);
case STAGE_FILL:
stage_print(" -> fill lattice\n\n");
fp=stage->params;
- if(fp->lattice!=ZINCBLENDE) {
- create_lattice(moldyn,
- fp->lattice,fp->lc,
- mdrun->element1,
- mdrun->m1,
- DEFAULT_ATOM_ATTR,0,
- fp->lx,fp->ly,fp->lz,
- NULL,fp->p_type,
- &(fp->p_vals));
- }
- else {
+ switch(fp->lattice) {
+ case ZINCBLENDE:
+
o.x=0.5*0.25*fp->lc;
o.y=o.x;
o.z=o.x;
create_lattice(moldyn,
FCC,fp->lc,
mdrun->element1,
- mdrun->m1,
DEFAULT_ATOM_ATTR,0,
fp->lx,fp->ly,fp->lz,
- &o,fp->p_type,
- &(fp->p_vals));
+ &o,
+ &(fp->p_params),
+ &(fp->d_params));
o.x+=0.25*fp->lc;
o.y=o.x;
o.z=o.x;
create_lattice(moldyn,
FCC,fp->lc,
mdrun->element2,
- mdrun->m2,
DEFAULT_ATOM_ATTR,1,
fp->lx,fp->ly,fp->lz,
- &o,fp->p_type,
- &(fp->p_vals));
+ &o,
+ &(fp->p_params),
+ &(fp->d_params));
+ break;
+
+ default:
+
+ create_lattice(moldyn,
+ fp->lattice,fp->lc,
+ mdrun->element1,
+ DEFAULT_ATOM_ATTR,0,
+ fp->lx,fp->ly,fp->lz,
+ NULL,
+ &(fp->p_params),
+ &(fp->d_params));
+ break;
}
moldyn_bc_check(moldyn);
change_stage=TRUE;