| 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 SVD routines | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
| 15 | |||
| 16 | /* Logging support */ | ||
| 17 | PetscClassId SVD_CLASSID = 0; | ||
| 18 | PetscLogEvent SVD_SetUp = 0,SVD_Solve = 0; | ||
| 19 | |||
| 20 | /* List of registered SVD routines */ | ||
| 21 | PetscFunctionList SVDList = NULL; | ||
| 22 | PetscBool SVDRegisterAllCalled = PETSC_FALSE; | ||
| 23 | |||
| 24 | /* List of registered SVD monitors */ | ||
| 25 | PetscFunctionList SVDMonitorList = NULL; | ||
| 26 | PetscFunctionList SVDMonitorCreateList = NULL; | ||
| 27 | PetscFunctionList SVDMonitorDestroyList = NULL; | ||
| 28 | PetscBool SVDMonitorRegisterAllCalled = PETSC_FALSE; | ||
| 29 | |||
| 30 | /*@ | ||
| 31 | SVDCreate - Creates the `SVD` context. | ||
| 32 | |||
| 33 | Collective | ||
| 34 | |||
| 35 | Input Parameter: | ||
| 36 | . comm - MPI communicator | ||
| 37 | |||
| 38 | Output Parameter: | ||
| 39 | . outsvd - location to put the `SVD` context | ||
| 40 | |||
| 41 | Note: | ||
| 42 | The default `SVD` type is `SVDCROSS`. | ||
| 43 | |||
| 44 | Level: beginner | ||
| 45 | |||
| 46 | .seealso: [](ch:svd), `SVDSetUp()`, `SVDSolve()`, `SVDDestroy()`, `SVD` | ||
| 47 | @*/ | ||
| 48 | 2388 | PetscErrorCode SVDCreate(MPI_Comm comm,SVD *outsvd) | |
| 49 | { | ||
| 50 | 2388 | SVD svd; | |
| 51 | |||
| 52 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2388 | PetscFunctionBegin; |
| 53 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2388 | PetscAssertPointer(outsvd,2); |
| 54 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(SVDInitializePackage()); |
| 55 |
7/12✓ Branch 0 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2388 | PetscCall(SlepcHeaderCreate(svd,SVD_CLASSID,"SVD","Singular Value Decomposition","SVD",comm,SVDDestroy,SVDView)); |
| 56 | |||
| 57 | 2388 | svd->OP = NULL; | |
| 58 | 2388 | svd->OPb = NULL; | |
| 59 | 2388 | svd->omega = NULL; | |
| 60 | 2388 | svd->max_it = PETSC_DETERMINE; | |
| 61 | 2388 | svd->nsv = 0; | |
| 62 | 2388 | svd->ncv = PETSC_DETERMINE; | |
| 63 | 2388 | svd->mpd = PETSC_DETERMINE; | |
| 64 | 2388 | svd->nini = 0; | |
| 65 | 2388 | svd->ninil = 0; | |
| 66 | 2388 | svd->tol = PETSC_DETERMINE; | |
| 67 | 2388 | svd->thres = 0.0; | |
| 68 | 2388 | svd->threlative = PETSC_FALSE; | |
| 69 | 2388 | svd->conv = (SVDConv)-1; | |
| 70 | 2388 | svd->stop = SVD_STOP_BASIC; | |
| 71 | 2388 | svd->which = SVD_LARGEST; | |
| 72 | 2388 | svd->problem_type = (SVDProblemType)0; | |
| 73 | 2388 | svd->impltrans = PETSC_FALSE; | |
| 74 | 2388 | svd->trackall = PETSC_FALSE; | |
| 75 | |||
| 76 | 2388 | svd->converged = NULL; | |
| 77 | 2388 | svd->convergeduser = NULL; | |
| 78 | 2388 | svd->convergeddestroy = NULL; | |
| 79 | 2388 | svd->stopping = SVDStoppingBasic; | |
| 80 | 2388 | svd->stoppinguser = NULL; | |
| 81 | 2388 | svd->stoppingdestroy = NULL; | |
| 82 | 2388 | svd->convergedctx = NULL; | |
| 83 | 2388 | svd->stoppingctx = NULL; | |
| 84 | 2388 | svd->numbermonitors = 0; | |
| 85 | |||
| 86 | 2388 | svd->ds = NULL; | |
| 87 | 2388 | svd->U = NULL; | |
| 88 | 2388 | svd->V = NULL; | |
| 89 | 2388 | svd->A = NULL; | |
| 90 | 2388 | svd->B = NULL; | |
| 91 | 2388 | svd->AT = NULL; | |
| 92 | 2388 | svd->BT = NULL; | |
| 93 | 2388 | svd->IS = NULL; | |
| 94 | 2388 | svd->ISL = NULL; | |
| 95 | 2388 | svd->sigma = NULL; | |
| 96 | 2388 | svd->errest = NULL; | |
| 97 | 2388 | svd->sign = NULL; | |
| 98 | 2388 | svd->perm = NULL; | |
| 99 | 2388 | svd->nworkl = 0; | |
| 100 | 2388 | svd->nworkr = 0; | |
| 101 | 2388 | svd->workl = NULL; | |
| 102 | 2388 | svd->workr = NULL; | |
| 103 | 2388 | svd->data = NULL; | |
| 104 | |||
| 105 | 2388 | svd->state = SVD_STATE_INITIAL; | |
| 106 | 2388 | svd->nconv = 0; | |
| 107 | 2388 | svd->its = 0; | |
| 108 | 2388 | svd->leftbasis = PETSC_FALSE; | |
| 109 | 2388 | svd->swapped = PETSC_FALSE; | |
| 110 | 2388 | svd->expltrans = PETSC_FALSE; | |
| 111 | 2388 | svd->nrma = 0.0; | |
| 112 | 2388 | svd->nrmb = 0.0; | |
| 113 | 2388 | svd->isgeneralized = PETSC_FALSE; | |
| 114 | 2388 | svd->reason = SVD_CONVERGED_ITERATING; | |
| 115 | |||
| 116 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(PetscNew(&svd->sc)); |
| 117 | 2388 | *outsvd = svd; | |
| 118 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2388 | PetscFunctionReturn(PETSC_SUCCESS); |
| 119 | } | ||
| 120 | |||
| 121 | /*@ | ||
| 122 | SVDReset - Resets the `SVD` context to the initial state (prior to setup) | ||
| 123 | and destroys any allocated `Vec`s and `Mat`s. | ||
| 124 | |||
| 125 | Collective | ||
| 126 | |||
| 127 | Input Parameter: | ||
| 128 | . svd - the singular value solver context | ||
| 129 | |||
| 130 | Level: advanced | ||
| 131 | |||
| 132 | .seealso: [](ch:svd), `SVDDestroy()` | ||
| 133 | @*/ | ||
| 134 | 2448 | PetscErrorCode SVDReset(SVD svd) | |
| 135 | { | ||
| 136 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2448 | PetscFunctionBegin; |
| 137 |
3/14✓ 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 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2448 | if (svd) PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 138 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2199 | if (!svd) PetscFunctionReturn(PETSC_SUCCESS); |
| 139 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2448 | PetscTryTypeMethod(svd,reset); |
| 140 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(MatDestroy(&svd->OP)); |
| 141 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(MatDestroy(&svd->OPb)); |
| 142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(VecDestroy(&svd->omega)); |
| 143 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(MatDestroy(&svd->A)); |
| 144 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(MatDestroy(&svd->B)); |
| 145 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(MatDestroy(&svd->AT)); |
| 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.
|
2448 | PetscCall(MatDestroy(&svd->BT)); |
| 147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(BVDestroy(&svd->U)); |
| 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.
|
2448 | PetscCall(BVDestroy(&svd->V)); |
| 149 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl)); |
| 150 | 2448 | svd->nworkl = 0; | |
| 151 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr)); |
| 152 | 2448 | svd->nworkr = 0; | |
| 153 | 2448 | svd->swapped = PETSC_FALSE; | |
| 154 | 2448 | svd->state = SVD_STATE_INITIAL; | |
| 155 |
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.
|
2448 | PetscFunctionReturn(PETSC_SUCCESS); |
| 156 | } | ||
| 157 | |||
| 158 | /*@ | ||
| 159 | SVDDestroy - Destroys the `SVD` context. | ||
| 160 | |||
| 161 | Collective | ||
| 162 | |||
| 163 | Input Parameter: | ||
| 164 | . svd - the singular value solver context | ||
| 165 | |||
| 166 | Level: beginner | ||
| 167 | |||
| 168 | .seealso: [](ch:svd), `SVDCreate()`, `SVDSetUp()`, `SVDSolve()` | ||
| 169 | @*/ | ||
| 170 | 2409 | PetscErrorCode SVDDestroy(SVD *svd) | |
| 171 | { | ||
| 172 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2409 | PetscFunctionBegin; |
| 173 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2409 | if (!*svd) PetscFunctionReturn(PETSC_SUCCESS); |
| 174 |
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.
|
2409 | PetscValidHeaderSpecific(*svd,SVD_CLASSID,1); |
| 175 |
2/14✓ Branch 0 taken 2 times.
✓ 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.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2409 | if (--((PetscObject)*svd)->refct > 0) { *svd = NULL; PetscFunctionReturn(PETSC_SUCCESS); } |
| 176 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(SVDReset(*svd)); |
| 177 |
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.
|
2388 | PetscTryTypeMethod(*svd,destroy); |
| 178 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2388 | if ((*svd)->sigma) PetscCall(PetscFree3((*svd)->sigma,(*svd)->perm,(*svd)->errest)); |
| 179 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ 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.
|
2388 | if ((*svd)->sign) PetscCall(PetscFree((*svd)->sign)); |
| 180 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(DSDestroy(&(*svd)->ds)); |
| 181 |
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.
|
2388 | PetscCall(PetscFree((*svd)->sc)); |
| 182 | /* just in case the initial vectors have not been used */ | ||
| 183 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(SlepcBasisDestroy_Private(&(*svd)->nini,&(*svd)->IS)); |
| 184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(SlepcBasisDestroy_Private(&(*svd)->ninil,&(*svd)->ISL)); |
| 185 |
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.
|
2388 | if ((*svd)->convergeddestroy) PetscCall((*(*svd)->convergeddestroy)(&(*svd)->convergedctx)); |
| 186 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2388 | if ((*svd)->stoppingdestroy) PetscCall((*(*svd)->stoppingdestroy)(&(*svd)->stoppingctx)); |
| 187 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(SVDMonitorCancel(*svd)); |
| 188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2388 | PetscCall(PetscHeaderDestroy(svd)); |
| 189 |
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.
|
453 | PetscFunctionReturn(PETSC_SUCCESS); |
| 190 | } | ||
| 191 | |||
| 192 | /*@ | ||
| 193 | SVDSetType - Selects the particular solver to be used in the `SVD` object. | ||
| 194 | |||
| 195 | Logically Collective | ||
| 196 | |||
| 197 | Input Parameters: | ||
| 198 | + svd - the singular value solver context | ||
| 199 | - type - a known method | ||
| 200 | |||
| 201 | Options Database Key: | ||
| 202 | . -svd_type \<type\> - sets the method; use `-help` for a list of available methods | ||
| 203 | |||
| 204 | Notes: | ||
| 205 | See `SVDType` for available methods. The default is `SVDCROSS`. | ||
| 206 | |||
| 207 | Normally, it is best to use the `SVDSetFromOptions()` command and | ||
| 208 | then set the `SVD` type from the options database rather than by using | ||
| 209 | this routine. Using the options database provides the user with | ||
| 210 | maximum flexibility in evaluating the different available methods. | ||
| 211 | The `SVDSetType()` routine is provided for those situations where it | ||
| 212 | is necessary to set the iterative solver independently of the command | ||
| 213 | line or options database. | ||
| 214 | |||
| 215 | Level: intermediate | ||
| 216 | |||
| 217 | .seealso: [](ch:svd), `SVDType` | ||
| 218 | @*/ | ||
| 219 | 2319 | PetscErrorCode SVDSetType(SVD svd,SVDType type) | |
| 220 | { | ||
| 221 | 2319 | PetscErrorCode (*r)(SVD); | |
| 222 | 2319 | PetscBool match; | |
| 223 | |||
| 224 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2319 | PetscFunctionBegin; |
| 225 |
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.
|
2319 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 226 |
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.
|
2319 | PetscAssertPointer(type,2); |
| 227 | |||
| 228 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2319 | PetscCall(PetscObjectTypeCompare((PetscObject)svd,type,&match)); |
| 229 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2319 | if (match) PetscFunctionReturn(PETSC_SUCCESS); |
| 230 | |||
| 231 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2319 | PetscCall(PetscFunctionListFind(SVDList,type,&r)); |
| 232 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2319 | PetscCheck(r,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown SVD type given: %s",type); |
| 233 | |||
| 234 |
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.
|
2319 | PetscTryTypeMethod(svd,destroy); |
| 235 |
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.
|
2319 | PetscCall(PetscMemzero(svd->ops,sizeof(struct _SVDOps))); |
| 236 | |||
| 237 | 2319 | svd->state = SVD_STATE_INITIAL; | |
| 238 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2319 | PetscCall(PetscObjectChangeTypeName((PetscObject)svd,type)); |
| 239 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2319 | PetscCall((*r)(svd)); |
| 240 |
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.
|
455 | PetscFunctionReturn(PETSC_SUCCESS); |
| 241 | } | ||
| 242 | |||
| 243 | /*@ | ||
| 244 | SVDGetType - Gets the `SVD` type as a string from the `SVD` object. | ||
| 245 | |||
| 246 | Not Collective | ||
| 247 | |||
| 248 | Input Parameter: | ||
| 249 | . svd - the singular value solver context | ||
| 250 | |||
| 251 | Output Parameter: | ||
| 252 | . type - name of `SVD` method | ||
| 253 | |||
| 254 | Level: intermediate | ||
| 255 | |||
| 256 | .seealso: [](ch:svd), `SVDSetType()` | ||
| 257 | @*/ | ||
| 258 | 582 | PetscErrorCode SVDGetType(SVD svd,SVDType *type) | |
| 259 | { | ||
| 260 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
582 | PetscFunctionBegin; |
| 261 |
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.
|
582 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 262 |
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.
|
582 | PetscAssertPointer(type,2); |
| 263 | 582 | *type = ((PetscObject)svd)->type_name; | |
| 264 |
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.
|
582 | PetscFunctionReturn(PETSC_SUCCESS); |
| 265 | } | ||
| 266 | |||
| 267 | /*@C | ||
| 268 | SVDRegister - Adds a method to the singular value solver package. | ||
| 269 | |||
| 270 | Not Collective | ||
| 271 | |||
| 272 | Input Parameters: | ||
| 273 | + name - name of a new user-defined solver | ||
| 274 | - function - routine to create the solver context | ||
| 275 | |||
| 276 | Note: | ||
| 277 | `SVDRegister()` may be called multiple times to add several user-defined solvers. | ||
| 278 | |||
| 279 | Example Usage: | ||
| 280 | .vb | ||
| 281 | SVDRegister("my_solver",MySolverCreate); | ||
| 282 | .ve | ||
| 283 | |||
| 284 | Then, your solver can be chosen with the procedural interface via | ||
| 285 | .vb | ||
| 286 | SVDSetType(svd,"my_solver") | ||
| 287 | .ve | ||
| 288 | or at runtime via the option `-svd_type my_solver`. | ||
| 289 | |||
| 290 | Level: advanced | ||
| 291 | |||
| 292 | .seealso: [](ch:svd), `SVDRegisterAll()` | ||
| 293 | @*/ | ||
| 294 | 16888 | PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD)) | |
| 295 | { | ||
| 296 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16888 | PetscFunctionBegin; |
| 297 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16888 | PetscCall(SVDInitializePackage()); |
| 298 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16888 | PetscCall(PetscFunctionListAdd(&SVDList,name,function)); |
| 299 |
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.
|
3185 | PetscFunctionReturn(PETSC_SUCCESS); |
| 300 | } | ||
| 301 | |||
| 302 | /*@C | ||
| 303 | SVDMonitorRegister - Registers an `SVD` monitor routine that may be accessed with | ||
| 304 | `SVDMonitorSetFromOptions()`. | ||
| 305 | |||
| 306 | Not Collective | ||
| 307 | |||
| 308 | Input Parameters: | ||
| 309 | + name - name of a new monitor routine | ||
| 310 | . vtype - a `PetscViewerType` for the output | ||
| 311 | . format - a `PetscViewerFormat` for the output | ||
| 312 | . monitor - monitor routine, see `SVDMonitorRegisterFn` | ||
| 313 | . create - creation routine, or `NULL` | ||
| 314 | - destroy - destruction routine, or `NULL` | ||
| 315 | |||
| 316 | Notes: | ||
| 317 | `SVDMonitorRegister()` may be called multiple times to add several user-defined monitors. | ||
| 318 | |||
| 319 | The calling sequence for the given function matches the calling sequence of `SVDMonitorFn` | ||
| 320 | functions passed to `SVDMonitorSet()` with the additional requirement that its final argument | ||
| 321 | be a `PetscViewerAndFormat`. | ||
| 322 | |||
| 323 | Example Usage: | ||
| 324 | .vb | ||
| 325 | SVDMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL); | ||
| 326 | .ve | ||
| 327 | |||
| 328 | Then, your monitor can be chosen with the procedural interface via | ||
| 329 | .vb | ||
| 330 | SVDMonitorSetFromOptions(svd,"-svd_monitor_my_monitor","my_monitor",NULL); | ||
| 331 | .ve | ||
| 332 | or at runtime via the option `-svd_monitor_my_monitor`. | ||
| 333 | |||
| 334 | Level: advanced | ||
| 335 | |||
| 336 | .seealso: [](ch:svd), `SVDMonitorSet()`, `SVDMonitorRegisterAll()`, `SVDMonitorSetFromOptions()` | ||
| 337 | @*/ | ||
| 338 | 16282 | PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy) | |
| 339 | { | ||
| 340 | 16282 | char key[PETSC_MAX_PATH_LEN]; | |
| 341 | |||
| 342 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16282 | PetscFunctionBegin; |
| 343 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16282 | PetscCall(SVDInitializePackage()); |
| 344 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16282 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
| 345 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16282 | PetscCall(PetscFunctionListAdd(&SVDMonitorList,key,monitor)); |
| 346 |
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.
|
16282 | if (create) PetscCall(PetscFunctionListAdd(&SVDMonitorCreateList,key,create)); |
| 347 |
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.
|
16282 | if (destroy) PetscCall(PetscFunctionListAdd(&SVDMonitorDestroyList,key,destroy)); |
| 348 |
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.
|
3185 | PetscFunctionReturn(PETSC_SUCCESS); |
| 349 | } | ||
| 350 | |||
| 351 | /*@ | ||
| 352 | SVDSetBV - Associates basis vectors objects to the singular value solver. | ||
| 353 | |||
| 354 | Collective | ||
| 355 | |||
| 356 | Input Parameters: | ||
| 357 | + svd - the singular value solver context | ||
| 358 | . V - the basis vectors object for right singular vectors | ||
| 359 | - U - the basis vectors object for left singular vectors | ||
| 360 | |||
| 361 | Note: | ||
| 362 | Use `SVDGetBV()` to retrieve the basis vectors contexts (for example, | ||
| 363 | to free them at the end of the computations). | ||
| 364 | |||
| 365 | Level: advanced | ||
| 366 | |||
| 367 | .seealso: [](ch:svd), `SVDGetBV()` | ||
| 368 | @*/ | ||
| 369 | 30 | PetscErrorCode SVDSetBV(SVD svd,BV V,BV U) | |
| 370 | { | ||
| 371 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
| 372 |
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.
|
30 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 373 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (V) { |
| 374 |
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.
|
30 | PetscValidHeaderSpecific(V,BV_CLASSID,2); |
| 375 |
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.
|
30 | PetscCheckSameComm(svd,1,V,2); |
| 376 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectReference((PetscObject)V)); |
| 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.
|
30 | PetscCall(BVDestroy(&svd->V)); |
| 378 | 30 | svd->V = V; | |
| 379 | } | ||
| 380 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (U) { |
| 381 |
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.
|
30 | PetscValidHeaderSpecific(U,BV_CLASSID,3); |
| 382 |
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.
|
30 | PetscCheckSameComm(svd,1,U,3); |
| 383 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectReference((PetscObject)U)); |
| 384 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVDestroy(&svd->U)); |
| 385 | 30 | svd->U = U; | |
| 386 | } | ||
| 387 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
| 388 | } | ||
| 389 | |||
| 390 | /*@ | ||
| 391 | SVDGetBV - Obtain the basis vectors objects associated to the singular | ||
| 392 | value solver object. | ||
| 393 | |||
| 394 | Not Collective | ||
| 395 | |||
| 396 | Input Parameter: | ||
| 397 | . svd - the singular value solver context | ||
| 398 | |||
| 399 | Output Parameters: | ||
| 400 | + V - basis vectors context for right singular vectors | ||
| 401 | - U - basis vectors context for left singular vectors | ||
| 402 | |||
| 403 | Level: advanced | ||
| 404 | |||
| 405 | .seealso: [](ch:svd), `SVDSetBV()` | ||
| 406 | @*/ | ||
| 407 | 4627 | PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U) | |
| 408 | { | ||
| 409 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4627 | PetscFunctionBegin; |
| 410 |
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.
|
4627 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 411 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4627 | if (V) { |
| 412 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2327 | if (!svd->V) { |
| 413 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2327 | PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->V)); |
| 414 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2327 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0)); |
| 415 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2327 | PetscCall(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options)); |
| 416 | } | ||
| 417 | 2327 | *V = svd->V; | |
| 418 | } | ||
| 419 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4627 | if (U) { |
| 420 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2307 | if (!svd->U) { |
| 421 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2307 | PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->U)); |
| 422 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2307 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0)); |
| 423 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2307 | PetscCall(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options)); |
| 424 | } | ||
| 425 | 2307 | *U = svd->U; | |
| 426 | } | ||
| 427 |
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.
|
914 | PetscFunctionReturn(PETSC_SUCCESS); |
| 428 | } | ||
| 429 | |||
| 430 | /*@ | ||
| 431 | SVDSetDS - Associates a direct solver object to the singular value solver. | ||
| 432 | |||
| 433 | Collective | ||
| 434 | |||
| 435 | Input Parameters: | ||
| 436 | + svd - the singular value solver context | ||
| 437 | - ds - the direct solver object | ||
| 438 | |||
| 439 | Note: | ||
| 440 | Use `SVDGetDS()` to retrieve the direct solver context (for example, | ||
| 441 | to free it at the end of the computations). | ||
| 442 | |||
| 443 | Level: advanced | ||
| 444 | |||
| 445 | .seealso: [](ch:svd), `SVDGetDS()` | ||
| 446 | @*/ | ||
| 447 | ✗ | PetscErrorCode SVDSetDS(SVD svd,DS ds) | |
| 448 | { | ||
| 449 | ✗ | PetscFunctionBegin; | |
| 450 | ✗ | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); | |
| 451 | ✗ | PetscValidHeaderSpecific(ds,DS_CLASSID,2); | |
| 452 | ✗ | PetscCheckSameComm(svd,1,ds,2); | |
| 453 | ✗ | PetscCall(PetscObjectReference((PetscObject)ds)); | |
| 454 | ✗ | PetscCall(DSDestroy(&svd->ds)); | |
| 455 | ✗ | svd->ds = ds; | |
| 456 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 457 | } | ||
| 458 | |||
| 459 | /*@ | ||
| 460 | SVDGetDS - Obtain the direct solver object associated to the singular value | ||
| 461 | solver object. | ||
| 462 | |||
| 463 | Not Collective | ||
| 464 | |||
| 465 | Input Parameter: | ||
| 466 | . svd - the singular value solver context | ||
| 467 | |||
| 468 | Output Parameter: | ||
| 469 | . ds - direct solver context | ||
| 470 | |||
| 471 | Level: advanced | ||
| 472 | |||
| 473 | .seealso: [](ch:svd), `SVDSetDS()` | ||
| 474 | @*/ | ||
| 475 | 2297 | PetscErrorCode SVDGetDS(SVD svd,DS *ds) | |
| 476 | { | ||
| 477 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2297 | PetscFunctionBegin; |
| 478 |
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.
|
2297 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
| 479 |
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.
|
2297 | PetscAssertPointer(ds,2); |
| 480 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2297 | if (!svd->ds) { |
| 481 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2297 | PetscCall(DSCreate(PetscObjectComm((PetscObject)svd),&svd->ds)); |
| 482 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2297 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0)); |
| 483 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2297 | PetscCall(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options)); |
| 484 | } | ||
| 485 | 2297 | *ds = svd->ds; | |
| 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.
|
2297 | PetscFunctionReturn(PETSC_SUCCESS); |
| 487 | } | ||
| 488 |