From 45f9190fc7489f3f9ff8f0d917945b1d5bc9d584 Mon Sep 17 00:00:00 2001 From: hackbard Date: Fri, 26 Sep 2008 11:11:52 +0200 Subject: [PATCH] io thread needed for visual atom call! changed. --- moldyn.c | 83 ++++++++++++++++++++++++-------------------------------- moldyn.h | 4 +++ 2 files changed, 40 insertions(+), 47 deletions(-) diff --git a/moldyn.c b/moldyn.c index 4788a81..e936b11 100644 --- a/moldyn.c +++ b/moldyn.c @@ -1608,33 +1608,6 @@ int moldyn_set_schedule_hook(t_moldyn *moldyn,set_hook hook,void *hook_params) { * */ -/* helper / special functions */ - -#ifdef PTHREADS -void *write_save_file(void *ptr) { - - int fd; - char dir[128]; - t_moldyn *moldyn; - - moldyn=ptr; - - snprintf(dir,128,"%s/s-%08.f.save",moldyn->vlsdir,moldyn->time); - fd=open(dir,O_WRONLY|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR); - if(fd<0) perror("[moldyn] save fd open"); - else { - write(fd,moldyn,sizeof(t_moldyn)); - write(fd,moldyn->atom,moldyn->count*sizeof(t_atom)); - } - - close(fd); - - pthread_exit(NULL); - - return 0; -} -#endif - /* start the integration */ int moldyn_integrate(t_moldyn *moldyn) { @@ -1644,10 +1617,8 @@ int moldyn_integrate(t_moldyn *moldyn) { t_3dvec momentum; t_moldyn_schedule *sched; t_atom *atom; -#ifndef PTHREADS int fd; char dir[128]; -#endif double ds; double energy_scale; struct timeval t1,t2; @@ -1806,6 +1777,21 @@ int moldyn_integrate(t_moldyn *moldyn) { } if(s) { if(!(moldyn->total_steps%s)) { + snprintf(dir,128,"%s/s-%08.f.save", + moldyn->vlsdir,moldyn->time); + fd=open(dir,O_WRONLY|O_TRUNC|O_CREAT, + S_IRUSR|S_IWUSR); + if(fd<0) perror("[moldyn] save fd open"); + else { + write(fd,moldyn,sizeof(t_moldyn)); + write(fd,moldyn->atom, + moldyn->count*sizeof(t_atom)); + } + close(fd); + } + } + if(a) { + if(!(moldyn->total_steps%a)) { #ifdef PTHREADS /* check whether thread has not terminated yet */ if(!first) { @@ -1828,29 +1814,14 @@ int moldyn_integrate(t_moldyn *moldyn) { md_copy.atom=atom_copy; memcpy(atom_copy,moldyn->atom,moldyn->count*sizeof(t_atom)); change=0; - ret=pthread_create(&io_thread,NULL,write_save_file,&md_copy); + ret=pthread_create(&io_thread,NULL,visual_atoms,&md_copy); if(ret) { - perror("[moldyn] create save file thread\n"); + perror("[moldyn] create visual atoms thread\n"); return -1; } #else - snprintf(dir,128,"%s/s-%08.f.save", - moldyn->vlsdir,moldyn->time); - fd=open(dir,O_WRONLY|O_TRUNC|O_CREAT, - S_IRUSR|S_IWUSR); - if(fd<0) perror("[moldyn] save fd open"); - else { - write(fd,moldyn,sizeof(t_moldyn)); - write(fd,moldyn->atom, - moldyn->count*sizeof(t_atom)); - } - close(fd); -#endif - } - } - if(a) { - if(!(moldyn->total_steps%a)) { visual_atoms(moldyn); +#endif } } @@ -3002,7 +2973,11 @@ int visual_bonds_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, return 0; } +#ifdef PTHREADS +void *visual_atoms(void *ptr) { +#else int visual_atoms(t_moldyn *moldyn) { +#endif int i; char file[128+64]; @@ -3011,6 +2986,11 @@ int visual_atoms(t_moldyn *moldyn) { t_visual *v; t_atom *atom; t_vb vb; +#ifdef PTHREADS + t_moldyn *moldyn; + + moldyn=ptr; +#endif v=&(moldyn->vis); dim.x=v->dim.x; @@ -3024,7 +3004,9 @@ int visual_atoms(t_moldyn *moldyn) { vb.fd=open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); if(vb.fd<0) { perror("open visual save file fd"); +#ifndef PTHREADS return -1; +#endif } /* write the actual data file */ @@ -3090,8 +3072,15 @@ int visual_atoms(t_moldyn *moldyn) { close(vb.fd); +#ifdef PTHREADS + pthread_exit(NULL); + +} +#else + return 0; } +#endif /* * fpu cntrol functions diff --git a/moldyn.h b/moldyn.h index 87c8948..31794c8 100644 --- a/moldyn.h +++ b/moldyn.h @@ -481,7 +481,11 @@ 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); +#ifdef PTHREADS +void *visual_atoms(void *ptr); +#else int visual_atoms(t_moldyn *moldyn); +#endif int fpu_set_rtd(void); -- 2.20.1