X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fposic.git;a=blobdiff_plain;f=mdrun.c;h=26fbc871708c262a19eead0b398d8773a2941902;hp=3266dd3804a0ac0668049988c30ecfac554a8fca;hb=HEAD;hpb=ff44bcba9df0d021568abcb553d1d490c442f696 diff --git a/mdrun.c b/mdrun.c index 3266dd3..26fbc87 100644 --- a/mdrun.c +++ b/mdrun.c @@ -11,6 +11,7 @@ #include "potentials/harmonic_oscillator.h" #include "potentials/lennard_jones.h" #include "potentials/albe.h" +#include "potentials/albe_orig.h" #ifdef TERSOFF_ORIG #include "potentials/tersoff_orig.h" #else @@ -234,6 +235,8 @@ int mdrun_parse_config(t_mdrun *mdrun) { if(!strncmp(word[0],"potential",9)) { if(!strncmp(word[1],"albe",4)) mdrun->potential=MOLDYN_POTENTIAL_AM; + if(!strncmp(word[1],"albe_o",6)) + mdrun->potential=MOLDYN_POTENTIAL_AO; if(!strncmp(word[1],"tersoff",7)) mdrun->potential=MOLDYN_POTENTIAL_TM; if(!strncmp(word[1],"ho",2)) @@ -803,18 +806,35 @@ int del_atoms(t_moldyn *moldyn,t_mdrun *mdrun) { t_del_atoms_params *delp; int i; t_3dvec dist; - + u8 outer; + + outer=0; stage=mdrun->stage.current->data; delp=stage->params; + if(delp->r<0) + outer=1; + 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); + if(!outer) { + 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); + } + } + else { + if(outer) { + 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); + } } } @@ -1286,6 +1306,7 @@ int crt(t_moldyn *moldyn,t_mdrun *mdrun) { // done reading acount+=1; } + close(fd); // allocate trafo angles trafo_angle=malloc(acount*2*sizeof(double)); if(trafo_angle==NULL) { @@ -1296,18 +1317,41 @@ int crt(t_moldyn *moldyn,t_mdrun *mdrun) { crtt=crtp->type; } + /* write a save file s-crt_xofy.save */ + snprintf(line,128,"%s/s-crt_%03dof%03d.save", + moldyn->vlsdir,crtp->count,crtp->steps); + fd=open(line,O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR); + if(fd<0) perror("[mdrun] crt save fd open"); + else { + write(fd,moldyn,sizeof(t_moldyn)); + write(fd,moldyn->atom, + moldyn->count*sizeof(t_atom)); + } + close(fd); + /* visualize atoms */ + visual_atoms(moldyn); + + /* output energy */ + printf(" crt energy: %d - %f\n\n", + crtp->count,(moldyn->ekin+moldyn->energy)/EV); + /* crt routines: calculate displacement + set individual constraints */ printf(" crt step %d of %d in total\n\n",crtp->count+1,crtp->steps); + if((crtp->type==1)|(crtp->count==0)) + printf(" crt angle update\n\n"); + for(i=0;icount;i++) { // calc displacements atom=moldyn->atom; v3_sub(&disp,&(crtp->r_fin[i]),&(atom[i].r)); // angles - trafo_angle[2*i]=atan2(disp.x,disp.y); - trafo_angle[2*i+1]=-atan2(disp.z, - sqrt(disp.x*disp.x+disp.y*disp.y)); + if((crtp->type==1)|(crtp->count==0)) { + trafo_angle[2*i]=atan2(disp.x,disp.y); + trafo_angle[2*i+1]=-atan2(disp.z, + sqrt(disp.x*disp.x+disp.y*disp.y)); + } // move atoms frac=1.0/(crtp->steps-crtp->count); v3_scale(&disp,&disp,frac); @@ -1612,6 +1656,11 @@ int main(int argc,char **argv) { mdrun.element1, mdrun.element2); break; + case MOLDYN_POTENTIAL_AO: + albe_orig_mult_set_params(&moldyn, + mdrun.element1, + mdrun.element2); + break; case MOLDYN_POTENTIAL_TM: tersoff_mult_set_params(&moldyn, mdrun.element1,