pthread imp started for orig albe (more easier in the beginning)
[physik/posic.git] / moldyn.c
index e936b11..8d50a69 100644 (file)
--- 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,