X-Git-Url: https://www.hackdaworld.org/gitweb/?p=physik%2Fposic.git;a=blobdiff_plain;f=mdrun.c;fp=mdrun.c;h=d0636939c17b68ac6d9f0206b95b076d023aa158;hp=6effe1aff6c56f33b635da11e332e27a4252b65e;hb=dfb47bde6bf974d1b231048ec8bcda712404ccc1;hpb=9724c27ae4c4247b40d275f389a54d9fa02fa677 diff --git a/mdrun.c b/mdrun.c index 6effe1a..d063693 100644 --- a/mdrun.c +++ b/mdrun.c @@ -277,66 +277,114 @@ int mdrun_parse_config(t_mdrun *mdrun) { 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(ilc=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)) { @@ -777,7 +825,7 @@ int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { } } } - 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, @@ -846,7 +894,7 @@ int insert_mixed_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { 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); @@ -880,7 +928,7 @@ int insert_mixed_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { 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); @@ -1103,39 +1151,44 @@ int mdrun_hook(void *ptr1,void *ptr2) { 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;