GCC Code Coverage Report


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