| 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} |