81 int flag_nocomputeedges=1;
84 int distcorrmin= lambda-1;
86 if (flag_nocomputeedges==1)
87 offset_edges=distcorrmin;
92 #pragma omp parallel for shared(k,lambda,n) private(i,j,j_first,j_last,Tid)
93 for(i=0+offset_edges;i<n-offset_edges;i++) {
96 j_first=max( i-(lambda-1) , 0);
97 j_last =min( i+lambda , n);
99 for(j=j_first;j<j_last;j++) {
101 (*TV)[i+k*n] += T[Tid] * (*V)[j+k*n];
128 int stmm_simple_core(
double **V,
int n,
int m,
double *T,
int blocksize,
int lambda,
int nfft,
int flag_offset)
135 int distcorrmin= lambda-1;
136 int blocksize_eff = blocksize-2*distcorrmin;
140 nbloc = ceil((1.0*(n-2*distcorrmin))/blocksize_eff);
142 nbloc = ceil( (1.0*n)/blocksize_eff);
145 double *V_bloc, *TV_bloc;
146 V_bloc = (
double *) calloc(blocksize*m,
sizeof(
double));
147 TV_bloc = (
double *) calloc(blocksize*m,
sizeof(
double));
148 if((V_bloc==0)||(TV_bloc==0))
161 currentsize = min( blocksize-distcorrmin+offset, n-iV);
164 copy_block( n, m, *V, blocksize, m, V_bloc, 0, 0, currentsize, m, distcorrmin-offset, 0, 1.0, 0);
170 printf(
"Error in stmm_core.");
174 iV = blocksize_eff-distcorrmin+offset;
177 currentsize = min( blocksize, n-iV);
179 int flag_reset = (currentsize!=blocksize);
180 copy_block( n, m, *V, blocksize, m, V_bloc, iV, 0, currentsize, m, 0, 0, 1.0, flag_reset);
184 currentsize = min( blocksize_eff, n-iTV);
185 copy_block( blocksize, m, TV_bloc, n, m, *V, distcorrmin, 0, currentsize, m, iTV, 0, 1.0, 0);
188 iTV += blocksize_eff;
190 for(k=1;k<nbloc;k++) {
194 if (status!=0)
break;
199 currentsize = min(blocksize, n-iV);
201 int flag_resetk = (currentsize!=blocksize);
202 copy_block( n, m, *V, blocksize, m, V_bloc, iV, 0, currentsize, m, 0, 0, 1.0, flag_resetk);
206 currentsize = min( blocksize_eff, n-iTV);
207 copy_block( blocksize, m, TV_bloc, n, m, *V, distcorrmin, 0, currentsize, m, iTV, 0, 1.0, 0);
208 iTV += blocksize_eff;