192{
193
194 double *ptrstart;
197 assert(start < end);
198 assert(j >= 0 && j < n);
199 nbline =
200 insidemat(uplo, diag, start, j, m, n, &offset);
201 if (nbline <= 0)
202 return;
203 start += offset;
204 if (start >= end)
205 return;
206 intervalsize =
min(end - start, nbline);
207 (*ptrsizebuff) += intervalsize;
208 switch (action) {
210 ptrstart = ptrblock +
localindice(start + ia, j + ja,
211 templateheight0, templatewidth0, ma);
212 memcpy((char *) (*pptrbuff), (char *) ptrstart,
213 intervalsize * sizeof(double));
214
215
216 (*pptrbuff) += intervalsize;
217 break;
219 ptrstart = ptrblock +
localindice(start + ib, j + jb,
220 templateheight1, templatewidth1, mb);
221 memcpy((char *) ptrstart, (char *) (*pptrbuff),
222 intervalsize * sizeof(double));
223
224
225 (*pptrbuff) += intervalsize;
226 break;
228 break;
229 default:
230 printf("action is %d outside the scope of the case [0..2] !! \n ", action);
231 exit(0);
232 break;
233 };
234}
static2 Int insidemat(char *uplo, char *diag, Int i, Int j, Int m, Int n, Int *offset)