GCC Code Coverage Report


Directory: ./
File: src/sys/classes/bv/interface/bvbasic.c
Date: 2025-11-19 04:19:03
Exec Total Coverage
Lines: 842 909 92.6%
Functions: 54 58 93.1%
Branches: 2422 5785 41.9%

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