| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
| 4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
| 5 | |||
| 6 | This file is part of SLEPc. | ||
| 7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
| 8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 9 | */ | ||
| 10 | /* | ||
| 11 | BV implemented as an array of Vecs sharing a contiguous array for elements | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/bvimpl.h> | ||
| 15 | |||
| 16 | typedef struct { | ||
| 17 | Vec *V; | ||
| 18 | PetscScalar *array; | ||
| 19 | PetscBool mpi; | ||
| 20 | } BV_CONTIGUOUS; | ||
| 21 | |||
| 22 | 998 | static PetscErrorCode BVMult_Contiguous(BV Y,PetscScalar alpha,PetscScalar beta,BV X,Mat Q) | |
| 23 | { | ||
| 24 | 998 | BV_CONTIGUOUS *y = (BV_CONTIGUOUS*)Y->data,*x = (BV_CONTIGUOUS*)X->data; | |
| 25 | 998 | const PetscScalar *q; | |
| 26 | 998 | PetscInt ldq; | |
| 27 | |||
| 28 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
998 | PetscFunctionBegin; |
| 29 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
998 | if (Q) { |
| 30 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
798 | PetscCall(MatDenseGetLDA(Q,&ldq)); |
| 31 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
798 | PetscCall(MatDenseGetArrayRead(Q,&q)); |
| 32 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
798 | PetscCall(BVMult_BLAS_Private(Y,Y->n,Y->k-Y->l,X->k-X->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,q+Y->l*ldq+X->l,ldq,beta,y->array+(Y->nc+Y->l)*Y->ld,Y->ld)); |
| 33 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
798 | PetscCall(MatDenseRestoreArrayRead(Q,&q)); |
| 34 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | } else PetscCall(BVAXPY_BLAS_Private(Y,Y->n,Y->k-Y->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,beta,y->array+(Y->nc+Y->l)*Y->ld,Y->ld)); |
| 35 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
196 | PetscFunctionReturn(PETSC_SUCCESS); |
| 36 | } | ||
| 37 | |||
| 38 | 3478 | static PetscErrorCode BVMultVec_Contiguous(BV X,PetscScalar alpha,PetscScalar beta,Vec y,PetscScalar *q) | |
| 39 | { | ||
| 40 | 3478 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
| 41 | 3478 | PetscScalar *py,*qq=q; | |
| 42 | |||
| 43 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3478 | PetscFunctionBegin; |
| 44 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3478 | PetscCall(VecGetArray(y,&py)); |
| 45 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3478 | if (!q) PetscCall(VecGetArray(X->buffer,&qq)); |
| 46 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3478 | PetscCall(BVMultVec_BLAS_Private(X,X->n,X->k-X->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,qq,beta,py)); |
| 47 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3478 | if (!q) PetscCall(VecRestoreArray(X->buffer,&qq)); |
| 48 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3478 | PetscCall(VecRestoreArray(y,&py)); |
| 49 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
693 | PetscFunctionReturn(PETSC_SUCCESS); |
| 50 | } | ||
| 51 | |||
| 52 | 478 | static PetscErrorCode BVMultInPlace_Contiguous(BV V,Mat Q,PetscInt s,PetscInt e) | |
| 53 | { | ||
| 54 | 478 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)V->data; | |
| 55 | 478 | const PetscScalar *q; | |
| 56 | 478 | PetscInt ldq; | |
| 57 | |||
| 58 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
478 | PetscFunctionBegin; |
| 59 |
3/16✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
478 | if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS); |
| 60 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
478 | PetscCall(MatDenseGetLDA(Q,&ldq)); |
| 61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
478 | PetscCall(MatDenseGetArrayRead(Q,&q)); |
| 62 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
478 | PetscCall(BVMultInPlace_BLAS_Private(V,V->n,V->k-V->l,s-V->l,e-V->l,ctx->array+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_FALSE)); |
| 63 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
478 | PetscCall(MatDenseRestoreArrayRead(Q,&q)); |
| 64 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
92 | PetscFunctionReturn(PETSC_SUCCESS); |
| 65 | } | ||
| 66 | |||
| 67 | 10 | static PetscErrorCode BVMultInPlaceHermitianTranspose_Contiguous(BV V,Mat Q,PetscInt s,PetscInt e) | |
| 68 | { | ||
| 69 | 10 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)V->data; | |
| 70 | 10 | const PetscScalar *q; | |
| 71 | 10 | PetscInt ldq; | |
| 72 | |||
| 73 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 74 |
3/16✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10 | if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS); |
| 75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(MatDenseGetLDA(Q,&ldq)); |
| 76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(MatDenseGetArrayRead(Q,&q)); |
| 77 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(BVMultInPlace_BLAS_Private(V,V->n,V->k-V->l,s-V->l,e-V->l,ctx->array+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_TRUE)); |
| 78 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(MatDenseRestoreArrayRead(Q,&q)); |
| 79 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 80 | } | ||
| 81 | |||
| 82 | 2368 | static PetscErrorCode BVDot_Contiguous(BV X,BV Y,Mat M) | |
| 83 | { | ||
| 84 | 2368 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data,*y = (BV_CONTIGUOUS*)Y->data; | |
| 85 | 2368 | PetscScalar *m; | |
| 86 | 2368 | PetscInt ldm; | |
| 87 | |||
| 88 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2368 | PetscFunctionBegin; |
| 89 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2368 | PetscCall(MatDenseGetLDA(M,&ldm)); |
| 90 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2368 | PetscCall(MatDenseGetArray(M,&m)); |
| 91 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2368 | PetscCall(BVDot_BLAS_Private(X,Y->k-Y->l,X->k-X->l,X->n,y->array+(Y->nc+Y->l)*Y->ld,Y->ld,x->array+(X->nc+X->l)*X->ld,X->ld,m+X->l*ldm+Y->l,ldm,x->mpi)); |
| 92 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2368 | PetscCall(MatDenseRestoreArray(M,&m)); |
| 93 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
470 | PetscFunctionReturn(PETSC_SUCCESS); |
| 94 | } | ||
| 95 | |||
| 96 | 3548 | static PetscErrorCode BVDotVec_Contiguous(BV X,Vec y,PetscScalar *q) | |
| 97 | { | ||
| 98 | 3548 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
| 99 | 3548 | const PetscScalar *py; | |
| 100 | 3548 | PetscScalar *qq=q; | |
| 101 | 3548 | Vec z = y; | |
| 102 | |||
| 103 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3548 | PetscFunctionBegin; |
| 104 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3548 | if (PetscUnlikely(X->matrix)) { |
| 105 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
570 | PetscCall(BV_IPMatMult(X,y)); |
| 106 | 570 | z = X->Bx; | |
| 107 | } | ||
| 108 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3548 | PetscCall(VecGetArrayRead(z,&py)); |
| 109 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3548 | if (!q) PetscCall(VecGetArray(X->buffer,&qq)); |
| 110 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3548 | PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,x->array+(X->nc+X->l)*X->ld,X->ld,py,qq,x->mpi)); |
| 111 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3548 | if (!q) PetscCall(VecRestoreArray(X->buffer,&qq)); |
| 112 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3548 | PetscCall(VecRestoreArrayRead(z,&py)); |
| 113 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
707 | PetscFunctionReturn(PETSC_SUCCESS); |
| 114 | } | ||
| 115 | |||
| 116 | 40 | static PetscErrorCode BVDotVec_Local_Contiguous(BV X,Vec y,PetscScalar *m) | |
| 117 | { | ||
| 118 | 40 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
| 119 | 40 | PetscScalar *py; | |
| 120 | 40 | Vec z = y; | |
| 121 | |||
| 122 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
| 123 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
40 | if (PetscUnlikely(X->matrix)) { |
| 124 | ✗ | PetscCall(BV_IPMatMult(X,y)); | |
| 125 | ✗ | z = X->Bx; | |
| 126 | } | ||
| 127 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(VecGetArray(z,&py)); |
| 128 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,x->array+(X->nc+X->l)*X->ld,X->ld,py,m,PETSC_FALSE)); |
| 129 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(VecRestoreArray(z,&py)); |
| 130 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
8 | PetscFunctionReturn(PETSC_SUCCESS); |
| 131 | } | ||
| 132 | |||
| 133 | 3184 | static PetscErrorCode BVScale_Contiguous(BV bv,PetscInt j,PetscScalar alpha) | |
| 134 | { | ||
| 135 | 3184 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 136 | |||
| 137 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3184 | PetscFunctionBegin; |
| 138 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
3184 | if (!bv->n) PetscFunctionReturn(PETSC_SUCCESS); |
| 139 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3184 | if (PetscUnlikely(j<0)) PetscCall(BVScale_BLAS_Private(bv,(bv->k-bv->l)*bv->ld,ctx->array+(bv->nc+bv->l)*bv->ld,alpha)); |
| 140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3126 | else PetscCall(BVScale_BLAS_Private(bv,bv->n,ctx->array+(bv->nc+j)*bv->ld,alpha)); |
| 141 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
634 | PetscFunctionReturn(PETSC_SUCCESS); |
| 142 | } | ||
| 143 | |||
| 144 | 1123 | static PetscErrorCode BVNorm_Contiguous(BV bv,PetscInt j,NormType type,PetscReal *val) | |
| 145 | { | ||
| 146 | 1123 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 147 | |||
| 148 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1123 | PetscFunctionBegin; |
| 149 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1123 | if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,ctx->mpi)); |
| 150 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
425 | else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,ctx->array+(bv->nc+j)*bv->ld,bv->ld,type,val,ctx->mpi)); |
| 151 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
217 | PetscFunctionReturn(PETSC_SUCCESS); |
| 152 | } | ||
| 153 | |||
| 154 | 20 | static PetscErrorCode BVNorm_Local_Contiguous(BV bv,PetscInt j,NormType type,PetscReal *val) | |
| 155 | { | ||
| 156 | 20 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 157 | |||
| 158 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 159 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
20 | if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,PETSC_FALSE)); |
| 160 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,ctx->array+(bv->nc+j)*bv->ld,bv->ld,type,val,PETSC_FALSE)); |
| 161 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
| 162 | } | ||
| 163 | |||
| 164 | 45 | static PetscErrorCode BVNormalize_Contiguous(BV bv,PetscScalar *eigi) | |
| 165 | { | ||
| 166 | 45 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 167 | 45 | PetscScalar *wi=NULL; | |
| 168 | |||
| 169 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
| 170 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
45 | if (eigi) wi = eigi+bv->l; |
| 171 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
45 | PetscCall(BVNormalize_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,wi,ctx->mpi)); |
| 172 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
9 | PetscFunctionReturn(PETSC_SUCCESS); |
| 173 | } | ||
| 174 | |||
| 175 | 1030 | static PetscErrorCode BVMatMult_Contiguous(BV V,Mat A,BV W) | |
| 176 | { | ||
| 177 | 1030 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data,*w = (BV_CONTIGUOUS*)W->data; | |
| 178 | 1030 | PetscInt j; | |
| 179 | 1030 | Mat Vmat,Wmat; | |
| 180 | |||
| 181 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1030 | PetscFunctionBegin; |
| 182 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1030 | if (V->vmm) { |
| 183 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVGetMat(V,&Vmat)); |
| 184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVGetMat(W,&Wmat)); |
| 185 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductCreateWithMat(A,Vmat,NULL,Wmat)); |
| 186 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductSetType(Wmat,MATPRODUCT_AB)); |
| 187 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductSetFromOptions(Wmat)); |
| 188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductSymbolic(Wmat)); |
| 189 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductNumeric(Wmat)); |
| 190 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatProductClear(Wmat)); |
| 191 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVRestoreMat(V,&Vmat)); |
| 192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVRestoreMat(W,&Wmat)); |
| 193 | } else { | ||
| 194 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
380 | for (j=0;j<V->k-V->l;j++) PetscCall(MatMult(A,v->V[V->nc+V->l+j],w->V[W->nc+W->l+j])); |
| 195 | } | ||
| 196 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
206 | PetscFunctionReturn(PETSC_SUCCESS); |
| 197 | } | ||
| 198 | |||
| 199 | 970 | static PetscErrorCode BVCopy_Contiguous(BV V,BV W) | |
| 200 | { | ||
| 201 | 970 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data,*w = (BV_CONTIGUOUS*)W->data; | |
| 202 | 970 | PetscInt j; | |
| 203 | |||
| 204 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
970 | PetscFunctionBegin; |
| 205 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
7260 | for (j=0;j<V->k-V->l;j++) PetscCall(PetscArraycpy(w->array+(W->nc+W->l+j)*W->ld,v->array+(V->nc+V->l+j)*V->ld,V->n)); |
| 206 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
194 | PetscFunctionReturn(PETSC_SUCCESS); |
| 207 | } | ||
| 208 | |||
| 209 | 20 | static PetscErrorCode BVCopyColumn_Contiguous(BV V,PetscInt j,PetscInt i) | |
| 210 | { | ||
| 211 | 20 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data; | |
| 212 | |||
| 213 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
| 214 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscArraycpy(v->array+(V->nc+i)*V->ld,v->array+(V->nc+j)*V->ld,V->n)); |
| 215 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
| 216 | } | ||
| 217 | |||
| 218 | 80 | static PetscErrorCode BVResize_Contiguous(BV bv,PetscInt m,PetscBool copy) | |
| 219 | { | ||
| 220 | 80 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 221 | 80 | PetscInt j,bs; | |
| 222 | 80 | PetscScalar *newarray; | |
| 223 | 80 | Vec *newV; | |
| 224 | 80 | char str[50]; | |
| 225 | |||
| 226 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
80 | PetscFunctionBegin; |
| 227 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(PetscLayoutGetBlockSize(bv->map,&bs)); |
| 228 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(PetscCalloc1(m*bv->ld,&newarray)); |
| 229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(PetscMalloc1(m,&newV)); |
| 230 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
940 | for (j=0;j<m;j++) { |
| 231 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
860 | if (ctx->mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,bv->n,PETSC_DECIDE,newarray+j*bv->ld,newV+j)); |
| 232 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
860 | else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,bv->n,newarray+j*bv->ld,newV+j)); |
| 233 | } | ||
| 234 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
80 | if (((PetscObject)bv)->name) { |
| 235 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
940 | for (j=0;j<m;j++) { |
| 236 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
860 | PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j)); |
| 237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
860 | PetscCall(PetscObjectSetName((PetscObject)newV[j],str)); |
| 238 | } | ||
| 239 | } | ||
| 240 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
80 | if (copy) PetscCall(PetscArraycpy(newarray,ctx->array,PetscMin(m,bv->m)*bv->ld)); |
| 241 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(VecDestroyVecs(bv->m,&ctx->V)); |
| 242 | 80 | ctx->V = newV; | |
| 243 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
80 | PetscCall(PetscFree(ctx->array)); |
| 244 | 80 | ctx->array = newarray; | |
| 245 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
| 246 | } | ||
| 247 | |||
| 248 | 24963 | static PetscErrorCode BVGetColumn_Contiguous(BV bv,PetscInt j,Vec *v) | |
| 249 | { | ||
| 250 | 24963 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 251 | 24963 | PetscInt l; | |
| 252 | |||
| 253 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24963 | PetscFunctionBegin; |
| 254 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
24963 | l = BVAvailableVec; |
| 255 | 24963 | bv->cv[l] = ctx->V[bv->nc+j]; | |
| 256 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
24963 | PetscFunctionReturn(PETSC_SUCCESS); |
| 257 | } | ||
| 258 | |||
| 259 | 24963 | static PetscErrorCode BVRestoreColumn_Contiguous(BV bv,PetscInt j,Vec *v) | |
| 260 | { | ||
| 261 | 24963 | PetscInt l; | |
| 262 | |||
| 263 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24963 | PetscFunctionBegin; |
| 264 | 24963 | l = (j==bv->ci[0])? 0: 1; | |
| 265 | 24963 | bv->cv[l] = NULL; | |
| 266 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
24963 | PetscFunctionReturn(PETSC_SUCCESS); |
| 267 | } | ||
| 268 | |||
| 269 | 2450 | static PetscErrorCode BVGetArray_Contiguous(BV bv,PetscScalar **a) | |
| 270 | { | ||
| 271 | 2450 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 272 | |||
| 273 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2450 | PetscFunctionBegin; |
| 274 | 2450 | *a = ctx->array; | |
| 275 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2450 | PetscFunctionReturn(PETSC_SUCCESS); |
| 276 | } | ||
| 277 | |||
| 278 | 80 | static PetscErrorCode BVGetArrayRead_Contiguous(BV bv,const PetscScalar **a) | |
| 279 | { | ||
| 280 | 80 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 281 | |||
| 282 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
80 | PetscFunctionBegin; |
| 283 | 80 | *a = ctx->array; | |
| 284 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
| 285 | } | ||
| 286 | |||
| 287 | 3332 | static PetscErrorCode BVDestroy_Contiguous(BV bv) | |
| 288 | { | ||
| 289 | 3332 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
| 290 | |||
| 291 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3332 | PetscFunctionBegin; |
| 292 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (!bv->issplit) { |
| 293 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2532 | PetscCall(VecDestroyVecs(bv->nc+bv->m,&ctx->V)); |
| 294 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2532 | PetscCall(PetscFree(ctx->array)); |
| 295 | } | ||
| 296 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3332 | PetscCall(PetscFree(bv->data)); |
| 297 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
664 | PetscFunctionReturn(PETSC_SUCCESS); |
| 298 | } | ||
| 299 | |||
| 300 | 120 | static PetscErrorCode BVView_Contiguous(BV bv,PetscViewer viewer) | |
| 301 | { | ||
| 302 | 120 | PetscInt j; | |
| 303 | 120 | Vec v; | |
| 304 | 120 | PetscViewerFormat format; | |
| 305 | 120 | PetscBool isascii,ismatlab=PETSC_FALSE; | |
| 306 | 120 | const char *bvname,*name; | |
| 307 | |||
| 308 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
| 309 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
120 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 310 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
120 | if (isascii) { |
| 311 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
120 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 312 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
120 | if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS); |
| 313 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
100 | if (format == PETSC_VIEWER_ASCII_MATLAB) ismatlab = PETSC_TRUE; |
| 314 | } | ||
| 315 | ✗ | if (ismatlab) { | |
| 316 | ✗ | PetscCall(PetscObjectGetName((PetscObject)bv,&bvname)); | |
| 317 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[];\n",bvname)); | |
| 318 | } | ||
| 319 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
480 | for (j=0;j<bv->m;j++) { |
| 320 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
380 | PetscCall(BVGetColumn(bv,j,&v)); |
| 321 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
380 | PetscCall(VecView(v,viewer)); |
| 322 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
380 | if (ismatlab) { |
| 323 | ✗ | PetscCall(PetscObjectGetName((PetscObject)v,&name)); | |
| 324 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[%s,%s];clear %s\n",bvname,bvname,name,name)); | |
| 325 | } | ||
| 326 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
380 | PetscCall(BVRestoreColumn(bv,j,&v)); |
| 327 | } | ||
| 328 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
| 329 | } | ||
| 330 | |||
| 331 | /*MC | ||
| 332 | BVCONTIGUOUS - BVCONTIGUOUS = "contiguous" - A basis vectors object represented | ||
| 333 | by an array of `Vec`s sharing a contiguous array of `PetscScalar` storing the | ||
| 334 | elements column-wise. | ||
| 335 | |||
| 336 | Level: beginner | ||
| 337 | |||
| 338 | .seealso: [](sec:bv), `BV`, `BVType`, `BVSetType()` | ||
| 339 | M*/ | ||
| 340 | |||
| 341 | 3332 | SLEPC_EXTERN PetscErrorCode BVCreate_Contiguous(BV bv) | |
| 342 | { | ||
| 343 | 3332 | BV_CONTIGUOUS *ctx; | |
| 344 | 3332 | PetscInt j,nloc,bs,lsplit,lda; | |
| 345 | 3332 | PetscBool seq,isdense; | |
| 346 | 3332 | PetscScalar *aa; | |
| 347 | 3332 | char str[50]; | |
| 348 | 3332 | PetscScalar *array; | |
| 349 | 3332 | BV parent; | |
| 350 | 3332 | Vec *Vpar; | |
| 351 | 3332 | MatType mtype; | |
| 352 | |||
| 353 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3332 | PetscFunctionBegin; |
| 354 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3332 | PetscCall(PetscNew(&ctx)); |
| 355 | 3332 | bv->data = (void*)ctx; | |
| 356 | |||
| 357 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3332 | PetscCall(PetscStrcmp(bv->vtype,VECMPI,&ctx->mpi)); |
| 358 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (!ctx->mpi) { |
| 359 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
588 | PetscCall(PetscStrcmp(bv->vtype,VECSEQ,&seq)); |
| 360 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
588 | PetscCheck(seq,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Cannot create a contiguous BV from a non-standard vector type: %s",bv->vtype); |
| 361 | } | ||
| 362 | |||
| 363 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3332 | PetscCall(PetscLayoutGetLocalSize(bv->map,&nloc)); |
| 364 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3332 | PetscCall(PetscLayoutGetBlockSize(bv->map,&bs)); |
| 365 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3332 | PetscCall(BV_SetDefaultLD(bv,nloc)); |
| 366 | |||
| 367 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (PetscUnlikely(bv->issplit)) { |
| 368 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
800 | PetscCheck(bv->issplit>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVCONTIGUOUS does not support BVGetSplitRows()"); |
| 369 | /* split BV: share memory and Vecs of the parent BV */ | ||
| 370 | 800 | parent = bv->splitparent; | |
| 371 | 800 | lsplit = parent->lsplit; | |
| 372 | 800 | Vpar = ((BV_CONTIGUOUS*)parent->data)->V; | |
| 373 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
800 | ctx->V = (bv->issplit==1)? Vpar: Vpar+lsplit; |
| 374 | 800 | array = ((BV_CONTIGUOUS*)parent->data)->array; | |
| 375 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
800 | ctx->array = (bv->issplit==1)? array: array+lsplit*bv->ld; |
| 376 | } else { | ||
| 377 | /* regular BV: allocate memory and Vecs for the BV entries */ | ||
| 378 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2532 | PetscCall(PetscCalloc1(bv->m*bv->ld,&ctx->array)); |
| 379 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2532 | PetscCall(PetscMalloc1(bv->m,&ctx->V)); |
| 380 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
21832 | for (j=0;j<bv->m;j++) { |
| 381 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
19300 | if (ctx->mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,PETSC_DECIDE,ctx->array+j*bv->ld,ctx->V+j)); |
| 382 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
19300 | else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,ctx->array+j*bv->ld,ctx->V+j)); |
| 383 | } | ||
| 384 | } | ||
| 385 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (((PetscObject)bv)->name) { |
| 386 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9500 | for (j=0;j<bv->m;j++) { |
| 387 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8420 | PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j)); |
| 388 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8420 | PetscCall(PetscObjectSetName((PetscObject)ctx->V[j],str)); |
| 389 | } | ||
| 390 | } | ||
| 391 | |||
| 392 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (PetscUnlikely(bv->Acreate)) { |
| 393 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(MatGetType(bv->Acreate,&mtype)); |
| 394 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscStrcmpAny(mtype,&isdense,MATSEQDENSE,MATMPIDENSE,"")); |
| 395 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
20 | PetscCheck(isdense,PetscObjectComm((PetscObject)bv->Acreate),PETSC_ERR_SUP,"BVCONTIGUOUS requires a dense matrix in BVCreateFromMat()"); |
| 396 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(MatDenseGetArray(bv->Acreate,&aa)); |
| 397 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(MatDenseGetLDA(bv->Acreate,&lda)); |
| 398 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
180 | for (j=0;j<bv->m;j++) PetscCall(PetscArraycpy(ctx->array+j*bv->ld,aa+j*lda,bv->n)); |
| 399 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(MatDenseRestoreArray(bv->Acreate,&aa)); |
| 400 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(MatDestroy(&bv->Acreate)); |
| 401 | } | ||
| 402 | |||
| 403 | 3332 | bv->ops->mult = BVMult_Contiguous; | |
| 404 | 3332 | bv->ops->multvec = BVMultVec_Contiguous; | |
| 405 | 3332 | bv->ops->multinplace = BVMultInPlace_Contiguous; | |
| 406 | 3332 | bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Contiguous; | |
| 407 | 3332 | bv->ops->dot = BVDot_Contiguous; | |
| 408 | 3332 | bv->ops->dotvec = BVDotVec_Contiguous; | |
| 409 | 3332 | bv->ops->dotvec_local = BVDotVec_Local_Contiguous; | |
| 410 | 3332 | bv->ops->scale = BVScale_Contiguous; | |
| 411 | 3332 | bv->ops->norm = BVNorm_Contiguous; | |
| 412 | 3332 | bv->ops->norm_local = BVNorm_Local_Contiguous; | |
| 413 | 3332 | bv->ops->normalize = BVNormalize_Contiguous; | |
| 414 | 3332 | bv->ops->matmult = BVMatMult_Contiguous; | |
| 415 | 3332 | bv->ops->copy = BVCopy_Contiguous; | |
| 416 | 3332 | bv->ops->copycolumn = BVCopyColumn_Contiguous; | |
| 417 | 3332 | bv->ops->resize = BVResize_Contiguous; | |
| 418 | 3332 | bv->ops->getcolumn = BVGetColumn_Contiguous; | |
| 419 | 3332 | bv->ops->restorecolumn = BVRestoreColumn_Contiguous; | |
| 420 | 3332 | bv->ops->getarray = BVGetArray_Contiguous; | |
| 421 | 3332 | bv->ops->getarrayread = BVGetArrayRead_Contiguous; | |
| 422 | 3332 | bv->ops->getmat = BVGetMat_Default; | |
| 423 | 3332 | bv->ops->restoremat = BVRestoreMat_Default; | |
| 424 | 3332 | bv->ops->destroy = BVDestroy_Contiguous; | |
| 425 | 3332 | bv->ops->view = BVView_Contiguous; | |
| 426 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
3332 | PetscFunctionReturn(PETSC_SUCCESS); |
| 427 | } | ||
| 428 |