| 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 | EPS routines related to options that can be set via the command-line | ||
| 12 | or procedurally. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/ | ||
| 16 | #include <petscdraw.h> | ||
| 17 | |||
| 18 | /*@ | ||
| 19 | EPSMonitorSetFromOptions - Sets a monitor function and viewer appropriate for the type | ||
| 20 | indicated by the user. | ||
| 21 | |||
| 22 | Collective | ||
| 23 | |||
| 24 | Input Parameters: | ||
| 25 | + eps - the linear eigensolver 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 | - trackall - whether this monitor tracks all eigenvalues or not | ||
| 30 | |||
| 31 | Level: developer | ||
| 32 | |||
| 33 | .seealso: [](ch:eps), `EPSMonitorSet()`, `EPSSetTrackAll()` | ||
| 34 | @*/ | ||
| 35 | 20970 | PetscErrorCode EPSMonitorSetFromOptions(EPS eps,const char opt[],const char name[],PetscCtx ctx,PetscBool trackall) | |
| 36 | { | ||
| 37 | 20970 | PetscErrorCode (*mfunc)(EPS,PetscInt,PetscInt,PetscScalar*,PetscScalar*,PetscReal*,PetscInt,void*); | |
| 38 | 20970 | PetscErrorCode (*cfunc)(PetscViewer,PetscViewerFormat,void*,PetscViewerAndFormat**); | |
| 39 | 20970 | PetscErrorCode (*dfunc)(PetscViewerAndFormat**); | |
| 40 | 20970 | PetscViewerAndFormat *vf; | |
| 41 | 20970 | PetscViewer viewer; | |
| 42 | 20970 | PetscViewerFormat format; | |
| 43 | 20970 | PetscViewerType vtype; | |
| 44 | 20970 | char key[PETSC_MAX_PATH_LEN]; | |
| 45 | 20970 | PetscBool flg; | |
| 46 | |||
| 47 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
20970 | PetscFunctionBegin; |
| 48 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20970 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)eps),((PetscObject)eps)->options,((PetscObject)eps)->prefix,opt,&viewer,&format,&flg)); |
| 49 |
9/16✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
20970 | if (!flg) PetscFunctionReturn(PETSC_SUCCESS); |
| 50 | |||
| 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.
|
80 | PetscCall(PetscViewerGetType(viewer,&vtype)); |
| 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.
|
80 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
| 53 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(PetscFunctionListFind(EPSMonitorList,key,&mfunc)); |
| 54 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
80 | PetscCheck(mfunc,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Specified viewer and format not supported"); |
| 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.
|
80 | PetscCall(PetscFunctionListFind(EPSMonitorCreateList,key,&cfunc)); |
| 56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(PetscFunctionListFind(EPSMonitorDestroyList,key,&dfunc)); |
| 57 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
80 | if (!cfunc) cfunc = PetscViewerAndFormatCreate_Internal; |
| 58 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
80 | if (!dfunc) dfunc = PetscViewerAndFormatDestroy; |
| 59 | |||
| 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.
|
80 | PetscCall((*cfunc)(viewer,format,ctx,&vf)); |
| 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.
|
80 | PetscCall(PetscViewerDestroy(&viewer)); |
| 62 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
80 | PetscCall(EPSMonitorSet(eps,mfunc,vf,(PetscCtxDestroyFn*)dfunc)); |
| 63 |
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.
|
80 | if (trackall) PetscCall(EPSSetTrackAll(eps,PETSC_TRUE)); |
| 64 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 65 | } | ||
| 66 | |||
| 67 | /*@ | ||
| 68 | EPSSetFromOptions - Sets `EPS` options from the options database. | ||
| 69 | This routine must be called before `EPSSetUp()` if the user is to be | ||
| 70 | allowed to configure the solver. | ||
| 71 | |||
| 72 | Collective | ||
| 73 | |||
| 74 | Input Parameter: | ||
| 75 | . eps - the linear eigensolver context | ||
| 76 | |||
| 77 | Note: | ||
| 78 | To see all options, run your program with the `-help` option. | ||
| 79 | |||
| 80 | Level: beginner | ||
| 81 | |||
| 82 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()` | ||
| 83 | @*/ | ||
| 84 | 6990 | PetscErrorCode EPSSetFromOptions(EPS eps) | |
| 85 | { | ||
| 86 | 6990 | char type[256]; | |
| 87 | 6990 | PetscBool set,flg,flg1,flg2,flg3,bval; | |
| 88 | 6990 | PetscReal r,array[2]={0,0}; | |
| 89 | 6990 | PetscScalar s; | |
| 90 | 6990 | PetscInt i,j,k; | |
| 91 | 6990 | EPSBalance bal; | |
| 92 | |||
| 93 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
6990 | PetscFunctionBegin; |
| 94 |
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.
|
6990 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(EPSRegisterAll()); |
| 96 |
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.
|
20970 | PetscObjectOptionsBegin((PetscObject)eps); |
| 97 |
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.
|
7623 | PetscCall(PetscOptionsFList("-eps_type","Eigensolver method","EPSSetType",EPSList,(char*)(((PetscObject)eps)->type_name?((PetscObject)eps)->type_name:EPSKRYLOVSCHUR),type,sizeof(type),&flg)); |
| 98 |
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.
|
6990 | if (flg) PetscCall(EPSSetType(eps,type)); |
| 99 |
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.
|
4389 | else if (!((PetscObject)eps)->type_name) PetscCall(EPSSetType(eps,EPSKRYLOVSCHUR)); |
| 100 | |||
| 101 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupBegin("-eps_hermitian","Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 102 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_HEP)); |
| 103 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_gen_hermitian","Generalized Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 104 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHEP)); |
| 105 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_non_hermitian","Non-Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 106 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_NHEP)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 108 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GNHEP)); |
| 109 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_pos_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem with positive semi-definite B","EPSSetProblemType",&flg)); |
| 110 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_PGNHEP)); |
| 111 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_gen_indefinite","Generalized Hermitian-indefinite eigenvalue problem","EPSSetProblemType",&flg)); |
| 112 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHIEP)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_bse","Structured Bethe-Salpeter eigenvalue problem","EPSSetProblemType",&flg)); |
| 114 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_BSE)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_hamiltonian","Structured Hamiltonian eigenvalue problem","EPSSetProblemType",&flg)); |
| 116 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_HAMILT)); |
| 117 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupEnd("-eps_lrep","Structured Linear Response eigenvalue problem","EPSSetProblemType",&flg)); |
| 118 |
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.
|
6990 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_LREP)); |
| 119 | |||
| 120 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupBegin("-eps_ritz","Rayleigh-Ritz extraction","EPSSetExtraction",&flg)); |
| 121 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_RITZ)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic","Harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 123 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC)); |
| 124 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_relative","Relative harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 125 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RELATIVE)); |
| 126 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_right","Right harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 127 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RIGHT)); |
| 128 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_largest","Largest harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 129 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_LARGEST)); |
| 130 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_refined","Refined Ritz extraction","EPSSetExtraction",&flg)); |
| 131 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED)); |
| 132 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupEnd("-eps_refined_harmonic","Refined harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 133 |
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.
|
6990 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED_HARMONIC)); |
| 134 | |||
| 135 | 6990 | bal = eps->balance; | |
| 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.
|
6990 | PetscCall(PetscOptionsEnum("-eps_balance","Balancing method","EPSSetBalance",EPSBalanceTypes,(PetscEnum)bal,(PetscEnum*)&bal,&flg1)); |
| 137 | 6990 | j = eps->balance_its; | |
| 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.
|
6990 | PetscCall(PetscOptionsInt("-eps_balance_its","Number of iterations in balancing","EPSSetBalance",eps->balance_its,&j,&flg2)); |
| 139 | 6990 | r = eps->balance_cutoff; | |
| 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.
|
6990 | PetscCall(PetscOptionsReal("-eps_balance_cutoff","Cutoff value in balancing","EPSSetBalance",eps->balance_cutoff,&r,&flg3)); |
| 141 |
8/12✓ 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 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.
|
6990 | if (flg1 || flg2 || flg3) PetscCall(EPSSetBalance(eps,bal,j,r)); |
| 142 | |||
| 143 | 6990 | i = eps->max_it; | |
| 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.
|
6990 | PetscCall(PetscOptionsInt("-eps_max_it","Maximum number of iterations","EPSSetTolerances",eps->max_it,&i,&flg1)); |
| 145 | 6990 | r = eps->tol; | |
| 146 |
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.
|
11860 | PetscCall(PetscOptionsReal("-eps_tol","Tolerance","EPSSetTolerances",SlepcDefaultTol(eps->tol),&r,&flg2)); |
| 147 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
|
6990 | if (flg1 || flg2) PetscCall(EPSSetTolerances(eps,r,i)); |
| 148 | |||
| 149 | 6990 | r = eps->thres; | |
| 150 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsReal("-eps_threshold_absolute","Absolute threshold","EPSSetThreshold",r,&r,&flg)); |
| 151 |
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.
|
6990 | if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_FALSE)); |
| 152 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsReal("-eps_threshold_relative","Relative threshold","EPSSetThreshold",r,&r,&flg)); |
| 153 |
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.
|
6990 | if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_TRUE)); |
| 154 | |||
| 155 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupBegin("-eps_conv_rel","Relative error convergence test","EPSSetConvergenceTest",&flg)); |
| 156 |
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.
|
6990 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_REL)); |
| 157 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_conv_norm","Convergence test relative to the eigenvalue and the matrix norms","EPSSetConvergenceTest",&flg)); |
| 158 |
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.
|
6990 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_NORM)); |
| 159 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_conv_abs","Absolute error convergence test","EPSSetConvergenceTest",&flg)); |
| 160 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6990 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_ABS)); |
| 161 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupEnd("-eps_conv_user","User-defined convergence test","EPSSetConvergenceTest",&flg)); |
| 162 |
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.
|
6990 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_USER)); |
| 163 | |||
| 164 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupBegin("-eps_stop_basic","Stop iteration if all eigenvalues converged or max_it reached","EPSSetStoppingTest",&flg)); |
| 165 |
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.
|
6990 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC)); |
| 166 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_stop_threshold","Stop iteration if a converged eigenvalue is below/above the threshold","EPSSetStoppingTest",&flg)); |
| 167 |
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.
|
6990 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 168 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroupEnd("-eps_stop_user","User-defined stopping test","EPSSetStoppingTest",&flg)); |
| 169 |
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.
|
6990 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_USER)); |
| 170 | |||
| 171 | 6990 | i = eps->nev; | |
| 172 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsInt("-eps_nev","Number of eigenvalues to compute","EPSSetDimensions",eps->nev,&i,&flg1)); |
| 173 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6990 | if (!flg1) i = PETSC_CURRENT; |
| 174 | 6990 | j = eps->ncv; | |
| 175 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsInt("-eps_ncv","Number of basis vectors","EPSSetDimensions",eps->ncv,&j,&flg2)); |
| 176 | 6990 | k = eps->mpd; | |
| 177 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsInt("-eps_mpd","Maximum dimension of projected problem","EPSSetDimensions",eps->mpd,&k,&flg3)); |
| 178 |
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.
|
6990 | if (flg1 || flg2 || flg3) PetscCall(EPSSetDimensions(eps,i,j,k)); |
| 179 | |||
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroupBegin("-eps_largest_magnitude","Compute largest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg)); |
| 181 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_MAGNITUDE)); |
| 182 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_magnitude","Compute smallest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg)); |
| 183 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_MAGNITUDE)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_largest_real","Compute eigenvalues with largest real parts","EPSSetWhichEigenpairs",&flg)); |
| 185 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_REAL)); |
| 186 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_real","Compute eigenvalues with smallest real parts","EPSSetWhichEigenpairs",&flg)); |
| 187 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_REAL)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_largest_imaginary","Compute eigenvalues with largest imaginary parts","EPSSetWhichEigenpairs",&flg)); |
| 189 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_IMAGINARY)); |
| 190 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_imaginary","Compute eigenvalues with smallest imaginary parts","EPSSetWhichEigenpairs",&flg)); |
| 191 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_IMAGINARY)); |
| 192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_target_magnitude","Compute eigenvalues closest to target","EPSSetWhichEigenpairs",&flg)); |
| 193 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE)); |
| 194 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_target_real","Compute eigenvalues with real parts closest to target","EPSSetWhichEigenpairs",&flg)); |
| 195 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_REAL)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_target_imaginary","Compute eigenvalues with imaginary parts closest to target","EPSSetWhichEigenpairs",&flg)); |
| 197 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_IMAGINARY)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroup("-eps_all","Compute all eigenvalues in an interval or a region","EPSSetWhichEigenpairs",&flg)); |
| 199 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL)); |
| 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.
|
6990 | PetscCall(PetscOptionsBoolGroupEnd("-eps_which_user","Select the user-defined selection criterion","EPSSetWhichEigenpairs",&flg)); |
| 201 |
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.
|
6990 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_WHICH_USER)); |
| 202 | |||
| 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.
|
6990 | PetscCall(PetscOptionsScalar("-eps_target","Value of the target","EPSSetTarget",eps->target,&s,&flg)); |
| 204 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6990 | if (flg) { |
| 205 |
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.
|
440 | if (eps->which!=EPS_TARGET_REAL && eps->which!=EPS_TARGET_IMAGINARY) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE)); |
| 206 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
440 | PetscCall(EPSSetTarget(eps,s)); |
| 207 | } | ||
| 208 | |||
| 209 | 6990 | k = 2; | |
| 210 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsRealArray("-eps_interval","Computational interval (two real values separated with a comma without spaces)","EPSSetInterval",array,&k,&flg)); |
| 211 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6990 | if (flg) { |
| 212 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
195 | PetscCheck(k>1,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_SIZ,"Must pass two values in -eps_interval (comma-separated without spaces)"); |
| 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.
|
195 | PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL)); |
| 214 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
195 | PetscCall(EPSSetInterval(eps,array[0],array[1])); |
| 215 | } | ||
| 216 | |||
| 217 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBool("-eps_true_residual","Compute true residuals explicitly","EPSSetTrueResidual",eps->trueres,&eps->trueres,NULL)); |
| 218 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBool("-eps_purify","Postprocess eigenvectors for purification","EPSSetPurify",eps->purify,&bval,&flg)); |
| 219 |
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.
|
6990 | if (flg) PetscCall(EPSSetPurify(eps,bval)); |
| 220 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBool("-eps_two_sided","Use two-sided variant (to compute left eigenvectors)","EPSSetTwoSided",eps->twosided,&bval,&flg)); |
| 221 |
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.
|
6990 | if (flg) PetscCall(EPSSetTwoSided(eps,bval)); |
| 222 | |||
| 223 | /* -----------------------------------------------------------------------*/ | ||
| 224 | /* | ||
| 225 | Cancels all monitors hardwired into code before call to EPSSetFromOptions() | ||
| 226 | */ | ||
| 227 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsBool("-eps_monitor_cancel","Remove any hardwired monitor routines","EPSMonitorCancel",PETSC_FALSE,&flg,&set)); |
| 228 |
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.
|
6990 | if (set && flg) PetscCall(EPSMonitorCancel(eps)); |
| 229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor","first_approximation",NULL,PETSC_FALSE)); |
| 230 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_all","all_approximations",NULL,PETSC_TRUE)); |
| 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.
|
6990 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_conv","convergence_history",NULL,PETSC_FALSE)); |
| 232 | |||
| 233 | /* -----------------------------------------------------------------------*/ | ||
| 234 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsName("-eps_view","Print detailed information on solver used","EPSView",&set)); |
| 235 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsName("-eps_view_vectors","View computed eigenvectors","EPSVectorsView",&set)); |
| 236 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsName("-eps_view_values","View computed eigenvalues","EPSValuesView",&set)); |
| 237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsName("-eps_converged_reason","Print reason for convergence, and number of iterations","EPSConvergedReasonView",&set)); |
| 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.
|
6990 | PetscCall(PetscOptionsName("-eps_error_absolute","Print absolute errors of each eigenpair","EPSErrorView",&set)); |
| 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.
|
6990 | PetscCall(PetscOptionsName("-eps_error_relative","Print relative errors of each eigenpair","EPSErrorView",&set)); |
| 240 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscOptionsName("-eps_error_backward","Print backward errors of each eigenpair","EPSErrorView",&set)); |
| 241 | |||
| 242 |
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.
|
6990 | PetscTryTypeMethod(eps,setfromoptions,PetscOptionsObject); |
| 243 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)eps,PetscOptionsObject)); |
| 244 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscOptionsEnd(); |
| 245 | |||
| 246 |
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.
|
6990 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 247 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(BVSetFromOptions(eps->V)); |
| 248 |
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.
|
6990 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 249 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(RGSetFromOptions(eps->rg)); |
| 250 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6990 | if (eps->useds) { |
| 251 |
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.
|
6490 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 252 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6490 | PetscCall(EPSSetDSType(eps)); |
| 253 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6490 | PetscCall(DSSetFromOptions(eps->ds)); |
| 254 | } | ||
| 255 |
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.
|
6990 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 256 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(EPSSetDefaultST(eps)); |
| 257 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6990 | PetscCall(STSetFromOptions(eps->st)); |
| 258 | 6990 | eps->setfromoptionscalled++; | |
| 259 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
6990 | PetscFunctionReturn(PETSC_SUCCESS); |
| 260 | } | ||
| 261 | |||
| 262 | /*@ | ||
| 263 | EPSGetTolerances - Gets the tolerance and maximum iteration count used | ||
| 264 | by the `EPS` convergence tests. | ||
| 265 | |||
| 266 | Not Collective | ||
| 267 | |||
| 268 | Input Parameter: | ||
| 269 | . eps - the linear eigensolver context | ||
| 270 | |||
| 271 | Output Parameters: | ||
| 272 | + tol - the convergence tolerance | ||
| 273 | - maxits - maximum number of iterations | ||
| 274 | |||
| 275 | Notes: | ||
| 276 | The user can specify `NULL` for any parameter that is not needed. | ||
| 277 | |||
| 278 | Level: intermediate | ||
| 279 | |||
| 280 | .seealso: [](ch:eps), `EPSSetTolerances()` | ||
| 281 | @*/ | ||
| 282 | 2830 | PetscErrorCode EPSGetTolerances(EPS eps,PetscReal *tol,PetscInt *maxits) | |
| 283 | { | ||
| 284 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2830 | PetscFunctionBegin; |
| 285 |
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.
|
2830 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 286 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2830 | if (tol) *tol = eps->tol; |
| 287 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2830 | if (maxits) *maxits = eps->max_it; |
| 288 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
2830 | PetscFunctionReturn(PETSC_SUCCESS); |
| 289 | } | ||
| 290 | |||
| 291 | /*@ | ||
| 292 | EPSSetTolerances - Sets the tolerance and maximum iteration count used | ||
| 293 | by the `EPS` convergence tests. | ||
| 294 | |||
| 295 | Logically Collective | ||
| 296 | |||
| 297 | Input Parameters: | ||
| 298 | + eps - the linear eigensolver context | ||
| 299 | . tol - the convergence tolerance | ||
| 300 | - maxits - maximum number of iterations to use | ||
| 301 | |||
| 302 | Options Database Keys: | ||
| 303 | + -eps_tol tol - sets the convergence tolerance | ||
| 304 | - -eps_max_it maxits - sets the maximum number of iterations allowed | ||
| 305 | |||
| 306 | Note: | ||
| 307 | Use `PETSC_CURRENT` to retain the current value of any of the parameters. | ||
| 308 | Use `PETSC_DETERMINE` for either argument to assign a default value computed | ||
| 309 | internally (may be different in each solver). | ||
| 310 | For `maxits` use `PETSC_UNLIMITED` to indicate there is no upper bound on this value. | ||
| 311 | |||
| 312 | Level: intermediate | ||
| 313 | |||
| 314 | .seealso: [](ch:eps), `EPSGetTolerances()` | ||
| 315 | @*/ | ||
| 316 | 5776 | PetscErrorCode EPSSetTolerances(EPS eps,PetscReal tol,PetscInt maxits) | |
| 317 | { | ||
| 318 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
5776 | PetscFunctionBegin; |
| 319 |
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.
|
5776 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 320 |
33/74✗ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ 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 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 not taken.
✓ Branch 37 taken 2 times.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 2 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 2 times.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✓ Branch 58 taken 2 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 2 times.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✓ Branch 71 taken 2 times.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
|
5776 | PetscValidLogicalCollectiveReal(eps,tol,2); |
| 321 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
5776 | PetscValidLogicalCollectiveInt(eps,maxits,3); |
| 322 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5776 | if (tol == (PetscReal)PETSC_DETERMINE) { |
| 323 | 143 | eps->tol = PETSC_DETERMINE; | |
| 324 | 143 | eps->state = EPS_STATE_INITIAL; | |
| 325 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
5633 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
| 326 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5633 | PetscCheck(tol>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of tol. Must be > 0"); |
| 327 | 5633 | eps->tol = tol; | |
| 328 | } | ||
| 329 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5776 | if (maxits == PETSC_DETERMINE) { |
| 330 | 1586 | eps->max_it = PETSC_DETERMINE; | |
| 331 | 1586 | eps->state = EPS_STATE_INITIAL; | |
| 332 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
4190 | } else if (maxits == PETSC_UNLIMITED) { |
| 333 | ✗ | eps->max_it = PETSC_INT_MAX; | |
| 334 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4190 | } else if (maxits != PETSC_CURRENT) { |
| 335 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2144 | PetscCheck(maxits>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of maxits. Must be > 0"); |
| 336 | 2144 | eps->max_it = maxits; | |
| 337 | } | ||
| 338 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
1143 | PetscFunctionReturn(PETSC_SUCCESS); |
| 339 | } | ||
| 340 | |||
| 341 | /*@ | ||
| 342 | EPSGetDimensions - Gets the number of eigenvalues to compute | ||
| 343 | and the dimension of the subspace. | ||
| 344 | |||
| 345 | Not Collective | ||
| 346 | |||
| 347 | Input Parameter: | ||
| 348 | . eps - the linear eigensolver context | ||
| 349 | |||
| 350 | Output Parameters: | ||
| 351 | + nev - number of eigenvalues to compute | ||
| 352 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
| 353 | - mpd - the maximum dimension allowed for the projected problem | ||
| 354 | |||
| 355 | Level: intermediate | ||
| 356 | |||
| 357 | .seealso: [](ch:eps), `EPSSetDimensions()` | ||
| 358 | @*/ | ||
| 359 | 4574 | PetscErrorCode EPSGetDimensions(EPS eps,PetscInt *nev,PetscInt *ncv,PetscInt *mpd) | |
| 360 | { | ||
| 361 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
4574 | PetscFunctionBegin; |
| 362 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4574 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 363 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
6611 | if (nev) *nev = eps->nev? eps->nev: 1; |
| 364 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4574 | if (ncv) *ncv = eps->ncv; |
| 365 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4574 | if (mpd) *mpd = eps->mpd; |
| 366 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
4574 | PetscFunctionReturn(PETSC_SUCCESS); |
| 367 | } | ||
| 368 | |||
| 369 | /*@ | ||
| 370 | EPSSetDimensions - Sets the number of eigenvalues to compute | ||
| 371 | and the dimension of the subspace. | ||
| 372 | |||
| 373 | Logically Collective | ||
| 374 | |||
| 375 | Input Parameters: | ||
| 376 | + eps - the linear eigensolver context | ||
| 377 | . nev - number of eigenvalues to compute | ||
| 378 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
| 379 | - mpd - the maximum dimension allowed for the projected problem | ||
| 380 | |||
| 381 | Options Database Keys: | ||
| 382 | + -eps_nev nev - sets the number of eigenvalues | ||
| 383 | . -eps_ncv ncv - sets the dimension of the subspace | ||
| 384 | - -eps_mpd mpd - sets the maximum projected dimension | ||
| 385 | |||
| 386 | Notes: | ||
| 387 | Use `PETSC_DETERMINE` for `ncv` and `mpd` to assign a reasonably good value, which is | ||
| 388 | dependent on the solution method. For any of the arguments, use `PETSC_CURRENT` | ||
| 389 | to preserve the current value. | ||
| 390 | |||
| 391 | The parameters `ncv` and `mpd` are intimately related, so that the user is advised | ||
| 392 | to set one of them at most. Normal usage is\: | ||
| 393 | |||
| 394 | 1. In cases where `nev` is small, the user sets `ncv` (a reasonable default is `2*nev`). | ||
| 395 | 2. In cases where `nev` is large, the user sets `mpd`. | ||
| 396 | |||
| 397 | The value of `ncv` should always be between `nev` and `(nev+mpd)`, typically | ||
| 398 | `ncv=nev+mpd`. If `nev` is not too large, `mpd=nev` is a reasonable choice, otherwise | ||
| 399 | a smaller value should be used. | ||
| 400 | |||
| 401 | When computing all eigenvalues in an interval, see `EPSSetInterval()`, these | ||
| 402 | parameters lose relevance, and tuning must be done with | ||
| 403 | `EPSKrylovSchurSetDimensions()`. | ||
| 404 | |||
| 405 | Level: intermediate | ||
| 406 | |||
| 407 | .seealso: [](ch:eps), `EPSGetDimensions()`, `EPSSetInterval()`, `EPSKrylovSchurSetDimensions()` | ||
| 408 | @*/ | ||
| 409 | 6598 | PetscErrorCode EPSSetDimensions(EPS eps,PetscInt nev,PetscInt ncv,PetscInt mpd) | |
| 410 | { | ||
| 411 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
6598 | PetscFunctionBegin; |
| 412 |
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.
|
6598 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 413 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
6598 | PetscValidLogicalCollectiveInt(eps,nev,2); |
| 414 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
6598 | PetscValidLogicalCollectiveInt(eps,ncv,3); |
| 415 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
6598 | PetscValidLogicalCollectiveInt(eps,mpd,4); |
| 416 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6598 | if (nev != PETSC_CURRENT) { |
| 417 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6266 | PetscCheck(nev>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of nev. Must be > 0"); |
| 418 | 6266 | eps->nev = nev; | |
| 419 | } | ||
| 420 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6598 | if (ncv == PETSC_DETERMINE) { |
| 421 | 3867 | eps->ncv = PETSC_DETERMINE; | |
| 422 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2731 | } else if (ncv != PETSC_CURRENT) { |
| 423 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2692 | PetscCheck(ncv>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ncv. Must be > 0"); |
| 424 | 2692 | eps->ncv = ncv; | |
| 425 | } | ||
| 426 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6598 | if (mpd == PETSC_DETERMINE) { |
| 427 | 6010 | eps->mpd = PETSC_DETERMINE; | |
| 428 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
588 | } else if (mpd != PETSC_CURRENT) { |
| 429 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
543 | PetscCheck(mpd>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of mpd. Must be > 0"); |
| 430 | 543 | eps->mpd = mpd; | |
| 431 | } | ||
| 432 | 6598 | eps->state = EPS_STATE_INITIAL; | |
| 433 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
6598 | PetscFunctionReturn(PETSC_SUCCESS); |
| 434 | } | ||
| 435 | |||
| 436 | /*@ | ||
| 437 | EPSSetWhichEigenpairs - Specifies which portion of the spectrum is | ||
| 438 | to be sought. | ||
| 439 | |||
| 440 | Logically Collective | ||
| 441 | |||
| 442 | Input Parameters: | ||
| 443 | + eps - the linear eigensolver context | ||
| 444 | - which - the portion of the spectrum to be sought, see `EPSWhich` for possible values | ||
| 445 | |||
| 446 | Options Database Keys: | ||
| 447 | + -eps_largest_magnitude - sets largest eigenvalues in magnitude | ||
| 448 | . -eps_smallest_magnitude - sets smallest eigenvalues in magnitude | ||
| 449 | . -eps_largest_real - sets largest real parts | ||
| 450 | . -eps_smallest_real - sets smallest real parts | ||
| 451 | . -eps_largest_imaginary - sets largest imaginary parts | ||
| 452 | . -eps_smallest_imaginary - sets smallest imaginary parts | ||
| 453 | . -eps_target_magnitude - sets eigenvalues closest to target | ||
| 454 | . -eps_target_real - sets real parts closest to target | ||
| 455 | . -eps_target_imaginary - sets imaginary parts closest to target | ||
| 456 | . -eps_all - sets all eigenvalues in an interval or region | ||
| 457 | - -eps_which_user - select the user-defined selection criterion | ||
| 458 | |||
| 459 | Notes: | ||
| 460 | Not all eigensolvers implemented in `EPS` account for all the possible values | ||
| 461 | of `which`. Also, some values make sense only for certain types of | ||
| 462 | problems. If SLEPc is compiled for real numbers `EPS_LARGEST_IMAGINARY` | ||
| 463 | and `EPS_SMALLEST_IMAGINARY` use the absolute value of the imaginary part | ||
| 464 | for eigenvalue selection. | ||
| 465 | |||
| 466 | The target is a scalar value provided with `EPSSetTarget()`. | ||
| 467 | |||
| 468 | The criterion `EPS_TARGET_IMAGINARY` is available only in case PETSc and | ||
| 469 | SLEPc have been built with complex scalars. | ||
| 470 | |||
| 471 | `EPS_ALL` is intended for use in combination with an interval (see | ||
| 472 | `EPSSetInterval()`), when all eigenvalues within the interval are requested, | ||
| 473 | or in the context of the `EPSCISS` solver for computing all eigenvalues in a region. | ||
| 474 | |||
| 475 | Level: intermediate | ||
| 476 | |||
| 477 | .seealso: [](ch:eps), `EPSGetWhichEigenpairs()`, `EPSSetTarget()`, `EPSSetInterval()`, `EPSSetDimensions()`, `EPSSetEigenvalueComparison()`, `EPSWhich` | ||
| 478 | @*/ | ||
| 479 | 6766 | PetscErrorCode EPSSetWhichEigenpairs(EPS eps,EPSWhich which) | |
| 480 | { | ||
| 481 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
6766 | PetscFunctionBegin; |
| 482 |
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.
|
6766 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 483 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
6766 | PetscValidLogicalCollectiveEnum(eps,which,2); |
| 484 |
1/3✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
6766 | switch (which) { |
| 485 | 6766 | case EPS_LARGEST_MAGNITUDE: | |
| 486 | case EPS_SMALLEST_MAGNITUDE: | ||
| 487 | case EPS_LARGEST_REAL: | ||
| 488 | case EPS_SMALLEST_REAL: | ||
| 489 | case EPS_LARGEST_IMAGINARY: | ||
| 490 | case EPS_SMALLEST_IMAGINARY: | ||
| 491 | case EPS_TARGET_MAGNITUDE: | ||
| 492 | case EPS_TARGET_REAL: | ||
| 493 | #if PetscDefined(USE_COMPLEX) | ||
| 494 | case EPS_TARGET_IMAGINARY: | ||
| 495 | #endif | ||
| 496 | case EPS_ALL: | ||
| 497 | case EPS_WHICH_USER: | ||
| 498 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6766 | if (eps->which != which) { |
| 499 | 5784 | eps->state = EPS_STATE_INITIAL; | |
| 500 | 5784 | eps->which = which; | |
| 501 | } | ||
| 502 | 1348 | break; | |
| 503 | #if !PetscDefined(USE_COMPLEX) | ||
| 504 | ✗ | case EPS_TARGET_IMAGINARY: | |
| 505 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"EPS_TARGET_IMAGINARY can be used only with complex scalars"); | |
| 506 | #endif | ||
| 507 | ✗ | default: | |
| 508 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'which' value"); | |
| 509 | } | ||
| 510 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
1348 | PetscFunctionReturn(PETSC_SUCCESS); |
| 511 | } | ||
| 512 | |||
| 513 | /*@ | ||
| 514 | EPSGetWhichEigenpairs - Returns which portion of the spectrum is to be | ||
| 515 | sought. | ||
| 516 | |||
| 517 | Not Collective | ||
| 518 | |||
| 519 | Input Parameter: | ||
| 520 | . eps - the linear eigensolver context | ||
| 521 | |||
| 522 | Output Parameter: | ||
| 523 | . which - the portion of the spectrum to be sought, see `EPSWhich` for possible values | ||
| 524 | |||
| 525 | Level: intermediate | ||
| 526 | |||
| 527 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich` | ||
| 528 | @*/ | ||
| 529 | 16 | PetscErrorCode EPSGetWhichEigenpairs(EPS eps,EPSWhich *which) | |
| 530 | { | ||
| 531 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
16 | PetscFunctionBegin; |
| 532 |
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.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 533 |
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.
|
16 | PetscAssertPointer(which,2); |
| 534 | 16 | *which = eps->which; | |
| 535 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 536 | } | ||
| 537 | |||
| 538 | /*@ | ||
| 539 | EPSSetThreshold - Sets the threshold used in the threshold stopping test. | ||
| 540 | |||
| 541 | Logically Collective | ||
| 542 | |||
| 543 | Input Parameters: | ||
| 544 | + eps - the linear eigensolver context | ||
| 545 | . thres - the threshold value | ||
| 546 | - rel - whether the threshold is relative or not | ||
| 547 | |||
| 548 | Options Database Keys: | ||
| 549 | + -eps_threshold_absolute thres - sets an absolute threshold | ||
| 550 | - -eps_threshold_relative thres - sets a relative threshold | ||
| 551 | |||
| 552 | Notes: | ||
| 553 | This function internally calls `EPSSetStoppingTest()` to set a special stopping | ||
| 554 | test based on the threshold, where eigenvalues are computed in sequence until | ||
| 555 | the next eigenvalue approximation is below the threshold `thres` (in magnitude). | ||
| 556 | This is the interpretation in case of searching for largest eigenvalues in magnitude, | ||
| 557 | see `EPSSetWhichEigenpairs()`. | ||
| 558 | |||
| 559 | If the solver is configured to compute smallest magnitude eigenvalues, then the | ||
| 560 | threshold must be interpreted in the opposite direction, i.e., the computation | ||
| 561 | will stop when the next eigenvalue approximation is above the threshold (in magnitude). | ||
| 562 | |||
| 563 | The threshold can also be used when computing largest/smallest real eigenvalues | ||
| 564 | (i.e, rightmost or leftmost), in which case the threshold is allowed to be | ||
| 565 | negative. The solver will stop when the next eigenvalue approximation is above | ||
| 566 | or below the threshold (considering the real part of the eigenvalue). This mode | ||
| 567 | is allowed only in problem types whose eigenvalues are always real (e.g., `EPS_HEP`). | ||
| 568 | |||
| 569 | In the case of largest magnitude eigenvalues, the threshold can be made relative | ||
| 570 | with respect to the dominant eigenvalue. Otherwise, the argument `rel` should be | ||
| 571 | `PETSC_FALSE`. | ||
| 572 | |||
| 573 | An additional use case is with target magnitude selection of eigenvalues (e.g., | ||
| 574 | with shift-and-invert), but this must be used with caution to avoid unexpected | ||
| 575 | behavior. With an absolute threshold, the solver will assume that leftmost | ||
| 576 | eigenvalues are being computed (e.g., with `target`=0 for a problem with real | ||
| 577 | positive eigenvalues). In case of a relative threshold, a value of `thres`<1 | ||
| 578 | implies that the wanted eigenvalues are the largest ones, and otherwise the | ||
| 579 | solver assumes that smallest eigenvalues are being computed. | ||
| 580 | |||
| 581 | When the next eigenvalue approximation does not satisfy the threshold criterion, | ||
| 582 | the solver will carry out an additional iteration/restart. This provides more | ||
| 583 | guarantees that eigenvalue multiplicity is resolved correctly. As a result, | ||
| 584 | sometimes the solver will return more converged eigenvalues than strictly | ||
| 585 | satisfying the criterion. | ||
| 586 | |||
| 587 | Since the number of computed eigenvalues is not known a priori, the solver | ||
| 588 | will need to reallocate the basis of vectors internally, to have enough room | ||
| 589 | to accommodate all the eigenvectors. Hence, this option must be used with | ||
| 590 | caution to avoid out-of-memory problems. The recommendation is to set the value | ||
| 591 | of `ncv` to be larger than the estimated number of eigenvalues, to minimize the | ||
| 592 | number of reallocations. | ||
| 593 | |||
| 594 | If a number of wanted eigenvalues has been set with `EPSSetDimensions()` | ||
| 595 | it is also taken into account and the solver will stop when one of the two | ||
| 596 | conditions (threshold or number of converged values) is met. | ||
| 597 | |||
| 598 | Use `EPSSetStoppingTest()` to return to the usual computation of a fixed number | ||
| 599 | of eigenvalues. | ||
| 600 | |||
| 601 | Level: advanced | ||
| 602 | |||
| 603 | .seealso: [](ch:eps), `EPSGetThreshold()`, `EPSSetStoppingTest()`, `EPSSetDimensions()`, `EPSSetWhichEigenpairs()`, `EPSSetProblemType()` | ||
| 604 | @*/ | ||
| 605 | 171 | PetscErrorCode EPSSetThreshold(EPS eps,PetscReal thres,PetscBool rel) | |
| 606 | { | ||
| 607 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
171 | PetscFunctionBegin; |
| 608 |
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.
|
171 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 609 |
33/74✗ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ 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 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 not taken.
✓ Branch 37 taken 2 times.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 2 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 2 times.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✓ Branch 58 taken 2 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 2 times.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✓ Branch 71 taken 2 times.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
|
171 | PetscValidLogicalCollectiveReal(eps,thres,2); |
| 610 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
171 | PetscValidLogicalCollectiveBool(eps,rel,3); |
| 611 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
171 | if (eps->thres != thres || eps->threlative != rel) { |
| 612 | 171 | eps->thres = thres; | |
| 613 | 171 | eps->threlative = rel; | |
| 614 | 171 | eps->state = EPS_STATE_INITIAL; | |
| 615 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
171 | PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 616 | } | ||
| 617 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
39 | PetscFunctionReturn(PETSC_SUCCESS); |
| 618 | } | ||
| 619 | |||
| 620 | /*@ | ||
| 621 | EPSGetThreshold - Gets the threshold used by the threshold stopping test. | ||
| 622 | |||
| 623 | Not Collective | ||
| 624 | |||
| 625 | Input Parameter: | ||
| 626 | . eps - the linear eigensolver context | ||
| 627 | |||
| 628 | Output Parameters: | ||
| 629 | + thres - the threshold | ||
| 630 | - rel - whether the threshold is relative or not | ||
| 631 | |||
| 632 | Level: advanced | ||
| 633 | |||
| 634 | .seealso: [](ch:eps), `EPSSetThreshold()` | ||
| 635 | @*/ | ||
| 636 | 111 | PetscErrorCode EPSGetThreshold(EPS eps,PetscReal *thres,PetscBool *rel) | |
| 637 | { | ||
| 638 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
111 | PetscFunctionBegin; |
| 639 |
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.
|
111 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 640 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
111 | if (thres) *thres = eps->thres; |
| 641 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
111 | if (rel) *rel = eps->threlative; |
| 642 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
111 | PetscFunctionReturn(PETSC_SUCCESS); |
| 643 | } | ||
| 644 | |||
| 645 | /*@ | ||
| 646 | EPSSetEigenvalueComparison - Specifies the eigenvalue comparison function | ||
| 647 | when `EPSSetWhichEigenpairs()` is set to `EPS_WHICH_USER`. | ||
| 648 | |||
| 649 | Logically Collective | ||
| 650 | |||
| 651 | Input Parameters: | ||
| 652 | + eps - the linear eigensolver context | ||
| 653 | . func - the comparison function, see `SlepcEigenvalueComparisonFn` for the calling sequence | ||
| 654 | - ctx - a context pointer (the last parameter to the comparison function) | ||
| 655 | |||
| 656 | Level: advanced | ||
| 657 | |||
| 658 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich` | ||
| 659 | @*/ | ||
| 660 | 434 | PetscErrorCode EPSSetEigenvalueComparison(EPS eps,SlepcEigenvalueComparisonFn *func,PetscCtx ctx) | |
| 661 | { | ||
| 662 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
434 | PetscFunctionBegin; |
| 663 |
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.
|
434 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 664 | 434 | eps->sc->comparison = func; | |
| 665 | 434 | eps->sc->comparisonctx = ctx; | |
| 666 | 434 | eps->which = EPS_WHICH_USER; | |
| 667 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
434 | PetscFunctionReturn(PETSC_SUCCESS); |
| 668 | } | ||
| 669 | |||
| 670 | /*@ | ||
| 671 | EPSSetArbitrarySelection - Specifies a function intended to look for | ||
| 672 | eigenvalues according to an arbitrary selection criterion. This criterion | ||
| 673 | can be based on a computation involving the current eigenvector approximation. | ||
| 674 | |||
| 675 | Logically Collective | ||
| 676 | |||
| 677 | Input Parameters: | ||
| 678 | + eps - the linear eigensolver context | ||
| 679 | . func - the arbitrary selection function, see `SlepcArbitrarySelectionFn` for a calling sequence | ||
| 680 | - ctx - a context pointer (the last parameter to the arbitrary selection function) | ||
| 681 | |||
| 682 | Notes: | ||
| 683 | This provides a mechanism to select eigenpairs by evaluating a user-defined | ||
| 684 | function. When a function has been provided, the default selection based on | ||
| 685 | sorting the eigenvalues is replaced by the sorting of the results of this | ||
| 686 | function (with the same sorting criterion given in `EPSSetWhichEigenpairs()`). | ||
| 687 | |||
| 688 | For instance, suppose you want to compute those eigenvectors that maximize | ||
| 689 | a certain computable expression. Then implement the computation using | ||
| 690 | the arguments `xr` and `xi`, and return the result in `rr`. Then set the standard | ||
| 691 | sorting by magnitude so that the eigenpair with largest value of `rr` is | ||
| 692 | selected. | ||
| 693 | |||
| 694 | This evaluation function is collective, that is, all processes call it and | ||
| 695 | it can use collective operations; furthermore, the computed result must | ||
| 696 | be the same in all processes. | ||
| 697 | |||
| 698 | The result of `func` is expressed as a complex number so that it is possible to | ||
| 699 | use the standard eigenvalue sorting functions, but normally only `rr` is used. | ||
| 700 | Set `ri` to zero unless it is meaningful in your application. | ||
| 701 | |||
| 702 | Level: advanced | ||
| 703 | |||
| 704 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSSetArbitrarySelectionContextDestroy()` | ||
| 705 | @*/ | ||
| 706 | 82 | PetscErrorCode EPSSetArbitrarySelection(EPS eps,SlepcArbitrarySelectionFn *func,PetscCtx ctx) | |
| 707 | { | ||
| 708 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
82 | PetscFunctionBegin; |
| 709 |
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.
|
82 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 710 |
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.
|
82 | if (eps->arbitrarydestroy) PetscCall((*eps->arbitrarydestroy)(&eps->arbitraryctx)); |
| 711 | 82 | eps->arbitrary = func; | |
| 712 | 82 | eps->arbitraryctx = ctx; | |
| 713 | 82 | eps->state = EPS_STATE_INITIAL; | |
| 714 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
82 | PetscFunctionReturn(PETSC_SUCCESS); |
| 715 | } | ||
| 716 | |||
| 717 | /*@ | ||
| 718 | EPSSetArbitrarySelectionContextDestroy - Set a context destroy function for the | ||
| 719 | context used in the arbitrary selection. | ||
| 720 | |||
| 721 | Logically Collective | ||
| 722 | |||
| 723 | Input Parameters: | ||
| 724 | + eps - the linear eigensolver context | ||
| 725 | - destroy - context destroy function, see `PetscCtxDestroyFn` for its calling sequence | ||
| 726 | |||
| 727 | Level: advanced | ||
| 728 | |||
| 729 | .seealso: [](ch:eps), `EPSSetArbitrarySelection()` | ||
| 730 | @*/ | ||
| 731 | 80 | PetscErrorCode EPSSetArbitrarySelectionContextDestroy(EPS eps,PetscCtxDestroyFn *destroy) | |
| 732 | { | ||
| 733 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
80 | PetscFunctionBegin; |
| 734 |
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.
|
80 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 735 | 80 | eps->arbitrarydestroy = destroy; | |
| 736 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
| 737 | } | ||
| 738 | |||
| 739 | /*@ | ||
| 740 | EPSSetConvergenceTestFunction - Sets a function to compute the error estimate | ||
| 741 | used in the convergence test. | ||
| 742 | |||
| 743 | Logically Collective | ||
| 744 | |||
| 745 | Input Parameters: | ||
| 746 | + eps - the linear eigensolver context | ||
| 747 | . func - convergence test function, see `EPSConvergenceTestFn` for the calling sequence | ||
| 748 | . ctx - context for private data for the convergence routine (may be `NULL`) | ||
| 749 | - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn` | ||
| 750 | for the calling sequence | ||
| 751 | |||
| 752 | Notes: | ||
| 753 | When this is called with a user-defined function, then the convergence | ||
| 754 | criterion is set to `EPS_CONV_USER`, see `EPSSetConvergenceTest()`. | ||
| 755 | |||
| 756 | If the error estimate returned by the convergence test function is less than | ||
| 757 | the tolerance, then the eigenvalue is accepted as converged. | ||
| 758 | |||
| 759 | Level: advanced | ||
| 760 | |||
| 761 | .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSSetTolerances()` | ||
| 762 | @*/ | ||
| 763 | 403 | PetscErrorCode EPSSetConvergenceTestFunction(EPS eps,EPSConvergenceTestFn *func,PetscCtx ctx,PetscCtxDestroyFn *destroy) | |
| 764 | { | ||
| 765 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
403 | PetscFunctionBegin; |
| 766 |
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.
|
403 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 767 |
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.
|
403 | if (eps->convergeddestroy) PetscCall((*eps->convergeddestroy)(&eps->convergedctx)); |
| 768 | 403 | eps->convergeduser = func; | |
| 769 | 403 | eps->convergeddestroy = destroy; | |
| 770 | 403 | eps->convergedctx = ctx; | |
| 771 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
403 | if (func == EPSConvergedRelative) eps->conv = EPS_CONV_REL; |
| 772 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
403 | else if (func == EPSConvergedNorm) eps->conv = EPS_CONV_NORM; |
| 773 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
403 | else if (func == EPSConvergedAbsolute) eps->conv = EPS_CONV_ABS; |
| 774 | else { | ||
| 775 | 403 | eps->conv = EPS_CONV_USER; | |
| 776 | 403 | eps->converged = eps->convergeduser; | |
| 777 | } | ||
| 778 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
73 | PetscFunctionReturn(PETSC_SUCCESS); |
| 779 | } | ||
| 780 | |||
| 781 | /*@ | ||
| 782 | EPSSetConvergenceTest - Specifies how to compute the error estimate | ||
| 783 | used in the convergence test. | ||
| 784 | |||
| 785 | Logically Collective | ||
| 786 | |||
| 787 | Input Parameters: | ||
| 788 | + eps - the linear eigensolver context | ||
| 789 | - conv - the type of convergence test, see `EPSConv` for possible values | ||
| 790 | |||
| 791 | Options Database Keys: | ||
| 792 | + -eps_conv_abs - sets the absolute convergence test | ||
| 793 | . -eps_conv_rel - sets the convergence test relative to the eigenvalue | ||
| 794 | . -eps_conv_norm - sets the convergence test relative to the matrix norms | ||
| 795 | - -eps_conv_user - selects the user-defined convergence test | ||
| 796 | |||
| 797 | Level: intermediate | ||
| 798 | |||
| 799 | .seealso: [](ch:eps), `EPSGetConvergenceTest()`, `EPSSetConvergenceTestFunction()`, `EPSSetStoppingTest()`, `EPSConv` | ||
| 800 | @*/ | ||
| 801 | 1722 | PetscErrorCode EPSSetConvergenceTest(EPS eps,EPSConv conv) | |
| 802 | { | ||
| 803 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1722 | PetscFunctionBegin; |
| 804 |
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.
|
1722 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 805 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
1722 | PetscValidLogicalCollectiveEnum(eps,conv,2); |
| 806 |
3/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1722 | switch (conv) { |
| 807 | 277 | case EPS_CONV_ABS: eps->converged = EPSConvergedAbsolute; break; | |
| 808 | 879 | case EPS_CONV_REL: eps->converged = EPSConvergedRelative; break; | |
| 809 | 566 | case EPS_CONV_NORM: eps->converged = EPSConvergedNorm; break; | |
| 810 | ✗ | case EPS_CONV_USER: | |
| 811 | ✗ | PetscCheck(eps->convergeduser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetConvergenceTestFunction() first"); | |
| 812 | ✗ | eps->converged = eps->convergeduser; | |
| 813 | ✗ | break; | |
| 814 | ✗ | default: | |
| 815 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'conv' value"); | |
| 816 | } | ||
| 817 | 1722 | eps->conv = conv; | |
| 818 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
1722 | PetscFunctionReturn(PETSC_SUCCESS); |
| 819 | } | ||
| 820 | |||
| 821 | /*@ | ||
| 822 | EPSGetConvergenceTest - Gets the method used to compute the error estimate | ||
| 823 | used in the convergence test. | ||
| 824 | |||
| 825 | Not Collective | ||
| 826 | |||
| 827 | Input Parameter: | ||
| 828 | . eps - the linear eigensolver context | ||
| 829 | |||
| 830 | Output Parameter: | ||
| 831 | . conv - the type of convergence test | ||
| 832 | |||
| 833 | Level: intermediate | ||
| 834 | |||
| 835 | .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSConv` | ||
| 836 | @*/ | ||
| 837 | 16 | PetscErrorCode EPSGetConvergenceTest(EPS eps,EPSConv *conv) | |
| 838 | { | ||
| 839 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
16 | PetscFunctionBegin; |
| 840 |
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.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 841 |
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.
|
16 | PetscAssertPointer(conv,2); |
| 842 | 16 | *conv = eps->conv; | |
| 843 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 844 | } | ||
| 845 | |||
| 846 | /*@ | ||
| 847 | EPSSetStoppingTestFunction - Sets a function to decide when to stop the outer | ||
| 848 | iteration of the eigensolver. | ||
| 849 | |||
| 850 | Logically Collective | ||
| 851 | |||
| 852 | Input Parameters: | ||
| 853 | + eps - the linear eigensolver context | ||
| 854 | . func - stopping test function, see `EPSStoppingTestFn` for the calling sequence | ||
| 855 | . ctx - context for private data for the stopping routine (may be `NULL`) | ||
| 856 | - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn` | ||
| 857 | for the calling sequence | ||
| 858 | |||
| 859 | Note: | ||
| 860 | When implementing a function for this, normal usage is to first call the | ||
| 861 | default routine `EPSStoppingBasic()` and then set `reason` to `EPS_CONVERGED_USER` | ||
| 862 | if some user-defined conditions have been met. To let the eigensolver continue | ||
| 863 | iterating, the result must be left as `EPS_CONVERGED_ITERATING`. | ||
| 864 | |||
| 865 | Level: advanced | ||
| 866 | |||
| 867 | .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStoppingBasic()` | ||
| 868 | @*/ | ||
| 869 | 397 | PetscErrorCode EPSSetStoppingTestFunction(EPS eps,EPSStoppingTestFn *func,PetscCtx ctx,PetscCtxDestroyFn *destroy) | |
| 870 | { | ||
| 871 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
397 | PetscFunctionBegin; |
| 872 |
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.
|
397 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 873 |
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.
|
397 | if (eps->stoppingdestroy) PetscCall((*eps->stoppingdestroy)(&eps->stoppingctx)); |
| 874 | 397 | eps->stoppinguser = func; | |
| 875 | 397 | eps->stoppingdestroy = destroy; | |
| 876 | 397 | eps->stoppingctx = ctx; | |
| 877 |
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.
|
397 | if (func == EPSStoppingBasic) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC)); |
| 878 |
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.
|
397 | else if (func == EPSStoppingThreshold) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 879 | else { | ||
| 880 | 20 | eps->stop = EPS_STOP_USER; | |
| 881 | 20 | eps->stopping = eps->stoppinguser; | |
| 882 | } | ||
| 883 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
81 | PetscFunctionReturn(PETSC_SUCCESS); |
| 884 | } | ||
| 885 | |||
| 886 | /*@ | ||
| 887 | EPSSetStoppingTest - Specifies how to decide the termination of the outer | ||
| 888 | loop of the eigensolver. | ||
| 889 | |||
| 890 | Logically Collective | ||
| 891 | |||
| 892 | Input Parameters: | ||
| 893 | + eps - the linear eigensolver context | ||
| 894 | - stop - the type of stopping test, see `EPSStop` | ||
| 895 | |||
| 896 | Options Database Keys: | ||
| 897 | + -eps_stop_basic - sets the default stopping test | ||
| 898 | . -eps_stop_threshold - sets the threshold stopping test | ||
| 899 | - -eps_stop_user - selects the user-defined stopping test | ||
| 900 | |||
| 901 | Level: advanced | ||
| 902 | |||
| 903 | .seealso: [](ch:eps), `EPSGetStoppingTest()`, `EPSSetStoppingTestFunction()`, `EPSSetConvergenceTest()`, `EPSStop` | ||
| 904 | @*/ | ||
| 905 | 770 | PetscErrorCode EPSSetStoppingTest(EPS eps,EPSStop stop) | |
| 906 | { | ||
| 907 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
770 | PetscFunctionBegin; |
| 908 |
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.
|
770 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 909 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
770 | PetscValidLogicalCollectiveEnum(eps,stop,2); |
| 910 |
2/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
770 | switch (stop) { |
| 911 | 16 | case EPS_STOP_BASIC: eps->stopping = EPSStoppingBasic; break; | |
| 912 | 754 | case EPS_STOP_THRESHOLD: eps->stopping = EPSStoppingThreshold; break; | |
| 913 | ✗ | case EPS_STOP_USER: | |
| 914 | ✗ | PetscCheck(eps->stoppinguser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetStoppingTestFunction() first"); | |
| 915 | ✗ | eps->stopping = eps->stoppinguser; | |
| 916 | ✗ | break; | |
| 917 | ✗ | default: | |
| 918 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'stop' value"); | |
| 919 | } | ||
| 920 | 770 | eps->stop = stop; | |
| 921 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
770 | PetscFunctionReturn(PETSC_SUCCESS); |
| 922 | } | ||
| 923 | |||
| 924 | /*@ | ||
| 925 | EPSGetStoppingTest - Gets the method used to decide the termination of the outer | ||
| 926 | loop of the eigensolver. | ||
| 927 | |||
| 928 | Not Collective | ||
| 929 | |||
| 930 | Input Parameter: | ||
| 931 | . eps - the linear eigensolver context | ||
| 932 | |||
| 933 | Output Parameter: | ||
| 934 | . stop - the type of stopping test | ||
| 935 | |||
| 936 | Level: advanced | ||
| 937 | |||
| 938 | .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStop` | ||
| 939 | @*/ | ||
| 940 | 289 | PetscErrorCode EPSGetStoppingTest(EPS eps,EPSStop *stop) | |
| 941 | { | ||
| 942 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
289 | PetscFunctionBegin; |
| 943 |
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.
|
289 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 944 |
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.
|
289 | PetscAssertPointer(stop,2); |
| 945 | 289 | *stop = eps->stop; | |
| 946 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
289 | PetscFunctionReturn(PETSC_SUCCESS); |
| 947 | } | ||
| 948 | |||
| 949 | /*@ | ||
| 950 | EPSSetProblemType - Specifies the type of the eigenvalue problem. | ||
| 951 | |||
| 952 | Logically Collective | ||
| 953 | |||
| 954 | Input Parameters: | ||
| 955 | + eps - the linear eigensolver context | ||
| 956 | - type - a known type of eigenvalue problem | ||
| 957 | |||
| 958 | Options Database Keys: | ||
| 959 | + -eps_hermitian - Hermitian eigenvalue problem | ||
| 960 | . -eps_gen_hermitian - generalized Hermitian eigenvalue problem | ||
| 961 | . -eps_non_hermitian - non-Hermitian eigenvalue problem | ||
| 962 | . -eps_gen_non_hermitian - generalized non-Hermitian eigenvalue problem | ||
| 963 | . -eps_pos_gen_non_hermitian - generalized non-Hermitian eigenvalue problem | ||
| 964 | with positive semi-definite $B$ | ||
| 965 | . -eps_gen_indefinite - generalized Hermitian-indefinite eigenvalue problem | ||
| 966 | . -eps_bse - structured Bethe-Salpeter eigenvalue problem | ||
| 967 | . -eps_hamiltonian - structured Hamiltonian eigenvalue problem | ||
| 968 | - -eps_lrep - structured Linear Response eigenvalue problem | ||
| 969 | |||
| 970 | Notes: | ||
| 971 | This function must be used to instruct SLEPc to exploit symmetry or other | ||
| 972 | kind of structure. If no | ||
| 973 | problem type is specified, by default a non-Hermitian problem is assumed | ||
| 974 | (either standard or generalized). If the user knows that the problem is | ||
| 975 | Hermitian (i.e., $A=A^*$) or generalized Hermitian (i.e., $A=A^*$, $B=B^*$, | ||
| 976 | and $B$ positive definite) then it is recommended to set the problem type so | ||
| 977 | that the eigensolver can exploit these properties. | ||
| 978 | |||
| 979 | If the user does not call this function, the solver will use a reasonable | ||
| 980 | guess. | ||
| 981 | |||
| 982 | For structured problem types such as `EPS_BSE`, the matrices passed in via | ||
| 983 | `EPSSetOperators()` must have been created with the corresponding helper | ||
| 984 | function, i.e., `MatCreateBSE()`. | ||
| 985 | |||
| 986 | Level: intermediate | ||
| 987 | |||
| 988 | .seealso: [](ch:eps), `EPSSetOperators()`, `EPSSetType()`, `EPSGetProblemType()`, `EPSProblemType` | ||
| 989 | @*/ | ||
| 990 | 8091 | PetscErrorCode EPSSetProblemType(EPS eps,EPSProblemType type) | |
| 991 | { | ||
| 992 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
8091 | PetscFunctionBegin; |
| 993 |
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.
|
8091 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 994 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
8091 | PetscValidLogicalCollectiveEnum(eps,type,2); |
| 995 |
9/16✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
8091 | if (type == eps->problem_type) PetscFunctionReturn(PETSC_SUCCESS); |
| 996 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
|
7823 | switch (type) { |
| 997 | 2805 | case EPS_HEP: | |
| 998 | 2805 | eps->isgeneralized = PETSC_FALSE; | |
| 999 | 2805 | eps->ishermitian = PETSC_TRUE; | |
| 1000 | 2805 | eps->ispositive = PETSC_FALSE; | |
| 1001 | 2805 | eps->isstructured = PETSC_FALSE; | |
| 1002 | 2805 | break; | |
| 1003 | 1802 | case EPS_NHEP: | |
| 1004 | 1802 | eps->isgeneralized = PETSC_FALSE; | |
| 1005 | 1802 | eps->ishermitian = PETSC_FALSE; | |
| 1006 | 1802 | eps->ispositive = PETSC_FALSE; | |
| 1007 | 1802 | eps->isstructured = PETSC_FALSE; | |
| 1008 | 1802 | break; | |
| 1009 | 1419 | case EPS_GHEP: | |
| 1010 | 1419 | eps->isgeneralized = PETSC_TRUE; | |
| 1011 | 1419 | eps->ishermitian = PETSC_TRUE; | |
| 1012 | 1419 | eps->ispositive = PETSC_TRUE; | |
| 1013 | 1419 | eps->isstructured = PETSC_FALSE; | |
| 1014 | 1419 | break; | |
| 1015 | 703 | case EPS_GNHEP: | |
| 1016 | 703 | eps->isgeneralized = PETSC_TRUE; | |
| 1017 | 703 | eps->ishermitian = PETSC_FALSE; | |
| 1018 | 703 | eps->ispositive = PETSC_FALSE; | |
| 1019 | 703 | eps->isstructured = PETSC_FALSE; | |
| 1020 | 703 | break; | |
| 1021 | 31 | case EPS_PGNHEP: | |
| 1022 | 31 | eps->isgeneralized = PETSC_TRUE; | |
| 1023 | 31 | eps->ishermitian = PETSC_FALSE; | |
| 1024 | 31 | eps->ispositive = PETSC_TRUE; | |
| 1025 | 31 | eps->isstructured = PETSC_FALSE; | |
| 1026 | 31 | break; | |
| 1027 | 155 | case EPS_GHIEP: | |
| 1028 | 155 | eps->isgeneralized = PETSC_TRUE; | |
| 1029 | 155 | eps->ishermitian = PETSC_TRUE; | |
| 1030 | 155 | eps->ispositive = PETSC_FALSE; | |
| 1031 | 155 | eps->isstructured = PETSC_FALSE; | |
| 1032 | 155 | break; | |
| 1033 | 505 | case EPS_BSE: | |
| 1034 | 505 | eps->isgeneralized = PETSC_FALSE; | |
| 1035 | 505 | eps->ishermitian = PETSC_FALSE; | |
| 1036 | 505 | eps->ispositive = PETSC_FALSE; | |
| 1037 | 505 | eps->isstructured = PETSC_TRUE; | |
| 1038 | 505 | break; | |
| 1039 | 95 | case EPS_HAMILT: | |
| 1040 | 95 | eps->isgeneralized = PETSC_FALSE; | |
| 1041 | 95 | eps->ishermitian = PETSC_FALSE; | |
| 1042 | 95 | eps->ispositive = PETSC_FALSE; | |
| 1043 | 95 | eps->isstructured = PETSC_TRUE; | |
| 1044 | 95 | break; | |
| 1045 | 308 | case EPS_LREP: | |
| 1046 | 308 | eps->isgeneralized = PETSC_FALSE; | |
| 1047 | 308 | eps->ishermitian = PETSC_FALSE; | |
| 1048 | 308 | eps->ispositive = PETSC_FALSE; | |
| 1049 | 308 | eps->isstructured = PETSC_TRUE; | |
| 1050 | 308 | break; | |
| 1051 | ✗ | default: | |
| 1052 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"Unknown eigenvalue problem type"); | |
| 1053 | } | ||
| 1054 | 7823 | eps->problem_type = type; | |
| 1055 | 7823 | eps->state = EPS_STATE_INITIAL; | |
| 1056 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
7823 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1057 | } | ||
| 1058 | |||
| 1059 | /*@ | ||
| 1060 | EPSGetProblemType - Gets the problem type from the `EPS` object. | ||
| 1061 | |||
| 1062 | Not Collective | ||
| 1063 | |||
| 1064 | Input Parameter: | ||
| 1065 | . eps - the linear eigensolver context | ||
| 1066 | |||
| 1067 | Output Parameter: | ||
| 1068 | . type - the problem type | ||
| 1069 | |||
| 1070 | Level: intermediate | ||
| 1071 | |||
| 1072 | .seealso: [](ch:eps), `EPSSetProblemType()`, `EPSProblemType` | ||
| 1073 | @*/ | ||
| 1074 | 790 | PetscErrorCode EPSGetProblemType(EPS eps,EPSProblemType *type) | |
| 1075 | { | ||
| 1076 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
790 | PetscFunctionBegin; |
| 1077 |
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.
|
790 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1078 |
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.
|
790 | PetscAssertPointer(type,2); |
| 1079 | 790 | *type = eps->problem_type; | |
| 1080 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
790 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1081 | } | ||
| 1082 | |||
| 1083 | /*@ | ||
| 1084 | EPSSetExtraction - Specifies the type of extraction technique to be employed | ||
| 1085 | by the eigensolver. | ||
| 1086 | |||
| 1087 | Logically Collective | ||
| 1088 | |||
| 1089 | Input Parameters: | ||
| 1090 | + eps - the linear eigensolver context | ||
| 1091 | - extr - a known type of extraction | ||
| 1092 | |||
| 1093 | Options Database Keys: | ||
| 1094 | + -eps_ritz - Rayleigh-Ritz extraction | ||
| 1095 | . -eps_harmonic - harmonic Ritz extraction | ||
| 1096 | . -eps_harmonic_relative - harmonic Ritz extraction relative to the eigenvalue | ||
| 1097 | . -eps_harmonic_right - harmonic Ritz extraction for rightmost eigenvalues | ||
| 1098 | . -eps_harmonic_largest - harmonic Ritz extraction for largest magnitude (without target) | ||
| 1099 | . -eps_refined - refined Ritz extraction | ||
| 1100 | - -eps_refined_harmonic - refined harmonic Ritz extraction | ||
| 1101 | |||
| 1102 | Notes: | ||
| 1103 | Not all eigensolvers support all types of extraction. | ||
| 1104 | |||
| 1105 | By default, a standard Rayleigh-Ritz extraction is used. Other extractions | ||
| 1106 | may be useful when computing interior eigenvalues. | ||
| 1107 | |||
| 1108 | Harmonic-type extractions are used in combination with a target, see `EPSSetTarget()`. | ||
| 1109 | |||
| 1110 | Level: advanced | ||
| 1111 | |||
| 1112 | .seealso: [](ch:eps), [](#sec:harmonic), `EPSSetTarget()`, `EPSGetExtraction()`, `EPSExtraction` | ||
| 1113 | @*/ | ||
| 1114 | 142 | PetscErrorCode EPSSetExtraction(EPS eps,EPSExtraction extr) | |
| 1115 | { | ||
| 1116 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
142 | PetscFunctionBegin; |
| 1117 |
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.
|
142 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1118 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
142 | PetscValidLogicalCollectiveEnum(eps,extr,2); |
| 1119 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
142 | if (eps->extraction != extr) { |
| 1120 | 142 | eps->state = EPS_STATE_INITIAL; | |
| 1121 | 142 | eps->extraction = extr; | |
| 1122 | } | ||
| 1123 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
142 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1124 | } | ||
| 1125 | |||
| 1126 | /*@ | ||
| 1127 | EPSGetExtraction - Gets the extraction type used by the `EPS` object. | ||
| 1128 | |||
| 1129 | Not Collective | ||
| 1130 | |||
| 1131 | Input Parameter: | ||
| 1132 | . eps - the linear eigensolver context | ||
| 1133 | |||
| 1134 | Output Parameter: | ||
| 1135 | . extr - name of extraction type | ||
| 1136 | |||
| 1137 | Level: advanced | ||
| 1138 | |||
| 1139 | .seealso: [](ch:eps), `EPSSetExtraction()`, `EPSExtraction` | ||
| 1140 | @*/ | ||
| 1141 | 32 | PetscErrorCode EPSGetExtraction(EPS eps,EPSExtraction *extr) | |
| 1142 | { | ||
| 1143 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
32 | PetscFunctionBegin; |
| 1144 |
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.
|
32 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1145 |
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.
|
32 | PetscAssertPointer(extr,2); |
| 1146 | 32 | *extr = eps->extraction; | |
| 1147 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
32 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1148 | } | ||
| 1149 | |||
| 1150 | /*@ | ||
| 1151 | EPSSetBalance - Specifies the balancing technique to be employed by the | ||
| 1152 | eigensolver, and some parameters associated to it. | ||
| 1153 | |||
| 1154 | Logically Collective | ||
| 1155 | |||
| 1156 | Input Parameters: | ||
| 1157 | + eps - the linear eigensolver context | ||
| 1158 | . bal - the balancing method, see `EPSBalance` for possible values | ||
| 1159 | . its - number of iterations of the balancing algorithm | ||
| 1160 | - cutoff - cutoff value | ||
| 1161 | |||
| 1162 | Options Database Keys: | ||
| 1163 | + -eps_balance (none|oneside|twoside|user) - the balancing method | ||
| 1164 | . -eps_balance_its its - number of iterations | ||
| 1165 | - -eps_balance_cutoff cutoff - cutoff value | ||
| 1166 | |||
| 1167 | Notes: | ||
| 1168 | When balancing is enabled, the solver works implicitly with matrix $DAD^{-1}$, | ||
| 1169 | where $D$ is an appropriate diagonal matrix. This improves the accuracy of | ||
| 1170 | the computed results in some cases, see [](sec:balancing). | ||
| 1171 | |||
| 1172 | Balancing makes sense only for non-Hermitian problems when the required | ||
| 1173 | precision is high (i.e., a small tolerance such as `1e-14`). | ||
| 1174 | |||
| 1175 | By default, balancing is disabled. The two-sided method is much more | ||
| 1176 | effective than the one-sided counterpart, but it requires the system | ||
| 1177 | matrices to have the `MatMultTranspose()` operation defined. The methods | ||
| 1178 | are described in {cite:p}`Che00`. | ||
| 1179 | |||
| 1180 | The parameter `its` is the number of iterations performed by the method. The | ||
| 1181 | `cutoff` value is used only in the two-side variant. Use `PETSC_DETERMINE` to assign | ||
| 1182 | a reasonably good value, or `PETSC_CURRENT` to leave the value unchanged. | ||
| 1183 | |||
| 1184 | User-defined balancing is allowed provided that the corresponding matrix | ||
| 1185 | is set via `STSetBalanceMatrix()`. | ||
| 1186 | |||
| 1187 | Level: intermediate | ||
| 1188 | |||
| 1189 | .seealso: [](ch:eps), [](sec:balancing), `EPSGetBalance()`, `EPSBalance`, `STSetBalanceMatrix()` | ||
| 1190 | @*/ | ||
| 1191 | 166 | PetscErrorCode EPSSetBalance(EPS eps,EPSBalance bal,PetscInt its,PetscReal cutoff) | |
| 1192 | { | ||
| 1193 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
166 | PetscFunctionBegin; |
| 1194 |
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.
|
166 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1195 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
166 | PetscValidLogicalCollectiveEnum(eps,bal,2); |
| 1196 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
166 | PetscValidLogicalCollectiveInt(eps,its,3); |
| 1197 |
33/74✗ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ 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 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 not taken.
✓ Branch 37 taken 2 times.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ Branch 41 not taken.
✓ Branch 42 taken 2 times.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✓ Branch 53 taken 2 times.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✓ Branch 58 taken 2 times.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 2 times.
✗ Branch 69 not taken.
✗ Branch 70 not taken.
✓ Branch 71 taken 2 times.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
|
166 | PetscValidLogicalCollectiveReal(eps,cutoff,4); |
| 1198 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | switch (bal) { |
| 1199 | 166 | case EPS_BALANCE_NONE: | |
| 1200 | case EPS_BALANCE_ONESIDE: | ||
| 1201 | case EPS_BALANCE_TWOSIDE: | ||
| 1202 | case EPS_BALANCE_USER: | ||
| 1203 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
166 | if (eps->balance != bal) { |
| 1204 | 146 | eps->state = EPS_STATE_INITIAL; | |
| 1205 | 146 | eps->balance = bal; | |
| 1206 | } | ||
| 1207 | 166 | break; | |
| 1208 | ✗ | default: | |
| 1209 | − | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid value of argument 'bal'"); | |
| 1210 | } | ||
| 1211 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
166 | if (its==PETSC_DETERMINE) eps->balance_its = 5; |
| 1212 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | else if (its!=PETSC_CURRENT) { |
| 1213 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
166 | PetscCheck(its>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of its. Must be > 0"); |
| 1214 | 166 | eps->balance_its = its; | |
| 1215 | } | ||
| 1216 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
166 | if (cutoff==(PetscReal)PETSC_DETERMINE) eps->balance_cutoff = 1e-8; |
| 1217 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | else if (cutoff!=(PetscReal)PETSC_CURRENT) { |
| 1218 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
166 | PetscCheck(cutoff>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of cutoff. Must be > 0"); |
| 1219 | 166 | eps->balance_cutoff = cutoff; | |
| 1220 | } | ||
| 1221 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
32 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1222 | } | ||
| 1223 | |||
| 1224 | /*@ | ||
| 1225 | EPSGetBalance - Gets the balancing type used by the `EPS` object, and the | ||
| 1226 | associated parameters. | ||
| 1227 | |||
| 1228 | Not Collective | ||
| 1229 | |||
| 1230 | Input Parameter: | ||
| 1231 | . eps - the linear eigensolver context | ||
| 1232 | |||
| 1233 | Output Parameters: | ||
| 1234 | + bal - the balancing method | ||
| 1235 | . its - number of iterations of the balancing algorithm | ||
| 1236 | - cutoff - cutoff value | ||
| 1237 | |||
| 1238 | Level: intermediate | ||
| 1239 | |||
| 1240 | Note: | ||
| 1241 | The user can specify `NULL` for any parameter that is not needed. | ||
| 1242 | |||
| 1243 | .seealso: [](ch:eps), `EPSSetBalance()`, `EPSBalance` | ||
| 1244 | @*/ | ||
| 1245 | 16 | PetscErrorCode EPSGetBalance(EPS eps,EPSBalance *bal,PetscInt *its,PetscReal *cutoff) | |
| 1246 | { | ||
| 1247 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
16 | PetscFunctionBegin; |
| 1248 |
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.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1249 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (bal) *bal = eps->balance; |
| 1250 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (its) *its = eps->balance_its; |
| 1251 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (cutoff) *cutoff = eps->balance_cutoff; |
| 1252 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1253 | } | ||
| 1254 | |||
| 1255 | /*@ | ||
| 1256 | EPSSetTwoSided - Sets the solver to use a two-sided variant so that left | ||
| 1257 | eigenvectors are also computed. | ||
| 1258 | |||
| 1259 | Logically Collective | ||
| 1260 | |||
| 1261 | Input Parameters: | ||
| 1262 | + eps - the linear eigensolver context | ||
| 1263 | - twosided - whether the two-sided variant is to be used or not | ||
| 1264 | |||
| 1265 | Options Database Key: | ||
| 1266 | . -eps_two_sided (true|false) - toggles the twosided flag | ||
| 1267 | |||
| 1268 | Notes: | ||
| 1269 | If the user sets `twosided`=`PETSC_TRUE` then the solver uses a variant of | ||
| 1270 | the algorithm that computes both right and left eigenvectors. This is | ||
| 1271 | usually much more costly. This option is not available in all solvers, | ||
| 1272 | see table [](#tab:support). | ||
| 1273 | |||
| 1274 | When using two-sided solvers, the problem matrices must have both the | ||
| 1275 | `MATOP_MULT` and `MATOP_MULT_TRANSPOSE` operations defined. | ||
| 1276 | |||
| 1277 | Level: advanced | ||
| 1278 | |||
| 1279 | .seealso: [](ch:eps), `EPSGetTwoSided()`, `EPSGetLeftEigenvector()` | ||
| 1280 | @*/ | ||
| 1281 | 318 | PetscErrorCode EPSSetTwoSided(EPS eps,PetscBool twosided) | |
| 1282 | { | ||
| 1283 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
318 | PetscFunctionBegin; |
| 1284 |
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.
|
318 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1285 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
318 | PetscValidLogicalCollectiveBool(eps,twosided,2); |
| 1286 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
318 | if (twosided!=eps->twosided) { |
| 1287 | 209 | eps->twosided = twosided; | |
| 1288 | 209 | eps->state = EPS_STATE_INITIAL; | |
| 1289 | } | ||
| 1290 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
318 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1291 | } | ||
| 1292 | |||
| 1293 | /*@ | ||
| 1294 | EPSGetTwoSided - Returns the flag indicating whether a two-sided variant | ||
| 1295 | of the algorithm is being used or not. | ||
| 1296 | |||
| 1297 | Not Collective | ||
| 1298 | |||
| 1299 | Input Parameter: | ||
| 1300 | . eps - the linear eigensolver context | ||
| 1301 | |||
| 1302 | Output Parameter: | ||
| 1303 | . twosided - the returned flag | ||
| 1304 | |||
| 1305 | Level: advanced | ||
| 1306 | |||
| 1307 | .seealso: [](ch:eps), `EPSSetTwoSided()` | ||
| 1308 | @*/ | ||
| 1309 | 68 | PetscErrorCode EPSGetTwoSided(EPS eps,PetscBool *twosided) | |
| 1310 | { | ||
| 1311 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
68 | PetscFunctionBegin; |
| 1312 |
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.
|
68 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1313 |
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.
|
68 | PetscAssertPointer(twosided,2); |
| 1314 | 68 | *twosided = eps->twosided; | |
| 1315 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
68 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1316 | } | ||
| 1317 | |||
| 1318 | /*@ | ||
| 1319 | EPSSetTrueResidual - Specifies if the solver must compute the true residual | ||
| 1320 | explicitly or not. | ||
| 1321 | |||
| 1322 | Logically Collective | ||
| 1323 | |||
| 1324 | Input Parameters: | ||
| 1325 | + eps - the linear eigensolver context | ||
| 1326 | - trueres - whether true residuals are required or not | ||
| 1327 | |||
| 1328 | Options Database Key: | ||
| 1329 | . -eps_true_residual (true|false) - toggles the true residual | ||
| 1330 | |||
| 1331 | Notes: | ||
| 1332 | If the user sets `trueres`=`PETSC_TRUE` then the solver explicitly computes | ||
| 1333 | the true residual for each eigenpair approximation, and uses it for | ||
| 1334 | convergence testing. Computing the residual is usually an expensive | ||
| 1335 | operation. Some solvers (e.g., Krylov solvers) can avoid this computation | ||
| 1336 | by using a cheap estimate of the residual norm, but this may sometimes | ||
| 1337 | give inaccurate results (especially if a spectral transform is being | ||
| 1338 | used). On the contrary, preconditioned eigensolvers (e.g., Davidson solvers) | ||
| 1339 | do rely on computing the true residual, so this option is irrelevant for them. | ||
| 1340 | |||
| 1341 | Level: advanced | ||
| 1342 | |||
| 1343 | .seealso: [](ch:eps), `EPSGetTrueResidual()` | ||
| 1344 | @*/ | ||
| 1345 | 90 | PetscErrorCode EPSSetTrueResidual(EPS eps,PetscBool trueres) | |
| 1346 | { | ||
| 1347 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
90 | PetscFunctionBegin; |
| 1348 |
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.
|
90 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1349 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
90 | PetscValidLogicalCollectiveBool(eps,trueres,2); |
| 1350 | 90 | eps->trueres = trueres; | |
| 1351 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
90 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1352 | } | ||
| 1353 | |||
| 1354 | /*@ | ||
| 1355 | EPSGetTrueResidual - Returns the flag indicating whether true | ||
| 1356 | residuals must be computed explicitly or not. | ||
| 1357 | |||
| 1358 | Not Collective | ||
| 1359 | |||
| 1360 | Input Parameter: | ||
| 1361 | . eps - the linear eigensolver context | ||
| 1362 | |||
| 1363 | Output Parameter: | ||
| 1364 | . trueres - the returned flag | ||
| 1365 | |||
| 1366 | Level: advanced | ||
| 1367 | |||
| 1368 | .seealso: [](ch:eps), `EPSSetTrueResidual()` | ||
| 1369 | @*/ | ||
| 1370 | 80 | PetscErrorCode EPSGetTrueResidual(EPS eps,PetscBool *trueres) | |
| 1371 | { | ||
| 1372 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
80 | PetscFunctionBegin; |
| 1373 |
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.
|
80 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1374 |
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.
|
80 | PetscAssertPointer(trueres,2); |
| 1375 | 80 | *trueres = eps->trueres; | |
| 1376 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1377 | } | ||
| 1378 | |||
| 1379 | /*@ | ||
| 1380 | EPSSetTrackAll - Specifies if the solver must compute the residual norm of all | ||
| 1381 | approximate eigenpairs or not. | ||
| 1382 | |||
| 1383 | Logically Collective | ||
| 1384 | |||
| 1385 | Input Parameters: | ||
| 1386 | + eps - the linear eigensolver context | ||
| 1387 | - trackall - whether to compute all residuals or not | ||
| 1388 | |||
| 1389 | Notes: | ||
| 1390 | If the user sets `trackall`=`PETSC_TRUE` then the solver computes (or estimates) | ||
| 1391 | the residual norm for each eigenpair approximation. Computing the residual is | ||
| 1392 | usually an expensive operation and solvers commonly compute only the residual | ||
| 1393 | associated to the first unconverged eigenpair. | ||
| 1394 | |||
| 1395 | The option `-eps_monitor_all` automatically activates this option. | ||
| 1396 | |||
| 1397 | Level: developer | ||
| 1398 | |||
| 1399 | .seealso: [](ch:eps), `EPSGetTrackAll()` | ||
| 1400 | @*/ | ||
| 1401 | 1527 | PetscErrorCode EPSSetTrackAll(EPS eps,PetscBool trackall) | |
| 1402 | { | ||
| 1403 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1527 | PetscFunctionBegin; |
| 1404 |
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.
|
1527 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1405 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
1527 | PetscValidLogicalCollectiveBool(eps,trackall,2); |
| 1406 | 1527 | eps->trackall = trackall; | |
| 1407 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
1527 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1408 | } | ||
| 1409 | |||
| 1410 | /*@ | ||
| 1411 | EPSGetTrackAll - Returns the flag indicating whether all residual norms must | ||
| 1412 | be computed or not. | ||
| 1413 | |||
| 1414 | Not Collective | ||
| 1415 | |||
| 1416 | Input Parameter: | ||
| 1417 | . eps - the linear eigensolver context | ||
| 1418 | |||
| 1419 | Output Parameter: | ||
| 1420 | . trackall - the returned flag | ||
| 1421 | |||
| 1422 | Level: developer | ||
| 1423 | |||
| 1424 | .seealso: [](ch:eps), `EPSSetTrackAll()` | ||
| 1425 | @*/ | ||
| 1426 | 10 | PetscErrorCode EPSGetTrackAll(EPS eps,PetscBool *trackall) | |
| 1427 | { | ||
| 1428 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
10 | PetscFunctionBegin; |
| 1429 |
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(eps,EPS_CLASSID,1); |
| 1430 |
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.
|
10 | PetscAssertPointer(trackall,2); |
| 1431 | 10 | *trackall = eps->trackall; | |
| 1432 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1433 | } | ||
| 1434 | |||
| 1435 | /*@ | ||
| 1436 | EPSSetPurify - Disable eigenvector purification (which is enabled by default). | ||
| 1437 | |||
| 1438 | Logically Collective | ||
| 1439 | |||
| 1440 | Input Parameters: | ||
| 1441 | + eps - the linear eigensolver context | ||
| 1442 | - purify - whether purification is done or not, use `PETSC_FALSE` to disable it | ||
| 1443 | |||
| 1444 | Options Database Key: | ||
| 1445 | . -eps_purify (true|false) - toggles the purification flag | ||
| 1446 | |||
| 1447 | Notes: | ||
| 1448 | By default, eigenvectors of generalized symmetric eigenproblems are purified | ||
| 1449 | in order to purge directions in the nullspace of matrix $B$. If the user knows | ||
| 1450 | that $B$ is non-singular, then purification can be safely deactivated and some | ||
| 1451 | computational cost is avoided (this is particularly important in interval computations). | ||
| 1452 | |||
| 1453 | More details are given in section [](#sec:purif). | ||
| 1454 | |||
| 1455 | Level: intermediate | ||
| 1456 | |||
| 1457 | .seealso: [](ch:eps), [](#sec:purif), `EPSGetPurify()`, `EPSSetInterval()` | ||
| 1458 | @*/ | ||
| 1459 | 40 | PetscErrorCode EPSSetPurify(EPS eps,PetscBool purify) | |
| 1460 | { | ||
| 1461 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
40 | PetscFunctionBegin; |
| 1462 |
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.
|
40 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1463 |
31/70✓ 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 not taken.
✓ Branch 9 taken 2 times.
✓ 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 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 not taken.
✓ Branch 35 taken 2 times.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✗ 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 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✓ Branch 56 taken 2 times.
✗ Branch 57 not taken.
✓ Branch 58 taken 2 times.
✗ 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.
✗ Branch 66 not taken.
✓ Branch 67 taken 2 times.
✗ Branch 68 not taken.
✗ Branch 69 not taken.
|
40 | PetscValidLogicalCollectiveBool(eps,purify,2); |
| 1464 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
40 | if (purify!=eps->purify) { |
| 1465 | 20 | eps->purify = purify; | |
| 1466 | 20 | eps->state = EPS_STATE_INITIAL; | |
| 1467 | } | ||
| 1468 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1469 | } | ||
| 1470 | |||
| 1471 | /*@ | ||
| 1472 | EPSGetPurify - Returns the flag indicating whether purification is activated | ||
| 1473 | or not. | ||
| 1474 | |||
| 1475 | Not Collective | ||
| 1476 | |||
| 1477 | Input Parameter: | ||
| 1478 | . eps - the linear eigensolver context | ||
| 1479 | |||
| 1480 | Output Parameter: | ||
| 1481 | . purify - the returned flag | ||
| 1482 | |||
| 1483 | Level: intermediate | ||
| 1484 | |||
| 1485 | .seealso: [](ch:eps), `EPSSetPurify()` | ||
| 1486 | @*/ | ||
| 1487 | 10 | PetscErrorCode EPSGetPurify(EPS eps,PetscBool *purify) | |
| 1488 | { | ||
| 1489 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
10 | PetscFunctionBegin; |
| 1490 |
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(eps,EPS_CLASSID,1); |
| 1491 |
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.
|
10 | PetscAssertPointer(purify,2); |
| 1492 | 10 | *purify = eps->purify; | |
| 1493 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1494 | } | ||
| 1495 | |||
| 1496 | /*@ | ||
| 1497 | EPSSetOptionsPrefix - Sets the prefix used for searching for all | ||
| 1498 | `EPS` options in the database. | ||
| 1499 | |||
| 1500 | Logically Collective | ||
| 1501 | |||
| 1502 | Input Parameters: | ||
| 1503 | + eps - the linear eigensolver context | ||
| 1504 | - prefix - the prefix string to prepend to all `EPS` option requests | ||
| 1505 | |||
| 1506 | Notes: | ||
| 1507 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 1508 | The first character of all runtime options is AUTOMATICALLY the | ||
| 1509 | hyphen. | ||
| 1510 | |||
| 1511 | For example, to distinguish between the runtime options for two | ||
| 1512 | different `EPS` contexts, one could call | ||
| 1513 | .vb | ||
| 1514 | EPSSetOptionsPrefix(eps1,"eig1_") | ||
| 1515 | EPSSetOptionsPrefix(eps2,"eig2_") | ||
| 1516 | .ve | ||
| 1517 | |||
| 1518 | Level: advanced | ||
| 1519 | |||
| 1520 | .seealso: [](ch:eps), `EPSAppendOptionsPrefix()`, `EPSGetOptionsPrefix()` | ||
| 1521 | @*/ | ||
| 1522 | 2155 | PetscErrorCode EPSSetOptionsPrefix(EPS eps,const char prefix[]) | |
| 1523 | { | ||
| 1524 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2155 | PetscFunctionBegin; |
| 1525 |
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.
|
2155 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1526 |
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.
|
2155 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 1527 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2155 | PetscCall(STSetOptionsPrefix(eps->st,prefix)); |
| 1528 |
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.
|
2155 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 1529 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2155 | PetscCall(BVSetOptionsPrefix(eps->V,prefix)); |
| 1530 |
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.
|
2155 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 1531 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2155 | PetscCall(DSSetOptionsPrefix(eps->ds,prefix)); |
| 1532 |
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.
|
2155 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 1533 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2155 | PetscCall(RGSetOptionsPrefix(eps->rg,prefix)); |
| 1534 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2155 | PetscCall(PetscObjectSetOptionsPrefix((PetscObject)eps,prefix)); |
| 1535 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
420 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1536 | } | ||
| 1537 | |||
| 1538 | /*@ | ||
| 1539 | EPSAppendOptionsPrefix - Appends to the prefix used for searching for all | ||
| 1540 | `EPS` options in the database. | ||
| 1541 | |||
| 1542 | Logically Collective | ||
| 1543 | |||
| 1544 | Input Parameters: | ||
| 1545 | + eps - the linear eigensolver context | ||
| 1546 | - prefix - the prefix string to prepend to all `EPS` option requests | ||
| 1547 | |||
| 1548 | Notes: | ||
| 1549 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 1550 | The first character of all runtime options is AUTOMATICALLY the hyphen. | ||
| 1551 | |||
| 1552 | Level: advanced | ||
| 1553 | |||
| 1554 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSGetOptionsPrefix()` | ||
| 1555 | @*/ | ||
| 1556 | 1704 | PetscErrorCode EPSAppendOptionsPrefix(EPS eps,const char prefix[]) | |
| 1557 | { | ||
| 1558 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1704 | PetscFunctionBegin; |
| 1559 |
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.
|
1704 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1560 |
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.
|
1704 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 1561 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1704 | PetscCall(STAppendOptionsPrefix(eps->st,prefix)); |
| 1562 |
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.
|
1704 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 1563 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1704 | PetscCall(BVAppendOptionsPrefix(eps->V,prefix)); |
| 1564 |
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.
|
1704 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 1565 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1704 | PetscCall(DSAppendOptionsPrefix(eps->ds,prefix)); |
| 1566 |
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.
|
1704 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 1567 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1704 | PetscCall(RGAppendOptionsPrefix(eps->rg,prefix)); |
| 1568 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1704 | PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)eps,prefix)); |
| 1569 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
338 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1570 | } | ||
| 1571 | |||
| 1572 | /*@ | ||
| 1573 | EPSGetOptionsPrefix - Gets the prefix used for searching for all | ||
| 1574 | `EPS` options in the database. | ||
| 1575 | |||
| 1576 | Not Collective | ||
| 1577 | |||
| 1578 | Input Parameter: | ||
| 1579 | . eps - the linear eigensolver context | ||
| 1580 | |||
| 1581 | Output Parameter: | ||
| 1582 | . prefix - pointer to the prefix string used is returned | ||
| 1583 | |||
| 1584 | Level: advanced | ||
| 1585 | |||
| 1586 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSAppendOptionsPrefix()` | ||
| 1587 | @*/ | ||
| 1588 | 318 | PetscErrorCode EPSGetOptionsPrefix(EPS eps,const char *prefix[]) | |
| 1589 | { | ||
| 1590 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
318 | PetscFunctionBegin; |
| 1591 |
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.
|
318 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1592 |
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.
|
318 | PetscAssertPointer(prefix,2); |
| 1593 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
318 | PetscCall(PetscObjectGetOptionsPrefix((PetscObject)eps,prefix)); |
| 1594 |
7/14✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
54 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1595 | } | ||
| 1596 |