| 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 | MFN routines related to options that can be set via the command-line | ||
| 12 | or procedurally | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <slepc/private/mfnimpl.h> /*I "slepcmfn.h" I*/ | ||
| 16 | #include <petscdraw.h> | ||
| 17 | |||
| 18 | /*@C | ||
| 19 | MFNMonitorSetFromOptions - Sets a monitor function and viewer appropriate for the type | ||
| 20 | indicated by the user. | ||
| 21 | |||
| 22 | Collective | ||
| 23 | |||
| 24 | Input Parameters: | ||
| 25 | + mfn - the matrix function solver context | ||
| 26 | . opt - the command line option for this monitor | ||
| 27 | . name - the monitor type one is seeking | ||
| 28 | - ctx - an optional user context for the monitor, or NULL | ||
| 29 | |||
| 30 | Level: developer | ||
| 31 | |||
| 32 | .seealso: [](ch:mfn), `MFNMonitorSet()` | ||
| 33 | @*/ | ||
| 34 | 204 | PetscErrorCode MFNMonitorSetFromOptions(MFN mfn,const char opt[],const char name[],void *ctx) | |
| 35 | { | ||
| 36 | 204 | PetscErrorCode (*mfunc)(MFN,PetscInt,PetscReal,void*); | |
| 37 | 204 | PetscErrorCode (*cfunc)(PetscViewer,PetscViewerFormat,void*,PetscViewerAndFormat**); | |
| 38 | 204 | PetscErrorCode (*dfunc)(PetscViewerAndFormat**); | |
| 39 | 204 | PetscViewerAndFormat *vf; | |
| 40 | 204 | PetscViewer viewer; | |
| 41 | 204 | PetscViewerFormat format; | |
| 42 | 204 | PetscViewerType vtype; | |
| 43 | 204 | char key[PETSC_MAX_PATH_LEN]; | |
| 44 | 204 | PetscBool flg; | |
| 45 | |||
| 46 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
204 | PetscFunctionBegin; |
| 47 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)mfn),((PetscObject)mfn)->options,((PetscObject)mfn)->prefix,opt,&viewer,&format,&flg)); |
| 48 |
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.
|
204 | if (!flg) PetscFunctionReturn(PETSC_SUCCESS); |
| 49 | |||
| 50 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerGetType(viewer,&vtype)); |
| 51 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
| 52 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscFunctionListFind(MFNMonitorList,key,&mfunc)); |
| 53 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
18 | PetscCheck(mfunc,PetscObjectComm((PetscObject)mfn),PETSC_ERR_SUP,"Specified viewer and format not supported"); |
| 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.
|
18 | PetscCall(PetscFunctionListFind(MFNMonitorCreateList,key,&cfunc)); |
| 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.
|
18 | PetscCall(PetscFunctionListFind(MFNMonitorDestroyList,key,&dfunc)); |
| 56 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
|
18 | if (!cfunc) cfunc = PetscViewerAndFormatCreate_Internal; |
| 57 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
18 | if (!dfunc) dfunc = PetscViewerAndFormatDestroy; |
| 58 | |||
| 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.
|
18 | PetscCall((*cfunc)(viewer,format,ctx,&vf)); |
| 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.
|
18 | PetscCall(PetscViewerDestroy(&viewer)); |
| 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.
|
18 | PetscCall(MFNMonitorSet(mfn,mfunc,vf,(PetscCtxDestroyFn*)dfunc)); |
| 62 |
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.
|
3 | PetscFunctionReturn(PETSC_SUCCESS); |
| 63 | } | ||
| 64 | |||
| 65 | /*@ | ||
| 66 | MFNSetFromOptions - Sets `MFN` options from the options database. | ||
| 67 | This routine must be called before `MFNSetUp()` if the user is to be | ||
| 68 | allowed to configure the solver. | ||
| 69 | |||
| 70 | Collective | ||
| 71 | |||
| 72 | Input Parameter: | ||
| 73 | . mfn - the matrix function solver context | ||
| 74 | |||
| 75 | Note: | ||
| 76 | To see all options, run your program with the `-help` option. | ||
| 77 | |||
| 78 | Level: beginner | ||
| 79 | |||
| 80 | .seealso: [](ch:mfn), `MFNSetOptionsPrefix()` | ||
| 81 | @*/ | ||
| 82 | 204 | PetscErrorCode MFNSetFromOptions(MFN mfn) | |
| 83 | { | ||
| 84 | 204 | char type[256]; | |
| 85 | 204 | PetscBool set,flg,flg1,flg2; | |
| 86 | 204 | PetscReal r; | |
| 87 | 204 | PetscInt i; | |
| 88 | |||
| 89 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
204 | PetscFunctionBegin; |
| 90 |
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.
|
204 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 91 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(MFNRegisterAll()); |
| 92 |
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.
|
612 | PetscObjectOptionsBegin((PetscObject)mfn); |
| 93 |
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.
|
242 | PetscCall(PetscOptionsFList("-mfn_type","Matrix Function method","MFNSetType",MFNList,(char*)(((PetscObject)mfn)->type_name?((PetscObject)mfn)->type_name:MFNKRYLOV),type,sizeof(type),&flg)); |
| 94 |
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.
|
204 | if (flg) PetscCall(MFNSetType(mfn,type)); |
| 95 |
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.
|
154 | else if (!((PetscObject)mfn)->type_name) PetscCall(MFNSetType(mfn,MFNKRYLOV)); |
| 96 | |||
| 97 | 204 | i = mfn->max_it; | |
| 98 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsInt("-mfn_max_it","Maximum number of iterations","MFNSetTolerances",mfn->max_it,&i,&flg1)); |
| 99 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
204 | if (!flg1) i = PETSC_DETERMINE; |
| 100 | 204 | r = mfn->tol; | |
| 101 |
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.
|
346 | PetscCall(PetscOptionsReal("-mfn_tol","Tolerance","MFNSetTolerances",SlepcDefaultTol(mfn->tol),&r,&flg2)); |
| 102 |
7/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 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.
|
204 | if (flg1 || flg2) PetscCall(MFNSetTolerances(mfn,r,i)); |
| 103 | |||
| 104 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsInt("-mfn_ncv","Number of basis vectors","MFNSetDimensions",mfn->ncv,&i,&flg)); |
| 105 |
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.
|
204 | if (flg) PetscCall(MFNSetDimensions(mfn,i)); |
| 106 | |||
| 107 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsBool("-mfn_error_if_not_converged","Generate error if solver does not converge","MFNSetErrorIfNotConverged",mfn->errorifnotconverged,&mfn->errorifnotconverged,NULL)); |
| 108 | |||
| 109 | /* -----------------------------------------------------------------------*/ | ||
| 110 | /* | ||
| 111 | Cancels all monitors hardwired into code before call to MFNSetFromOptions() | ||
| 112 | */ | ||
| 113 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsBool("-mfn_monitor_cancel","Remove any hardwired monitor routines","MFNMonitorCancel",PETSC_FALSE,&flg,&set)); |
| 114 |
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.
|
204 | if (set && flg) PetscCall(MFNMonitorCancel(mfn)); |
| 115 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(MFNMonitorSetFromOptions(mfn,"-mfn_monitor","error_estimate",NULL)); |
| 116 | |||
| 117 | /* -----------------------------------------------------------------------*/ | ||
| 118 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscOptionsName("-mfn_view","Print detailed information on solver used","MFNView",&set)); |
| 119 | |||
| 120 |
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.
|
204 | PetscTryTypeMethod(mfn,setfromoptions,PetscOptionsObject); |
| 121 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)mfn,PetscOptionsObject)); |
| 122 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscOptionsEnd(); |
| 123 | |||
| 124 |
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.
|
204 | if (!mfn->V) PetscCall(MFNGetBV(mfn,&mfn->V)); |
| 125 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(BVSetFromOptions(mfn->V)); |
| 126 |
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.
|
204 | if (!mfn->fn) PetscCall(MFNGetFN(mfn,&mfn->fn)); |
| 127 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
204 | PetscCall(FNSetFromOptions(mfn->fn)); |
| 128 |
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.
|
35 | PetscFunctionReturn(PETSC_SUCCESS); |
| 129 | } | ||
| 130 | |||
| 131 | /*@ | ||
| 132 | MFNGetTolerances - Gets the tolerance and maximum iteration count used | ||
| 133 | by the `MFN` convergence tests. | ||
| 134 | |||
| 135 | Not Collective | ||
| 136 | |||
| 137 | Input Parameter: | ||
| 138 | . mfn - the matrix function solver context | ||
| 139 | |||
| 140 | Output Parameters: | ||
| 141 | + tol - the convergence tolerance | ||
| 142 | - maxits - maximum number of iterations | ||
| 143 | |||
| 144 | Notes: | ||
| 145 | The user can specify `NULL` for any parameter that is not needed. | ||
| 146 | |||
| 147 | Level: intermediate | ||
| 148 | |||
| 149 | .seealso: [](ch:mfn), `MFNSetTolerances()` | ||
| 150 | @*/ | ||
| 151 | 72 | PetscErrorCode MFNGetTolerances(MFN mfn,PetscReal *tol,PetscInt *maxits) | |
| 152 | { | ||
| 153 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
72 | PetscFunctionBegin; |
| 154 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
72 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 155 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
72 | if (tol) *tol = mfn->tol; |
| 156 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
72 | if (maxits) *maxits = mfn->max_it; |
| 157 |
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.
|
72 | PetscFunctionReturn(PETSC_SUCCESS); |
| 158 | } | ||
| 159 | |||
| 160 | /*@ | ||
| 161 | MFNSetTolerances - Sets the tolerance and maximum iteration count used | ||
| 162 | by the `MFN` convergence tests. | ||
| 163 | |||
| 164 | Logically Collective | ||
| 165 | |||
| 166 | Input Parameters: | ||
| 167 | + mfn - the matrix function solver context | ||
| 168 | . tol - the convergence tolerance | ||
| 169 | - maxits - maximum number of iterations to use | ||
| 170 | |||
| 171 | Options Database Keys: | ||
| 172 | + -mfn_tol \<tol\> - sets the convergence tolerance | ||
| 173 | - -mfn_max_it \<maxits\> - sets the maximum number of iterations allowed | ||
| 174 | |||
| 175 | Notes: | ||
| 176 | Use `PETSC_CURRENT` to retain the current value of any of the parameters. | ||
| 177 | Use `PETSC_DETERMINE` for either argument to assign a default value computed | ||
| 178 | internally (may be different in each solver). | ||
| 179 | For `maxits` use `PETSC_UNLIMITED` to indicate there is no upper bound on this value. | ||
| 180 | |||
| 181 | Level: intermediate | ||
| 182 | |||
| 183 | .seealso: [](ch:mfn), `MFNGetTolerances()` | ||
| 184 | @*/ | ||
| 185 | 122 | PetscErrorCode MFNSetTolerances(MFN mfn,PetscReal tol,PetscInt maxits) | |
| 186 | { | ||
| 187 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
122 | PetscFunctionBegin; |
| 188 |
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.
|
122 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 189 |
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.
|
122 | PetscValidLogicalCollectiveReal(mfn,tol,2); |
| 190 |
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.
|
122 | PetscValidLogicalCollectiveInt(mfn,maxits,3); |
| 191 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
122 | if (tol == (PetscReal)PETSC_DETERMINE) { |
| 192 | ✗ | mfn->tol = PETSC_DETERMINE; | |
| 193 | ✗ | mfn->setupcalled = 0; | |
| 194 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
122 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
| 195 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
122 | PetscCheck(tol>0.0,PetscObjectComm((PetscObject)mfn),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of tol. Must be > 0"); |
| 196 | 122 | mfn->tol = tol; | |
| 197 | } | ||
| 198 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
122 | if (maxits == PETSC_DETERMINE) { |
| 199 | 60 | mfn->max_it = PETSC_DETERMINE; | |
| 200 | 60 | mfn->setupcalled = 0; | |
| 201 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
62 | } else if (maxits == PETSC_UNLIMITED) { |
| 202 | ✗ | mfn->max_it = PETSC_INT_MAX; | |
| 203 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
62 | } else if (maxits != PETSC_CURRENT) { |
| 204 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
44 | PetscCheck(maxits>0,PetscObjectComm((PetscObject)mfn),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of maxits. Must be > 0"); |
| 205 | 44 | mfn->max_it = maxits; | |
| 206 | } | ||
| 207 |
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.
|
21 | PetscFunctionReturn(PETSC_SUCCESS); |
| 208 | } | ||
| 209 | |||
| 210 | /*@ | ||
| 211 | MFNGetDimensions - Gets the dimension of the subspace used by the solver. | ||
| 212 | |||
| 213 | Not Collective | ||
| 214 | |||
| 215 | Input Parameter: | ||
| 216 | . mfn - the matrix function solver context | ||
| 217 | |||
| 218 | Output Parameter: | ||
| 219 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
| 220 | |||
| 221 | Level: intermediate | ||
| 222 | |||
| 223 | .seealso: [](ch:mfn), `MFNSetDimensions()` | ||
| 224 | @*/ | ||
| 225 | 62 | PetscErrorCode MFNGetDimensions(MFN mfn,PetscInt *ncv) | |
| 226 | { | ||
| 227 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
62 | PetscFunctionBegin; |
| 228 |
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.
|
62 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 229 |
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.
|
62 | PetscAssertPointer(ncv,2); |
| 230 | 62 | *ncv = mfn->ncv; | |
| 231 |
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.
|
62 | PetscFunctionReturn(PETSC_SUCCESS); |
| 232 | } | ||
| 233 | |||
| 234 | /*@ | ||
| 235 | MFNSetDimensions - Sets the dimension of the subspace to be used by the solver. | ||
| 236 | |||
| 237 | Logically Collective | ||
| 238 | |||
| 239 | Input Parameters: | ||
| 240 | + mfn - the matrix function solver context | ||
| 241 | - ncv - the maximum dimension of the subspace to be used by the solver | ||
| 242 | |||
| 243 | Options Database Key: | ||
| 244 | . -mfn_ncv \<ncv\> - sets the dimension of the subspace | ||
| 245 | |||
| 246 | Notes: | ||
| 247 | Use `PETSC_DETERMINE` for `ncv` to assign a reasonably good value, which is | ||
| 248 | dependent on the solution method. | ||
| 249 | |||
| 250 | Level: intermediate | ||
| 251 | |||
| 252 | .seealso: [](ch:mfn), `MFNGetDimensions()` | ||
| 253 | @*/ | ||
| 254 | 88 | PetscErrorCode MFNSetDimensions(MFN mfn,PetscInt ncv) | |
| 255 | { | ||
| 256 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
88 | PetscFunctionBegin; |
| 257 |
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.
|
88 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 258 |
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.
|
88 | PetscValidLogicalCollectiveInt(mfn,ncv,2); |
| 259 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
88 | if (ncv == PETSC_DECIDE || ncv == PETSC_DEFAULT) { |
| 260 | ✗ | mfn->ncv = PETSC_DETERMINE; | |
| 261 | } else { | ||
| 262 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
88 | PetscCheck(ncv>0,PetscObjectComm((PetscObject)mfn),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ncv. Must be > 0"); |
| 263 | 88 | mfn->ncv = ncv; | |
| 264 | } | ||
| 265 | 88 | mfn->setupcalled = 0; | |
| 266 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
88 | PetscFunctionReturn(PETSC_SUCCESS); |
| 267 | } | ||
| 268 | |||
| 269 | /*@ | ||
| 270 | MFNSetErrorIfNotConverged - Causes `MFNSolve()` to generate an error if the | ||
| 271 | solver has not converged. | ||
| 272 | |||
| 273 | Logically Collective | ||
| 274 | |||
| 275 | Input Parameters: | ||
| 276 | + mfn - the matrix function solver context | ||
| 277 | - flg - `PETSC_TRUE` indicates you want the error generated | ||
| 278 | |||
| 279 | Options Database Key: | ||
| 280 | . -mfn_error_if_not_converged - generate an error and stop the program | ||
| 281 | |||
| 282 | Note: | ||
| 283 | Normally SLEPc continues if the solver fails to converge, you can call | ||
| 284 | `MFNGetConvergedReason()` after a `MFNSolve()` to determine if it has converged. | ||
| 285 | |||
| 286 | Level: intermediate | ||
| 287 | |||
| 288 | .seealso: [](ch:mfn), `MFNGetErrorIfNotConverged()` | ||
| 289 | @*/ | ||
| 290 | 132 | PetscErrorCode MFNSetErrorIfNotConverged(MFN mfn,PetscBool flg) | |
| 291 | { | ||
| 292 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
132 | PetscFunctionBegin; |
| 293 |
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.
|
132 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 294 |
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.
|
132 | PetscValidLogicalCollectiveBool(mfn,flg,2); |
| 295 | 132 | mfn->errorifnotconverged = flg; | |
| 296 |
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.
|
132 | PetscFunctionReturn(PETSC_SUCCESS); |
| 297 | } | ||
| 298 | |||
| 299 | /*@ | ||
| 300 | MFNGetErrorIfNotConverged - Return a flag indicating whether `MFNSolve()` will | ||
| 301 | generate an error if the solver does not converge. | ||
| 302 | |||
| 303 | Not Collective | ||
| 304 | |||
| 305 | Input Parameter: | ||
| 306 | . mfn - the matrix function solver context | ||
| 307 | |||
| 308 | Output Parameter: | ||
| 309 | . flag - `PETSC_TRUE` if it will generate an error, else `PETSC_FALSE` | ||
| 310 | |||
| 311 | Level: intermediate | ||
| 312 | |||
| 313 | .seealso: [](ch:mfn), `MFNSetErrorIfNotConverged()` | ||
| 314 | @*/ | ||
| 315 | 34 | PetscErrorCode MFNGetErrorIfNotConverged(MFN mfn,PetscBool *flag) | |
| 316 | { | ||
| 317 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34 | PetscFunctionBegin; |
| 318 |
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.
|
34 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 319 |
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.
|
34 | PetscAssertPointer(flag,2); |
| 320 | 34 | *flag = mfn->errorifnotconverged; | |
| 321 |
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.
|
34 | PetscFunctionReturn(PETSC_SUCCESS); |
| 322 | } | ||
| 323 | |||
| 324 | /*@ | ||
| 325 | MFNSetOptionsPrefix - Sets the prefix used for searching for all | ||
| 326 | `MFN` options in the database. | ||
| 327 | |||
| 328 | Logically Collective | ||
| 329 | |||
| 330 | Input Parameters: | ||
| 331 | + mfn - the matrix function solver context | ||
| 332 | - prefix - the prefix string to prepend to all `MFN` option requests | ||
| 333 | |||
| 334 | Notes: | ||
| 335 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 336 | The first character of all runtime options is AUTOMATICALLY the | ||
| 337 | hyphen. | ||
| 338 | |||
| 339 | For example, to distinguish between the runtime options for two | ||
| 340 | different `MFN` contexts, one could call | ||
| 341 | .vb | ||
| 342 | MFNSetOptionsPrefix(mfn1,"fun1_") | ||
| 343 | MFNSetOptionsPrefix(mfn2,"fun2_") | ||
| 344 | .ve | ||
| 345 | |||
| 346 | Level: advanced | ||
| 347 | |||
| 348 | .seealso: [](ch:mfn), `MFNAppendOptionsPrefix()`, `MFNGetOptionsPrefix()` | ||
| 349 | @*/ | ||
| 350 | 30 | PetscErrorCode MFNSetOptionsPrefix(MFN mfn,const char prefix[]) | |
| 351 | { | ||
| 352 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
| 353 |
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(mfn,MFN_CLASSID,1); |
| 354 |
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.
|
30 | if (!mfn->V) PetscCall(MFNGetBV(mfn,&mfn->V)); |
| 355 |
4/6✓ Branch 0 taken 2 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(BVSetOptionsPrefix(mfn->V,prefix)); |
| 356 |
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.
|
30 | if (!mfn->fn) PetscCall(MFNGetFN(mfn,&mfn->fn)); |
| 357 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(FNSetOptionsPrefix(mfn->fn,prefix)); |
| 358 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectSetOptionsPrefix((PetscObject)mfn,prefix)); |
| 359 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 360 | } | ||
| 361 | |||
| 362 | /*@ | ||
| 363 | MFNAppendOptionsPrefix - Appends to the prefix used for searching for all | ||
| 364 | `MFN` options in the database. | ||
| 365 | |||
| 366 | Logically Collective | ||
| 367 | |||
| 368 | Input Parameters: | ||
| 369 | + mfn - the matrix function solver context | ||
| 370 | - prefix - the prefix string to prepend to all `MFN` option requests | ||
| 371 | |||
| 372 | Notes: | ||
| 373 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 374 | The first character of all runtime options is AUTOMATICALLY the hyphen. | ||
| 375 | |||
| 376 | Level: advanced | ||
| 377 | |||
| 378 | .seealso: [](ch:mfn), `MFNSetOptionsPrefix()`, `MFNGetOptionsPrefix()` | ||
| 379 | @*/ | ||
| 380 | 10 | PetscErrorCode MFNAppendOptionsPrefix(MFN mfn,const char prefix[]) | |
| 381 | { | ||
| 382 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 383 |
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.
|
10 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 384 |
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.
|
10 | if (!mfn->V) PetscCall(MFNGetBV(mfn,&mfn->V)); |
| 385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(BVAppendOptionsPrefix(mfn->V,prefix)); |
| 386 |
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.
|
10 | if (!mfn->fn) PetscCall(MFNGetFN(mfn,&mfn->fn)); |
| 387 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(FNAppendOptionsPrefix(mfn->fn,prefix)); |
| 388 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)mfn,prefix)); |
| 389 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 390 | } | ||
| 391 | |||
| 392 | /*@ | ||
| 393 | MFNGetOptionsPrefix - Gets the prefix used for searching for all | ||
| 394 | `MFN` options in the database. | ||
| 395 | |||
| 396 | Not Collective | ||
| 397 | |||
| 398 | Input Parameter: | ||
| 399 | . mfn - the matrix function solver context | ||
| 400 | |||
| 401 | Output Parameter: | ||
| 402 | . prefix - pointer to the prefix string used is returned | ||
| 403 | |||
| 404 | Level: advanced | ||
| 405 | |||
| 406 | .seealso: [](ch:mfn), `MFNSetOptionsPrefix()`, `MFNAppendOptionsPrefix()` | ||
| 407 | @*/ | ||
| 408 | 31 | PetscErrorCode MFNGetOptionsPrefix(MFN mfn,const char *prefix[]) | |
| 409 | { | ||
| 410 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
31 | PetscFunctionBegin; |
| 411 |
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.
|
31 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
| 412 |
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.
|
31 | PetscAssertPointer(prefix,2); |
| 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.
|
31 | PetscCall(PetscObjectGetOptionsPrefix((PetscObject)mfn,prefix)); |
| 414 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
| 415 | } | ||
| 416 |