From 61d24d027511c3e96b2f94558dc1b31c72725767 Mon Sep 17 00:00:00 2001 From: hackbard Date: Fri, 25 Apr 2008 17:38:37 +0200 Subject: [PATCH] mdrun iinit. untested + not working by now! --- Makefile | 4 +- config.default | 94 +++++---- mdrun.c | 338 +++++++++++++++++++++++++++++++ mdrun.h | 85 ++++++++ moldyn.c | 161 +++++---------- moldyn.h | 9 +- potentials/harmonic_oscillator.c | 1 - sic.c | 2 - 8 files changed, 543 insertions(+), 151 deletions(-) create mode 100644 mdrun.c create mode 100644 mdrun.h diff --git a/Makefile b/Makefile index c839759..fbe3f59 100644 --- a/Makefile +++ b/Makefile @@ -22,12 +22,12 @@ DEPS = moldyn.o random/random.o list/list.o DEPS += potentials/lennard_jones.o potentials/harmonic_oscillator.o DEPS += potentials/tersoff.o potentials/albe.o -ALL = posic sic fluctuation_calc postproc pair_correlation_calc diffusion_calc +ALL = mdrun sic fluctuation_calc postproc pair_correlation_calc diffusion_calc ALL += bond_analyze all: $(ALL) -posic: $(DEPS) +mdrun: $(DEPS) sic: $(DEPS) config.h diff --git a/config.default b/config.default index b9834a7..f221555 100644 --- a/config.default +++ b/config.default @@ -1,53 +1,75 @@ -# default configuration for a molecular dynamics run - # -# molecular dynamic variables +# mdrun configuration file # -# delta t in fs -DELTA_T 1.0 +## potential ## -# temperature in kelvin -TEMP 298.0 +potential albe +cutoff 2.96 -# t/p control -BER_THERMO 1 -BER_BARO 0 +## integration algorithm ## -# -# lattice & atoms -# +intalgo verlet +timestep 1.0 + +## simulation volume ## + +volume +pbc 1 1 1 + +## temperature / pressure ## + +temperature 450.0 +pressure 0.0 + +## ensemble control ## -# lattice/atom type -L_TYPE DIAMOND Si C +eattrib 100.0 100.0 -# lattice constant in angstrom -L_CONSTANT 4.359 +## equi ctrl ## -# lattice offset in lattice constants -L_OFFSET 0.125 +equictrl 1.0 1.0 -# fixed atoms -FX 0 0 -FY 0 0 -FZ 0 0 +## initial lattice ## -# atoms coupled to heat bath -HX 0 0 -HY 0 0 -HZ 0 0 +lattice diamond +#lattice zincblende +element1 silicon +#element2 carbon +fill lc 9 9 9 +aattrib all h + +## initial simulation run ## + +prerun 100 +avgskip 0 + +## more stages ## + +# format: +# stage # -# simulation cell +# actions: # +# ins_atoms <#insertions> <#atoms> \ +# <#atom-attrib> +# +# continue <#runs> +# +# anneal <#annealing-steps> + +stage ins_atoms 10 1 14 v h rand 0 0 0 11 11 11 +stage ins_atoms 1 1 6 v h rand 0 0 0 5.429 5.429 5.429 +stage continue 10000 +stage anneal 723 -1.0 -# size in lattice constants -LC_COUNT_X 10 -LC_COUNT_Y 10 -LC_COUNT_Z 10 +## report / log / visualization / save files ## -# periodic boundary conditions -PER_BOUND_X 1 -PER_BOUND_Y 1 -PER_BOUND_Z 1 +elog 10 +tlog 10 +plog 10 +vlog 10 +save 100 +visualize 100 diff --git a/mdrun.c b/mdrun.c new file mode 100644 index 0000000..4a2822e --- /dev/null +++ b/mdrun.c @@ -0,0 +1,338 @@ +/* + * mdrun.c - main code to run a md simulation + * + * author: Frank Zirkelbach + * + */ + +#include "mdrun.h" + +/* potential */ +#include "potentials/harmonic_oscillator.h" +#include "potentials/lennard_jones.h" +#include "potentials/albe.h" +#ifdef TERSOFF_ORIG +#include "potentials/tersoff_orig.h" +#else +#include "potentials/tersoff.h" +#endif + +#define ME "[mdrun]" + +/* + * parse function + */ + +int mdrun_usage(void) { + + printf("%s usage:\n",ME); + + return 0; +} + +int mdrun_parse_argv(t_mdrun *mdrun,int argc,char **argv) { + + int i; + + for(i=1;icfile,argv[++i],128); + break; + case 's': + strncpy(mdrun->sdir,argv[++i],128); + break; + case 'h': + mdrun_usage(); + break; + default: + printf("%s unknown option: %s\n",ME,argv[i]); + mdrun_usage(); + return -1; + } + + } + + return 0; +} + +int mdrun_parse_config(t_mdrun *mdrun) { + + int fd,ret; + char error[128]; + char line[128]; + char *wptr; + char word[16][32]; + int wcnt; + + /* open config file */ + fd=open(mdrun->cfile,O_RDONLY); + if(fd<0) { + snprintf(error,128,"%s open cfile %s",ME,mdrun->cfile); + perror(error); + return fd; + } + + /* read, parse, set */ + ret=1; + while(ret>0) { + + /* read */ + ret=get_line(fd,line,128); + + /* parse */ + + // ignore # lines and \n + if((line[0]=='#')|(ret==1)) + continue; + + // get command + args + wcnt=0; + while(1) { + if(wcnt) + wptr=strtok(NULL," \t"); + else + wptr=strtok(line," \t"); + if(wptr==NULL) + break; + strncpy(word[wcnt],wptr,32); + wcnt+=1; + } + + if(!strncmp(word[0],"potential",9)) { + if(!strncmp(word[1],"albe",4)) + mdrun->potential=MOLDYN_POTENTIAL_AM; + if(!strncmp(word[1],"tersoff",7)) + mdrun->potential=MOLDYN_POTENTIAL_TM; + if(!strncmp(word[1],"ho",2)) + mdrun->potential=MOLDYN_POTENTIAL_HO; + if(!strncmp(word[1],"lj",2)) + mdrun->potential=MOLDYN_POTENTIAL_LJ; + } + else if(!strncmp(word[0],"cutoff",6)) + mdrun->cutoff=atof(word[1]); + else if(!strncmp(word[0],"intalgo",7)) { + if(!strncmp(word[1],"verlet",5)) + mdrun->intalgo=MOLDYN_INTEGRATE_VERLET; + } + else if(!strncmp(word[0],"timestep",8)) + mdrun->timestep=atof(word[1]); + else if(!strncmp(word[0],"volume",6)) { + mdrun->dim.x=atof(word[1]); + mdrun->dim.y=atof(word[2]); + mdrun->dim.z=atof(word[3]); + if(strncmp(word[4],"0",1)) + mdrun->vis=TRUE; + } + else if(!strncmp(word[0],"pbc",3)) { + if(strncmp(word[1],"0",1)) + mdrun->pbcx=TRUE; + else + mdrun->pbcx=FALSE; + if(strncmp(word[2],"0",1)) + mdrun->pbcy=TRUE; + else + mdrun->pbcy=FALSE; + if(strncmp(word[3],"0",1)) + mdrun->pbcz=TRUE; + else + mdrun->pbcz=FALSE; + } + else if(!strncmp(word[0],"temperature",11)) + mdrun->temperature=atof(word[1]); + else if(!strncmp(word[0],"pressure",8)) + mdrun->pressure=atof(word[1]); + else if(!strncmp(word[0],"lattice",7)) { + if(!strncmp(word[1],"zincblende",10)) + mdrun->lattice=ZINCBLENDE; + if(!strncmp(word[1],"fcc",3)) + mdrun->lattice=FCC; + if(!strncmp(word[1],"diamond",7)) + mdrun->lattice=DIAMOND; + } + else if(!strncmp(word[0],"element1",8)) { + mdrun->element1=atoi(word[1]); + switch(mdrun->element1) { + case SI: + mdrun->m1=M_SI; + break; + case C: + mdrun->m1=M_C; + break; + default: + printf("%s unknown element1: %s|%d\n", + ME,word[1],mdrun->element1); + return -1; + } + } + else if(!strncmp(word[0],"element2",8)) { + mdrun->element2=atoi(word[1]); + switch(mdrun->element2) { + case SI: + mdrun->m2=M_SI; + break; + case C: + mdrun->m2=M_C; + break; + default: + printf("%s unknown element2: %s|%d\n", + ME,word[1],mdrun->element2); + return -1; + } + } + else if(!strncmp(word[0],"filllc",6)) { + mdrun->lx=atoi(word[1]); + mdrun->ly=atoi(word[2]); + mdrun->lz=atoi(word[3]); + } + else if(!strncmp(word[0],"aattrib",7)) { + // for aatrib line we need a special stage + // containing one schedule of 0 loops ... + printf("%s aattrib: %s\n",ME,word[1]); + } + else if(!strncmp(word[0],"eattrib",7)) { + mdrun->p_tau=atof(word[1]); + mdrun->t_tau=atof(word[2]); + } + else if(!strncmp(word[0],"prerun",6)) + mdrun->prerun=atoi(word[1]); + else if(!strncmp(word[0],"avgskip",7)) + mdrun->avgskip=atoi(word[1]); + else if(!strncmp(word[0],"elog",4)) + mdrun->elog=atoi(word[1]); + else if(!strncmp(word[0],"tlog",4)) + mdrun->tlog=atoi(word[1]); + else if(!strncmp(word[0],"plog",4)) + mdrun->plog=atoi(word[1]); + else if(!strncmp(word[0],"vlog",4)) + mdrun->vlog=atoi(word[1]); + else if(!strncmp(word[0],"save",4)) + mdrun->save=atoi(word[1]); + else if(!strncmp(word[0],"visualize",9)) + mdrun->visualize=atoi(word[1]); + else if(!strncmp(word[0],"stage",5)) { + // for every stage line, add a stage + printf("%s stage: %s\n",ME,word[1]); + } + else { + printf("%s unknown command %s, skipped!\n",ME,wptr); + continue; + } + } + + return 0; +} + +int main(int argc,char **argv) { + + t_mdrun mdrun; + t_moldyn moldyn; + t_3dvec o; + + /* clear mdrun struct */ + memset(&mdrun,0,sizeof(t_mdrun)); + + /* parse arguments */ + if(mdrun_parse_argv(&mdrun,argc,argv)<0) + return -1; + + /* parse config file */ + mdrun_parse_config(&mdrun); + + /* sanity check! */ + + /* prepare simulation */ + moldyn_init(&moldyn,argc,argv); + if(set_int_alg(&moldyn,mdrun.intalgo)<0) + return -1; + set_cutoff(&moldyn,mdrun.cutoff); + if(set_potential(&moldyn,mdrun.potential)<0) + return -1; + switch(mdrun.potential) { + case MOLDYN_POTENTIAL_AM: + albe_mult_set_params(&moldyn, + mdrun.element1, + mdrun.element2); + break; + case MOLDYN_POTENTIAL_TM: + tersoff_mult_set_params(&moldyn, + mdrun.element1, + mdrun.element2); + break; + case MOLDYN_POTENTIAL_HO: + harmonic_oscillator_set_params(&moldyn,mdrun.element1); + break; + case MOLDYN_POTENTIAL_LJ: + lennard_jones_set_params(&moldyn,mdrun.element1); + break; + default: + printf("%s unknown potential: %02x\n", + ME,mdrun.potential); + return -1; + } + set_dim(&moldyn,mdrun.dim.x,mdrun.dim.y,mdrun.dim.z,mdrun.vis); + set_pbc(&moldyn,mdrun.pbcx,mdrun.pbcy,mdrun.pbcz); + switch(mdrun.lattice) { + case FCC: + create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element1, + mdrun.m1,0,0,mdrun.lx, + mdrun.ly,mdrun.lz,NULL); + break; + case DIAMOND: + create_lattice(&moldyn,DIAMOND,mdrun.lc,mdrun.element1, + mdrun.m1,0,0,mdrun.lx, + mdrun.ly,mdrun.lz,NULL); + break; + case ZINCBLENDE: + o.x=0.5*0.25*mdrun.lc; o.y=o.x; o.z=o.x; + create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element1, + mdrun.m1,0,0,mdrun.lx, + mdrun.ly,mdrun.lz,&o); + o.x+=0.25*mdrun.lc; o.y=o.x; o.z=o.x; + create_lattice(&moldyn,FCC,mdrun.lc,mdrun.element2, + mdrun.m2,0,0,mdrun.lx, + mdrun.ly,mdrun.lz,&o); + break; + default: + printf("%s unknown lattice type: %02x\n", + ME,mdrun.lattice); + return -1; + } + moldyn_bc_check(&moldyn); + set_temperature(&moldyn,mdrun.temperature); + set_pressure(&moldyn,mdrun.pressure); + thermal_init(&moldyn,TRUE); + moldyn_add_schedule(&moldyn,mdrun.prerun,mdrun.timestep); + moldyn_set_log_dir(&moldyn,mdrun.sdir); + moldyn_set_report(&moldyn,"CHANGE ME","CHANGE ME TOO"); + if(mdrun.elog) + moldyn_set_log(&moldyn,LOG_TOTAL_ENERGY,mdrun.elog); + if(mdrun.tlog) + moldyn_set_log(&moldyn,LOG_TEMPERATURE,mdrun.tlog); + if(mdrun.plog) + moldyn_set_log(&moldyn,LOG_PRESSURE,mdrun.plog); + if(mdrun.vlog) + moldyn_set_log(&moldyn,LOG_VOLUME,mdrun.vlog); + if(mdrun.visualize) + moldyn_set_log(&moldyn,VISUAL_STEP,mdrun.visualize); + if(mdrun.save) + moldyn_set_log(&moldyn,SAVE_STEP,mdrun.save); + moldyn_set_log(&moldyn,CREATE_REPORT,0); + set_avg_skip(&moldyn,mdrun.avgskip); + + /* prepare the hook function */ + + /* run the simulation */ + moldyn_integrate(&moldyn); + + /* shutdown */ + moldyn_shutdown(&moldyn); + + return 0; +} diff --git a/mdrun.h b/mdrun.h new file mode 100644 index 0000000..ed9d88e --- /dev/null +++ b/mdrun.h @@ -0,0 +1,85 @@ +/* + * mdrun.h - mdrun header file + * + * author: Frank Zirkelbach + * + */ + +#ifndef MDRUN_H +#define MDRUN_H + +#include +#include +#include + +#include + +/* main molecular dynamics api */ +#include "moldyn.h" + +/* list api */ +#include "list/list.h" + +/* potentials */ +#include "potentials/harmonic_oscillator.h" +#include "potentials/lennard_jones.h" +#include "potentials/albe.h" +#ifdef TERSOFF_ORIG +#include "potentials/tersoff_orig.h" +#else +#include "potentials/tersoff.h" +#endif + +/* + * datatypes + */ + +typedef struct s_stage { + u8 type; + u8 attr; + int runs; +} t_stage; + +typedef struct s_mdrun { + char cfile[128]; // config file + u8 intalgo; // integration algorithm + double timestep; // timestep + u8 potential; // potential + double cutoff; // cutoff radius + t_3dvec dim; // simulation volume + u8 pbcx; // periodic boundary conditions + u8 pbcy; + u8 pbcz; + int element1; // element 1 + double m1; + int element2; // element 2 + double m2; + double lc; // lattice constant + int lx; // amount of lc units + int ly; + int lz; + u8 aattrib; // atom attributes + u8 lattice; // type of lattice + double temperature; // temperature + double pressure; // pressure + double p_tau; // pressure tau + double t_tau; // temperature tau + int prerun; // amount of loops in first run + int elog; // logging + int tlog; + int plog; + int vlog; + int save; + int visualize; + u8 vis; + int avgskip; // average skip + char sdir[128]; // save root + t_list stage; // list of stages +} t_mdrun; + +/* + * function prototypes + */ + + +#endif diff --git a/moldyn.c b/moldyn.c index a1bfcae..b52d51d 100644 --- a/moldyn.c +++ b/moldyn.c @@ -131,24 +131,13 @@ int set_int_alg(t_moldyn *moldyn,u8 algo) { int set_cutoff(t_moldyn *moldyn,double cutoff) { moldyn->cutoff=cutoff; + moldyn->cutoff_square=cutoff*cutoff; printf("[moldyn] cutoff [A]: %f\n",moldyn->cutoff); return 0; } -int set_bondlen(t_moldyn *moldyn,double b0,double b1,double bm) { - - moldyn->bondlen[0]=b0*b0; - moldyn->bondlen[1]=b1*b1; - if(bm<0) - moldyn->bondlen[2]=b0*b1; - else - moldyn->bondlen[2]=bm*bm; - - return 0; -} - int set_temperature(t_moldyn *moldyn,double t_ref) { moldyn->t_ref=t_ref; @@ -1581,7 +1570,6 @@ int moldyn_integrate(t_moldyn *moldyn) { /* sqaure of some variables */ moldyn->tau_square=moldyn->tau*moldyn->tau; - moldyn->cutoff_square=moldyn->cutoff*moldyn->cutoff; /* get current time */ gettimeofday(&t1,NULL); @@ -2414,7 +2402,8 @@ int get_line(int fd,char *line,int max) { ret=read(fd,line+count,1); if(ret<=0) return ret; if(line[count]=='\n') { - line[count]='\0'; + memset(line+count,0,max-count-1); + //line[count]='\0'; return count+1; } count+=1; @@ -2705,39 +2694,48 @@ int visual_init(t_moldyn *moldyn,char *filebase) { return 0; } +int visual_bonds_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, + void *data,u8 bc) { + + t_vb *vb; + + vb=data; + + if(itom->tag>=jtom->tag) + return 0; + + if(moldyn->check_2b_bond(moldyn,itom,jtom,bc)==FALSE) + return 0; + + if((itom->attr&ATOM_ATTR_VB)|(jtom->attr&ATOM_ATTR_VB)) + dprintf(vb->fd,"# [B] %f %f %f %f %f %f\n", + itom->r.x,itom->r.y,itom->r.z, + jtom->r.x,jtom->r.y,jtom->r.z); + + return 0; +} + int visual_atoms(t_moldyn *moldyn) { - int i,j,fd; + int i; char file[128+64]; t_3dvec dim; double help; t_visual *v; t_atom *atom; - t_atom *btom; - t_linkcell *lc; -#ifdef STATIC_LISTS - int *neighbour[27]; - int p; -#else - t_list neighbour[27]; -#endif - u8 bc; - t_3dvec dist; - double d2; - u8 brand; + t_vb vb; v=&(moldyn->vis); dim.x=v->dim.x; dim.y=v->dim.y; dim.z=v->dim.z; atom=moldyn->atom; - lc=&(moldyn->lc); help=(dim.x+dim.y); sprintf(file,"%s/atomic_conf_%07.f.xyz",v->fb,moldyn->time); - fd=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); - if(fd<0) { + vb.fd=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); + if(vb.fd<0) { perror("open visual save file fd"); return -1; } @@ -2745,118 +2743,65 @@ int visual_atoms(t_moldyn *moldyn) { /* write the actual data file */ // povray header - dprintf(fd,"# [P] %d %07.f <%f,%f,%f>\n", + dprintf(vb.fd,"# [P] %d %07.f <%f,%f,%f>\n", moldyn->count,moldyn->time,help/40.0,help/40.0,-0.8*help); // atomic configuration - for(i=0;icount;i++) { + for(i=0;icount;i++) // atom type, positions, color and kinetic energy - dprintf(fd,"%s %f %f %f %s %f\n",pse_name[atom[i].element], - atom[i].r.x, - atom[i].r.y, - atom[i].r.z, - pse_col[atom[i].element], - atom[i].ekin); - - /* - * bond detection should usually be done by potential - * functions. brrrrr! EVIL! - * - * todo: potentials need to export a 'find_bonds' function! - */ - - // bonds between atoms - if(!(atom[i].attr&ATOM_ATTR_VB)) - continue; - link_cell_neighbour_index(moldyn, - (atom[i].r.x+moldyn->dim.x/2)/lc->x, - (atom[i].r.y+moldyn->dim.y/2)/lc->y, - (atom[i].r.z+moldyn->dim.z/2)/lc->z, - neighbour); - for(j=0;j<27;j++) { - bc=jdnlc?0:1; -#ifdef STATIC_LISTS - p=0; - while(neighbour[j][p]!=0) { - btom=&(atom[neighbour[j][p]]); - p++; -#else - list_reset_f(&neighbour[j]); - if(neighbour[j].start==NULL) - continue; - do { - btom=neighbour[j].current->data; -#endif - if(btom==&atom[i]) // skip identical atoms - continue; - //if(btom<&atom[i]) // skip half of them - // continue; - v3_sub(&dist,&(atom[i].r),&(btom->r)); - if(bc) check_per_bound(moldyn,&dist); - d2=v3_absolute_square(&dist); - brand=atom[i].brand; - if(brand==btom->brand) { - if(d2>moldyn->bondlen[brand]) - continue; - } - else { - if(d2>moldyn->bondlen[2]) - continue; - } - dprintf(fd,"# [B] %f %f %f %f %f %f\n", - atom[i].r.x,atom[i].r.y,atom[i].r.z, - btom->r.x,btom->r.y,btom->r.z); -#ifdef STATIC_LISTS - } -#else - } while(list_next_f(&neighbour[j])!=L_NO_NEXT_ELEMENT); -#endif - } - } - + dprintf(vb.fd,"%s %f %f %f %s %f\n",pse_name[atom[i].element], + atom[i].r.x, + atom[i].r.y, + atom[i].r.z, + pse_col[atom[i].element], + atom[i].ekin); + + // bonds between atoms + process_2b_bonds(moldyn,&vb,visual_bonds_process); + // boundaries if(dim.x) { - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,-dim.y/2,-dim.z/2, dim.x/2,-dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,-dim.y/2,-dim.z/2, -dim.x/2,dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", dim.x/2,dim.y/2,-dim.z/2, dim.x/2,-dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,dim.y/2,-dim.z/2, dim.x/2,dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,-dim.y/2,dim.z/2, dim.x/2,-dim.y/2,dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,-dim.y/2,dim.z/2, -dim.x/2,dim.y/2,dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", dim.x/2,dim.y/2,dim.z/2, dim.x/2,-dim.y/2,dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,dim.y/2,dim.z/2, dim.x/2,dim.y/2,dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,-dim.y/2,dim.z/2, -dim.x/2,-dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", -dim.x/2,dim.y/2,dim.z/2, -dim.x/2,dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", dim.x/2,-dim.y/2,dim.z/2, dim.x/2,-dim.y/2,-dim.z/2); - dprintf(fd,"# [D] %f %f %f %f %f %f\n", + dprintf(vb.fd,"# [D] %f %f %f %f %f %f\n", dim.x/2,dim.y/2,dim.z/2, dim.x/2,dim.y/2,-dim.z/2); } - close(fd); + close(vb.fd); return 0; } diff --git a/moldyn.h b/moldyn.h index 18c09c1..e2b2ee4 100644 --- a/moldyn.h +++ b/moldyn.h @@ -117,7 +117,6 @@ typedef struct s_moldyn { double cutoff; /* cutoff radius */ double cutoff_square; /* square of the cutoff radius */ double nnd; /* nearest neighbour distance (optional) */ - double bondlen[3]; /* bond lengthes (only 2 atomic systems) */ t_linkcell lc; /* linked cell list interface */ @@ -236,6 +235,10 @@ typedef struct s_ba { int tcnt; } t_ba; +typedef struct s_vb { + int fd; +} t_vb; + /* * * defines @@ -340,6 +343,7 @@ typedef struct s_ba { #define CUBIC 0x01 #define FCC 0x02 #define DIAMOND 0x04 +#define ZINCBLENDE 0x08 /* * @@ -352,7 +356,6 @@ int moldyn_shutdown(t_moldyn *moldyn); int set_int_alg(t_moldyn *moldyn,u8 algo); int set_cutoff(t_moldyn *moldyn,double cutoff); -int set_bondlen(t_moldyn *moldyn,double b0,double b1,double bm); int set_temperature(t_moldyn *moldyn,double t_ref); int set_pressure(t_moldyn *moldyn,double p_ref); int set_pt_scale(t_moldyn *moldyn,u8 ptype,double ptc,u8 ttype,double ttc); @@ -445,6 +448,8 @@ int bond_analyze_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, int bond_analyze(t_moldyn *moldyn,double *quality); int visual_init(t_moldyn *moldyn,char *filebase); +int visual_bonds_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, + void *data,u8 bc); int visual_atoms(t_moldyn *moldyn); #endif diff --git a/potentials/harmonic_oscillator.c b/potentials/harmonic_oscillator.c index 611f518..8addd3a 100644 --- a/potentials/harmonic_oscillator.c +++ b/potentials/harmonic_oscillator.c @@ -55,7 +55,6 @@ int harmonic_oscillator_set_params(t_moldyn *moldyn,int element) { return -1; } - return 0; } diff --git a/sic.c b/sic.c index a3c4f74..e33d934 100644 --- a/sic.c +++ b/sic.c @@ -272,11 +272,9 @@ int main(int argc,char **argv) { /* cutoff radius & bondlen */ #ifdef ALBE set_cutoff(&md,ALBE_S_SI); - set_bondlen(&md,ALBE_S_SI,ALBE_S_C,ALBE_S_SIC); //set_cutoff(&md,ALBE_S_C); #else set_cutoff(&md,TM_S_SI); - set_bondlen(&md,TM_S_SI,TM_S_C,-1.0); //set_cutoff(&md,TM_S_C); #endif -- 2.20.1