X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.c;h=8d50a69c8a4f06b28d3a75ffcc57951c0281fbc5;hb=452a348351ae8a2255809918a05683d2510655ce;hp=e936b11d0ce5a977330d9989bc7c156cfc25e014;hpb=45f9190fc7489f3f9ff8f0d917945b1d5bc9d584;p=physik%2Fposic.git diff --git a/moldyn.c b/moldyn.c index e936b11..8d50a69 100644 --- a/moldyn.c +++ b/moldyn.c @@ -1951,6 +1951,11 @@ int potential_force_calc(t_moldyn *moldyn) { #endif u8 bc_ij,bc_ik; int dnlc; +#ifdef PTHREADS + int ret; + pthread_t kthread[27]; + t_kdata kdata[27]; +#endif count=moldyn->count; itom=moldyn->atom; @@ -1959,6 +1964,10 @@ int potential_force_calc(t_moldyn *moldyn) { atom=moldyn->atom; #endif +#ifdef PTHREADS + memset(kdata,0,27*sizeof(t_kdata)); +#endif + /* reset energy */ moldyn->energy=0.0; @@ -2127,7 +2136,9 @@ int potential_force_calc(t_moldyn *moldyn) { continue; /* first loop over atoms k */ +#ifndef PTHREADS if(moldyn->func3b_k1) { +#endif for(k=0;k<27;k++) { @@ -2166,11 +2177,25 @@ int potential_force_calc(t_moldyn *moldyn) { if(ktom==&(itom[i])) continue; +#ifdef PTHREADS + kdata[k].moldyn=moldyn; + kdata[k].ai=&(itom[i]); + kdata[k].aj=jtom; + kdata[k].ak=ktom; + kdata[k].bc=bc_ik; + ret=pthread_create(&(kthread[k]),NULL,moldyn->func3b_k1,&(kdata[k])); + if(ret) { + perror("[moldyn] create k1 thread"); + return ret; + } +#else moldyn->func3b_k1(moldyn, &(itom[i]), jtom, ktom, bc_ik|bc_ij); +#endif + #ifdef STATIC_LISTS } #elif LOWMEM_LISTS @@ -2182,7 +2207,9 @@ int potential_force_calc(t_moldyn *moldyn) { } +#ifndef PTHREADS } +#endif if(moldyn->func3b_j2) moldyn->func3b_j2(moldyn,