| 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 | Basic BV routines | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/bvimpl.h> /*I "slepcbv.h" I*/ | ||
| 15 | |||
| 16 | PetscBool BVRegisterAllCalled = PETSC_FALSE; | ||
| 17 | PetscFunctionList BVList = NULL; | ||
| 18 | |||
| 19 | /*@ | ||
| 20 | BVSetType - Selects the type for the `BV` object. | ||
| 21 | |||
| 22 | Logically Collective | ||
| 23 | |||
| 24 | Input Parameters: | ||
| 25 | + bv - the basis vectors context | ||
| 26 | - type - a known type | ||
| 27 | |||
| 28 | Options Database Key: | ||
| 29 | . -bv_type \<type\> - sets `BV` type | ||
| 30 | |||
| 31 | Level: intermediate | ||
| 32 | |||
| 33 | .seealso: [](sec:bv), `BVGetType()` | ||
| 34 | @*/ | ||
| 35 | 121403 | PetscErrorCode BVSetType(BV bv,BVType type) | |
| 36 | { | ||
| 37 | 121403 | PetscErrorCode (*r)(BV); | |
| 38 | 121403 | PetscBool match; | |
| 39 | |||
| 40 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
121403 | PetscFunctionBegin; |
| 41 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
121403 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 42 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
121403 | PetscAssertPointer(type,2); |
| 43 | |||
| 44 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
121403 | PetscCall(PetscObjectTypeCompare((PetscObject)bv,type,&match)); |
| 45 |
8/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
|
121403 | if (match) PetscFunctionReturn(PETSC_SUCCESS); |
| 46 |
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.
|
121379 | PetscCall(PetscStrcmp(type,BVTENSOR,&match)); |
| 47 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
121379 | PetscCheck(!match,PetscObjectComm((PetscObject)bv),PETSC_ERR_ORDER,"Use BVCreateTensor() to create a BV of type tensor"); |
| 48 | |||
| 49 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
121379 | PetscCall(PetscFunctionListFind(BVList,type,&r)); |
| 50 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
121379 | PetscCheck(r,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unable to find requested BV type %s",type); |
| 51 | |||
| 52 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
|
121379 | PetscTryTypeMethod(bv,destroy); |
| 53 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
121379 | PetscCall(PetscMemzero(bv->ops,sizeof(struct _BVOps))); |
| 54 | |||
| 55 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
121379 | PetscCall(PetscObjectChangeTypeName((PetscObject)bv,type)); |
| 56 |
3/4✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
121379 | if (bv->n < 0 && bv->N < 0) { |
| 57 | 13919 | bv->ops->create = r; | |
| 58 | } else { | ||
| 59 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
107460 | PetscCall(PetscLogEventBegin(BV_Create,bv,0,0,0)); |
| 60 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
107460 | PetscCall((*r)(bv)); |
| 61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
107460 | PetscCall(PetscLogEventEnd(BV_Create,bv,0,0,0)); |
| 62 | } | ||
| 63 |
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.
|
29433 | PetscFunctionReturn(PETSC_SUCCESS); |
| 64 | } | ||
| 65 | |||
| 66 | /*@ | ||
| 67 | BVGetType - Gets the `BV` type name (as a string) from the `BV` context. | ||
| 68 | |||
| 69 | Not Collective | ||
| 70 | |||
| 71 | Input Parameter: | ||
| 72 | . bv - the basis vectors context | ||
| 73 | |||
| 74 | Output Parameter: | ||
| 75 | . type - name of the type of basis vectors | ||
| 76 | |||
| 77 | Level: intermediate | ||
| 78 | |||
| 79 | .seealso: [](sec:bv), `BVSetType()` | ||
| 80 | @*/ | ||
| 81 | 1287 | PetscErrorCode BVGetType(BV bv,BVType *type) | |
| 82 | { | ||
| 83 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1287 | PetscFunctionBegin; |
| 84 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1287 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 85 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1287 | PetscAssertPointer(type,2); |
| 86 | 1287 | *type = ((PetscObject)bv)->type_name; | |
| 87 |
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.
|
1287 | PetscFunctionReturn(PETSC_SUCCESS); |
| 88 | } | ||
| 89 | |||
| 90 | /*@ | ||
| 91 | BVSetSizes - Sets the local and global sizes, and the number of columns. | ||
| 92 | |||
| 93 | Collective | ||
| 94 | |||
| 95 | Input Parameters: | ||
| 96 | + bv - the basis vectors | ||
| 97 | . n - the local size (or `PETSC_DECIDE` to have it set) | ||
| 98 | . N - the global size (or `PETSC_DECIDE`) | ||
| 99 | - m - the number of columns | ||
| 100 | |||
| 101 | Notes: | ||
| 102 | `n` and `N` cannot be both `PETSC_DECIDE`. | ||
| 103 | If one process calls this with `N` equal to `PETSC_DECIDE` then all processes must, | ||
| 104 | otherwise the program will hang. | ||
| 105 | |||
| 106 | Level: beginner | ||
| 107 | |||
| 108 | .seealso: [](sec:bv), `BVSetSizesFromVec()`, `BVGetSizes()`, `BVResize()` | ||
| 109 | @*/ | ||
| 110 | 4037 | PetscErrorCode BVSetSizes(BV bv,PetscInt n,PetscInt N,PetscInt m) | |
| 111 | { | ||
| 112 | 4037 | PetscInt ma; | |
| 113 | 4037 | PetscMPIInt size; | |
| 114 | |||
| 115 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4037 | PetscFunctionBegin; |
| 116 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4037 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 117 |
29/64✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✓ Branch 61 taken 2 times.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
|
4037 | if (N >= 0) PetscValidLogicalCollectiveInt(bv,N,3); |
| 118 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
4037 | PetscValidLogicalCollectiveInt(bv,m,4); |
| 119 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4037 | PetscCheck(N<0 || n<=N,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Local size %" PetscInt_FMT " cannot be larger than global size %" PetscInt_FMT,n,N); |
| 120 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4037 | PetscCheck(m>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Number of columns %" PetscInt_FMT " must be positive",m); |
| 121 |
2/10✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 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.
|
4037 | PetscCheck((bv->n<0 && bv->N<0) || (bv->n==n && bv->N==N),PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Cannot change/reset vector sizes to %" PetscInt_FMT " local %" PetscInt_FMT " global after previously setting them to %" PetscInt_FMT " local %" PetscInt_FMT " global",n,N,bv->n,bv->N); |
| 122 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4037 | PetscCheck(bv->m<=0 || bv->m==m,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Cannot change the number of columns to %" PetscInt_FMT " after previously setting it to %" PetscInt_FMT "; use BVResize()",m,bv->m); |
| 123 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4037 | PetscCheck(!bv->map,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Vector layout was already defined by a previous call to BVSetSizes/FromVec"); |
| 124 | 4037 | bv->n = n; | |
| 125 | 4037 | bv->N = N; | |
| 126 | 4037 | bv->m = m; | |
| 127 | 4037 | bv->k = m; | |
| 128 | /* create layout and get actual dimensions */ | ||
| 129 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutCreate(PetscObjectComm((PetscObject)bv),&bv->map)); |
| 130 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutSetSize(bv->map,bv->N)); |
| 131 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutSetLocalSize(bv->map,bv->n)); |
| 132 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutSetUp(bv->map)); |
| 133 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutGetSize(bv->map,&bv->N)); |
| 134 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4037 | PetscCall(PetscLayoutGetLocalSize(bv->map,&bv->n)); |
| 135 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
4037 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)bv),&size)); |
| 136 |
7/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
4727 | PetscCall(BVSetVecType(bv,(size==1)?VECSEQ:VECMPI)); |
| 137 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
4037 | if (bv->matrix) { /* check compatible dimensions of user-provided matrix */ |
| 138 | ✗ | PetscCall(MatGetLocalSize(bv->matrix,&ma,NULL)); | |
| 139 | ✗ | PetscCheck(bv->n==ma,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Local dimension %" PetscInt_FMT " does not match that of matrix given at BVSetMatrix %" PetscInt_FMT,bv->n,ma); | |
| 140 | } | ||
| 141 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
4037 | if (bv->ops->create) { |
| 142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
994 | PetscCall(PetscLogEventBegin(BV_Create,bv,0,0,0)); |
| 143 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
994 | PetscUseTypeMethod(bv,create); |
| 144 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
994 | PetscCall(PetscLogEventEnd(BV_Create,bv,0,0,0)); |
| 145 | 994 | bv->ops->create = NULL; | |
| 146 | 994 | bv->defersfo = PETSC_FALSE; | |
| 147 | } | ||
| 148 |
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.
|
927 | PetscFunctionReturn(PETSC_SUCCESS); |
| 149 | } | ||
| 150 | |||
| 151 | /*@ | ||
| 152 | BVSetSizesFromVec - Sets the local and global sizes, and the number of columns. | ||
| 153 | Local and global sizes are specified indirectly by passing a template vector. | ||
| 154 | |||
| 155 | Collective | ||
| 156 | |||
| 157 | Input Parameters: | ||
| 158 | + bv - the basis vectors | ||
| 159 | . t - the template vector | ||
| 160 | - m - the number of columns | ||
| 161 | |||
| 162 | Notes: | ||
| 163 | Apart from the local and global sizes, the template vector `t` is also used | ||
| 164 | to get the vector type, which will be set as the `BV` vector type with | ||
| 165 | `BVSetVecType()`. This is relevant in cases where computation must be done | ||
| 166 | on the GPU. | ||
| 167 | |||
| 168 | If `t` is a nested vector (type `VECNEST`), then the vector type will be | ||
| 169 | obtained from the first subvector. The rationale is that `BV` will operate | ||
| 170 | internally with regular vectors, even though the user problem is defined via | ||
| 171 | nested matrices and vectors. | ||
| 172 | |||
| 173 | Level: beginner | ||
| 174 | |||
| 175 | .seealso: [](sec:bv), `BVSetSizes()`, `BVGetSizes()`, `BVResize()`, `BVSetVecType()` | ||
| 176 | @*/ | ||
| 177 | 17033 | PetscErrorCode BVSetSizesFromVec(BV bv,Vec t,PetscInt m) | |
| 178 | { | ||
| 179 | 17033 | PetscInt ma; | |
| 180 | 17033 | PetscLayout map; | |
| 181 | 17033 | VecType vtype; | |
| 182 | 17033 | PetscBool nest; | |
| 183 | 17033 | Vec v; | |
| 184 | |||
| 185 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17033 | PetscFunctionBegin; |
| 186 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
17033 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 187 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
17033 | PetscValidHeaderSpecific(t,VEC_CLASSID,2); |
| 188 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
17033 | PetscCheckSameComm(bv,1,t,2); |
| 189 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
17033 | PetscValidLogicalCollectiveInt(bv,m,3); |
| 190 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
17033 | PetscCheck(m>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Number of columns %" PetscInt_FMT " must be positive",m); |
| 191 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
17033 | PetscCheck(!bv->map,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Vector layout was already defined by a previous call to BVSetSizes/FromVec"); |
| 192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(PetscObjectTypeCompare((PetscObject)t,VECNEST,&nest)); |
| 193 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
17033 | if (nest) { |
| 194 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
126 | PetscCall(VecNestGetSubVec(t,0,&v)); |
| 195 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
126 | PetscCall(VecGetType(v,&vtype)); |
| 196 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16907 | } else PetscCall(VecGetType(t,&vtype)); |
| 197 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(BVSetVecType(bv,vtype)); |
| 198 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(VecGetLayout(t,&map)); |
| 199 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(PetscLayoutReference(map,&bv->map)); |
| 200 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(VecGetSize(t,&bv->N)); |
| 201 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17033 | PetscCall(VecGetLocalSize(t,&bv->n)); |
| 202 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
17033 | if (bv->matrix) { /* check compatible dimensions of user-provided matrix */ |
| 203 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatGetLocalSize(bv->matrix,&ma,NULL)); |
| 204 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
59 | PetscCheck(bv->n==ma,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Local dimension %" PetscInt_FMT " does not match that of matrix given at BVSetMatrix %" PetscInt_FMT,bv->n,ma); |
| 205 | } | ||
| 206 | 17033 | bv->m = m; | |
| 207 | 17033 | bv->k = m; | |
| 208 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
17033 | if (bv->ops->create) { |
| 209 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12762 | PetscUseTypeMethod(bv,create); |
| 210 | 12762 | bv->ops->create = NULL; | |
| 211 | 12762 | bv->defersfo = PETSC_FALSE; | |
| 212 | } | ||
| 213 |
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.
|
4083 | PetscFunctionReturn(PETSC_SUCCESS); |
| 214 | } | ||
| 215 | |||
| 216 | /*@ | ||
| 217 | BVGetSizes - Returns the local and global sizes, and the number of columns. | ||
| 218 | |||
| 219 | Not Collective | ||
| 220 | |||
| 221 | Input Parameter: | ||
| 222 | . bv - the basis vectors | ||
| 223 | |||
| 224 | Output Parameters: | ||
| 225 | + n - the local size | ||
| 226 | . N - the global size | ||
| 227 | - m - the number of columns | ||
| 228 | |||
| 229 | Note: | ||
| 230 | Normal usage requires that `bv` has already been given its sizes, otherwise | ||
| 231 | the call fails. However, this function can also be used to determine if | ||
| 232 | a `BV` object has been initialized completely (sizes and type). For this, | ||
| 233 | call with `n=NULL` and `N=NULL`, then a return value of `m=0` indicates that | ||
| 234 | the `BV` object is not ready for use yet. | ||
| 235 | |||
| 236 | Level: beginner | ||
| 237 | |||
| 238 | .seealso: [](sec:bv), `BVSetSizes()`, `BVSetSizesFromVec()` | ||
| 239 | @*/ | ||
| 240 | 63184 | PetscErrorCode BVGetSizes(BV bv,PetscInt *n,PetscInt *N,PetscInt *m) | |
| 241 | { | ||
| 242 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
63184 | PetscFunctionBegin; |
| 243 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
63184 | if (!bv) { |
| 244 |
2/4✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
750 | if (m && !n && !N) *m = 0; |
| 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.
|
750 | PetscFunctionReturn(PETSC_SUCCESS); |
| 246 | } | ||
| 247 |
2/12✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
62434 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 248 |
3/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
62434 | if (n || N) BVCheckSizes(bv,1); |
| 249 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 7 times.
|
56203 | if (n) *n = bv->n; |
| 250 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
62434 | if (N) *N = bv->N; |
| 251 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
62434 | if (m) *m = bv->m; |
| 252 |
5/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 8 times.
|
62434 | if (m && !n && !N && !((PetscObject)bv)->type_name) *m = 0; |
| 253 |
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.
|
15300 | PetscFunctionReturn(PETSC_SUCCESS); |
| 254 | } | ||
| 255 | |||
| 256 | /*@ | ||
| 257 | BVSetNumConstraints - Set the number of constraints. | ||
| 258 | |||
| 259 | Logically Collective | ||
| 260 | |||
| 261 | Input Parameters: | ||
| 262 | + V - basis vectors | ||
| 263 | - nc - number of constraints | ||
| 264 | |||
| 265 | Notes: | ||
| 266 | This function sets the number of constraints to `nc` and marks all remaining | ||
| 267 | columns as regular. Normal usage would be to call `BVInsertConstraints()` instead. | ||
| 268 | |||
| 269 | If `nc` is smaller than the previously set value, then some of the constraints | ||
| 270 | are discarded. In particular, using `nc=0` removes all constraints preserving | ||
| 271 | the content of regular columns. | ||
| 272 | |||
| 273 | Level: developer | ||
| 274 | |||
| 275 | .seealso: [](sec:bv), `BVInsertConstraints()` | ||
| 276 | @*/ | ||
| 277 | 531 | PetscErrorCode BVSetNumConstraints(BV V,PetscInt nc) | |
| 278 | { | ||
| 279 | 531 | PetscInt total,diff,i; | |
| 280 | 531 | Vec x,y; | |
| 281 | |||
| 282 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
531 | PetscFunctionBegin; |
| 283 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
531 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 284 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
531 | PetscValidLogicalCollectiveInt(V,nc,2); |
| 285 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
531 | PetscCheck(nc>=0,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_OUTOFRANGE,"Number of constraints (given %" PetscInt_FMT ") cannot be negative",nc); |
| 286 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
531 | PetscValidType(V,1); |
| 287 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
531 | BVCheckSizes(V,1); |
| 288 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
531 | PetscCheck(V->ci[0]==-V->nc-1 && V->ci[1]==-V->nc-1,PetscObjectComm((PetscObject)V),PETSC_ERR_SUP,"Cannot call BVSetNumConstraints after BVGetColumn"); |
| 289 | |||
| 290 | 531 | diff = nc-V->nc; | |
| 291 |
8/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
|
531 | if (!diff) PetscFunctionReturn(PETSC_SUCCESS); |
| 292 | 221 | total = V->nc+V->m; | |
| 293 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
221 | PetscCheck(total-nc>0,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_OUTOFRANGE,"Not enough columns for the given nc value"); |
| 294 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
221 | if (diff<0) { /* lessen constraints, shift contents of BV */ |
| 295 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
2286 | for (i=0;i<V->m;i++) { |
| 296 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2166 | PetscCall(BVGetColumn(V,i,&x)); |
| 297 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2166 | PetscCall(BVGetColumn(V,i+diff,&y)); |
| 298 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2166 | PetscCall(VecCopy(x,y)); |
| 299 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2166 | PetscCall(BVRestoreColumn(V,i,&x)); |
| 300 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2166 | PetscCall(BVRestoreColumn(V,i+diff,&y)); |
| 301 | } | ||
| 302 | } | ||
| 303 | 221 | V->nc = nc; | |
| 304 | 221 | V->ci[0] = -V->nc-1; | |
| 305 | 221 | V->ci[1] = -V->nc-1; | |
| 306 | 221 | V->m = total-nc; | |
| 307 | 221 | V->l = PetscMin(V->l,V->m); | |
| 308 | 221 | V->k = PetscMin(V->k,V->m); | |
| 309 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
221 | PetscCall(PetscObjectStateIncrease((PetscObject)V)); |
| 310 |
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.
|
221 | PetscFunctionReturn(PETSC_SUCCESS); |
| 311 | } | ||
| 312 | |||
| 313 | /*@ | ||
| 314 | BVGetNumConstraints - Returns the number of constraints. | ||
| 315 | |||
| 316 | Not Collective | ||
| 317 | |||
| 318 | Input Parameter: | ||
| 319 | . bv - the basis vectors | ||
| 320 | |||
| 321 | Output Parameter: | ||
| 322 | . nc - the number of constraints | ||
| 323 | |||
| 324 | Level: advanced | ||
| 325 | |||
| 326 | .seealso: [](sec:bv), `BVGetSizes()`, `BVInsertConstraints()` | ||
| 327 | @*/ | ||
| 328 | 398 | PetscErrorCode BVGetNumConstraints(BV bv,PetscInt *nc) | |
| 329 | { | ||
| 330 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
398 | PetscFunctionBegin; |
| 331 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
398 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 332 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
398 | PetscAssertPointer(nc,2); |
| 333 | 398 | *nc = bv->nc; | |
| 334 |
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.
|
398 | PetscFunctionReturn(PETSC_SUCCESS); |
| 335 | } | ||
| 336 | |||
| 337 | /*@ | ||
| 338 | BVResize - Change the number of columns. | ||
| 339 | |||
| 340 | Collective | ||
| 341 | |||
| 342 | Input Parameters: | ||
| 343 | + bv - the basis vectors | ||
| 344 | . m - the new number of columns | ||
| 345 | - copy - a flag indicating whether current values should be kept | ||
| 346 | |||
| 347 | Note: | ||
| 348 | Internal storage is reallocated. If the `copy` flag is set to true, then | ||
| 349 | the contents are copied to the leading part of the new space. | ||
| 350 | |||
| 351 | Level: advanced | ||
| 352 | |||
| 353 | .seealso: [](sec:bv), `BVSetSizes()`, `BVSetSizesFromVec()` | ||
| 354 | @*/ | ||
| 355 | 4636 | PetscErrorCode BVResize(BV bv,PetscInt m,PetscBool copy) | |
| 356 | { | ||
| 357 | 4636 | PetscScalar *array; | |
| 358 | 4636 | const PetscScalar *omega; | |
| 359 | 4636 | Vec v; | |
| 360 | |||
| 361 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4636 | PetscFunctionBegin; |
| 362 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4636 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 363 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
4636 | PetscValidLogicalCollectiveInt(bv,m,2); |
| 364 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
4636 | PetscValidLogicalCollectiveBool(bv,copy,3); |
| 365 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4636 | PetscValidType(bv,1); |
| 366 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4636 | PetscCheck(m>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Number of columns %" PetscInt_FMT " must be positive",m); |
| 367 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4636 | PetscCheck(!bv->nc || bv->issplit,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Cannot resize a BV with constraints"); |
| 368 |
8/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
|
4636 | if (bv->m == m) PetscFunctionReturn(PETSC_SUCCESS); |
| 369 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1499 | BVCheckOp(bv,1,resize); |
| 370 | |||
| 371 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1499 | PetscCall(PetscLogEventBegin(BV_Create,bv,0,0,0)); |
| 372 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
1499 | PetscUseTypeMethod(bv,resize,m,copy); |
| 373 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1499 | PetscCall(VecDestroy(&bv->buffer)); |
| 374 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1499 | PetscCall(BVDestroy(&bv->cached)); |
| 375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1499 | PetscCall(PetscFree2(bv->h,bv->c)); |
| 376 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
|
1499 | if (bv->omega) { |
| 377 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
|
11 | if (bv->cuda) { |
| 378 | #if defined(PETSC_HAVE_CUDA) | ||
| 379 | ✗ | PetscCall(VecCreateSeqCUDA(PETSC_COMM_SELF,m,&v)); | |
| 380 | #else | ||
| 381 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_PLIB,"Something wrong happened"); | |
| 382 | #endif | ||
| 383 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
|
11 | } else if (bv->hip) { |
| 384 | #if defined(PETSC_HAVE_HIP) | ||
| 385 | PetscCall(VecCreateSeqHIP(PETSC_COMM_SELF,m,&v)); | ||
| 386 | #else | ||
| 387 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_PLIB,"Something wrong happened"); | |
| 388 | #endif | ||
| 389 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | } else PetscCall(VecCreateSeq(PETSC_COMM_SELF,m,&v)); |
| 390 |
1/2✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
|
11 | if (copy) { |
| 391 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecGetArray(v,&array)); |
| 392 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecGetArrayRead(bv->omega,&omega)); |
| 393 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(PetscArraycpy(array,omega,PetscMin(m,bv->m))); |
| 394 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecRestoreArrayRead(bv->omega,&omega)); |
| 395 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecRestoreArray(v,&array)); |
| 396 | ✗ | } else PetscCall(VecSet(v,1.0)); | |
| 397 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11 | PetscCall(VecDestroy(&bv->omega)); |
| 398 | 11 | bv->omega = v; | |
| 399 | } | ||
| 400 | 1499 | bv->m = m; | |
| 401 | 1499 | bv->k = PetscMin(bv->k,m); | |
| 402 | 1499 | bv->l = PetscMin(bv->l,m); | |
| 403 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1499 | PetscCall(PetscLogEventEnd(BV_Create,bv,0,0,0)); |
| 404 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1499 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 405 |
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.
|
1499 | PetscFunctionReturn(PETSC_SUCCESS); |
| 406 | } | ||
| 407 | |||
| 408 | /*@ | ||
| 409 | BVSetActiveColumns - Specify the columns that will be involved in operations. | ||
| 410 | |||
| 411 | Logically Collective | ||
| 412 | |||
| 413 | Input Parameters: | ||
| 414 | + bv - the basis vectors context | ||
| 415 | . l - number of leading columns | ||
| 416 | - k - number of active columns | ||
| 417 | |||
| 418 | Notes: | ||
| 419 | In operations such as `BVMult()` or `BVDot()`, only the first `k` columns are | ||
| 420 | considered. This is useful when the `BV` is filled from left to right, so | ||
| 421 | the last `m-k` columns do not have relevant information. | ||
| 422 | |||
| 423 | Also in operations such as `BVMult()` or `BVDot()`, the first `l` columns are | ||
| 424 | normally not included in the computation. See the manual page of each | ||
| 425 | operation. | ||
| 426 | |||
| 427 | In orthogonalization operations, the first `l` columns are treated | ||
| 428 | differently, they participate in the orthogonalization but the computed | ||
| 429 | coefficients are not stored. | ||
| 430 | |||
| 431 | Use `PETSC_CURRENT` to leave any of the values unchanged. Use `PETSC_DETERMINE` | ||
| 432 | to set `l` to the minimum value (`0`) and `k` to the maximum (`m`). | ||
| 433 | |||
| 434 | Level: intermediate | ||
| 435 | |||
| 436 | .seealso: [](sec:bv), `BVGetActiveColumns()`, `BVSetSizes()` | ||
| 437 | @*/ | ||
| 438 | 4417943 | PetscErrorCode BVSetActiveColumns(BV bv,PetscInt l,PetscInt k) | |
| 439 | { | ||
| 440 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4417943 | PetscFunctionBegin; |
| 441 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4417943 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 442 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
4417943 | PetscValidLogicalCollectiveInt(bv,l,2); |
| 443 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
4417943 | PetscValidLogicalCollectiveInt(bv,k,3); |
| 444 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4417943 | BVCheckSizes(bv,1); |
| 445 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
4417943 | if (PetscUnlikely(k == PETSC_DETERMINE)) { |
| 446 | ✗ | bv->k = bv->m; | |
| 447 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
4417943 | } else if (k != PETSC_CURRENT) { |
| 448 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4417943 | PetscCheck(k>=0 && k<=bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of k (%" PetscInt_FMT "). Must be between 0 and m (%" PetscInt_FMT ")",k,bv->m); |
| 449 | 4417943 | bv->k = k; | |
| 450 | } | ||
| 451 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
4417943 | if (PetscUnlikely(l == PETSC_DETERMINE)) { |
| 452 | ✗ | bv->l = 0; | |
| 453 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
4417943 | } else if (l != PETSC_CURRENT) { |
| 454 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4417943 | PetscCheck(l>=0 && l<=bv->k,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of l (%" PetscInt_FMT "). Must be between 0 and k (%" PetscInt_FMT ")",l,bv->k); |
| 455 | 4417943 | bv->l = l; | |
| 456 | } | ||
| 457 |
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.
|
1097219 | PetscFunctionReturn(PETSC_SUCCESS); |
| 458 | } | ||
| 459 | |||
| 460 | /*@ | ||
| 461 | BVGetActiveColumns - Returns the current active dimensions. | ||
| 462 | |||
| 463 | Not Collective | ||
| 464 | |||
| 465 | Input Parameter: | ||
| 466 | . bv - the basis vectors context | ||
| 467 | |||
| 468 | Output Parameters: | ||
| 469 | + l - number of leading columns | ||
| 470 | - k - number of active columns | ||
| 471 | |||
| 472 | Level: intermediate | ||
| 473 | |||
| 474 | .seealso: [](sec:bv), `BVSetActiveColumns()` | ||
| 475 | @*/ | ||
| 476 | 1097196 | PetscErrorCode BVGetActiveColumns(BV bv,PetscInt *l,PetscInt *k) | |
| 477 | { | ||
| 478 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1097196 | PetscFunctionBegin; |
| 479 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1097196 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 480 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1097196 | if (l) *l = bv->l; |
| 481 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
1097196 | if (k) *k = bv->k; |
| 482 |
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.
|
1097196 | PetscFunctionReturn(PETSC_SUCCESS); |
| 483 | } | ||
| 484 | |||
| 485 | /*@ | ||
| 486 | BVSetMatrix - Specifies the inner product to be used in orthogonalization. | ||
| 487 | |||
| 488 | Collective | ||
| 489 | |||
| 490 | Input Parameters: | ||
| 491 | + bv - the basis vectors context | ||
| 492 | . B - a Hermitian matrix (may be `NULL`) | ||
| 493 | - indef - a flag indicating if the matrix is indefinite | ||
| 494 | |||
| 495 | Notes: | ||
| 496 | This is used to specify a non-standard inner product, whose matrix | ||
| 497 | representation is given by `B`. Then, all inner products required during | ||
| 498 | orthogonalization are computed as $(x,y)_B=y^*Bx$ rather than the | ||
| 499 | standard form $(x,y)=y^*x$. | ||
| 500 | |||
| 501 | Matrix `B` must be real symmetric (or complex Hermitian). A genuine inner | ||
| 502 | product requires that `B` is also positive (semi-)definite. However, we | ||
| 503 | also allow for an indefinite `B` (setting `indef=PETSC_TRUE`), in which | ||
| 504 | case the orthogonalization uses an indefinite inner product. | ||
| 505 | |||
| 506 | This affects operations `BVDot()`, `BVNorm()`, `BVOrthogonalize()`, and variants. | ||
| 507 | |||
| 508 | Setting `B=NULL` has the same effect as if the identity matrix was passed. | ||
| 509 | |||
| 510 | Level: advanced | ||
| 511 | |||
| 512 | .seealso: [](sec:bv), `BVGetMatrix()`, `BVDot()`, `BVNorm()`, `BVOrthogonalize()`, `BVSetDefiniteTolerance()` | ||
| 513 | @*/ | ||
| 514 | 44199 | PetscErrorCode BVSetMatrix(BV bv,Mat B,PetscBool indef) | |
| 515 | { | ||
| 516 | 44199 | PetscInt m,n; | |
| 517 | |||
| 518 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
44199 | PetscFunctionBegin; |
| 519 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
44199 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 520 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
44199 | PetscValidLogicalCollectiveBool(bv,indef,3); |
| 521 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
|
44199 | if (B!=bv->matrix || (B && ((PetscObject)B)->id!=((PetscObject)bv->matrix)->id) || indef!=bv->indef) { |
| 522 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
20038 | if (B) { |
| 523 |
2/12✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
10613 | PetscValidHeaderSpecific(B,MAT_CLASSID,2); |
| 524 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10613 | PetscCall(MatGetLocalSize(B,&m,&n)); |
| 525 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10613 | PetscCheck(m==n,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_SIZ,"Matrix must be square"); |
| 526 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
10613 | PetscCheck(!bv->m || bv->n==n,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension BV %" PetscInt_FMT ", Mat %" PetscInt_FMT,bv->n,n); |
| 527 | } | ||
| 528 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
11767 | if (B) PetscCall(PetscObjectReference((PetscObject)B)); |
| 529 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20038 | PetscCall(MatDestroy(&bv->matrix)); |
| 530 | 20038 | bv->matrix = B; | |
| 531 | 20038 | bv->indef = indef; | |
| 532 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
20038 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 533 |
4/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
20038 | if (bv->Bx) PetscCall(PetscObjectStateIncrease((PetscObject)bv->Bx)); |
| 534 |
4/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
20038 | if (bv->cached) PetscCall(PetscObjectStateIncrease((PetscObject)bv->cached)); |
| 535 | } | ||
| 536 |
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.
|
10768 | PetscFunctionReturn(PETSC_SUCCESS); |
| 537 | } | ||
| 538 | |||
| 539 | /*@ | ||
| 540 | BVGetMatrix - Retrieves the matrix representation of the inner product. | ||
| 541 | |||
| 542 | Not Collective | ||
| 543 | |||
| 544 | Input Parameter: | ||
| 545 | . bv - the basis vectors context | ||
| 546 | |||
| 547 | Output Parameters: | ||
| 548 | + B - the matrix of the inner product (may be `NULL`) | ||
| 549 | - indef - the flag indicating if the matrix is indefinite | ||
| 550 | |||
| 551 | Level: advanced | ||
| 552 | |||
| 553 | .seealso: [](sec:bv), `BVSetMatrix()` | ||
| 554 | @*/ | ||
| 555 | 15312 | PetscErrorCode BVGetMatrix(BV bv,Mat *B,PetscBool *indef) | |
| 556 | { | ||
| 557 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
15312 | PetscFunctionBegin; |
| 558 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
15312 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 559 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
15312 | if (B) *B = bv->matrix; |
| 560 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
15312 | if (indef) *indef = bv->indef; |
| 561 |
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.
|
15312 | PetscFunctionReturn(PETSC_SUCCESS); |
| 562 | } | ||
| 563 | |||
| 564 | /*@ | ||
| 565 | BVApplyMatrix - Multiplies a vector by the matrix representation of the | ||
| 566 | inner product. | ||
| 567 | |||
| 568 | Neighbor-wise Collective | ||
| 569 | |||
| 570 | Input Parameters: | ||
| 571 | + bv - the basis vectors context | ||
| 572 | - x - the vector | ||
| 573 | |||
| 574 | Output Parameter: | ||
| 575 | . y - the result | ||
| 576 | |||
| 577 | Note: | ||
| 578 | If no matrix was specified this function copies the vector. | ||
| 579 | |||
| 580 | Level: advanced | ||
| 581 | |||
| 582 | .seealso: [](sec:bv), `BVSetMatrix()`, `BVApplyMatrixBV()` | ||
| 583 | @*/ | ||
| 584 | 2917 | PetscErrorCode BVApplyMatrix(BV bv,Vec x,Vec y) | |
| 585 | { | ||
| 586 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2917 | PetscFunctionBegin; |
| 587 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2917 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 588 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2917 | PetscValidHeaderSpecific(x,VEC_CLASSID,2); |
| 589 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2917 | PetscValidHeaderSpecific(y,VEC_CLASSID,3); |
| 590 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
2917 | if (bv->matrix) { |
| 591 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2917 | PetscCall(BV_IPMatMult(bv,x)); |
| 592 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2917 | PetscCall(VecCopy(bv->Bx,y)); |
| 593 | ✗ | } else PetscCall(VecCopy(x,y)); | |
| 594 |
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.
|
1129 | PetscFunctionReturn(PETSC_SUCCESS); |
| 595 | } | ||
| 596 | |||
| 597 | /*@ | ||
| 598 | BVApplyMatrixBV - Multiplies the `BV` vectors by the matrix representation | ||
| 599 | of the inner product. | ||
| 600 | |||
| 601 | Neighbor-wise Collective | ||
| 602 | |||
| 603 | Input Parameter: | ||
| 604 | . X - the basis vectors context | ||
| 605 | |||
| 606 | Output Parameter: | ||
| 607 | . Y - the basis vectors to store the result (optional) | ||
| 608 | |||
| 609 | Note: | ||
| 610 | This function computes $Y = B X$, where $B$ is the matrix given with | ||
| 611 | `BVSetMatrix()`. This operation is computed as in `BVMatMult()`. | ||
| 612 | If no matrix was specified, then it just copies $Y = X$. | ||
| 613 | |||
| 614 | If no `Y` is given, the result is stored internally in the cached `BV`. | ||
| 615 | |||
| 616 | Level: developer | ||
| 617 | |||
| 618 | .seealso: [](sec:bv), `BVSetMatrix()`, `BVApplyMatrix()`, `BVMatMult()`, `BVGetCachedBV()` | ||
| 619 | @*/ | ||
| 620 | 72 | PetscErrorCode BVApplyMatrixBV(BV X,BV Y) | |
| 621 | { | ||
| 622 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
72 | PetscFunctionBegin; |
| 623 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
72 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
| 624 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
72 | if (Y) { |
| 625 |
2/12✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
72 | PetscValidHeaderSpecific(Y,BV_CLASSID,2); |
| 626 |
5/8✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
72 | if (X->matrix) PetscCall(BVMatMult(X,X->matrix,Y)); |
| 627 | ✗ | else PetscCall(BVCopy(X,Y)); | |
| 628 | ✗ | } else PetscCall(BV_IPMatMultBV(X)); | |
| 629 |
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.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 630 | } | ||
| 631 | |||
| 632 | /*@ | ||
| 633 | BVSetSignature - Sets the signature matrix to be used in orthogonalization. | ||
| 634 | |||
| 635 | Logically Collective | ||
| 636 | |||
| 637 | Input Parameters: | ||
| 638 | + bv - the basis vectors context | ||
| 639 | - omega - a vector representing the diagonal of the signature matrix | ||
| 640 | |||
| 641 | Note: | ||
| 642 | The signature matrix $\Omega = V^*B V$ is relevant only for an indefinite $B$. | ||
| 643 | |||
| 644 | Level: developer | ||
| 645 | |||
| 646 | .seealso: [](sec:bv), `BVSetMatrix()`, `BVGetSignature()` | ||
| 647 | @*/ | ||
| 648 | 10359 | PetscErrorCode BVSetSignature(BV bv,Vec omega) | |
| 649 | { | ||
| 650 | 10359 | PetscInt i,n; | |
| 651 | 10359 | const PetscScalar *pomega; | |
| 652 | 10359 | PetscScalar *intern; | |
| 653 | |||
| 654 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10359 | PetscFunctionBegin; |
| 655 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10359 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 656 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10359 | BVCheckSizes(bv,1); |
| 657 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10359 | PetscValidHeaderSpecific(omega,VEC_CLASSID,2); |
| 658 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10359 | PetscValidType(omega,2); |
| 659 | |||
| 660 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10359 | PetscCall(VecGetSize(omega,&n)); |
| 661 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10359 | PetscCheck(n==bv->k,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_SIZ,"Vec argument has %" PetscInt_FMT " elements, should be %" PetscInt_FMT,n,bv->k); |
| 662 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10359 | PetscCall(BV_AllocateSignature(bv)); |
| 663 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
|
10359 | if (bv->indef) { |
| 664 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10341 | PetscCall(VecGetArrayRead(omega,&pomega)); |
| 665 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10341 | PetscCall(VecGetArray(bv->omega,&intern)); |
| 666 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
220799 | for (i=0;i<n;i++) intern[bv->nc+i] = pomega[i]; |
| 667 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10341 | PetscCall(VecRestoreArray(bv->omega,&intern)); |
| 668 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10341 | PetscCall(VecRestoreArrayRead(omega,&pomega)); |
| 669 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | } else PetscCall(PetscInfo(bv,"Ignoring signature because BV is not indefinite\n")); |
| 670 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
10359 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 671 |
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.
|
10359 | PetscFunctionReturn(PETSC_SUCCESS); |
| 672 | } | ||
| 673 | |||
| 674 | /*@ | ||
| 675 | BVGetSignature - Retrieves the signature matrix from last orthogonalization. | ||
| 676 | |||
| 677 | Not Collective | ||
| 678 | |||
| 679 | Input Parameter: | ||
| 680 | . bv - the basis vectors context | ||
| 681 | |||
| 682 | Output Parameter: | ||
| 683 | . omega - a vector representing the diagonal of the signature matrix | ||
| 684 | |||
| 685 | Note: | ||
| 686 | The signature matrix $\Omega = V^*B V$ is relevant only for an indefinite $B$. | ||
| 687 | |||
| 688 | Level: developer | ||
| 689 | |||
| 690 | .seealso: [](sec:bv), `BVSetMatrix()`, `BVSetSignature()` | ||
| 691 | @*/ | ||
| 692 | 687 | PetscErrorCode BVGetSignature(BV bv,Vec omega) | |
| 693 | { | ||
| 694 | 687 | PetscInt i,n; | |
| 695 | 687 | PetscScalar *pomega; | |
| 696 | 687 | const PetscScalar *intern; | |
| 697 | |||
| 698 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
687 | PetscFunctionBegin; |
| 699 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
687 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 700 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
687 | BVCheckSizes(bv,1); |
| 701 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
687 | PetscValidHeaderSpecific(omega,VEC_CLASSID,2); |
| 702 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
687 | PetscValidType(omega,2); |
| 703 | |||
| 704 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
687 | PetscCall(VecGetSize(omega,&n)); |
| 705 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
687 | PetscCheck(n==bv->k,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_SIZ,"Vec argument has %" PetscInt_FMT " elements, should be %" PetscInt_FMT,n,bv->k); |
| 706 |
2/4✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
|
687 | if (bv->indef && bv->omega) { |
| 707 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
687 | PetscCall(VecGetArray(omega,&pomega)); |
| 708 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
687 | PetscCall(VecGetArrayRead(bv->omega,&intern)); |
| 709 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
7670 | for (i=0;i<n;i++) pomega[i] = intern[bv->nc+i]; |
| 710 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
687 | PetscCall(VecRestoreArrayRead(bv->omega,&intern)); |
| 711 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
687 | PetscCall(VecRestoreArray(omega,&pomega)); |
| 712 | ✗ | } else PetscCall(VecSet(omega,1.0)); | |
| 713 |
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.
|
170 | PetscFunctionReturn(PETSC_SUCCESS); |
| 714 | } | ||
| 715 | |||
| 716 | /*@ | ||
| 717 | BVSetBufferVec - Attach a vector object to be used as buffer space for | ||
| 718 | several operations. | ||
| 719 | |||
| 720 | Collective | ||
| 721 | |||
| 722 | Input Parameters: | ||
| 723 | + bv - the basis vectors context) | ||
| 724 | - buffer - the vector | ||
| 725 | |||
| 726 | Notes: | ||
| 727 | Use `BVGetBufferVec()` to retrieve the vector (for example, to free it | ||
| 728 | at the end of the computations). | ||
| 729 | |||
| 730 | The vector must be sequential of length $(n_c+m)m$, where $m$ is the number | ||
| 731 | of columns of `bv` and $n_c$ is the number of constraints. | ||
| 732 | |||
| 733 | Level: developer | ||
| 734 | |||
| 735 | .seealso: [](sec:bv), `BVGetBufferVec()`, `BVSetSizes()`, `BVGetNumConstraints()` | ||
| 736 | @*/ | ||
| 737 | ✗ | PetscErrorCode BVSetBufferVec(BV bv,Vec buffer) | |
| 738 | { | ||
| 739 | ✗ | PetscInt ld,n; | |
| 740 | ✗ | PetscMPIInt size; | |
| 741 | |||
| 742 | ✗ | PetscFunctionBegin; | |
| 743 | ✗ | PetscValidHeaderSpecific(bv,BV_CLASSID,1); | |
| 744 | ✗ | PetscValidHeaderSpecific(buffer,VEC_CLASSID,2); | |
| 745 | ✗ | BVCheckSizes(bv,1); | |
| 746 | ✗ | PetscCall(VecGetSize(buffer,&n)); | |
| 747 | ✗ | ld = bv->m+bv->nc; | |
| 748 | ✗ | PetscCheck(n==ld*bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_SIZ,"Buffer size must be %" PetscInt_FMT,ld*bv->m); | |
| 749 | ✗ | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)buffer),&size)); | |
| 750 | ✗ | PetscCheck(size==1,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Buffer must be a sequential vector"); | |
| 751 | |||
| 752 | ✗ | PetscCall(PetscObjectReference((PetscObject)buffer)); | |
| 753 | ✗ | PetscCall(VecDestroy(&bv->buffer)); | |
| 754 | ✗ | bv->buffer = buffer; | |
| 755 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 756 | } | ||
| 757 | |||
| 758 | /*@ | ||
| 759 | BVGetBufferVec - Obtain the buffer vector associated with the `BV` object. | ||
| 760 | |||
| 761 | Collective | ||
| 762 | |||
| 763 | Input Parameter: | ||
| 764 | . bv - the basis vectors context | ||
| 765 | |||
| 766 | Output Parameter: | ||
| 767 | . buffer - vector | ||
| 768 | |||
| 769 | Notes: | ||
| 770 | The vector is created if not available previously. It is a sequential vector | ||
| 771 | of length $(n_c+m) m$, where $m$ is the number of columns of `bv` and $n_c$ is the number | ||
| 772 | of constraints. | ||
| 773 | |||
| 774 | Developer Notes: | ||
| 775 | The buffer vector is viewed as a column-major matrix with leading dimension equal | ||
| 776 | to $n_c+m$, and $m$ columns at most. In the most common usage, it has the structure | ||
| 777 | $$ | ||
| 778 | \left[\begin{array}{c|c} | ||
| 779 | s & \begin{array}{c} C \\\hline H \end{array} | ||
| 780 | \end{array}\right] | ||
| 781 | $$ | ||
| 782 | where $H$ is an upper Hessenberg matrix of order $m (m-1)$, $C$ contains coefficients | ||
| 783 | related to orthogonalization against constraints (first $n_c$ rows), and $s$ is the | ||
| 784 | first column that contains scratch values computed during Gram-Schmidt | ||
| 785 | orthogonalization. In particular, `BVDotColumn()` and `BVMultColumn()` use $s$ to | ||
| 786 | store the coefficients. | ||
| 787 | |||
| 788 | Level: developer | ||
| 789 | |||
| 790 | .seealso: [](sec:bv), `BVSetBufferVec()`, `BVSetSizes()`, `BVGetNumConstraints()`, `BVDotColumn()`, `BVMultColumn()` | ||
| 791 | @*/ | ||
| 792 | 54995 | PetscErrorCode BVGetBufferVec(BV bv,Vec *buffer) | |
| 793 | { | ||
| 794 | 54995 | PetscInt ld; | |
| 795 | |||
| 796 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
54995 | PetscFunctionBegin; |
| 797 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
54995 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 798 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
54995 | PetscAssertPointer(buffer,2); |
| 799 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
54995 | BVCheckSizes(bv,1); |
| 800 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
54995 | if (!bv->buffer) { |
| 801 | 15162 | ld = bv->m+bv->nc; | |
| 802 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15162 | PetscCall(VecCreate(PETSC_COMM_SELF,&bv->buffer)); |
| 803 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15162 | PetscCall(VecSetSizes(bv->buffer,PETSC_DECIDE,ld*bv->m)); |
| 804 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15162 | PetscCall(VecSetType(bv->buffer,bv->vtype)); |
| 805 | } | ||
| 806 | 54995 | *buffer = bv->buffer; | |
| 807 |
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.
|
54995 | PetscFunctionReturn(PETSC_SUCCESS); |
| 808 | } | ||
| 809 | |||
| 810 | /*@ | ||
| 811 | BVSetRandomContext - Sets the `PetscRandom` object associated with the `BV`, | ||
| 812 | to be used in operations that need random numbers. | ||
| 813 | |||
| 814 | Collective | ||
| 815 | |||
| 816 | Input Parameters: | ||
| 817 | + bv - the basis vectors context | ||
| 818 | - rand - the random number generator context | ||
| 819 | |||
| 820 | Level: advanced | ||
| 821 | |||
| 822 | .seealso: [](sec:bv), `BVGetRandomContext()`, `BVSetRandom()`, `BVSetRandomNormal()`, `BVSetRandomColumn()`, `BVSetRandomCond()`, `PetscRandomCreate()` | ||
| 823 | @*/ | ||
| 824 | ✗ | PetscErrorCode BVSetRandomContext(BV bv,PetscRandom rand) | |
| 825 | { | ||
| 826 | ✗ | PetscFunctionBegin; | |
| 827 | ✗ | PetscValidHeaderSpecific(bv,BV_CLASSID,1); | |
| 828 | ✗ | PetscValidHeaderSpecific(rand,PETSC_RANDOM_CLASSID,2); | |
| 829 | ✗ | PetscCheckSameComm(bv,1,rand,2); | |
| 830 | ✗ | PetscCall(PetscObjectReference((PetscObject)rand)); | |
| 831 | ✗ | PetscCall(PetscRandomDestroy(&bv->rand)); | |
| 832 | ✗ | bv->rand = rand; | |
| 833 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 834 | } | ||
| 835 | |||
| 836 | /*@ | ||
| 837 | BVGetRandomContext - Gets the `PetscRandom` object associated with the `BV`. | ||
| 838 | |||
| 839 | Collective | ||
| 840 | |||
| 841 | Input Parameter: | ||
| 842 | . bv - the basis vectors context | ||
| 843 | |||
| 844 | Output Parameter: | ||
| 845 | . rand - the random number generator context | ||
| 846 | |||
| 847 | Level: advanced | ||
| 848 | |||
| 849 | .seealso: [](sec:bv), `BVSetRandomContext()`, `BVSetRandom()`, `BVSetRandomNormal()`, `BVSetRandomColumn()`, `BVSetRandomCond()` | ||
| 850 | @*/ | ||
| 851 | 26437 | PetscErrorCode BVGetRandomContext(BV bv,PetscRandom* rand) | |
| 852 | { | ||
| 853 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
26437 | PetscFunctionBegin; |
| 854 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
26437 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 855 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
26437 | PetscAssertPointer(rand,2); |
| 856 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
26437 | if (!bv->rand) { |
| 857 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8046 | PetscCall(PetscRandomCreate(PetscObjectComm((PetscObject)bv),&bv->rand)); |
| 858 |
3/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
8046 | if (bv->cuda) PetscCall(PetscRandomSetType(bv->rand,PETSCCURAND)); |
| 859 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
8046 | if (bv->sfocalled) PetscCall(PetscRandomSetFromOptions(bv->rand)); |
| 860 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
|
8046 | if (bv->rrandom) { |
| 861 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
64 | PetscCall(PetscRandomSetSeed(bv->rand,0x12345678)); |
| 862 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
64 | PetscCall(PetscRandomSeed(bv->rand)); |
| 863 | } | ||
| 864 | } | ||
| 865 | 26437 | *rand = bv->rand; | |
| 866 |
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.
|
26437 | PetscFunctionReturn(PETSC_SUCCESS); |
| 867 | } | ||
| 868 | |||
| 869 | /*@ | ||
| 870 | BVSetFromOptions - Sets `BV` options from the options database. | ||
| 871 | |||
| 872 | Collective | ||
| 873 | |||
| 874 | Input Parameter: | ||
| 875 | . bv - the basis vectors context | ||
| 876 | |||
| 877 | Note: | ||
| 878 | To see all options, run your program with the `-help` option. | ||
| 879 | |||
| 880 | Level: beginner | ||
| 881 | |||
| 882 | .seealso: [](sec:bv), `BVSetOptionsPrefix()` | ||
| 883 | @*/ | ||
| 884 | 17147 | PetscErrorCode BVSetFromOptions(BV bv) | |
| 885 | { | ||
| 886 | 17147 | char type[256]; | |
| 887 | 17147 | PetscBool flg1,flg2,flg3,flg4; | |
| 888 | 17147 | PetscReal r; | |
| 889 | 17147 | BVOrthogType otype; | |
| 890 | 17147 | BVOrthogRefineType orefine; | |
| 891 | 17147 | BVOrthogBlockType oblock; | |
| 892 | |||
| 893 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17147 | PetscFunctionBegin; |
| 894 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
17147 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 895 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(BVRegisterAll()); |
| 896 |
8/10✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
|
51441 | PetscObjectOptionsBegin((PetscObject)bv); |
| 897 |
7/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
17359 | PetscCall(PetscOptionsFList("-bv_type","Basis Vectors type","BVSetType",BVList,(char*)(((PetscObject)bv)->type_name?((PetscObject)bv)->type_name:BVMAT),type,sizeof(type),&flg1)); |
| 898 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
17147 | if (flg1) PetscCall(BVSetType(bv,type)); |
| 899 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
13003 | else if (!((PetscObject)bv)->type_name) PetscCall(BVSetType(bv,BVMAT)); |
| 900 | |||
| 901 | 17147 | otype = bv->orthog_type; | |
| 902 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsEnum("-bv_orthog_type","Orthogonalization method","BVSetOrthogonalization",BVOrthogTypes,(PetscEnum)otype,(PetscEnum*)&otype,&flg1)); |
| 903 | 17147 | orefine = bv->orthog_ref; | |
| 904 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsEnum("-bv_orthog_refine","Iterative refinement mode during orthogonalization","BVSetOrthogonalization",BVOrthogRefineTypes,(PetscEnum)orefine,(PetscEnum*)&orefine,&flg2)); |
| 905 | 17147 | r = bv->orthog_eta; | |
| 906 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsReal("-bv_orthog_eta","Parameter of iterative refinement during orthogonalization","BVSetOrthogonalization",r,&r,&flg3)); |
| 907 | 17147 | oblock = bv->orthog_block; | |
| 908 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsEnum("-bv_orthog_block","Block orthogonalization method","BVSetOrthogonalization",BVOrthogBlockTypes,(PetscEnum)oblock,(PetscEnum*)&oblock,&flg4)); |
| 909 |
11/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 6 times.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
17147 | if (flg1 || flg2 || flg3 || flg4) PetscCall(BVSetOrthogonalization(bv,otype,orefine,r,oblock)); |
| 910 | |||
| 911 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsEnum("-bv_matmult","Method for BVMatMult","BVSetMatMultMethod",BVMatMultTypes,(PetscEnum)bv->vmm,(PetscEnum*)&bv->vmm,NULL)); |
| 912 | |||
| 913 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsReal("-bv_definite_tol","Tolerance for checking a definite inner product","BVSetDefiniteTolerance",r,&r,&flg1)); |
| 914 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
17147 | if (flg1) PetscCall(BVSetDefiniteTolerance(bv,r)); |
| 915 | |||
| 916 | /* undocumented option to generate random vectors that are independent of the number of processes */ | ||
| 917 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscOptionsGetBool(NULL,NULL,"-bv_reproducible_random",&bv->rrandom,NULL)); |
| 918 | |||
| 919 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
17147 | if (bv->ops->create) bv->defersfo = PETSC_TRUE; /* defer call to setfromoptions */ |
| 920 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
5566 | else PetscTryTypeMethod(bv,setfromoptions,PetscOptionsObject); |
| 921 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)bv,PetscOptionsObject)); |
| 922 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17147 | PetscOptionsEnd(); |
| 923 | 17147 | bv->sfocalled = PETSC_TRUE; | |
| 924 |
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.
|
17147 | PetscFunctionReturn(PETSC_SUCCESS); |
| 925 | } | ||
| 926 | |||
| 927 | /*@ | ||
| 928 | BVSetOrthogonalization - Specifies the method used for the orthogonalization of | ||
| 929 | vectors (classical or modified Gram-Schmidt with or without refinement), and | ||
| 930 | for the block-orthogonalization (simultaneous orthogonalization of a set of | ||
| 931 | vectors). | ||
| 932 | |||
| 933 | Logically Collective | ||
| 934 | |||
| 935 | Input Parameters: | ||
| 936 | + bv - the basis vectors context | ||
| 937 | . type - the method of vector orthogonalization | ||
| 938 | . refine - type of refinement | ||
| 939 | . eta - parameter for selective refinement | ||
| 940 | - block - the method of block orthogonalization | ||
| 941 | |||
| 942 | Options Database Keys: | ||
| 943 | + -bv_orthog_type \<type\> - the vector orthogonalization, either `cgs` or `mgs` | ||
| 944 | . -bv_orthog_refine \<refine\> - the refinement type, `never`, `ifneeded` (default) or `always` | ||
| 945 | . -bv_orthog_eta \<eta\> - the value of `eta` | ||
| 946 | - -bv_orthog_block \<block\> - the block-orthogonalization method | ||
| 947 | |||
| 948 | Notes: | ||
| 949 | The default settings work well for most problems. | ||
| 950 | |||
| 951 | The parameter `eta` should be a real value between 0 and 1, that is used only when | ||
| 952 | the refinement type is `ifneeded`. Use `PETSC_DETERMINE` to set a reasonable | ||
| 953 | default value. Use `PETSC_CURRENT` to leave the current value unchanged. | ||
| 954 | |||
| 955 | When using several processes, `BV_ORTHOG_MGS` is likely to result in bad scalability. | ||
| 956 | |||
| 957 | If the method set for block orthogonalization is `BV_ORTHOG_BLOCK_GS`, then the computation | ||
| 958 | is done column by column with the vector orthogonalization. | ||
| 959 | |||
| 960 | Level: advanced | ||
| 961 | |||
| 962 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVGetOrthogonalization()`, `BVOrthogType`, `BVOrthogRefineType`, `BVOrthogBlockType` | ||
| 963 | @*/ | ||
| 964 | 3720 | PetscErrorCode BVSetOrthogonalization(BV bv,BVOrthogType type,BVOrthogRefineType refine,PetscReal eta,BVOrthogBlockType block) | |
| 965 | { | ||
| 966 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3720 | PetscFunctionBegin; |
| 967 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
3720 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 968 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
3720 | PetscValidLogicalCollectiveEnum(bv,type,2); |
| 969 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
3720 | PetscValidLogicalCollectiveEnum(bv,refine,3); |
| 970 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
3720 | PetscValidLogicalCollectiveReal(bv,eta,4); |
| 971 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
3720 | PetscValidLogicalCollectiveEnum(bv,block,5); |
| 972 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
3720 | switch (type) { |
| 973 | 3720 | case BV_ORTHOG_CGS: | |
| 974 | case BV_ORTHOG_MGS: | ||
| 975 | 3720 | bv->orthog_type = type; | |
| 976 | 3720 | break; | |
| 977 | ✗ | default: | |
| 978 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Unknown orthogonalization type"); | |
| 979 | } | ||
| 980 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
3720 | switch (refine) { |
| 981 | 3720 | case BV_ORTHOG_REFINE_NEVER: | |
| 982 | case BV_ORTHOG_REFINE_IFNEEDED: | ||
| 983 | case BV_ORTHOG_REFINE_ALWAYS: | ||
| 984 | 3720 | bv->orthog_ref = refine; | |
| 985 | 3720 | break; | |
| 986 | ✗ | default: | |
| 987 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Unknown refinement type"); | |
| 988 | } | ||
| 989 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
3720 | if (eta == (PetscReal)PETSC_DETERMINE) { |
| 990 | ✗ | bv->orthog_eta = 0.7071; | |
| 991 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3720 | } else if (eta != (PetscReal)PETSC_CURRENT) { |
| 992 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
3620 | PetscCheck(eta>0.0 && eta<=1.0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Invalid eta value"); |
| 993 | 3620 | bv->orthog_eta = eta; | |
| 994 | } | ||
| 995 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
3720 | switch (block) { |
| 996 | 3720 | case BV_ORTHOG_BLOCK_GS: | |
| 997 | case BV_ORTHOG_BLOCK_CHOL: | ||
| 998 | case BV_ORTHOG_BLOCK_TSQR: | ||
| 999 | case BV_ORTHOG_BLOCK_TSQRCHOL: | ||
| 1000 | case BV_ORTHOG_BLOCK_SVQB: | ||
| 1001 | 3720 | bv->orthog_block = block; | |
| 1002 | 3720 | break; | |
| 1003 | ✗ | default: | |
| 1004 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Unknown block orthogonalization type"); | |
| 1005 | } | ||
| 1006 |
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.
|
3720 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1007 | } | ||
| 1008 | |||
| 1009 | /*@ | ||
| 1010 | BVGetOrthogonalization - Gets the orthogonalization settings from the `BV` object. | ||
| 1011 | |||
| 1012 | Not Collective | ||
| 1013 | |||
| 1014 | Input Parameter: | ||
| 1015 | . bv - basis vectors context | ||
| 1016 | |||
| 1017 | Output Parameters: | ||
| 1018 | + type - the method of vector orthogonalization | ||
| 1019 | . refine - type of refinement | ||
| 1020 | . eta - parameter for selective refinement | ||
| 1021 | - block - the method of block orthogonalization | ||
| 1022 | |||
| 1023 | Level: advanced | ||
| 1024 | |||
| 1025 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVSetOrthogonalization()`, `BVOrthogType`, `BVOrthogRefineType`, `BVOrthogBlockType` | ||
| 1026 | @*/ | ||
| 1027 | 3585 | PetscErrorCode BVGetOrthogonalization(BV bv,BVOrthogType *type,BVOrthogRefineType *refine,PetscReal *eta,BVOrthogBlockType *block) | |
| 1028 | { | ||
| 1029 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3585 | PetscFunctionBegin; |
| 1030 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
3585 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1031 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3585 | if (type) *type = bv->orthog_type; |
| 1032 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3585 | if (refine) *refine = bv->orthog_ref; |
| 1033 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3585 | if (eta) *eta = bv->orthog_eta; |
| 1034 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3585 | if (block) *block = bv->orthog_block; |
| 1035 |
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.
|
3585 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1036 | } | ||
| 1037 | |||
| 1038 | /*@ | ||
| 1039 | BVSetMatMultMethod - Specifies the method used for the `BVMatMult()` operation. | ||
| 1040 | |||
| 1041 | Logically Collective | ||
| 1042 | |||
| 1043 | Input Parameters: | ||
| 1044 | + bv - the basis vectors context | ||
| 1045 | - method - the method for the `BVMatMult()` operation | ||
| 1046 | |||
| 1047 | Options Database Key: | ||
| 1048 | . -bv_matmult \<method\> - choose one of the methods: `vecs`, `mat` | ||
| 1049 | |||
| 1050 | Note: | ||
| 1051 | The default is `BV_MATMULT_MAT` except in the case of `BVVECS`. | ||
| 1052 | |||
| 1053 | Level: advanced | ||
| 1054 | |||
| 1055 | .seealso: [](sec:bv), `BVMatMult()`, `BVGetMatMultMethod()`, `BVMatMultType` | ||
| 1056 | @*/ | ||
| 1057 | 536 | PetscErrorCode BVSetMatMultMethod(BV bv,BVMatMultType method) | |
| 1058 | { | ||
| 1059 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
536 | PetscFunctionBegin; |
| 1060 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
536 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1061 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
536 | PetscValidLogicalCollectiveEnum(bv,method,2); |
| 1062 |
1/3✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
536 | switch (method) { |
| 1063 | 536 | case BV_MATMULT_VECS: | |
| 1064 | case BV_MATMULT_MAT: | ||
| 1065 | 536 | bv->vmm = method; | |
| 1066 | 536 | break; | |
| 1067 | ✗ | case BV_MATMULT_MAT_SAVE: | |
| 1068 | ✗ | PetscCall(PetscInfo(bv,"BV_MATMULT_MAT_SAVE is deprecated, using BV_MATMULT_MAT\n")); | |
| 1069 | ✗ | bv->vmm = BV_MATMULT_MAT; | |
| 1070 | ✗ | break; | |
| 1071 | ✗ | default: | |
| 1072 | ✗ | SETERRQ(PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Unknown matmult method"); | |
| 1073 | } | ||
| 1074 |
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.
|
128 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1075 | } | ||
| 1076 | |||
| 1077 | /*@ | ||
| 1078 | BVGetMatMultMethod - Gets the method used for the `BVMatMult()` operation. | ||
| 1079 | |||
| 1080 | Not Collective | ||
| 1081 | |||
| 1082 | Input Parameter: | ||
| 1083 | . bv - basis vectors context | ||
| 1084 | |||
| 1085 | Output Parameter: | ||
| 1086 | . method - the method for the `BVMatMult()` operation | ||
| 1087 | |||
| 1088 | Level: advanced | ||
| 1089 | |||
| 1090 | .seealso: [](sec:bv), `BVMatMult()`, `BVSetMatMultMethod()`, `BVMatMultType` | ||
| 1091 | @*/ | ||
| 1092 | 268 | PetscErrorCode BVGetMatMultMethod(BV bv,BVMatMultType *method) | |
| 1093 | { | ||
| 1094 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
268 | PetscFunctionBegin; |
| 1095 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
268 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1096 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
268 | PetscAssertPointer(method,2); |
| 1097 | 268 | *method = bv->vmm; | |
| 1098 |
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.
|
268 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1099 | } | ||
| 1100 | |||
| 1101 | /*@ | ||
| 1102 | BVGetColumn - Returns a `Vec` object that contains the entries of the | ||
| 1103 | requested column of the basis vectors object. | ||
| 1104 | |||
| 1105 | Logically Collective | ||
| 1106 | |||
| 1107 | Input Parameters: | ||
| 1108 | + bv - the basis vectors context | ||
| 1109 | - j - the index of the requested column | ||
| 1110 | |||
| 1111 | Output Parameter: | ||
| 1112 | . v - vector containing the jth column | ||
| 1113 | |||
| 1114 | Notes: | ||
| 1115 | The returned `Vec` must be seen as a reference (not a copy) of the `BV` | ||
| 1116 | column, that is, modifying the `Vec` will change the `BV` entries as well. | ||
| 1117 | |||
| 1118 | The returned `Vec` must not be destroyed. `BVRestoreColumn()` must be | ||
| 1119 | called when it is no longer needed. At most, two columns can be fetched, | ||
| 1120 | that is, this function can only be called twice before the corresponding | ||
| 1121 | `BVRestoreColumn()` is invoked. | ||
| 1122 | |||
| 1123 | A negative index `j` selects the `i`-th constraint, where `i=-j`. Constraints | ||
| 1124 | should not be modified. | ||
| 1125 | |||
| 1126 | Level: beginner | ||
| 1127 | |||
| 1128 | .seealso: [](sec:bv), `BVRestoreColumn()`, `BVInsertConstraints()` | ||
| 1129 | @*/ | ||
| 1130 | 11162049 | PetscErrorCode BVGetColumn(BV bv,PetscInt j,Vec *v) | |
| 1131 | { | ||
| 1132 | 11162049 | PetscInt l; | |
| 1133 | |||
| 1134 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11162049 | PetscFunctionBegin; |
| 1135 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
11162049 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1136 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscValidType(bv,1); |
| 1137 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | BVCheckSizes(bv,1); |
| 1138 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | BVCheckOp(bv,1,getcolumn); |
| 1139 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
11162049 | PetscValidLogicalCollectiveInt(bv,j,2); |
| 1140 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
11162049 | PetscCheck(j>=0 || -j<=bv->nc,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"You requested constraint %" PetscInt_FMT " but only %" PetscInt_FMT " are available",-j,bv->nc); |
| 1141 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscCheck(j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"You requested column %" PetscInt_FMT " but only %" PetscInt_FMT " are available",j,bv->m); |
| 1142 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
11162049 | PetscCheck(j!=bv->ci[0] && j!=bv->ci[1],PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Column %" PetscInt_FMT " already fetched in a previous call to BVGetColumn",j); |
| 1143 |
3/4✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
|
11162049 | l = BVAvailableVec; |
| 1144 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscCheck(l!=-1,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Too many requested columns; you must call BVRestoreColumn for one of the previously fetched columns"); |
| 1145 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
11162049 | PetscUseTypeMethod(bv,getcolumn,j,v); |
| 1146 | 11162049 | bv->ci[l] = j; | |
| 1147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11162049 | PetscCall(VecGetState(bv->cv[l],&bv->st[l])); |
| 1148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11162049 | PetscCall(PetscObjectGetId((PetscObject)bv->cv[l],&bv->id[l])); |
| 1149 | 11162049 | *v = bv->cv[l]; | |
| 1150 |
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.
|
11162049 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1151 | } | ||
| 1152 | |||
| 1153 | /*@ | ||
| 1154 | BVRestoreColumn - Restore a column obtained with `BVGetColumn()`. | ||
| 1155 | |||
| 1156 | Logically Collective | ||
| 1157 | |||
| 1158 | Input Parameters: | ||
| 1159 | + bv - the basis vectors context | ||
| 1160 | . j - the index of the column | ||
| 1161 | - v - vector obtained with `BVGetColumn()` | ||
| 1162 | |||
| 1163 | Note: | ||
| 1164 | The arguments must match the corresponding call to `BVGetColumn()`. | ||
| 1165 | |||
| 1166 | Level: beginner | ||
| 1167 | |||
| 1168 | .seealso: [](sec:bv), `BVGetColumn()` | ||
| 1169 | @*/ | ||
| 1170 | 11162049 | PetscErrorCode BVRestoreColumn(BV bv,PetscInt j,Vec *v) | |
| 1171 | { | ||
| 1172 | 11162049 | PetscObjectId id; | |
| 1173 | 11162049 | PetscObjectState st; | |
| 1174 | 11162049 | PetscInt l; | |
| 1175 | |||
| 1176 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11162049 | PetscFunctionBegin; |
| 1177 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
11162049 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1178 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscValidType(bv,1); |
| 1179 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | BVCheckSizes(bv,1); |
| 1180 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
11162049 | PetscValidLogicalCollectiveInt(bv,j,2); |
| 1181 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
11162049 | PetscAssertPointer(v,3); |
| 1182 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
11162049 | PetscValidHeaderSpecific(*v,VEC_CLASSID,3); |
| 1183 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
11162049 | PetscCheck(j>=0 || -j<=bv->nc,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"You requested constraint %" PetscInt_FMT " but only %" PetscInt_FMT " are available",-j,bv->nc); |
| 1184 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscCheck(j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"You requested column %" PetscInt_FMT " but only %" PetscInt_FMT " are available",j,bv->m); |
| 1185 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
11162049 | PetscCheck(j==bv->ci[0] || j==bv->ci[1],PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Column %" PetscInt_FMT " has not been fetched with a call to BVGetColumn",j); |
| 1186 | 11162049 | l = (j==bv->ci[0])? 0: 1; | |
| 1187 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11162049 | PetscCall(PetscObjectGetId((PetscObject)*v,&id)); |
| 1188 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11162049 | PetscCheck(id==bv->id[l],PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Argument 3 is not the same Vec that was obtained with BVGetColumn"); |
| 1189 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11162049 | PetscCall(VecGetState(*v,&st)); |
| 1190 |
4/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
11162049 | if (st!=bv->st[l]) PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 1191 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
11162049 | PetscUseTypeMethod(bv,restorecolumn,j,v); |
| 1192 | 11162049 | bv->ci[l] = -bv->nc-1; | |
| 1193 | 11162049 | bv->st[l] = -1; | |
| 1194 | 11162049 | bv->id[l] = 0; | |
| 1195 | 11162049 | *v = NULL; | |
| 1196 |
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.
|
11162049 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1197 | } | ||
| 1198 | |||
| 1199 | /*@C | ||
| 1200 | BVGetArray - Returns a pointer to a contiguous array that contains this | ||
| 1201 | process' portion of the `BV` data. | ||
| 1202 | |||
| 1203 | Logically Collective | ||
| 1204 | |||
| 1205 | Input Parameter: | ||
| 1206 | . bv - the basis vectors context | ||
| 1207 | |||
| 1208 | Output Parameter: | ||
| 1209 | . a - location to put pointer to the array | ||
| 1210 | |||
| 1211 | Notes: | ||
| 1212 | `BVRestoreArray()` must be called when access to the array is no longer needed. | ||
| 1213 | This operation may imply a data copy, for `BV` types that do not store | ||
| 1214 | data contiguously in memory. | ||
| 1215 | |||
| 1216 | The pointer will normally point to the first entry of the first column, | ||
| 1217 | but if the `BV` has constraints then these go before the regular columns. | ||
| 1218 | |||
| 1219 | Note that for manipulating the pointer to the `BV` array, one must take into | ||
| 1220 | account the leading dimension, which might be different from the local | ||
| 1221 | number of rows, see `BVGetLeadingDimension()`. | ||
| 1222 | |||
| 1223 | Use `BVGetArrayRead()` for read-only access. | ||
| 1224 | |||
| 1225 | Level: advanced | ||
| 1226 | |||
| 1227 | .seealso: [](sec:bv), `BVRestoreArray()`, `BVInsertConstraints()`, `BVGetLeadingDimension()`, `BVGetArrayRead()`, `BVType` | ||
| 1228 | @*/ | ||
| 1229 | 210421 | PetscErrorCode BVGetArray(BV bv,PetscScalar **a) | |
| 1230 | { | ||
| 1231 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
210421 | PetscFunctionBegin; |
| 1232 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
210421 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1233 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210421 | PetscValidType(bv,1); |
| 1234 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210421 | BVCheckSizes(bv,1); |
| 1235 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210421 | BVCheckOp(bv,1,getarray); |
| 1236 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
|
210421 | PetscUseTypeMethod(bv,getarray,a); |
| 1237 |
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.
|
52628 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1238 | } | ||
| 1239 | |||
| 1240 | /*@C | ||
| 1241 | BVRestoreArray - Restore the `BV` object after `BVGetArray()` has been called. | ||
| 1242 | |||
| 1243 | Logically Collective | ||
| 1244 | |||
| 1245 | Input Parameters: | ||
| 1246 | + bv - the basis vectors context | ||
| 1247 | - a - location of pointer to array obtained from `BVGetArray()` | ||
| 1248 | |||
| 1249 | Note: | ||
| 1250 | This operation may imply a data copy, for `BV` types that do not store | ||
| 1251 | data contiguously in memory. | ||
| 1252 | |||
| 1253 | Level: advanced | ||
| 1254 | |||
| 1255 | .seealso: [](sec:bv), `BVGetArray()` | ||
| 1256 | @*/ | ||
| 1257 | 210421 | PetscErrorCode BVRestoreArray(BV bv,PetscScalar **a) | |
| 1258 | { | ||
| 1259 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
210421 | PetscFunctionBegin; |
| 1260 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
210421 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1261 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210421 | PetscValidType(bv,1); |
| 1262 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210421 | BVCheckSizes(bv,1); |
| 1263 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
210421 | PetscTryTypeMethod(bv,restorearray,a); |
| 1264 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
210421 | if (a) *a = NULL; |
| 1265 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
210421 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 1266 |
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.
|
210421 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1267 | } | ||
| 1268 | |||
| 1269 | /*@C | ||
| 1270 | BVGetArrayRead - Returns a read-only pointer to a contiguous array that | ||
| 1271 | contains this processor's portion of the `BV` data. | ||
| 1272 | |||
| 1273 | Not Collective | ||
| 1274 | |||
| 1275 | Input Parameter: | ||
| 1276 | . bv - the basis vectors context | ||
| 1277 | |||
| 1278 | Output Parameter: | ||
| 1279 | . a - location to put pointer to the array | ||
| 1280 | |||
| 1281 | Notes: | ||
| 1282 | `BVRestoreArrayRead()` must be called when access to the array is no | ||
| 1283 | longer needed. This operation may imply a data copy, for `BV` types that | ||
| 1284 | do not store data contiguously in memory. | ||
| 1285 | |||
| 1286 | The pointer will normally point to the first entry of the first column, | ||
| 1287 | but if the `BV` has constraints then these go before the regular columns. | ||
| 1288 | |||
| 1289 | Level: advanced | ||
| 1290 | |||
| 1291 | .seealso: [](sec:bv), `BVRestoreArrayRead()`, `BVInsertConstraints()`, `BVGetLeadingDimension()`, `BVGetArray()`, `BVType` | ||
| 1292 | @*/ | ||
| 1293 | 1590 | PetscErrorCode BVGetArrayRead(BV bv,const PetscScalar **a) | |
| 1294 | { | ||
| 1295 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1590 | PetscFunctionBegin; |
| 1296 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1590 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1297 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1590 | PetscValidType(bv,1); |
| 1298 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1590 | BVCheckSizes(bv,1); |
| 1299 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1590 | BVCheckOp(bv,1,getarrayread); |
| 1300 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
|
1590 | PetscUseTypeMethod(bv,getarrayread,a); |
| 1301 |
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.
|
386 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1302 | } | ||
| 1303 | |||
| 1304 | /*@C | ||
| 1305 | BVRestoreArrayRead - Restore the `BV` object after `BVGetArrayRead()` has | ||
| 1306 | been called. | ||
| 1307 | |||
| 1308 | Not Collective | ||
| 1309 | |||
| 1310 | Input Parameters: | ||
| 1311 | + bv - the basis vectors context | ||
| 1312 | - a - location of pointer to array obtained from `BVGetArrayRead()` | ||
| 1313 | |||
| 1314 | Level: advanced | ||
| 1315 | |||
| 1316 | .seealso: [](sec:bv), `BVGetArrayRead()` | ||
| 1317 | @*/ | ||
| 1318 | 1590 | PetscErrorCode BVRestoreArrayRead(BV bv,const PetscScalar **a) | |
| 1319 | { | ||
| 1320 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1590 | PetscFunctionBegin; |
| 1321 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1590 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1322 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1590 | PetscValidType(bv,1); |
| 1323 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1590 | BVCheckSizes(bv,1); |
| 1324 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1590 | PetscTryTypeMethod(bv,restorearrayread,a); |
| 1325 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
1590 | if (a) *a = NULL; |
| 1326 |
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.
|
386 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1327 | } | ||
| 1328 | |||
| 1329 | /*@ | ||
| 1330 | BVCreateVec - Creates a new `Vec` object with the same type and dimensions | ||
| 1331 | as the columns of the basis vectors object. | ||
| 1332 | |||
| 1333 | Collective | ||
| 1334 | |||
| 1335 | Input Parameter: | ||
| 1336 | . bv - the basis vectors context | ||
| 1337 | |||
| 1338 | Output Parameter: | ||
| 1339 | . v - the new vector | ||
| 1340 | |||
| 1341 | Note: | ||
| 1342 | The user is responsible for destroying the returned vector. | ||
| 1343 | |||
| 1344 | Level: beginner | ||
| 1345 | |||
| 1346 | .seealso: [](sec:bv), `BVCreateMat()`, `BVCreateVecEmpty()` | ||
| 1347 | @*/ | ||
| 1348 | 10745 | PetscErrorCode BVCreateVec(BV bv,Vec *v) | |
| 1349 | { | ||
| 1350 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10745 | PetscFunctionBegin; |
| 1351 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10745 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1352 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10745 | BVCheckSizes(bv,1); |
| 1353 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10745 | PetscAssertPointer(v,2); |
| 1354 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10745 | PetscCall(VecCreate(PetscObjectComm((PetscObject)bv),v)); |
| 1355 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10745 | PetscCall(VecSetLayout(*v,bv->map)); |
| 1356 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10745 | PetscCall(VecSetType(*v,bv->vtype)); |
| 1357 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10745 | PetscCall(VecSetUp(*v)); |
| 1358 |
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.
|
2668 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1359 | } | ||
| 1360 | |||
| 1361 | /*@ | ||
| 1362 | BVCreateVecEmpty - Creates a new `Vec` object with the same type and dimensions | ||
| 1363 | as the columns of the basis vectors object, but without internal array. | ||
| 1364 | |||
| 1365 | Collective | ||
| 1366 | |||
| 1367 | Input Parameter: | ||
| 1368 | . bv - the basis vectors context | ||
| 1369 | |||
| 1370 | Output Parameter: | ||
| 1371 | . v - the new vector | ||
| 1372 | |||
| 1373 | Note: | ||
| 1374 | This works as `BVCreateVec()`, but the new vector does not have the array allocated, | ||
| 1375 | so the intended usage is with `VecPlaceArray()`. | ||
| 1376 | |||
| 1377 | Level: developer | ||
| 1378 | |||
| 1379 | .seealso: [](sec:bv), `BVCreateVec()` | ||
| 1380 | @*/ | ||
| 1381 | 231896 | PetscErrorCode BVCreateVecEmpty(BV bv,Vec *v) | |
| 1382 | { | ||
| 1383 | 231896 | PetscBool standard,cuda,hip,mpi; | |
| 1384 | 231896 | PetscInt N,nloc,bs; | |
| 1385 | |||
| 1386 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
231896 | PetscFunctionBegin; |
| 1387 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
231896 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1388 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
231896 | BVCheckSizes(bv,1); |
| 1389 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
231896 | PetscAssertPointer(v,2); |
| 1390 | |||
| 1391 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscStrcmpAny(bv->vtype,&standard,VECSEQ,VECMPI,"")); |
| 1392 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscStrcmpAny(bv->vtype,&cuda,VECSEQCUDA,VECMPICUDA,"")); |
| 1393 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscStrcmpAny(bv->vtype,&hip,VECSEQHIP,VECMPIHIP,"")); |
| 1394 |
3/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
231896 | if (standard || cuda || hip) { |
| 1395 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscStrcmpAny(bv->vtype,&mpi,VECMPI,VECMPICUDA,VECMPIHIP,"")); |
| 1396 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscLayoutGetLocalSize(bv->map,&nloc)); |
| 1397 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscLayoutGetSize(bv->map,&N)); |
| 1398 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
231896 | PetscCall(PetscLayoutGetBlockSize(bv->map,&bs)); |
| 1399 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
|
231896 | if (cuda) { |
| 1400 | #if defined(PETSC_HAVE_CUDA) | ||
| 1401 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
5920 | if (mpi) PetscCall(VecCreateMPICUDAWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,N,NULL,v)); |
| 1402 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4112 | else PetscCall(VecCreateSeqCUDAWithArray(PetscObjectComm((PetscObject)bv),bs,N,NULL,v)); |
| 1403 | #endif | ||
| 1404 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
225976 | } else if (hip) { |
| 1405 | #if defined(PETSC_HAVE_HIP) | ||
| 1406 | if (mpi) PetscCall(VecCreateMPIHIPWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,N,NULL,v)); | ||
| 1407 | else PetscCall(VecCreateSeqHIPWithArray(PetscObjectComm((PetscObject)bv),bs,N,NULL,v)); | ||
| 1408 | #endif | ||
| 1409 | } else { | ||
| 1410 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
225976 | if (mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,N,NULL,v)); |
| 1411 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
188008 | else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,N,NULL,v)); |
| 1412 | } | ||
| 1413 | ✗ | } else PetscCall(BVCreateVec(bv,v)); /* standard duplicate, with internal array */ | |
| 1414 |
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.
|
56230 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1415 | } | ||
| 1416 | |||
| 1417 | /*@ | ||
| 1418 | BVSetVecType - Set the vector type to be used when creating vectors via `BVCreateVec()`. | ||
| 1419 | |||
| 1420 | Collective | ||
| 1421 | |||
| 1422 | Input Parameters: | ||
| 1423 | + bv - the basis vectors context | ||
| 1424 | - vtype - the vector type | ||
| 1425 | |||
| 1426 | Level: advanced | ||
| 1427 | |||
| 1428 | Note: | ||
| 1429 | This is not needed if the `BV` object is set up with `BVSetSizesFromVec()`, but may be | ||
| 1430 | required in the case of `BVSetSizes()` if one wants to work with non-standard vectors. | ||
| 1431 | |||
| 1432 | .seealso: [](sec:bv), `BVCreateVec()`, `BVGetVecType()`, `BVSetSizesFromVec()`, `BVSetSizes()` | ||
| 1433 | @*/ | ||
| 1434 | 126501 | PetscErrorCode BVSetVecType(BV bv,VecType vtype) | |
| 1435 | { | ||
| 1436 | 126501 | PetscBool std; | |
| 1437 | 126501 | PetscMPIInt size; | |
| 1438 | |||
| 1439 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
126501 | PetscFunctionBegin; |
| 1440 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
126501 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1441 |
5/8✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
126501 | PetscCall(PetscFree(bv->vtype)); |
| 1442 |
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.
|
126501 | PetscCall(PetscStrcmp(vtype,VECSTANDARD,&std)); |
| 1443 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
126501 | if (std) { |
| 1444 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
973 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)bv),&size)); |
| 1445 |
7/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1037 | PetscCall(PetscStrallocpy((size==1)?VECSEQ:VECMPI,(char**)&bv->vtype)); |
| 1446 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
125528 | } else PetscCall(PetscStrallocpy(vtype,(char**)&bv->vtype)); |
| 1447 |
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.
|
30647 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1448 | } | ||
| 1449 | |||
| 1450 | /*@ | ||
| 1451 | BVGetVecType - Get the vector type to be used when creating vectors via `BVCreateVec()`. | ||
| 1452 | |||
| 1453 | Not Collective | ||
| 1454 | |||
| 1455 | Input Parameter: | ||
| 1456 | . bv - the basis vectors context | ||
| 1457 | |||
| 1458 | Output Parameter: | ||
| 1459 | . vtype - the vector type | ||
| 1460 | |||
| 1461 | Level: advanced | ||
| 1462 | |||
| 1463 | .seealso: [](sec:bv), `BVSetVecType()`, `BVCreateVec()` | ||
| 1464 | @*/ | ||
| 1465 | 2388 | PetscErrorCode BVGetVecType(BV bv,VecType *vtype) | |
| 1466 | { | ||
| 1467 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2388 | PetscFunctionBegin; |
| 1468 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2388 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1469 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2388 | PetscAssertPointer(vtype,2); |
| 1470 | 2388 | *vtype = bv->vtype; | |
| 1471 |
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.
|
2388 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1472 | } | ||
| 1473 | |||
| 1474 | /*@ | ||
| 1475 | BVCreateMat - Creates a new `Mat` object of dense type and copies the contents | ||
| 1476 | of the `BV` object. | ||
| 1477 | |||
| 1478 | Collective | ||
| 1479 | |||
| 1480 | Input Parameter: | ||
| 1481 | . bv - the basis vectors context | ||
| 1482 | |||
| 1483 | Output Parameter: | ||
| 1484 | . A - the new matrix | ||
| 1485 | |||
| 1486 | Notes: | ||
| 1487 | The user is responsible for destroying the returned matrix. | ||
| 1488 | |||
| 1489 | The matrix contains all columns of the `BV`, not just the active columns. | ||
| 1490 | |||
| 1491 | Level: intermediate | ||
| 1492 | |||
| 1493 | .seealso: [](sec:bv), `BVCreateFromMat()`, `BVCreateVec()`, `BVGetMat()` | ||
| 1494 | @*/ | ||
| 1495 | 498 | PetscErrorCode BVCreateMat(BV bv,Mat *A) | |
| 1496 | { | ||
| 1497 | 498 | PetscInt ksave,lsave; | |
| 1498 | 498 | Mat B; | |
| 1499 | |||
| 1500 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
498 | PetscFunctionBegin; |
| 1501 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
498 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1502 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
498 | BVCheckSizes(bv,1); |
| 1503 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
498 | PetscAssertPointer(A,2); |
| 1504 | |||
| 1505 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
498 | PetscCall(MatCreateDenseFromVecType(PetscObjectComm((PetscObject)bv),bv->vtype,bv->n,PETSC_DECIDE,bv->N,bv->m,bv->ld,NULL,A)); |
| 1506 | 498 | lsave = bv->l; | |
| 1507 | 498 | ksave = bv->k; | |
| 1508 | 498 | bv->l = 0; | |
| 1509 | 498 | bv->k = bv->m; | |
| 1510 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
498 | PetscCall(BVGetMat(bv,&B)); |
| 1511 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
498 | PetscCall(MatCopy(B,*A,SAME_NONZERO_PATTERN)); |
| 1512 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
498 | PetscCall(BVRestoreMat(bv,&B)); |
| 1513 | 498 | bv->l = lsave; | |
| 1514 | 498 | bv->k = ksave; | |
| 1515 |
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.
|
498 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1516 | } | ||
| 1517 | |||
| 1518 | 207300 | PetscErrorCode BVGetMat_Default(BV bv,Mat *A) | |
| 1519 | { | ||
| 1520 | 207300 | PetscScalar *vv,*aa; | |
| 1521 | 207300 | PetscBool create=PETSC_FALSE; | |
| 1522 | 207300 | PetscInt m,cols; | |
| 1523 | |||
| 1524 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
207300 | PetscFunctionBegin; |
| 1525 | 207300 | m = bv->k-bv->l; | |
| 1526 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
207300 | if (!bv->Aget) create=PETSC_TRUE; |
| 1527 | else { | ||
| 1528 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
177025 | PetscCall(MatDenseGetArray(bv->Aget,&aa)); |
| 1529 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
177025 | PetscCheck(!aa,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"BVGetMat already called on this BV"); |
| 1530 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
177025 | PetscCall(MatGetSize(bv->Aget,NULL,&cols)); |
| 1531 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
177025 | if (cols!=m) { |
| 1532 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5813 | PetscCall(MatDestroy(&bv->Aget)); |
| 1533 | create=PETSC_TRUE; | ||
| 1534 | } | ||
| 1535 | } | ||
| 1536 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
207300 | PetscCall(BVGetArray(bv,&vv)); |
| 1537 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
207300 | if (create) { |
| 1538 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
36088 | PetscCall(MatCreateDenseFromVecType(PetscObjectComm((PetscObject)bv),bv->vtype,bv->n,PETSC_DECIDE,bv->N,m,bv->ld,vv,&bv->Aget)); /* pass a pointer to avoid allocation of storage */ |
| 1539 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
36088 | PetscCall(MatDenseReplaceArray(bv->Aget,NULL)); /* replace with a null pointer, the value after BVRestoreMat */ |
| 1540 | } | ||
| 1541 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
207300 | PetscCall(MatDensePlaceArray(bv->Aget,vv+(bv->nc+bv->l)*bv->ld)); /* set the actual pointer */ |
| 1542 | 207300 | *A = bv->Aget; | |
| 1543 |
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.
|
207300 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1544 | } | ||
| 1545 | |||
| 1546 | /*@ | ||
| 1547 | BVGetMat - Returns a `Mat` object of dense type that shares the memory of | ||
| 1548 | the `BV` object. | ||
| 1549 | |||
| 1550 | Collective | ||
| 1551 | |||
| 1552 | Input Parameter: | ||
| 1553 | . bv - the basis vectors context | ||
| 1554 | |||
| 1555 | Output Parameter: | ||
| 1556 | . A - the matrix | ||
| 1557 | |||
| 1558 | Notes: | ||
| 1559 | The returned matrix contains only the active columns. If the content of | ||
| 1560 | the `Mat` is modified, these changes are also done in the `BV` object. The | ||
| 1561 | user must call `BVRestoreMat()` when no longer needed. | ||
| 1562 | |||
| 1563 | This operation implies a call to `BVGetArray()`, which may result in data | ||
| 1564 | copies. | ||
| 1565 | |||
| 1566 | Level: advanced | ||
| 1567 | |||
| 1568 | .seealso: [](sec:bv), `BVRestoreMat()`, `BVCreateMat()`, `BVGetArray()` | ||
| 1569 | @*/ | ||
| 1570 | 210023 | PetscErrorCode BVGetMat(BV bv,Mat *A) | |
| 1571 | { | ||
| 1572 | 210023 | char name[64]; | |
| 1573 | |||
| 1574 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
210023 | PetscFunctionBegin; |
| 1575 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
210023 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1576 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210023 | BVCheckSizes(bv,1); |
| 1577 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
210023 | PetscAssertPointer(A,2); |
| 1578 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
210023 | PetscUseTypeMethod(bv,getmat,A); |
| 1579 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
210023 | if (((PetscObject)bv)->name) { /* set A's name based on BV name */ |
| 1580 |
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.
|
3436 | PetscCall(PetscStrncpy(name,"Mat_",sizeof(name))); |
| 1581 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3436 | PetscCall(PetscStrlcat(name,((PetscObject)bv)->name,sizeof(name))); |
| 1582 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3436 | PetscCall(PetscObjectSetName((PetscObject)*A,name)); |
| 1583 | } | ||
| 1584 |
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.
|
51912 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1585 | } | ||
| 1586 | |||
| 1587 | 207300 | PetscErrorCode BVRestoreMat_Default(BV bv,Mat *A) | |
| 1588 | { | ||
| 1589 | 207300 | PetscScalar *vv,*aa; | |
| 1590 | |||
| 1591 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
207300 | PetscFunctionBegin; |
| 1592 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
207300 | PetscCall(MatDenseGetArray(bv->Aget,&aa)); |
| 1593 | 207300 | vv = aa-(bv->nc+bv->l)*bv->ld; | |
| 1594 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
207300 | PetscCall(MatDenseResetArray(bv->Aget)); |
| 1595 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
207300 | PetscCall(BVRestoreArray(bv,&vv)); |
| 1596 | 207300 | *A = NULL; | |
| 1597 |
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.
|
207300 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1598 | } | ||
| 1599 | |||
| 1600 | /*@ | ||
| 1601 | BVRestoreMat - Restores the Mat obtained with `BVGetMat()`. | ||
| 1602 | |||
| 1603 | Logically Collective | ||
| 1604 | |||
| 1605 | Input Parameters: | ||
| 1606 | + bv - the basis vectors context | ||
| 1607 | - A - the fetched matrix | ||
| 1608 | |||
| 1609 | Note: | ||
| 1610 | A call to this function must match a previous call of `BVGetMat()`. | ||
| 1611 | The effect is that the contents of the `Mat` are copied back to the | ||
| 1612 | `BV` internal data structures. | ||
| 1613 | |||
| 1614 | Level: advanced | ||
| 1615 | |||
| 1616 | .seealso: [](sec:bv), `BVGetMat()`, `BVRestoreArray()` | ||
| 1617 | @*/ | ||
| 1618 | 210023 | PetscErrorCode BVRestoreMat(BV bv,Mat *A) | |
| 1619 | { | ||
| 1620 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
210023 | PetscFunctionBegin; |
| 1621 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
210023 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1622 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210023 | BVCheckSizes(bv,1); |
| 1623 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
210023 | PetscAssertPointer(A,2); |
| 1624 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210023 | PetscCheck(bv->Aget,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"BVRestoreMat must match a previous call to BVGetMat"); |
| 1625 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
210023 | PetscCheck(bv->Aget==*A,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Mat argument is not the same as the one obtained with BVGetMat"); |
| 1626 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
210023 | PetscUseTypeMethod(bv,restoremat,A); |
| 1627 |
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.
|
51912 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1628 | } | ||
| 1629 | |||
| 1630 | /* | ||
| 1631 | Copy all user-provided attributes of V to another BV object W | ||
| 1632 | */ | ||
| 1633 | 100389 | static inline PetscErrorCode BVDuplicate_Private(BV V,BV W) | |
| 1634 | { | ||
| 1635 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
100389 | PetscFunctionBegin; |
| 1636 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
100389 | PetscCall(PetscLayoutReference(V->map,&W->map)); |
| 1637 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
100389 | PetscCall(BVSetVecType(W,V->vtype)); |
| 1638 | 100389 | W->ld = V->ld; | |
| 1639 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
100389 | PetscCall(BVSetType(W,((PetscObject)V)->type_name)); |
| 1640 | 100389 | W->orthog_type = V->orthog_type; | |
| 1641 | 100389 | W->orthog_ref = V->orthog_ref; | |
| 1642 | 100389 | W->orthog_eta = V->orthog_eta; | |
| 1643 | 100389 | W->orthog_block = V->orthog_block; | |
| 1644 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
100389 | if (V->matrix) PetscCall(PetscObjectReference((PetscObject)V->matrix)); |
| 1645 | 100389 | W->matrix = V->matrix; | |
| 1646 | 100389 | W->indef = V->indef; | |
| 1647 | 100389 | W->vmm = V->vmm; | |
| 1648 | 100389 | W->rrandom = V->rrandom; | |
| 1649 | 100389 | W->deftol = V->deftol; | |
| 1650 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
100389 | if (V->rand) PetscCall(PetscObjectReference((PetscObject)V->rand)); |
| 1651 | 100389 | W->rand = V->rand; | |
| 1652 | 100389 | W->sfocalled = V->sfocalled; | |
| 1653 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
100389 | PetscTryTypeMethod(V,duplicate,W); |
| 1654 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
100389 | PetscCall(PetscObjectStateIncrease((PetscObject)W)); |
| 1655 |
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.
|
100389 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1656 | } | ||
| 1657 | |||
| 1658 | /*@ | ||
| 1659 | BVDuplicate - Creates a new basis vectors object of the same type and | ||
| 1660 | dimensions as an existing one. | ||
| 1661 | |||
| 1662 | Collective | ||
| 1663 | |||
| 1664 | Input Parameter: | ||
| 1665 | . V - basis vectors context | ||
| 1666 | |||
| 1667 | Output Parameter: | ||
| 1668 | . W - location to put the new `BV` | ||
| 1669 | |||
| 1670 | Notes: | ||
| 1671 | The new `BV` has the same type and dimensions as `V`. Also, the inner | ||
| 1672 | product matrix and orthogonalization options are copied. | ||
| 1673 | |||
| 1674 | `BVDuplicate()` DOES NOT COPY the entries, but rather allocates storage | ||
| 1675 | for the new basis vectors. Use `BVCopy()` to copy the content. | ||
| 1676 | |||
| 1677 | Level: intermediate | ||
| 1678 | |||
| 1679 | .seealso: [](sec:bv), `BVDuplicateResize()`, `BVCreate()`, `BVSetSizesFromVec()`, `BVCopy()` | ||
| 1680 | @*/ | ||
| 1681 | 23104 | PetscErrorCode BVDuplicate(BV V,BV *W) | |
| 1682 | { | ||
| 1683 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
23104 | PetscFunctionBegin; |
| 1684 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
23104 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 1685 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
23104 | PetscValidType(V,1); |
| 1686 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
23104 | BVCheckSizes(V,1); |
| 1687 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
23104 | PetscAssertPointer(W,2); |
| 1688 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
23104 | PetscCall(BVCreate(PetscObjectComm((PetscObject)V),W)); |
| 1689 | 23104 | (*W)->N = V->N; | |
| 1690 | 23104 | (*W)->n = V->n; | |
| 1691 | 23104 | (*W)->m = V->m; | |
| 1692 | 23104 | (*W)->k = V->m; | |
| 1693 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
23104 | PetscCall(BVDuplicate_Private(V,*W)); |
| 1694 |
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.
|
5681 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1695 | } | ||
| 1696 | |||
| 1697 | /*@ | ||
| 1698 | BVDuplicateResize - Creates a new basis vectors object of the same type and | ||
| 1699 | dimensions as an existing one, but with possibly different number of columns. | ||
| 1700 | |||
| 1701 | Collective | ||
| 1702 | |||
| 1703 | Input Parameters: | ||
| 1704 | + V - basis vectors context | ||
| 1705 | - m - the new number of columns | ||
| 1706 | |||
| 1707 | Output Parameter: | ||
| 1708 | . W - location to put the new BV | ||
| 1709 | |||
| 1710 | Note: | ||
| 1711 | This is equivalent to a call to `BVDuplicate()` followed by `BVResize()`. The | ||
| 1712 | contents of `V` are not copied to `W`. | ||
| 1713 | |||
| 1714 | Level: intermediate | ||
| 1715 | |||
| 1716 | .seealso: [](sec:bv), `BVDuplicate()`, `BVResize()` | ||
| 1717 | @*/ | ||
| 1718 | 73502 | PetscErrorCode BVDuplicateResize(BV V,PetscInt m,BV *W) | |
| 1719 | { | ||
| 1720 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
73502 | PetscFunctionBegin; |
| 1721 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
73502 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 1722 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
73502 | PetscValidType(V,1); |
| 1723 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
73502 | BVCheckSizes(V,1); |
| 1724 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
73502 | PetscValidLogicalCollectiveInt(V,m,2); |
| 1725 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
73502 | PetscAssertPointer(W,3); |
| 1726 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73502 | PetscCall(BVCreate(PetscObjectComm((PetscObject)V),W)); |
| 1727 | 73502 | (*W)->N = V->N; | |
| 1728 | 73502 | (*W)->n = V->n; | |
| 1729 | 73502 | (*W)->m = m; | |
| 1730 | 73502 | (*W)->k = m; | |
| 1731 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73502 | PetscCall(BVDuplicate_Private(V,*W)); |
| 1732 |
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.
|
17954 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1733 | } | ||
| 1734 | |||
| 1735 | /*@ | ||
| 1736 | BVGetCachedBV - Returns a `BV` object stored internally that holds the | ||
| 1737 | result of $BX$ after a call to `BVApplyMatrixBV()`. | ||
| 1738 | |||
| 1739 | Collective | ||
| 1740 | |||
| 1741 | Input Parameter: | ||
| 1742 | . bv - the basis vectors context | ||
| 1743 | |||
| 1744 | Output Parameter: | ||
| 1745 | . cached - the cached `BV` | ||
| 1746 | |||
| 1747 | Note: | ||
| 1748 | The cached `BV` is created if not available previously. | ||
| 1749 | |||
| 1750 | Level: developer | ||
| 1751 | |||
| 1752 | .seealso: [](sec:bv), `BVApplyMatrixBV()` | ||
| 1753 | @*/ | ||
| 1754 | 17318 | PetscErrorCode BVGetCachedBV(BV bv,BV *cached) | |
| 1755 | { | ||
| 1756 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17318 | PetscFunctionBegin; |
| 1757 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
17318 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1758 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
17318 | PetscAssertPointer(cached,2); |
| 1759 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
17318 | BVCheckSizes(bv,1); |
| 1760 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
17318 | if (!bv->cached) { |
| 1761 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
903 | PetscCall(BVCreate(PetscObjectComm((PetscObject)bv),&bv->cached)); |
| 1762 | 903 | bv->cached->N = bv->N; | |
| 1763 | 903 | bv->cached->n = bv->n; | |
| 1764 | 903 | bv->cached->m = bv->m; | |
| 1765 | 903 | bv->cached->k = bv->m; | |
| 1766 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
903 | PetscCall(BVDuplicate_Private(bv,bv->cached)); |
| 1767 | } | ||
| 1768 | 17318 | *cached = bv->cached; | |
| 1769 |
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.
|
17318 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1770 | } | ||
| 1771 | |||
| 1772 | /*@ | ||
| 1773 | BVCopy - Copies a basis vector object into another one, $W \leftarrow V$. | ||
| 1774 | |||
| 1775 | Logically Collective | ||
| 1776 | |||
| 1777 | Input Parameter: | ||
| 1778 | . V - basis vectors context | ||
| 1779 | |||
| 1780 | Output Parameter: | ||
| 1781 | . W - the copy | ||
| 1782 | |||
| 1783 | Note: | ||
| 1784 | Both `V` and `W` must be distributed in the same manner; local copies are | ||
| 1785 | done. Only active columns (excluding the leading ones) are copied. | ||
| 1786 | In the destination `W`, columns are overwritten starting from the leading ones. | ||
| 1787 | Constraints are not copied. | ||
| 1788 | |||
| 1789 | Level: beginner | ||
| 1790 | |||
| 1791 | .seealso: [](sec:bv), `BVCopyVec()`, `BVCopyColumn()`, `BVDuplicate()`, `BVSetActiveColumns()` | ||
| 1792 | @*/ | ||
| 1793 | 109292 | PetscErrorCode BVCopy(BV V,BV W) | |
| 1794 | { | ||
| 1795 | 109292 | PetscScalar *womega; | |
| 1796 | 109292 | const PetscScalar *vomega; | |
| 1797 | |||
| 1798 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
109292 | PetscFunctionBegin; |
| 1799 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
109292 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 1800 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | PetscValidType(V,1); |
| 1801 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | BVCheckSizes(V,1); |
| 1802 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | BVCheckOp(V,1,copy); |
| 1803 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
109292 | PetscValidHeaderSpecific(W,BV_CLASSID,2); |
| 1804 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | PetscValidType(W,2); |
| 1805 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | BVCheckSizes(W,2); |
| 1806 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
109292 | PetscCheckSameTypeAndComm(V,1,W,2); |
| 1807 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | PetscCheck(V->n==W->n,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension V %" PetscInt_FMT ", W %" PetscInt_FMT,V->n,W->n); |
| 1808 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
109292 | PetscCheck(V->k-V->l<=W->m-W->l,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_SIZ,"W has %" PetscInt_FMT " non-leading columns, not enough to store %" PetscInt_FMT " columns",W->m-W->l,V->k-V->l); |
| 1809 |
3/16✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 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.
|
109292 | if (V==W || !V->n) PetscFunctionReturn(PETSC_SUCCESS); |
| 1810 | |||
| 1811 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
109292 | PetscCall(PetscLogEventBegin(BV_Copy,V,W,0,0)); |
| 1812 |
5/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 7 not taken.
|
109292 | if (V->indef && V->matrix && V->indef==W->indef && V->matrix==W->matrix) { |
| 1813 | /* copy signature */ | ||
| 1814 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(BV_AllocateSignature(W)); |
| 1815 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(VecGetArrayRead(V->omega,&vomega)); |
| 1816 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(VecGetArray(W->omega,&womega)); |
| 1817 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(PetscArraycpy(womega+W->nc+W->l,vomega+V->nc+V->l,V->k-V->l)); |
| 1818 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(VecRestoreArray(W->omega,&womega)); |
| 1819 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
72 | PetscCall(VecRestoreArrayRead(V->omega,&vomega)); |
| 1820 | } | ||
| 1821 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
109292 | PetscUseTypeMethod(V,copy,W); |
| 1822 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
109292 | PetscCall(PetscLogEventEnd(BV_Copy,V,W,0,0)); |
| 1823 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
109292 | PetscCall(PetscObjectStateIncrease((PetscObject)W)); |
| 1824 |
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.
|
109292 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1825 | } | ||
| 1826 | |||
| 1827 | /*@ | ||
| 1828 | BVCopyVec - Copies one of the columns of a basis vectors object into a `Vec`. | ||
| 1829 | |||
| 1830 | Logically Collective | ||
| 1831 | |||
| 1832 | Input Parameters: | ||
| 1833 | + V - basis vectors context | ||
| 1834 | - j - the index of the column to be copied | ||
| 1835 | |||
| 1836 | Output Parameter: | ||
| 1837 | . w - the copied column | ||
| 1838 | |||
| 1839 | Note: | ||
| 1840 | Both `V` and `w` must be distributed in the same manner; local copies are done. | ||
| 1841 | |||
| 1842 | Level: beginner | ||
| 1843 | |||
| 1844 | .seealso: [](sec:bv), `BVCopy()`, `BVCopyColumn()`, `BVInsertVec()` | ||
| 1845 | @*/ | ||
| 1846 | 292419 | PetscErrorCode BVCopyVec(BV V,PetscInt j,Vec w) | |
| 1847 | { | ||
| 1848 | 292419 | PetscInt n,N; | |
| 1849 | 292419 | Vec z; | |
| 1850 | |||
| 1851 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
292419 | PetscFunctionBegin; |
| 1852 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
292419 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 1853 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
292419 | PetscValidType(V,1); |
| 1854 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
292419 | BVCheckSizes(V,1); |
| 1855 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
292419 | PetscValidLogicalCollectiveInt(V,j,2); |
| 1856 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
292419 | PetscValidHeaderSpecific(w,VEC_CLASSID,3); |
| 1857 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
292419 | PetscCheckSameComm(V,1,w,3); |
| 1858 | |||
| 1859 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(VecGetSize(w,&N)); |
| 1860 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(VecGetLocalSize(w,&n)); |
| 1861 |
2/6✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
292419 | PetscCheck(N==V->N && n==V->n,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_INCOMP,"Vec sizes (global %" PetscInt_FMT ", local %" PetscInt_FMT ") do not match BV sizes (global %" PetscInt_FMT ", local %" PetscInt_FMT ")",N,n,V->N,V->n); |
| 1862 | |||
| 1863 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(PetscLogEventBegin(BV_Copy,V,w,0,0)); |
| 1864 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(BVGetColumn(V,j,&z)); |
| 1865 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(VecCopy(z,w)); |
| 1866 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(BVRestoreColumn(V,j,&z)); |
| 1867 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
292419 | PetscCall(PetscLogEventEnd(BV_Copy,V,w,0,0)); |
| 1868 |
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.
|
70461 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1869 | } | ||
| 1870 | |||
| 1871 | /*@ | ||
| 1872 | BVCopyColumn - Copies the values from one of the columns to another one. | ||
| 1873 | |||
| 1874 | Logically Collective | ||
| 1875 | |||
| 1876 | Input Parameters: | ||
| 1877 | + V - basis vectors context | ||
| 1878 | . j - the index of the source column | ||
| 1879 | - i - the index of the destination column | ||
| 1880 | |||
| 1881 | Level: beginner | ||
| 1882 | |||
| 1883 | .seealso: [](sec:bv), `BVCopy()`, `BVCopyVec()` | ||
| 1884 | @*/ | ||
| 1885 | 81133 | PetscErrorCode BVCopyColumn(BV V,PetscInt j,PetscInt i) | |
| 1886 | { | ||
| 1887 | 81133 | PetscScalar *omega; | |
| 1888 | |||
| 1889 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
81133 | PetscFunctionBegin; |
| 1890 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
81133 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 1891 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
81133 | PetscValidType(V,1); |
| 1892 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
81133 | BVCheckSizes(V,1); |
| 1893 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
81133 | PetscValidLogicalCollectiveInt(V,j,2); |
| 1894 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
81133 | PetscValidLogicalCollectiveInt(V,i,3); |
| 1895 |
8/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
|
81133 | if (j==i) PetscFunctionReturn(PETSC_SUCCESS); |
| 1896 | |||
| 1897 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80665 | PetscCall(PetscLogEventBegin(BV_Copy,V,0,0,0)); |
| 1898 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
80665 | if (V->omega) { |
| 1899 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8102 | PetscCall(VecGetArray(V->omega,&omega)); |
| 1900 | 8102 | omega[i] = omega[j]; | |
| 1901 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8102 | PetscCall(VecRestoreArray(V->omega,&omega)); |
| 1902 | } | ||
| 1903 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
80665 | PetscUseTypeMethod(V,copycolumn,j,i); |
| 1904 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80665 | PetscCall(PetscLogEventEnd(BV_Copy,V,0,0,0)); |
| 1905 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
80665 | PetscCall(PetscObjectStateIncrease((PetscObject)V)); |
| 1906 |
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.
|
80665 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1907 | } | ||
| 1908 | |||
| 1909 | 3152 | static PetscErrorCode BVGetSplit_Private(BV bv,PetscBool left,BV *split) | |
| 1910 | { | ||
| 1911 | 3152 | PetscInt ncols; | |
| 1912 | |||
| 1913 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3152 | PetscFunctionBegin; |
| 1914 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3152 | ncols = left? bv->nc+bv->l: bv->m-bv->l; |
| 1915 |
9/12✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
3152 | if (*split && (ncols!=(*split)->m || bv->N!=(*split)->N)) PetscCall(BVDestroy(split)); |
| 1916 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3152 | if (!*split) { |
| 1917 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2880 | PetscCall(BVCreate(PetscObjectComm((PetscObject)bv),split)); |
| 1918 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
2880 | (*split)->issplit = left? 1: 2; |
| 1919 | 2880 | (*split)->splitparent = bv; | |
| 1920 | 2880 | (*split)->N = bv->N; | |
| 1921 | 2880 | (*split)->n = bv->n; | |
| 1922 | 2880 | (*split)->m = bv->m; | |
| 1923 | 2880 | (*split)->k = bv->m; | |
| 1924 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2880 | PetscCall(BVDuplicate_Private(bv,*split)); |
| 1925 | } | ||
| 1926 | 3152 | (*split)->l = 0; | |
| 1927 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3152 | (*split)->k = left? bv->l: bv->k-bv->l; |
| 1928 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3152 | (*split)->nc = left? bv->nc: 0; |
| 1929 | 3152 | (*split)->m = ncols-(*split)->nc; | |
| 1930 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3152 | if ((*split)->nc) { |
| 1931 | 216 | (*split)->ci[0] = -(*split)->nc-1; | |
| 1932 | 216 | (*split)->ci[1] = -(*split)->nc-1; | |
| 1933 | } | ||
| 1934 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3152 | if (left) PetscCall(PetscObjectStateGet((PetscObject)*split,&bv->lstate)); |
| 1935 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1576 | else PetscCall(PetscObjectStateGet((PetscObject)*split,&bv->rstate)); |
| 1936 |
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.
|
716 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1937 | } | ||
| 1938 | |||
| 1939 | /*@ | ||
| 1940 | BVGetSplit - Splits the `BV` object into two `BV` objects that share the | ||
| 1941 | internal data, one of them containing the leading columns and the other | ||
| 1942 | one containing the remaining columns. | ||
| 1943 | |||
| 1944 | Collective | ||
| 1945 | |||
| 1946 | Input Parameter: | ||
| 1947 | . bv - the basis vectors context | ||
| 1948 | |||
| 1949 | Output Parameters: | ||
| 1950 | + L - left `BV` containing leading columns (can be `NULL`) | ||
| 1951 | - R - right `BV` containing remaining columns (can be `NULL`) | ||
| 1952 | |||
| 1953 | Notes: | ||
| 1954 | The columns are split in two sets. The leading columns (including the | ||
| 1955 | constraints) are assigned to the left `BV` and the remaining columns | ||
| 1956 | are assigned to the right `BV`. The number of leading columns, as | ||
| 1957 | specified with `BVSetActiveColumns()`, must be between `1` and `m-1` (to | ||
| 1958 | guarantee that both `L` and `R` have at least one column). | ||
| 1959 | |||
| 1960 | The returned `BV`s must be seen as references (not copies) of the input | ||
| 1961 | `BV`, that is, modifying them will change the entries of `bv` as well. | ||
| 1962 | The returned `BV`s must not be destroyed. `BVRestoreSplit()` must be called | ||
| 1963 | when they are no longer needed. | ||
| 1964 | |||
| 1965 | Pass `NULL` for any of the output `BV`s that is not needed. | ||
| 1966 | |||
| 1967 | Level: advanced | ||
| 1968 | |||
| 1969 | .seealso: [](sec:bv), `BVRestoreSplit()`, `BVSetActiveColumns()`, `BVSetNumConstraints()`, `BVGetSplitRows()` | ||
| 1970 | @*/ | ||
| 1971 | 1576 | PetscErrorCode BVGetSplit(BV bv,BV *L,BV *R) | |
| 1972 | { | ||
| 1973 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1576 | PetscFunctionBegin; |
| 1974 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1576 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 1975 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscValidType(bv,1); |
| 1976 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | BVCheckSizes(bv,1); |
| 1977 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscCheck(bv->l,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Must indicate the number of leading columns with BVSetActiveColumns()"); |
| 1978 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscCheck(bv->lsplit>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Cannot call BVGetSplit() after BVGetSplitRows()"); |
| 1979 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscCheck(!bv->lsplit,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Cannot get the split BV's twice before restoring them with BVRestoreSplit()"); |
| 1980 | 1576 | bv->lsplit = bv->nc+bv->l; | |
| 1981 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1576 | PetscCall(BVGetSplit_Private(bv,PETSC_TRUE,&bv->L)); |
| 1982 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1576 | PetscCall(BVGetSplit_Private(bv,PETSC_FALSE,&bv->R)); |
| 1983 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1576 | if (L) *L = bv->L; |
| 1984 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1576 | if (R) *R = bv->R; |
| 1985 |
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.
|
358 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1986 | } | ||
| 1987 | |||
| 1988 | /*@ | ||
| 1989 | BVRestoreSplit - Restore the BV objects obtained with `BVGetSplit()`. | ||
| 1990 | |||
| 1991 | Logically Collective | ||
| 1992 | |||
| 1993 | Input Parameters: | ||
| 1994 | + bv - the basis vectors context | ||
| 1995 | . L - left BV obtained with BVGetSplit() | ||
| 1996 | - R - right BV obtained with BVGetSplit() | ||
| 1997 | |||
| 1998 | Note: | ||
| 1999 | The arguments must match the corresponding call to `BVGetSplit()`. | ||
| 2000 | |||
| 2001 | Level: advanced | ||
| 2002 | |||
| 2003 | .seealso: [](sec:bv), `BVGetSplit()` | ||
| 2004 | @*/ | ||
| 2005 | 1576 | PetscErrorCode BVRestoreSplit(BV bv,BV *L,BV *R) | |
| 2006 | { | ||
| 2007 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1576 | PetscFunctionBegin; |
| 2008 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1576 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 2009 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscValidType(bv,1); |
| 2010 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | BVCheckSizes(bv,1); |
| 2011 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1576 | PetscCheck(bv->lsplit>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Must call BVGetSplit first"); |
| 2012 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1576 | PetscCheck(!L || *L==bv->L,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Argument 2 is not the same BV that was obtained with BVGetSplit"); |
| 2013 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1576 | PetscCheck(!R || *R==bv->R,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Argument 3 is not the same BV that was obtained with BVGetSplit"); |
| 2014 |
4/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1576 | PetscCheck(!L || ((*L)->ci[0]<=(*L)->nc-1 && (*L)->ci[1]<=(*L)->nc-1),PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Argument 2 has unrestored columns, use BVRestoreColumn()"); |
| 2015 |
4/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1576 | PetscCheck(!R || ((*R)->ci[0]<=(*R)->nc-1 && (*R)->ci[1]<=(*R)->nc-1),PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Argument 3 has unrestored columns, use BVRestoreColumn()"); |
| 2016 | |||
| 2017 |
3/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1576 | PetscTryTypeMethod(bv,restoresplit,L,R); |
| 2018 | 1576 | bv->lsplit = 0; | |
| 2019 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1576 | if (L) *L = NULL; |
| 2020 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1576 | if (R) *R = NULL; |
| 2021 |
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.
|
358 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2022 | } | ||
| 2023 | |||
| 2024 | /* | ||
| 2025 | Copy all user-provided attributes of V to another BV object W with different layout | ||
| 2026 | */ | ||
| 2027 | 1184 | static inline PetscErrorCode BVDuplicateNewLayout_Private(BV V,BV W) | |
| 2028 | { | ||
| 2029 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1184 | PetscFunctionBegin; |
| 2030 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1184 | PetscCall(PetscLayoutCreateFromSizes(PetscObjectComm((PetscObject)V),W->n,W->N,1,&W->map)); |
| 2031 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1184 | PetscCall(BVSetVecType(W,V->vtype)); |
| 2032 | 1184 | W->ld = V->ld; | |
| 2033 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1184 | PetscCall(BVSetType(W,((PetscObject)V)->type_name)); |
| 2034 | 1184 | W->orthog_type = V->orthog_type; | |
| 2035 | 1184 | W->orthog_ref = V->orthog_ref; | |
| 2036 | 1184 | W->orthog_eta = V->orthog_eta; | |
| 2037 | 1184 | W->orthog_block = V->orthog_block; | |
| 2038 | 1184 | W->vmm = V->vmm; | |
| 2039 | 1184 | W->rrandom = V->rrandom; | |
| 2040 | 1184 | W->deftol = V->deftol; | |
| 2041 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1184 | if (V->rand) PetscCall(PetscObjectReference((PetscObject)V->rand)); |
| 2042 | 1184 | W->rand = V->rand; | |
| 2043 | 1184 | W->sfocalled = V->sfocalled; | |
| 2044 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
|
1184 | PetscTryTypeMethod(V,duplicate,W); |
| 2045 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1184 | PetscCall(PetscObjectStateIncrease((PetscObject)W)); |
| 2046 |
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.
|
1184 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2047 | } | ||
| 2048 | |||
| 2049 | 3064 | static PetscErrorCode BVGetSplitRows_Private(BV bv,PetscBool top,IS is,BV *split) | |
| 2050 | { | ||
| 2051 | 3064 | PetscInt rstart,rend,lstart; | |
| 2052 | 3064 | PetscInt N,n; | |
| 2053 | 3064 | PetscBool contig; | |
| 2054 | |||
| 2055 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3064 | PetscFunctionBegin; |
| 2056 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3064 | PetscCall(PetscLayoutGetRange(bv->map,&rstart,&rend)); |
| 2057 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3064 | PetscCall(ISContiguousLocal(is,rstart,rend,&lstart,&contig)); |
| 2058 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
3064 | PetscCheck(contig,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"%s index set is not contiguous",(top==PETSC_TRUE)?"Upper":"Lower"); |
| 2059 |
3/6✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
3064 | if (top) PetscCheck(lstart==0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONG,"Upper index set should start at first local row"); |
| 2060 | 1532 | else bv->lsplit = -lstart; | |
| 2061 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3064 | PetscCall(ISGetSize(is,&N)); |
| 2062 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3064 | PetscCall(ISGetLocalSize(is,&n)); |
| 2063 |
9/12✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
3064 | if (*split && (bv->m!=(*split)->m || N!=(*split)->N)) PetscCall(BVDestroy(split)); |
| 2064 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3064 | if (!*split) { |
| 2065 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1184 | PetscCall(BVCreate(PetscObjectComm((PetscObject)bv),split)); |
| 2066 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
1184 | (*split)->issplit = top? -1: -2; |
| 2067 | 1184 | (*split)->splitparent = bv; | |
| 2068 | 1184 | (*split)->N = N; | |
| 2069 | 1184 | (*split)->n = n; | |
| 2070 | 1184 | (*split)->m = bv->m; | |
| 2071 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1184 | PetscCall(BVDuplicateNewLayout_Private(bv,*split)); |
| 2072 | } | ||
| 2073 | 3064 | (*split)->k = bv->k; | |
| 2074 | 3064 | (*split)->l = bv->l; | |
| 2075 | 3064 | (*split)->nc = bv->nc; | |
| 2076 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
3064 | if ((*split)->nc) { |
| 2077 | 120 | (*split)->ci[0] = -(*split)->nc-1; | |
| 2078 | 120 | (*split)->ci[1] = -(*split)->nc-1; | |
| 2079 | } | ||
| 2080 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3064 | if (top) PetscCall(PetscObjectStateGet((PetscObject)*split,&bv->rstate)); |
| 2081 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1532 | else PetscCall(PetscObjectStateGet((PetscObject)*split,&bv->lstate)); |
| 2082 |
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.
|
682 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2083 | } | ||
| 2084 | |||
| 2085 | /*@ | ||
| 2086 | BVGetSplitRows - Splits the `BV` object into two `BV` objects that share the | ||
| 2087 | internal data, using a disjoint horizontal splitting. | ||
| 2088 | |||
| 2089 | Collective | ||
| 2090 | |||
| 2091 | Input Parameters: | ||
| 2092 | + bv - the basis vectors context | ||
| 2093 | . isup - the index set that defines the upper part of the horizontal splitting | ||
| 2094 | - islo - the index set that defines the lower part of the horizontal splitting | ||
| 2095 | |||
| 2096 | Output Parameters: | ||
| 2097 | + U - the resulting `BV` containing the upper rows | ||
| 2098 | - L - the resulting `BV` containing the lower rows | ||
| 2099 | |||
| 2100 | Notes: | ||
| 2101 | The index sets must be such that every MPI process can extract the selected | ||
| 2102 | rows from its local part of the input `BV`, and this part must be contiguous. | ||
| 2103 | With one process, `isup` will list contiguous indices starting from 0, and `islo` | ||
| 2104 | will contain the remaining indices, hence we refer to upper and lower part. | ||
| 2105 | However, with several processes the indices will be interleaved because | ||
| 2106 | `isup` will refer to the upper part of the local array. | ||
| 2107 | |||
| 2108 | The intended use of this function is with matrices of `MATNEST` type, where | ||
| 2109 | `MatNestGetISs()` will return the appropriate index sets. | ||
| 2110 | |||
| 2111 | The returned `BV`s must be seen as references (not copies) of the input | ||
| 2112 | `BV`, that is, modifying them will change the entries of `bv` as well. | ||
| 2113 | The returned `BV`s must not be destroyed. `BVRestoreSplitRows()` must be called | ||
| 2114 | when they are no longer needed. | ||
| 2115 | |||
| 2116 | Pass `NULL` for any of the output `BV`s that is not needed. | ||
| 2117 | |||
| 2118 | Level: advanced | ||
| 2119 | |||
| 2120 | .seealso: [](sec:bv), `BVRestoreSplitRows()`, `BVGetSplit()` | ||
| 2121 | @*/ | ||
| 2122 | 1532 | PetscErrorCode BVGetSplitRows(BV bv,IS isup,IS islo,BV *U,BV *L) | |
| 2123 | { | ||
| 2124 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1532 | PetscFunctionBegin; |
| 2125 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1532 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 2126 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | PetscValidType(bv,1); |
| 2127 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | BVCheckSizes(bv,1); |
| 2128 |
4/18✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
1532 | if (U) PetscValidHeaderSpecific(isup,IS_CLASSID,2); |
| 2129 |
4/18✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
1532 | if (L) PetscValidHeaderSpecific(islo,IS_CLASSID,3); |
| 2130 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | PetscCheck(bv->lsplit<=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Cannot call BVGetSplitRows() after BVGetSplit()"); |
| 2131 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | PetscCheck(!bv->lsplit,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Cannot get the split BV's twice before restoring them with BVRestoreSplitRows()"); |
| 2132 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
1532 | if (U) { |
| 2133 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1532 | PetscCall(BVGetSplitRows_Private(bv,PETSC_TRUE,isup,&bv->R)); |
| 2134 | 1532 | *U = bv->R; | |
| 2135 | } | ||
| 2136 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
1532 | if (L) { |
| 2137 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1532 | PetscCall(BVGetSplitRows_Private(bv,PETSC_FALSE,islo,&bv->L)); |
| 2138 | 1532 | *L = bv->L; | |
| 2139 | } | ||
| 2140 |
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.
|
341 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2141 | } | ||
| 2142 | |||
| 2143 | /*@ | ||
| 2144 | BVRestoreSplitRows - Restore the BV objects obtained with `BVGetSplitRows()`. | ||
| 2145 | |||
| 2146 | Logically Collective | ||
| 2147 | |||
| 2148 | Input Parameters: | ||
| 2149 | + bv - the basis vectors context | ||
| 2150 | . isup - the index set that defines the upper part of the horizontal splitting | ||
| 2151 | . islo - the index set that defines the lower part of the horizontal splitting | ||
| 2152 | . U - the `BV` containing the upper rows | ||
| 2153 | - L - the `BV` containing the lower rows | ||
| 2154 | |||
| 2155 | Note: | ||
| 2156 | The arguments must match the corresponding call to `BVGetSplitRows()`. | ||
| 2157 | |||
| 2158 | Level: advanced | ||
| 2159 | |||
| 2160 | .seealso: [](sec:bv), `BVGetSplitRows()` | ||
| 2161 | @*/ | ||
| 2162 | 1532 | PetscErrorCode BVRestoreSplitRows(BV bv,IS isup,IS islo,BV *U,BV *L) | |
| 2163 | { | ||
| 2164 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1532 | PetscFunctionBegin; |
| 2165 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1532 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 2166 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | PetscValidType(bv,1); |
| 2167 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | BVCheckSizes(bv,1); |
| 2168 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1532 | PetscCheck(bv->lsplit<0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Must call BVGetSplitRows first"); |
| 2169 |
3/8✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1532 | PetscCheck(!U || ((*U)->ci[0]<=(*U)->nc-1 && (*U)->ci[1]<=(*U)->nc-1),PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"The upper BV has unrestored columns, use BVRestoreColumn()"); |
| 2170 |
3/8✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1532 | PetscCheck(!L || ((*L)->ci[0]<=(*L)->nc-1 && (*L)->ci[1]<=(*L)->nc-1),PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"The lower BV has unrestored columns, use BVRestoreColumn()"); |
| 2171 |
3/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1532 | PetscTryTypeMethod(bv,restoresplitrows,isup,islo,U,L); |
| 2172 | 1532 | bv->lsplit = 0; | |
| 2173 |
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.
|
1532 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2174 | } | ||
| 2175 | |||
| 2176 | /*@ | ||
| 2177 | BVSetDefiniteTolerance - Set the tolerance to be used when checking a | ||
| 2178 | definite inner product. | ||
| 2179 | |||
| 2180 | Logically Collective | ||
| 2181 | |||
| 2182 | Input Parameters: | ||
| 2183 | + bv - basis vectors | ||
| 2184 | - deftol - the tolerance | ||
| 2185 | |||
| 2186 | Options Database Key: | ||
| 2187 | . -bv_definite_tol \<deftol\> - the tolerance | ||
| 2188 | |||
| 2189 | Notes: | ||
| 2190 | When using a non-standard inner product, see `BVSetMatrix()`, the solver needs | ||
| 2191 | to compute $\sqrt{z^*B z}$ for various vectors $z$. If the inner product has not | ||
| 2192 | been declared indefinite, the value $z^*B z$ must be positive, but due to | ||
| 2193 | rounding error a tiny value may become negative. A tolerance is used to | ||
| 2194 | detect this situation. Likewise, in complex arithmetic $z^*B z$ should be | ||
| 2195 | real, and we use the same tolerance to check whether a nonzero imaginary part | ||
| 2196 | can be considered negligible. | ||
| 2197 | |||
| 2198 | This function sets this tolerance, which defaults to `10*PETSC_MACHINE_EPSILON`. | ||
| 2199 | The default value should be good for most applications. | ||
| 2200 | |||
| 2201 | Level: advanced | ||
| 2202 | |||
| 2203 | .seealso: [](sec:bv), `BVSetMatrix()` | ||
| 2204 | @*/ | ||
| 2205 | 48 | PetscErrorCode BVSetDefiniteTolerance(BV bv,PetscReal deftol) | |
| 2206 | { | ||
| 2207 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
48 | PetscFunctionBegin; |
| 2208 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
48 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 2209 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
48 | PetscValidLogicalCollectiveReal(bv,deftol,2); |
| 2210 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
48 | if (deftol == (PetscReal)PETSC_DEFAULT || deftol == (PetscReal)PETSC_DECIDE) bv->deftol = 10*PETSC_MACHINE_EPSILON; |
| 2211 | else { | ||
| 2212 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
48 | PetscCheck(deftol>0.0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of deftol. Must be > 0"); |
| 2213 | 48 | bv->deftol = deftol; | |
| 2214 | } | ||
| 2215 |
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.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2216 | } | ||
| 2217 | |||
| 2218 | /*@ | ||
| 2219 | BVGetDefiniteTolerance - Returns the tolerance for checking a definite | ||
| 2220 | inner product. | ||
| 2221 | |||
| 2222 | Not Collective | ||
| 2223 | |||
| 2224 | Input Parameter: | ||
| 2225 | . bv - the basis vectors | ||
| 2226 | |||
| 2227 | Output Parameter: | ||
| 2228 | . deftol - the tolerance | ||
| 2229 | |||
| 2230 | Level: advanced | ||
| 2231 | |||
| 2232 | .seealso: [](sec:bv), `BVSetDefiniteTolerance()` | ||
| 2233 | @*/ | ||
| 2234 | ✗ | PetscErrorCode BVGetDefiniteTolerance(BV bv,PetscReal *deftol) | |
| 2235 | { | ||
| 2236 | ✗ | PetscFunctionBegin; | |
| 2237 | ✗ | PetscValidHeaderSpecific(bv,BV_CLASSID,1); | |
| 2238 | ✗ | PetscAssertPointer(deftol,2); | |
| 2239 | ✗ | *deftol = bv->deftol; | |
| 2240 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 2241 | } | ||
| 2242 | |||
| 2243 | /*@ | ||
| 2244 | BVSetLeadingDimension - Set the leading dimension to be used for storing the `BV` data. | ||
| 2245 | |||
| 2246 | Not Collective | ||
| 2247 | |||
| 2248 | Input Parameters: | ||
| 2249 | + bv - basis vectors | ||
| 2250 | - ld - the leading dimension | ||
| 2251 | |||
| 2252 | Notes: | ||
| 2253 | This parameter is relevant for `BVMAT`, though it might be employed in other types | ||
| 2254 | as well. | ||
| 2255 | |||
| 2256 | When the internal data of the `BV` is stored as a dense matrix, the leading dimension | ||
| 2257 | has the same meaning as in `MatDenseSetLDA()`, i.e., the distance in number of | ||
| 2258 | elements from one entry of the matrix to the one in the next column at the same | ||
| 2259 | row. The leading dimension refers to the local array, and hence can be different | ||
| 2260 | in different processes. | ||
| 2261 | |||
| 2262 | The user does not need to change this parameter. The default value is equal to the | ||
| 2263 | number of local rows, but this value may be increased a little to guarantee alignment | ||
| 2264 | (especially in the case of GPU storage). | ||
| 2265 | |||
| 2266 | Level: advanced | ||
| 2267 | |||
| 2268 | .seealso: [](sec:bv), `BVGetLeadingDimension()` | ||
| 2269 | @*/ | ||
| 2270 | ✗ | PetscErrorCode BVSetLeadingDimension(BV bv,PetscInt ld) | |
| 2271 | { | ||
| 2272 | ✗ | PetscFunctionBegin; | |
| 2273 | ✗ | PetscValidHeaderSpecific(bv,BV_CLASSID,1); | |
| 2274 | ✗ | PetscValidLogicalCollectiveInt(bv,ld,2); | |
| 2275 | ✗ | PetscCheck((bv->n<0 && bv->N<0) || !bv->ops->create,PetscObjectComm((PetscObject)bv),PETSC_ERR_ORDER,"Must call BVSetLeadingDimension() before setting the BV type and sizes"); | |
| 2276 | ✗ | if (ld == PETSC_DEFAULT || ld == PETSC_DECIDE) bv->ld = 0; | |
| 2277 | else { | ||
| 2278 | ✗ | PetscCheck(ld>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ld. Must be > 0"); | |
| 2279 | ✗ | bv->ld = ld; | |
| 2280 | } | ||
| 2281 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 2282 | } | ||
| 2283 | |||
| 2284 | /*@ | ||
| 2285 | BVGetLeadingDimension - Returns the leading dimension of the `BV`. | ||
| 2286 | |||
| 2287 | Not Collective | ||
| 2288 | |||
| 2289 | Input Parameter: | ||
| 2290 | . bv - the basis vectors | ||
| 2291 | |||
| 2292 | Output Parameter: | ||
| 2293 | . ld - the leading dimension | ||
| 2294 | |||
| 2295 | Level: advanced | ||
| 2296 | |||
| 2297 | Notes: | ||
| 2298 | The returned value may be different in different processes. | ||
| 2299 | |||
| 2300 | The leading dimension must be used when accessing the internal array via | ||
| 2301 | `BVGetArray()` or `BVGetArrayRead()`. | ||
| 2302 | |||
| 2303 | .seealso: [](sec:bv), `BVSetLeadingDimension()`, `BVGetArray()`, `BVGetArrayRead()` | ||
| 2304 | @*/ | ||
| 2305 | 1758 | PetscErrorCode BVGetLeadingDimension(BV bv,PetscInt *ld) | |
| 2306 | { | ||
| 2307 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1758 | PetscFunctionBegin; |
| 2308 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1758 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 2309 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1758 | PetscAssertPointer(ld,2); |
| 2310 | 1758 | *ld = bv->ld; | |
| 2311 |
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.
|
1758 | PetscFunctionReturn(PETSC_SUCCESS); |
| 2312 | } | ||
| 2313 |