X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=mdrun.c;h=bd70d007ab1f430e031de6b879aface7dd5713f3;hb=a16579f010cb5d53b7bf44e854089019ab9b1df0;hp=d0636939c17b68ac6d9f0206b95b076d023aa158;hpb=dfb47bde6bf974d1b231048ec8bcda712404ccc1;p=physik%2Fposic.git diff --git a/mdrun.c b/mdrun.c index d063693..bd70d00 100644 --- a/mdrun.c +++ b/mdrun.c @@ -98,6 +98,9 @@ int add_stage(t_mdrun *mdrun,u8 type,void *params) { case STAGE_DISPLACE_ATOM: psize=sizeof(t_displace_atom_params); break; + case STAGE_DEL_ATOMS: + psize=sizeof(t_del_atoms_params); + break; case STAGE_INSERT_ATOMS: psize=sizeof(t_insert_atoms_params); break; @@ -161,7 +164,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { char error[128]; char line[128]; char *wptr; - char word[16][64]; + char word[32][64]; int wcnt; int i,o; @@ -175,6 +178,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { t_set_temp_params stp; t_set_timestep_params stsp; t_fill_params fp; + t_del_atoms_params delp; /* open config file */ fd=open(mdrun->cfile,O_RDONLY); @@ -207,6 +211,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { memset(&stp,0,sizeof(t_set_temp_params)); memset(&stsp,0,sizeof(t_set_timestep_params)); memset(&fp,0,sizeof(t_fill_params)); + memset(&delp,0,sizeof(t_del_atoms_params)); // get command + args wcnt=0; @@ -293,6 +298,7 @@ int mdrun_parse_config(t_mdrun *mdrun) { fp.lattice=mdrun->lattice; fp.p_params.type=0; fp.d_params.type=0; + fp.d_params.stype=0; // parse fill command i=1; while(istage.current->data; + delp=stage->params; + + for(i=0;icount;i++) { + v3_sub(&dist,&(delp->o),&(moldyn->atom[i].r)); +//printf("%d ----> %f %f %f = %f | %f\n",i,dist.x,dist.y,dist.z,v3_absolute_square(&dist),delp->r*delp->r); + if(v3_absolute_square(&dist)<=(delp->r*delp->r)) { + del_atom(moldyn,moldyn->atom[i].tag); + printf("%s atom deleted: %d %d %d\n",ME, + moldyn->atom[i].tag,moldyn->atom[i].element, + moldyn->atom[i].brand); + } + } + + return 0; + +} + int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { t_insert_atoms_params *iap; @@ -764,7 +815,7 @@ int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { z0=-z/2.0; cr_check=TRUE; break; - case INS_REGION: + case INS_RECT: x=iap->x1-iap->x0; x0=iap->x0; y=iap->y1-iap->y0; @@ -773,6 +824,15 @@ int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { z0=iap->z0; cr_check=TRUE; break; + case INS_SPHERE: + x=2.0*iap->x1; + x0=iap->x0-iap->x1; + y=x; + y0=iap->y0-iap->x1; + z=x; + z0=iap->z0-iap->x1; + cr_check=TRUE; + break; case INS_POS: x0=iap->x0; y0=iap->y0; @@ -824,6 +884,14 @@ int insert_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { dmin=d; } } + if(iap->type==INS_SPHERE) { + if((r.x-iap->x0)*(r.x-iap->x0)+ + (r.y-iap->y0)*(r.y-iap->y0)+ + (r.z-iap->z0)*(r.z-iap->z0)> + (iap->x1*iap->x1)) { + run=1; + } + } } add_atom(moldyn,iap->element, iap->brand,iap->attr,&r,&v); @@ -1077,6 +1145,11 @@ int mdrun_hook(void *ptr1,void *ptr2) { displace_atom(moldyn,mdrun); change_stage=TRUE; break; + case STAGE_DEL_ATOMS: + stage_print(" -> del atoms\n\n"); + del_atoms(moldyn,mdrun); + change_stage=TRUE; + break; case STAGE_INSERT_ATOMS: stage_print(" -> insert atoms\n\n"); iap=stage->params;