dense.c (b49cda9fea61fc0153a0c383465e0c041501588f) dense.c (eb3f19e46b38d5d7d03c8a3cfecdfb705cfcba06)
1
2/*
3 Defines the basic matrix operations for sequential dense.
4*/
5
6#include <../src/mat/impls/dense/seq/dense.h> /*I "petscmat.h" I*/
7#include <petscblaslapack.h>
8
9#include <../src/mat/impls/aij/seq/aij.h>
10
11#undef __FUNCT__
1
2/*
3 Defines the basic matrix operations for sequential dense.
4*/
5
6#include <../src/mat/impls/dense/seq/dense.h> /*I "petscmat.h" I*/
7#include <petscblaslapack.h>
8
9#include <../src/mat/impls/aij/seq/aij.h>
10
11#undef __FUNCT__
12#define __FUNCT__ "MatConvert_SeqAIJ_SeqDense"
13PETSC_EXTERN PetscErrorCode MatConvert_SeqAIJ_SeqDense(Mat A,MatType newtype,MatReuse reuse,Mat *newmat)
14{
15 Mat B;
16 Mat_SeqAIJ *a = (Mat_SeqAIJ*)A->data;
17 Mat_SeqDense *b;
18 PetscErrorCode ierr;
19 PetscInt *ai=a->i,*aj=a->j,m=A->rmap->N,n=A->cmap->N,i;
20 MatScalar *av=a->a;
21
22 PetscFunctionBegin;
23 ierr = MatCreate(PetscObjectComm((PetscObject)A),&B);CHKERRQ(ierr);
24 ierr = MatSetSizes(B,m,n,m,n);CHKERRQ(ierr);
25 ierr = MatSetType(B,MATSEQDENSE);CHKERRQ(ierr);
26 ierr = MatSeqDenseSetPreallocation(B,NULL);CHKERRQ(ierr);
27
28 b = (Mat_SeqDense*)(B->data);
29 for (i=0; i<m; i++) {
30 PetscInt j;
31 for (j=0;j<ai[1]-ai[0];j++) {
32 b->v[*aj*m+i] = *av;
33 aj++;
34 av++;
35 }
36 ai++;
37 }
38 ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
39 ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
40
41 if (reuse == MAT_REUSE_MATRIX) {
42 ierr = MatHeaderReplace(A,B);CHKERRQ(ierr);
43 } else {
44 *newmat = B;
45 }
46 PetscFunctionReturn(0);
47}
48
49#undef __FUNCT__
50#define __FUNCT__ "MatConvert_SeqDense_SeqAIJ"
51PETSC_EXTERN PetscErrorCode MatConvert_SeqDense_SeqAIJ(Mat A, MatType newtype,MatReuse reuse,Mat *newmat)
52{
53 Mat B;
54 Mat_SeqDense *a = (Mat_SeqDense*)A->data;
55 PetscErrorCode ierr;
56 PetscInt i, j;
57 PetscInt *rows, *nnz;

--- 177 unchanged lines hidden (view full) ---

235 ierr = MatLUFactor_SeqDense(fact,0,0,&info);CHKERRQ(ierr);
236 PetscFunctionReturn(0);
237}
238
239#undef __FUNCT__
240#define __FUNCT__ "MatSolve_SeqDense"
241PetscErrorCode MatSolve_SeqDense(Mat A,Vec xx,Vec yy)
242{
12#define __FUNCT__ "MatConvert_SeqDense_SeqAIJ"
13PETSC_EXTERN PetscErrorCode MatConvert_SeqDense_SeqAIJ(Mat A, MatType newtype,MatReuse reuse,Mat *newmat)
14{
15 Mat B;
16 Mat_SeqDense *a = (Mat_SeqDense*)A->data;
17 PetscErrorCode ierr;
18 PetscInt i, j;
19 PetscInt *rows, *nnz;

--- 177 unchanged lines hidden (view full) ---

197 ierr = MatLUFactor_SeqDense(fact,0,0,&info);CHKERRQ(ierr);
198 PetscFunctionReturn(0);
199}
200
201#undef __FUNCT__
202#define __FUNCT__ "MatSolve_SeqDense"
203PetscErrorCode MatSolve_SeqDense(Mat A,Vec xx,Vec yy)
204{
243 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
244 PetscErrorCode ierr;
245 const PetscScalar *x;
246 PetscScalar *y;
247 PetscBLASInt one = 1,info,m;
205 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
206 PetscErrorCode ierr;
207 PetscScalar *x,*y;
208 PetscBLASInt one = 1,info,m;
248
249 PetscFunctionBegin;
250 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
209
210 PetscFunctionBegin;
211 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
251 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
212 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
252 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
253 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
254 if (A->factortype == MAT_FACTOR_LU) {
255#if defined(PETSC_MISSING_LAPACK_GETRS)
256 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"GETRS - Lapack routine is unavailable.");
257#else
258 PetscStackCallBLAS("LAPACKgetrs",LAPACKgetrs_("N",&m,&one,mat->v,&mat->lda,mat->pivots,y,&m,&info));
259 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"GETRS - Bad solve");
260#endif
261 } else if (A->factortype == MAT_FACTOR_CHOLESKY) {
262#if defined(PETSC_MISSING_LAPACK_POTRS)
263 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"POTRS - Lapack routine is unavailable.");
264#else
265 PetscStackCallBLAS("LAPACKpotrs",LAPACKpotrs_("L",&m,&one,mat->v,&mat->lda,y,&m,&info));
266 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS Bad solve");
267#endif
268 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Matrix must be factored to solve");
213 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
214 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
215 if (A->factortype == MAT_FACTOR_LU) {
216#if defined(PETSC_MISSING_LAPACK_GETRS)
217 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"GETRS - Lapack routine is unavailable.");
218#else
219 PetscStackCallBLAS("LAPACKgetrs",LAPACKgetrs_("N",&m,&one,mat->v,&mat->lda,mat->pivots,y,&m,&info));
220 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"GETRS - Bad solve");
221#endif
222 } else if (A->factortype == MAT_FACTOR_CHOLESKY) {
223#if defined(PETSC_MISSING_LAPACK_POTRS)
224 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"POTRS - Lapack routine is unavailable.");
225#else
226 PetscStackCallBLAS("LAPACKpotrs",LAPACKpotrs_("L",&m,&one,mat->v,&mat->lda,y,&m,&info));
227 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS Bad solve");
228#endif
229 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Matrix must be factored to solve");
269 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
230 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
270 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
271 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
272 PetscFunctionReturn(0);
273}
274
275#undef __FUNCT__
276#define __FUNCT__ "MatMatSolve_SeqDense"
277PetscErrorCode MatMatSolve_SeqDense(Mat A,Mat B,Mat X)

--- 40 unchanged lines hidden (view full) ---

318 ierr = PetscLogFlops(nrhs*(2.0*m*m - m));CHKERRQ(ierr);
319 PetscFunctionReturn(0);
320}
321
322#undef __FUNCT__
323#define __FUNCT__ "MatSolveTranspose_SeqDense"
324PetscErrorCode MatSolveTranspose_SeqDense(Mat A,Vec xx,Vec yy)
325{
231 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
232 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
233 PetscFunctionReturn(0);
234}
235
236#undef __FUNCT__
237#define __FUNCT__ "MatMatSolve_SeqDense"
238PetscErrorCode MatMatSolve_SeqDense(Mat A,Mat B,Mat X)

--- 40 unchanged lines hidden (view full) ---

279 ierr = PetscLogFlops(nrhs*(2.0*m*m - m));CHKERRQ(ierr);
280 PetscFunctionReturn(0);
281}
282
283#undef __FUNCT__
284#define __FUNCT__ "MatSolveTranspose_SeqDense"
285PetscErrorCode MatSolveTranspose_SeqDense(Mat A,Vec xx,Vec yy)
286{
326 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
327 PetscErrorCode ierr;
328 const PetscScalar *x;
329 PetscScalar *y;
330 PetscBLASInt one = 1,info,m;
287 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
288 PetscErrorCode ierr;
289 PetscScalar *x,*y;
290 PetscBLASInt one = 1,info,m;
331
332 PetscFunctionBegin;
333 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
291
292 PetscFunctionBegin;
293 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
334 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
294 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
335 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
336 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
337 /* assume if pivots exist then use LU; else Cholesky */
338 if (mat->pivots) {
339#if defined(PETSC_MISSING_LAPACK_GETRS)
340 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"GETRS - Lapack routine is unavailable.");
341#else
342 PetscStackCallBLAS("LAPACKgetrs",LAPACKgetrs_("T",&m,&one,mat->v,&mat->lda,mat->pivots,y,&m,&info));
343 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS - Bad solve");
344#endif
345 } else {
346#if defined(PETSC_MISSING_LAPACK_POTRS)
347 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"POTRS - Lapack routine is unavailable.");
348#else
349 PetscStackCallBLAS("LAPACKpotrs",LAPACKpotrs_("L",&m,&one,mat->v,&mat->lda,y,&m,&info));
350 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS - Bad solve");
351#endif
352 }
295 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
296 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
297 /* assume if pivots exist then use LU; else Cholesky */
298 if (mat->pivots) {
299#if defined(PETSC_MISSING_LAPACK_GETRS)
300 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"GETRS - Lapack routine is unavailable.");
301#else
302 PetscStackCallBLAS("LAPACKgetrs",LAPACKgetrs_("T",&m,&one,mat->v,&mat->lda,mat->pivots,y,&m,&info));
303 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS - Bad solve");
304#endif
305 } else {
306#if defined(PETSC_MISSING_LAPACK_POTRS)
307 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"POTRS - Lapack routine is unavailable.");
308#else
309 PetscStackCallBLAS("LAPACKpotrs",LAPACKpotrs_("L",&m,&one,mat->v,&mat->lda,y,&m,&info));
310 if (info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"POTRS - Bad solve");
311#endif
312 }
353 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
313 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
354 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
355 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
356 PetscFunctionReturn(0);
357}
358
359#undef __FUNCT__
360#define __FUNCT__ "MatSolveAdd_SeqDense"
361PetscErrorCode MatSolveAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
362{
314 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
315 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
316 PetscFunctionReturn(0);
317}
318
319#undef __FUNCT__
320#define __FUNCT__ "MatSolveAdd_SeqDense"
321PetscErrorCode MatSolveAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
322{
363 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
364 PetscErrorCode ierr;
365 const PetscScalar *x;
366 PetscScalar *y,sone = 1.0;
367 Vec tmp = 0;
368 PetscBLASInt one = 1,info,m;
323 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
324 PetscErrorCode ierr;
325 PetscScalar *x,*y,sone = 1.0;
326 Vec tmp = 0;
327 PetscBLASInt one = 1,info,m;
369
370 PetscFunctionBegin;
371 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
328
329 PetscFunctionBegin;
330 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
372 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
331 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
373 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
374 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
375 if (yy == zz) {
376 ierr = VecDuplicate(yy,&tmp);CHKERRQ(ierr);
377 ierr = PetscLogObjectParent((PetscObject)A,(PetscObject)tmp);CHKERRQ(ierr);
378 ierr = VecCopy(yy,tmp);CHKERRQ(ierr);
379 }
380 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);

--- 14 unchanged lines hidden (view full) ---

395#endif
396 }
397 if (tmp) {
398 ierr = VecAXPY(yy,sone,tmp);CHKERRQ(ierr);
399 ierr = VecDestroy(&tmp);CHKERRQ(ierr);
400 } else {
401 ierr = VecAXPY(yy,sone,zz);CHKERRQ(ierr);
402 }
332 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
333 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
334 if (yy == zz) {
335 ierr = VecDuplicate(yy,&tmp);CHKERRQ(ierr);
336 ierr = PetscLogObjectParent((PetscObject)A,(PetscObject)tmp);CHKERRQ(ierr);
337 ierr = VecCopy(yy,tmp);CHKERRQ(ierr);
338 }
339 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);

--- 14 unchanged lines hidden (view full) ---

354#endif
355 }
356 if (tmp) {
357 ierr = VecAXPY(yy,sone,tmp);CHKERRQ(ierr);
358 ierr = VecDestroy(&tmp);CHKERRQ(ierr);
359 } else {
360 ierr = VecAXPY(yy,sone,zz);CHKERRQ(ierr);
361 }
403 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
362 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
404 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
405 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n);CHKERRQ(ierr);
406 PetscFunctionReturn(0);
407}
408
409#undef __FUNCT__
410#define __FUNCT__ "MatSolveTransposeAdd_SeqDense"
411PetscErrorCode MatSolveTransposeAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
412{
363 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
364 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n);CHKERRQ(ierr);
365 PetscFunctionReturn(0);
366}
367
368#undef __FUNCT__
369#define __FUNCT__ "MatSolveTransposeAdd_SeqDense"
370PetscErrorCode MatSolveTransposeAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
371{
413 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
414 PetscErrorCode ierr;
415 const PetscScalar *x;
416 PetscScalar *y,sone = 1.0;
417 Vec tmp;
418 PetscBLASInt one = 1,info,m;
372 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
373 PetscErrorCode ierr;
374 PetscScalar *x,*y,sone = 1.0;
375 Vec tmp;
376 PetscBLASInt one = 1,info,m;
419
420 PetscFunctionBegin;
421 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
422 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
377
378 PetscFunctionBegin;
379 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
380 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
423 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
381 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
424 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
425 if (yy == zz) {
426 ierr = VecDuplicate(yy,&tmp);CHKERRQ(ierr);
427 ierr = PetscLogObjectParent((PetscObject)A,(PetscObject)tmp);CHKERRQ(ierr);
428 ierr = VecCopy(yy,tmp);CHKERRQ(ierr);
429 }
430 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
431 /* assume if pivots exist then use LU; else Cholesky */

--- 13 unchanged lines hidden (view full) ---

445#endif
446 }
447 if (tmp) {
448 ierr = VecAXPY(yy,sone,tmp);CHKERRQ(ierr);
449 ierr = VecDestroy(&tmp);CHKERRQ(ierr);
450 } else {
451 ierr = VecAXPY(yy,sone,zz);CHKERRQ(ierr);
452 }
382 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
383 if (yy == zz) {
384 ierr = VecDuplicate(yy,&tmp);CHKERRQ(ierr);
385 ierr = PetscLogObjectParent((PetscObject)A,(PetscObject)tmp);CHKERRQ(ierr);
386 ierr = VecCopy(yy,tmp);CHKERRQ(ierr);
387 }
388 ierr = PetscMemcpy(y,x,A->rmap->n*sizeof(PetscScalar));CHKERRQ(ierr);
389 /* assume if pivots exist then use LU; else Cholesky */

--- 13 unchanged lines hidden (view full) ---

403#endif
404 }
405 if (tmp) {
406 ierr = VecAXPY(yy,sone,tmp);CHKERRQ(ierr);
407 ierr = VecDestroy(&tmp);CHKERRQ(ierr);
408 } else {
409 ierr = VecAXPY(yy,sone,zz);CHKERRQ(ierr);
410 }
453 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
411 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
454 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
455 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n);CHKERRQ(ierr);
456 PetscFunctionReturn(0);
457}
458
459/* ---------------------------------------------------------------*/
460/* COMMENT: I have chosen to hide row permutation in the pivots,
461 rather than put it in the Mat->row slot.*/

--- 8 unchanged lines hidden (view full) ---

470 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
471 PetscErrorCode ierr;
472 PetscBLASInt n,m,info;
473
474 PetscFunctionBegin;
475 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
476 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
477 if (!mat->pivots) {
412 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
413 ierr = PetscLogFlops(2.0*A->cmap->n*A->cmap->n);CHKERRQ(ierr);
414 PetscFunctionReturn(0);
415}
416
417/* ---------------------------------------------------------------*/
418/* COMMENT: I have chosen to hide row permutation in the pivots,
419 rather than put it in the Mat->row slot.*/

--- 8 unchanged lines hidden (view full) ---

428 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
429 PetscErrorCode ierr;
430 PetscBLASInt n,m,info;
431
432 PetscFunctionBegin;
433 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
434 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
435 if (!mat->pivots) {
478 ierr = PetscMalloc1(A->rmap->n+1,&mat->pivots);CHKERRQ(ierr);
436 ierr = PetscMalloc1((A->rmap->n+1),&mat->pivots);CHKERRQ(ierr);
479 ierr = PetscLogObjectMemory((PetscObject)A,A->rmap->n*sizeof(PetscBLASInt));CHKERRQ(ierr);
480 }
481 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
482 ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
483 PetscStackCallBLAS("LAPACKgetrf",LAPACKgetrf_(&m,&n,mat->v,&mat->lda,mat->pivots,&info));
484 ierr = PetscFPTrapPop();CHKERRQ(ierr);
485
486 if (info<0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"Bad argument to LU factorization");

--- 29 unchanged lines hidden (view full) ---

516 PetscStackCallBLAS("LAPACKpotrf",LAPACKpotrf_("L",&n,mat->v,&mat->lda,&info));
517 if (info) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_MAT_CH_ZRPVT,"Bad factorization: zero pivot in row %D",(PetscInt)info-1);
518 A->ops->solve = MatSolve_SeqDense;
519 A->ops->solvetranspose = MatSolveTranspose_SeqDense;
520 A->ops->solveadd = MatSolveAdd_SeqDense;
521 A->ops->solvetransposeadd = MatSolveTransposeAdd_SeqDense;
522 A->factortype = MAT_FACTOR_CHOLESKY;
523
437 ierr = PetscLogObjectMemory((PetscObject)A,A->rmap->n*sizeof(PetscBLASInt));CHKERRQ(ierr);
438 }
439 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
440 ierr = PetscFPTrapPush(PETSC_FP_TRAP_OFF);CHKERRQ(ierr);
441 PetscStackCallBLAS("LAPACKgetrf",LAPACKgetrf_(&m,&n,mat->v,&mat->lda,mat->pivots,&info));
442 ierr = PetscFPTrapPop();CHKERRQ(ierr);
443
444 if (info<0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"Bad argument to LU factorization");

--- 29 unchanged lines hidden (view full) ---

474 PetscStackCallBLAS("LAPACKpotrf",LAPACKpotrf_("L",&n,mat->v,&mat->lda,&info));
475 if (info) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_MAT_CH_ZRPVT,"Bad factorization: zero pivot in row %D",(PetscInt)info-1);
476 A->ops->solve = MatSolve_SeqDense;
477 A->ops->solvetranspose = MatSolveTranspose_SeqDense;
478 A->ops->solveadd = MatSolveAdd_SeqDense;
479 A->ops->solvetransposeadd = MatSolveTransposeAdd_SeqDense;
480 A->factortype = MAT_FACTOR_CHOLESKY;
481
524 ierr = PetscLogFlops((A->cmap->n*A->cmap->n*A->cmap->n)/3.0);CHKERRQ(ierr);
482 ierr = PetscLogFlops((1.0*A->cmap->n*A->cmap->n*A->cmap->n)/3.0);CHKERRQ(ierr);
525#endif
526 PetscFunctionReturn(0);
527}
528
529
530#undef __FUNCT__
531#define __FUNCT__ "MatCholeskyFactorNumeric_SeqDense"
532PetscErrorCode MatCholeskyFactorNumeric_SeqDense(Mat fact,Mat A,const MatFactorInfo *info_dummy)

--- 50 unchanged lines hidden (view full) ---

583 PetscFunctionReturn(0);
584}
585
586/* ------------------------------------------------------------------*/
587#undef __FUNCT__
588#define __FUNCT__ "MatSOR_SeqDense"
589PetscErrorCode MatSOR_SeqDense(Mat A,Vec bb,PetscReal omega,MatSORType flag,PetscReal shift,PetscInt its,PetscInt lits,Vec xx)
590{
483#endif
484 PetscFunctionReturn(0);
485}
486
487
488#undef __FUNCT__
489#define __FUNCT__ "MatCholeskyFactorNumeric_SeqDense"
490PetscErrorCode MatCholeskyFactorNumeric_SeqDense(Mat fact,Mat A,const MatFactorInfo *info_dummy)

--- 50 unchanged lines hidden (view full) ---

541 PetscFunctionReturn(0);
542}
543
544/* ------------------------------------------------------------------*/
545#undef __FUNCT__
546#define __FUNCT__ "MatSOR_SeqDense"
547PetscErrorCode MatSOR_SeqDense(Mat A,Vec bb,PetscReal omega,MatSORType flag,PetscReal shift,PetscInt its,PetscInt lits,Vec xx)
548{
591 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
592 PetscScalar *x,*v = mat->v,zero = 0.0,xt;
593 const PetscScalar *b;
594 PetscErrorCode ierr;
595 PetscInt m = A->rmap->n,i;
596 PetscBLASInt o = 1,bm;
549 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
550 PetscScalar *x,*b,*v = mat->v,zero = 0.0,xt;
551 PetscErrorCode ierr;
552 PetscInt m = A->rmap->n,i;
553 PetscBLASInt o = 1,bm;
597
598 PetscFunctionBegin;
599 ierr = PetscBLASIntCast(m,&bm);CHKERRQ(ierr);
600 if (flag & SOR_ZERO_INITIAL_GUESS) {
601 /* this is a hack fix, should have another version without the second BLASdot */
602 ierr = VecSet(xx,zero);CHKERRQ(ierr);
603 }
604 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
554
555 PetscFunctionBegin;
556 ierr = PetscBLASIntCast(m,&bm);CHKERRQ(ierr);
557 if (flag & SOR_ZERO_INITIAL_GUESS) {
558 /* this is a hack fix, should have another version without the second BLASdot */
559 ierr = VecSet(xx,zero);CHKERRQ(ierr);
560 }
561 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
605 ierr = VecGetArrayRead(bb,&b);CHKERRQ(ierr);
562 ierr = VecGetArray(bb,&b);CHKERRQ(ierr);
606 its = its*lits;
607 if (its <= 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Relaxation requires global its %D and local its %D both positive",its,lits);
608 while (its--) {
609 if (flag & SOR_FORWARD_SWEEP || flag & SOR_LOCAL_FORWARD_SWEEP) {
610 for (i=0; i<m; i++) {
611 PetscStackCallBLAS("BLASdot",xt = b[i] - BLASdot_(&bm,v+i,&bm,x,&o));
612 x[i] = (1. - omega)*x[i] + omega*(xt+v[i + i*m]*x[i])/(v[i + i*m]+shift);
613 }
614 }
615 if (flag & SOR_BACKWARD_SWEEP || flag & SOR_LOCAL_BACKWARD_SWEEP) {
616 for (i=m-1; i>=0; i--) {
617 PetscStackCallBLAS("BLASdot",xt = b[i] - BLASdot_(&bm,v+i,&bm,x,&o));
618 x[i] = (1. - omega)*x[i] + omega*(xt+v[i + i*m]*x[i])/(v[i + i*m]+shift);
619 }
620 }
621 }
563 its = its*lits;
564 if (its <= 0) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Relaxation requires global its %D and local its %D both positive",its,lits);
565 while (its--) {
566 if (flag & SOR_FORWARD_SWEEP || flag & SOR_LOCAL_FORWARD_SWEEP) {
567 for (i=0; i<m; i++) {
568 PetscStackCallBLAS("BLASdot",xt = b[i] - BLASdot_(&bm,v+i,&bm,x,&o));
569 x[i] = (1. - omega)*x[i] + omega*(xt+v[i + i*m]*x[i])/(v[i + i*m]+shift);
570 }
571 }
572 if (flag & SOR_BACKWARD_SWEEP || flag & SOR_LOCAL_BACKWARD_SWEEP) {
573 for (i=m-1; i>=0; i--) {
574 PetscStackCallBLAS("BLASdot",xt = b[i] - BLASdot_(&bm,v+i,&bm,x,&o));
575 x[i] = (1. - omega)*x[i] + omega*(xt+v[i + i*m]*x[i])/(v[i + i*m]+shift);
576 }
577 }
578 }
622 ierr = VecRestoreArrayRead(bb,&b);CHKERRQ(ierr);
579 ierr = VecRestoreArray(bb,&b);CHKERRQ(ierr);
623 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
624 PetscFunctionReturn(0);
625}
626
627/* -----------------------------------------------------------------*/
628#undef __FUNCT__
629#define __FUNCT__ "MatMultTranspose_SeqDense"
630PetscErrorCode MatMultTranspose_SeqDense(Mat A,Vec xx,Vec yy)
631{
580 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
581 PetscFunctionReturn(0);
582}
583
584/* -----------------------------------------------------------------*/
585#undef __FUNCT__
586#define __FUNCT__ "MatMultTranspose_SeqDense"
587PetscErrorCode MatMultTranspose_SeqDense(Mat A,Vec xx,Vec yy)
588{
632 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
633 const PetscScalar *v = mat->v,*x;
634 PetscScalar *y;
635 PetscErrorCode ierr;
636 PetscBLASInt m, n,_One=1;
637 PetscScalar _DOne=1.0,_DZero=0.0;
589 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
590 PetscScalar *v = mat->v,*x,*y;
591 PetscErrorCode ierr;
592 PetscBLASInt m, n,_One=1;
593 PetscScalar _DOne=1.0,_DZero=0.0;
638
639 PetscFunctionBegin;
640 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
641 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
642 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
594
595 PetscFunctionBegin;
596 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
597 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
598 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
643 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
599 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
644 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
645 PetscStackCallBLAS("BLASgemv",BLASgemv_("T",&m,&n,&_DOne,v,&mat->lda,x,&_One,&_DZero,y,&_One));
600 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
601 PetscStackCallBLAS("BLASgemv",BLASgemv_("T",&m,&n,&_DOne,v,&mat->lda,x,&_One,&_DZero,y,&_One));
646 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
602 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
647 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
648 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
649 PetscFunctionReturn(0);
650}
651
652#undef __FUNCT__
653#define __FUNCT__ "MatMult_SeqDense"
654PetscErrorCode MatMult_SeqDense(Mat A,Vec xx,Vec yy)
655{
603 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
604 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n - A->cmap->n);CHKERRQ(ierr);
605 PetscFunctionReturn(0);
606}
607
608#undef __FUNCT__
609#define __FUNCT__ "MatMult_SeqDense"
610PetscErrorCode MatMult_SeqDense(Mat A,Vec xx,Vec yy)
611{
656 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
657 PetscScalar *y,_DOne=1.0,_DZero=0.0;
658 PetscErrorCode ierr;
659 PetscBLASInt m, n, _One=1;
660 const PetscScalar *v = mat->v,*x;
612 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
613 PetscScalar *v = mat->v,*x,*y,_DOne=1.0,_DZero=0.0;
614 PetscErrorCode ierr;
615 PetscBLASInt m, n, _One=1;
661
662 PetscFunctionBegin;
663 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
664 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
665 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
616
617 PetscFunctionBegin;
618 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
619 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
620 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
666 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
621 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
667 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
668 PetscStackCallBLAS("BLASgemv",BLASgemv_("N",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DZero,y,&_One));
622 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
623 PetscStackCallBLAS("BLASgemv",BLASgemv_("N",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DZero,y,&_One));
669 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
624 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
670 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
671 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n - A->rmap->n);CHKERRQ(ierr);
672 PetscFunctionReturn(0);
673}
674
675#undef __FUNCT__
676#define __FUNCT__ "MatMultAdd_SeqDense"
677PetscErrorCode MatMultAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
678{
625 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
626 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n - A->rmap->n);CHKERRQ(ierr);
627 PetscFunctionReturn(0);
628}
629
630#undef __FUNCT__
631#define __FUNCT__ "MatMultAdd_SeqDense"
632PetscErrorCode MatMultAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
633{
679 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
680 const PetscScalar *v = mat->v,*x;
681 PetscScalar *y,_DOne=1.0;
682 PetscErrorCode ierr;
683 PetscBLASInt m, n, _One=1;
634 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
635 PetscScalar *v = mat->v,*x,*y,_DOne=1.0;
636 PetscErrorCode ierr;
637 PetscBLASInt m, n, _One=1;
684
685 PetscFunctionBegin;
686 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
687 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
688 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
689 if (zz != yy) {ierr = VecCopy(zz,yy);CHKERRQ(ierr);}
638
639 PetscFunctionBegin;
640 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
641 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
642 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
643 if (zz != yy) {ierr = VecCopy(zz,yy);CHKERRQ(ierr);}
690 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
644 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
691 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
692 PetscStackCallBLAS("BLASgemv",BLASgemv_("N",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DOne,y,&_One));
645 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
646 PetscStackCallBLAS("BLASgemv",BLASgemv_("N",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DOne,y,&_One));
693 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
647 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
694 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
695 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n);CHKERRQ(ierr);
696 PetscFunctionReturn(0);
697}
698
699#undef __FUNCT__
700#define __FUNCT__ "MatMultTransposeAdd_SeqDense"
701PetscErrorCode MatMultTransposeAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
702{
648 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
649 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n);CHKERRQ(ierr);
650 PetscFunctionReturn(0);
651}
652
653#undef __FUNCT__
654#define __FUNCT__ "MatMultTransposeAdd_SeqDense"
655PetscErrorCode MatMultTransposeAdd_SeqDense(Mat A,Vec xx,Vec zz,Vec yy)
656{
703 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
704 const PetscScalar *v = mat->v,*x;
705 PetscScalar *y;
706 PetscErrorCode ierr;
707 PetscBLASInt m, n, _One=1;
708 PetscScalar _DOne=1.0;
657 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
658 PetscScalar *v = mat->v,*x,*y;
659 PetscErrorCode ierr;
660 PetscBLASInt m, n, _One=1;
661 PetscScalar _DOne=1.0;
709
710 PetscFunctionBegin;
711 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
712 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
713 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
714 if (zz != yy) {ierr = VecCopy(zz,yy);CHKERRQ(ierr);}
662
663 PetscFunctionBegin;
664 ierr = PetscBLASIntCast(A->rmap->n,&m);CHKERRQ(ierr);
665 ierr = PetscBLASIntCast(A->cmap->n,&n);CHKERRQ(ierr);
666 if (!A->rmap->n || !A->cmap->n) PetscFunctionReturn(0);
667 if (zz != yy) {ierr = VecCopy(zz,yy);CHKERRQ(ierr);}
715 ierr = VecGetArrayRead(xx,&x);CHKERRQ(ierr);
668 ierr = VecGetArray(xx,&x);CHKERRQ(ierr);
716 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
717 PetscStackCallBLAS("BLASgemv",BLASgemv_("T",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DOne,y,&_One));
669 ierr = VecGetArray(yy,&y);CHKERRQ(ierr);
670 PetscStackCallBLAS("BLASgemv",BLASgemv_("T",&m,&n,&_DOne,v,&(mat->lda),x,&_One,&_DOne,y,&_One));
718 ierr = VecRestoreArrayRead(xx,&x);CHKERRQ(ierr);
671 ierr = VecRestoreArray(xx,&x);CHKERRQ(ierr);
719 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
720 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n);CHKERRQ(ierr);
721 PetscFunctionReturn(0);
722}
723
724/* -----------------------------------------------------------------*/
725#undef __FUNCT__
726#define __FUNCT__ "MatGetRow_SeqDense"
727PetscErrorCode MatGetRow_SeqDense(Mat A,PetscInt row,PetscInt *ncols,PetscInt **cols,PetscScalar **vals)
728{
729 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
730 PetscScalar *v;
731 PetscErrorCode ierr;
732 PetscInt i;
733
734 PetscFunctionBegin;
735 *ncols = A->cmap->n;
736 if (cols) {
672 ierr = VecRestoreArray(yy,&y);CHKERRQ(ierr);
673 ierr = PetscLogFlops(2.0*A->rmap->n*A->cmap->n);CHKERRQ(ierr);
674 PetscFunctionReturn(0);
675}
676
677/* -----------------------------------------------------------------*/
678#undef __FUNCT__
679#define __FUNCT__ "MatGetRow_SeqDense"
680PetscErrorCode MatGetRow_SeqDense(Mat A,PetscInt row,PetscInt *ncols,PetscInt **cols,PetscScalar **vals)
681{
682 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
683 PetscScalar *v;
684 PetscErrorCode ierr;
685 PetscInt i;
686
687 PetscFunctionBegin;
688 *ncols = A->cmap->n;
689 if (cols) {
737 ierr = PetscMalloc1(A->cmap->n+1,cols);CHKERRQ(ierr);
690 ierr = PetscMalloc1((A->cmap->n+1),cols);CHKERRQ(ierr);
738 for (i=0; i<A->cmap->n; i++) (*cols)[i] = i;
739 }
740 if (vals) {
691 for (i=0; i<A->cmap->n; i++) (*cols)[i] = i;
692 }
693 if (vals) {
741 ierr = PetscMalloc1(A->cmap->n+1,vals);CHKERRQ(ierr);
694 ierr = PetscMalloc1((A->cmap->n+1),vals);CHKERRQ(ierr);
742 v = mat->v + row;
743 for (i=0; i<A->cmap->n; i++) {(*vals)[i] = *v; v += mat->lda;}
744 }
745 PetscFunctionReturn(0);
746}
747
748#undef __FUNCT__
749#define __FUNCT__ "MatRestoreRow_SeqDense"

--- 134 unchanged lines hidden (view full) ---

884 }
885 ierr = MatSeqDenseSetPreallocation(newmat,NULL);CHKERRQ(ierr);
886
887 if (nz == MATRIX_BINARY_FORMAT_DENSE) { /* matrix in file is dense */
888 a = (Mat_SeqDense*)newmat->data;
889 v = a->v;
890 /* Allocate some temp space to read in the values and then flip them
891 from row major to column major */
695 v = mat->v + row;
696 for (i=0; i<A->cmap->n; i++) {(*vals)[i] = *v; v += mat->lda;}
697 }
698 PetscFunctionReturn(0);
699}
700
701#undef __FUNCT__
702#define __FUNCT__ "MatRestoreRow_SeqDense"

--- 134 unchanged lines hidden (view full) ---

837 }
838 ierr = MatSeqDenseSetPreallocation(newmat,NULL);CHKERRQ(ierr);
839
840 if (nz == MATRIX_BINARY_FORMAT_DENSE) { /* matrix in file is dense */
841 a = (Mat_SeqDense*)newmat->data;
842 v = a->v;
843 /* Allocate some temp space to read in the values and then flip them
844 from row major to column major */
892 ierr = PetscMalloc1(M*N > 0 ? M*N : 1,&w);CHKERRQ(ierr);
845 ierr = PetscMalloc1((M*N > 0 ? M*N : 1),&w);CHKERRQ(ierr);
893 /* read in nonzero values */
894 ierr = PetscBinaryRead(fd,w,M*N,PETSC_SCALAR);CHKERRQ(ierr);
895 /* now flip the values and store them in the matrix*/
896 for (j=0; j<N; j++) {
897 for (i=0; i<M; i++) {
898 *v++ =w[i*N+j];
899 }
900 }
901 ierr = PetscFree(w);CHKERRQ(ierr);
902 } else {
903 /* read row lengths */
846 /* read in nonzero values */
847 ierr = PetscBinaryRead(fd,w,M*N,PETSC_SCALAR);CHKERRQ(ierr);
848 /* now flip the values and store them in the matrix*/
849 for (j=0; j<N; j++) {
850 for (i=0; i<M; i++) {
851 *v++ =w[i*N+j];
852 }
853 }
854 ierr = PetscFree(w);CHKERRQ(ierr);
855 } else {
856 /* read row lengths */
904 ierr = PetscMalloc1(M+1,&rowlengths);CHKERRQ(ierr);
857 ierr = PetscMalloc1((M+1),&rowlengths);CHKERRQ(ierr);
905 ierr = PetscBinaryRead(fd,rowlengths,M,PETSC_INT);CHKERRQ(ierr);
906
907 a = (Mat_SeqDense*)newmat->data;
908 v = a->v;
909
910 /* read column indices and nonzeros */
858 ierr = PetscBinaryRead(fd,rowlengths,M,PETSC_INT);CHKERRQ(ierr);
859
860 a = (Mat_SeqDense*)newmat->data;
861 v = a->v;
862
863 /* read column indices and nonzeros */
911 ierr = PetscMalloc1(nz+1,&scols);CHKERRQ(ierr);
864 ierr = PetscMalloc1((nz+1),&scols);CHKERRQ(ierr);
912 cols = scols;
913 ierr = PetscBinaryRead(fd,cols,nz,PETSC_INT);CHKERRQ(ierr);
865 cols = scols;
866 ierr = PetscBinaryRead(fd,cols,nz,PETSC_INT);CHKERRQ(ierr);
914 ierr = PetscMalloc1(nz+1,&svals);CHKERRQ(ierr);
867 ierr = PetscMalloc1((nz+1),&svals);CHKERRQ(ierr);
915 vals = svals;
916 ierr = PetscBinaryRead(fd,vals,nz,PETSC_SCALAR);CHKERRQ(ierr);
917
918 /* insert into matrix */
919 for (i=0; i<M; i++) {
920 for (j=0; j<rowlengths[i]; j++) v[i+M*scols[j]] = svals[j];
921 svals += rowlengths[i]; scols += rowlengths[i];
922 }

--- 110 unchanged lines hidden (view full) ---

1033 col_lens[1] = m;
1034 col_lens[2] = n;
1035 col_lens[3] = MATRIX_BINARY_FORMAT_DENSE;
1036
1037 ierr = PetscBinaryWrite(fd,col_lens,4,PETSC_INT,PETSC_TRUE);CHKERRQ(ierr);
1038 ierr = PetscFree(col_lens);CHKERRQ(ierr);
1039
1040 /* write out matrix, by rows */
868 vals = svals;
869 ierr = PetscBinaryRead(fd,vals,nz,PETSC_SCALAR);CHKERRQ(ierr);
870
871 /* insert into matrix */
872 for (i=0; i<M; i++) {
873 for (j=0; j<rowlengths[i]; j++) v[i+M*scols[j]] = svals[j];
874 svals += rowlengths[i]; scols += rowlengths[i];
875 }

--- 110 unchanged lines hidden (view full) ---

986 col_lens[1] = m;
987 col_lens[2] = n;
988 col_lens[3] = MATRIX_BINARY_FORMAT_DENSE;
989
990 ierr = PetscBinaryWrite(fd,col_lens,4,PETSC_INT,PETSC_TRUE);CHKERRQ(ierr);
991 ierr = PetscFree(col_lens);CHKERRQ(ierr);
992
993 /* write out matrix, by rows */
1041 ierr = PetscMalloc1(m*n+1,&vals);CHKERRQ(ierr);
994 ierr = PetscMalloc1((m*n+1),&vals);CHKERRQ(ierr);
1042 v = a->v;
1043 for (j=0; j<n; j++) {
1044 for (i=0; i<m; i++) {
1045 vals[j + i*n] = *v++;
1046 }
1047 }
1048 ierr = PetscBinaryWrite(fd,vals,n*m,PETSC_SCALAR,PETSC_FALSE);CHKERRQ(ierr);
1049 ierr = PetscFree(vals);CHKERRQ(ierr);
1050 } else {
995 v = a->v;
996 for (j=0; j<n; j++) {
997 for (i=0; i<m; i++) {
998 vals[j + i*n] = *v++;
999 }
1000 }
1001 ierr = PetscBinaryWrite(fd,vals,n*m,PETSC_SCALAR,PETSC_FALSE);CHKERRQ(ierr);
1002 ierr = PetscFree(vals);CHKERRQ(ierr);
1003 } else {
1051 ierr = PetscMalloc1(4+nz,&col_lens);CHKERRQ(ierr);
1004 ierr = PetscMalloc1((4+nz),&col_lens);CHKERRQ(ierr);
1052
1053 col_lens[0] = MAT_FILE_CLASSID;
1054 col_lens[1] = m;
1055 col_lens[2] = n;
1056 col_lens[3] = nz;
1057
1058 /* store lengths of each row and write (including header) to file */
1059 for (i=0; i<m; i++) col_lens[4+i] = n;

--- 4 unchanged lines hidden (view full) ---

1064 ict = 0;
1065 for (i=0; i<m; i++) {
1066 for (j=0; j<n; j++) col_lens[ict++] = j;
1067 }
1068 ierr = PetscBinaryWrite(fd,col_lens,nz,PETSC_INT,PETSC_FALSE);CHKERRQ(ierr);
1069 ierr = PetscFree(col_lens);CHKERRQ(ierr);
1070
1071 /* store nonzero values */
1005
1006 col_lens[0] = MAT_FILE_CLASSID;
1007 col_lens[1] = m;
1008 col_lens[2] = n;
1009 col_lens[3] = nz;
1010
1011 /* store lengths of each row and write (including header) to file */
1012 for (i=0; i<m; i++) col_lens[4+i] = n;

--- 4 unchanged lines hidden (view full) ---

1017 ict = 0;
1018 for (i=0; i<m; i++) {
1019 for (j=0; j<n; j++) col_lens[ict++] = j;
1020 }
1021 ierr = PetscBinaryWrite(fd,col_lens,nz,PETSC_INT,PETSC_FALSE);CHKERRQ(ierr);
1022 ierr = PetscFree(col_lens);CHKERRQ(ierr);
1023
1024 /* store nonzero values */
1072 ierr = PetscMalloc1(nz+1,&anonz);CHKERRQ(ierr);
1025 ierr = PetscMalloc1((nz+1),&anonz);CHKERRQ(ierr);
1073 ict = 0;
1074 for (i=0; i<m; i++) {
1075 v = a->v + i;
1076 for (j=0; j<n; j++) {
1077 anonz[ict++] = *v; v += a->lda;
1078 }
1079 }
1080 ierr = PetscBinaryWrite(fd,anonz,nz,PETSC_SCALAR,PETSC_FALSE);CHKERRQ(ierr);

--- 127 unchanged lines hidden (view full) ---

1208
1209 ierr = PetscObjectChangeTypeName((PetscObject)mat,0);CHKERRQ(ierr);
1210 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatDenseGetArray_C",NULL);CHKERRQ(ierr);
1211 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatDenseRestoreArray_C",NULL);CHKERRQ(ierr);
1212 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatConvert_seqdense_seqaij_C",NULL);CHKERRQ(ierr);
1213#if defined(PETSC_HAVE_ELEMENTAL)
1214 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatConvert_seqdense_elemental_C",NULL);CHKERRQ(ierr);
1215#endif
1026 ict = 0;
1027 for (i=0; i<m; i++) {
1028 v = a->v + i;
1029 for (j=0; j<n; j++) {
1030 anonz[ict++] = *v; v += a->lda;
1031 }
1032 }
1033 ierr = PetscBinaryWrite(fd,anonz,nz,PETSC_SCALAR,PETSC_FALSE);CHKERRQ(ierr);

--- 127 unchanged lines hidden (view full) ---

1161
1162 ierr = PetscObjectChangeTypeName((PetscObject)mat,0);CHKERRQ(ierr);
1163 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatDenseGetArray_C",NULL);CHKERRQ(ierr);
1164 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatDenseRestoreArray_C",NULL);CHKERRQ(ierr);
1165 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatConvert_seqdense_seqaij_C",NULL);CHKERRQ(ierr);
1166#if defined(PETSC_HAVE_ELEMENTAL)
1167 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatConvert_seqdense_elemental_C",NULL);CHKERRQ(ierr);
1168#endif
1169 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatGetFactor_petsc_C",NULL);CHKERRQ(ierr);
1216 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatSeqDenseSetPreallocation_C",NULL);CHKERRQ(ierr);
1217 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMult_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1218 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMultSymbolic_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1219 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMultNumeric_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1220 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMult_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1221 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMultSymbolic_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1222 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMultNumeric_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1223 PetscFunctionReturn(0);

--- 90 unchanged lines hidden (view full) ---

1314 ierr = VecRestoreArray(v,&x);CHKERRQ(ierr);
1315 PetscFunctionReturn(0);
1316}
1317
1318#undef __FUNCT__
1319#define __FUNCT__ "MatDiagonalScale_SeqDense"
1320PetscErrorCode MatDiagonalScale_SeqDense(Mat A,Vec ll,Vec rr)
1321{
1170 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatSeqDenseSetPreallocation_C",NULL);CHKERRQ(ierr);
1171 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMult_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1172 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMultSymbolic_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1173 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatMatMultNumeric_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1174 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMult_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1175 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMultSymbolic_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1176 ierr = PetscObjectComposeFunction((PetscObject)mat,"MatTransposeMatMultNumeric_seqaij_seqdense_C",NULL);CHKERRQ(ierr);
1177 PetscFunctionReturn(0);

--- 90 unchanged lines hidden (view full) ---

1268 ierr = VecRestoreArray(v,&x);CHKERRQ(ierr);
1269 PetscFunctionReturn(0);
1270}
1271
1272#undef __FUNCT__
1273#define __FUNCT__ "MatDiagonalScale_SeqDense"
1274PetscErrorCode MatDiagonalScale_SeqDense(Mat A,Vec ll,Vec rr)
1275{
1322 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
1323 const PetscScalar *l,*r;
1324 PetscScalar x,*v;
1325 PetscErrorCode ierr;
1326 PetscInt i,j,m = A->rmap->n,n = A->cmap->n;
1276 Mat_SeqDense *mat = (Mat_SeqDense*)A->data;
1277 PetscScalar *l,*r,x,*v;
1278 PetscErrorCode ierr;
1279 PetscInt i,j,m = A->rmap->n,n = A->cmap->n;
1327
1328 PetscFunctionBegin;
1329 if (ll) {
1330 ierr = VecGetSize(ll,&m);CHKERRQ(ierr);
1280
1281 PetscFunctionBegin;
1282 if (ll) {
1283 ierr = VecGetSize(ll,&m);CHKERRQ(ierr);
1331 ierr = VecGetArrayRead(ll,&l);CHKERRQ(ierr);
1284 ierr = VecGetArray(ll,&l);CHKERRQ(ierr);
1332 if (m != A->rmap->n) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Left scaling vec wrong size");
1333 for (i=0; i<m; i++) {
1334 x = l[i];
1335 v = mat->v + i;
1336 for (j=0; j<n; j++) { (*v) *= x; v+= m;}
1337 }
1285 if (m != A->rmap->n) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Left scaling vec wrong size");
1286 for (i=0; i<m; i++) {
1287 x = l[i];
1288 v = mat->v + i;
1289 for (j=0; j<n; j++) { (*v) *= x; v+= m;}
1290 }
1338 ierr = VecRestoreArrayRead(ll,&l);CHKERRQ(ierr);
1339 ierr = PetscLogFlops(n*m);CHKERRQ(ierr);
1291 ierr = VecRestoreArray(ll,&l);CHKERRQ(ierr);
1292 ierr = PetscLogFlops(1.0*n*m);CHKERRQ(ierr);
1340 }
1341 if (rr) {
1342 ierr = VecGetSize(rr,&n);CHKERRQ(ierr);
1293 }
1294 if (rr) {
1295 ierr = VecGetSize(rr,&n);CHKERRQ(ierr);
1343 ierr = VecGetArrayRead(rr,&r);CHKERRQ(ierr);
1296 ierr = VecGetArray(rr,&r);CHKERRQ(ierr);
1344 if (n != A->cmap->n) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Right scaling vec wrong size");
1345 for (i=0; i<n; i++) {
1346 x = r[i];
1347 v = mat->v + i*m;
1348 for (j=0; j<m; j++) (*v++) *= x;
1349 }
1297 if (n != A->cmap->n) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Right scaling vec wrong size");
1298 for (i=0; i<n; i++) {
1299 x = r[i];
1300 v = mat->v + i*m;
1301 for (j=0; j<m; j++) (*v++) *= x;
1302 }
1350 ierr = VecRestoreArrayRead(rr,&r);CHKERRQ(ierr);
1351 ierr = PetscLogFlops(n*m);CHKERRQ(ierr);
1303 ierr = VecRestoreArray(rr,&r);CHKERRQ(ierr);
1304 ierr = PetscLogFlops(1.0*n*m);CHKERRQ(ierr);
1352 }
1353 PetscFunctionReturn(0);
1354}
1355
1356#undef __FUNCT__
1357#define __FUNCT__ "MatNorm_SeqDense"
1358PetscErrorCode MatNorm_SeqDense(Mat A,NormType type,PetscReal *nrm)
1359{

--- 24 unchanged lines hidden (view full) ---

1384 for (j=0; j<A->cmap->n; j++) {
1385 v = mat->v + j*mat->lda;
1386 sum = 0.0;
1387 for (i=0; i<A->rmap->n; i++) {
1388 sum += PetscAbsScalar(*v); v++;
1389 }
1390 if (sum > *nrm) *nrm = sum;
1391 }
1305 }
1306 PetscFunctionReturn(0);
1307}
1308
1309#undef __FUNCT__
1310#define __FUNCT__ "MatNorm_SeqDense"
1311PetscErrorCode MatNorm_SeqDense(Mat A,NormType type,PetscReal *nrm)
1312{

--- 24 unchanged lines hidden (view full) ---

1337 for (j=0; j<A->cmap->n; j++) {
1338 v = mat->v + j*mat->lda;
1339 sum = 0.0;
1340 for (i=0; i<A->rmap->n; i++) {
1341 sum += PetscAbsScalar(*v); v++;
1342 }
1343 if (sum > *nrm) *nrm = sum;
1344 }
1392 ierr = PetscLogFlops(A->cmap->n*A->rmap->n);CHKERRQ(ierr);
1345 ierr = PetscLogFlops(1.0*A->cmap->n*A->rmap->n);CHKERRQ(ierr);
1393 } else if (type == NORM_INFINITY) {
1394 *nrm = 0.0;
1395 for (j=0; j<A->rmap->n; j++) {
1396 v = mat->v + j;
1397 sum = 0.0;
1398 for (i=0; i<A->cmap->n; i++) {
1399 sum += PetscAbsScalar(*v); v += mat->lda;
1400 }
1401 if (sum > *nrm) *nrm = sum;
1402 }
1346 } else if (type == NORM_INFINITY) {
1347 *nrm = 0.0;
1348 for (j=0; j<A->rmap->n; j++) {
1349 v = mat->v + j;
1350 sum = 0.0;
1351 for (i=0; i<A->cmap->n; i++) {
1352 sum += PetscAbsScalar(*v); v += mat->lda;
1353 }
1354 if (sum > *nrm) *nrm = sum;
1355 }
1403 ierr = PetscLogFlops(A->cmap->n*A->rmap->n);CHKERRQ(ierr);
1356 ierr = PetscLogFlops(1.0*A->cmap->n*A->rmap->n);CHKERRQ(ierr);
1404 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No two norm");
1405 PetscFunctionReturn(0);
1406}
1407
1408#undef __FUNCT__
1409#define __FUNCT__ "MatSetOption_SeqDense"
1410PetscErrorCode MatSetOption_SeqDense(Mat A,MatOption op,PetscBool flg)
1411{

--- 216 unchanged lines hidden (view full) ---

1628#define __FUNCT__ "MatGetSubMatrices_SeqDense"
1629PetscErrorCode MatGetSubMatrices_SeqDense(Mat A,PetscInt n,const IS irow[],const IS icol[],MatReuse scall,Mat *B[])
1630{
1631 PetscErrorCode ierr;
1632 PetscInt i;
1633
1634 PetscFunctionBegin;
1635 if (scall == MAT_INITIAL_MATRIX) {
1357 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No two norm");
1358 PetscFunctionReturn(0);
1359}
1360
1361#undef __FUNCT__
1362#define __FUNCT__ "MatSetOption_SeqDense"
1363PetscErrorCode MatSetOption_SeqDense(Mat A,MatOption op,PetscBool flg)
1364{

--- 216 unchanged lines hidden (view full) ---

1581#define __FUNCT__ "MatGetSubMatrices_SeqDense"
1582PetscErrorCode MatGetSubMatrices_SeqDense(Mat A,PetscInt n,const IS irow[],const IS icol[],MatReuse scall,Mat *B[])
1583{
1584 PetscErrorCode ierr;
1585 PetscInt i;
1586
1587 PetscFunctionBegin;
1588 if (scall == MAT_INITIAL_MATRIX) {
1636 ierr = PetscMalloc1(n+1,B);CHKERRQ(ierr);
1589 ierr = PetscMalloc1((n+1),B);CHKERRQ(ierr);
1637 }
1638
1639 for (i=0; i<n; i++) {
1640 ierr = MatGetSubMatrix_SeqDense(A,irow[i],icol[i],PETSC_DECIDE,scall,&(*B)[i]);CHKERRQ(ierr);
1641 }
1642 PetscFunctionReturn(0);
1643}
1644

--- 614 unchanged lines hidden (view full) ---

2259 if (!b->user_alloc) { ierr = PetscFree(b->v);CHKERRQ(ierr); }
2260 b->v = data;
2261 b->user_alloc = PETSC_TRUE;
2262 }
2263 B->assembled = PETSC_TRUE;
2264 PetscFunctionReturn(0);
2265}
2266
1590 }
1591
1592 for (i=0; i<n; i++) {
1593 ierr = MatGetSubMatrix_SeqDense(A,irow[i],icol[i],PETSC_DECIDE,scall,&(*B)[i]);CHKERRQ(ierr);
1594 }
1595 PetscFunctionReturn(0);
1596}
1597

--- 614 unchanged lines hidden (view full) ---

2212 if (!b->user_alloc) { ierr = PetscFree(b->v);CHKERRQ(ierr); }
2213 b->v = data;
2214 b->user_alloc = PETSC_TRUE;
2215 }
2216 B->assembled = PETSC_TRUE;
2217 PetscFunctionReturn(0);
2218}
2219
2267#if defined(PETSC_HAVE_ELEMENTAL)
2268#undef __FUNCT__
2269#define __FUNCT__ "MatConvert_SeqDense_Elemental"
2270PETSC_EXTERN PetscErrorCode MatConvert_SeqDense_Elemental(Mat A, MatType newtype,MatReuse reuse,Mat *newmat)
2271{
2220#undef __FUNCT__
2221#define __FUNCT__ "MatConvert_SeqDense_Elemental"
2222PETSC_EXTERN PetscErrorCode MatConvert_SeqDense_Elemental(Mat A, MatType newtype,MatReuse reuse,Mat *newmat)
2223{
2272 Mat mat_elemental;
2273 PetscErrorCode ierr;
2274 PetscScalar *array,*v_colwise;
2275 PetscInt M=A->rmap->N,N=A->cmap->N,i,j,k,*rows,*cols;
2276
2277 PetscFunctionBegin;
2224 PetscFunctionBegin;
2278 ierr = PetscMalloc3(M*N,&v_colwise,M,&rows,N,&cols);CHKERRQ(ierr);
2279 ierr = MatDenseGetArray(A,&array);CHKERRQ(ierr);
2280 /* convert column-wise array into row-wise v_colwise, see MatSetValues_Elemental() */
2281 k = 0;
2282 for (j=0; j<N; j++) {
2283 cols[j] = j;
2284 for (i=0; i<M; i++) {
2285 v_colwise[j*M+i] = array[k++];
2286 }
2287 }
2288 for (i=0; i<M; i++) {
2289 rows[i] = i;
2290 }
2291 ierr = MatDenseRestoreArray(A,&array);CHKERRQ(ierr);
2292
2293 ierr = MatCreate(PetscObjectComm((PetscObject)A), &mat_elemental);CHKERRQ(ierr);
2294 ierr = MatSetSizes(mat_elemental,PETSC_DECIDE,PETSC_DECIDE,M,N);CHKERRQ(ierr);
2295 ierr = MatSetType(mat_elemental,MATELEMENTAL);CHKERRQ(ierr);
2296 ierr = MatSetUp(mat_elemental);CHKERRQ(ierr);
2297
2298 /* PETSc-Elemental interaface uses axpy for setting off-processor entries, only ADD_VALUES is allowed */
2299 ierr = MatSetValues(mat_elemental,M,rows,N,cols,v_colwise,ADD_VALUES);CHKERRQ(ierr);
2300 ierr = MatAssemblyBegin(mat_elemental, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
2301 ierr = MatAssemblyEnd(mat_elemental, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
2302 ierr = PetscFree3(v_colwise,rows,cols);CHKERRQ(ierr);
2303
2304 if (reuse == MAT_REUSE_MATRIX) {
2305 ierr = MatHeaderReplace(A,mat_elemental);CHKERRQ(ierr);
2306 } else {
2307 *newmat = mat_elemental;
2308 }
2225 SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for requested operation");
2309 PetscFunctionReturn(0);
2310}
2226 PetscFunctionReturn(0);
2227}
2311#endif
2312
2313#undef __FUNCT__
2314#define __FUNCT__ "MatSeqDenseSetLDA"
2315/*@C
2316 MatSeqDenseSetLDA - Declare the leading dimension of the user-provided array
2317
2318 Input parameter:
2319+ A - the matrix

--- 57 unchanged lines hidden (view full) ---

2377 b->changelda = PETSC_FALSE;
2378
2379 ierr = PetscObjectComposeFunction((PetscObject)B,"MatDenseGetArray_C",MatDenseGetArray_SeqDense);CHKERRQ(ierr);
2380 ierr = PetscObjectComposeFunction((PetscObject)B,"MatDenseRestoreArray_C",MatDenseRestoreArray_SeqDense);CHKERRQ(ierr);
2381 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqdense_seqaij_C",MatConvert_SeqDense_SeqAIJ);CHKERRQ(ierr);
2382#if defined(PETSC_HAVE_ELEMENTAL)
2383 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqdense_elemental_C",MatConvert_SeqDense_Elemental);CHKERRQ(ierr);
2384#endif
2228
2229#undef __FUNCT__
2230#define __FUNCT__ "MatSeqDenseSetLDA"
2231/*@C
2232 MatSeqDenseSetLDA - Declare the leading dimension of the user-provided array
2233
2234 Input parameter:
2235+ A - the matrix

--- 57 unchanged lines hidden (view full) ---

2293 b->changelda = PETSC_FALSE;
2294
2295 ierr = PetscObjectComposeFunction((PetscObject)B,"MatDenseGetArray_C",MatDenseGetArray_SeqDense);CHKERRQ(ierr);
2296 ierr = PetscObjectComposeFunction((PetscObject)B,"MatDenseRestoreArray_C",MatDenseRestoreArray_SeqDense);CHKERRQ(ierr);
2297 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqdense_seqaij_C",MatConvert_SeqDense_SeqAIJ);CHKERRQ(ierr);
2298#if defined(PETSC_HAVE_ELEMENTAL)
2299 ierr = PetscObjectComposeFunction((PetscObject)B,"MatConvert_seqdense_elemental_C",MatConvert_SeqDense_Elemental);CHKERRQ(ierr);
2300#endif
2301 ierr = PetscObjectComposeFunction((PetscObject)B,"MatGetFactor_petsc_C",MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
2385 ierr = PetscObjectComposeFunction((PetscObject)B,"MatSeqDenseSetPreallocation_C",MatSeqDenseSetPreallocation_SeqDense);CHKERRQ(ierr);
2386 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMult_seqaij_seqdense_C",MatMatMult_SeqAIJ_SeqDense);CHKERRQ(ierr);
2387 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMultSymbolic_seqaij_seqdense_C",MatMatMultSymbolic_SeqAIJ_SeqDense);CHKERRQ(ierr);
2388 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMultNumeric_seqaij_seqdense_C",MatMatMultNumeric_SeqAIJ_SeqDense);CHKERRQ(ierr);
2389 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMult_seqaij_seqdense_C",MatTransposeMatMult_SeqAIJ_SeqDense);CHKERRQ(ierr);
2390 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMultSymbolic_seqaij_seqdense_C",MatTransposeMatMultSymbolic_SeqAIJ_SeqDense);CHKERRQ(ierr);
2391 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMultNumeric_seqaij_seqdense_C",MatTransposeMatMultNumeric_SeqAIJ_SeqDense);CHKERRQ(ierr);
2392 ierr = PetscObjectChangeTypeName((PetscObject)B,MATSEQDENSE);CHKERRQ(ierr);
2393 PetscFunctionReturn(0);
2394}
2302 ierr = PetscObjectComposeFunction((PetscObject)B,"MatSeqDenseSetPreallocation_C",MatSeqDenseSetPreallocation_SeqDense);CHKERRQ(ierr);
2303 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMult_seqaij_seqdense_C",MatMatMult_SeqAIJ_SeqDense);CHKERRQ(ierr);
2304 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMultSymbolic_seqaij_seqdense_C",MatMatMultSymbolic_SeqAIJ_SeqDense);CHKERRQ(ierr);
2305 ierr = PetscObjectComposeFunction((PetscObject)B,"MatMatMultNumeric_seqaij_seqdense_C",MatMatMultNumeric_SeqAIJ_SeqDense);CHKERRQ(ierr);
2306 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMult_seqaij_seqdense_C",MatTransposeMatMult_SeqAIJ_SeqDense);CHKERRQ(ierr);
2307 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMultSymbolic_seqaij_seqdense_C",MatTransposeMatMultSymbolic_SeqAIJ_SeqDense);CHKERRQ(ierr);
2308 ierr = PetscObjectComposeFunction((PetscObject)B,"MatTransposeMatMultNumeric_seqaij_seqdense_C",MatTransposeMatMultNumeric_SeqAIJ_SeqDense);CHKERRQ(ierr);
2309 ierr = PetscObjectChangeTypeName((PetscObject)B,MATSEQDENSE);CHKERRQ(ierr);
2310 PetscFunctionReturn(0);
2311}